Unity 半透物體(Transparent)寫入攝像機深度圖(解決半透物體景深不生效)

Transparent渲染隊列 默認的camera深度紋理_CameraDepthTexture是不會將隊列>2500的材質寫進深度紋理的

因爲景深效果是使用深度圖,如果Transparent不能寫入深度問題,景深就會失效

爲了解決深度失效問題,最重要是解決Transparent寫入深度紋理

解決方案

原來半透明效果不動情況下加多一個材質球,這個材質球的shader(Opaque)只負責處理和傳輸模型網格數據,並不需要顯示,這樣就可以獲得深度數據了

來看看下面效果圖

從左到右

第一個:只有一個半透材質球,在景深攝像機完全被模糊

第二個:普通材質球

第三個:一個半透材質球一個透明的Opaque材質球

這樣子就可以解決景深問題

下面是寫入深度的材質球shader,完整項目在最下面

Shader "Effect/Transparent-Depth" {
	Properties
	{
	}
	SubShader
	{
		Tags { "RenderType" = "Opaque" }

		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag

			#include "UnityCG.cginc"

			struct appdata
			{
				float4 vertex : POSITION;
			};

			struct v2f
			{
				float4 vertex : SV_POSITION;
			};


			v2f vert(appdata v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				return o;
			}

			fixed4 frag(v2f i) : SV_Target
			{
				discard;
				return 0;
			}
			ENDCG
		}
	}
		Fallback "Diffuse"
}

鏈接:https://pan.baidu.com/s/1zsfCbsqQYesUA8ggtkDuRw 
提取碼:tq6s 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章