
A Ray-Box Intersection Algorithm and Efficient Dynamic Voxel Rendering - edroche
http://www.jcgt.org/published/0007/03/04/
======
gavanwoolery
From the paper: "We use the rasterizer as a potentially-visible set
optimization to iterate only over pixels for which rays might intersect a
voxel, and then execute a small ray tracer in the pixel shader. That is, we
“splat” billboards that give coarse visibility and compute exact visibility in
a pixel shader. This works for any pinhole perspective projection, including
eye rays and shadow rays, so we use it for the shadow map rendering pass as
well"

Neat - I used a similar technique [1] in the last iteration of Voxel Quest,
but I only rasterized single points/pixels then raytraced them into filled
cubes (was not efficient other than on fill rate). However I did not invent
the technique (I'm not sure who did, but I first got the idea from talking to
Florian Boesch [2])

[1]
[https://twitter.com/gavanw/status/717265068086308865](https://twitter.com/gavanw/status/717265068086308865)
[2] [http://codeflow.org](http://codeflow.org)

~~~
pcwalton
> We use the rasterizer as a potentially-visible set optimization to iterate
> only over pixels for which rays might intersect a voxel, and then execute a
> small ray tracer in the pixel shader.

I was _just_ thinking about doing this last weekend (in the context of drawing
exact reflections off reflective surfaces defined by arbitrary meshes). Nice
to see it actually works, at least for voxels!

The fact that raytracing (onto a 2D plane) and rasterization are essentially
isomorphic to one another is a powerful observation.

~~~
pwang
> The fact that raytracing (onto a 2D plane) and rasterization are essentially
> isomorphic to one another is a powerful observation.

Hasn't this been a pretty well-known perspective (no pun intended) for a
couple of decades now?

~~~
pcwalton
Of course, but it's only relatively recently that we've had the graphics APIs
to make full use of that observation.

~~~
vanderZwan
_< notices username>_

Will this somehow turn into faster CSS and/or SVG render times for Firefox? :)

------
kevingadd
This is more useful than it might seem because many rendering techniques are
sometimes implemented using voxel representations behind the scenes, like
global illumination (indirect bounced light, so light bounces off a red wall
to create a pale red glow on the ground, that sort of thing), shadowing,
fluids, etc. The examples of Minecraft and LEGO given are direct applications
but I suspect this will improve a lot of stuff.

~~~
Osyris
This is exactly what we do at Roblox.

~~~
DonnyV
Just wanted to say that Roblox is a masterful system. My daughter plays it and
its an amazing piece of software. Your map editor is great too. My daughter is
8 and she picked it right up.

Curious, how big is the team for the game and editor?

------
dgreensp
Anyone hiring engineers to implement stuff like this? That would be my dream
job.

~~~
Dyndrite
We do heavy duty graphics/CUDA, feel free to ping contact@dyndrite.com. We are
currently looking.

------
contravariant
Be sure to check out the video in the "sample code" supplement.

~~~
vanderZwan
Thanks for the heads-up! Oddly enough the dynamic scene near the end reminds
me of a recent video by Jon Burton where he explains how his game company
managed to get an incredibly high number of particle effects on the
Playstation 2. It looks like in both cases, the idea is to make the
implementation functional and fully computable on a VPU/GPU with as little
overhead of moving data between RAM, CPU and GPU as possible.

[0]
[https://www.youtube.com/watch?v=JK1aV_mzH3A](https://www.youtube.com/watch?v=JK1aV_mzH3A)

