Se hará una introducción de la funcionalidad implementada en este motor 3D y se mostrará el acabado gráfico en imágenes.

De un vistazo

Pincha sobre las imágenes para visualizarlas mejor.

NW3D_captura1

NW3D_captura2

NW3D_captura3

Introducción

Tras concluir el desarrollo de mi primer motor de videojuegos en dos dimensiones, le tocaba el turno a las 3D. Para este nuevo proyecto, he participado en el programa de becas Talentum Short Track, el cual me permitía acometer el proyecto que quisiese, así que me decanté por la complejidad de los motores de videojuegos una vez más, con la diferencia que este nuevo soportaría modelados en 3 dimensiones. En esta ocasión decidí usar C++, lenguaje que ha sido usado por excelencia para este tipo de propósito. También cambié de plataforma, eligiendo Windows y su poderoso entorno de desarrollo: Visual Studio.

Funcionalidad

Hay que tener presente que en esta ocasión he tenido únicamente 3 meses para el desarrollo de la plataforma, por lo que me centré en desarrollar mi habilidad para generar entornos 3D, dejando la funcionalidad propia de los videojuegos en un segundo plano.

La característica principal del motor es su diseño modular. Este es sin duda el punto que hace que se distancie de otros motores más usados como Unity o Unreal Engine. La plataforma contiene un núcleo central de reducidas dimensiones, el cual se encarga de cargar librerías DLL que hacen de módulos que componen las distintas partes de un motor de videojuegos habitual. Esto implica que se pueden añadir o quitar módulos simplemente añadiendo o quitando los archivos DLL del directorio de módulos, con la garantía de que el proceso principal no saldrá de su ejecución con errores. Naturalmente si se elimina el módulo encargado de dibujar objetos en pantalla, no veremos nada, pero podría haber otros módulos, como por ejemplo el de físicas, que no necesitemos para nuestro videojuego y sea prescindible. Este motor es por tanto escalable en ambas direcciones, es decir, puede crecer en funcionalidad pero también puede ser reducido, haciéndolo más adaptable a las necesidades del desarrollador.

Los módulos desarrollados hasta ahora son:

  • Window_manager. Este módulo está basado en la librería SDL y es el encargado de manejar la ventana donde se mostrará el juego, el sonido y los eventos de teclado y ratón. Naturalmente es un módulo demasiado importante para ser eliminado, pero si puede ser sustituido por uno que no use SDL, por ejemplo.
  • Camera. Proporciona movilidad a la cámara que representa la pantalla de juego. La movilidad es libre, por lo que mediante el teclado (para la dirección) y el ratón (para la orientación), el usuario puede desplazarse por el escenario.
  • Texture_manager. Permite la carga de imágenes que se usarán como texturas. Admite varios formatos de imágen, entre los que se encuentran BMP, JPG y PNG.
  • Model_loader. Permite cargar modelados 3D en formato .3ds procedentes de 3DStudio Max. Cargará los vértices, polígonos y los distintos tipos de texturas. Para este último caso, se usa el módulo Texture_manager. Este módulo está basado en la librería Assimp, disponible en Github.
  • Shader_manager. Los shaders son pequeños programas enviados a la GPU del PC con el objetivo de que este coprocesador se encarge del apartado de los gráficos y dejando la CPU libre para otras tareas. En este motor, los shaders se escriben en archivos con la extensión .glsl y este módulo es el encargado de cargarlos. Admite shaders que procesan modelados y sahders de post-procesado.
  • Drawer. Módulo encargado de dibujar escenas. Consta de dos fases: en la primera, dibuja cada modelo usando su shader correspondiente sobre una textura general. En la segunda fase se aplican diferentes efectos sobre esta textura (post-procesado) para posteriormente dibujar la textura resultante en pantalla. Los shaders de post-procesado disponibles son: bloom y depth-of-field

Deja un comentario

Tu email no será publicado. Campos obligatorios marcados con *