domingo, mayo 02, 2010

Un día de infrarrojos.

Pues eso que me levanté pronto y me fui con la cámara (hasta que se le acabó la batería grrrrr) a dar una vuelta.







jueves, abril 29, 2010

Última imagen

No puedo prometer que sea la última imagen que voy a compartir sobre el proyecto (que sí, que soy un pesado, que lo sé) pero al menos es una de las que voy a usar para la defensa.

La he sacado de un proyecto de hace unos años, modificando algunos materiales y quitando dos esferas que aportan bastante poco (salvo más tiempo de renderizado).

La imagen en cuestión tardo sobre 10 horas en el quad core, sobre w7 usando los cuatro núcleos y las 4 hebras disponibles para multithreading (1 por core).




http://img156.imageshack.us/img156/3253/pgpusubir.png.

domingo, abril 11, 2010

Proyecto

Bueno el proyecto se puede decir que está terminado (está terminado, realmente estoy haciendo pequeño ajustes de algún parámetro, etc).

A continuación os voy a dejar una "guía" por si queréis descargarlo, compilarlo y usarlo, primero voy a indicar cosas que tenéis que descargaos y luego pasaremos a configurar, si existe la opción de 32 y 64 bits debéis descargar la versión de 32 bits, no está configurado ni preparado el código para 64 bits.

1º Descárgate FreeImage, instalala.
2º Descárgate MPICH2 e instálalo.
3º Descárgate OpenEXR version 1.4 (el código) y descomprímelo en una carpeta.
4º Descárgate pthreads for windows, ejecutad el .exe y descomprimirlo en una carpeta.
5º Descárgate zlib.

Necesitamos un entorno de desarrollo para compilar el proyecto, yo uso visual studio 2008 express edition, puede ser descargada de aquí. Una vez descargada e instalada podemos continuar.

Lo siguiente es conseguir un cliente svn para acceder al código fuente del proyecto, yo uso tortoiseSVN. Lo instalamos, creamos una carpeta donde queramos y obtenemos el código del siguiente enlace:

svn co https://pmrune.svn.sourceforge.net/svnroot/pmrune pmrune

Con tortoiseSVN picamos en la carpeta con el botón derecho del ratón y seleccionamos la opción de checkout e introducimos la siguiente secuencia:

https://pmrune.svn.sourceforge.net/svnroot/pmrune

Con esto conseguimos el código del proyecto.

Debido a una versión antigua que usaba flex/bison para el parser de ficheros (lo descarte por la comunicación en linea de los ficheros comprimidos y mapeo en memoria virtual del contenido de los mismos haciendo un parser personalizado) hay un pequeño "problema" con el proyecto de visual studio, necesitamos copiar el fichero FlexBison.rules en C:\MSDN\Sample\VC++\vccustombr.

Ahora vamos por partes:

- Tenemos que configurar la visual studio para que TODAS las librerias que son necesarias para el proyecto sean encontradas, para ello vamos a Tools > Options > Project and Solutions > VC++ Directories. Una vez aquí con Win32 en Platform seleccionamos en Show directories for, la opcion Include Files y ahí creamos las necesarias para OpenEXR, Zlib, MPICH, Pthread y FreeImage, que apunten a los direcotios con sus .h. Hacemos igual con las librerias (aquí probablemente no podamos con OpenEXR pq no la hemos compilado pero lo haremos justo después)

- Tenemos que compilar OpenEXR para ello abrimos la solución que tiene el fichero (es para VS 2005, así que la convertimos a 2008, no pasa nada), y generamos la Releease y la Debug. Una vez tengamos los .lib y .dll hacemos la referencia dentro de la visual a su carpeta. (esta versión no necesita dll, si hacemos con dll tendremos que copiarlas, ver el siguiente punto)

- Con las dll pasa algo raro (por eso no lo he comentado hasta ahora), en windows xp no tengo problema, las copio todas a windows/system32 y va de lujo, pero en w7 tengo que tener una copia de todas las dll necesarias del proyecto en las carpetas de los ejecutables, debería ser FreeImage.dll, pthreadVCE2.dll y zlib1.dll ya que OpenEXR se linkea de manera estática y mpich también (si da fallos mpich con la dll copiala a windows/system32).

- Ahora tenemos que configurar MPICH2, esta parte es más "difusa" pq siempre he conseguido hacerlo correr, pero siempre da problemas, pero por ejemplo en xp no necesito tener en 2º plano el smpd ya que lo ha registrado como servicio en cambio en w7 lo "registro" y me dice que si, pero no lo deja instalado. Si alguno se anima a tratar de instalar el proyecto y quiere intentarlo estaré encantado de "indagar" más en este punto.

Tras esto ya deberías ser capaz de compilar y ejecutar el RuneRay.

En otra entrada pondré el formato de fichero, como ejecutarlo etc (subiré una versión que no pieda mpich, que aunque tarde mucho, pero mucho más en ejecutarse sigue pintando).

Pongo dos imágenes que he sacado tras ensayo y error:




viernes, marzo 12, 2010

Battlestar Galactica

Bueno sé que esto lo lee poca gente pero no he podido evitar escribir esta entrada. He terminado de ver una serie que quizá algunos hayáis visto, puede que incluso la versión de los años 70. La serie en cuestión es Battlestar Galactica, son cuatro temporadas y no os preocupéis no os la voy a destripar, no me atrevería.

La raza humana ha sido casi exterminada por los cylons, máquinas creadas por los humanos hace muchos años. Los únicos supervivientes de la especie humana se encuentran confinados en una flota de naves que no fueron destruidas durante el ataque cylon, concentrando a lo que queda de la humanidad dentro de ella.

El guión parece muy simple, la idea inicial es muy simple, pero el desarrollo es brillante, unos actores de lujo (algunos conocidos y otros saltaron a la fama gracias a su papel en esta serie), una ambientación impresionante, unos personajes que consiguen hacerse querer o desaparecer cada capítulo y lo mejor de todo la historia, como evoluciona, los giros, ES DE LAS POCAS SERIES QUE TE SORPRENDE DE MANERA LÓGICA (no como lost con giros absurdos inventados de la nada, prison break bueno aquí escapándose de algún sitio, 24 matando a veinte mil personas de una estocada), increíble. Tiene un profundo mensaje del odio injustificado entre los humanos, las traiciones, la esperanza, la igualdad, los sentimientos entre las personas, las creencias, la fe y un largo etc.

Muchos de vosotros habréis visto series y quizá esta, al mencionarse en big bang theory, pueda ser de “frikis” y no le dais la oportunidad, preferís series más “cool” como Lost o El internado (bazofia nacional por cierto) para poder hablar con vuestros amigos sin que se os tache de friki, no os engañéis tiene un NUEVE en imdb tras más de TREINTA MIL votaciones es mejor que esa serie que estás viendo, si lo es, lo afirmo sin riesgo a error.

Sobre la versión española, el doblaje como no cuando corre a cargo de los queridos dobladores de AXN, Sci-fi, Norma, … es lamentable, no captan la esencia de los actores originales, dejándonos el guión(que no es poco), pero carente de los sentimientos que ponen los personajes. Como excepción el doblaje del Comandante Adama es bastante bueno, el resto podrían dedicarse a otra cosa. Lo único que le tacho a la serie es la forma de quitarse de en medio a dos o tres personajes que se hacen querer, supongo que les surgirían otros papeles que les pagan más y como suele pasar se los cepillan (bueno a Claire en Lost la hacen desaparecer en la nada :/)

Por último os digo que los finales de TODAS las temporadas son los mejores finales de temporada que he visto, no entiendo cómo podían aguantar un año sin serie, NO OS LA VEAIS SI NO TENEIS DISPONIBLE TODA LA SERIE.

Os dejo un tema de la cuarta temporada, NO LEAIS LOS COMENTARIOS QUE HAY SPOILERS. (Cuando lleguéis a esa temporada me querréis por haber puesto este tema específicamente :D)


martes, febrero 09, 2010

IR !!

Bueno ya que he dejado definitivamente el dichoso Wow (una pena pero todo tiene un fin y esto no iba a ser menos :P al menos he estado entre las 10 mejores del mundo que de 12 millones de jugadores no esta nada mal :D) ¡¡tengo tiempo para hacer cosas!! y una de ellas (ademas de la computación avanzada con gpus) es la fotografía en IR (ya sabéis eso que puse hace unos meses con fotos muy emos y bazofia similar pero como me gusta sigo haciendo) y tengo noticias para todos, aunque saco pocas fotos (y algunas me las guardo para mi :P) voy a poner unas pocas conforme tenga :D.

sábado, noviembre 28, 2009

Project 2

Ya se que últimamente esto es un monográfico sobre el proyecto pero es lo que tiene. Lo termine hace bastantes semanas y desde entonces he estado peleandome con el Latex, corrigiendo algún error que tenía apuntado, añadiendo últimas funcionalidades y chominadas varias. Ahora os pongo exclusivamente imágenes e iré actualizando la entrada conforme tenga más o me aburra.

No espereis mucha variedad de escena que las tengo que hacer a mano sin editor y se me va un rato pintando en un papel y anotando posibles posiciones.






lunes, septiembre 28, 2009

Project

Bueno vamos a continuar con el tostón este, tras un ultimatum (acaba que te piras XD) me estoy poniendo seriamente las pilas en el proyecto.

He paralelizado ya bastante cosas, aunque ahora me estoy calentando la cabeza con otras diversas, que probablemente tenga que implementar todas y hacer test con cada una.

Hay algunas que no voy a tocar, os explico. El programa usa para la lectura de las escenas un lenguaje que he creado, no uso yac ni lex, pq la escena quiero que se cree "integramente" en cada pc, en vez de tener que crear todos los datos en un pc y reenviarlo o tener que mandar la información a cada nodo del cluster. Los ficheros de configuración ocupan relativamente poco (como bien comprenderéis los hago a mano y con cierta imaginación así que no voy a meter millones de luces cada una con sus datos), así que puedo permitir hacer lo siguiente:

Nodo Padre Lee Fichero Desde Disco Duro -> "Virtualiza" Fichero -> "Comprime fichero" -> Manda a cada nodo del cluster -> "Descomprimen fichero" -> Cada nodo Interpreta la información.

Lo de comprimir y descomprimir es una idea que se me lleva pasando por la cabeza y la verdad no es descabellada ver si el fichero ocupa mucho (kb) y mandarlo comprimido, a día de hoy no esta en el diagrama de flujo final.

Lo gracioso que tiene esto es por ejemplo los ficheros de formas, texturas, etc. Gracias al formato de "virtualizacion" que he creado podemos leer los ficheros como si fueran "propios", es decir leerlos que lo hará sin problema y los tratará como ficheros con privilegio de solo lectura si fueran locales. Mediante la clase FicheroMem... Personalmente creo que debo mejorar ciertos aspectos de esto, la idea es muy buena y esta perfectamente implementada(no da errores de memoria, todo se limpia en cada nodo individualmente,etc) pero tiene fallos conceptuales, es decir, solo funciona bien cuando se hace una peticion COMUN GLOBAL a un fichero, podria por ejemplo activar flags de estado indicando si es global o no y tener una hebra en segundo plano funcionando encargada de lectura de ficheros desde el disco duro por parte del nodo maestro que se encargue de disponer los ficheros según tenga peticiones, ese proceso sería un pelín más complejo pero bastante mas versatil pudiendo leer en cualquier momento ficheros desde cualquier nodo. Para ello bastaría crear un comunicador independiente por ejemplo COM_FILES y tener a la hebra encargada de ello escuchando peticiones por ejemplo el pseudocodigo que se me ocurre:

Previo:

Inicialización del comunicador de ficheros por parte de los nodos.
Inicialización de la hebra de gestión de ficheros por parte del nodo maestro.

Hebra de gestión: (Todas las operaciones de comunicación se realizan mediante el comunicador de ficheros)

While NoFinPrograma
LecturaNoBloqueante; // comprobamos si hay peticiones de lectura
if HayPeticionLectura
if PeticionGlobal
LeeFichero y virtualiza
Realiza broadcast
else PeticionIndependiente
LeeFichero y virtualiza
Realiza envio individual
else sleep de la hebra de 0.1 segundos

Como vemos la idea sería simple elegante y sobretodo versátil, añadiría una potencia muy grande al programa incrementado sólo un poco su complejidad. Esta misma idea tengo pensada para uno de los métodos de paralelización del renderizado que ahora comentare.

Bueno sobre el renderizado, estoy estudiando como paralelizar cosas como el kdtree y el photon mapping. El primero depende claramente de la complejidad de la escena, mientras que en dragon me tarda como 2-3 minutos en construirme el kdtree, en bunny me tarda pocos segundos. Su paralelización es bastante compleja, me explico un kdtree es como un bsp pero en vez de 2 dimensiones son 3 y ademas uso heurística de voxel para calcular el corte, el paralelizado de este algoritmo presenta como incoveniente la recursividad del mismo, es un algoritmo recúrsivo y por lo tanto su paralelización puede suponer un gran problema, podría por ejemplo, crear el árbol hasta el nivel de paralelizaje apto para el número de nodos que dispongo y una vez allí enviar las ramas correspondientes a cada nodo con etiquetas para su reconstrucción posterior en cada uno. Para ello un comunicador propio por ejemplo COM_KDTREE que se encargue en esto y desarrollar el arbol hasta un nivel A = Num nodos y enviar cada rama.

El photon mapping presenta como problema la comunicación >.<, lanzamos muchisiisisisisisiismos fotones, imaginad sobre que se puede dar veces de un millon o cosas por el estilo, así que si para cada photo debo hacer una comunicación entre nodos puede ser un caos enorme. ¿Pq no haces paquetes y los envias? pues simple, se requiere saber si el photon anterior ha sido aceptado o no, tiene un método de seguridad para evitar overflow y cosas por el estilo así que comprueba continuamente el número de fotones aceptados etc. >.< quiero paralelizarlo pq en algunas escenas puede llevarme como 10 minutos, otra solución es coger al cluster más potente y encargarle a él la tarea y que el resto esperen y se lo envíe.

El renderizado estoy estudiando variantes que voy a tener que programar todas XD, la más simple es dividir la imagen en el número de nodos que hay encargar el renderizado de manera individual y juntarlo posteriormente, esto se puede hacer por filas y por columnas, también lo haré por porciones(esta opción es bastante más dificil de programar, necesita peticiones tipo los ficheros con comunicador propio). La más "pro" y que voy a mandar a tomar porculo directamente es estudiar la densidad y complejidad del kdtree según nuestra visión y dividir esa zona entre más clusters y las zonas menos densas entre menos pcs. Las primeras las tengo sobre papel y estoy viendo que partes adicionales de las que ya dispongo debo modificar para que no reviente esto xD.

Antes de nada quiero hacer una versión final secuencial pq será la que compilaré para probar la secuencial ya que lo que voy añadiendo ya es para paralelización y está metiéndole mucho código inútil.

Como podéis comprobar, this is serious business.

domingo, agosto 02, 2009

IR FILTER



lunes, junio 01, 2009

Más noticias

Bueno hoy se puede decir que acabo de terminar la primera parte de mi proyecto, a falta de comprobar texturas (me he centrado mucho más en el photon mapping que a comprobar que el módulo de texturas funciona correctamente que me da que no ya que lo diseñe con una idea en la cabeza y al final uso otros espacios de color etc).

Bueno os pego screens de lo que es un photon mapping.



jueves, marzo 12, 2009

Secuencial 1.0

Hoy a eso de las 11:04 RuneRay ha pintado lo que debía pintar. Las imágenes que colgué hace tiempo tenían bastantes problemas no visibles, la imagen que subí era de las pocas que funcionaba bien y me servía de prueba para materiales y luz, tenía problemas de precisión numérica, distribución espacial, algebraicas, todo era código en c++ con lo que la prueba era horripilantemente tediosa, imaginad que cada cambio en la escena era compilar el proyecto, encontrar un fallo era compilarlo también y una compilación desde 0 puede significar 5 minutos de compilación de ficheros, pocos objetos definidos, parámetros incorrectos, sólo trabajaba en radiancia los resultados en definitiva un horror. Aquí os cuelgo dos imagenes una de radiancias y otra mapeada a blanco, es poco pero es el único fichero que tengo, cosas a hacer en estos próximos días:

- Lector de objetos desde ficheros para poder incorporar cualquier objetos.
- Corrección en la lectura de ficheros. Actualmente si hay un fallo en el fichero no lo canta y sigue leyendo, esto puede hacer que entre en bucles, es fácil detectarlo y corregirlo pero para la primera versión he usado un fichero con formato correcto y ya esta.
- Crear un minieditor para poder crear escenas de la nada sin necesidad de escribir texto en un fichero evitando errores.

(PICAD SOBRE LAS IMÁGENES PARA VERLAS ENTERAS)

Imagen de radiancia:


Imagen mapeada:

sábado, enero 31, 2009

Sorprendente.

Navegando he encontrado esta noticia que me ha dejado sorprendido, más que nada porque parece sacada de un cuento de estos de cuando eres pequeño y te hace ver que hay cosas que la ciencia tardará mucho en descubrir.

http://www.ecuadorciencia.org/noticias.asp?id=6481&fc=20090128

Mira que soy duro como una piedra pero estas cosas parece como el agua congelada en invierno que se filtra por las grietas pequeñas del material, lo rompe todo y por lo menos consigue llamar la atención.

PD: Os odio a todos.

martes, septiembre 16, 2008

jueves, septiembre 04, 2008

Aprendiendo cosas

Hoy se me ha vuelto a reafirmar una idea que tenía bastante clara:

"No debo fiarme de nadie, ni amigos, familia ni nadie".

miércoles, septiembre 03, 2008

Delight and Angers



Everyday takes figuring out how to live,
Sometimes it feels like a mistake,
Sometimes its a winners parade,
Delight and Angers,
I guess thats the way its supposed to be...

Please heal me,
I can't sleep
Thought I was unbreakable,
But this is killing me
Call me, everything
Make me feel unbreakable,
Lie and set me free

I feel the fear takes hold
Affraid this hell I create is my own
Come my franticness,
I cant take it anymore,
This used to be my own world,
But now I've LOST CONTROL

Please heal me,
I can't sleep
Thought I was unbreakable,
But this is killing me
Call me, everything
Make me feel unbreakable,
Lie and set me free

Chasing leftovers,
Under the fading sun,
Searching for shelter,
I feel my time has come

Please heal me,
I can't sleep
Thought I was unbreakable,
But this is killing me
Call me, everything
Make me feel unbreakable,
Lie and set me free

martes, agosto 19, 2008

Dead End

Save all your prayers
I think we lost today
There's no morning after
No one's around to blame

I'm not afraid to bleed
But I won't do it for you
A star among hypocrites
The melody of our time

So say goodbye to the world
We are the dead that walk the earth

Scream your lungs out
Wait for laughter
You don't have to wait for ever
Here's the next disaster!

What decides when you've lost a war
When the first man falls
Or when they've erased it all

We're to numb to feel
The downfall starts right here
Hold your breath and swim
Swallowed by life's tear

In times of make believe,
No one really seems to care
Maybe I should care less
Cause I will die too

So say goodbye to the world
We are the dead that walk the earth

Scream your lungs out
Wait for laughter
You don't have to wait for ever
Here's the next disaster!

What will it take for us to realize
The more we provoke,
Winter will come TWICE

Save all your prayers
I think we lost today
There's no morning after
No one's around to blame

Scream your lungs out
Wait for laughter
You don't have to wait for ever
Here's the next disaster!

Scream your lungs out
Wait for laughter
You don't have to wait for ever
Here's the next disaster!

sábado, agosto 16, 2008

Moonshield

Tried of dull ages, I walk the same ground,
collecting the tragedies still
Hollow ambitions in a hollow mind
carried my cross to the hill

And how I lust for the dance and the fire
deep of the nectarine sunset to drink
spill me the wind and its fire
to steal of the colors - I'm the moonshield

Shattered hope became my guide
and grief and pain my friends
a brother pact in blood-ink penned
declared my silent end

Naked and dying under worlds of silent stone
reaching for the moonshield that once upon us shone

Naked and dying under worlds of silent stone
reaching for the moonshield that once upon us shone

And how I lust for the dance and the fire
deep of the nectarine sunset to drink
spill me the wind and its fire
to steal of the colors

I am... I am... I am...
I'm the moonshield...



martes, agosto 05, 2008

Algo de Helloween

Pasando ratos en la biblioteca uno debe sobrevivir escuchando música para no caer en la locura de tanto estudiar. Le pedí a un amigo que eligiera un disco de música de forma aleatoria, y me dijo "De Helloween, ese que dice tanto Yika, Keeper algo". Seleccionado el Keeper uno, estoy que casi no he podido estudiar, otro disco diez dentro del heavy, aquí os dejo algunos temas.














martes, junio 17, 2008

Las tres cosas que todo hombre debe hacer a lo largo de su vida

1· Exterminar una especie


2· Tirarle un perro muerto a tu mejor amigo


3· Pintar un rascacielos con mierda


Lo se, estoy de exámenes

miércoles, mayo 28, 2008

Inpainting

Otra Actualización:

http://www.megaupload.com/?d=84BCDYOD

Enlace con el código que compila bajo linux y windows. En windows necesitáis por lo menos la versiones express de Visual Studio 2008

Actualización:

http://www.megaupload.com/es/?d=KDA0AVA0

Desde ese enlace puedes descargar el programa. Hay dos ejecutables uno que paraleliza y otro que no.

Llevaba una temporada con más pájaros en la cabeza de lo habitual.

Una asignatura de la carrera de esas que cursas por amor al arte, sabes que vas a tener que trabajar más de la cuenta, pero te encanta lo que haces.

La asignatura en cuestión es procesamiento digital de imágenes, sólo puedo contar maravillas sobre la asignatura y sus docentes, y quien me conoce sabe que suelo ser muy crítico con las asignaturas de la carrera.

Elegimos un proyecto de restauración de imágenes para una parte de la asignatura. Dentro de este mundillo a estos métodos se le suele llamar métodos de inpainting.

http://en.wikipedia.org/wiki/Inpainting

He implementado varios algoritmos que voy a comentar:

- Método de Oliveira y Multirresolución ¿En que consiste el método de Oliveira?, su idea es muy simple, consiste en aplicar convoluciones sobre unos pixeles marcados para ser "procesados" por el algoritmo, las convoluciones suelen ser con kernels gaussianos. Cualquiera con un poco de idea podrá comprobar que este método produce las zonas muy muy borrosas, y para nada como en los papers aparecen, requiere un nivel de selección de máscara tan elaborado que antes de terminar una has tenido nietos y no sabes ni como. La multirresolución ayuda un poco y consigue que no se vea tan borroso. Aunque este algoritmo tenga ese inconveniente es rapidísimo.

-Método de Bertalmio la verdad que empecé a implementarlo, se me fue un poco la cabeza con las laplacianas y diferenciales de segundo orden que documenta el pobre hombre en su tesis y al final sólo se ve algo muy borroso XD. Según he conseguido sacar en claro también produce resultados algo borrosos para zonas de restauración grandes.

- Método de Crimisi. El método definitivo XD. Simplemente increíble, los resultado obtenidos son mejores de lo que me esperaba, el inconveniente es lo que tarda. A ver como explico este método..., bueno ya colgaré la documentación con el algoritmo detallado, etc... Para imágenes pequeñas con aproximadamente un 6-7% de la imagen dañada de forma no normal puede tardar cosa de 6 minutos más o menos pero para una imagen grande con el 30% llevo dos horas y le queda la mitad todavía. Ventajas: Los requisitos matemáticos no son tan elevados como para el de Bertalmio y encima da unos resultados muy superiores. Este método como mucho es calcular los vectores gradientes de los píxeles, y aplicar convoluciones para detección de fronteras. ¡¡¡Altamente paralelizable!!!! ya he visto el cuello de botella de la aplicación y estoy estudiando hacer una versión con OpenMP y otra usando CUDA. Voy a ir colgando imágenes que muestren los resultados del método y vosotros mismos juzgáis :)


Imagen dañada


Imagen bonita


Jugando a la xbox en casa de un amigo


O eso creía