课时72 Fragment shader 7 - 实现半透明着色 2

Shader "Custom/Transparent_Object" {

	SubShader{
		pass {

		blend srcalpha  oneminussrcalpha
		ztest greater
		zwrite on

		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "unitycg.cginc"

			struct v2f
		{
			float4 pos:POSITION;
		};

		v2f vert(appdata_base v)
		{
			v2f o;
			o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
			return o;
		}

		fixed4 frag(v2f IN) :COLOR
		{
			fixed4 color = fixed4(1,1,0,0.5);
		return color;
		}
        ENDCG
	    }

	pass {

		//blend srcalpha  oneminussrcalpha
		ztest less
	    zwrite on


		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "unitycg.cginc"

			struct v2f
		{
			float4 pos:POSITION;
		};

		v2f vert(appdata_base v)
		{
			v2f o;
			o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
			return o;
		}

		fixed4 frag(v2f IN) :COLOR
		{
			fixed4 color = fixed4(1,1,0,0.5);
		return color;
		}
			ENDCG
	}
	}
}
Shader "Custom/Transparent_Replace" {


	SubShader{
		tags{"rendertype"="transparent"}
		pass {


		CGPROGRAM
		#pragma vertex vert
		#pragma fragment frag
		#include "unitycg.cginc"


	    struct v2f
		{
			float4 pos:POSITION;
			float2 depth:TEXCOORD0;
		};


		v2f vert(appdata_base v)
		{
			v2f o;
			o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
			o.depth = o.pos.zw;
			return o;
		}


		fixed4 frag(v2f IN) :COLOR
		{
			float depth =Linear01Depth( IN.depth.x / IN.depth.y);
			fixed4 color = fixed4(depth,0,0,1);
		    return color;
		}
        ENDCG
	    }
	}
}
using UnityEngine;
using System.Collections;


public class Replace : MonoBehaviour {


	// Use this for initialization
	void Start () {
        Camera.main.SetReplacementShader(Shader.Find("Custom / Transparent_2"),"rendertype");
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}


课时72 Fragment shader 7 - 实现半透明着色 2_第1张图片


你可能感兴趣的:(Unity,shader)