Skip to content

miyehn/niar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A playground to test my patience.

model by Sousinho

model by Mats de Wind

model by futaba@blender, environment map downloaded from Poly Haven


Features

Common Vulkan utilities to save my sanity: abstraction classes, validation layer, debug draw,etc.

Dear ImGui and RenderDoc integration

Loading gLTF scenes and basic scene management

  • With a Blender addon to make my workflow easier
  • Automatic hot reload when asset files change

A CPU shader simulator that helps myself prototype and debug GLSL shaders. It was first created to help develop the sky atmosphere. See example usage in Vincent.cpp.

A variety of rendering paths that can be modified/extended into more variants:

  • Simple unlit forward
  • PBR deferred with many post-processing options
    • emissive and translucent materials
    • environment maps
    • HDR, tone mapping, gamma correction, exposure compensation
  • Multi-threaded CPU path tracing with optional SIMD acceleration using Intel ISPC
    • basic optimizations (BVH, direct light rays, Russian Roulette, correlated multi-jittered sampling within each pixel, cosine-weighted importance sampling)
    • SIMD-specific optimizations that were part of my CMU-15418 final project, see pathtracer-standalone branch
    • diffuse, mirror and glass materials
    • image-based lighting
    • depth of field
  • Render to file using the path tracer
  • RTX pipeline using the VK_KHR_ray_tracing_pipeline extension, even though it now just draws a single triangle

Physically-based sky atmosphere for both deferred rendering path and path tracer

(OpenGL legacy feature, not integrated yet) Procedural grass generation and animation. See grass-sim branch.

(OpenGL legacy feature, now deleted) shadow mapping for point and directional lights

It used to run on both PC and Mac, but now it's probably broken on Mac.



(The above water tower model and its textures are from www.animatedheaven.weebly.com)

Usage

Run

./ellyn

WASD to move the camera, E/Q to move up/down. LMB drag to rotate camera. ESC to quit.

When pathtracer is set as the active renderer, camera control is disabled, but instead some pathtracer-specific controls become effective. Look for PathtracerController in the scene hierarchy for details.

Render to file

Something like:

./asz -w 200 -h 150 -o output.png

Configuration

See config/global.ini for properties that get loaded on program start. It gets loaded once and stays effective for the duration of the program.

There's also config/pathtracer.ini that gets loaded when the path tracer initializes. It automatically hot reloads, so I use it for tweaking path tracer settings.

By the way, I named the CMake targets after my OCs (original characters)

This is Ellyn:

And this is Asz (short for Aszelea):

There is also Vin (short for Vincent), but I still need to make them a portrait.