[Unity Shader]溶解效果

一、效果

二、BurnToFadeOut.shader

Shader "BurnToFadeOut" {
Properties {
    _StartColor ("Start Color", Color) = (1,1,1,1)
    _EndColor ("End Color", Color) = (1,1,1,1)
    _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
    _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
    _Emit ("Emit level", Range(1,100)) = 0
    _Range ("Range", Range(0,1)) = 0
}
SubShader {
    Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
    LOD 100

    Lighting Off

    Pass {
        CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata_t {
                float4 vertex : POSITION;
                float2 texcoord : TEXCOORD0;
            };

            struct v2f {
                float4 vertex : SV_POSITION;
                half2 texcoord : TEXCOORD0;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            fixed4 _StartColor;
            fixed4 _EndColor;
            fixed _Cutoff;
            half _Emit;
            half _Range;

            v2f vert (appdata_t v)
            {
                v2f o;
                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
                return o;
            }

            fixed4 frag (v2f i) : COLOR
            {
                fixed4 col = tex2D(_MainTex, i.texcoord);
                fixed a = dot(col.xyz, fixed3(0.3, 0.59, 0.11));
                col.a = a;
                clip(a - _Cutoff);
                if(a < _Cutoff + _Range)
                    col.xyz = lerp(_StartColor.xyz, _EndColor.xyz, (saturate(a - _Cutoff) / _Range)) * _Emit;
                return col;
            }
        ENDCG
    }
}

SubShader {
    Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
    LOD 100

    Pass {
        Lighting Off
        Alphatest Greater [_Cutoff]
        SetTexture [_MainTex] { combine texture }
    }
}
}

三、使用

光晕效果需要把摄像机HDR打开并挂上这个脚本(Pro版导入Standard Asset里的)

@script ExecuteInEditMode
@script RequireComponent (Camera)
@script AddComponentMenu ("Image Effects/Bloom and Glow/Bloom (Optimized)")

class FastBloom extends PostEffectsBase {

    public enum Resolution {
        Low = 0,
        High = 1,
    }

    public enum BlurType {
        Standard = 0,
        Sgx = 1,
    }

    @Range(0.0f, 1.5f)
    public var threshhold : float = 0.25f;
    @Range(0.0f, 2.5f)
    public var intensity : float = 0.75f;

    @Range(0.25f, 5.5f)
    public var blurSize : float = 1.0f;

    var resolution : Resolution = Resolution.Low;
    @Range(1, 4)
    public var blurIterations : int = 1;

    public var blurType = BlurType.Standard;

    public var fastBloomShader : Shader;
    private var fastBloomMaterial : Material = null;

    function CheckResources () : boolean {
        CheckSupport (false);  

        fastBloomMaterial = CheckShaderAndCreateMaterial (fastBloomShader, fastBloomMaterial);

        if(!isSupported)
            ReportAutoDisable ();
        return isSupported;
    }

    function OnDisable() {
        if(fastBloomMaterial)
            DestroyImmediate (fastBloomMaterial);
    }

    function OnRenderImage (source : RenderTexture, destination : RenderTexture) {
        if(CheckResources() == false) {
            Graphics.Blit (source, destination);
            return;
        }

        var divider : int = resolution == Resolution.Low ? 4 : 2;
        var widthMod : float = resolution == Resolution.Low ? 0.5f : 1.0f;

        fastBloomMaterial.SetVector ("_Parameter", Vector4 (blurSize * widthMod, 0.0f, threshhold, intensity));
        source.filterMode = FilterMode.Bilinear;

        var rtW = source.width/divider;
        var rtH = source.height/divider;

        // downsample
        var rt : RenderTexture = RenderTexture.GetTemporary (rtW, rtH, 0, source.format);
        rt.filterMode = FilterMode.Bilinear;
        Graphics.Blit (source, rt, fastBloomMaterial, 1);

        var passOffs = blurType == BlurType.Standard ? 0 : 2;

        for(var i : int = 0; i < blurIterations; i++) {
            fastBloomMaterial.SetVector ("_Parameter", Vector4 (blurSize * widthMod + (i*1.0f), 0.0f, threshhold, intensity));

            // vertical blur
            var rt2 : RenderTexture = RenderTexture.GetTemporary (rtW, rtH, 0, source.format);
            rt2.filterMode = FilterMode.Bilinear;
            Graphics.Blit (rt, rt2, fastBloomMaterial, 2 + passOffs);
            RenderTexture.ReleaseTemporary (rt);
            rt = rt2;

            // horizontal blur
            rt2 = RenderTexture.GetTemporary (rtW, rtH, 0, source.format);
            rt2.filterMode = FilterMode.Bilinear;
            Graphics.Blit (rt, rt2, fastBloomMaterial, 3 + passOffs);
            RenderTexture.ReleaseTemporary (rt);
            rt = rt2;
        }

        fastBloomMaterial.SetTexture ("_Bloom", rt);

        Graphics.Blit (source, destination, fastBloomMaterial, 0);

        RenderTexture.ReleaseTemporary (rt);
    }
}
时间: 2024-07-31 04:47:41

[Unity Shader]溶解效果的相关文章

PS滤镜制作相机溶解效果

  溶解的效果运用非常广泛,这类效果把实物与艺术完美的结合,表现一种流程及完美的曲形美.制作方法也不是很复杂,大致过程:先把需要液化的实物抠出来单独放在一个图层,然后用液化滤镜进行液化处理,效果看上去自然流畅即可.然后把实物图层移到上面用蒙版或橡皮工具把实物及液化部分融合在一起,后期再适当的渲染一下即可.原图   最终效果   一.打开相机图片文件,双击该层解锁,并在下方创建一个新的图层.填充红色(#ff0000新层)的颜色. 现在你摄像头下方有一个红色背景层,它可以很容易地看到物体的边界.没有

[Unity UGUI]ScrollRect效果大全

UGUI各种优化效果 本文所实现的UGUI效果需求如下: - 支持缩放滑动效果 - 支持动态缩放循环加载 - 支持大数据固定Item复用加载 - 支持不用Mask遮罩无限循环加载 - 支持ObjectPool动态加载 - 支持无限不规则子物体动态加载 - 支持拖动并点击和拖拽 - 支持拖动并拖拽 - 支持ScrollRect拖动自动吸附功能(拖动是否超过一半自动进退) 前言 要实现以上效果,我从网上搜索得到部分解决方案链接,但不是完全满足想要的效果,就自己继续改造优化和添加想要的效果,本文最后会

图片播放器的溶解效果

提示:您可以先修改部分代码再运行 提示:您可以先修改部分代码再运行

PS制作鼠标溶解液体效果

  本教程介绍常见的液化及溶解效果的制作方法.过程也比较简单,先用涂抹或选区工具做出类似液滴的图形.然后再加上纹理,高光等,跟原图完美结合即可. 原图: 效果图: 1.首先在photoshop中打开原图图片,然后双击"背景"图层进行角锁,然后重命名为"鼠标".然后创建一个新图层,命名为"背景"移动到"鼠标"图层的下面并填充白色. 2.使用取样工具,选择"鼠标"图层,单击鼠标的底部进行颜色取样,如图所示. 3

猫都能学会的Unity3D Shader入门指南(二)

关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果您在Shader开发上有所心得,很欢迎并恳请您指出文中纰漏,我会尽快改正.在之前的开篇中介绍了一些Shader的基本知识,包括ShaderLab的基本结构和语法,以及简单逐句地讲解了一个基本的shader.在具有这些基础知识后,阅读简单的shader应该不会有太大问题,在继续教程之前简单阅读一下Un

【Aladdin Unity3D Shader编程】之一 基本入门

OpenGL.DirectX以及GLSL.HLSL.CG OpenGL和DirectX是图像应用编程接口,用于渲染二维或者三维图形. GLSL着色语言是用来在OpenGL中着色编程的语言,有点在于跨平台性,可以再Windows.Linux.Mac甚至移动平台上工作. HLSL是微软控制着色的编译,几乎只支持微软自己的产品,如Windows,XBox等,其他平台没有可编译HLSL的编译器. CG是有英伟达公司出的真正意义上的跨平台着色器语言. GPU渲染管线概述 1.顶点着色器 顶点着色器是流水线

iOS实现爆炸的粒子效果示例代码_IOS

照例我们先看看效果图 怎么样?效果很不错吧,下面来一起看看实现的过程和代码示例. 实现原理 从图中可以大致看出,爆炸点点都是取的某坐标的颜色值,然后根据一些动画效果来完成的. 取色值 怎么取的view的某个点的颜色值呢?google一下,就可以找到很多答案.就不具体说了.创建1*1的位图,然后渲染到屏幕上,然后得到RGBA.我这里写的是UIView的extension. extension UIView { public func colorOfPoint(point:CGPoint) -> U

A Simple OpenGL Shader Example

A Simple OpenGL Shader Example eryar@163.com Abstract. OpenGL Shading Language, the high-level programming language defined to allow application writers to write programs that execute on the programmable processors defined within OpenGL. Informally t

Unity3D资源分享

 都是网上找的连七八糟的资料了,整理好分享的,有学习资料,视频,源码,插件--等等 东西比较多,不是所有的都是你需要的,可以按  ctrl+F 来搜索你要的东西,如果有广告,不用理会,关掉就可以了,如果有密码 6789 链接地址永久有效,慢慢下载啊. 这个是最全的.  ****************************************  *  文件名称:CG_Unity3D_游戏实战教程  *  下载地址1:http://www.t00y.com/file/61325782  *