Unity3d 自发光(荧光)Bloom效果的实现

1.新建工程,在Asset Store下载Legacy Image Effects,导入工程。
2.在Camera上加上Bloom脚本。调节Bloom参数就可以看到自发光(荧光效果)了。

Unity3d 自发光(荧光)Bloom效果的实现_第1张图片

3.通过步骤2发现,只要高亮度的物体都有自发光效果,包括天空盒子。有一种初略的过略方式:新建Shader,新建Material,将Shader附在材质上,通过调节Material的Intensity和Bloom上的Threshold实现过滤,这种过滤方式比较粗,要更细致的过滤方式需要自己进一步开发。

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Glow" {
    Properties {
        _MainTex ("Texture", 2D) = "white" {}
        _Color ("Color", Color) = (1,1,1,1)
        _Glow ("Intensity", Range(0, 3)) = 1
    }
    SubShader {
        Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
        LOD 100
        Cull Off
        ZWrite On
        Blend SrcAlpha OneMinusSrcAlpha

        Pass {
            CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag

                sampler2D _MainTex;
                half4 _MainTex_ST;
                fixed4 _Color;
                half _Glow;

                struct vertIn {
                    float4 pos : POSITION;
                    half2 tex : TEXCOORD0;
                };

                struct v2f {
                    float4 pos : SV_POSITION;
                    half2 tex : TEXCOORD0;
                };

                v2f vert (vertIn v) {
                    v2f o;
                    o.pos = UnityObjectToClipPos(v.pos);
                    o.tex = v.tex * _MainTex_ST.xy + _MainTex_ST.zw;
                    return o;
                }

                fixed4 frag (v2f f) : SV_Target {
                    fixed4 col = tex2D(_MainTex, f.tex);
                    col *= _Color;
                    col *= _Glow;
                    return col;
                }
            ENDCG
        }
    }
}

 

你可能感兴趣的:(Unity)