shader之——扭曲

1.

分析:

让一个图片扭曲起来需要对他的uv做改变,正在扭曲的是uv

思路:

1,让一张贴图A 做一个uv动画 或者多张贴图,做不同方向的uv动画

2.主贴图采样的时候,uv加上A的某个通道值,因为A在移动的时候,他的值会由0到1不停的变化 然后就可以扭曲起来了

0到1的数值太大了,所以可以乘上一个系数,让它的幅度变小。这种情况有个缺点,0到1会让它的uv扭曲的同时会往一边

偏移,所以最好是先把它变成-0.5到0.5 或者-1到1,这样就可以让uv不再偏移,上下左右均衡的晃动

核心代码:

 

float4 frag(VertexOutput i, float facing : VFACE) : COLOR {
                float4 time = _Time + _TimeEditor;
                float2 uvA = (i.uv0+(time.r*float2(_noise_A_U,_noise_A_V))*float2(1,1));//第一张图uv动画
                float4 A = tex2D(_noise_A,TRANSFORM_TEX(uvA, _noise_A));
                float2 uvB = (i.uv0+(time.r*float2(_noise_B_U,_noise_B_V))*float2(1,1));//第二张图uv动画
                float4 B = tex2D(_noise_B,TRANSFORM_TEX(uvB, _noise_B)); 
                float2 MainTexUV = ((i.uv0+((A.r+B.r-1)*_raodong_V))+(time.r*float2(_mianTex_U,_mianTex_V))*float2(1,1));//主贴图的扭曲uv + uv动画
                float2 AlphaUV = i.uv0+((A.r+B.r-1)*_raodong_V);//另外加上一扭曲贴图的通道

                float4 main_tex = tex2D(_main_tex,TRANSFORM_TEX(MainTexUV, _main_tex));//主贴图扭曲
                float4 alpha_tex = tex2D(_tex_alpha,TRANSFORM_TEX(AlphaUV, _tex_alpha));//通道图的扭曲
                float3 finalColor = (_main_V*((_Color.rgb*main_tex.rgb)*((alpha_tex.rgb*_alpha_color.rgb)*_alpha_v)));
                fixed4 finalRGBA = fixed4(finalColor,1);
                UNITY_APPLY_FOG(i.fogCoord, finalRGBA);
                return finalRGBA;
            }

 

 

 

总结:

 

这里的计算都是放在了片段着色器里,而且好多都是用的float  从效率上面是可以重新优化的,优化的时候还是要把计算放在顶点里,然后多张贴图都只用了一个通道比较浪费,需要把它合并在一张贴图里。

亲,如果您觉得本文不错,愿意给我一些动力的话,请用手机扫描二维码即可向我打赏

                                         打赏

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值