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, 현재 설정값 등을 실시간으로 확인할 수 있는 인터페이스를 제공합니다.