Skip to content

AlexPrime2023/SandboxEngineExpirements

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

SandboxEngine

Работа велась в 2021.

SandboxEngine — 3D-рендеринг песочница, цель которой — построить архитектурно расширяемую основу рендер-/движкового слоя.

Основной проект песочницы - рендеринг pipeline с поддержкой PBR и Image-Based Lighting (IBL).

Цели проекта

  • Реализовать корректный HDRI to IBL pipeline:
    • panorama to cubemap
    • cubemap to irradiance map
    • cubemap to prefiltered specular map (roughness через mip levels)
  • Использовать compute shaders

Damaged Helmet Test #1

DamagedHelmet 1

Damaged Helmet Test #2

DamagedHelmet 2

Основные cистемы

Event System

EventSystem отвечает за единый поток событий.

Подсистема:

  • принимает события из платформенного слоя (окно, ввод),
  • преобразует их в типизированные Event,
  • распространяет события по системе.

OpenGL Layer

OpenGL Renderer слой представляет собой низкоуровневую реализацию рендеринга, изолированную от остальной части движка.

Он инкапсулирует прямые вызовы OpenGL и предоставляет единый API для работы с GPU-ресурсами.

Цель слоя:

  • Скрыть OpenGL API
  • Обеспечить управление GPU-ресурсами
  • Разделить абстракции рендера и конкретную графическую реализацию
  • Подготовить основу для возможной поддержки других API (Vulkan / DirectX)

EnvironmentBaker

EnvironmentBaker — подсистема, отвечающая за предварительную генерацию окружения (Image-Based Lighting) из HDRI-панорам.

Подсистема инкапсулирует весь GPU-пайплайн, необходимый для получения IBL-текстур, и изолирует его от остального рендер-кода.

Цель:

  • Преобразование HDR panorama в cubemap
  • Генерация diffuse irradiance map
  • Генерация prefiltered specular cubemap
  • Подготовка окружения для PBR-рендеринга

Pipeline

  • Panorama to Cubemap (преобразование эквидистантной HDRI-панорамы в cubemap текстуру)
  • Cubemap to Irradiance Map (интеграция освещения для диффузной составляющей)
  • Cubemap to Prefiltered Environment Map (генерация specular отражений с учётом roughness через mip-уровни)

Все этапы выполняются с использованием compute shaders.

GeometryTriangulated

GeometryTriangulation — подсистема импорта геометрии, отвечающая за загрузку и подготовку мешей из внешних 3D-форматов (OBJ).

Подсистема изолирует работу с Assimp и преобразует входные данные в формат, пригодный для использования в рендерере.

Цель:

  • Загрузка 3D-моделей (glTF / OBJ / FBX и др.)
  • Триангуляция геометрии
  • Извлечение вершинных данных (позиции, нормали, UV, тангенты)
  • Загрузка связанных текстур материалов
  • Формирование runtime-мешей

PathResolver

PathResolver — утилита для единообразной работы с путями к ассетам. Она изолирует остальной код от абсолютных путей и структуры файловой системы, позволяя использовать только относительные пути внутри движка.

Цель:

  • Установка базовой директории ассетов (content/)
  • Разрешение относительных путей в абсолютные
  • Упрощение переноса проекта между машинами и конфигурациями сборки

Используемые технологии

  • C++20
  • OpenGL 4.5+
  • GLFW
  • GLAD
  • Assimp
  • stb_image / stb_image_write
  • glm
  • Visual Studio 2022

Как собрать

git clone --recurse-submodules <repo>

cmake -S . -B build -G "Visual Studio 17 2022" -A x64

TODO

  • Убрать сильную привязанность к OpenGL
  • Добавить Vulkan API
  • Улучшить Event System (EventDispather)
  • Resource Cache
  • Camera Control

About

SandboxEngine — 3D-рендеринг песочница, цель которой — построить архитектурно расширяемую основу рендер-/движкового слоя.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors