Què és Hinata Engine? #
Hinata Engine és un motor de joc desenvolupat per a l’assignatura de Motors de Videojocs del Grau en Disseny i Desenvolupament de Videojocs de la UPC. Va ser creat de manera col·laborativa per Jaume Montagut i jo, amb l’objectiu principal de comprendre com funciona internament un motor de joc modern.
El motor inclou els sistemes habituals que s’esperen d’un editor i runtime bàsic:
- Importació de models i textures
- Arquitectura GameObject–Component
- Desat i càrrega d’escenes
- UI d’editor basada en ImGui
- Pipeline bàsic de càmera i renderització
També incorpora diverses optimitzacions com:
- Particionament espacial amb Octree
- Frustum Culling
- Animació Esquelètica, una implementació completa basada en recerca per a la tasca final.
Les meves contribucions individuals #
Vaig ser responsable de diversos sistemes centrals del motor, incloent-hi:
Frustum Culling #
- Vaig implementar comprovacions de visibilitat en CPU basades en els plans del frustum de la càmera.
- Vaig integrar bounding boxes per al culling en temps d’execució.
- Vaig afegir vista de depuració a través del panell “Configuració → Camera3D”.
Octree #
- Vaig implementar el particionament espacial de l’escena per millorar la renderització i el picking.
- Vaig afegir visualització dins del panell d’Escena.
Serialització d’escenes #
- Vaig implementar el desat i la càrrega d’escenes jeràrquiques usant JSON mitjançant Parson.
- Càrrega d’escenes mitjançant arrossegar i deixar anar des de l’editor.
Mouse Picking #
- Vaig implementar ray casting des de la càmera cap a l’escena.
- Vaig permetre la selecció d’objectes fent clic sobre les malles.
Sistema d’Animació Esquelètica #
Com a part de la tasca de recerca, vam implementar un sistema complet d’animació esquelètica:
- Vam usar Assimp per importar arxius
.daei.fbxal nostre format personalitzat. - Vam convertir les dades importades al format propi del motor.
- Vam implementar animació d’ossos i skinning de malles.
- Vam afegir blending d’animacions entre diferents clips.
- Vam habilitar la visualització de la jerarquia d’ossos per a depuració.
- Vam suportar la manipulació manual d’ossos quan el component de l’animador està desactivat.


Resum de funcionalitats del motor #
Afegir models #
- Arrossega un arxiu
.fbxdes del panell Assets a l’Escena per crear automàticament la jerarquia de GameObjects.
Mouse Picking #
- Fes clic en qualsevol malla a la vista d’Escena per seleccionar-la.
Frustum Culling (Depuració) #
- Obre Configuració → Camera3D i activa “Veure frustum culling”.
- Mou o gira la càmera per visualitzar l’efecte.
Particionament espacial #
- L’Octree sempre és visible a la vista d’Escena per a depuració.
Gestió del temps #
- Play: executar el motor
- Pause: pausar i reprendre la simulació
Gestió de recursos #
- Les estadístiques d’ús de recursos són visibles al panell Resources.
Serialització d’escenes #
- Arrossega un arxiu d’escena a la vista d’Escena per carregar-lo.
- Desa les escenes mitjançant Arxiu → Desa l’escena.
Biblioteques utilitzades #
- SDL — finestres i entrada
- Dear ImGui — UI de l’editor
- Glew — carregador d’extensions OpenGL
- Parson — anàlisi JSON
- OpenGL 3 — backend de renderització