Realtime Hair Rendering
Erik Sintorn - erik.sintorn@chalmers.se
Realtime Hair Rendering Erik Sintorn - erik.sintorn@chalmers.se - - PowerPoint PPT Presentation
Realtime Hair Rendering Erik Sintorn - erik.sintorn@chalmers.se State of the art (realtime) In recent games In recent research State of the art (realtime) A few hundred Half a million individual line textured polygons segments What makes
Erik Sintorn - erik.sintorn@chalmers.se
primitives (~.5M lines or quads or cylinders):
blending, but requires fragments to be sorted
(James T Kajiya and Timothy L Kay, Rendering Fur With Three Dimensional Textures)
thin specular cylinder
specular highlight from hair:
traditional techniques
Would require huge shadow maps
V(d) V(d) d d
16 slices 256 slices
Erik Sintorn and Ulf Assarsson Chalmers University Of Technology
Shader (without rendering to screen)
example displacement mapping and cube map
DirectX 10
geometry
easy
viewing frustrum from the cameras viewpoint
blending enabled
Erik Sintorn and Ulf Assarsson Chalmers University Of Technology
take up very much space
use float opacity values
representation, with similar quality that is also faster to generate
store, for each texel and slice, only a bit that says if the voxel is occupied or not.
slices in 4 32-bit words (one texture-map with unsigned ints representing RGBA)
Opacity Maps to optimize the available precision in this map
the minimum and maximum depth of each texel
Using an OR logical operation for blending
belongs to and set the corresponding bit in the output
each fragment we find the projected light-space coordinates (x,y) and the slice s and fetch the
to slices < s and set the opacity to this number multiplied by some constant
themselves in the same slice (the same bit) they may
very good estimate of the visibility. So, given the light MVP coords (x,y), the slice s and the slab m:
m, call this a
m: avg = (number of fragments in slab / total number
as: a + avg * (number of bits set in slabs < s)
rendering transparent objects is:
fragment...
precede it! Which is really the same thing. So: