当前位置: 首页 > news >正文

【技术美术】切线空间

【技术美术】切线空间

切线空间是利用顶点法线、切线构成的以顶点方向为坐标系的3D空间,用于实现法线贴图、视差贴图等技术。

切线空间基向量

切线空间的三个基向量为:

  • z轴:法线(normal)
  • x轴:切线(tangent)
  • y轴:副切线(bitangent)

法线

没有什么特殊的地方,因为这是由用户自己定义的顶点正前方,一般指向模型外侧。

切线

由系统计算的顶点左侧方向。具体而言,顶点的左侧与其使用的uv(纹理空间)的u方向一致。切线虽然也是代表一个方向,但其是一个四分量向量,其中w分量用于解决下文副切线手系的问题,当切线由Unity生成时,其w默认为-1。

副切线

利用法线和切线叉乘计算的第三个方向,其与顶点uv(纹理空间)的v方向一致。由于纹理空间存在“OpenGL”和“DX”两种手系,故副切线也有两种计算方法。

切线空间与纹理空间

和法线不同,切线是由软件基于uv分布自动生成的。具体而言切线方向对应纹理的x轴方向(u方向),副切线对应纹理的y轴方向(v方向)。故切线空间和纹理空间是可以相互转换的,这点在“视差贴图”功能中就得到了应用。

但要注意的是,纹理空间是存在左右手两种的,也因此导致“切线空间”和“法线贴图”也存在两种:“DX”(左手系)和“OpenGL”(右手系)。

切线空间手系

切线空间存在左右手两种手系,手系的不同直接影响到法线贴图的数据布局。Unity 中采用的 OpenGL 的右手坐标系,故从模型内部向外看,切线在其左侧,副切线在其上方。

从贴图角度来看,当贴图内容是一个凹槽时,其凹槽图案的下方为绿色。因为从贴图角度看凹槽,下方的法向应该是向上的,故y轴值较大,表现为绿色。

Unity中的法线贴图方向

或许是为了解决当网格自带切线时,其为非右手坐标系的问题,Unity为切线增加了额外的分量来决定是否反转副切线,从而统一手系。不过要注意的是:Unity默认计算切线的叉乘方式是法线在左,切线在右,因此计算出的副切线总是负的,所以通常 tangent.w = -1

由此我们便可以得出副切线的计算方法:

float3 bitangent = cross(normal, tangent.xyz) * tangent.w;

物体到世界空间

法线、切线来自模型顶点,因此默认是基于物体空间的,但进行方向计算时通常基于世界空间,因此需要对原始的顶点法线、切线进行空间变化。

针对向量(有距离的方向)的变换很容易,只要移除掉 TRS 矩阵中 T 的部分就行,即由 float4x4 强转为 float3x3 即可。但对切线空间的基向量来说,还有一个额外要保证其正交性的限制(否则类似光斑计算会出问题)。

正交性有两点要处理:

  • 保证所有基向量归一化
  • 保证所有基向量相互垂直

物体到世界矩阵是 TRS 矩阵,其中 T 已经被我们剔除,剩下 R、S 矩阵。由“TRS矩阵-旋转矩阵求逆”一节可知,R 矩阵是正交矩阵,因此不用担心其影响。但 S 矩阵并不是,首先其本身可以缩放向量距离,而且如果是非均一化缩放,还会破坏向量间的角度。

错误的法线变换

通过上面的图片示意,我们可以清晰看到非均一化缩放对法线和切线的影响:

  • 对于切线:其距离会受影响,但方向依旧正确(仍保持在模型表面),故只要考虑归一化即可。
  • 对于切线:其距离会受影响,且方向错误(不再垂直模型表面),故需要考虑归一化和垂直两个问题。

基向量归一化

对于归一化很好处理,变换后进行归一化即可,恰巧因为光栅化的缺陷,法线这些本来也是要归一化的。

float3 normalWS = normalize(normalWS);
float3 tangentWS = normalize(tangentWS);
float3 bitangentWS = normalize(bitangentWS);

基向量相互垂直

副切线是由法线和切线叉乘出来的所以肯定是垂直的不用担心。切线则根据上图可以发现,经过非正交变换后虽然方向变化,但依旧保持在模型表面,符合其设定,故也不用考虑。最终唯一需要考虑的就是法线。

现已知切线变化后的方向是正确的。设切线为 \(T\),法线为 \(N\)\(M,G\) 则分别是切线和法线的变换空间。

\(\because\) 变换后的法线也与切线垂直
\(\therefore\) \(GN \cdot MT = 0\)

点乘可以看成是行向量和列向量的矩阵乘法,故 \(GN\cdot MT\) 可以用矩阵运算的形式进行变形。

\( \begin{aligned} & GN\cdot MT \\ &= (GN)^T(MT) \\ &= (N^TG^T)(MT)\\ &= N^T(G^TM)T \end{aligned}\ \)

于是可得:

\(N^T(G^TM)T = 0\)

其中已知 \(N^TT = N \cdot T = 0\),故为了让 \(N^T(G^TM)T = 0\) 成立,\(G^TM\) 应等于 \(I\)\(I\) 表示单位矩阵),故可列出公式:

\( \begin{aligned} G^TM &= I\\ G^T &= M^{-1} \\ G &= (M^{-1})^T \end{aligned} \)

因此法线的变换矩阵应等于切线变换矩阵的逆矩阵的转置

实现物体到世界变换

综上所属,解决了正交问题后,便可以写出切线空间基向量由物体空间到世界空间的变换过程了。

  • 切线:使用常规的物体到世界矩阵即可,因为这会保持切线的方向正确。
  • 法线:需要使用切线变换矩阵的逆矩阵的转置矩阵,来维持方向正确性。
  • 副切线:使用切线和法线叉乘计算即可。
float3 tangentWS = mul((float3x3)GetObjectToWorldMatrix(), tangentOS.xyz);
float3 normalWS = mul(normalOS, (float3x3)GetWorldToObjectMatrix());
float3 bitangentWS = cross(normalWS, tangentWS) * tangentOS.w;

提示:上述法线变换用到了一个小技巧,要知道 mul 是可以交换矩阵和向量参数顺序的,这样就变成了行向量和行矩阵的计算。而因为行矩阵和列矩阵正好是相互转置的关系,所以可以利用这一机制,省去推导中转置矩阵的操作,直接计算。

构建切线空间

有了上述计算的3个切线空间基向量,我们便可以得出最终的切线空间矩阵:

float3x3 tangentToWorld = transpose(float3x3(tangentWS, bitangentWS, normalWS));

提示:hlsl 默认是基于行矩阵的,所以其矩阵赋值也是按行赋值,而数学上是基于列矩阵的(矩阵在左,向量在右),所以按行赋值构建出行矩阵后需要再进行一步转置操作,使其成为列矩阵。

或者不转置,后面直接按行矩阵的方法用也行,Unity就是这么干的:

float3x3 worldToTangent = float3x3(tangentWS, bitangentWS, normalWS);
float3 normal = mul(normalTS, worldToTangent); //实现切线空间向量转世界空间

提示:切线空间是正交矩阵,故其转置就是其逆矩阵。

http://www.gsyq.cn/news/143273.html

相关文章:

  • Windows系统文件msrdo20.dll丢失找不到 下载修复
  • HarmonyOS 5开发从入门到精通(十二):权限管理与安全
  • 基于PID控制的水箱液位系统设计 本资料为完整版《基于PID的水箱液位控制系统设计》技术文档,内容涵盖:
  • 告别盲目添加Agent!大模型Agent扩展的科学:预算感知与最优配置的数学公式!
  • 大模型时代来临:网络安全工程师/渗透测试工程师转行AI的必备学习路线图!!
  • 基于漂浮式海上风电场系统的浮式风力发电机matlab仿真
  • 亚马逊百亿美元注资OpenAI,微美全息以多模态算力生态抢夺AI模型热潮!
  • 数据和通信流的九大架构模式 - 智慧园区
  • python
  • 【技术美术】次表面散射
  • 运维系列数据库系列【仅供参考】:达梦数据库:关键字和保留字
  • 下一个十年,AI 靠什么“对话”世界?未来AI开发时代的最通用协议可能是什么样的?
  • 记一次影视cms黑盒CSRF->RCE
  • C#之S7西门子通信协议
  • 运维系列数据库系列【仅供参考】:达梦数据库:dmfldr 使用手册
  • 语音信号降噪之旅:MATLAB实战
  • Windows系统文件msnetobj.dll丢失找不到问题 下载修复
  • CIO总结2025年人工智能实用化的十大关键启示
  • LangGraph 实战:手把手教你搭建一个「全自动科研论文写作」AI 团队 【多智能体协作实战项目一】
  • AI 原生应用开发框架深度解析:从单智能体到多智能体协同开发
  • 全自动太阳能电池片分选仪:光伏组件质量的“第一道防线“
  • 2025年知名的电缆生产厂家推荐排名:电缆生产厂家推荐盘点名单(12月新版更新) - 品牌2026
  • 户外储能电源2KW双向逆变器板:快速开启产品研发之路
  • cesium126,240621,Ce for Ue 通过 GeoServer 来加载 Shapefile:
  • 隧道代理在数据挖掘中的实战应用:从原理到落地的全流程解析
  • 光储(VSG)并网系统:超级电容储能的魅力
  • 苹果明年将推出20多款新品,重磅产品抢先看
  • 5G布控球 5g布控球
  • 2025年中国电缆十大品牌推荐认证!中国电缆一线品牌推荐:缆标杆品牌推荐TOP榜单(12月新) - 品牌2026
  • 【必学收藏】一文掌握RAG分块新范式:Max-Min语义分块技术深度解析