浅色类型 (Direct3D 9)
浅色类型属性定义正在使用的光源类型。 光类型通过使用光线 D3DLIGHT9 结构的 Type 成员中的 D3DLIGHTTYPE C++枚举中的值来设置。 Direct3D 中有三种类型的灯光 - 点灯、聚光灯和定向灯。 每种类型以不同的方式照亮场景中的对象,计算开销级别不同。
点光
点灯在场景中具有颜色和位置,但没有单个方向。 它们向所有方向平均放光,如下图所示。
点光插图
灯泡是点光的一个很好的例子。 点灯受衰减和范围影响,并按顶点照亮网格。 在照明期间,Direct3D 使用点光在世界空间中的位置和被点亮的顶点的坐标来为光线的方向派生矢量,以及光已行驶的距离。 两者与顶点法一起用于计算光对表面照明的贡献。
方向光
方向灯只有颜色和方向,没有位置。 它们发出并行光。 这意味着方向灯生成的所有光都通过同一方向的场景。 想象一下方向光作为近无限距离(如太阳)的光源。 方向灯不受衰减或范围的影响,因此指定的方向和颜色是 Direct3D 计算顶点颜色时唯一考虑的因素。 由于照明因素较少,这些是最少的计算密集型灯使用。
聚光灯
聚光灯具有颜色、位置和方向,它们发出光。 从聚光灯发出的光由明亮的内锥和更大的外锥组成,两者之间的光强度会减弱,如下图所示。
使用内锥和外锥插图
聚光灯受掉落、衰减和范围的影响。 在计算场景中对象的照明效果时,会根据这些因素以及距离光到达每个顶点。 计算每个顶点的这些效果使聚焦成为 Direct3D 中所有光最耗时的焦点。
D3DLIGHT9 C++结构包含三个成员,这些成员仅供聚光灯使用。 这些成员 -Falloff、Theta 和 Phi - 控制聚光对象的内锥体和外锥体的大小,以及它们之间的光线如何减少。
Theta 值是聚光灯内锥的弧度角度,Phi 值是光外锥的角度。 Falloff 值控制光强度在内锥的外边缘和外锥的内边缘之间的下降方式。 大多数应用程序将 Falloff 设置为 1.0,以创建在两个锥体之间均匀发生的下降,但你可以根据需要设置其他值。
下图显示了这些成员的值之间的关系,以及它们如何影响聚光灯的内部和外锥体。
聚光灯发出有两部分的光锥:明亮的内锥和外锥。 光在内锥中最亮,在外锥外不存在,两个区域之间的光强度衰减。 这种类型的衰减通常称为下降。
顶点接收的光量取决于顶点在内部或外部锥体中的位置。 Direct3D 计算聚焦方向向量(L)的点乘积,以及从光到顶点的矢量(D)。 此值等于两个向量之间的角度余弦值,并用作顶点位置的指示器,可以与光的圆锥角度进行比较,以确定顶点可能位于内部或外部锥体中的位置。 下图提供了这两个向量之间的关联图形表示形式。
系统将此值与聚光灯的内部和外锥角的余弦进行比较。 在光线的 D3DLIGHT9 结构中,Theta 和 Phi 成员代表内部和外部锥形的总圆锥角度。 由于衰减发生在顶点离照明中心更远(而不是整个圆锥角度)时发生衰减,因此运行时在计算余弦值之前将这些圆锥角除以一半。
如果矢量 L 和 D 的点积小于或等于外锥角的余弦值,则顶点位于外锥之外,并且不接收光线。 如果 L 和 D 的点积大于内锥角的余弦值,则顶点位于内锥内并接收最大光量,但仍考虑在距离上衰减。 如果顶点位于两个区域之间,则使用以下公式计算下降。
顶点光线强度的
哪里:
- 我 f 在脱落后是光强度
- Alpha 是向量 L 和 D 之间的角度
- Theta 是内锥角
- Phi 是外锥角
- p 是倒退
此公式生成一个介于 0.0 和 1.0 之间的值,该值可缩放顶点的光强度,以考虑脱落。 还会应用作为顶点距离光的一个因素的衰减。 下图显示了不同的回落值如何影响跌落曲线。
的顶点距离
各种脱落值对实际照明的影响是微妙的,通过调整除 1.0 以外的倒退值来形成下降曲线,从而产生较小的性能损失。 出于这些原因,此值通常设置为 1.0。
相关主题