当前位置: 代码迷 >> 综合 >> Amplify shader editor_学习理解1_Community Dissolve Burn
  详细解决方案

Amplify shader editor_学习理解1_Community Dissolve Burn

热度:45   发布时间:2024-01-31 11:50:31.0

刚开始学习Amplify shader editor,很多节点只知道单独用法,但是不清楚连接节点以后是什么作用。开始学习,希望能坚持。

BTW,很感谢学习过程中的朋友,老师的帮助,帮我解决了很多很多问题!!

在这里插入图片描述
这个是Example里面的节点图。说一下我自己的理解。

最开始我非常不能理解为什么需要用两个remap,和两次oneminus。各有各自的作用。

先分析一下如何做这个Dissolve Burn效果。首先我们需要一张类似噪声图,作为遮罩,这样低于clip的部分将会被切掉。其次我们需要一张有颜色的burn map,我们想要将这张图的颜色用我们的遮罩的图片的UV去采样到颜色,然后添加到Emission一起输出出去,这样看起来就好像有发光的边缘,就类似burn effect了。

做遮罩的过程跟shadergraph一样的,我们需要一个滑块来控制这张图的显示与消失。比如我们想要,滑块为0的时候,整个图是的显示的,滑块为1的时候,整个图就完全消失了。

一开始就想,只要把滑块加入到我们的要的dissolve的图就好了。只不过这样的话会发现在最后我们操控shader的时候没有办法使得当滑块为0时,整个图是完全显示的。
在这里插入图片描述

我们用remap将滑块的值重新映射。可以看到
在这里插入图片描述
可以看到比较明显的区别就是,将滑块映射后的图与dissolve相加后得到的图是不一样的。这个后面会说。

那如果加入one Minus呢?其实只是将滑块的作用反过来了而已。
在这里插入图片描述
可以看到第一个滑块为0的时候与第二个滑块为1的时候,相加起来的效果是一样的。所以有没有这个one Minus是无所谓的。

接着又进行了一此remap,这次的remap本质是拉大了差距。视觉上来说就是白的地方,更白了,黑的地方更黑了。

我们来看看remap的代码。

void Unity_Remap_float4(float4 In, float2 InMinMax, float2 OutMinMax, out float4 Out)
{Out = OutMinMax.x + (In - InMinMax.x) * (OutMinMax.y - OutMinMax.x) / (InMinMax.y - InMinMax.x);
}

比如图中某个位置的颜色是(0.4,0.4,0.4,0.4),以本次案例为例子,我们remap的坐标是(-4,4),那么remap以后,我们可以通过计算得到out =–4+(In-0)*(4-(-4))/1,因此out =(-0.8,-0.8,-0.8,-0.8),这样子该位置的颜色应该会变成黑色。(感谢小童同学)

但我们经过remap以后,数值其实是超过0-1的,只不过显示出来的颜色仍旧是黑白灰,但是因为我们下一步要利用该图的UV坐标去采样颜色,UV是在0-1之间的,所以我们必须使用Clamp将值限定在(0,1)。然后我们通过One Minus 再做一次反,将白色区域变成了黑色,黑色区域变成了白色。
在这里插入图片描述
之前我不明白为什么连接了第二个图的UV以后,他的边缘会是先黄色再红色,在黑色,即
在这里插入图片描述
这张图的变化的边缘,是先黄色到红色到黑色。原来是由于我们将黑白灰的图作为UV输入到第二张彩色图去采样他的颜色

在这里插入图片描述
如上图,比如黑白灰的某个位置的颜色值为

  相关解决方案