U3d 使用Projector实现3d光环效果

效果如下

 

 

GameObject上挂Projector脚本。

一张类圆环状图片,

重要的是材质的shader

Shader "Projector/Custom" {
    Properties{
        _ShadowTex("Cookie", 2D) = "gray" {}
        _FalloffTex("FallOff", 2D) = "white" {}
    }
        Subshader{
        Tags{ "Queue" = "Transparent" }
        Pass{
        ZWrite Off
        ColorMask RGB
        //Blend DstColor Zero
        Blend SrcAlpha OneMinusSrcAlpha
        Offset -1, -1

        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #pragma multi_compile_fog
        #include "UnityCG.cginc"

        struct v2f {
            float4 uvShadow : TEXCOORD0;
            float4 uvFalloff : TEXCOORD1;
            UNITY_FOG_COORDS(2)
            float4 pos : SV_POSITION;
        };

        float4x4 _Projector;
        float4x4 _ProjectorClip;

        v2f vert(float4 vertex : POSITION)
        {
            v2f o;
            o.pos = mul(UNITY_MATRIX_MVP, vertex);
            o.uvShadow = mul(_Projector, vertex);
            o.uvFalloff = mul(_ProjectorClip, vertex);
            UNITY_TRANSFER_FOG(o,o.pos);
            return o;
        }

        sampler2D _ShadowTex;
        sampler2D _FalloffTex;

        fixed4 frag(v2f i) : SV_Target
        {
            fixed4 texS = tex2Dproj(_ShadowTex, UNITY_PROJ_COORD(i.uvShadow));
            //texS.a = 1.0-texS.a;

            //fixed4 texF = tex2Dproj(_FalloffTex, UNITY_PROJ_COORD(i.uvFalloff));
            //lerp(fixed4(1, 1, 1, 0), texS, texF.a);
            fixed4 res = texS;

            UNITY_APPLY_FOG_COLOR(i.fogCoord, res, fixed4(1,1,1,1));
            return res;
        }
            ENDCG
        }
    }
}

 

 

 

把材质球拖到projector上,有些东西不想被投射到的可以修改Ignore

 

posted @ 2020-07-31 10:43  一线之间  阅读(721)  评论(0编辑  收藏  举报