许多映射技术,包括法线凹凸贴图、视差贴图和其他技术,都需要特殊的逐顶点切线空间基础(切线、法线、副法线/双切线)。
这显然意味着我的模型不仅应该导出顶点位置、纹理坐标和近似的每个顶点法线,还应该导出切线空间基向量之一(通常tangent
),因为另一个可以直接在着色器中使用cross(tangent, normal)
.
请注意,位置、法线、uv 和切线实际上以下列方式相互依赖(您必须了解有关顶点的所有其他信息才能准备切线基础)。
position -> normal -> tangents
uv ->
现在 - 现代 3D 游戏/渲染引擎如何处理这类事情?
它们实际上是否提供了每个顶点的法线、切线和uv 坐标,或者它们是否可以在运行时以某种方式计算?它们应该是模型数据的一部分还是应该是仅运行时的属性?
我也知道,当使用Direct3D10+
几何着色器时,实际上可以在运行时准备法线和切线(显然,因为我们可以访问每个三角形中的顶点)——值得还是应该总是预先计算这些东西?