Skip to content

Raytracing Show and Tell

Paul Mucur edited this page May 23, 2019 · 6 revisions

We began our meeting in our new home: the Yellowstone meeting room of FutureLearn. We were greeted by @tomstuart, two loaves of bread, a rather blunt bread knife, a selection of beverages and a strange waiting room with a towel in it.

@tuzz kicked things off by composing a Computation Club theme song on the spot:

Show & Tell

After some obligatory faffing with HDMI cables and USB-C dongles, we began to review what the club had been up to both inside and outside of our recent meetings on raytracing, initially based on Matt Pharr, Wenzel Jakob and Greg Humphreys' "Physically Based Rendering: From Theory To Implementation" (PBRT).

In @leocassarani's absence, @tomstuart showed us the club's first attempt at a raytracer: Raymond and Tom's fork of it with a minimap. We recapped that this was based on our reading of the introduction from the book and featured a few fundamental concepts:

  • The eye
  • The film
  • The camera
  • Light sources
  • Spheres
  • The scene

We heard that the club had since gone on to mob a new raytracer called "raze" which formed the basis of all subsequent experiments including implementing reflections and materials with different reflective properties.

With that, @tuzz took to the screen and ran us through the various projects he had built along the way.

He began with a faithful translation of the book's pbrt program in Rust called ray-tracer. He explained how he had used this to improve his idiomatic Rust knowledge but also to try to remain close to the book's implementation. He highlighted his implementation of typed vectors of various sizes as something he was keen to explore in Rust.

However, having been dazzled by @leocassarani's more visual efforts, @tuzz then switched to implementing a ray tracer in Rust called "Starlight" which produced some mightily shiny scenes:

@tuzz explained that he implemented reflections based on his understanding of the book but that the book's treatment was extremely dense so his implementation involved some guesswork.

He then moved on to build another ray tracer based on the Entity component system pattern called "Moonlight" using the Rust ECS library Specs. We briefly touched on the RustConf 2018 keynote by Catherine West on this topic.

Still not done with raytracing, @tuzz then switched to building tooling around the book's pbrt program and wrote a Ruby gem called pbrt to write pbrt input files using a Ruby DSL.

Finally, @tuzz discussed his experimental Ruby framework "Vivid" which wraps pbrt and allows users to describe animated 3D scenes in Ruby and render them into videos, e.g. Triforce and sphere fly-by. He then wowed us with a special animation for the club based on the Game of Life set to some techno music; needless to say, we were stunned.

@urbanautomaton then showed us his ray tracer in Rust, "raygrass" and how he'd taken the club's mobbed implementation and added anti-aliasing to reduce the Moiré effect in reflections.

He said that he had based his implementation of reflections on Peter Shirley's "Ray Tracing in One Weekend" but that this seemed incompatible with the approach taken by PBRT.

Deciding What's Next

With raytracing fresh in our minds, we then suggested potential new topics for the club to tackle together:

After sharing reservations about learning a programming language together after not enjoying "7 More Languages in 7 Weeks" and that choosing @jcoglan's "Building Git" might make it awkward for him to attend the club, we voted!

The winner was Michael Fogus' "10 Technical Papers Every Programmer Should Read (At Least Twice)" with 8 votes with the ADUni Video Lectures in close second place with 7 votes.

We decided it would be best if @tuzz and @mudge went away and picked an ideal ADUni lecture and one of Fogus' recommended papers respectively for the club to start with and we would decide which to go with on Slack.

And with that (and some hasty tidying away of breadcrumbs), we were done!

Pub

Thanks

Thanks to @tomstuart, @urbanautomaton and FutureLearn for hosting the meeting and providing drinks and bread; thanks to all who brought dips and snacks and thanks to @tomstuart, @tuzz and @urbanautomaton for demoing their work.

Clone this wiki locally