Unity学习shader笔记[二十五]SG电视机故障效果

故障效果有两种,第一种连线如图:Unity学习shader笔记[二十五]SG电视机故障效果

简单说下原理,原UV的V值是直接连接到了最终采样贴图的V,而最终采样贴图的U经过了原UV值加上扰乱的UV值,直接看最终图可能不容易解释,看下SimpleNoise的UV这个字段没有连接时候的图,

Unity学习shader笔记[二十五]SG电视机故障效果
关注到Add这一部分,右边是纯白色的,这是因为Split的输出R代表的是UV里面的U,是横坐标,越靠右边U值越大,相加的最大值是1,是白色,SimpleNoise这个节点产出是一维向量即是个数字,越黑越接近0,越白越接近1,这样的噪点图因为挨个像素与UV图相加后靠右边的基本上都到达1或者超过1这个峰值了,所以右边都是纯白色,注意Add节点对于值超过1的像素点只能用白色表示,并不是说最大值就只是1。可以再将SimpleNoise的Scale变为0。Add的结果就是UV的U值的变化显示了。
Unity学习shader笔记[二十五]SG电视机故障效果

图中可以看出经过噪声处理的值最终只是输出到了U上面,不确定可以尝试将噪声的Scale从小调节到大看看。
最后用time作为噪声uv的u放大值,将噪声贴图横向进行了拉伸,再在原uv的基础上增加这些U的变值,当像素所处的在最终输出UV的U值大于本身原UV坐标的时候就向右边取像素,小于本身原UV坐标的时候就像左边取像素。可以对比第一张图和最后一张图的Add结果,原本处于灰色的u值的像素如果处于了白色,那么它就向右采样了,即图像会向左偏移,如果处于了黑色,那么它就是向左采样了,即图像会向右偏移。


第二种做法

Unity学习shader笔记[二十五]SG电视机故障效果
第二种做法多了干扰的移动,并且能较好调节干扰的方向,干扰的大小。

我发现看连接好的节点图从末端开始看起比较容易理清思路,Multiply节点的输出加上原UV的U值作为了最终采样贴图的UV的U值,形成了左偏移的效果,第二行的主要作用是降低干扰程度并且将干扰方向从左改成了右,单纯的降低干扰程度可以将Power节点的B值调大,但是因为第二行的Remap结果是整张图都是黑色,SG里面对于小于或者等于0的值只能用黑色表示,具体是小于0还是等于0就要开发者自己去推了,这里从最顶的Add节点来看基本都是小于0了,因为Add结果都是从左往右偏,而如果Power值的结果作为Add的参数是从右往左偏的,能造成相反方向的偏移的只能是负数。第三行的左边四个节点主要是产生一个U无限大V重复移动的UV来给simpleNoise节点进行纹理上的横向无限放大和竖向的垂直移动,不管怎样的横竖方向的偏移,噪声的值都在0-1之间,这样的值进行了Power操作之后,只能变成小很多的小数,所以Power的结果基本上都是全黑。

Remap节点是将某个范围内的数按照线性比例重新映射到一个新的范围内,比如0-1之间的数0.1,重新映射到3-5之间就是3.2,重新映射到0-0.5之间就是0.05。这样的操作我觉得应该会有大于0的部分,只是这里太不明显了,结果是全黑,可能第二行里面的simplenoise的值大部分都是小于0.5的,当第三行的power县白色的部分与对应区域一个小于0的值相乘以后,就也变成负数了。 看SG节点里两个节点进行操作后的结果节点要有像素对应的概念,即三个节点图片的相同部位进行对比,看实际上究竟做了什么,这像素对应的概念是之前从shader开发里面转移过来应用的,SimpleNoise里面的黑白灰的表示是用RGB表示一个相同的Vector1的向量。 如果希望最终结果同时有向右和向左的偏移,调节Remap参数的OutMinMax的0.5为3或者更大即可,这样Multiply的时候乘数有了正数就有了向左的偏移了。目前我不能理解第二行的SimpleNoise的结果是怎么来的,UV都是相同值的时候成像不应该是这样,可以评论区回复。

上一篇:【笔记】博弈论


下一篇:【python自动化办公】电脑全盘路径/指定路径下文件(夹)查找,并封装为可执行程序