Roadmap y documentación

Programando un motor 3D desde cero - Brakeza3D

Roadmap y documentación

Bienvenidos de nuevo!.  Me alegra encontrar algún email preguntando si sigo vivo, jeje!. He invertido una gran cantidad de horas terminar de parsear  elementos de mapas de Quake (Id Tech 1), optimización y evolucionar el sistema de colisiones y respuestas.

Retomemos el trabajo!. En el último artículo, os presenté el mapeado de texturas, lo que pondría fin al primer bloque de contenido de este curso.

Digo “bloque”, por qué tengo que reconocer, que cuando comencé a programar Brakeza3D, el objetivo no era mas que consolidar ciertos conocimientos en las 3D y con lo aprendido hasta ese momento, asentarme definitivamente en un motor3D “mainstream”. Me pareció un buen momento para dejarlo.

Si habéis llegado a implementarlo por vosotros mismos (o analizado y asimilado el código de Brakeza3D en github), no tardaréis en ver las similitudes de la arquitectura global que hemos creado y cualquiera de estos motores, por ejemplo, Unity.

Con esto quiero decir, que conceptos tales como “object space, “vertex3D”, “transform”, “matrix3x3”, “main loop”, “preUpdate”, “postUpdate”, etc, son comunes a cualquier engine. Por tanto, con lo que hemos aprendido hasta ahora, ya os resultará mucho mas sencillo trabajar con cualquier engine 3D. PERO… en mi opinión, no es suficiente. Hemos de profundizar un poco mas en la teoría base y sobre todo practicarla.

Os cuento mi experiencia, puede que algunos os sintáis identificados:

En el momento de esta anécdota, ya me habría realizado muchos de los tutoriales de los motores 3D mas conocidos (por supuesto Unity y UDK entre ellos). Recuerdo con cariño un “hola mundo” en UDK, que se me fué de las manos y se terminó convirtiendo en un “boceto” de juego de disparos con toque RPG en tercera persona, con un sistema de misiones integrado con MySQL… (no supe parar antes jeje).

Me sentí en la cresta de la ola, haciendo cosas tan innovadoras para mí y con unos resultados increibles (el render de UDK me enamoró). De repente estaba programando un juego, que ademas, lucía genial. Las espectativas estaban cumplidas. Mi primer videojuego en 3D!

Poco después, me interesé en aplicar lo aprendido en hacer un sencillo juego de fútbol absurdo y chorras, ya con Unity3D. Os adelanto, que me estrellé de forma estrepitosa.

Para no extenderme mucho, os diré que no fuí capaz de terminar el concepto de juego que tenía pensado, llegó un momento en que necesité implementar por mi mismo comportamientos que no existían como “prefab”.  Como os podéis imaginar, al ser un juego de fútbol, se hacía inevitable enfrentarse al tridente matemáticas + físicas + programación. No se habla mucho de esto en los tutoriales de Unity.

Fuí superando obstáculos, pero al final, el gameplay era una tortura y la pelota era incontrolable. En el fondo, no entendía exactamente lo que estaba haciendo mi código, un batiburrillo de copy-pastes sacado de la red.

Sencillamente, mi soltura para manejar vectores en el espacio era muy limitada. Los vagos recuerdos del bachiller, no eran equipaje suficiente para superar cada prueba que se ponía delante. Mi mentalidad de desarrollador web, acostumbrado a encontrar soluciones de inmediato a casi cualquier problema en el framework de turno, no era suficiente para atajar problemas complejos, que se alargaban hasta el infinito. En cierta medida, fué tiempo perdido. (nunca lo es del todo 😉

Entendí, que era necesario ir un paso mas allá. Y es lo que vamos a hacer!

En los próximos artículos, profundizaremos aun mas en los componentes de un motor 3D!. Para ello, iremos presentando multitud de conceptos, que aislados serán muy fáciles de comprender y que habrá que ir dominando poco a poco.

Por poner un ejemplo, conceptos tales como el “dot product” y/o “cross product“, son de OBLIGADO entendimiento, con esto me refiero a un entendimiento real. Probablemente algunos lo asimilaréis con una lectura ligera, son conceptos sencillos.  Lo que necesitéis, pero grabadlo a fuego!.

Os recomendaría vivir ese proceso, en el que, a pesar de sufrir un poco refrescando las matemáticas de la adolescencia, asentaréis multitud de conceptos que os darán esa cintura necesaria para resolver mas adelante problemas 3D por vosotros mismos. Los que vayáis sobrados en este campo, no tendréis el mas mínimo problema,

Para finalizar y por resumir el roadmap de los posts que tengo previstos para Brakeza3D: nos faltan por describir algunas transformaciones del pipeline estándar como mencioné arriba, el frustum view,  el clipping, triangulación, el back-face culling, el light-mapping, el shadow-mapping, luces dinámicas, BSP, y terminaremos un sistema de colisiones y sus respuestas en tiempo real contra una “sopa de triángulos”.

En todo este proceso, aprenderéis multitud de técnicas que los motores comerciales ya os darán resueltas, pero por el camino, habréis adquirido la base necesaria para “hablar 3D“.

Dicho esto, y como final de este post, me gustaría compartir las que para mí, han sido las fuentes de documentación mas importantes. Estos cuatro amigos que voy a mencionar, han sido mis compañeros de viaje en todo éste trayecto, los mejores libros sobre programación 3D:

– Mathematics for 3D Programming and Computer Graphics

Éste será vuestro mejor aliado. No es un libro sencillo, para que negarlo, pero en él, encontraréis casi toda la información teórica necesaria, para ser un verdadero experto programando en 3D. Con especial enfoque en el aspecto matemático y varios ejemplos de código, es para mi el mejor libro para aprender a programar en 3D.

– Real Time Rendering

Libro muy ameno. Su enfoque no es tan “matemático” como el anterior, pero a su favor, expone muy bien la evolución de las arquitecturas 3D hasta la fecha de hoy. Es un libro con un toque mas teórico, donde entenderéis como funciona un motor 3D en la actualidad (donde todo gira entorno a las GPUs).

– Physics For Game Developers

Otra joyita. Intenta cubrir un espectro tan amplio que es muy superficial en muchos de los puntos que trata, pero será de gran utilidad para aproximarse a determinas físicas que uno no está acostumbrado a tratar (airplanes, fuids, etc.).

Real-Time Collision Detection

Para completar la colección, éste ha sido mi última adquisición. Tengo que decir que este libro es una pasada, no encontré otro mejor en su campo. Explica todo lo necesario para adentrarse en el mundo de las colisiones. Mi única queja es el poco desarrollo puesto en el tratamiento de las respuestas. No obstante es de obligada lectura. Aunque decidáis utilizar una librería de físicas externa, antes necesitáis “hablar colisiones“.

Hasta la próxima!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *