Crisp

Crisp is a personal open-source project created with an intent to showcase reference implementations and examples of various rendering techniques I've encountered throughout studies and independent exploration of topics in computer graphics.

The application includes a selection of algorithms that cover real-time rendering, simulations and traditional path tracing.

The real-time rendering pipeline is built on top of Vulkan API. The CPU path tracer subsystem is inspired by the architecture of Nori, an educational ray tracer used in the Computer Graphics AS15 course at ETH Zurich.

The project's source code is hosted on my GitHub profile. A quick overview of implemented features is given below.

Real-time rendering samples implemented:

  • GPU path tracer with multiple importance sampling with Ray Tracing extensions
  • Basic GLTF viewer
  • FFT-based ocean simulation
  • Dynamic atmospheric shading
  • Screen space ambient occlusion
  • GPU-based weakly compressible SPH fluid simulation with surface tension
  • Shadow mapping techniques: PCF, VSM, CSM
  • Blinn-Phong shading
  • UE4 style physically-based material shading with image-based lighting
  • Screen-space reflections
  • Point sprite rendering
  • Basic alpha masking for foliage rendering
  • Tiled forward shading
  • Dynamic terrain tessellation

Ray tracing on the CPU:

  • Materials/BRDFs
    • Lambertian
    • Oren Nayar
    • Rough & smooth conductor
    • Rough & smooth dielectric
    • Ideal mirror
  • Integrators
    • Ambient occlusion
    • Direct lighting
    • Path tracing with multiple importance sampling
  • Point, area, environment lights

Some examples and illustrations are shown below.

Gallery

Fluid
Atmospheric shading at dawn
Fluid
Atmospheric shading at noon
Fluid
Atmospheric shading at sunset
Fluid
Foliage with basic alpha testing
Fluid
A still frame from an SPH simulation
Fluid
FFT-based ocean simulation
Fluid
Screen-space ambient occlusion
Fluid
Forward-clustered lighting
Fluid
Atmospheric shading viewed from space
Fluid
PBR-shaded marble
Fluid
Ray-traced frosted glass, diffuse and copper
Fluid
Ray-traced modified Cornell scene
Fluid
PBR-shaded gold
Fluid
PBR-shaded rusted iron
Fluid
PBR-shaded brick
Fluid
GLTF Helmet
Fluid
Vulkan Path Tracer

The shader ball with thinner base used in ray-traced images was modeled by myself in Blender with inspirations from various other shader balls used in other rendering systems. The other shader ball is borrowed from Derkreature.

The environment maps in the showcased images produced with ray tracing are provided by Bernhard Vogl. The physically-based textures are from FreePBR.com.

References & Further Reading

  1. J. Chapman SSAO Tutorial. 2013.
  2. M. Becker, M. Teschner Weakly compressible SPH for free surface flows. In Proceedings of the ACM Siggraph/Eurographics Symposium on Computer Animation (2007), pp. 209–217
  3. J. de Vries PBR & IBL at learnopengl.com.
  4. Hillaire, S. (2020, July). A Scalable and Production Ready Sky and Atmosphere Rendering Technique. In Computer Graphics Forum (Vol. 39, No. 4, pp. 13-22).