Voltar ao portfolio

Projeto pessoal / Programação de engine e ferramentas

Hibou Engine

Uma engine de jogos pessoal em que exploro a interoperabilidade entre C++ e C#, ferramentas de editor e os sistemas que fazem um jogo funcionar.

  • C++
  • C#
  • Windows
  • OpenGL
  • WPF
Editor do Hibou Engine com viewport 3D, hierarquia de cena e painéis de componentes.
O editor do Hibou Engine, desenvolvido junto à engine.

01 / Contexto

Aprender criando
a camada por trás de tudo.

Trabalho no Hibou no meu tempo livre para entender como sistemas nativos e um editor gerenciado se integram.

O ponto de partida foi a interoperabilidade entre C++ e C#. Depois, o projeto se tornou um espaço para explorar renderização, entidades e componentes, persistência de projetos e ferramentas para trabalhar com cenas.

Priorizo as ferramentas do editor e a conexão entre as duas linguagens. Essa escolha também orienta o renderizador: o suficiente para trabalhar com uma cena enquanto me concentro nos sistemas que quero entender.

02 / Decisões técnicas

Um olhar para
a engine e o editor.

Editor do Hibou Engine exibindo uma cena no viewport OpenGL.
Trabalhando com uma cena no editor.

Renderização

Um renderizador criado com OpenGL

A engine usa OpenGL para renderização. Escolhi pela simplicidade e implementação relativamente rápida, para me concentrar nas ferramentas do editor e na interoperabilidade C++ / C# em vez de buscar gráficos fotorrealistas.

  • C++
  • OpenGL
A interface do editor do Hibou Engine baseada em WPF.
A interface do editor gerenciado.

Ferramentas de editor

Um editor gerenciado com WPF

A interface do editor é criada com Windows Presentation Foundation (WPF). Ela oferece uma base de interface Windows para desenvolver ferramentas de cena e explorar interfaces como editores de nós junto à engine nativa.

  • C#
  • WPF
  • Windows
Um projeto aberto no editor do Hibou Engine.
Dados do projeto e edição de cenas.

Persistência de projetos

Projetos e serialização

Cada projeto é tratado de forma independente. Cenas, entidades, componentes e configurações são serializados para salvar e carregar o projeto. Isso permite usar o editor em diferentes sessões de trabalho.

  • Cenas
  • Componentes
  • Serialização
Hierarquia de cena e painéis de componentes no Hibou Engine.
Entidades e componentes representados no editor.

Arquitetura da engine

Entidades e componentes com EnTT

O núcleo da engine usa uma arquitetura de entidade-componente-sistema (ECS) com EnTT. É onde exploro como entidades e componentes são representados por trás do editor.

  • C++
  • EnTT
  • ECS

03 / Por dentro

Compilar o projeto.
Trabalhar com memória.

Configuração de compilação

Gerar projetos com Sharpmake

Os arquivos de projeto e solução são gerados por código com Sharpmake, a ferramenta de configuração de compilação de código aberto em C# da Ubisoft.

Configuração de compilação do Hibou Engine escrita com Sharpmake.
Configuração de compilação em código.

Memória / Em desenvolvimento

Explorar EASTL

Estou substituindo gradualmente partes da biblioteca padrão de C++ pela EASTL da Electronic Arts para explorar um controle mais preciso da alocação de memória nos sistemas da engine.

Este trabalho está em andamento. O foco é a implementação e as escolhas envolvidas.

  • C++
  • EASTL
  • Alocação de memória

04 / Em desenvolvimento

Explorar
a programação visual.

Em desenvolvimento

O próximo objetivo é um sistema baseado em nós para criar lógica de gameplay.

A base da interface usa Nodify. Meu foco atual é o modelo de grafo e a execução da lógica: como um grafo criado no editor se transforma em lógica executável.

É uma direção que estou explorando no projeto, e ainda não uma funcionalidade finalizada.

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

Contato

Cidade de Québec, QC, Canadá / Disponível para oportunidades

Estou aberto a oportunidades em desenvolvimento de software, programação de ferramentas e gameplay, além de vagas de artista 3D júnior. Se minha experiência fizer sentido para sua equipe, será um prazer conversar pelos meus perfis nas redes sociais.