유니티 MeshBaker Asset 사용 방법 1편

MeshBaker란?

 

유니티 MeshBaker

MeshBaker란? 여러 개의 메시를 하나의 큰 메시로 결합하고 해당 오브젝트의 텍스처를 텍스처 아틀라스 및 텍스처 배열로 만드는 데 있어 도움을 주는 툴(Tool)입니다. 텍스쳐 아틀라스를 사용하지

wlsdn629.tistory.com

Mesh Baker에 대한 에셋소개는 위 포스팅에 상세하게 작성해놨습니다.


MeshBaker Component

상황마다 다르지만 MeshBaker Component를 이용하여 여러개의 Mesh Renderer을 하나의 Mesh Renderer로 결합하게 되면 기존에 적용되던 물리엔진들이 더이상 개별 오브젝트에 작동하지 않고 하나의 덩어리로 물리엔진이 작동되는 문제가 발생합니다.

Enable Renderers On Source Objects를 사용하면 소스 오브젝트를 빠르게 비활성화 할 수 있다

이런 경우에는 Skinned Mesh Renderer을 이용하여 결합하면 됩니다.

많은 정점이 있는 오브젝트에 Skinned Mesh Renderer을 이용하여 결합하게 되면 리소스가 많이 들지만 폴리곤이 적은 오브젝트의 경우 Skinned Mesh Renderer을 이용하여 Mesh를 베이킹하면 드로우콜을 줄이는 저렴한 방법이 될 수 있습니다.

 

Skinned Mesh Renderer 모델을 다른 씬에서 이용할 수 있도록 프리팹화 하고 싶으면 OutPut에 Bake Into Prefab을 설정한 다음 프리팹으로 저장할 오브젝트를 새로 생성해주면 됩니다

 

더보기

매우 큰 Mesh를 베이킹하려는 경우 2가지 유니티의 Mesh 크기도 알아야 합니다.

 

16비트 메시는 최대 64k Vertex, 32비트는 최대 40억개의 Vertex를 가질 수 있습니다.


TextureBakrer Component

재질이 다른 메시는 Texture Baker 컴포넌트를 이용하여 모두 공유할 수 있는 메티리얼을 만들어주어야 결합할 수 있습니다. 

이를 위해 각 재료내의 고유한 텍스쳐를 아틀라스라는 새로운 텍스쳐로 만들어주어야 합니다.

출처 - https://www.youtube.com/watch?v=XSdwuLvChRg&t=37s

결합된 메쉬는 소스 텍스처 대신 아틀라스 텍스처를 사용하도록 UV좌표를 조정해야 합니다.

 

이것이 Texture Baker컴포넌트가 MeshBaker컴포넌트를 자식으로 제공하는 이유입니다.

MeshBaker는 메쉬를 베이킹 할 때 UV를 변환하여 결합 된 메시가 소스 메시와 동일하게 보이도록 해줍니다.

 

아틀라스를 만들기 위해서는 [Create Empty Assets For Combined Material] 버튼을 눌러 프로젝트에서 아틀라스를 저장할 위치를 선택해주어야 합니다.

새롭게 생겨난 메테리얼(여기서는 TestTexture-mat)에 셰이더를 설정하는 것은 매우 중요합니다.

 

세이더의 기본값은 첫 번째 소스 메시가 사용하는 모든 것이며 이 셰이더의 텍스처 속성에 대해 아틀라스가 생성됩니다.

설정을 끝낸 후 텍스처 베이커 컴포넌트의 [Bake Materials Into Combined Material] 버튼을 누르면 방금 만든 메테리얼에 아틀라스(메테리얼)가 저장됩니다.

 

결합하는 재료의 수와 설정한 옵션에 따라 시간은 달라질 수 있으며 아틀라스를 보면 모든 개별 텍스처가 하나의 큰 이미지로 합쳐진 것을 볼 수 있습니다.

 

아틀라스를 사용하는 하나 이상의 결합된 메시를 만들기 위해 Mesh Baker Grouper를 사용합니다. 아래에서 설명합니다.

 

자식 Mesh Baker 컴포넌트는 부모 Texture Baker 컴포넌트의 설정을 공유받습니다.


Mesh Baker Grouper Component

각 텍스처 베이커 컴포넌트는 여러 메쉬베이커 컴포넌트를 자식으로 가질 수 있습니다.

그룹퍼는 메쉬 베이커 구성요소를 자동으로 만드록 제어하는 데 사용되며 옵션 선택입니다.

 

사용해야하는 이유는 목적에 따라 다르지만 예시로 카메라 시야로 설명하겠습니다.

 

카메라 시야 밖에 있는 오브젝트는 컬링될 수 있습니다.

하지만 메시가 결합되면 더 이상 개별적으로 컬링할 수 없습니다.(하나의 덩어리로 묶여 있기 때문에)

 

즉, 일반적으로 카메라가 비추고 있는 화면에 있는 메시만 결합하고 싶은 경우, 메시 그룹이 넓게 분리 된 경우 일반적으로 각 그룹에 대해 별도의 메쉬베이커를 사용하면 됩니다.

출처 - https://www.youtube.com/watch?v=y5kmWixP0tg

즉, 정리 해보자면 위 사진처럼 그룹을 나눔으로써 모든 오브젝트를 텍스쳐 베이커 컴포넌트를 이용해서 굽고 싶지 않기 위해 영역을 지정해서 각 영역에 있는 오브젝트들을 구울 수 있습니다.

 

Cluster Type을 이용해서 영역의 단위를 설정할 수 있으며 영역을 설정한 후 "Bake All Child Mesh Bakers" 버튼을 눌러주면 한 번에 Mesh Baker 컴포넌트를 구울 수 있습니다.


Texture Baker Component

Texture Bake Result는 결과가 저장되는 곳입니다.

 

아틀라스를 사용하는 메시를 결합하려면 Texture Bake Result를 메쉬베이커 컴포넌트의 Texture Bake Result에 할당하면 됩니다.

 

"Combined Mesh Mateiral"은 프로젝트의 재료이며 이 재질의 셰이더는 생성될 아틀라스를 정의합니다.

 

"Multiple Combined Materials"는 둘 이상의 재료와 서브 메쉬가 있는 결합 된 메쉬를 생성하는데 사용되며, 소스 메쉬에 다른 셰이더를 사용하는 여러 메테리얼이 있는 경우 유용합니다.

 

예를 들어, 나무의 경우 줄기와 잎을 구분해서 셰이더를 작성하는 경우가 있는데 이런 경우를 뜻합니다.


출처 - https://www.youtube.com/watch?v=Xj7hdoKOnKg / "Atlas Padding"

"Atlas Padding"은 텍스처 주변의 테두리로 원하는 픽셀의 수를 뜻합니다. 최소한 1개 이상의 아틀라스 패딩을 가지는 것을 추천합니다.

 

"Max Altas Size"는 아틀라스 크기를 제한하는 수치입니다. 이 숫자는 2의 거듭 제곱이어야 합니다.


출처 - https://www.youtube.com/watch?v=Xj7hdoKOnKg / "Resize Power of Two Textures"/ 아틀라스를 효율적으로 관리할 수 있다 

"Resize Power of Two Textures"는 텍스처를 아틀라스에 추가 하기 전에 아틀라스 패딩으로 축소하는 기능을 뜻합니다.

 

Resize Power of Two Textures는 소스 텍스처가 2의 거듭 제곱일 때 효율적으로 압축되는 아틀라스를 만드는데 도움이 됩니다.

 

"Max Tiling Bake Size"는 결합된 텍스처에 구울 수 있는 최대 타일링의 사이즈를 설정하는 수치입니다.


출처 - https://www.youtube.com/watch?v=Xj7hdoKOnKg / "Condiser Mesh UVs"

"Condiser Mesh UVs" 는 메쉬베이커가 소스 메시에서 사용하는 UV 레이아웃을 확인하고 UV에서 사용하는 텍스처 부분만 복사하는 옵션입니다. 입력오브젝트가 텍스처의 작은 영역만 사용하는 경우 해당 작은 영역만 아틀라스에 추가되거나 입력이 타일링 경계를 벗어난 UV를 사용하는 경우에 타일링이 아틀라스에 베이크 됨

 

"Force Power Of Two" 는 출력 크기를 2의 거듭 제곱으로 조정하는 옵션입니다. 

"Blend Non Texture Properties"는 알베도 텍스처가 없는 경우에도 다른 색를 사용하는 메시를 결합할 수 있게 해주는 옵션입니다.


Open Tools For Adding Objects를 이용한 빠른 오브젝트 추가

위 내용부터는 2편에서 설명하겠습니다.