Unity3D 2D水面倒影的实现

项目中需要加入一个水面倒影的效果,而我现在这个项目是2D的,2D的话倒影比3D要好做的多,只要用grabpass抓取屏幕,uv取反,加上一个偏移值,最后用一个三角函数对uv坐标进行偏移就好了

效果如下
请添加图片描述

(gif有点糊)
请添加图片描述

参数面板
请添加图片描述

完整代码

Shader "LX/postDistortion"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _DistortionScale ("DistortionScale", float) = 0.1
        _WaveLength ("WaveLength", float) = 1
        _Offset ("Offset", float) = 0
    }
    SubShader
    {
        Tags
        {
            "Queue"="Transparent"
            "RenderType"="Opaque"
        }
        LOD 200
        GrabPass
        {
            "_GrabTex"
        }
        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0

        sampler2D _GrabTex;
        float4 _GrabTex_TexelSize;
        float _DistortionScale;
        float _WaveLength;
        float _Offset;

        struct Input
        {
            float4 screenPos;
        };

        fixed4 _Color;


        void surf(Input IN, inout SurfaceOutputStandard o)
        {
            IN.screenPos.xy /= IN.screenPos.w;
            IN.screenPos.y = -IN.screenPos.y + _Offset;
            IN.screenPos.x += _DistortionScale * sin(_Time.y + IN.screenPos.y * _WaveLength)*0.01;
            fixed4 c = tex2D(_GrabTex, IN.screenPos) * _Color;
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

另外代码也传到github仓库里了,大家也可以关注一下哦~
我的github

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值