【转载】UE4材质学习: LocalAlignedTexture

642 阅读1分钟

原文链接:UE4材质学习: LocalAlignedTexture | EmberC

很多人都用过 WorldAlignedTexture,这是基于 世界空间 的三向贴图投影的材质函数。因为这个材质函数基于世界空间,所有当你模型移动的时候,贴图会发生变化。

下面提供一个基于本地空间的三向贴图投影的材质函数。

juejin.gif

只需要在 WorldAlignedTexture 基础上进行简单的修改即可。其实 UE4 的材质函数库里面有一个 LocalAlignedTexture 的材质函数,但是使用的时候发现有问题。所以自己动手实现了一个。


打开 WorldAlignedTexture 材质函数,可以看到,是使用 WorldPosition 来分别控制 XYZ 三个方向的贴图。然后通过 VertexNormal 进行混合。那么,制作一个 LocalAlignedTexture 无非是将世界坐标转换为本地坐标即可。

image.png

  1. 首先,我们要将 WorldPosition 转换为 LocalPosition。UE 提供了坐标转换的节点,可以使用 TransformPosition 进行转换,或者直接使用 LocalPosition 节点。注意LocalPosition 仅记录模型初始大小的像素坐标,如果模型有缩放的,我们需要乘模型的缩放值。使用 ObjectScale 节点来获取模型的缩放值。

image.png

  1. 然后,修正用来混合贴图的法线。VertexNormal 节点输出的法线向量是基于世界空间的,需要将其转换到 LocalSpace。

测试发现,VertexNormal 将转换到 LocalSpace 之后,模型缩放,会造成法线强弱发生变化。

所以,这里也需要乘一个 ObjectScale 来修正法线强度。

(目前发现,当模型有缩放的时候,VertexNormalLocalSpaceBoneSpace 都会发生强度的变化。)

最后,在 WorldlAlignedTexture 基础上修改的 LocalAlignedTexture 材质函数。

image.png