Ves al contingut
Hinata Engine

Hinata Engine

·480 paraules·3 min

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.
Repositori de GitHub


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 .dae i .fbx al 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 .fbx des 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ó