Ir al contenido
Hinata Engine

Hinata Engine

·485 palabras·3 mins

¿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.
Repositorio de GitHub


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 .dae y .fbx a 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 .fbx desde 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