¿Qué es Hinata Engine? #
Hinata Engine es un motor de juego desarrollado para la asignatura de Motores de Videojuegos del Grado en Diseño y Desarrollo de Videojuegos de la UPC. Fue creado de forma colaborativa por Jaume Montagut y yo, con el objetivo principal de comprender cómo funciona internamente un motor de juego moderno.
El motor incluye los sistemas habituales que se esperan de un editor y runtime básico:
- Importación de modelos y texturas
- Arquitectura GameObject–Componente
- Guardado y carga de escenas
- UI de editor basada en ImGui
- Pipeline básico de cámara y renderizado
También incorpora varias optimizaciones como:
- Particionado espacial con Octree
- Frustum Culling
- Animación Esquelética, una implementación completa basada en investigación para la tarea final.
Mis contribuciones individuales #
Fui responsable de varios sistemas centrales del motor, incluyendo:
Frustum Culling #
- Implementé comprobaciones de visibilidad en CPU basadas en los planos del frustum de la cámara.
- Integré bounding boxes para el culling en tiempo de ejecución.
- Añadí vista de depuración a través del panel “Configuración → Camera3D”.
Octree #
- Implementé el particionado espacial de la escena para mejorar el renderizado y el picking.
- Añadí visualización dentro del panel de Escena.
Serialización de escenas #
- Implementé el guardado y la carga de escenas jerárquicas usando JSON mediante Parson.
- Carga de escenas mediante arrastrar y soltar desde el editor.
Mouse Picking #
- Implementé ray casting desde la cámara hacia la escena.
- Permití la selección de objetos haciendo clic sobre las mallas.
Sistema de Animación Esquelética #
Como parte de la tarea de investigación, implementamos un sistema completo de animación esquelética:
- Usamos Assimp para importar archivos
.daey.fbxa nuestro formato personalizado. - Convertimos los datos importados al formato propio del motor.
- Implementamos animación de huesos y skinning de mallas.
- Añadimos blending de animaciones entre distintos clips.
- Habilitamos la visualización de la jerarquía de huesos para depuración.
- Soportamos la manipulación manual de huesos cuando el componente del animador está desactivado.


Resumen de funcionalidades del motor #
Añadir modelos #
- Arrastra un archivo
.fbxdesde el panel Assets a la Escena para crear automáticamente la jerarquía de GameObjects.
Mouse Picking #
- Haz clic en cualquier malla en la vista de Escena para seleccionarla.
Frustum Culling (Depuración) #
- Abre Configuración → Camera3D y activa “Ver frustum culling”.
- Mueve o rota la cámara para visualizar el efecto.
Particionado espacial #
- El Octree siempre es visible en la vista de Escena para depuración.
Gestión del tiempo #
- Play: ejecutar el motor
- Pause: pausar y reanudar la simulación
Gestión de recursos #
- Las estadísticas de uso de recursos son visibles en el panel Resources.
Serialización de escenas #
- Arrastra un archivo de escena a la vista de Escena para cargarlo.
- Guarda las escenas mediante Archivo → Guardar Escena.
Librerías utilizadas #
- SDL — ventanas y entrada
- Dear ImGui — UI del editor
- Glew — cargador de extensiones OpenGL
- Parson — análisis JSON
- OpenGL 3 — backend de renderizado