80 likes | 188 Views
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:
E N D
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