An exotic car with ~2 million triangles and a variety of materials such as body panel, glass windshield, and tire/rim. Still has some minor noise. Simple Reinhard tone mapping applied.
The Narumi Renderer
The Narumi renderer is an offline physically based renderer for research and self-education purpose. Narumi was created almost completely from scratch (except for the building blocks of asset loading). Currently It covers a relatively basic set of features. However, once the foundation has been laid, I should be ready to implement a lot of more advanced techniques. Integration with the recent real-time raytracing technologies is also on the roadmap.
Current feature set
-
Bounding volume hierarchy (BVH): Hierarchical Linear BVH and binned-SAH BVH
-
Quasi Monte Carlo samplers.
-
Direct lighting integrator.
-
Incremental path tracing integrator with Russian roulette.
-
Bidirectional path tracing integrator (with multiple importance sampling).
-
Volumetric path tracing integrator.
-
Area lights (polygonal mesh) and punctual lights.
-
Image-based lighting.
-
Basic matte, mirror (specular reflection) and glass (specular transmission) material.
-
Microfacet-based material (GGX), both reflection and transmission. Importance sample based on visible NDF function.
-
Texturing with ray differential anti-aliasing; Bump mapping.
-
Homogeneous participant media with common phase functions (isotropic / Henyey-Greenstein).
-
Subsurface scattering support based on photon beam diffusion.
-
Object instancing.
-
CPU parallelization via multithreading.
-
Custom scene representation to define everything including integrator, camera, geometry, lighting, and material. Conversion between source asset and custom representation is provided.
Blog posts:
Future roadmap
-
More advanced integrators such as VCM and MLT (Multiplexed MLT).
-
More advanced material such as:
-
Specular microstructure, such as Yan, Ling-Qi, et al. "Position-normal distributions for efficient rendering of specular microstructure."
-
Multiple-scattering material, such as Heitz, Eric, et al. "Multiple-scattering microfacet BSDFs with the Smith model."
-
Layered material, such as Belcour Laurent, "Efficient Rendering of Layered Materials using an Atomic Decomposition with Statistical Operators".
-
-
More (heterogeneous) participant media. Possibly OpenVDB integration.
-
More subsurface scattering, such as Frisvad, Jeppe Revall, Toshiya Hachisuka, and Thomas Kim Kjeldsen. "Directional dipole model for subsurface scattering."
-
Sorted raytracing / deferred shading.
-
Adaptive sampling.
-
Monte Carlo denoising, such as Schied, Christoph, et al. "Spatiotemporal variance-guided filtering: real-time reconstruction for path-traced global illumination."
-
Real-time ray-tracing (Direct 12 DXR / Nvidia RTX).
Gallery
Above and below are some images rendered by Narumi demonstrating different features. Hopefully the gallery will keep growing ;)
Asset sources:
-
Testing "knob" modified from https://github.com/lighttransport/lighttransportequation-orb.
-
Textures from FreePBR (https://freepbr.com).
-
HDR Environment maps from http://gl.ict.usc.edu/Data/HighResProbes/
-
Cornell box, bunny, sculpture head modified from McGuire Computer Graphics Archive (http://casual-effects.com/data/).
-
Exotic car purchased from Turbosquid.
A marble sculpture head featuring subsurface scattering (See more)
Foggy Cornell Box
White matte surface
Perfect mirror surface
Rusted iron surface with mixed roughness and metalness
Anisotropic brushed metal surface (in U direction)
Frost glass outside and mirror inside
Original Cornell Box
Glass bunnies filled with different participant media
Left/Middle/Right: forward/isotropic/back-scattering
A grid of instanced knobs rendered with
shallow depth of field
Limestone-like dielectric surface
Glass outside and perfect mirror inside
Streaked rough metal surface
Anisotropic brushed metal surface (in V direction)
Bumpy paved stone surface
Modified Cornell Box