[Blender] Collection Instancing을 통한 최적화

2024. 7. 5. 18:39Blender

728x90
반응형

Blender에서 같은 오브젝트를 여러 개 사용할 때 같은 메쉬와 메테리얼을 공유한다면 [Shift + D]로 복제하는 방법이 있다.

유니티의 프리팹 개념처럼 Instancing을 해서 사용하는 방법은 없을까 고민했다. 역시나 Blender에도 해당 기능은 있었고 이 기능을 정리해보고자 한다.

 

 


 

 

아래의 유튜브 영상을 참고하였다.

 

 

먼저, 내가 하나의 묶음으로 어떤 오브젝트를 계속 쓰고 싶다면, 하나의 Collection 안에 해당 오브젝트가 들어있어야 한다.

나는 요즘 사용하고 있는 3D 모델 공유 사이트인 https://www.cgtrader.com/ 페이지에서 일부러 더 복잡한 모델을 사용해보았다.

 

CGTrader - 3D Model Store

Join the fastest-growing 3D model marketplace today!

www.cgtrader.com

 

HAMBURGER | CGTrader

 

www.cgtrader.com

 

50만 폴리 햄버거!

 

Collection 안에는 햄버거의 모든 내용물이 들어있다.

 

우측 하단에서 현재 메모리는 114.3MB를 차지하는 것도 볼 수 있다.

 

메모리 확인은 우측 하단 검은 부분에 마우스 우클릭을 누른 후 [System Memory]를 선택하면 된다.

 

glb로 export 했을 때는 7.34MB 용량을 차지한다. (glb에서 지원하지 않는 셰이더 계산으로, 텍스쳐가 불러와지지는 않았다. 이미지 텍스쳐를 쓴 토마토와 단순 이미지가 들어간 치즈만 제대로 전달되었다)

 

fbx로는 8.5MB의 크기로 저장되었다. (여기도 메테리얼 전달이 안되는 듯)

 


 

Instancing 하기

Collection에 들어있는 모든 에셋들을 한 번에 Instancing 할 수 있다. 총 세가지 방법으로.

1. Collection 위에 마우스 오른쪽 버튼 클릭 후 [Instance to Scene] 클릭

 

2. 새로운 Collection을 하나 만들고, [Shift + A] 단축키로 [Collection Instance] Instancing 하기. 이때 선택해야 하는 Collection은 내가 Instancing하고 싶은 오브젝트가 들어있는 Collection 이여야 한다. Instance 된 오브젝트는 자동으로 새로 만든 [New] Collection에 들어간다.

 

3. 위쪽 탭에서 [Add] - [Collection Instance] 메뉴를 이용한 Instance. 이때도 마찬가지로 내가 Instancing 하고자 하는 Collection을 선택해야 한다.

 


 

Instance와 Duplicate 비교

이렇게 Instanced 된 오브젝트는 그냥 Duplicate 한 오브젝트보다 얼마나 최적화가 되었을까

4개의 복제품과 1개의 원본으로 총 5개 햄버거의 용량과 메모리를 비교해보자.

 

Duplicated

메모리 : 232.9MB

fbx 용량 : 42.3MB

glb 용량 : 24.0MB

 

 

Instanced

메모리 : 121.4MB

fbx 용량 : 9.42MB

glb 용량 : 6.64MB

 

 

놀랍게도 메모리 뿐 아니라 export 된 파일의 용량도 큰 차이를 보였다. 오브젝트를 복사해서 많이 쓴다면 필수로 사용해야할 것 같다.

 


 

Instance 된 오브젝트의 특성

원본의 Physics, Animation, Particle System, Modifier를 그대로 가져올 수 있다.

햄버거 빵 위의 깨는 이미 Particle로 만들어졌다. 주의할 점은 Particle System의 경우 Object를 렌더하는 경우에만 해당된다.

 

물론 원본의 TRS(Transform, Rotation, Scale)도 그대로 따라간다. 마치 유니티의 프리팹처럼.

Instance 된 오브젝트는 전체에 대한 TRS 변경을 지원한다. 즉, 패티, 치즈, 빵만 바꿀 수는 없다. 햄버거 전체에 대한 이동, 크기 조절이 된다는 뜻.

 


 

Instance를 해제하는 방법

연결되어있는 Instance를 해제하기 위해서는 해당 Instance를 선택한 후 [Layout] - [Apply] - [Make Instances Real]을 누른다.
또는 해당 Instance를 선택한 후 [Ctrl + A]로 [Make Instances Real] 를 찾아 누르면 된다.

[Ctrl + A] 단축키 사용

 

 

Instance가 해제가 되면 이제 각각의 오브젝트를 움직이거나 지울 수 있다. Hierarchy 상에서도 분리된 오브젝트들을 볼 수 있다.

 

주의할 점은 Particle System으로 생성된 오브젝트들 또한 각각의 오브젝트로 인식된다는 점이다.

 

또 하나 더 주의할 점은 [Edit] 모드에서는 수정하면 다른 객체들도 수정된다는 점. 링크가 아직 남아있다.

 

이 부분까지도 링크를 끊고 싶다면 [Object] - [Relations] - [Make Single User] - [Object & Data]를 누른다.

 

이제 완벽하게 링크가 해제되었다.

728x90
반응형