MODELANDO PARA REAL TIME RENDERING - VIDEOJUEGOS

Ya hace bastante tiempo que recibo todo tipo de preguntas sobre mi metodología de trabajo, para modelado orgánico o poligonal (LowPoly/High Poly). Y el material disponible en Internet suele complicar a aquellos que no son muy amigos del ingles.


Estoy lejos de ser un exponente del refinado arte del modeling, pero decidí aportar en este humilde rincón una pequeña visión o metodología. No mas que algunos consejos para evitar dolores de cabeza a la hora de desarrollarnos artistas 3d en el campo profesional.

Esto nos conduce a mi primer guía explicativa sobre metodologías básicas de modelado orgánico. Es importante remarcar que es simplemente una forma entre millones. Y no existe un standard o estructura universal para seguir. Pero estoy seguro que para aquellos que apenas comienzan a transitar en este duro camino, puede ser un buen primer paso.

 ¿Ojo del águila..? Paciencia, paciencia y luego mas paciencia.

·Es importante volvernos muy tolerantes a la frustración. Al comienzo nuestros modelos van a verse espantosos, demoraremos horas y muy difícilmente logremos que nuestro objeto en cuestión se vea igual que la imagen de referencia. Esto se debe a que nuestro ojo aun no posee el entrenamiento necesario para "replicar" de manera exacta lo que vemos.  Sugiero no detenerse en un todo y comenzar a analizar la pieza en detalles. "zoomear" a un 400% si es necesario y analizar en detalle las curvas, detalles, radios, TODO. Los humanos tendemos a visualizar los elementos como un todo constituido,  "el resultado de la suma de sus partes".

 Ahora, debemos aprender a aislar las piezas y profundizar sus estructuras independientes.  Con el tiempo notaremos mas detalles y seremos mas precisos para replicar un objeto. Estos detalles son los que le brindan el acabado de realismo a una escena. Cordones de vereda, ramas en el suelo, todo!
 
LOW POLY PARA REAL TIME RENDERING

Cuando modelamos para un
engine de videojuegos hay muchos aspectos nuevos a tener en consideración.
Pero que es un “Engine”?

Engine = Motor gráfico que usan los videojuegos. Es el encargado de procesar y ensamblar cada elemento del videojuego. Es un entorno de trabajo orientado a la producción de gráficos en 3d que se renderizan en tiempo real (Realtime).

Nuestro primer punto de partida debe ser entender la diferencia entre como funciona o procesa un engine Real tIme y en función de eso como calcularemos o mediremos la densidad de nuestras mallas.


 
Es importante tener en cuenta que cuando hablamos de simulaciones 3d en tiempo real creadas en un motor gráfico, el renderizado los realiza exclusivamente la GPU (Graphic Process Unit) de la placa de video. 

Esto significa que cada ESCENA, estará atada y limitada por la cantidad de triángulos total que sea capaz de renderizar la GPU.

Ej:  El personaje principal de un videojuego  como el Crysis posee un top de 30k de polígonos y el entorno no excede los 500k de polígonos.

-Optimizando Piezas Orgánicas

Muchas veces se cree que como la pieza es lowPoly, debe ser modelada de tal modo y esto no es así.
Lo correcto sería partir de un modelo HighPoly y optimizarlo apagando iteraciones de turbosmoth.
En otras ocasiones tendremos que partir de una malla HighPoly colapsada. En estos casos donde  la optimizacion sera de manera “destructiva”, es aconsejable crear un edit poly nuevo y trabajar sobre este. La forma correcta es extrayendo los loops y rigs de nuestra malla que no son necesarios. Dejando concentrada la densidad de pelignos, únicamente en zonas curvas y con detalles finos.  Debemos llegar a una topología con su mínimo irreducible de polígonos. Al quitar algunos edge loops es importante ser cuidadosos y no dañar algún smooth group. Esto nos puede generar sombras extrañas en la malla. 
También es importante controlar que no hayan quedado vértices aislados sin conexiones.



 
-Modelando desde cero piezas Orgánicas

Durante el proceso de modelado es muy importante ser cuidadosos en como distribuimos el uso de los stack y de que manera modelamos. Siempre tenemos que tener en cuenta que el Prop highPoly debe ser fácil de llevar a lowPoly.
Lo ideal sería modelar pensando en usar solo 2 iteraciones de turbosmoth sobre el final de la pieza.  A fin de bajar o apagar el turbo y de esa forma subir o bajar rápidamente de un modelo high poly a low poly.
Según la topología del prop la cantidad de pelignos (versión LowPoly) no debería exceder los 300/600 polígonos (600/1200 triangles). Recordamos que tanto Unity como UE4, al igual que los demás Engines de videojuegos, trabajan con geometría basada en triángulos. Esto quiere decir que si nuestro modelo final posee 1000 polígonos, al momento de exportarlo y transformarlo a una malla basada en triángulos, esta se subdividirá y se duplicaran la cantidad de caras.

-Modelando desde cero piezas Poligonales

Cuando modelamos poligonalmente el procedimiento es otro. Nuestra pieza debemos encararla y pensarla de un modo tal que solo realizaremos subdivisiones mediante chamfers en las zonas criticas para generar mayor suavidad y trabajaremos continuamente con smoothgroups para eliminar las caras faceteadas. Lo mas normal es que una malla basada en modelado poligonal posea una densidad mucho menor a una orgánica.
Un Prop  de tipo poligonal (table, book, etc) no debería poseer mas de 300 polígonos/600 triangles, si tomamos como referencia un videojuego NextGen.




 


-Todo es cuestión de pensar en un"Cascarón"
Finalmente cuando llegamos al proceso de optimización debemos analizar que partes de la pieza realmente serán visibles ante la cámara. Esto estará condicionado por el tipo de Prop y la zona donde interactúe. Dependiendo el caso puede que sea necesario remover algunos lados o caras innecesarias del objeto.  Nuestras piezas deben estar modeladas como “cascaras huecas”, y quitar todo aquel excedente que no sea divisado jamás por la cámara del jugador. En muchos casos esto puede ayudar a economizar gran cantidad de polígonos. Es recomendable trabajar con el backface cull activado.

-Acá finaliza la parte I del articulo. Próximamente subiré una segunda parte.