UnityShader_手游商业效果之三:前后人体描边

Posted avi9111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UnityShader_手游商业效果之三:前后人体描边相关的知识,希望对你有一定的参考价值。

 

在墙后面,或者草丛里,还是可以显示出透明人形

一般的渲染绘制,还是通过ZDepth,判断场景中对象的先后绘制顺序,判断到背遮挡的物体,甚至完全不会只,所以,关键还是将ZWrite关闭,让墙后原来不被绘制的物体重新被绘制

        	ZWrite Off
		    ZTest Off
		    Blend One OneMinusSrcAlpha

最简单的Shader源码

Shader "Game/InGameCut"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _HiddenColor("_HiddenColor",Color)=(1,1,1,1)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
        	ZWrite Off
		    ZTest Off
		    Blend One OneMinusSrcAlpha
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"
            float4 _HiddenColor;
            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
                // apply fog
                //UNITY_APPLY_FOG(i.fogCoord, col);
                //return col;
                return _HiddenColor;
            }
            ENDCG
        }
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"
            float4 _HiddenColor;
            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
                // apply fog
                //UNITY_APPLY_FOG(i.fogCoord, col);
                return col;
            }
            ENDCG
        }
    }
}

以上是关于UnityShader_手游商业效果之三:前后人体描边的主要内容,如果未能解决你的问题,请参考以下文章

UnityShader 序列帧动画效果

UnityShader基础案例——UI流光,扭曲,外边框,波纹效果

UnityShader快速上手指南

TYPESDK手游聚合SDK服务端设计思路与架构之三:流程优化之订单保存与通知

商业Shader渲染_各种基础参数和算法

UnityShader快速上手指南