데브허브 | DEVHUB | Asset streaming in Valheim | Unite 2025Asset streaming in Valheim | Unite 2025
- Valheim은 지속적인 콘텐츠 추가로 인해 메모리 사용량과 로드 시간이 증가하여 Xbox One의 하드 메모리 한계에 도달했습니다. 🎮
- 이 문제를 해결하기 위해 애셋 스트리밍을 구현하여 게임의 기본 메모리 사용량을 38% 절감하고 Ashlands 업데이트를 성공적으로 출시할 수 있었습니다. 🚀
- 소프트 레퍼런스는 애셋을 명시적으로 로드/언로드해야 하며, 세밀한 제어가 가능하지만 관리가 복잡하고 필요한 시점을 미리 알아야 합니다. 💡
- 하드 레퍼런스는 참조하는 객체가 로드될 때 함께 로드되어 사용이 편리하지만, 필요하지 않은 애셋도 로드될 수 있어 메모리 낭비의 가능성이 있습니다. 🔗
- Unity의 기본 애셋 관리 방식은 대부분 하드 레퍼런스를 사용하며, 씬 전환 시에만 애셋이 로드/언로드되어 Valheim과 같은 오픈월드 게임에는 부적합했습니다. 🌍
- 애셋 스트리밍은 게임 플레이를 방해하지 않고 소프트 레퍼런스 애셋을 동적으로 로드/언로드하는 기술로, 오픈월드 게임에 필수적입니다. 🔄
- 애셋 스트리밍에 적합한 애셋은 필요한 시점을 미리 알 수 있고, 대부분의 시간 동안 필요하지 않으며, 고유하고 메모리를 많이 차지하는 콘텐츠여야 합니다. ✅
- Valheim에서는 '위치(Locations)'와 '방(Rooms)'이 애셋 스트리밍의 좋은 후보였는데, 플레이어 근접성에 따라 스폰되어 미리 로드할 수 있고, 동시에 소수만 활성화되며, 메모리 집약적이기 때문입니다. 🏘️
- 초기 애셋 스트리밍 구현은 Addressables를 사용했지만, 프로파일링 결과 중복 애셋으로 인한 메모리 낭비가 발견되었습니다. 📉
- Addressables는 AssetBundles의 추상화 계층이며, AssetBundles에는 Addressables가 완전히 해결하지 못하는 기술적 특성(quirks)이 있습니다. 📦
- 암시적 애셋(Implicit Assets) 문제는 명시적으로 AssetBundle에 포함되지 않은 종속성 애셋이 이를 참조하는 각 AssetBundle에 복사되어 디스크 공간 낭비와 RAM 내 중복을 유발하는 것입니다. 👯
- 이 문제의 해결책은 모든 종속성 애셋을 별도의 AssetBundle로 명시적으로 그룹화하여 중복 로드를 방지하는 것입니다. 🧩
- AssetBundles의 언로드 제한은 개별 애셋을 언로드하는 메커니즘이 없다는 점입니다.
Resources.UnloadUnusedAssets는 모든 사용되지 않는 애셋을 언로드하여 너무 광범위하고 성능 문제를 일으킬 수 있습니다. 🗑️