Motor gráfico
Motor gráfico desarrollado como trabajo académico
Descripción del Proyecto
Motor gráfico desarrollado desde cero. Implementa técnicas avanzadas como forward y deferred rendering, sistema de sombras, portales, físicas mediante el uso de la librería Bullet, scripting en Lua y una arquitectura ECS con jerarquías. Además, incluye herramientas de edición integradas con ImGui y un sistema de hilos para tareas pesadas.
Tecnologías Utilizadas
Tareas asignadas
Mi rol principal se centró en la parte de más alto nivel como puede ser el input o un sistema de hilos, aunque también participé en algunas características como la iluminación o la carga de assets
Sistema de input
Apoyandose en la librería glfw se ha realizado un sistema de input para ratón y teclado que te permite capturar tanto las diferentes teclas como el movimiento del ratón y el offset de la rueda
Sistema de trabajos
Se ha implementado un sistema de hilos en los que realizar aquellas tareas complejas de forma que la aplicación se mantenga usable en todo momento. Con el objetivo de que estos hilos puedan devolver el resultado de cualquier acción, se ha hecho uso de funciones templatizadas, generalizando el código lo máximo posible.
Scripting en LUA
Se han creado e integrado las bases de un sistema de scripting con LUA. Este sistema es escalable, de forma que en un futuro se podría trabajar en el y permitir al usuario realizar acciones en LUA directamente, sin tener que utilizar C++.
Integración de físicas
Se ha integrado la API Bullet en el motor, permitiendo crear un sistema de físicas con los objetos en escena. Esta librería permite tener tanto objetos físicos estáticos como "Rigidbodies" y controla las interacciones entre los mismos.
Jerarquías de objetos con ECS
Una tarea muy importante realizada en el motor ha sido la abstracción del mismo de forma que sea sencillo de utilizar por el usuario. Es por ello que se ha creado un sistema de objetos que nos permite realizar por debajo todas las acciones necesarias para controlar las diferentes entidades existentes y sus respectivas propiedades, mientras que el usuario tan solo debe pensar en que tipo de objeto le interesa en cada momento. Este sistema también abstrae las físicas integradas de la librería, permitiendo al usuario crear un objeto con físicas de forma sencilla.
Editor realizado con ImGui
Con intención de facilitar la depuración del motor así como la creación de escenas en el mismo se ha desarrollado un editor haciendo uso de ImGui. Desde este editor podremos ver la jerarquía de objetos en la escena así como editar sus propiedades básicas, ya sea su componente de "Transform", sus propiedades físicas o el tipo de luz y sus propiedades en caso de serlo.
Prototipo de sistema de guardado de escenas
Se ha creado una versión inicial de un sistema de guardado que nos permite almacenar en memoria tanto el componente de Transform de los objetos como las propiedades de las diferentes luces. De esta forma se nos permite crear una escena desde el editor sin necesidad de configurar dichos componentes desde código.