진우의 혼잣말하는 블로그

유니티 일기 Day1 - # Asset Streaming 방식에 대해서

by VR하는소년
 

GitHub - oculus-samples/Unity-AssetStreaming: Oculus asset streaming showcase demonstrating how to use asset streaming when navi

Oculus asset streaming showcase demonstrating how to use asset streaming when navigating open world project while using different level of details. This sample also demonstrates how to use the Unit...

github.com

오늘은 Meta Sample 중 하나인 Asset Streaming 에 대해 공부해보았다.

 

왜 Asset Streaming을 공부하냐?

나는 다음과 같은 이유로 공부를 진행했다.

  1. Memory 최적화
  2. Open World 제작

 

지금 진행중인 VR프로젝트는 스토리텔링형 어드벤처 장르이다. 맵이 넓다보니 한 번에 많은 리소스가 Load되는데, 그러한 문제를 해결해야 한다.

 

Asset Streaming

프로젝트를 열고 플레이 해보면 위와 같이 객체들이 색칠되는 것을 볼 수 있다.

 

  • 연두색이 LOD 0 - 가장 가까이 보이는 부분
  • 하늘색이 LOD 1 - 중간 부분
  • 핑크색이 LOD 2 - 가장 멀리 보이는 부분

Scene Streaming 방식

특정 구역에 도달하면 Scene이 Load되고 벗어나면 Scene이 UnLoad되어서 메모리 아낄 수 있다.

이런식으로 Scene을 Load/UnLoad 하는 Streaming 기법인데, Scene에 엄청나게 많이 들어가 있는게 아니라 저렇게 건물 하나씩 Mapping되어 있다.

 

핵심 스크립트는 다음과 같았다.

1) LODManager

  • 역할: 카메라 위치 기준으로 어떤 셀을 LOD2/1/0으로 보여줄지 결정하고, Scene Load/Unload를 Queue로 관리해서 스파이크 없이 처리.
  • 핵심
    • 충분히 움직였을 때만(약 1m) LOD 재계산 → 불필요한 매 프레임 부담 없음.
    • 셀 단위(격자) + Quad Tree로, 먼 곳은 부모(거친 LOD)만 쓰고 가까운 곳만 자식(상세 LOD)으로 파고듦.

2) LODTreeNode

  • 역할: Quad Tree의 각 Cell 노드.
    • Enum State: Unloaded(안 보이고 메모리 없음) / Loaded(안 보이지만 메모리 있음) / Enabled(보이는 상태)
    • Addressables 씬을 로드/언로드(비동기)
  • 핵심
    • 로드/언로드를 큐로 직렬화 → 레이스 컨디션·이중 표시 방지.
    • 언로드 시 실제 원본 sharedMesh를 넘겨 메모리 회수까지 연결.

블로그의 정보

진우의 혼잣말하는 블로그

VR하는소년

활동하기