【转载】UE4 材质学习:Noise 节点实例化

435 阅读2分钟

原文链接:UE4材质学习:Noise节点实例化 | EmberC

今天的材质学习分享:如何通过一个材质节点,卡死你的电脑

看了Ryan Brucks大神对于 Noise 节点的应用,打算使用 Nosie 节点生成一些纹理。但是这个节点能实例化的参数只有 PositionFilterWidth,看效果非常不方便,于是使用 Custom Node 来调用了 Nosie 生成的方法,然后把参数暴露出来,实例化 Noise 的参数进行快速预览。

一开始想的有点复杂,以为需要在 Custom 里面实现所有的 Noise 算法,后来大佬说,ush 里面的方法可以直接在 Custom 里面调用。于是,剩下的就是 Ctrl+C/Ctrl+V 就够了。

  1. 首先我们要看一下在 HLSL 里面 Noise 是如何实现的

直接在材质里面连一个 Noise 节点,然后打开 HLSL 代码,复制 HLSL 代码,我们可以看到 Noise 函数的位置。在 shader/Private/Common.ush 1384 行

  1. MaterialExpressionNoise 直接抄到 Custom Node 里面,并且将里面的变量参数化。

只知道 Ctrl+C/Ctrl+V 的我,在这里犯了一个无脑的错误,导致 材质指令高达 4000+。

下图,MaterialExpressionNoise 中有一个 Noise3D_Multiplexer 的函数,里面有一个 Function 的变量,我直接无脑参数化,也就相当于同时将 6 个实现 Noise 纹理的方法全部加载到材质里面,而且还是最高采用等级。导致材质指令爆炸

这里查看了 Noise3D_Multiplexer 的代码,Function 传入 int 值,来切换生成 Noise 纹理的方式。

所以,最好的方法是将 Function 设为一个定值,来降低材质的指令,如下图,Noise3D_Multiplexer(1),表示只使用 GradientNoise3D_TEX,材质指令只有 300+

以下,高达 4000+ 指令的材质,如果想降低材质指令,只需要把代码里面某些变量设置为定值就可以了。

UE4.24 版百度云

链接:pan.baidu.com/s/1_uAhT0sJ…

提取码:dvmf