Alpha2Pass
2022. 7. 28. 15:00ㆍPublic/Shader
예시의 상황
- 알파 블랜딩으로 처리된 로봇 캐릭터가 있다.
- 파괴될때 투명해지면서 사라진다고 가정
일반적인 방법이라면 프레그먼트로 작성하는것이 일반적이나 학습을 위해서 이방법으로 적용
원리
첫 번째 패스는 z버퍼에는 그리되 화면에는 그리지 않는다.
즉 z 버퍼에만 그리는 패스를 사용 , variants를 최소한으로 줄이고 최대한 계산을 줄여서 만든 쉐이더이다.
두 번째 패스 z버퍼를 쓰지 않고 그린다.
Shader "Custom/Alpha2Pass"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader
{
Tags{"RenderType" = "Transparent" "Queue" = "Transparent"}
//1st pass zwrite on, rendering off
zwrite on
ColorMask 0
CGPROGRAM
#pragma surface surf nolight noambient noforwardadd nolightmap novertexlights noshadow
struct Input {
float4 color:COLOR;
};
void surf(Input IN, inout SurfaceOutput o) {
}
float4 Lightingnolight(SurfaceOutput s, float3 lightDir, float atten) {
return float4(0, 0, 0, 0);
}
ENDCG
//2st pass write off, rendering on
zwrite off
CGPROGRAM
#pragma surface surf Lambert alpha:fade
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 = 0.5;
}
ENDCG
}
FallBack "Diffuse"
}
'Public > Shader' 카테고리의 다른 글
테셀레이션 (0) | 2023.09.10 |
---|---|
[ShaderGraph] ToonShader(툰쉐이더) (0) | 2023.06.19 |
zwrite on/off (0) | 2022.07.28 |
블렌드 펙터 연산 - DstColor SrcColor (0) | 2022.07.28 |
블렌드 펙터 연산 - DstColor Zero (0) | 2022.07.27 |