2022. 7. 26. 17:56ㆍPublic/Shader
- 알파 블랜딩은 사실상 사용할 수 있는 부분이 한정적이다.
- 그림자도 나오지 않고, 앞뒤 판정은 명확하지 않으며 매우 무겁다.
- 나무,풀 등을 그려야 할 경우 , 알파 블렌딩을 사용한다면 많은 문제가 생길 확률이 높다.
그래서 그런 경우에 사용하는 방법이 알파 테스팅(컷아웃) 이다.
Shader "Custom/AlphaTesting"
{
Properties
{
//_Color 구문을 살려놓은 이유는 없을경우 그림자가 나오지 않기때문
//즉, 그림자를 그리는 Pass에서 그림자 색상을 위해서 해당 인자를 사용.
_Color ("Color", Color) = (1,1,1,1) //추가
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Cutoff("Alpha cutoff",Range(0,1)) = 0.5 //추가
}
SubShader
{
Tags { "RenderType"="Transparentcutout" "Queue" = "AlphaTest"} //추가
LOD 200
CGPROGRAM
#pragma surface surf Lambert alphatest:_Cutoff //추가
#pragma target 3.0
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Legacy Shaders/Transparent/Cutout/VertexLit"
//Cutout 계열의 쉐이더 이름을 써주어야 그림자가 제대로 나옴.
}
이번에는 Queue는 AlphaTest이다.
해당 구문은 '일반 오브젝트(Geometry)'와'반투명(Transparent)'의 사이를 의미한다.
즉, 일반 불투명 오브젝트 - 알파 테스팅 - 알파 블렌딩 순서대로 그려진다.
_Cutoff
구문으로, 각 필셀은 '잘라버릴' 정도를 구하게 된다.
0.5 로 해놓으면 회색을 기준으로 더 어두운 색의 알파는 아예 찍어지지 않고 , 회색보다 밝은색의 알파는
알파가 없는 것처럼 그려진다.
(단점)
- 그래서 알파 테스트는 반투명이 되지 않는다.
- '반투명'이 되지 않으니 외곽도 거칠게 표현될 수 밖에 없다. (안티 알리아싱으로 외곽을 부드럽게 표현 할 수 있고 , 해상도가 높은 텍스쳐를 쓰면 알리아싱 현상도 덜 거슬린다.)
(장점)
- 그림자가 나온다.
- 알파 소팅의 문제도 일어나지 않는다.
- PC 버전에서는 알파 블렌딩보다 연산이 더 빠르다. (모바일 버전의 일부 기기는, 연산 특성상 하드웨어의 렌더링 방식과 문제가 생겨 알파 테스팅이 알파 블렌딩보다 더 느리다.)
배경팀이나 캐릭터팀에서 알파가 필요할 때 많이 사용할 수 밖에 없는 기능이다.
'Public > Shader' 카테고리의 다른 글
블렌드 펙터 연산 - SrcAlpha OneMinusSrcAlpha (0) | 2022.07.27 |
---|---|
커스텀 제어 가능 알파 블렌딩 && 펙터 (0) | 2022.07.26 |
Alpha Blend (0) | 2022.07.25 |
Cubemap Reflection (0) | 2022.07.25 |
커스텀 라이팅2 (0) | 2022.07.17 |