【Shader】适合 Android 手机上 GrabPass 方法失效的热扭曲效果

有一个可以用来做火焰的扭曲模仿效果也可以用来做地震波的效果的 Shader,做地震波的效果的方法是先做一个环形的 Mesh,然后将这个 Shader 给 Mesh 材质使用,然后 通过脚本改变 Mesh 的半径从而实现地震波使地形扭曲的效果。在 iOS 上没有问题,可是在某些 Android 机上发现这个效果实现不了,因为在这些 Android 机上 Shader 里的 GrabPass 方法失效了。而 GrabPass 无非就是采集了当前的 Texture 而已,所以用 Camera 的 Render Texture 功能,就可以轻松实现 GrabPass 的功能。

这个 Shader 代码如下:

Shader "HeatDistortion" {
    Properties {
        _NoiseTex ("Noise Texture (RG)", 2D) = "white" {}
        strength("strength", Range(0.1, 0.3)) = 0.2
        transparency("transparency", Range(0.01, 0.1)) = 0.05
    }

    Category {

        Tags { "Queue" = "Transparent+10" }

        SubShader {
            GrabPass { Name "BASE" Tags { "LightMode" = "Always" } }

            Pass {
                Name "BASE"
                Tags { "LightMode" = "Always" }
                Fog { Color (0,0,0,0) }
                Lighting Off
                Cull Off
                ZWrite On
                ZTest LEqual
                Blend SrcAlpha OneMinusSrcAlpha
                AlphaTest Greater 0

                CGPROGRAM

                // Upgrade NOTE: excluded shader from DX11 and Xbox360; has structs without semantics (struct v2f members distortion)
                #pragma exclude_renderers d3d11 xbox360
                // Upgrade NOTE: excluded shader from Xbox360; has structs without semantics (struct v2f members distortion)
                #pragma exclude_renderers xbox360
                #pragma vertex vert
                #pragma fragment frag
                #pragma fragmentoption ARB_precision_hint_fastest
                #pragma fragmentoption ARB_fog_exp2
                #include "UnityCG.cginc"

                sampler2D _GrabTexture : register(s0);
                float4 _NoiseTex_ST;
                sampler2D _NoiseTex;
                float strength;
                float transparency;

                struct data {
                    float4 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值