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