-
Notifications
You must be signed in to change notification settings - Fork 889
Aggregation of Possible Next Steps
As living documents, there is always more polish and more refinement that can be achieved in the existing Ray Tracing books.
This can get in the way of expanding the series. There are unquestionably many--a seemingly uncountable number of--ways that the series can be appended, expanded, and iterated.
Looking to the future of its development, we have decided to collate all previously existing suggestions for expansion. This is an area of the book that could use some polish (another one!).
As an example, the final chapter of Ray Tracing in One Weekend is entitled "Where Next?" and contains a list of possible places to take your newly formed raytracer.
When In One Weekend was published, it existed as the sole book standing on its own. Including a list of places for exploration naturally keyed into the philosophy of the text. However, as additional books in the series were created, a problem emerged. Many of the suggestions offered at the end of In One Weekend are present in Ray Tracing: The Next Week. Some, however, are noticeably absent (specifically; shadow rays, triangles, and parallelism). In addition, The Next Week does not contain a chapter devoted to next steps, whereas Ray Tracing: The Rest of Your Life contains such a chapter.
So, we have a chapter in book 1 that contains a list of possible next steps for your raytracer (some of which is implemented in the next book). A book 2 which contains no such list. And a book 3 which contains such a list, but has no implementation for any of it.
Adding to this complexity, the books launched with a blogspot in tandem. http://in1weekend.blogspot.com/ was created with the goal of suggesting and showcasing raytracer projects that could be completed in one weekend. For every book in the series: In One Weekend, The Next Week, and The Rest of Your Life, a blog post was written that contains additional (mostly distinct) suggestions for each chapter in that book. There are dozens of ideas in these blogs, not to mention the wealth of information contained in the comments!
At present, the complexity of this collection leads the author to be unable to recommend following any of the suggestions.
The wiki contained here is an attempt to wrangle all of these suggestions into a single moldable document, with the aim of redesigning this aspect of the series.
- Adding lights explicitly: Sending shadow rays to lights
- Adding lights implicitly: Making objects emit light
- Bias scattered rays toward lights, down-weighting those rays to cancel out the bias
- Peter Shirley's preference (in the minority)
- Adding triangles
- Adding surface textures
- Adding solid textures
- Ken Perlin's code is online
- Andrew Kensler has more at his blog
- Adding Volumes and Media
- Probabilistic intersections based on density
- Parallelism
- Run N copies of code on N cores with different random seeds. Average the results
- Explore Monte Carlo Methods
- Bidirectional path tracing
- Metropolis algorithm
- Movie renderers
- Look at papers out of studios
- Look at papers out of Solid Angle
- High-performance ray tracing
- Look at papers from Intel
- Look at papers from Nvidia
- Hard-core Physically Based Renderers: Convert from RGB rendering to spectral rendering
- Each ray has a unique random wavelength
- Add a glossy BRDF model
http://in1weekend.blogspot.com/2016/01/ray-tracing-in-one-weekend.html
- Read Turner Whitted's seminal 1980 ray tracing paper
- Chapter 0: Overview
- Fundamentals of Computer Graphics, 4th Ed, Marschner and Shirley
- The Graphics Codex, Mcguire
- Real-Time Rendering, 4th Ed, Akenine-Möller et al.
- Computer Graphics: Principles and Practice, 3rd Ed, Hughes et al.
- Chapter 1: Output an image
- https://github.com/nothings/stb/blob/master/stb_image.h
- High Dynamic Range Imaging: Acquisition, Display, and Image-Based Lighting, 2nd Ed, Reingard et al.
- Chapter 2: The vec3 class
- Create separate classes for points, displacements, colors, etc.
- Using the compiler to do dimensional analysis: velocity, length, time are different types
- Found to be too cubersome in the 1990s
- Researchers at Dartmouth making a serious effort: https://github.com/ouj/safegi
- Chapter 3: Rays, a simple camera, and background
- Add an environment map to your background function
- A terrific history of environment mapping: http://www.pauldebevec.com/ReflectionMapping/
- The easiest mapping is to use a single image for the entire sphere of directions
- Example probes for use: http://www.pauldebevec.com/Probes/
- Chapter 4: Adding a sphere
- Adding triangles using Barycentric methods: https://gamedev.stackexchange.com/questions/23743/whats-the-most-efficient-way-to-find-barycentric-coordinates
- Ellipses
- Instancing
- Composite objects using CSG methods: http://xrt.wdfiles.com/local--files/doc%3Acsg/CSG.pdf
- Chapter 5: Surface Normals and multiple objects
- Chapter 6: Antialiasing
- Implementation in the book is called "Box filtering"
- "Good enough" for most situations
- Use a Gaussian-like filter instead: http://www.reedbeta.com/blog/antialiasing-to-splat-or-not/
- Can either:
- Uniformly sample the screen and weight the samples
- Non-uniformly sample
- Implementation in the book is called "Box filtering"
- Chapter 7: Diffuse Materials
- "Ideal" diffuse is also called "Lambertian" and are used 99% of the time in graphics
- Real diffuse objects are not exactly Lambertian
- e.g. become specular at grazing angle
- Chapter 8: Metal
- Have the color of the metal go to white at grazing angle
- Schlick Approximation works for this
- Can use the exact Fresnel equations
- But normal incident is usually adequate: https://interplayoflight.files.wordpress.com/2013/12/fresnelcolours.png
- Have the color of the metal go to white at grazing angle
- Chapter 9: Dielectrics
- Filtering of light within a dielectric: http://www.prestoimages.net/imagecapture/images/rd10335/10335_1980187.jpeg
- Can be modeled by exponential decay, covered well in the Beer's Law section: https://www.flipcode.com/archives/Raytracing_Topics_Techniques-Part_3_Refractions_and_Beers_Law.shtml
- Chapter 10: Positionable camera
- Replace the camera parameter setting in the book with a camera matrix: https://en.wikipedia.org/wiki/Camera_matrix
- Chapter 11: Defocus Blur
- Match a real camera: https://people.eecs.berkeley.edu/~barsky/VisRendPapers/survey1.pdf
- Match a real lens: http://groups.csail.mit.edu/graphics/classes/CompPhoto06/html/lecturenotes/21_Lenses_6.pdf
- Chapter 12: Where next?
- Make it physically accurate
- Use spectra instead of RGB
- Confirm your results with a color checker: X-Rite ColorChecker Classic (MSCCC)
- Data available online: http://www.babelcolor.com/colorchecker-2.htm#CCP2_data
- Generate animations
- Lots of movies use a ray traced system (most, actually)
- Disney: http://www.disneyanimation.com/technology/innovations/hyperion
- Pixar: http://graphics.pixar.com/library/
- Solid Angle: https://www.arnoldrenderer.com/arnold/research/
- Make it fast
- Make it physically accurate
http://in1weekend.blogspot.com/2016/01/ray-tracing-second-weekend.html
- Chapter 1: Motion Blur
- Introduced in 1984 by Rob Cook: https://artis.inrialpes.fr/Enseignement/TRSA/CookDistributed84.pdf
- Chapter 2: A Bounding Volume Hierarchy (BVH)
- Use the Surface Area Heuristic (SAH)
- When choosing among potential partitions, the partition that minimizes the surface area of the sum of the volumes of the sub-trees is almost always good (and naively best)
- SAH-Build that cuts on the longest axis: http://psgraphics.blogspot.com/2016/03/a-simple-sah-bvh-build.html
- Use the Surface Area Heuristic (SAH)
- Chapter 3: Solid Texture Mapping
- Chapter 4: Perlin Noise
- Fantastic tool by Andrew Kensler that explains how it works: http://eastfarthing.com/blog/2015-04-21-noise/
- Chapter 5: Image Texture Mapping
- Chapter 6: Rectangles and Lights
- More efficient direct lighting can be implemented by
- Sending shadow rays
- Importance sample by sending more rays toward lights
- More efficient direct lighting can be implemented by
- Chapter 7: Instances
- The more general implementation is transformation matrices
- Collapse all composite transforms into one matrix
- Surface normal scaling is a well-known gotcha
- The more general implementation is transformation matrices
- Chapter 8: Volumes
- A derivation of the ray-constant-medium intersection: http://psgraphics.blogspot.com/2013/11/scattering-in-constant-medium.html
- Add nonuniform densities: http://psgraphics.blogspot.com/2009/05/neat-trick-for-ray-collisions-in.html
http://in1weekend.blogspot.com/2016/03/ray-tracing-rest-of-your-life.html
-
Chapter 1: A Simple Monte Carlo Program
- Paper on how jittering changes convergence rates: http://mentallandscape.com/Papers_siggraph96.pdf
-
Chapter 6: Ortho-normal bases
- Quickly generate ortho-normal bases: https://orbit.dtu.dk/en/publications/building-an-orthonormal-basis-from-a-3d-unit-vector-without-norma
-
Physically Based Rendering, Pharr et al.: http://www.pbr-book.org/
-
Advanced Global Illumination, 2nd Ed, Dutre et al.
-
Principles of Digital Image Synthesis, Glassner: http://www.realtimerendering.com/blog/principles-of-digital-image-synthesis-now-free-for-download/
-
High Dynamic Range Imaging: Acquisition, Display, and Image-Based Lighting, 2nd Ed, Reingard et al.
-
An Introduction to Ray Tracing, Glassner: http://www.realtimerendering.com/blog/an-introduction-to-ray-tracing-is-now-free-for-download/
-
Realistic Image Synthesis Using Photon Mapping, Jensen