可见性/遮挡
画家算法
- 画家算法:首先将场景中的
多边形
根据深度进行排序,然后按照深度从大到小顺序进行描绘。 - 复杂度:
O(nlogn)
- 弊端:不能解决有遮挡的物体,或者说不能解决深度不好确定的物体。
z-buffing(深度缓存算法)
- 假设:离摄像头越近,z 值越小;离摄像头越远,z 值越大。
- 深度缓存:
- frame buffer(帧缓冲器):存储每个像素的颜色/光强
- depth buffer(深度缓冲器):存储每个像素深度值-z坐标
-
算法:z 小的像素的颜色值会覆盖 z 大的像素的颜色值。
-
复杂度:
nO(n)
-
优点:自动处理物体间的遮挡关系,简化了图形渲染的逻辑。
-
弊端:depth buffer 带来内存消耗;不能处理透明化的物体。
着色
照明&着色
shading(着色):对于不同的物体应用不同的材质。
Blinn-Phong 反射模型
Phone 反射模型:三种光(镜面高光 Specular + 漫反射光 Diffuse + 环境光 Ambient)的相互作用。
- v:观测方向
- n:法线方向
- l:光方向
- 表面参数:颜色、亮度
镜面高光
镜面高光:物体完全反射光源照射到表面的光照到人眼(即镜面反射)。
- Phong模型: 当镜面反射方向 与观测方向 接近的时候,我们才可以看的到高光。
- Blinn-Phong模型: 与 的接近程度实际上约为该平面法向量 与半程向量 的接近程度。
- :镜面反射系数,通常认为是白色,即 =1
- 指数 :控制高光的大小
漫反射光
漫反射光:物体朝着任意方向反射相同亮度的光照到人眼。
-
兰伯特余弦定理:单位面积的光与 成正比。
-
光的强度:点光源的光强度为 ,距离为 的点的光强度为 。
- 某点 上,有多少漫反射光可以被接收?
-
:扩散系数,例如该点的颜色所带来的光吸收程度
-
:到达这个点的能量
-
:被这个点吸收的能量
漫反射到某个点上,在任何方向观测
,亮度都是一样的,这是因为漫反射光和观测方向无关(公式中也可以看得出这一点,与 无关)。
环境光
环境光:物体表面完全背对光源,但其它物体反射光照射到该物体表面上,再通过该物体反射到人眼。
- 近似的定义: 环境光是一个常数,添加恒定的颜色来解释忽略的照明和填充黑色阴影。