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