80 likes | 192 Views
Learn advanced texturing techniques such as point sprites, billboards, imposters, depth sprites, and multitexturing for optimal rendering of textures. Explore different methods to enhance visual effects in graphics programming.
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