Mesh LOD
Unity Technologies
서론
기본적으로 블로그에 Pixyz를 활용해서 LOD 생성하는 방법을 직간접적으로 여러번 노출하였습니다.
이번 유니티 6.2에는 Mesh LOD 기능이 들어가 있는데 기존 Pixyz로 LOD Group하는 것과 어떻게 다른지 알아보고자 합니다.
Pixyz의 Generate LOD Chain을 활용하면 모델의 LOD Group을 생성할 수 있습니다.
Generate LOD Chain
www.pixyz-software.com
대표적으로 Pixyz SDK를 같이 활용하면 서버 역할과 같이 어떠한 CAD 데이터를 받으면 폴리곤으로 변환하고 원점 및 bounce 데이터를 조절하고, 스케일 수정 등 다양한 작업을 자동화 할 수 있습니다. 이 중 마지막 단계에서 LOD Chain 기능을 활용하여 LOD Group을 만들 수 있습니다.
만들고 나면 왼쪽 처럼 Pixyz에서 처리한 공식 샘플의 경우 유니티로 가져오면 바로 LOD가 적용되는 것을 확인할 수 있습니다.
우측의 경우 fbx로 export하여 원본과 같은 개념으로 사용했습니다.
다만 이 경우 아래와 같이 LOD Chain이 포함될 경우 여러 버전의 LOD가 포함됨으로 메모리가 증가하게 됩니다.
아무래도 이렇다보니 배포할 때 부담이 되는 것이 사실입니다.
따라서 배포용 파일의 크기를 고려해서 LOD를 나눈다던지 여러 방안이 필요했습니다.
본론
유니티 6.2에서 Mesh LOD가 기능이 출시되면서 새로운 방법으로 접근할 수 있게 되었습니다.
자세한 내용은 Mesh LOD 2025 공식 포럼에서 확인할 수 있습니다. 우선 가장 좋아보이는 내용으로는 기존의 LOD Chain의 경우 3개의 LOD를 만들었다고 하면 하이어리키에 3개의 LOD가 나오고 런타임에서 각각의 상황에 맞춰서 각 lod를 active 또는 deactiave 하는 방식으로 진행되었습니다.
즉, N개의 Renderer에 N개의 Mesh가 할당되어 있는 방식으로 이러한 방식은 성능에 악영향을 미치는 요소였습니다.
물론, 그러한 악 영향 보다 최적화적 관점에서 이득이 되어서 사용하긴 했지만...
위와 같이 관련 내용은 포럼에도 기재되어 있습니다.
하나 의아한 점이 LOD Chain의 경우 증가한 용량을 파일 탐색기에서 쉽게 확인할 수 있는데 mesh lod는 생성 후 생성된 것을 확인했음에도 이러한 부분이 탐색기에서 확인할 수 없었습니다.
정상적으로 LOD가 적용되었지만 아래와 같이 용량은 원본 파일과 동일합니다...
- 간단하게 확인할 수 있는 방법은 Asset Bundle로 만들었을 때 용량 확인
- 만들어진 Asset Bundle에서 실제 LOD가 적용되는지?
이렇게 확인해볼 수 있을 것 같습니다.
구분 | Mesh LOD | LOD Chain |
원본 | 3935kb | 12471kb |
Asset Bundle | 921kb (원본대비 23.4%) | 2469kb (원본 대비 19.7%) |
애초에 Mesh에 variants를 저장하는 개념이라 그런지... 매우 가볍네요
간단하게 Asset Bundle을 만들어서 테스트해보았습니다. 우선 기본 LOD Chain입니다.
당연히 정상적으로 잘 작동합니다. LOD 3영역에서 34.7k의 tris을 볼 수 있습니다.
마찬가지로 Mesh LOD 창도 나타나고 잘 작동합니다.
그럼 마지막으로 mesh LOD를 키지 않은 상태에서는 Asset Bundle이 어느정도의 크기를 갖는지 알아보도록 하겠습니다.
마찬가지로 prefab으로 만들고 read/write만 켜준 상태에서 generate mesh LOD는 disable 하였습니다.
LOD를 3단계로 했을 때 747kb가 나오네요 결론을 다음과 같습니다.
결론
구분 | Mesh LOD | LOD Chain | Original Mesh |
원본 (파일 탐색기 기준) | 3935kb | 12471kb | 3935kb |
Asset Bundle | 921kb (원본대비 23.4%) | 2469kb (원본 대비 19.7%) | 747kb (원본대비 18.9%) |
Mesh LOD의 경우 탐색기에 표시가 안되서 Asset Bundle로 변환할 때 다소 덜 압축 되는 것 처럼 보이는 것 같습니다.
하지만 기본적으로 LOD Chain 대비 훨씬 메모리가 간소화 되기 때문에 충분히 사용할 가치가 있는 것 같습니다.
다만 한가지 의아한 점이 이거 Culling 지원 한다는 내용이 공식 문서 및 포럼 어디에도 없는데...카메라 속도를 높여서 Zoom out을 해도 아예 culled 되지는 않네요... 이거 이러면 쓸 수 있는건가... 작은 오브젝트가 많은 프로젝트의 경우 오히려 안좋을 수도...
댓글