아틀라스 텍스쳐를 활용한 다이나믹 배칭

 

 

 

드로우 콜

 

 

화면에 오브젝트를 그리기 위해서는 보통은 오브젝트 당 드로우 콜을 먹습니다.

 - 3개의 오브젝트 -> 3드로우 콜

드로우 콜은 CPU가 GPU에게 일을 하나 던져 주는 거라 생각하시면 됩니다.

이 드로우 콜은 기기의 상태에 따라 받아줄 수 있는 최대 수치가 있습니다.

(최대 수치를 초과 하더라도 게임이 안되는 건 아니고, 프레임이 떨어지게 되죠.)

 

 

 

배칭

 

 

이렇게 증가하는 드로우 콜을 잡기위해 배칭이란 방식을 사용 합니다.

배칭 방식은 크게 2가지로 나뉘는데요.

 

 

스테틱 배칭

 

스테틱 배칭은 고정된 오브젝트에 사용되는 방식

오브젝트를 합쳐 CPU -> GPU로 한번에 넘겨주는 방식으로 드로우 콜을 줄여 줍니다.

(합치는 기준은 같은 머터리얼 사용)

 - 장점 : 드로우 콜 감소

 - 단점 : 메쉬를 강제적으로 합치다 보니, 같은 오브젝트를 여러 개 씬에 설치하더라도, 모두 메모리에 올라 갑니다.

   (스테틱 배칭을 하지 않으면, 같은 오브젝트는 메모리를 돌려쓰기를 합니다.)

이번에 이야기 할 내용은 다이나믹 배칭인 관계로 스테틱 배칭 이야기는 요 정도로 마무리~

 

 

다이나믹 배칭

 

다이나믹 배칭은 동적인(움직이는) 오브젝트의 드로우 콜을 줄여 주는 방식 입니다.

 

다이나믹 배칭의 조건

 - 버텍스의 수가 300개 이하

   (셰이더, UV채널, 노멀 등으로 인해 실 사용 버텍스 수는 더 줄어들게 됩니다.)

 - 동일 스케일일 때 배칭됨

   (포지션, 로테이션은 달라도 배칭 가능)

 - 같은 머터리얼을 사용

   (복사된 머터리얼은 배칭 되지 않습니다.)

 - 같은 랜더큐 여야 가능

 - 이외에도 조건들이 더 있지만 이정도로~ 아래 유니티 문서를 참고하세요.

 

관련 내용 : http://docs.unity3d.com/kr/current/Manual/DrawCallBatching.html

 

 

 

메쉬 UV 조절한 다이나믹 배칭

 

 

샘플을 제작하면서 설명을 할게요.

 

<샘플 아틀라스 텍스쳐>

8*4 타일링의 아틀라스 텍스쳐 입니다.

 

<유니티 카메라에서 본 아틀라스 타일 표현> 

개별 플랜마다 UV의 위치를 달리 가면서 다이나믹 배칭을 되게 하려면 어떻게 해야 할까요?

일단 이렇게 진행 해보죠.

 

1번 방식

 - 동일 텍스쳐 사용

 - 3개의 머터리얼 사용

 - 3개의 다른 UV 메쉬 사용(FBX플랜 3개)

결과 : 3 콜

 - 동일 머터리얼이 아니라서 배칭이 되지 않습니다.

 

2번 방식

 - 동일 텍스쳐 사용(하나의 머터리얼을 사용하기 위해서는 텍스쳐도 같아야겠죠.)

 - 1개의 머터리얼 사용

 - 동일 메쉬 사용

 - 셰이더 단에서 UV 수정(스크립트를 통한 셰이더 UV 접근)

결과 : 3 콜

 - 모두 같은 리소스를 사용했지만 셰이더 단에서 UV를 조절하면서 인스턴스 머터리얼이 생성 되었습니다.

   셰이더 또한 머터리얼의 일부이기 때문 입니다.

   (인스턴스 머터리얼 : 머터리얼에 접근해서 뭔가 수정을 하게 되면, 유니티는 머터리얼을 카피해 새로운 머터리얼을 만들어 버립니다.) 

 

3번 방식

 - 동일 텍스쳐 사용

 - 1개의 머터리얼 사용

 - 3개의 다른 UV 메쉬 사용(FBX플랜 3개)

결과 : 1 콜

 - 머터리얼을 건들이지 않고 메쉬를 다르게 사용하니 배칭이 되네요.

   다이나믹 배칭을 하려면 머터리얼을 건들이지 말고, 메쉬 단에서 변경을 가해야 한다는 걸 알았습니다.

 

 

결론

 

 

3번 방식은 다이나믹 배칭이 되지만 단점이 있죠.

위 아틀라스 텍스쳐의 타일 수는 32개 입니다.

그렇다는 건 1~32까지의 숫자를 표현하기 위해서는 32개의 FBX플랜이 필요하다는 이야기죠.

뭔가 이건 아닌 듯 싶죠?

그럼 어떻게 해야 할까요~

 

유니티 스크립트로 메쉬에 접근해 UV를 직접 수정하는 방식으로 제작하면 됩니다.

그럼 1개의 플랜 메쉬로 UV 조절이 가능해 지겠죠.

이런 방식을 아틀라스 텍스쳐를 활용한 배칭이라고 하고, 주로 UI를 표현하는데 많이 사용됩니다.

 

 

Posted by Hwanggoon
,