Z Ray Tracer

 

About

Z Ray Tracer (ZRT) is a physically based general-purpose ray tracer developed by Hongzhi Wu as an effort to learn the theories and practices of physically based rendering. Z stands for "zhui", a Chinese character whose meaning is "trace".

 

R&D Log

07/13/2007    Implemented tone mapping using bilateral filtering [3]. Some of the pictures below are adjusted using tone-mapping.

05/06/2007    Used flex and bison to generate a parser for our own scene description. Now ZRT is a completely data-driven command line tool.

04/29/2007    Added 2d MIP-MAPed textures and cube map.

04/24/2007    Added isotropic BRDF shaders for both analytical(Ward) and measured-data (MERL dataset) models.

04/03/2007    Added support for triangular meshes; Added a BSP tree based intersection accelerator for meshes and a kd tree acceleration structure for the entire scene.

03/27/2007    Summary of previous progress: Established the overall general purpose offline renderer architecture. Features area light, soft shadows, indirect lighting (global illumination) shader and perfect mirror shader.

 

Screenshots

Please click on the thumbnails to see the original pictures.

Point light.

direct diffuse illumination shader, 2x2x2 samples per pixel, tiny area light to approximate point light, 1 shadow ray.

Soft shadows.

direct diffuse illumination shader, 3x3x4 samples per pixel, area light, 16 shadow rays.

Indirect lighting.

global diffuse illumination shader, 3x3x4 samples per pixel, area light, 6 shadow rays, recursion depth = 4.

Perfect mirror

perfect mirror and global diffuse illumination shader, 3x3x4 samples per pixel, area light, 6 shadow rays, recursion depth = 4, mirror reflectance = 0.9.

Two mirror balls

perfect mirror and global diffuse illumination shader, 3x3x4 samples per pixel, area light, 4 shadow rays, recursion depth = 4, mirror reflectance = 0.9.

 
Three mirror balls

perfect mirror and global diffuse illumination shader, 3x3x16 samples per pixel, area light, 4 shadow rays, recursion depth = 4, mirror reflectance = 0.9.

Mirror bunny and diffuse ball

perfect mirror and global diffuse illumination shader, 3x3x4 samples per pixel, area light, 4 shadow rays, recursion depth = 4, mirror reflectance = 0.9.

Diffuse bunny and mirror ball

perfect mirror and global diffuse illumination shader, 3x3x4 samples per pixel, area light, 4 shadow rays, recursion depth = 4, mirror reflectance = 0.9.

Silver bunny and orange ball

measured isotropic BRDF global illumination shader, 5x5x6 paths per pixel, 4 shadow rays, recursion depth = 4
BRDFs[2]: silver-metallic-paint, orange-paint
Textured scene

global diffuse illumination shader, 10x10 paths per pixel, 4 shadow rays, recursion depth = 4
     
Diffuse scene in a lightprobe

global diffuse illumination shader, uffizi light probe, 10x10 paths per pixel, 64 shadow rays, recursion depth = 4
Silver-metallic-paint  ball

measured isotropic BRDF global illumination shader, 10x10 paths per pixel, 64 shadow rays, recursion depth = 4
     

 

References

[1] Matt Pharr and Greg Humphreys. Physically based rendering. Morgan Kaufmann Press, 2004

[2] Wojciech Matusik, Hanspeter Pfister, Matt Brand, and Leonard McMillan. A data-driven reflectance model. ACM Trans. Graph. 22(3):759-769, 2003

[3] Fredo Durand and Julie Dorsey. Fast Bilateral Filtering for the Display of High-Dynamic-Range Images. Proceedings of the 29th annual conference on Computer graphics and interactive techniques : 257-266, 2002

 

Back to Cool Stuff

Last Updated  2007-07-13 23:01:02