Archive for the '3D-devel' Category

Mi primer trailer y mi primera película

Posted in 3D-devel, Mercado on June 8th, 2008

Dos semanas de locos y tres fines de semana de infarto. El resultado: el primer tráiler que (creo) tiene Enne. Muchos de mis compis están requemaos y eso me da bastante rabia, parece que muchas de las cagadas que nos hemos metido como empresa eran como mínimo evitables.

¿Os puedo enseñar algo? Pues de momento no. No sé nada de la comercialización ni de la política de muestras del trailer. Claro que mi problema es otro: no entiendo el material y no estoy hablando de dirección de empresa ni de explotación de producto, es mucho más sencillo; no entiendo la película, no veo el mensaje. Evidentemente esto es algo de lo que tampoco puedo hablar, como a veces dice mi santa madre: “hijo pa’ lo que quieres eres de lo más limitaíco

Todo este liazo del tráiler palidece ante el poder over de Blender y su editor de vídeo embebido. ¡Chúpate esa Shake![1] Hace unas semanas estaba intentando probar la influencia del motion blur, frente a secuencias de frames perfectamente nítidos (este tipo de gilipolleces me entreteniene los fines de semana, creo que tengo que salir más de casa ^_^) Luego me pilló por banda el subidón de curre y la publicación de la versión 2.46 de Blender casi medio muerto.

Pero hete aquí que he estado haciendo algo totalmente inusual: leerme los manuales de usuario. Y opalá! Aquí me ha aparecido tooodo lo que necesito para convertirme en un pequeño Charli Calvinsky del cine:

Blender manual 2.46

Video creating example in Blender

Video sequence Editing

Así que armado con mi nuevo kung-fú y un objetivo técnico razonablemente claro me ha dado la ventolera de postear algo en el “youtuvé”

Los palicos del youtube

1. No nos engañemos: Shake es über, pero había que decirlo.

Gelato multiple UVs in mesh

Posted in 3D-devel on May 18th, 2008

Sigo trabajando con gelato y Blender. Esta vez estaba interesado en disponer de varios canales de textura en un mismo objeto. A causa del soporte limitado[1] que nVidia da a Blender, no tenía muy claro si no estaba funcionando por una limitación del render[2] ó bien era un problema de mis datos.

Al final lo he logrado haciendo a mano el proceso, es razonablemente sencillo:
1. En el .pyg del mesh he añadido manualmente dos canales más de tipo linear float, llamémoslos myU y myV.

2. He expandido el shader painted plastic con:
float myU = 0,
float myV = 0

3. Funciona! Las UVs se interpolan correctamente entre los vértices y se pueden acceder de modo similar a los canales estándar s y t.

De momento no tengo imágenes de ningún objeto con texturas múltiples aplicadas, tan pronto lo tenga lo postearé a mi flickr.


1. Pasan como de comer popó de Blender, ellos se lo pierden
2. Hasta donde yo he probado Gelato es muy bueno.

Botella, segunda parte

Posted in 3D-devel on May 1st, 2008

Para empezar: aquellos que sigan Blender deben actualizar el software a la versión 2.46 tan pronto como les sea posible, hay un buen montón de nuevas features podéis ver varios vídeos en:

Blender 2.46 features videos

Blender 2.46 features videos

Blender upcoming features

No me canso de repetirlo: cuanto más trabajo con Blender más agradecido me resulta, para hacer el render que tenéis más abajo sólo he tenido problemas con las UVs del modelo de la botella porque no termino de pillar el punto al exportador a gelato (frappe).

gelato blender bottle

Quiero destacar que esta imagen no es un ray-tracing[1], el coste de render en mi equipo actual, un portátil Dell Centrino Duo, 2GB con una 7900GO (detalle importante ya que se supone que gelato también usa la gráfica) es de 4 minutos y medio.

Podéis ver la imagen de la botellita a pantalla completa en las fotos del diablesodelacarretera.


1. Lo que debería resultar obvio ya que el video carece completamente de refracción, aunque estoy panteándome simularla.

Forge como escuela de diseño

Posted in 3D-devel, Developing on November 25th, 2007

¿Qué demonios es un halo? No lo sé, ¿a quién leches le importa? Tampoco lo tengo claro. Sin embargo ha llegado, por un azahar del destino, por un rebote, por una casualidad digna de un poeta prerromano, una copia de la caja de coleccionista del juego. No os voy a hablar de sus cualidades como zuuter en primera persona, que las tiene, ni de sus pequeños detalles, voy a dejar que de eso se encargue Yahtzee con su video-review-destructiva-de-Halo3.

Y ahora al tajo: forge, vídeo, y otros delirios. El jueguito tiene un feature, menor. Las partidas que echas quedan grabadas en vídeo automáticamente. No. No es exacto. El engine vuelca todas las acciones que está llevando a cabo y las deposita en un ficherito. Una sesión de diez minutos de juego cabe en aproximadamente mega y medio[1]. Y, aprovechando esta independencia del video te permiten sacar el punto de vista del jefe maestro y pasearte por el escenario. Puedes, efectivamente, ponerte en la piel de los desdichados grunts que masacras a cada paso que das en el Hálito-3. Y aquí voy acercándome al tema.

Unveiled Master Chief identity
Obviamente si el jefe maestro fuese Chuck Norris nada de esto habría pasado. Los Spartans son algo nenazas al fin y al cabo.

Una vez sacas el punto de vista del personaje principal te das cuenta muy rápidamente de cómo funcionan las tripas del juego. Hagamos una prueba: uno de los objetos es un arma posicional que provoca ceguera si estás muy cerca. Convenientemente lo llaman bengala[2]. Bien, dispara la bengala cerca de una pared o mejor aún, tírala a la maldita pared. Una vez la tienes ahí, flanqueas la pared y te acercas por el otro lado. Sigues igual de deslumbrado pero estás mirando una pared y no una bengala. Descarto la posibilidad de que los chicos de Bungie no sepan física. Saben y mucha. Pero estas cosas son muy difíciles de programar en tiempo real sin que el juego se vaya, directamente al carajo.

La posibilidad de grabar las partidas, y, aún mejor, de editar niveles a tu gusto, exponen el juego. Los escudos esféricos hexagonales, uno de los detalles más bonitos del juego son un truquito de render muy efectivo. Para verlo en detalle, desde cualquier ángulo, creas un nivel, metes uno de esos escudos, metes al jefe maestro en él y luego, deteniendo el tiempo y con la cámara libre te deleitas en cada artefacto, cada efecto de raytracing fingido, cada pequeño trampantojo.

Aprovechando la cámara libre se pueden observar muchos trucos clásicos del género: dispárale a una pared y acerca la cámara, verás el cambio del nivel de detalle y el material filtrado de los boquetes que las armas dejan sobre las superficies. Aléjala un poco y el cambio es claro. Espera unos segundos y la superficie se regenerará poco a poco cuando el boquete sea reclamado por el pool-de-boquetes. Cuando estás fuera del jefe maestro puedes ver el efecto tan extraño que hace la armadura al recibir daño, una suerte de nube de rayos amarillentos, algo pobres.

Con el modo de edición de niveles, ver la intención del diseñador es razonablemente sencillo y muy instructivo si se examina con cuidado.

Quizá y, para terminar, exista otra gran herramienta de diseño / MOD: Valve’s hammer. Desde donde pueden accederse a las animaciones, los scripts, y el porrón de herramientas que Valve distribuye con cada copia de su serie Half-Life2. Siempre llama la atención que una gran compañía dedique esfuerzo y dinero a producir herramientas para fuera de casa. Sin embargo, con los años, se ha formado un fuerte y saludable grupito de Modders y creadores de escenarios.

Bungie ha dado un impulso a los editores en el mundo de las consolas. El trabajo con las capturas en vídeo es sencillamente excepcional. Tanto para examinar en detalle cómo rendean, cómo sombrean, cómo iluminan, como para buscar las diferencias en los niveles de juegos de consola y de PC, Forge, es una excelente herramienta.

PD: aprovecho el cierre para comentar por aquí que Epic ha publicado la versión de Gears para PC-de-gama-ridículamente-alta.


1. Esto tiene varias implicaciones, para empezar tendrás que grabar tus partidas en un DVD-grabador, o un HD - grabador, o un VHS (no sé si alguno de vosotros tiene uno ya) para que otra persona sin una copia del Halo3 vea tus partiditas ¡Los chicos de Bungie son listos!
2. He visto traducir grunt por gruñidos. Que nadie se sorprenda cuando en mitad del juego alguien le grita al jefe maestro: ¡buena baja, jefe! ¿pero de qué hablan? ¿Cómo han descubierto que llevo fingiendo dolor de espalda desde hace medio año!?

Nota rápida: content streaming

Posted in 3D-devel, DirectX on September 23rd, 2007

Antes de entrar a currar a mi actual compañía y que la vorágine de cambiar de tecnología (DX/C++ –> MIDP/J2ME) me sorbiese hasta el tuétano había pillado la sana costumbre de regurgitar mis inmodestas opiniones por este canal. He visto algo que me ha llamado muchísimo la atención y tengo ganas de dejarlo por escrito y no olvidarme.

El ejemplo en cuestión se llama ContentStreaming. Como hace más tiempo de la cuenta que no machaco mi C++ estoy intentando digerirlo aún. Lo que sí os puedo anticipar es qué puntos trata:

1. Cacheado de recursos
2. Mapeado de ficheros en memoria en Windows
3. Carga anticipada
4. Multi-threading

Content stream thread layout

Esencialmente este ejemplo te pone en la pista de las técnicas básicas para los modernos engines sin tiempos de carga. Parte de un fichero que genera proceduralmente de 3.3GBs y luego irá cargando según vaya necesitando rendear zonas del mundo en cuestión.
Mi intención es estudiar el ejemplo e ir posteando por este canal los resultados de la autopsia. Ya veremos cómo sale la cosa, o si se tuerce interferido por otras prioridades.

.X contra XSI, formatos

Posted in 3D-devel on September 16th, 2007

Antes o después te toca subirte las mangas y ponerte todo ciego a mover punticos, aristas y caras; más o menos con toda tu buena intención y un poco de ayuda de Digital Tutors. La idea inicial, modelar algo vagamente orgánico, por ejemplo un insecto común: una libélula. Bien, tomé algunas referencias por la web, fotos y demás y me lancé al tema con mi mejor intención:

Dragonfly XSI basic modelling

Es importante destacar que no soy grafista, ni mucho menos artista 3D. Así que la considero un lograzo, dado el tiempo que puedo dedicarle y lo especializado del asunto. Pero aquí, justo cuando tenía el modelo en ese estado, me dio un jamarazo y me decidí a probar el modelo sobre el visor de DirectX[1] Lo que me obligaba a emplear el exportador por defecto que tiene XSI (v.5.11) para sacar mallas a .X.

Por supuesto la geometría exporta más o menos bien, el problema más evidente viene del mapeado de texturas, cualquier parecido con la intención inicial del creador del modelo es pura coincidencia:

Dragonfly XSI UV texturing

El modelo en XSI (a la derecha) tiene alas de madera y cabeza de leopardo[2] , se ve correctamente en el viewport DX9 construido dentro del propio XSI (situación que me hace creer que la cagué en algún paso intermedio probando el pintado de mip maps del artículo anterior y por eso se despelotaron las UVs)

No soy el único que se ha quejado de este exportador, y parece que la solución habitual pasa por no emplearlo en absoluto: se va a .OBJ y luego hacia .X empleando algún miembro de la familia Deep Exploration. En este mismo instante me estoy planteando otros modos de llevar mis pequeños abortos tridimensionales hacia algún render en tiempo real.

Resulta que Softimage está trabajando muy duro para darnos un empujoncito a los chicos que pretendemos ganarnos la vida con tiempo real tienen dos líneas principales de exportado que me llaman la atención: COLLADA y XNA [3]. La porra del XNA es que supone más madera, un entorno gestionado, un brinco más de lenguaje de programación, otra piedrita al montón de movidas que aprender en el poco, poquísimo tiempo libre del que dispongo últimamente.


1. Que viene de serie con el SDK así que lo tienes fijo.
2. Malditos pinceles por parches: dominan mi mente XD!
3. Y espero por nuestro bien que su exportador de .X en las versiones nuevas, sobre todo en la 6.5 le haga algo de justicia a los modelos :P

MIPMap Mayhem

Posted in 3D-devel on September 9th, 2007

Ya lo dicen muchos: leer es malo porque da ideas. Y las ideas, pues ya se sabe, a veces, nos llevan a follones ^_^. Hace bastantes meses leí un paper,, que describía cómo en muchas ocasiones dejamos pasar buenas oportunidades de afinar nuestro render empleando recursos gratuitos[1] del pipeline. Y ya algo menos crípticamente, describía que se pueden editar los niveles de MIP para mancharlos de colores, parece evidente, pero es más potente y flexible de lo que parece.

El ejemplo del artículo era realmente bueno: supongamos que queremos rendear una chimenea cubierta por una finísima capa de hollín. Cuando la miramos directamente, es decir: perpendicularmente, podemos ver el cemento del que está hecha, quizá ennegrecido, pero vemos claramente el gris. Sin embargo, conforme alejamos la vista y observamos zonas más alejadas del tubo, este es progresivamente más y más negro. En un shader, podríamos emplear el ángulo que forma el punto de vista y la superficie para, empleando por ejemplo una textura degradada de un sólo píxel de ancho, obtener un factor de ennegrecimiento, eso es como mínimo un producto dot más una consulta de textura y probablemente una suma ponderada con respecto al color computado para el material base [2]. Lo que quizá sea demasiado para una maldita chimenea, que en realidad está ahí sólo como decorado, etc. etc.

El articulista proponía un camino lateral para obtener el mismo efecto. ¡Usar la cadena de MIPMap! Es decir: pintar de negro los MIPs más profundos, de modo que el filtrado nos dé ese oscurecimiento, sin necesidad de emplear más ranuras de shader: ¡todo pasa por la textura! Okydoky, echando memoria, recuerdo cómo era todo aquello y me digo: mañana de domingo, … no hay resaca a la vista, c’mon, lets do it!

Empecemos por la chimenea, algo suave y redondeado, … un cilindrito!

Base Textured model

Vale, aprovechando que también estoy intentando pulir un poquito mi XSI, hago yo mismo el modelado[3], el mapeado UV y me monto una textura inicial. Y aquí es donde viene el problema: no tengo photoshop! Y tampoco tengo ganas de machacar ninguna versión, he decidido mantener algo más a ralla el volumen de software de origen oscurete que consumo: el GIMP tendrá que valer.

A esto, hay que añadir otra situación: me es físicamente imposible (por tiempo) aprender en profundidad muchas más cosas ahora, así que debo mantenerme en DirectX. Esto me lleva a usar DDS preferentemente ya que luego podré usar todas las demás herramientas que Hasefrocht incluye en su mastodóntico SDK.

OK, recapitulando: DDS + MIPMap y todo sobre XSI PERO no hay photoshop, esto va a ser divertido[4]!

Lo primero que se necesita es bajar el SDK de Microsoft, eso es más que evidente. Luego hay que hacerse con las tools de texturas de nVidia, que podéis bajar del site de: nVidia Texture tools. Todo es recomendable y el mundo de las texturas es gigantesco, pero lo único necesario es el paquete DDS Utilities. Con todo instalado se tira para alante y:

1. Se crea la textura difusa base y se deja bien guardada.
2. La textura base carece de MIPs así que hay que crearlos, para eso Microsoft nos ofrece una herramientita: Texconv.exe con la que podemos batchear una conversión a DDS más la creación de los MIP chains:

texconv -m 6 -f R8G8B8 -ft DDS tex_cilinder.png

Codigo que genera 6 niveles de MIP en RGB de 24 bits desde tex_cilinder.png.

3. Ok, tenemos los MIPs pero no podemos editarlos, al menos no fácilmente ya que no disponemos de photoshop. Aquí entra la utilidad de nVidia[5], en particular:

detach tex_cilinder separa el DDS inicial en toda la cadena de MIPs, es incómodo, pero vamos, se puede automatizar empleando un .bat, ó si dispones de una consola de verdad en tu sistema, pues miel sobre ojeras.

4. En este punto tenemos un puñao de ficheros que no podemos editar, de nuevo empleando las nVidia DDS tools:

readDXT tex_cilinder_00.dds tras lo cual tendremos TGAs, que sí puede editar GIMP.

Yo hice algo tan tontorrón como esto:

MIPMap modified

Como veis el mip inicial es más o menos plano y luego meto dos cambios muy muy cantosos para poder verlos fácilmente en el render.

5. En este punto hay que hacer el camino inverso TGA –> DDS y luego, recomponer el MIP chain:

texconv -m 1 -f R8G8B8 -ft DDS tex_cilinder_01.tga Notar que se le pide un mipchain de longitud 1

6. y para terminar, recomponer el MIP chain sobre un DDS:

stitch tex_cilinder

Y se termina obteniendo una textura en DDS con los MIP maps modificados. Ya con ese material volví hacia XSI y compuse un árbol de render sobre DX muy sencillo, sin shaders programables y con una simple textura, activé el filtro MIP y listo: como veis, las UVs se fueron de baras directamente, lo que me molestó muchísimo. Además no he encontrado un modo sencillo de crear un render de aspecto plano, es decir, con luz ultra-blanca desde cualquier punto, acabaré componiéndolo en un zeider…

Modified MIPMaps but wrong UV Maps

La coña de esta técnica es que funciona. Es curioso verla en marcha, … llama la atención, impresiona, sobre todo porque el MIP-mapping suele ser un punto del render que solemos ignorar, simplemente está ahí y fuera.

El tortuoso camino de la conversión de texturas

Bien, el numero de pasos que hay que dar para editar un MIP-Chain es ridículo, pero de momento no se me ha ocurrido nada mejor (legalmente), si se me llega a ocurrir algo os lo haré saber, como siempre.


1. Sí, ya sé que lo único gratuito es no ejecutar absolutamente nada.
2. Lo que en sí mismo no significa nada: en una 8800 GTX te-la-suda! ;)
3. Soy 1337, ¡he logrado modelar un cilindro! ¡Chúpate esa Baena!
4. Entre otras cosas porque la versión 5.0.x de XSI se da cada castaña con DirectX de alucinar. Se mete unos crashes por desconectar nodos de texturas que son de terror. Esperemos que la versión 6.5.x arregle y reenfoque todo el asunto.
5. Que viene con dos PDFs de ayuda, así que no incluyo ningún link para documentar.