- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
shading
展开查看详情
1 .Shading CMSC 435/634
2 .RenderMan Light Displacement Surface Volume Imager
3 .Displacement Given Position Normal Compute Position Normal Displacement Light Surface Volume Imager
4 .Surface color Given Position Compute Color Opacity Surface Light Displacement Volume Imager
5 .Lighting Given Surface Position Compute Light Direction Light Color Light Surface Displacement Volume Imager
6 .Volume Effects Given Position Color Compute New Color Volume Light Surface Displacement Imager
7 .Image Effects Given Pixel Color Compute Pixel Color Imager Light Surface Displacement Volume
8 .Non-real time vs. Real-time RenderMan GPU Texture/ Buffer Vertex Geometry Fragment Application Displayed Pixels Light Displayed Pixels Application Displacement Surface Volume Imager
9 .RenderMan vs . GPU RenderMan Developed from General CPU code Seconds to hours per frame 1000s of lines “ Unlimited ” computation, texture, memory, … GPU Developed from fixed-function hardware Tens of frames per second 1000s of instructions Limited computation, texture, memory, …
10 .History (not real-time) Testbed [ Whitted and Weimer 1981] Shade Trees [Cook 1984] Image Synthesizer [ Perlin 1985] RenderMan [ Hanrahan and Lawson 1990 ]
11 .History (real-time) Custom HW [Olano and Lastra 1998] Multi-pass standard HW [ Peercy , Olano, Airey and Ungar 2000 ] Register combiners [NVIDIA 2000] Vertex programs [ Lindholm et al. 2001] Compiling to mixed HW [ Proudfoot et al. 2001] Fragment programs Standardized languages Compute
12 .GLSL / HLSL Vertex, Geometry & Fragment/Pixel C-like, if/while/for Structs & arrays Float + small vector and matrix vec2, vec3, vec4, mat2, mat3, mat4 Swizzle & mask ( a.xyz = b.xxw )
13 .GLSL / HLSL Common math & shading functions Trigonometric, exponential, min, max, abs, … length, distance, normalize, dot, cross mix(a, b, t) clamp(t, a, b) step(a, t), smoothstep (a, b, t) reflect, refract
14 .Shader Debugging Render as color Map intermediate values to 0-1 Interpret results Hot reloading Make changes without changing viewpoint Remap debug values vec4 (-sign(x), sign(x), abs(x), 1 ) x / (1 + abs(x)) External debugging tools
15 .Vertex Demo: Blend Positions
16 .Vertex + Fragment Demo: Fresnel Environment Map
17 .Shading Methods Repeating Patterns mod, sin Divide and floor Shapes Implicit form: is this pixel inside Color tables Noise or computed patterns 17
18 .width gap height gap brick mortar Brick Demo
19 .Noise Controlled, repeatable randomness Still spotty GPU implementation Can use texture or compute
20 .Noise Characteristics Repeatable Locally continuous but distant points uncorrolated Values RenderMan [0,1], average 0.5 Perlin’s [-1,1], average 0 1 /2 – 1 cycle per unit Versions for 1D-4D input
21 .Noise Subtleties Many noise functions based on a lattice Piecewise function between integer coordinates Hash of integer coordinates control points Interpolating values easy but poor Even with higher-order interpolation Perlin ’ s noise Passes through 0 at each integer Hash gives gradient
22 .Perlin Noise in RenderMan 22 Ci = float noise(floor(1/ t)*P ); 1 2 3 4 5 6 7 8 9 12 13 14 15 16 20
23 .23 Fractional Brownian Motion ( fBm ) // Combine octaves, scaled by 1/f for(f=1; f<=floor(1/t); f*=2) Ci += (float noise(f*P)-.5)/f; Ci += .5; 1 2 3 4 5 6 7 8 9 12 13 14 15 16 20
24 .24 Turbulence // fBm using abs(noise) for(f=1; f<=floor(1/t); f*=2) Ci += abs(float noise( f* P)-.5)/f; Ci += .5; 1 2 3 4 5 6 7 8 9 12 13 14 15 16 20
25 .Advanced Shading Methods Perturbed patterns Adjust position, radius, etc. with noise Bombing Divide space into cells Compute random position in each cell Check if pixel is inside shape Blending Fade effects in and out with smoothstep