Objective 1: Additional Primitives
- cylinder specified by
l, r
- cone specified by
l, r1, r2
Objective 2: Constructive Solid Geometry
Failed: restructuring of scene nodes proved too complex and time consuming
Objective 3: Texture Mapping
- load texture specified by Lua scene file using lodepng
- primitive surface mapped to image without wasting space
- unique primitive faces
Objective 4: Bump Mapping
- uses mapping from objective 3 but accounts for normal rotation
- bump parameter
b
from[0,1]
controls bump intensity
Objective 5: Glossy Reflection
- glossiness
k
ranges from[0,1]
, affects perturbed ray angle - demo images use 6 samples per reflection
Objective 6: Refraction
- material specifies index of refraction
ior
(1 = pure transmission) - refraction intensity
r
from[0,1]
allows blending with diffuse/texture colour
Objective 7: Glossy Transmission
- glossiness
k
ranges from[0,1]
, affects perturbed ray angle - demo images use 6 samples per transmitted ray
Objective 8: Soft Shadows
- spherical light points with radius
r
(0 = point light) - demo images use 8 samples per shadow ray
Objective 9: Anti-Aliasing
- shoots evenly-spaced rays within each pixel
- demo images use 4 (2x) additional samples per pixel
Objective 10: Depth of Field
- camera view point implicitly defines focal plane
- camera specifies aperture size
a
(0 = pinhole) - demo images use 6 samples per pixel
Extra 1: Fresnel
fresnel
parameter applies Fresnel effect to reflective materials- more transmissive where viewing angle meets normal
Extra 2: Adaptive Anti-Aliasing
- reduces super sample work by 80-95%
- negligible differences with naive anti-aliasing
Extra 3: Phong Normal Interpolation
- load
.obj
files with vertex normal specification - use Barycentric interpolation to calculate normal of any point on mesh surface
Final Render
- 960 x 640, 2x adaptive AA, 4x glossy, 4x soft shadows
- demonstrates all objective principles except DOF and CSG
- ~17 minute rendering time across 4 cores