081218 / Reprojection 2

previous | index

Recirculation Motion Blur Update

Doing a few prototypes an evening now. Found better results by adding in motion blur and returning to an earlier idea. New best found solution does a hole filling pass on the new data weighted by a function of projected point size and depth (this "quality factor" is stored in the Alpha channel), so smaller more detailed front most points override larger or more distant points. Currently just doing a 1x1:1 -> 4x4:1 -> 16x16:1 reduction followed by a 16x16:1 -> 4x4:1 -> 1x1:1 expansion for the hole filling (planning on trying a higher quality 1/2 reduction/expansion instead of the 1/4 size later). Then for reprojection I blend between two motion blured colors. The first is sampled from the hole filled buffer using pixel offset plus (-0.25,0.0,0.25) times the motion vector. The second is sampled from the reprojection buffer using the reprojection position with the same offsets. So 6 texture fetches total for the color blur. The blend lerp() is weighted by the proportion of the new and reprojected "quality factor" and is clamped to a set range to insure less noise. The reprojected "quality factor" is reduced by a function of motion vector length and recirculated to insure that under motion, the screen gets more quickly updated.

Giga Voxels

Giga Voxels - Very exciting paper. Presents a very interesting solution to streaming voxel data which takes advantage of spatial and temporal coherence and uses a HistoPyramid reduction. In contrast to the Sparse Voxel Octree in Olick's Current and Next Generation Parallelism in Games, Giga Voxels has filtering and renders transparent volume data. Transparency + filtering is great at solving the "face into the wall" problem, as the voxels run out of resolution they smoothly transition to what looks as if "out of focus". Perhaps it would be possible to do really nice DOF by adjusting the mip level during the raycast based on the circle of confusion!

XenoDream

Ran across this fractal XenoDream Gallery when combing the internet. Looks like the XenoDream program has an IFS based renderer. IFS and L-systems are similar, the gallery shows what can be built using simple rules. IFS uses random transform to converge to result, where my L-system uses direct traversal of transform tree.