我有一个场景,我真的需要景深。
显然,Unity 的景深不适用于处理 alpha 的任何着色器,无论是内置的还是自定义的。
例如,透明/漫反射着色器会发生这种情况。透明/抠图可以代替。
这是我制作的触发此行为的最简单的自定义着色器:
Shader "Custom/SimpleAlpha" {
Properties {
_MainTex ("Base (RGBA)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Transparent" "Queue"="Transparent" }
//Tags { "RenderType"="Opaque" }
LOD 300
ZWrite Off
CGPROGRAM
#pragma surface surf Lambert alpha
#include "UnityCG.cginc"
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o) {
half4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
如果您在项目中尝试代码,您会注意到每个佩戴着色器的对象都以相同的量进行模糊,而不是基于 Z 进行模糊。
任何帮助深表感谢。提前致谢。
我在 Unity Answers 上发布了同样的问题:http: //answers.unity3d.com/questions/438556/my-shader-brakes-depth-of-field.html