티스토리 뷰
//테크니컬 아티스트를 위한 유니티 쉐이더 스타트업 발췌
알파 블렌딩을 하면 반투명의 객체들이 서로 엉켜 엉망으로 렌더링 되는 경우가 있는데,
2Pass를 사용하여 첫 Pass는 z 버퍼에 그리되, 화면엔 렌더링 하지 않는 것으로 문제를 해결할 수 있다고 한다.
SubShader{
Tags {"RenderType" = "Transparent" "Queue" = "Transparent"}
cull back
//Zwrite를 켜서 가려지는 부분은 그리지 않도록 한다.
zwrite on
//하지만 화면에는 아무것도 그리지 않는다.
ColorMask 0
//1Pass
CGPROGRAM
#pragma surface surf _DrawZBufferButNoDraw noambient noforwardadd novertexlights noshadow
struct Input {
float3 lightDir;
};
fixed4 _Color;
void surf(Input IN, inout SurfaceOutput o) {
}
float4 Lighting_DrawZBufferButNoDraw(SurfaceOutput s, float3 lightDir, float atten) {
return float4(0, 0, 0, 0);
}
ENDCG
+
다음 Pass에선 표현하고자 하는 것을 그리면 된다.
대신 다음 Pass에선 아래와 같이 해당 Pass의 CGPROGRAM에 alpha:fade를 추가해야 반투명한 오브젝트를 렌더링 할 수 있다.
CGPROGRAM
#pragma surface surf Lambert alpha:fade
"우린 답을 찾을 것이다 늘 그랬듯 이"
'유니티 > Shader' 카테고리의 다른 글
유니티 URP Shader Training 01 (0) | 2021.06.23 |
---|---|
가려져도 보이는 쉐이더 (0) | 2021.02.01 |
알파테스팅(컷아웃)쉐이더를작성할뿐인초라한글 (0) | 2020.07.10 |
알파블렌딩쉐이더작성 (0) | 2020.07.09 |
2Pass로만드는OutLineShader (0) | 2020.07.09 |