Fabrice NEYRET - Maverick team, LJK, at INRIA-Montbonnot (Grenoble)
ray-tracing in voxel grids is interesting for rendering very
complex and detailed scenes for many theoretical and practical
reasons: it is not limited to surfaces, and even for solid objects it
is a more reasonable representation if numerous and smaller than
pixels anyway (e.g., foliage at distance, SVO),
it relates to more general physics of light transport, voxels are an
ordered set along a ray so visiting complex content can stop as soon
as the ray gets opaque, it relies on direct access to location and
neighborhood which opens signal processing formalism and (pre/post)
filtering for adaptive resolution: as for the MIPmapping
techniques, we could rely on voxel
resolution fitting the pixel size to represent all subscale content.
Alas, things are more tricky that they seem: along a ray transparency multiplies but in screen plane direction it’s opacity that should be interpolated, so the reconstruction and blending of local density is ambiguous and ill-posed as soon as the density field is varying, especially if it’s fast (e.g. object borders). Also when the voxel content represent subscale geometry, its effective opacity is view-dependent (e.g. sheet seen for side vs front), and is often correlated with neighbor voxels: on large objects, a silhouette covering half a voxel (thus semi-transparent), should nevertheless totally hide the near voxels behind.
We already did some work related to internal correlations on surfaces or in volumes. In this project, we want to explore a more direct representation of view-dependent voxels so as to use only well-posed blending along the ray and encode some of the parallax of the voxel content to account for correlation in the interpolation in screen plane direction.
General culture in Computer Graphics, Math, and base physics of optics.
C/C++, OpenGL: programming involved – having already coded a toy volume renderer will help (cf shadertoy examples).
Familiarity with GLSL or other GPU-based language (Cuda, etc) could help (real-time rendering can be convenient :-) ).