7 20200303 / 20210708 Shading 1 (Illumination, Shading and Graphics Pipeline)
深度缓存:解决可见性/遮挡问题
Painter’s Algorithm
- 从后向前绘制,overwrite in the frame buffer
- 需要考虑绘制顺序
- Requires sorting in depth (O(n log n) for n triangles) Can have unresolvable depth order
- 但会出现无法定义深度关系的情况
Z-Buffer 深度缓存
This is the algorithm that eventually won.
Idea:
- Store current min. z-value for each sample (pixel) 记录像素最浅深度
- Needs an additional buffer for depth values
- frame buffer stores color values (color buffer)
- depth buffer (z-buffer) stores depth (depth buffer)
IMPORTANT: For simplicity we suppose
z is always positive
(smaller z -> closer, larger z -> further)
Algorighm
- 初始深度无限远
- 把三角形做光栅化为像素
- 找到像素后找到其深度
- z 值小就更新
z-buffer Complexity
O(n) for n triangles (assuming constant coverage)
How is it possible to sort n triangles in linear time?
- 并没有排序 只是进行了比较 找最小值
绘制顺序不同不影响结果
- 两个浮点数基本不可能完全相等
Most important visibility algorithm
- Implemented in hardware for all GPUs
z-buffer 处理不了透明物体
What we’ve covered so far
Shading 着色
Definition
- In Merriam-Webster Dictionary
- shading, noun
The darkening or coloring of an illustration or diagram with parallel lines or a block of color. - In this course
- The process of applying a material to an object.
- shading, noun
A Simple Shading Model (Blinn-Phong Reflectance Model)
Perceptual Observations
- 高光 specular highlights
- 漫反射 diffuse reflection
- 环境光 ambient lighting
Shading is Local - 着色局部性只看自己 不考虑其他任何物体的存在 所以没有阴影 (shading ≠ shadow)
Diffuse Reflection
把光看作能量 (Lambert)
看着色点周围单位面积能够接收到多少能量
直射接收到的能量 > 折射接收到的能量Light Falloff
- 能量守恒 - 单位点的能量越来越小 (不同球体表面积所含能量相同)
Lambertian (Diffuse) Shading
$L_d = k_d (I/r^2)\max(0,\bf{n · l})$
- $k_d$: 着色点对于光的吸收率
- 如果 $k_d = 1$
- 表示该点完全不吸收能量 - 最亮
- 如果 $k_d = 0$
- 表示该点完全吸收能量没有能量反射出去 - 最暗
- 如果定义为三通道的 rgb 分别有 01
- 那么就可以定义颜色值
- 如果 $k_d = 1$
- $I/r^2$:传播到着色点的强度(结合能量球来看 总面积为 $4\pi r^2$ 距离为 r,那么单位强度就是 $\frac{I}{4\pi r^2}$,为平方反比关系)
- I: 点光源在单位距离上的强度
- r: 点光源和着色点的距离
- $max(0, \bf{n · l})$
- 为什么有 0
- 如果是负数代表从反面照射没有意义
- $\bf{n · l}$ 为余弦角
- 整体表示被着色点能接收到的能量的比例
- 为什么有 0
- 漫反射与V无关 - 和观测点无关
- $k_d$: 着色点对于光的吸收率