codeonwort / pathosengine

OpenGL Rendering Engine for Study

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Introduction

OpenGL rendering engine mainly to toy with real-time graphics programming.

It's architecture follows game engine patterns but it's not meant to be a game engine.

Development Environment

I'm developing in the following environment and won't consider backward compatibility or other OS.

  • GL version: OpenGL 4.6 Core Profile
  • Language: C++17
  • OS: Windows 11
  • IDE: Visual Studio 2022

How to Build

  1. Clone this repo.
  2. Run Setup.ps1 to download media resources. (you need execution policy for PowerShell script)
  3. Build all projects in PathosEngine.sln.
  4. Execute one of test projects.

Sample Images

Collapse

AreaLightTest Area light sources (sphere light and rect light).

McGuireFireplaceRoom Asynchronous Wavefront OBJ asset loading, local lights with omnidirectional shadow mapping, screen space light shaft, and screen space ambient occlusion.

RenderChallenge1 Procedural geometries and textures, volumetric clouds, and post process bloom.

RenderingChallenge2 Procedural geometries and sky.

GLTF-DamagedHelmet Asynchronous glTF asset loading, Cook-Torrance BRDF for local illumination, and basic sky IBL for global illumination.

GLTF-Sponza Yet another Sponza scene.

Summary of Rendering Features

  • Rendering pipeline
    • Depth prepass
    • Local illumination
      • Area lights (sphere light, rect light)
      • PBR materials
    • Global illumination
      • Cascaded shadow map
      • Screen-space ambient occlusion
      • Screen-space reflection
      • Real-time illumination from sky light sources (skybox, panorama, or atmosphere)
      • Real-time indirect illumination from irradiance/radiance probes (WIP)
    • Volumetric clouds
    • Post processing
      • God ray (light shaft)
      • Auto exposure
      • Bloom
      • Tone mapping
      • Anti-aliasing (FXAA, TAA)
      • Super resolution (AMD FSR1)
      • Depth of field
  • Engine subsystems
    • Render thread
    • Asynchronous asset loaders (Wavefront OBJ, glTF)
    • Scene capture (rendering from separate views other than the main view)
    • Runtime shader recompilation
    • Actor system (component-based development)
    • Material shader assembly system (generate material shaders from templates so that they can run in frame rendering pipeline)
    • RenderDoc integration
    • Console variables and console window

Third-party Libraries

About

OpenGL Rendering Engine for Study

License:MIT License


Languages

Language:C 49.1%Language:C++ 38.6%Language:GLSL 11.8%Language:PowerShell 0.3%Language:Rust 0.3%