✔️ 추가된 기능
zwrite off
- z버퍼에 위치값을 입력하지 않음을 명시적으로 선언blend SrcAlpha OneMinusSrcAlpha
- 블렌딩 옵션, 사용할 수 있는 블렌딩 펙터가 여러가지 있다. (아래 추가 설명)keepalpha
- 유니티 5.0부터 서피스 쉐이더에 기본적으로 모든 불투명 쉐이더 알파에 1.0을 입력하는데 이를 막아준다.❗ z버퍼에 위치값 입력의 여부를 선택할 수 있고, blend펙터로 블렌딩을 제어할 수 있게됐다.
(
펙터
) × Source + (펙터
) × Destination
Source (Src)
- 이펙트 자신 (우리가 만드는 쉐이더가 적용되는 곳)Destination (Dest)
- 이펙트가 그려질 때의 배경
blend 펙터 (블렌딩 옵션) | |
---|---|
One | 숫자 1 |
Zero | 숫자 0 |
SrcColor | 소스의 컬러 |
SrcAlpha | 소스의 알파 |
DatColor | 목적지(배경)의 컬러 |
DatAlpha | 목적지(배경)의 알파 |
OneMinusSrcColor | 1-소스 컬러 |
OneMinusSrcAlpha | 1-소스 알파 |
OneMinusDatColor | 1-목적지(배경) 컬러 |
OneMinusDatAlpha | 1-목적지(배경) 알파 |
블렌딩 펙터 조합 | |
---|---|
Blend SrcAlpha OneMinusSrcAlpha | Alpha Blending |
Blend ScrAlpha One | Addictive |
Blend One One | Additive No Alpha Black is Transparent |
Blend DstColor Zero | Multiplicative |
Blend DstColor SrcColor | 2x Multiplicative |
SrcAlpha OneMinusSrcAlpha
- (
SrcAlpha
) × Source + (OneMinusSrcAlpha
) × Destination//코드 blend SrcAlpha OneMinusSrcAlpha // (정확히 확인하기 위해 Albedo는 Emission으로 바꿔준다.)
Alpha Blend
모드SrcAlpha One
- (
SrcAlpha
) × Source + (One
) × Destination//코드 blend SrcAlpha One
Add
모드One One
- (
One
) × Source + (One
) × Destination//코드 blend One One
Add
모드처럼 겹칠수록 밝아지지만 알파 채널이 전혀 작동하지 않는 Additive No Alpha Black is Transparent
로 검은색만이 투명함을 결정한다.Add
모드를 가동할 때 사용한다.DstColor Zero
- (
DstColor
) × Source + (Zero
) × Destination//코드 blend DstColor Zero
Multi
모드DstColor SrcColor
- (
DstColor
) × Source + (SrcColor
) × Destination//코드 blend DstColor SrcColor
2x Multi
❗ 블렌딩과 Z버퍼와의 관계
- 반투명에서 완벽히 앞뒤 판정을 하는 것은 무리이며 위의 다섯가지 예제에서도 문제가 계속 발생했다.
SrcAlpha OneMinusAlpha
모드에서는 문제가 도드라지지만 나머지 모드에서는 크게 티나지 않았으므로 보통 아무 생각 없이 사용한다 (...)- 주의해야할 점은 Add와 Multiply 모드를 동시에 사용하는 경우이며, 성질이 극명하게 다른 두 쉐이더가 동시에 나타날 때에는 티나기 쉽다.
- 실제 사용되는 경우에서는 빌보드 방식 / 피봇점을 강제로 이동 / 강제로 그리는 순서 지정 등 다양한 방식을 사용한다.
☑️ 파티클 쉐이더의 특성
- 빛을 받지 않기 때문에 빛의 연산이 필요가 없다.
- 그림자도 없기 때문에 라이트맵도 관계가 없다.
- 파티클 컬러가 조절되어야 한다.
- 알파 블렌딩 옵션이 조절되어야 한다.
☑️ 파티클 쉐이더
_TintColor
- 전체를 제어하는 색상, 회색일 때 자신 색이 나오고 흰색이면 밝게, 검은색이면 어둡게 나오도록 하기 위해 기본 값이 회색이다."IgnoreProgjection" = "True"
- 유니티 내장 프로텍터에 반응하지 않도록 해줌noforwardadd nolightmap noambient novertexlights noshadow
- 자동생성되는 추가 쉐이더들을 생성되지 않도록 해줌Cull off
- 2side modefloat4 color:Color
- 파티클 컬러 옵션이 적용되도록 하기 위해 불러온 Vertex Colorfloat4 Lightnolight
- 연산이 없는 라이팅 구문을 만듦