Online Assets: Piano - tf3dm.com (Toki) Rose - archibase.net (Toki) Table/Rose Stem wood texture image (Valerie) http://www.deviantart.com/art/Wood-texture- I-101021540 by ResurgidaResources Cork texture image (Valerie) http://enchantedgal-stock.deviantart.com/art/Corkboard- Wood- Cork-Composite- 49823242 by Enchantedgal-Stock Music sheet image (Valerie) http://markopolio-stock.deviantart.com/art/Sheet- Music-2- 61505294 by markopolio-stock Created/Personal Assets: Table geometry (Valerie): modeled in Maya Cork geometry (Valerie): modeled in Maya Jar (Valerie): modeled in Maya Music sheet geometry (Toki): modeled in Maya Background image (Valerie) Scene Lighting: For our scene lighting we used two 10.f x 10.f area lights to create a more outdoor/global lighting effect. To decrease rendering time, we placed our scene in a minibox with the back and front face omitted so that the background plane could show through. We sampled at 64 samples per pixel. Technical Contributions: Photon gathering (Toki) When the ray tracer queries for a sample color at an intersected point, we get the photons within a certain radius from that point from the kdtree. We then treat each photon as a point light and add up their contribution to the BRDF. To avoid splotchiness without having to send out a prohibitively large number of photons, we use a relatively large radius to find points in the kdtree (around 0.1), find the average radius r of the photons, and treat each photon as a point light fixed at r with 1/r^2 attenuation. Thus, even when the photons are sparse, we get smooth lighting across the surfaces. The kdtree uses the Manhattan distance, which results in boxy- looking patterns in the image, so we filter out the photons so they are all within the desired Euclidian distance. Colored Photon Mapping (Toki) We extend photon mapping to keep track of colors by modifying the RGB-channel lightIntensity variable that gets passed down the TracePhoton() path using a quick heuristic. At each intersection, we generate a random number and test it against the three Ka values of the material; any channel with a Ka value less than the random number gets zeroed out in lightIntensity. Thus, a white photon that hits a pink object might either turn red (if the random number is below Ka_r but above Ka_g and Ka_b) or remain white. The accumulation of many photons at that point will hopefully be pink. Refraction/Total Reflection for Photon Mapping (Toki) If a material is transparent, we generate a random number, and if it is less than the intersected material’s transmittance, we compute the refracted direction using the indices of refraction and redirect the photon. Otherwise, if the random number is less than the sum of the material’s transmittance and reflectivity, we reflect the photon. Shadow Rays through Transmissive Objects (Valerie) For transmissive objects, we modify the ComputeSampleColor function in the Backward Renderer Class. Given an intersection with an object, we trace rays towards the light sources. For each sample of a light source, we call the Trace function to see if the ray intersects an object on its way to the light. If an object is hit that is not transmissive, then we know that the point we are checking is in shadow, and we do not need to add any contributions to the BRDF of that point. If an object is hit that is transmissive, then we continue to trace the ray towards the light source by tracing an updated ray that starts a little beyond the intersection point. If we never hit an object, then we add the BRDF of the sampled light source to the original intersection point. Depth of Field (Toki) To get depth of field, we generate a ray for a normal pinhole camera and find the intersection of that ray with the focal distance to get the focal point. Then we randomly sample from a circle with a specified aperture radius at the camera lens, and return a ray that goes from the sampled point to the focal point. Objects in the focal plane always stay in focus while others become blurry.