티스토리 뷰

//테크니컬 아티스트를 위한 유니티 쉐이더 스타트업 발췌

알파 블렌딩을 하면 반투명의 객체들이 서로 엉켜 엉망으로 렌더링 되는 경우가 있는데,

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

"우린 답을 찾을 것이다 늘 그랬듯 이"

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함