Direct3D 9 (照明数学)

Direct3D 光模型涵盖环境、漫射、高光和放射照明。 它足够灵活,可解决广泛的照明情况。 你将场景中的光总量称为全局照明,并使用以下公式计算它。

Global Illumination = Ambient Light + Diffuse Light + Specular Light + Emissive Light 

(Direct3D 9) 的环境 照明是恒定照明。 它在所有方向上都是恒定的,并且它为对象的所有像素着色相同。 这是一种快速计算,但会让对象看上去扁平且不逼真。 若要查看 Direct3D 如何计算环境照明,请参阅环境照明 (Direct3D 9) 。

漫射照明 (Direct3D 9) 取决于光线方向和对象表面法线。 由于光线方向的变化和表面数字向量的变化,它在整个对象表面变化。 计算漫射照明需要更长的时间,因为它随每个对象顶点而变化,但使用它的好处在于它能够为对象着色并赋予它们三维 (3D) 深度。 若要了解如何在 Direct3D 中计算漫射照明,请参阅 Direct3D 9) (漫射照明。

反射照明 (Direct3D 9) 可识别光线击中物体表面并反射回相机时出现的明亮反射高光。 它比漫射光更强烈,在物体表面的落落速度也更快。 虽然计算高光照明的时间长于漫射照明,但高光照明具有可将重要细节添加至物体表面的优势。 若要查看如何在 Direct3D 中计算反射照明,请参阅反射照明 (Direct3D 9) 。

辐射照明 (Direct3D 9) 是由对象发出的光;例如,发光。 若要了解如何在 Direct3D 中计算辐射照明,请参阅辐射照明 (Direct3D 9) 。

可以通过向 3D 场景中应用这些照明类型中的每一种来实现逼真的照明效果。 为环境、放射和漫射分量计算的值输出为漫射顶点颜色;高光照明分量的值输出为高光顶点颜色。 环境光、漫射光和反射光值可能受到给定光的衰减和聚光因素的影响。 有关衰减工作原理的详细信息,请参阅 衰减和聚焦因子 (Direct3D 9)

为实现更逼真的照明效果,你可以添加更多的光;但这会增加场景的渲染时间。 为实现设计者想达到的所有效果,一些游戏使用了比通常可用的更高的 CPU 功率。 在这种情况下,通常在使用纹理贴图的同时通过使用光照图和环境贴图来向场景中添加照明,从而将照明计算的数量减到最少。

照明在相机空间中计算。 若要了解如何计算照明转换,请参阅 相机空间转换 (Direct3D 9) 。 当存在特殊条件时,可以在模型空间中计算优化的照明:法向量已规范化 (D3DRS_NORMALIZENORMALS为 True) 、不需要顶点混合、转换矩阵为正交等。

灯和材料