Unity/Shader
[5.10] Alpha Blending
ljw4104
2021. 5. 10. 11:13
Blending
- 투명 색상을 만드는데 사용된다.
다음과 같은 그림이 있을 때, 보통 앞 쪽에 있는 것을 먼저 그린다고 생각할 것이다.
하지만 뒤 쪽의 그림을 먼저 그려야 하는 경우도 있다.
이와 같이 렌더링되는 순서를 Z-Buffer(카메라의 깊이 텍스쳐, Depth Texture)이라고 하며, 뒤의 것이 먼저 그려지는 것을 Overdraw라고 한다.
docs.unity3d.com/kr/530/Manual/SL-CameraDepthTexture.html
유니티 - 매뉴얼: 카메라의 깊이 텍스처
플랫폼 별 렌더링 차이 카메라의 깊이 텍스처 Unity에서 카메라는 깊이 또는 깊이+법선 텍스처를 생성할 수 있습니다. 이것은 최소한의 G-buffer(그래픽 버퍼) 텍스처에서 포스트 프로세싱 효과 또
docs.unity3d.com
Alpha-Blending
- Object들을 그리는 순서가 정해져 있지 않는 것.
- Object들이 그려질 때 마다 G Buffer를 참고해서 앞 뒤 판정을 한다. 그리고 그려질 Pixel과 그려지지 않을 Pixel을 결정한다.
Rules
- 불투명을 먼저, 반투명을 나중에 그린다.
- 모든 Object가 반투명이면, 멀리 있는 것부터 가까운 것 까지 차례대로 그린다.
다음 그림은 풀때기를 Quad에 그렸지만 그림자가 이쁘게 나오지 않는다.
Quad의 배경까지 그려지기 때문이다.
좀 이쁘진 않지만 그래도 그려지긴 한다.
Shader "Custom/Grass"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Cutoff ("Alpha CutOff", Range(0, 1)) = 0.5
//0.5를 기준으로 0.5보다 밝은 것은 그려지지 않음.
}
SubShader
{
Tags { "RenderType"="TransparentCutout" "Queue"="AlphaTest" }
//RenderType을 반투명으로 바꿈 / Queue: 그려지는 순서
Cull Off
CGPROGRAM
#pragma surface surf Standard alphatest:_Cutoff
sampler2D _MainTex;
float4 _Color;
struct Input
{
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Legacy Shaders/Transparent/Cutout/VertexLit"
}
Cutoff를 통해 Alpha부분을 잘라낼 수 있다.