[toc] DirectX12 这本书中介绍的大部分都是 局部光照模型
# 光照
# 计算三角面法向量
- 先计算出三角形的两个边向量
- 计算两个向量的叉积
在 DirectX12 中,可以通过使用 XMVector3Normalize
函数将一个向量进行归一化,即三角形平面法线即为: XMVector3Normalize (叉积) 曲面顶点 (如三角形的三个顶点) 处的法线通常会采用一种 求法线平均值
的方式来计算顶点近似法线。
即计算该顶点周围 N 个平面的法线的和的归一化。 当我们在计算法向量时,也需要计算法向量的变换矩阵,原因见下图:
即在向量发生变换时,法向量无法保证与原向量继续正交,所以需要计算法向量的变换矩阵来保证变换后的正交性。
# 参与光照计算的一些关键向量
反射向量: reflection = I-2*(N・I) I 解:
从光照 I 向量尾部方向出发,向法线方向垂直的划出一条向量,计算出这条向量就可以计算出反射向量
# 朗伯余弦定律
辐射通量:光源每秒发出的 (光) 能量
辐照度:单位面积上的辐射通量密度
- 光线在垂直照射到表面时能量最高
- 垂直照到表面时面积最小 A1, 以一定角度照到表面上时会出现更大的面积 A2,
- A1 与 A2 的关系如下
所以,如果入射能量为 E, 则垂直照到表面的辐照度为:
E1 = P / A1
以一定角度入射的辐照度为:
# 几个光照的反思
环境光
环境光的计算在传统光照模型中是通过物体表面的反射率来计算的
漫反射
漫反射的意义实际上是光打到物体表面后经过物体内部散射到视线方向的能量
高光反射
高光反射的实际意义是在两个反射率不同的介质之间反射的产生的现象,和菲涅尔现象紧密相关