【UE】如何正确旋转法线贴图

这是一篇关于在虚幻引擎材质中 旋转法线贴图及正确矫正法线向量的 简短教程

问题

当我们使用 CustomRotator 等方式,对法线贴图的 UV 进行旋转时,贴图的纹理虽然旋转了,但 法线向量所代表的三维方向并没有跟着旋转

这会导致模型在受到光照时,高光和阴影的方向完全错乱。

修正

为了修复这个问题,我们必须在材质中对采样出来的法线向量进行一次反向旋转补偿

方法一:RotateAboutAxis

这是利用引擎内置节点处理三维向量旋转的最标准方法,也是最容易理解的连线方式。

核心逻辑:

将采样出的法线向量,绕着 Z 轴(0,0,1)反向旋转与 UV 相同的角度。

节点连线步骤:

  1. 获取原始法线: 正常使用 Texture Sample 采样你的法线贴图(UV 已经过 CustomRotator 旋转)。

  2. 设置旋转轴: 创建一个垂直于贴图表面方向常量 (0,0,1),连接到 RotateAboutAxis 节点的 NormalizedRotationAxis (旋转轴)引脚。

  3. 反向角度: 将你用于旋转 UV 的角度(0~1的值),乘以 -1 ,连接到 RotationAngle 引脚。

  4. 设置轴心: 将常量 0 连接到 PivotPoint(枢轴点)引脚。

  5. 输入向量: 将法线贴图的 RGB 输出,连接到 Position 引脚。

  6. ⚠️ 相加补偿(易错点): RotateAboutAxis 节点原本是为顶点偏移设计的,它输出的不是最终位置,而是偏移量 。因此,你必须用一个 Add 节点,将原始法线的 RGBRotateAboutAxis 的输出结果相加,才是最终正确的法线


方法二:使用 Sine / Cosine 数学节点(极致性能、纯二维旋转)

通过观察RotateAboutAxis(0,0,1)轴旋转,

不难发现,法线贴图的 Z 轴(蓝色通道(0,0,1))在平面旋转时其实是不变的,我们只需要旋转 X 和 Y(红、绿通道)。

利用纯数学节点进行二维旋转矩阵计算,可以省去 RotateAboutAxis 内部复杂的三维运算,性能开销极低 *。

核心逻辑:

利用二维向量旋转公式:

  • NewX = X * Cos(角度) - Y * Sin(角度)
  • NewY = X * Sin(角度) + Y * Cos(角度)

在虚幻引擎的材质编辑器 中,SineCosine 节点的默认周期是 1.0 。这极其方便,意味着可以直接把 CustomRotator0~1 的角度值连给它们(依然要乘以 -1来反转旋转)。

有关性能

  • 在现代 GPU 中,方法一和方法二相差微乎其微。
    方法一大约8个指令,方法二大约16个指令。RotateAboutAxis被被设计成可以绕着任意三维轴,虽然会因为旋转公式多出一倍指令,但编辑器理论上会根据绝对常量 (0, 0, 1)优化掉跟X和Y相关的叉积、点积乘法(结果肯定都是0),会精简的和方法二几乎一样,放心大胆地用 RotateAboutAxis
  • 除非你在做极其严苛的优化
    那么方法二还可以进一步优化,充分利用 GPU 的 SIMD特性
    把它们组合成 V2 向量,它可以拆解为两部分相加
    NewV2 = (X*Cos, Y*Cos) + (-Y*Sin, X*Sin)
    提取公因式,就变成了非常优雅的向量运算:
    NewV2 = (X, Y) * Cos + (Y, X) * (-Sin, Sin)

    把原本需要 4次乘法、2次加减法,压缩成了 3个乘法 和 1个加法。
相关推荐
0xDevNull12 小时前
Java 深度解析:for 循环 vs Stream.forEach 及性能优化指南
java·开发语言·性能优化
Wect14 小时前
深度解析前端性能优化
前端·面试·性能优化
Captain_Data15 小时前
SQL优化实战:如何让查询速度提升10倍
数据库·sql·mysql·性能优化·数据分析
RReality15 小时前
【Unity Shader URP】平面反射(Planar Reflection)实战教程
ui·平面·unity·游戏引擎·图形渲染·材质
摄影图16 小时前
智能家居科技单品图片素材 解锁便捷智慧居家体验
网络·科技·aigc·智能家居·贴图·插画
小江的记录本19 小时前
【分布式】分布式核心组件——分布式ID生成:雪花算法、号段模式、美团Leaf、百度UidGenerator、时钟回拨解决方案
分布式·后端·算法·缓存·性能优化·架构·系统架构
weixin199701080161 天前
当当商品详情页前端性能优化实战
性能优化
kyriewen1 天前
你的首屏慢得像蜗牛?这6招让页面“秒开”
前端·面试·性能优化
空中海1 天前
第十一章:iOS性能优化、测试与发布
ios·性能优化