Skip to content

tsssni/carol-engine

Repository files navigation

CarolRenderer

Build:

  1. Enabel graphics tools in windows settings for debug layer
  2. Download DirectX Shader Compiler and compile the shaders
  $env:PATH+=";/path/to/the/dxc.exe"
  cd carol_renderer/shader
  powershell -executionpolicy bypass -file compile_debug.ps1
  1. Update submodule and build with cmake
  git submodule init
  git submodule update
  mkdir build
  cd build
  cmake ..
  cmake --build .
  1. Run
  cd build/bin
  ./carol-engine.exe

Rendering Pipeline

pipeline

Samples

THao65.png

THauzz.png

THaDwT.png

THaPtb.png

Features:

  • Model viewer

    • Model loader based on Assimp
      • Currently alpha blending will be closed as methods for identifying automatically whether a mesh needs to be alpha blended have not been found.
      • It's not guaranteed that Assimp will correctly load the skinned animations.
    • Texture loader based on DirectXTex
      • Texture usage follows glTF 2.0 standard.
      • You need to offer the path of the folder which stores the textures.
      • It's not guaranteed that Assimp will correctly load the texture path.
  • Physically Based Shading

    • These are default and the only supported PBR settings now. GUI for PBR settings is under development.
      • Subsurface Scattering BRDF: Lambertian BRDF
      • Specular BRDF:
        • Normal Distribution Function: GGX Normal Distribution Function
        • Geometry Function: Height-Correlated Masking-Shadowing Function
  • Deferred Shading

    • Store diffuse color, emission, roughness, metalness and normal in G-Buffer
  • Amplification shader and mesh shader

    • These are features supported by GPU with Turing or more advanced architectures.
  • Shader model 6.6

    • HLSL Dynamic resources feature is used to simplify the root signature.
  • Viedo memory management

    • Implemented via buddy system and segregated free lists
  • GPU-driven culling

    • Instance culling is implemented via compute shader
    • Meshlet culling is implemented via amplification shader
    • Supported culling:
      • Frustum culling (instance and meshlet)
      • Normal cone backface culling (meshlet)
      • Hi-Z occlusion culling (instance and meshlet)
  • Cascaded Shadow Map

    • With split level specified to 5 in default
  • Screen-Space Ambient-Occlusion

    • Implemented via compute shader with 3 times edge-preserving filtering in default
  • Tone Mapping

    • Clamp
    • Reinhard
    • ACES
  • Temporal Anti-Aliasing

    • Impleted vai compute shader
    • Jitter the sample position via Halton low-discrepancy sequence (from Unreal Engine 4)
    • Blend current and history pixel colors in YCoCg space (from Unreal Engine 4)
    • Clip the history pixel color via the bounding-box constructed by the expectation and variance of colors of the sampled neighboring pixel (from NVIDIA)
  • OIT

    • Implemented via per-pixel linked-list and compute shader