티스토리 뷰

Shader "Custom/CustomAlphaTestingCutOutShader" {
	Properties{
		//_Color 구문이 없다면 놀랍게도 그림자가 나오지 않는다고 한다.
		//그러니까 지금 이 쉐이더에서 볼 수 없는 그림자를 그리는 Pass에서 이 인자 값을 사용하는 것으로 예상할 수 있다.
		_Color("Color", Color) = (1,1,1,1)
		_MainTex("Albedo (RGB)", 2D) = "white" {}
		//이 인자 값을 사용하여 텍스쳐에서 0.5를 기준으로 더 밝은 알파는 그리지 않는다.
		//즉, 알파 테스팅 쉐이더는 반투명 렌더링을 하지 않는다.
		_Cutoff("Alpha cutoff",Range(0,1)) = 0.5
	}
		SubShader{
		//RenderType은 TransparentCutout이다.
		//Queue 태그가 AlphaTest이다.
		//AlphaTest는 Queue 태그의 기본인 Geometry(2000)과 반투명 렌더링인 Transparent(3000)의 사이 순서이다.
		//따라서 이 쉐이더는 불투명 쉐이더와 반투명 쉐이더 사이의 순서에서 렌더링 될 것이다.
		Tags { "RenderType" = "TransparentCutout" "Queue" = "AlphaTest" }

		//알파 테스팅 쉐이더이기 때문에 alphatest을 적어주는 거야?
		//인자 값으로 _Cutoff를 받아온다.
		CGPROGRAM
		#pragma surface surf Lambert alphatest:_Cutoff

		sampler2D _MainTex;

		struct Input {
			float2 uv_MainTex;
		};

		fixed4 _Color;

		void surf(Input IN, inout SurfaceOutput o) {
			fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
			o.Albedo = c.rgb;
			o.Alpha = c.a;
		}
		ENDCG
	}
		//알파 테스팅 쉐이더에서 그림자를 그리기 위해 Fallback 위치에서 Cutout 계열의 쉐이더를 사용해야한다.
		FallBack "Legacy Shaders/Transparent/Cutout/Diffuse"
}

 

알파 테스팅 쉐이더에서 그림자를 그리기 위해 Fallback 위치에서 Cutout 계열의 쉐이더를 사용해야한다.

 

_Color의 a값을 조금 낮춰 반투명한 나뭇잎을 렌더링 하였다.

 

텍스쳐의 알파가 투명하게, 그리고 그림자도 완벽하게 그려지는 쉐이더이다.

하지만 반투명한 만큼 그림자도 투명했으면 좋겠는데 그건 또 다른 문제인 것이다.

'유니티 > Shader' 카테고리의 다른 글

유니티 URP Shader Training 01  (0) 2021.06.23
가려져도 보이는 쉐이더  (0) 2021.02.01
알파블렌딩쉐이더작성  (0) 2020.07.09
2Pass로만드는OutLineShader  (0) 2020.07.09
2Path를 이용한 Clean한 AlphaBlending  (0) 2020.07.09
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함