midas+son의 크리에이티브(creative) 이야기

splat map

공부/Unity2016. 5. 30. 13:18

splat map 이란 것이 unity에서 나온 것은 아니다.(셰이더 기법...)

하지만 unity 강의를 들으면서 존재를 첨 알았기에 분류를 unity로 빼겠다.


splat map 이란 것은 아래와 같은 이미지를 먼저 떠올려야 한다.



빨강 노랑 파랑 초록 하양 등등 형형색색이 이미지인데

여러가지의 텍스쳐(texture)를 섞을 때 사용되는 셰이더 기법이다.


컴퓨터는 이미지를 RGB값으로 나누어 판단 할 수 있다.

거기에 alpha값(투명도)까지 추가하여 

RGBA(혹은 RGBW) 4가지의 값을 1바이트씩 (0~255)

총 4바이트로 해당 픽셀의 색상 값을 나타낸다.


하지만 splat map 자체가 이미지가 아니며

데이터라고 생각 해야 한다.


맵(혹은 그외 오브젝트)에 투영될 Texture가 하나가 아니라

2개 이상일 경우 합성을 하게 되는데

합성을 위한 데이터로서 splat map이 작성된다.


예를 들어 보자.

바위이미지 A와 풀 이미지B

2개의 이미지를 합성할 경우 

그 경계선부근은 바위 이미지 절반과

풀 이미지 절반의 색상을 구해서 삽입하게 된다.

그러면 A이미지의 RGB값에 0.5를 곱하고

B의 이미지 RGB값에 0.5를 곱해 더해주면 되고

영향도에 따라 비율을 각각 곱해주면 합성이 되는 것이다.


하지만 그 비율을 어떻게 데이터화 시키느냐가 문제가 된다.

각각 변수에 담기에는 맵의 크기에 따라 컨트롤이 힘들어 질수 있다.

그래서 생각해낸 것이 RGBA에 각각 하나씩 비율을 대입해보자였다.


즉 2가지 이미지를 사용한다면

원본 이미지가 아닌

별도의 이미지를 만들어

R값에 첫번째 이미지의 비율

G값에 두번째 이미지의 비율을 담는다는 것이다.

세번째와 네번째 이미지 소스가 있다면

각각 B, A 값에 비율을 담아 놓으면 되는 것이다.

그것이 바로 splat map이 된다.


splat map의 한 픽셀을 조사 하였는데

RGBA 값이 127, 63, 63, 0 이었다고 하면

첫번째 Texture의 값이 절반 정도, 

두번째 세번째 Texture는 1/4정도 값이 투영되고

네번째 이미지는 없거나 참조 되지 않는 것을 의미한다.


이리하여 Texture들을 합성 하기 위한 

데이터가 또다른 이미지로 나오게 되는 재밌는 기법이 나왔다.


그렇다면 4가지 Texture 보다 더 많은 가지수를 합성 하기 위해서 

어떻게 해야 하는가 궁금증이 있을 수 있다.

그건 별 수 없이 splat map이 하나 더 생성 되어야 한다.

그리고 splat map에 인덱싱을 해줘서

0번 splat map의 RGBA 값, 1번 splat map의 RGBA 값 체크가 

각각 되어야 한다.

그렇기에 물론 성능이 저하된다.

1~4개의 Texture 합성에는 splat map이 하나 필요하고

5~8개는 2개, 9~12는 3개의 splat map이 필요하며

성능은 splat map 수가 많을 수록 저하된다.


그래서 splat map에서 처리할 Texture는 

4개 이하를 권장한다.