Volver al portfolio

Proyecto personal / Programación de motor y herramientas

Hibou Engine

Un motor de juego personal donde exploro la interoperabilidad entre C++ y C#, las herramientas del editor y los sistemas que hacen funcionar un juego.

  • C++
  • C#
  • Windows
  • OpenGL
  • WPF
Editor de Hibou Engine con un viewport 3D, jerarquía de escena y paneles de componentes.
El editor de Hibou Engine, desarrollado junto al motor.

01 / Contexto

Aprender creando
la capa subyacente.

Trabajo en Hibou en mi tiempo libre para comprender cómo se integran los sistemas nativos y un editor administrado.

El punto de partida fue la interoperabilidad entre C++ y C#. A partir de ahí, el proyecto se convirtió en un espacio para explorar renderizado, entidades y componentes, persistencia de proyectos y herramientas para trabajar con escenas.

Doy prioridad a las herramientas del editor y a la conexión entre ambos lenguajes. Esta elección también orienta el renderizador: lo suficiente para trabajar con una escena mientras me concentro en los sistemas que quiero comprender.

02 / Decisiones técnicas

Un vistazo a
el motor y el editor.

Editor de Hibou Engine mostrando una escena en su viewport OpenGL.
Trabajando con una escena en el editor.

Renderizado

Un renderizador creado con OpenGL

El motor utiliza OpenGL para renderizar. Lo elegí por su sencillez y su implementación relativamente rápida, para concentrarme en las herramientas del editor y la interoperabilidad C++ / C# en lugar de buscar gráficos fotorrealistas.

  • C++
  • OpenGL
La interfaz del editor de Hibou Engine basada en WPF.
La interfaz del editor administrado.

Herramientas de editor

Un editor administrado con WPF

La interfaz del editor está creada con Windows Presentation Foundation (WPF). Me proporciona una base de interfaz de Windows para desarrollar herramientas de escena y explorar interfaces como editores de nodos junto al motor nativo.

  • C#
  • WPF
  • Windows
Un proyecto abierto en el editor de Hibou Engine.
Datos del proyecto y edición de escenas.

Persistencia de proyectos

Proyectos y serialización

Cada proyecto se gestiona de forma independiente. Las escenas, entidades, componentes y ajustes se serializan para guardar y cargar el proyecto. Esto permite utilizar el editor en distintas sesiones de trabajo.

  • Escenas
  • Componentes
  • Serialización
Jerarquía de escena y paneles de componentes en Hibou Engine.
Entidades y componentes representados en el editor.

Arquitectura del motor

Entidades y componentes con EnTT

El núcleo del motor utiliza una arquitectura de entidad-componente-sistema (ECS) con EnTT. Es donde exploro cómo se representan las entidades y los componentes bajo el editor.

  • C++
  • EnTT
  • ECS

03 / Bajo el capó

Compilar el proyecto.
Trabajar con la memoria.

Configuración de compilación

Generar proyectos con Sharpmake

Los archivos de proyecto y solución se generan mediante código con Sharpmake, la herramienta de configuración de compilación de código abierto en C# de Ubisoft.

Configuración de compilación de Hibou Engine escrita con Sharpmake.
Configuración de compilación mediante código.

Memoria / En desarrollo

Explorar EASTL

Estoy sustituyendo progresivamente partes de la biblioteca estándar de C++ por EASTL de Electronic Arts para explorar un control más preciso de la asignación de memoria en los sistemas del motor.

Este trabajo está en curso. El foco está en la implementación y las decisiones que implica.

  • C++
  • EASTL
  • Asignación de memoria

04 / En desarrollo

Explorar
la programación visual.

En desarrollo

El próximo objetivo es un sistema basado en nodos para crear lógica de gameplay.

La base de la interfaz utiliza Nodify. Mi enfoque actual es el modelo de grafo subyacente y la ejecución de la lógica: cómo un grafo creado en el editor se convierte en lógica ejecutable.

Es una dirección que estoy explorando en el proyecto, no una función terminada.

  • C#
  • Nodify
  • Modelo de grafo
  • Lógica de gameplay

Contacto

Ciudad de Québec, QC, Canadá / Disponible para oportunidades

Estoy abierto a oportunidades en desarrollo de software, programación de herramientas y gameplay, así como a puestos de artista 3D junior. Si mi experiencia encaja con tu equipo, estaré encantado de conversar a través de mis perfiles sociales.