CS 468 Cg Texture Mapping Jon Moon Spring 2004 Computer Science Cornell University
Agenda NVIDIA’s Cg Browser effects Bump Mapping Reflection Mapping Thin Film Bump Horizon Mapping Car Paint Bumpy Shiny Patch Watch demo, understand the shaders
Cg Commands saturate(x): same as clamp(x,0,1) lerp(a,b,f): (1-f)*a + b*f lit(ndotl, ndoth, m): returns Blinn model {ambient, diffuse, specular,1} length(x), distance(x1,x2), pow(x,y), etc.
Simple fp20 Bump Mapping Goal: Bumpy Earth What should the FP do? Vertex inputs? Uniform Parameters? Outputs? Code?
Simple fp20 Bump Mapping Goal: Bumpy Earth What should the VP do? Inputs? Uniform Parameters? Textures? Code?
Texture reads in Cg Need uniform parameter for the texture itself: sampler2d, sampler3d, etc. Need to call appropriate texture read function, with appr. Params: tex2d(my2dTexture, myCoords)
Simple fp20 Bump Mapping Texture read code (out of context): float2 decalCoords : TEXCOORD0; uniform sampler2D decal, etc. float3 decalColor = tex2D(decal, IN.decalCoords).rgb; OpenGL side will be covered next week!
Bump Reflection Mapping Goal: Achieve reflection using normal map, environment map What kind of textures will we use?
Bump Reflection Mapping float4 normal = tex2D(NormalMap); Color = texCUBE_reflect_dp3x3(Environmen tMap, TangentToCubeSpace0, TangentToCubeSpace1, normal); transforms the normal, computes the reflected vector, and uses that to lookup into cubemap.
Thin Film Interference Goal: produce thin film color patterns (think oil or soap bubbles) Plan: calculate the depth of film on the surface of object, based on view/normal angle Use depth as lookup and get color, use that to modify specular component
Bump Horizon Mapping Goal: bump mapping with self- shadowing Theory: create horizon maps that store the elevation angle needed in a particular direction at each point Use the horizon maps nearest the light direction to find elevation, compare to light vector
Bump Horizon Mapping Can encode 4 horizon maps in one texture, with 1 elevation in each RGBA value. Thus horizon maps for 8 cardinal directions (N, NE, etc.) can be encoded nicely in 2 textures
Car Paint Goal: Make realistic car paint Fresnel effect Flecks in paint Wavy normals Reflection Fancy paint BRDF Plan: Use a ton of textures
Bumpy Shiny Patch Goal: (go watch it!) What mapping effects are being used?
Other possibilities? Iridescence: color is view dependent Gloss mapping: reflectivity differs over object Height field, offset bump maps Be creative! Be clever!
Resources Cg User Manual: users_manual.html Also in Cg Toolkit folder Cg Browser download: toolkit.html Part of the Cg Toolkit (~100 MB)