Advanced Texturing: Stupid Texture Tricks David Luebke University of Virginia

advertisement
Advanced Texturing:
Stupid Texture Tricks
David Luebke
University of Virginia
Recap: Point Sprites

A point sprite is a screen-aligned textured quad
placed by rendering a single vertex
– Ideal for particle systems
– When GL_POINT_SPRITE_NV is enabled:



Point antialiasing state ignored – all points  quads
Points are rendered with point width as usual
Tex coords of points can be replaced by special “point sprite”
tex coords s,t,r between 0,1


–
–
Tex coord r is special, can set to zero (default) or use to ‘play
through’ an animation stored in 3D tex
– Enable this with COORD_REPLACE_NV
For hardware acceleration on GF3, set r to 0 (default) and
enable coordinate replacement for tex unit 3 only
See http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_point_sprite.txt
See http://www.codesampler.com/oglsrc.htm; search for “point sprite”
Billboards

A point sprite is a certain kind of billboard
– Billboards are textured polygons (usually
quads) that rotate to face the viewer


Build a rotation matrix for each billboard
Screen-aligned billboard: quad is parallel to the
screen and has a constant up vector




Similar to old-school 2D sprites
Useful for text, HUDs, lens flare, etc
Build rotation matrix with camera u, n = -v, r=uXv
World-oriented billboard



Sprite’s native up vector not always appropriate
World-oriented billboard: use the world up vector
Still faces viewer  n = -v, r=uXv
Billboards

Viewpoint-aligned
– v = vector to eye (Fig. 8.5)
– Resulting quads capture perspective
distortions across view-frustum
– Ex: clouds (Fig 8.6)

Axially-alligned
– Rotates around a fixed world-space axis
– Ex: trees (Fig 8.7)
– Problem: from above, look like cardboard
cutouts
Imposters

An imposter is a billboard created on the
fly to “cache” rendered imagery
– Once rendered, cost of rendering an imposter
is just a single textured quad
– Can use for a few frames before updating
– Can use for a few instances of the object


Works best on distant objects (why?)
Great example: portal textures
– But what’s wrong with this idea?
Depth Sprites

Can render an object with a depth texture,
so depth buffer affects and is affected by
the rendering (Fig 8.16)
– Can also do depth-affected lighting
– Needs to be orthogonal or nearly orthogonal
to look right
– Under the right circumstances, might allow
imposters with dynamic geometry

Ex: portal texture with monster moving around in
the textured room
Imposters Continued

Depth meshes
– UNC MMR system
Multitexturing




Modern hardware can read from multiple
textures at once, even with mipmapping
Detail texturing
Light mapping
Bump mapping
Download