Lecture 07. Shading-Blinn Phong

57 阅读2分钟

可见性/遮挡

画家算法

  • 画家算法:首先将场景中的多边形根据深度进行排序,然后按照深度从大到小顺序进行描绘。
  • 复杂度:O(nlogn)
  • 弊端:不能解决有遮挡的物体,或者说不能解决深度不好确定的物体。

z-buffing(深度缓存算法)

  • 假设:离摄像头越近,z 值越小;离摄像头越远,z 值越大。
  • 深度缓存:
    • frame buffer(帧缓冲器):存储每个像素的颜色/光强
    • depth buffer(深度缓冲器):存储每个像素深度值-z坐标

image.png

  • 算法:z 小的像素的颜色值会覆盖 z 大的像素的颜色值。

    image.png

  • 复杂度:nO(n)

  • 优点:自动处理物体间的遮挡关系,简化了图形渲染的逻辑。

  • 弊端:depth buffer 带来内存消耗;不能处理透明化的物体。

着色

照明&着色

shading(着色):对于不同的物体应用不同的材质。

Blinn-Phong 反射模型

Phone 反射模型:三种光(镜面高光 Specular + 漫反射光 Diffuse + 环境光 Ambient)的相互作用。

image.png

image.png

  • v:观测方向
  • n:法线方向
  • l:光方向
  • 表面参数:颜色、亮度

镜面高光

镜面高光:物体完全反射光源照射到表面的光照到人眼(即镜面反射)。

  • Phong模型: 当镜面反射方向 RR 与观测方向 vv 接近的时候,我们才可以看的到高光。

image.png

  • Blinn-Phong模型:RRvv 的接近程度实际上约为该平面法向量 nn 与半程向量 hh 的接近程度。

image.png

  • ksk_s:镜面反射系数,通常认为是白色,即 ksk_s=1
  • 指数 pp:控制高光的大小

漫反射光

漫反射光:物体朝着任意方向反射相同亮度的光照到人眼。

  1. 兰伯特余弦定理:单位面积的光与 cosθ=nlcos\theta = n \cdot l 成正比。

  2. 光的强度:点光源的光强度为 II,距离为 rr 的点的光强度为 I/r2I/r^2

image.png

  1. 某点 dd 上,有多少漫反射光可以被接收?

image.png Ld=kd(I/r2)max(0,nl)L_d = k_d(I/r^2) max(0, n \cdot l)

  • kdk_d:扩散系数,例如该点的颜色所带来的光吸收程度

  • (I/r2)(I/r^2):到达这个点的能量

  • max(0,nl)max(0, n \cdot l):被这个点吸收的能量

漫反射到某个点上,在任何方向观测,亮度都是一样的,这是因为漫反射光和观测方向无关(公式中也可以看得出这一点,与 vv 无关)。

环境光

环境光:物体表面完全背对光源,但其它物体反射光照射到该物体表面上,再通过该物体反射到人眼。

image.png

  • 近似的定义: 环境光是一个常数,添加恒定的颜色来解释忽略的照明和填充黑色阴影。