Unity Shader入门精要 第4章 法线变换 读书笔记

第4章 学习Shader所需的数学基础-法线变换

注意:图片的来源基本来自作者冯乐乐的GitHub,感谢作者分享

https://github.com/candycat1992/Unity_Shaders_Book

 

特殊的变换:法线变换

法线(normal):法矢量。需要特殊处理的方向矢量。

 

模型的顶点会携带额外的信息,顶点法线是其中的一种信息。

变换一个模型的时候,不仅需要变换它的顶点,还需要变换顶点法线,以便于后续处理(片元着色器)中计算光照等。

 

一般来说,点 和 绝大部分方向矢量 都可以使用 同一个 4×4 或者 3×3 的变换矩阵,把其从 坐标空间A 变换到 坐标空间B 中。但是在变换法线的时候如果使用同一个变换矩阵,可能就无法确保维持法线的垂直性。

 

切线(切矢量):方向矢量。

切线往往是模型顶点携带的一种信息。通常于纹理空间对齐,而且与法线方向垂直。

顶点的切线和法线互相垂直。

切线是由两个顶点之间的差值计算得到的,因此可以直接使用用于变换顶点的变换矩阵来变换切线。

假设只用 3×3的变换矩阵 M 来变换顶点,将其从坐标空间A 变换到 坐标空间B(注意这里涉及到的变换矩阵都是 3×3的矩阵,不考虑平移变换,这是因为切线和法线都是方向矢量,不会受平移影响

 

求得变换后的切线:

进行非统一缩放时,如果使用和变换顶点相同的变换矩阵来变换法线,就会得到错误的结果,即变换后的法线方向与平面不再垂直 

由数学约束条件推导 法线变换矩阵:

 

1、

已知同一个顶点的切线

和法线

必须满足垂直条件,即:

 

2、

 

3、

求 法线变换矩阵G,使得 变换后的法线 仍然与 变换后的切线 垂直:

 

注意:如果变换矩阵

是正交矩阵,那么:

因此:

 

也就是说:

1、如果变换矩阵是正交矩阵,那么可以使用用于变换顶点的变换矩阵来直接变换法线。

2、如果变换只是包括旋转变换,那么这个变换矩阵就是正交矩阵

3、如果变换只包含旋转和统一缩放,而不包含非统一缩放,那就可以利用统一缩放系数(k)来得到变换矩阵的逆转置矩阵(避免了计算逆矩阵的过程):

4、如果变换中包含了非统一变换,那么就必须通过 求解逆矩阵 来得到 变换法线的矩阵

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值