본문 바로가기
셰이더 (Shader)/유니티 쉐이더 스타트업 - 정종필

[Unity/Shader] 파트16-4 : 알파 소팅 문제

by Minkyu Lee 2023. 8. 28.

로봇에 알파 블랜딩 적용한다.

cull on (양면)을 끄고 cull back으로 바꾼다.

그래도 위처럼 뒤에 가려져야 할 오브젝트가 앞에 찍히는 문제가 있다.

왜 그런가?

 

피봇을 중심으로 거리를 산정하는 특성 때문이다.

아래 그림처럼 오브젝트와의 거리는 피봇으로 판별한다.

 

오브젝트 크기가 극명하게 다르면 더욱 자주 발생하는 문제다.

아래 그림에서 우측은 바닥의 피봇이 카메라와 더 가까워서 생긴 문제다.

 

위 내용을 정리하자면,

알파 소팅을 써도 완벽한 앞 뒤 판정은 불가능하다.

 

이렇듯 앞 뒤 판정이 잘못된 경우에,

자기 자신을 잘라버리는 현상을 막기 위해 z 버퍼에 자신의 위치값을 입력하지 않는다.

이를 'zwrite를 off한다' 라고 한다.

 

따라서 앞뒤 연산이 잘못되어도 잘리지 않고, 앞뒤만 바뀌게 오류를 그나마 줄인 것이다.

 

알파 블렌딩 이론 총 정리

- 불투명 오브젝트는 먼저 그린다.

- 반투명 오브젝트는 나중에 그린다.

- 반투명 오브젝트는 뒤에서부터 그린다.

- 알파 블렌딩을 썼을 때에는 zwrite를 하지 않는다.

댓글