Skip to content

Volume Octree Module

개요

Volume Octree 모듈은 3D 공간을 효율적으로 분할하여 데이터를 관리하기 위한 옥트리 시스템입니다. 대규모 공간의 데이터를 청크 단위로 나누어 최적화된 저장을 지원합니다.

주요 구성 요소

  • VolumeOctree: 단일 옥트리 구조로, 제네릭 데이터 T(unmanaged)를 노드에 저장합니다. 내부는 NativeList<Node> 기반이며 루트에서 시작하여 maxDepth까지 분할됩니다.
  • VolumeOctreeChunks: 월드 공간을 origin, chunkSize 기준으로 청크로 나누어 여러 옥트리를 통합 관리합니다. Morton Key 인코딩을 통해 고속 검색을 지원합니다.
  • VolumeOctreeHost: 유니티 컴포넌트로, 옥트리의 원점, 청크 크기, 깊이 등을 설정하고 에디터 인터페이스를 제공합니다.

상세 동작 원리

데이터 구조 및 탐색

  • 공간 분할: Set(point, value) 호출 시 포인트가 루트 바운드 안에 있는지 확인하고, 깊이만큼 내려가며 필요한 자식 노드를 동적으로 생성합니다.
  • 효율적 조회: TryGet(point, out value)를 통해 존재하는 자식 경로만 따라가며 리프 노드의 값을 반환합니다.

청크 시스템

  • 월드 좌표를 기반으로 int3 청크 키를 생성하고, 필요한 경우에만 옥트리 청크를 생성하여 메모리를 절약합니다.
  • MortonKey.Encode를 사용하여 3차원 인덱스를 정수 키로 변환하여 효율적으로 관리합니다.

에디터 기능

  • OctreeTool: 씬 뷰에서 핸들을 사용하여 옥트리의 원점을 직관적으로 편집할 수 있습니다.
  • 시각화 (OctreeView): 씬 뷰 오버레이를 통해 Chunks, Roots, 현재 설정값 등을 실시간으로 확인할 수 있는 인터페이스를 제공합니다.