Code Monkey home page Code Monkey logo

carol-engine's Introduction

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

carol-engine's People

Contributors

tsssni avatar

Stargazers

 avatar Drischdaan avatar Kacper avatar P. A. Minerva avatar  avatar

Watchers

 avatar  avatar

carol-engine's Issues

There are a lot of compiling errors

There are 48 errors in the error list, most of the errors are similar.

  1. error C1083: Cannot open include file: 'assimp/scene.h': No such file or directory.
  2. Variable 'ResourceDescriptorHeap' is not declared.
  3. No overload for method 'InterlockedOr' takes 2 arguments. \carol-engine\carol_renderer\shader\include\cull.hlsli 93
  4. No overload for method 'InterlockedAnd' takes 2 arguments. \carol-engine\carol_renderer\shader\include\cull.hlsli 99
  5. identifier "aiNode" is undefined carol_renderer \carol-engine\carol_renderer\include\scene\assimp.h 30
  6. identifier "aiScene" is undefined carol_renderer \carol-engine\carol_renderer\include\scene\assimp.h 32
  7. identifier "aiMesh" is undefined carol_renderer \carol-engine\carol_renderer\include\scene\assimp.h 34
  8. identifier "aiString" is undefined carol_renderer \carol-engine\carol_renderer\include\scene\assimp.h 54
  9. identifier "aiTextureType" is undefined carol_renderer \carol-engine\carol_renderer\include\scene\assimp.h 55

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.