Mesh 최적화

반응형

5.5.1p3 기준


하나씩 테스트를 해 보자.

Mesh Compression : 이 값을 높이면 메쉬 파일 크기가 줄어든다.

실제로 어떻게 차이가 나는건지 테스트 해 보자.

Mesh Compression : Off



Mesh Compression : High


뭔가 모습이 좀 달라진거 같기도 하고 아닌거 같기도 하고...

겹쳐서 보면 좀 움찔움찔 바뀌는 것 같음.


버텍스 갯수라던지 파일의 용량은 1도 안 줄어들었음.. 뭘까 분명 줄어든다고 했는데...

그런데 모양은 바뀐단 말이지....

여기 링크를 읽어보면 이렇게 적혀 있다.


"게임 파일에서 적은 공간을 차지하도록 메쉬와 임포트된 애니메이션 클립을 압축할 수 있다.

메쉬압축을 하려면, 메쉬를 선택 후 인스펙터에 있는 Mesh Compression을 Low, Medium 또는 High로 설정해라

메쉬와 애니메이션 압축은 양자화를 사용는데 이 말인 즉슨, 압축을 사용하면 공간은 덜 차지하지만

부정확성이 생길 수 있다는 것이다.

압축을 사용하고자 하는 모델에 어느정도 압축이 적합한지 테스트 해 봐라.

메쉬 압축은 단지 좀 더 작은 데이터 파일만 만들어 낼 뿐 실행시간에 더 적은 메모리를 사용하지는 않는다는 것을 알아야 한다.

애니메이션 키프레임 감소는 실행시간에 좀 더 작은 데이터 파일과 더 적은 메모리를 사용한다.

일반적으로 항상 이 기능을 켜둬라."


으잉? 데이터파일은 작아졋는데 메모리는 줄어들지 않는다고? 흐음...좀 이상하네.

아래 유니티 포럼에서 댓글을 좀 모아서 정리하자면 아래와 같다.


"이 기능은 실제로는 렌더링이나 메모리를 위한 기능이 아니라 게임 빌드 용량을 위한 기능이라고 봐야할듯하다.

즉, mesh 압축은 더 작은 메시로 만드는게 아니라 꼭지점/ 겹침 선을 제거한다.

메쉬 데이터를 저장하는 정밀도를 줄여 공간을 절약한다.

하지만, 메쉬 렌더링이 끝나면 이전과 같은 복잡성을 가지며 정확도는 약간 떨어진다.

그래서 파일 용량은 줄어들지만 렌더링시 퍼포먼스적인 그다지 이슈는 없다.


실제로 메쉬압축을 끄고 빌드한 경우 2.74메가, High로 한 경우 2.70메가가 나왔다.

우선 유니티 도큐먼트에서 말했던 더 작은 데이터 파일을 만들어 낸다는 말은 맞는말!! 

근디 좀 더 확확 해주지 0.04메가 줄다니..ㅜㅜ.


혹시나 해서 프로파일러로 메모리에 올라가는 크기를 찍어봤다.

메쉬 압축 Off : 349.3, 메쉬 압축 High : 248.2 가 나왔다.

메모리는 안 준다더니 줄어들었네??

물론 이건 위에서 만든 번들로 실행한게 아닌 로컬파일로 실행한 거긴 하지만 머 같지 않을까...


찜찜한 기분에 번들로 체크를 해 봤다.

메쉬 압축 Off : 349.3 메쉬 압축 High : 248.2

그래도 줄어들었다.


혹시나 해서 프레임 디버그로 정점갯수도 찍어봤지만 메쉬 압축을 Off로 하든 High로 하든 결과는 같았다.

그래서 내가 테스트 한 결과는 아래와 같다.

메쉬 압축 Off : 파일 용량(2.74 MB), 메모리(349.3 KB)

메쉬 압축 High : 파일 용량(2.70 MB), 메모리(248.2 KB)

테스트 환경 : pc, assetbundle. 유니티 프로파일러, 유니티 프레임 디버거 사용.


유니티 도큐먼트랑은 결과가 조금 다르게 나왔다.

내가 해석을 잘못 한걸까? ㅜㅜ.

유닛히에게 문의 좀 해봐야겠다.

(실제 테스트는 위 사진처럼 유니티의 예제 모델이 아닌 프로젝트 모델로 하였지만

글을 공개로바꾸기 위해 유니티 모델 사진으로 수정했슴.)


Read/Write Enabled : 런타임에 mesh 쓰기가 가능하도록 메모리에 복사본이 생성한다.

이 옵션을 끄면 유니티가 게임의 mesh 데이터를 언로드 할수 있기 때문에 메모리가 절약된다.

하지만 런타임에 비균등 스케일로 메쉬를 스케일링 또는 인스턴스화 하면 이 기능을 켜야하는 경우가 많다.

비균등 스케일링은 mesh 데이터를 메모리에 유지해야 하기 때문이다.

런타임에 MeshColliders를 만들고자 할 경우에도 마찬가지이다.


Optimize Mesh : 메쉬의 삼각형 순서를 결정한다.

이 기능을 사용하면 메쉬가 더 빨리 디스플레이 되며 로드시간이 줄어든다.

내부적으로 정점 캐시 영역에 대한 삼각형을 최적화 한다.


Import BlendShapes : 모프타겟 또는 정점 애니메이션.

자세한 내용은 이곳을 참고하자.

안쓰면 꺼두자. 


Normal & Tangents : Normal의 계산여부

이 옵션을 None으로 하면 게임크기가 줄어들고 Tangents 기능이 자동으로 꺼진다.

Import가 기본옵션이며 파일에서 법선을 임포트 한다.

Calculate는 Smoothing angle에 따라 법선을 계산한다.

None은 법선을 해제하므로 메시가 매핑된 법선을 사용하거나 실시간 라이팅의 영향을

받고 있는 법선인 경우는 사용하면 안된다.

쓰지않으면 None으로 설정하자.


Tangents : 탄젠트와 종법선 계산여부.

이 옵션은 위의 Normal & Tangents의 하위옵션이다.

Import는 파일에서 탄젠트와 종법선을 가져온다.

Calculate는 탄젠트와 종법선을 해제한다.

None은 탄젠트와 종법선을 해제하는데 메쉬에는 탄젠트가 없기에 법선매핑 셰이더로 사용할 수 없다.

쓰지않으면 None으로 설정하자.


Reference Link

- Mesh compression - what does it actually do?

- Does mesh compression increase performance of Unity3D games?

- Reducing the file size of your build

- Mesh

- Model

- Animation BlendShapes

-

'Optimizing > Unity' 카테고리의 다른 글

MaterialPropertyBlock  (2) 2017.06.27
Dynamic Batching이 효율적일까?  (0) 2017.03.31
유니티 텍스처  (0) 2017.03.22
animation 최적화  (0) 2017.03.04
유니티에서의 메모리 관리.  (0) 2017.01.13
TAGS.

Comments