Booil Jung

i-Octree

3차원 공간에 분포하는 데이터를 효율적으로 관리하고 질의하는 기술은 현대 컴퓨터 과학의 여러 분야에서 핵심적인 과제로 자리 잡았다. 컴퓨터 그래픽스, 물리 기반 시뮬레이션, 로봇 공학, 지리 정보 시스템(GIS), 가상현실 등 방대한 양의 3차원 데이터를 다루는 응용 분야에서는 데이터의 공간적 관계를 신속하게 파악하는 능력이 시스템 전체의 성능을 좌우한다.1 이러한 문제에 대한 가장 근본적이고 강력한 해결책 중 하나가 바로 공간 분할(Spatial Partitioning) 기법이며, 그중에서도 옥트리(Octree)는 3차원 공간을 위한 가장 대표적인 계층적 자료구조로 널리 활용되어 왔다.3 옥트리는 주어진 3차원 공간을 재귀적으로 8개의 균등한 부분 공간(옥턴트)으로 분할하여, 데이터의 밀도에 따라 공간을 적응적으로 세분화한다. 이 계층적 구조는 특정 영역 내의 데이터를 빠르게 찾거나, 객체 간의 충돌을 효율적으로 감지하는 등 다양한 공간 질의(Spatial Query)를 가속하는 데 탁월한 성능을 보인다.

전통적인 옥트리 구현은 주로 정적인(static) 환경을 가정하고 설계되었다. 3D 모델링, CAD, 또는 한 번 구축된 게임 월드와 같이 데이터의 변화가 없거나 드문 경우, 초기에 옥트리를 구축하는 비용은 전체 수명 주기 동안 얻는 검색 효율성에 의해 충분히 상쇄될 수 있었다. 그러나 기술이 발전함에 따라 데이터의 성격은 점차 동적으로 변모하였다. 특히 실시간 물리 시뮬레이션이나 인터랙티브 가상 환경에서는 객체들이 끊임없이 이동하고, 생성되며, 소멸한다. 이러한 동적 환경에서 전통적인 옥트리 구조는 심각한 한계에 부딪힌다. 객체의 위치가 변경될 때마다 영향을 받는 노드를 찾아 업데이트해야 하며, 많은 수의 객체가 동시에 움직일 경우 트리 구조의 유효성을 유지하기 위해 전체 트리를 폐기하고 새로 구축하는 ‘Trash and Rebuild’ 방식이 불가피해진다.5 이 재구축 과정은 막대한 계산 비용을 수반하며, 실시간 응용 프로그램에서 심각한 성능 저하, 즉 병목 현상을 유발하는 주된 원인이 된다.

이러한 동적 환경의 요구는 특히 로봇 공학 및 자율 주행 분야에서 폭발적으로 증가했다. LiDAR(Light Detection and Ranging) 센서는 초당 수십만에서 수백만 개에 이르는 3차원 포인트 클라우드 데이터를 실시간으로 생성하며, 로봇은 이 데이터를 바탕으로 주변 환경을 인식하고 자신의 위치를 추정하며 경로를 계획해야 한다(SLAM, Simultaneous Localization and Mapping).7 이러한 시나리오에서는 매 순간 쏟아지는 방대한 양의 데이터를 기존에 구축된 맵에 ‘증분적으로(incrementally)’ 통합하고, 동시에 새로운 데이터와 기존 맵 데이터 간의 연관성을 찾기 위한 ‘최근접 이웃 탐색(Nearest Neighbor Search, NNS)’을 초고속으로 수행해야 하는 이중의 과제가 발생한다.8 전통적인 옥트리의 재구축 방식은 이러한 실시간 요구사항을 도저히 만족시킬 수 없었다. 이와 같은 기술적 공백과 시대적 요구에 부응하여 등장한 것이 바로 동적 환경에 최적화된 옥트리 변종인 i-Octree이다. i-Octree는 데이터의 실시간 증분 업데이트와 빠른 공간 질의라는 두 마리 토끼를 모두 잡기 위해 설계된 진보된 자료구조다. 본 보고서는 바로 이 i-Octree의 설계 철학부터 수학적 기반, 핵심 구현 알고리즘, 그리고 객관적인 성능 분석에 이르기까지, 그 기술적 본질을 심층적으로 탐구하고 고찰하는 것을 목표로 한다. 이를 통해 정적 데이터 구조의 패러다임을 넘어, 동적인 실제 세계의 데이터를 실시간으로 다루기 위한 공간 분할 기술의 진화를 조망하고자 한다.

옥트리는 3차원 공간을 효율적으로 표현하고 관리하기 위한 근간이 되는 자료구조로서, 그 구조와 동작 원리를 이해하는 것은 i-Octree와 같은 고급 변종을 파악하기 위한 필수적인 선행 과정이다. 본 장에서는 옥트리의 수학적 정의, 핵심 구성 요소, 그리고 기본적인 분할 메커니즘에 대해 상세히 기술한다.

옥트리의 가장 핵심적인 개념은 ‘계층적 재귀 분할’이다. 수학적으로 옥트리는 각 내부 노드(internal node)가 정확히 8개의 자식 노드(child node)를 갖는 트리 자료구조로 정의된다.3 이는 2차원 평면을 4개의 사분면(quadrant)으로 나누는 쿼드트리(Quadtree)를 3차원 공간으로 자연스럽게 확장한 개념이다.3

분할 과정은 루트 노드(root node)에서 시작된다. 루트 노드는 분석하고자 하는 전체 3차원 공간, 예를 들어 정육면체 형태의 경계 상자(Bounding Box)를 나타낸다. 이 공간은 공간의 중심을 지나는 세 개의 축(x, y, z)에 평행한 평면에 의해 8개의 동일한 크기의 부분 공간으로 분할된다. 이 8개의 부분 공간을 옥턴트(Octant)라 칭하며, 각각은 루트 노드의 8개 자식 노드에 해당한다.2 이어서 각 자식 노드는 자신이 나타내는 부분 공간에 대해 동일한 분할 규칙을 재귀적으로 적용한다. 즉, 자신의 공간을 다시 8개의 옥턴트로 나누고, 이를 위한 새로운 8개의 자식 노드를 생성한다. 이 과정은 특정 종료 조건이 충족될 때까지 반복되며, 결과적으로 데이터가 밀집된 영역은 깊은 레벨까지 세밀하게 분할되고, 데이터가 희소하거나 없는 영역은 더 이상 분할되지 않은 채 큰 노드로 남게 되는 적응적(adaptive) 공간 분할 구조를 형성한다. 이러한 계층적 표현 방식은 방대한 3차원 공간을 관리 가능한 단위로 나누어 효율적인 탐색과 연산을 가능하게 하는 옥트리의 근본적인 힘이 된다.

옥트리를 정확히 이해하기 위해 사용되는 몇 가지 핵심 용어의 정의는 다음과 같다.

옥트리의 구축은 일반적으로 루트 노드에서 시작하여 아래로 내려가는 Top-down 방식으로 진행된다.4 이 재귀적인 분할 과정은 무한히 계속될 수 없으므로, 반드시 분할을 멈추는 종료 조건(Termination Condition)이 필요하다. 이 조건은 옥트리의 세밀도와 메모리 사용량 사이의 균형을 결정하는 중요한 요소이며, 응용 분야의 요구사항에 따라 다양하게 설정될 수 있다. 대표적인 종료 조건은 다음과 같다.3

이러한 조건들을 어떻게 조합하고 설정하는가는 옥트리 성능 최적화의 핵심이다. 예를 들어, 정밀한 충돌 감지가 필요한 게임 환경에서는 최소 노드 크기를 작게 설정할 수 있고, 대규모 포인트 클라우드 시각화에서는 최대 깊이를 제한하여 메모리 사용량을 조절할 수 있다. 이처럼 종료 조건의 선택은 옥트리가 특정 문제 영역에 얼마나 잘 적응하는지를 결정하는 근본적인 설계 결정 사항이다.

옥트리는 분할 기준점에 따라 크게 두 가지 유형으로 나눌 수 있다. 이는 노드가 데이터를 저장하고 공간을 분할하는 방식에 근본적인 차이를 만든다.3

이러한 옥트리는 다른 공간 분할 자료구조와도 비교될 수 있다. 특히 k-d 트리(k-d tree)와의 차이점은 명확히 이해할 필요가 있다. k-d 트리는 각 레벨에서 하나의 차원(x, y, 또는 z)을 선택하여 해당 축에 수직인 평면으로 공간을 이진 분할한다. 반면, 옥트리는 특정 ‘점’(주로 공간의 중심)을 기준으로 세 개의 평면을 동시에 사용하여 공간을 8분할한다. 또한, k-d 트리는 항상 이진 트리(binary tree)이지만 옥트리는 8진 트리(8-ary tree)라는 구조적 차이가 있다.3 이러한 분할 방식의 차이는 각 자료구조의 성능 특성과 적합한 응용 분야를 결정하는 중요한 요인이 된다.

전통적인 옥트리 구현은 트리 구조를 명시적으로 표현하기 위해 포인터(pointer)를 사용한다. 그러나 이러한 방식은 대규모 데이터를 처리하거나 고성능 컴퓨팅 환경으로 확장될 때 여러 가지 한계점을 드러낸다. 본 장에서는 포인터 기반 표현법의 문제점을 분석하고, 이를 극복하기 위해 등장한 포인터리스(pointerless) 표현법, 특히 선형 옥트리와 그 핵심 기술인 모튼 코드에 대해 심층적으로 다룬다.

전통적인 옥트리 노드 구조는 일반적으로 자신이 표현하는 공간의 경계 상자 정보와 8개의 자식 노드를 가리키는 포인터 배열을 포함한다.12 이 직관적인 구조는 구현이 비교적 간단하지만 다음과 같은 근본적인 문제점을 내포한다.

이러한 한계는 옥트리를 대규모 병렬 처리 환경, 특히 GPU와 같은 아키텍처에 적용하는 것을 어렵게 만든다. GPU는 포인터를 이용한 복잡한 자료구조의 순회에 비효율적이며, 방대한 양의 데이터를 병렬로 처리하기 위해서는 데이터가 연속적인 메모리 블록에 배치되는 것이 절대적으로 유리하다.

포인터 기반 표현법의 한계를 극복하기 위해 제안된 것이 포인터리스 표현법이다. 이 접근법의 핵심 아이디어는 노드 간의 부모-자식 관계와 같은 구조적 정보를 명시적인 포인터로 저장하는 대신, 각 노드에 부여된 고유한 위치 코드(Locational Code) 또는 키(key)를 통해 암시적으로 계산하고 유도하는 것이다.12

이러한 포인터리스 개념을 극대화한 대표적인 구조가 바로 선형 옥트리(Linear Octree)이다.13 선형 옥트리는 트리의 전체 구조, 특히 중간 단계에 해당하는 내부 노드들을 명시적으로 저장하지 않는다. 대신, 데이터가 실제로 존재하는 단말 노드(leaf node)들만을 그들의 위치 코드를 기준으로 정렬하여 하나의 거대한 배열과 같은 연속적인 메모리 공간에 저장한다.10

이 방식은 다음과 같은 혁신적인 장점을 제공한다.

선형 옥트리의 효율성은 전적으로 위치 코드를 얼마나 효율적으로 생성하고, 이 코드를 통해 트리 관계를 얼마나 빠르게 계산할 수 있느냐에 달려있다. 이를 위해 가장 널리 사용되는 기술이 바로 모튼 코드이다.

모튼 코드(Morton Code), 또는 Z-순서 곡선(Z-order Curve)은 다차원 데이터를 1차원으로 매핑하면서 원본 데이터의 공간적 지역성(spatial locality)을 최대한 보존하는 강력한 기법이다.17 즉, 3차원 공간에서 서로 가까이 위치한 점들은 모튼 코드로 변환된 1차원 값에서도 높은 확률로 서로 가까운 값을 갖게 된다.19 이 특성이 선형 옥트리를 가능하게 하는 핵심 원리이다.

모튼 코드의 생성 원리는 비트 인터리빙(bit interleaving)이다. 3차원 좌표 $(x, y, z)$가 주어졌을 때, 각 좌표값을 이진수로 표현한 뒤, 각 자리의 비트들을 순서대로 번갈아 가며 엮어 하나의 긴 이진수를 만든다.20 예를 들어, 3비트로 표현된 좌표 $(x, y, z) = (x_2x_1x_0, y_2y_1y_0, z_2z_1z_0)$가 있다면, 모튼 코드는 z2y2x2z1y1x1z0y0x0 와 같이 생성된다.

수학적으로, 3차원 단위 정육면체 내의 한 점 $P = (x, y, z)$의 좌표가 다음과 같이 이진 소수로 표현된다고 가정하자. \(x = \sum_{i=1}^{\infty} x_i 2^{-i}, \quad y = \sum_{i=1}^{\infty} y_i 2^{-i}, \quad z = \sum_{i=1}^{\infty} z_i 2^{-i} \quad (x_i, y_i, z_i \in \{0, 1\})\) 이때, 점 P에 해당하는 모튼 코드 M은 다음과 같이 정의된다. \(M = \sum_{i=1}^{\infty} (z_i 4^{-i} + y_i 2 \cdot 4^{-i} + x_i 4 \cdot 4^{-i}) = \sum_{i=1}^{\infty} (4x_i + 2y_i + z_i) 8^{-i}\) 이러한 모튼 코드를 값의 크기 순서대로 정렬하면, 이는 해당 옥트리 구조를 깊이 우선 탐색(Depth-First Search, DFS) 순서로 방문하는 것과 정확히 일치한다.12 즉, 모튼 코드 자체가 옥트리 내 노드의 경로 정보를 압축하여 담고 있는 것이다.

모튼 코드를 사용하면 포인터 없이도 순전히 산술 및 비트 연산만으로 트리 구조를 탐색하고 조작할 수 있다.

이처럼 모튼 코드를 기반으로 한 선형 옥트리는 전통적인 포인터 기반 구조의 패러다임을 완전히 전환시켰다. 이는 구조적 관계를 산술적 관계로 변환함으로써 메모리 사용량을 획기적으로 줄이고, 현대 병렬 컴퓨팅 아키텍처의 성능을 최대한 활용할 수 있는 길을 열었다. i-Octree와 같은 최신 동적 옥트리 구조 역시 이러한 포인터리스 접근법의 철학을 계승하고 발전시킨 결과물이다.

i-Octree는 전통적인 옥트리의 견고한 공간 분할 원리를 기반으로 하되, 현대적인 실시간 동적 환경의 요구사항을 충족시키기 위해 설계된 진보된 자료구조이다. 특히 LiDAR SLAM과 같이 지속적으로 대규모 데이터가 유입되는 응용 분야를 목표로, 빠른 증분 업데이트와 효율적인 최근접 이웃 탐색(NNS)에 초점을 맞추고 있다. 본 장에서는 i-Octree를 탄생시킨 설계 동기부터 핵심적인 기술적 특징, 그리고 실제 구현에 사용되는 자료구조와 알고리즘에 대해 상세히 분석한다.

i-Octree의 등장은 기술적 필요성에 의해 촉발되었다. 자율 주행 자동차나 모바일 로봇에 탑재된 LiDAR 센서는 주변 환경을 스캔하여 초당 수백만 개에 달하는 3차원 포인트 클라우드를 생성한다.7 SLAM(Simultaneous Localization and Mapping) 시스템은 이 데이터를 실시간으로 처리하여 두 가지 핵심 작업을 수행해야 한다.

  1. 맵 업데이트: 새로 들어온 포인트 클라우드를 기존에 구축된 전역 맵(global map)에 지속적으로 통합해야 한다. 이 과정은 ‘증분적(incremental)’으로, 즉 전체 맵을 재구성하지 않고 새로운 데이터만 효율적으로 추가하거나 변경할 수 있어야 한다.
  2. 위치 추정: 새로 들어온 포인트 클라우드와 기존 맵 사이의 기하학적 정합(registration)을 통해 로봇의 현재 위치와 자세를 추정해야 한다. 이를 위해서는 두 데이터셋 간의 대응점(correspondence)을 찾아야 하며, 이 과정에서 NNS(최근접 이웃 탐색)가 핵심적인 역할을 한다.

기존의 공간 분할 자료구조들은 이러한 동시적이고 연속적인 요구사항을 만족시키기에 부족했다. 정적 옥트리는 업데이트 비용이 너무 컸고, k-d 트리의 변종인 ikd-Tree와 같은 구조는 증분 업데이트를 지원하지만 특정 연산(예: 반경 탐색)이나 메모리 효율성 측면에서 한계를 보였다.7 i-Octree는 바로 이 지점에서 출발한다. 즉,

실시간 포인트 삽입, 삭제, 그리고 빠른 NNS를 동시에 지원하는 고효율, 저메모리 동적 옥트리를 구현하는 것이 그 핵심 설계 목표이다.

i-Octree는 위와 같은 설계 목표를 달성하기 위해 몇 가지 독창적인 특징을 갖추고 있다.

i-Octree의 가장 큰 장점은 동적 데이터 처리에 있다. 이는 단순히 데이터를 추가하는 것을 넘어, 트리 구조 자체를 유연하게 변경하는 능력을 포함한다.

i-Octree의 성능을 뒷받침하는 핵심적인 구현 기술은 바로 메모리 관리 방식에 있다.

i-Octree는 기본적인 기능을 넘어 실제 응용에서 유용한 고급 기능들을 통합하고 있다.

i-Octree의 구체적인 구현은 다음과 같은 자료구조와 알고리즘에 기반한다.

결론적으로, i-Octree는 검증된 옥트리 원리에 혁신적인 메모리 관리 기법과 동적 업데이트 알고리즘을 결합하여, 현대 실시간 3D 데이터 처리의 난제를 해결하는 강력하고 실용적인 솔루션이라 할 수 있다.

자료구조의 우수성은 이론적 설계뿐만 아니라 실제 환경에서의 성능으로 입증된다. i-Octree는 동적 포인트 클라우드 처리를 위해 제안된 만큼, 기존의 최신 기술들과의 엄격한 성능 비교를 통해 그 효율성을 검증받았다. 본 장에서는 공개된 벤치마크 결과를 바탕으로 i-Octree의 핵심 성능 지표들을 심층적으로 분석하고, 그 성능의 배경이 되는 기술적 요인들을 고찰한다.

i-Octree의 성능 평가는 두 가지 종류의 데이터셋을 사용하여 종합적으로 이루어졌다. 첫째는 통제된 환경에서 알고리즘의 순수한 성능을 측정하기 위한 무작위 생성 데이터(randomized data)이고, 둘째는 실제 응용 시나리오에서의 효율성을 검증하기 위한 실세계 데이터(real-world data), 특히 자율 주행 연구에서 널리 사용되는 KITTI 데이터셋이다.7

성능 비교를 위해 선정된 대상들은 현재 동적 포인트 클라우드 처리 분야에서 가장 경쟁력 있는 기술들이다.

이러한 비교 대상과의 대결을 통해 i-Octree가 단순히 새로운 구조가 아니라, 기존 기술 대비 실질적인 성능 향상을 이루었는지를 객관적으로 평가할 수 있다.

벤치마크는 자료구조의 수명 주기 전반에 걸친 다양한 연산에 대해 수행되었다. 각 지표에 대한 분석은 다음과 같다.

초기 맵을 생성하는 데 걸리는 시간으로, 대규모 포인트 클라우드를 처음 처리할 때의 효율성을 나타낸다. 실험 결과, i-Octree는 16.63 ms의 구축 시간을 기록하여, ikd-Tree(46.26 ms) 대비 약 64% 더 빠른 성능을 보였으며, PCL 옥트리(52.66 ms)보다는 3배 이상 빨랐다.7 이러한 우위는 i-Octree의 효율적인 재귀 분할 알고리즘과 모튼 코드를 사용한 인덱싱, 그리고 지역화된 메모리 할당 전략이 초기 데이터 분배 과정에서부터 효과적으로 작동함을 시사한다. 전체 데이터를 한 번에 정렬하고 복잡한 균형 조정 과정을 거치는 일부 트리 구조에 비해, 규칙적인 공간 분할에 기반한 i-Octree의 구축 과정이 더 단순하고 빠르다는 것을 의미한다.

동적 자료구조의 핵심 성능 지표로, 새로운 데이터 포인트를 기존 트리에 추가하는 데 걸리는 시간을 측정한다. i-Octree는 평균 0.83 ms의 삽입 시간을 기록하여, 2.45 ms가 소요된 ikd-Tree보다 약 66% 더 빠른 압도적인 성능을 보였다.7 PCL 옥트리(0.85 ms)와는 유사한 수준이지만, 다른 모든 성능 지표에서 i-Octree가 우월하다는 점을 고려해야 한다. 이 결과는 3장에서 설명한 ‘지역적 공간 연속 저장 전략’의 효율성을 명확히 입증한다. 포인트 삽입이 대부분 해당 리프 노드의 지역적인 메모리 블록 내에서 처리되고, 전역적인 트리 구조 변경이나 데이터 재배열을 최소화하기 때문에 이처럼 빠른 증분 업데이트가 가능한 것이다.

NNS는 SLAM의 데이터 연관(data association) 단계에서 가장 빈번하게 호출되는 연산으로, 그 성능이 전체 시스템의 실시간성에 직접적인 영향을 미친다.

제한된 컴퓨팅 자원을 가진 로봇 시스템에서 메모리 효율성은 매우 중요하다. i-Octree는 최대 21.53 Mb의 메모리를 사용하여, 62.91 Mb를 사용한 ikd-Tree와 136.82 Mb를 사용한 PCL 옥트리에 비해 각각 약 1/3, 1/6 수준의 메모리만을 필요로 했다.7 이처럼 뛰어난 메모리 효율성은 포인터 사용을 최소화하고, 각 리프 노드에서 포인트 데이터를 연속적인 메모리 블록에 컴팩트하게 저장하는 i-Octree의 핵심 설계 철학이 성공적으로 구현되었음을 보여준다.

SLAM에서 맵의 크기를 관리하기 위한 이 기능에서 i-Octree는 다른 구조들을 압도하는 성능을 보였다. 특정 상자 영역 내의 포인트를 삭제하는 데 평균 0.016 ms가 소요된 반면, ikd-Tree는 약 0.250 ms가 걸려 10배 이상의 성능 차이를 보였다.7 이는 i-Octree가 상자와 겹치는 노드를 빠르게 식별하고, 해당 노드와 관련된 지역적 메모리 블록만을 해제하는 방식으로 동작하기 때문이다. 반면, 다른 트리 구조에서는 삭제 후 트리의 균형을 맞추기 위한 추가적인 복잡한 연산이 필요할 수 있다.

상기 분석 내용을 요약하면 다음과 같다. 이 표는 7에서 제공된 벤치마크 데이터를 기반으로 재구성되었다.

성능 지표 (Performance Metric) i-Octree ikd-Tree PCL octree
구축 시간 (Construction) [ms] 16.63 46.26 52.66
포인트 삽입 (Point Insertion) [ms] 0.83 2.45 0.85
KNN 탐색 (KNN Search) [ms] 0.41 0.59 2.53
반경 탐색 (Radius Neighbors Search) [ms] 0.81 1.85 3.96
최대 메모리 사용량 (Peak Memory) [Mb] 21.53 62.91 136.82
박스 단위 삭제 (Box-wise Delete) [ms] ~0.016 ~0.250 해당 없음

이러한 정량적 데이터는 i-Octree가 단지 하나의 특정 연산에서만 뛰어난 것이 아님을 명확히 보여준다. 구축, 업데이트, 다양한 종류의 탐색, 메모리 관리, 그리고 동적 맵 관리 기능에 이르기까지, 자료구조가 갖추어야 할 거의 모든 덕목에서 경쟁 기술들을 능가하는 균형 잡힌 고성능을 제공한다. 이는 i-Octree의 설계가 실제 동적 포인트 클라우드 응용 프로그램의 다차원적인 요구사항을 깊이 이해하고, 이를 해결하기 위해 종합적으로 최적화된 결과임을 시사한다. 따라서 i-Octree는 현존하는 동적 포인트 클라우드 처리 기술 중 가장 강력하고 실용적인 대안 중 하나로 평가될 수 있다.

i-Octree는 특정 문제 해결을 위해 탄생했지만, 그 기반이 되는 옥트리 기술은 지난 수십 년간 컴퓨터 과학의 다양한 분야에서 폭넓게 활용되어 온 범용적인 기술이다. 본 장에서는 i-Octree의 핵심 응용 분야를 명확히 하고, 더 나아가 일반적인 옥트리가 어떤 분야에서 어떻게 활용되는지를 조망한다. 또한, 다른 주요 공간 분할 자료구조와의 비교를 통해 옥트리 계열 기술의 상대적인 장단점과 기술적 위치를 명확히 한다.

i-Octree의 설계 목적과 성능 특성은 그 주요 활용 분야를 명확하게 지시한다.

i-Octree의 기반 기술인 옥트리는 다음과 같이 훨씬 더 넓은 영역에서 그 유용성을 입증해왔다.

컴퓨터 그래픽스는 옥트리가 가장 먼저, 그리고 가장 활발하게 사용된 분야 중 하나이다.

복잡한 물리 현상을 모델링하는 과학 및 공학 분야에서도 옥트리는 핵심적인 역할을 한다.

옥트리의 특성을 더 명확히 이해하기 위해서는 다른 주요 공간 분할 자료구조와의 비교가 필수적이다. 어떤 자료구조가 ‘절대적으로’ 우월하다기보다는, 데이터의 특성과 주된 연산의 종류에 따라 각자의 장단점이 드러난다.

결론적으로, 어떤 공간 분할 구조를 선택할 것인지는 해결하려는 문제의 본질에 달려있다. 균일한 밀도의 복셀 데이터나 포인트 클라우드를 다루며 반경 탐색이 중요하다면 옥트리가 유리하다. 비균일하게 분포된 개별 폴리곤 객체들로 구성된 장면에서 광선 추적을 한다면 BVH가 더 나은 선택일 수 있다. i-Octree의 성공은, 대규모 동적 포인트 클라우드라는 특정 문제 영역의 요구사항(빠른 증분 업데이트, 효율적인 반경 탐색, 낮은 메모리)을 정확히 파악하고, 이에 가장 적합한 옥트리라는 기반 구조를 선택하여 극한으로 최적화했기 때문에 가능했던 것이다.

본 보고서는 3차원 공간 분할을 위한 핵심 자료구조인 옥트리의 기본 원리에서 출발하여, 현대 실시간 동적 환경의 요구에 부응하기 위해 탄생한 i-Octree의 설계, 구현, 성능에 이르기까지 심층적인 분석을 제공했다. 분석을 통해 i-Octree는 단순한 옥트리의 변종이 아니라, 특정 문제 영역, 즉 대규모 동적 포인트 클라우드의 실시간 처리를 위해 고도로 전문화되고 최적화된 기술적 성취임을 확인할 수 있었다.

i-Octree의 핵심적인 기여는 두 가지로 요약될 수 있다. 첫째, ‘지역적 공간 연속 저장 전략(Local Spatially Continuous Storing Strategy)’의 도입이다. 이는 전통적인 포인터 기반 구조의 캐시 비효율성과 선형 옥트리의 전역적 데이터 관리 부담을 동시에 해결하는 혁신적인 메모리 관리 기법이다. 각 리프 노드가 자신에게 속한 포인트들을 독립적인 연속 메모리 블록에서 관리하게 함으로써, 데이터 접근의 지역성을 극대화하고 NNS와 같은 핵심 질의의 성능을 비약적으로 향상시켰다. 둘째, 이 메모리 전략을 바탕으로 구현된 ‘효율적인 증분 업데이트 알고리즘’이다. 포인트의 삽입, 삭제, 그리고 맵 경계의 확장이 모두 지역적인 연산으로 처리되어, 전체 트리를 재구성하는 막대한 비용을 제거했다. 이는 LiDAR SLAM과 같이 끊임없이 데이터가 유입되는 환경에서 실시간 성능을 보장하는 결정적인 요소로 작용한다. 벤치마크 결과는 이러한 설계의 우수성을 객관적으로 입증했다. i-Octree는 구축 시간, 삽입 속도, 탐색 성능, 메모리 효율성 등 거의 모든 평가 지표에서 ikd-Tree나 PCL 옥트리와 같은 기존의 최신 기술들을 능가하는 균형 잡힌 고성능을 보여주었다.

i-Octree의 기술적 의의는 단순히 로봇 공학 분야에 국한되지 않는다. 이는 고주파수 데이터 스트림을 처리해야 하는 모든 현대적 응용 분야에 중요한 시사점을 던진다. 데이터가 동적으로 변화하는 환경에서는 자료구조의 정적인 검색 효율성뿐만 아니라, 업데이트와 메모리 관리를 얼마나 효율적으로 수행하는지가 전체 시스템의 성능을 좌우한다는 패러다임을 명확히 보여주었다.

향후 i-Octree 및 관련 기술은 여러 방향으로 발전할 잠재력을 가지고 있다. 첫째, GPU 및 이종 컴퓨팅 환경으로의 확장이다. 현재 CPU 기반으로도 뛰어난 성능을 보이지만, i-Octree의 지역적 연산 특성과 데이터 병렬성은 GPU 가속화에 매우 적합하다. 수천 개의 코어를 활용하여 다수의 노드 업데이트 및 탐색을 동시에 처리함으로써 성능을 한 차원 더 끌어올릴 수 있을 것이다.27 둘째,

머신러닝과의 융합이다. 최근에는 옥트리 구조를 신경망 아키텍처에 통합하여 3D 형상을 표현하거나(Implicit Neural Representations), 포인트 클라우드로부터 고품질의 표면을 재구성(surface reconstruction)하는 연구가 활발히 진행되고 있다.43 i-Octree의 동적 관리 능력은 실시간으로 변화하는 장면에 대한 학습 및 추론 모델의 기반 데이터 구조로서 활용될 수 있다. 마지막으로, 자율 주행, 증강 현실, 디지털 트윈 등 3차원 공간 인식이 핵심이 되는 미래 기술들이 더욱 정교해짐에 따라, i-Octree와 같이 빠르고 강건하며 효율적인 동적 공간 자료구조에 대한 수요는 계속해서 증가할 것이다. i-Octree는 이러한 미래 기술의 발전을 뒷받침하는 핵심 기반 기술로서 그 역할을 더욱 공고히 할 것으로 전망된다.

  1. Free Download Octree Spatial Partitioning Setup Template - Meegle, 8월 17, 2025에 액세스, https://www.meegle.com/en_us/advanced-templates/graphics_rendering/octree_spatial_partitioning_setup_template
  2. Octrees: The Ultimate Spatial Data Structure - Number Analytics, 8월 17, 2025에 액세스, https://www.numberanalytics.com/blog/octrees-ultimate-spatial-data-structure
  3. Octree - Wikipedia, 8월 17, 2025에 액세스, https://en.wikipedia.org/wiki/Octree
  4. Mastering Octrees in Algorithm Design - Number Analytics, 8월 17, 2025에 액세스, https://www.numberanalytics.com/blog/ultimate-guide-to-octree-in-algorithm-design
  5. US7002571B2 - Grid-based loose octree for spatial partitioning - Google Patents, 8월 17, 2025에 액세스, https://patents.google.com/patent/US7002571B2/en
  6. Introduction to Octrees - Wobbly Duck Studios, 8월 17, 2025에 액세스, https://www.wobblyduckstudios.com/Octrees.php
  7. A Fast, Lightweight, and Dynamic Octree for Proximity Search - arXiv, 8월 17, 2025에 액세스, https://arxiv.org/html/2309.08315v2
  8. A Fast, Lightweight, and Dynamic Octree for Proximity Search - arXiv, 8월 17, 2025에 액세스, https://arxiv.org/pdf/2309.08315
  9. Octree Insertion and Searching - GeeksforGeeks, 8월 17, 2025에 액세스, https://www.geeksforgeeks.org/dsa/octree-insertion-and-searching/
  10. An Octree-Based Spatial Index for Space-Based Space Surveillance Coverage Volume Computation, 8월 17, 2025에 액세스, https://arc.aiaa.org/doi/pdfplus/10.2514/6.2024-1675
  11. 4.2. How octree works - Castle Game Engine, 8월 17, 2025에 액세스, https://castle-engine.io/vrml_engine_doc/output/xsl/html/section.how_octree_works.html
  12. Advanced Octrees 2: node representations The Infinite Loop - WordPress.com, 8월 17, 2025에 액세스, https://geidav.wordpress.com/2014/08/18/advanced-octrees-2-node-representations/
  13. A Survey of Octree Volume Rendering Methods - Scientific Computing and Imaging Institute, 8월 17, 2025에 액세스, https://www.sci.utah.edu/~knolla/octsurvey.pdf
  14. Fast generation of pointerless octree duals 1 Introduction, 8월 17, 2025에 액세스, https://www.cs.jhu.edu/~misha/ReadingSeminar/Papers/Lewiner10.pdf
  15. Are sparse voxel octrees really (always) the best voxel data structure? - Reddit, 8월 17, 2025에 액세스, https://www.reddit.com/r/VoxelGameDev/comments/1jb8uol/are_sparse_voxel_octrees_really_always_the_best/
  16. Fast Generation of Pointerless Octree Duals Request PDF - ResearchGate, 8월 17, 2025에 액세스, https://www.researchgate.net/publication/220507495_Fast_Generation_of_Pointerless_Octree_Duals
  17. Z-order curve - Wikipedia, 8월 17, 2025에 액세스, https://en.wikipedia.org/wiki/Z-order_curve
  18. Thinking Parallel, Part III: Tree Construction on the GPU NVIDIA Technical Blog, 8월 17, 2025에 액세스, https://developer.nvidia.com/blog/thinking-parallel-part-iii-tree-construction-gpu/
  19. Z-Order Indexing for Efficient Queries in Data Lake by Nishant Chandra Medium, 8월 17, 2025에 액세스, https://medium.com/@nishant.chandra/z-order-indexing-for-efficient-queries-in-data-lake-48eceaeb2320
  20. Out-Of-Core construction of Sparse Voxel Octrees - Jeroen Baert’s Blog, 8월 17, 2025에 액세스, https://www.forceflow.be/2012/07/24/out-of-core-construction-of-sparse-voxel-octrees/
  21. Morton encoding/decoding through bit interleaving: Implementations - Jeroen Baert’s Blog, 8월 17, 2025에 액세스, https://www.forceflow.be/2013/10/07/morton-encodingdecoding-through-bit-interleaving-implementations/
  22. Using morton codes to compress data - how? - Stack Overflow, 8월 17, 2025에 액세스, https://stackoverflow.com/questions/22638874/using-morton-codes-to-compress-data-how
  23. Statistical optimization of octree searches - Thomas Lewiner, 8월 17, 2025에 액세스, http://thomas.lewiner.org/pdfs/octree_cgf.pdf
  24. How to Extract Parent Nodes from SVO Built Using Morton Keys? : r/VoxelGameDev - Reddit, 8월 17, 2025에 액세스, https://www.reddit.com/r/VoxelGameDev/comments/1hgpz4w/how_to_extract_parent_nodes_from_svo_built_using/
  25. How to find a octree node’s neighbors when the tree is ordered by Morton code, 8월 17, 2025에 액세스, https://stackoverflow.com/questions/40389011/how-to-find-a-octree-nodes-neighbors-when-the-tree-is-ordered-by-morton-code
  26. What’s the algorithm for 2:1 balancing a linear octree? - Stack Overflow, 8월 17, 2025에 액세스, https://stackoverflow.com/questions/25309784/whats-the-algorithm-for-21-balancing-a-linear-octree
  27. ParallelNN: A Parallel Octree-based Nearest Neighbor Search Accelerator for 3D Point Clouds - WashU Computer Science & Engineering, 8월 17, 2025에 액세스, https://www.cse.wustl.edu/~roger/566S.s24/ParallelNN_2023.pdf
  28. Octree - Sceneri, 8월 17, 2025에 액세스, https://www.sceneri.com/sceneri-docs-glossar/octree/
  29. Fast Collision Detection Method with Octree-Based Parallel Processing in Unity3D - MDPI, 8월 17, 2025에 액세스, https://www.mdpi.com/2673-4591/89/1/37
  30. Octree - Sinspired Studio, 8월 17, 2025에 액세스, https://sinspiredstudio.com/glossary/octree/
  31. Ray / Octree traversal - Jeroen Baert’s Blog, 8월 17, 2025에 액세스, https://www.forceflow.be/2012/04/20/ray-octree-traversal/
  32. Bottom-Up Construction and 2:1 Balance Refinement of Linear Octrees in Parallel SIAM Journal on Scientific Computing, 8월 17, 2025에 액세스, https://epubs.siam.org/doi/10.1137/070681727
  33. Bottom-Up Construction and 2:1 Balance Refinement of Linear Octrees in Parallel - PADAS, 8월 17, 2025에 액세스, https://padas.oden.utexas.edu/static/papers/OctreeBalance21.pdf
  34. Fast Octree Neighborhood Search for SPH Simulations - Andreas Longva, 8월 17, 2025에 액세스, https://andreaslongva.com/pdf/2022-SA-NeighborhoodSearch-compressed.pdf
  35. Why specifically are k-d trees preferred in ray tracing and octrees in collision? - Reddit, 8월 17, 2025에 액세스, https://www.reddit.com/r/gameenginedevs/comments/1789f54/why_specifically_are_kd_trees_preferred_in_ray/
  36. kd-tree vs octree for 3d radius search - Stack Overflow, 8월 17, 2025에 액세스, https://stackoverflow.com/questions/17998103/kd-tree-vs-octree-for-3d-radius-search
  37. Accelerated Ray Tracing using R-Trees - Fraunhofer-Publica, 8월 17, 2025에 액세스, https://publica.fraunhofer.de/bitstreams/d4e282eb-b669-419b-87d4-4f847fb3aef5/download
  38. A Survey on Bounding Volume Hierarchies for Ray Tracing - Daniel Meister, 8월 17, 2025에 액세스, https://meistdan.github.io/publications/bvh_star/paper.pdf
  39. An evaluation of Kd-Trees vs Bounding Volume Hierarchy (BVH) acceleration structures in modern CPU architectures - SciELO, 8월 17, 2025에 액세스, https://www.scielo.sa.cr/scielo.php?script=sci_arttext&pid=S0379-39822023000200086
  40. What are common benefits and uses of Octrees? : r/GraphicsProgramming - Reddit, 8월 17, 2025에 액세스, https://www.reddit.com/r/GraphicsProgramming/comments/10mf504/what_are_common_benefits_and_uses_of_octrees/
  41. OLBVH: octree linear bounding volume hierarchy for volumetric meshes - ResearchGate, 8월 17, 2025에 액세스, https://www.researchgate.net/publication/342718520_OLBVH_octree_linear_bounding_volume_hierarchy_for_volumetric_meshes
  42. Highly Parallel Surface Reconstruction - Kun Zhou, 8월 17, 2025에 액세스, http://www.kunzhou.net/2008/MSR-TR-2008-53.pdf
  43. Octree Guided Unoriented Surface Reconstruction - CVF Open Access, 8월 17, 2025에 액세스, https://openaccess.thecvf.com/content/CVPR2023/papers/Koneputugodage_Octree_Guided_Unoriented_Surface_Reconstruction_CVPR_2023_paper.pdf
  44. OctField: Hierarchical Implicit Functions for 3D Modeling - Geometry Learning, 8월 17, 2025에 액세스, http://geometrylearning.com/OctField/