Booil Jung

옥트리(Octree)

옥트리(Octree)는 3차원 공간을 효율적으로 표현하고 관리하기 위해 설계된 트리(tree) 기반의 자료구조이다.1 그 이름은 ‘여덟’을 의미하는 그리스어 ‘oct’와 ‘tree’의 합성어에서 유래했으며, 이름이 암시하듯 각 내부 노드(internal node)가 정확히 8개의 자식 노드(child node)를 갖는 구조적 특징을 지닌다.1 옥트리의 가장 근본적인 원리는 3차원 공간을 재귀적으로(recursively) 8개의 동일한 부피를 갖는 하위 공간, 즉 옥턴트(octant)로 분할하는 것이다.2

이 계층적 공간 분할 방식은 3차원 데이터를 다루는 다양한 문제 영역에서 핵심적인 역할을 수행한다. 옥트리의 최상위 노드인 루트 노드(root node)는 분석하고자 하는 전체 3차원 공간을 하나의 정육면체 또는 직육면체 경계 상자(bounding box)로 표현한다.4 만약 이 노드가 특정 조건을 만족하지 못하면(예를 들어, 내부에 포함된 데이터의 수가 일정 임계치를 초과하는 경우), 해당 공간은 세 개의 축(X, Y, Z)에 평행한 절단면을 통해 8개의 동일한 크기를 가진 자식 옥턴트로 분할된다.6 이 과정은 각 옥턴트가 설정된 종료 조건을 만족할 때까지 재귀적으로 반복된다. 대표적인 종료 조건으로는 노드에 포함된 객체의 수가 미리 정해진 임계값 이하가 되거나, 트리의 깊이가 최대 허용 깊이에 도달하거나, 노드의 크기가 더 이상 분할할 의미가 없을 정도로 작아지는 경우 등이 있다.2

이러한 재귀적 분할을 통해 옥트리는 데이터가 밀집된 영역은 더 깊고 세밀하게 분할하고, 데이터가 없거나 희소한 영역은 더 큰 노드로 묶어 표현하는 적응형(adaptive) 공간 분할을 구현한다. 이는 3차원 공간 내 데이터의 분포를 효율적으로 반영하여 저장 공간을 절약하고, 후술할 다양한 연산의 효율을 극대화하는 기반이 된다.4

옥트리의 근본적인 힘은 ‘공간적 일관성(spatial coherence)’이라는 개념을 효과적으로 활용하는 데 있다. 이는 물리적으로 인접한 객체들이 자료구조 상에서도 가깝게 위치할 가능성이 높다는 원칙이다. 수많은 컴퓨터 그래픽스 및 시뮬레이션 응용 프로그램의 핵심은 특정 지점이나 영역 주변의 객체를 신속하게 찾는 것이다.4 모든 객체 쌍을 일일이 비교하는 선형 탐색(brute-force search) 방식은 객체의 수가 N개일 때 충돌 감지의 경우 O(N2), 단순 검색의 경우 $O(N)$의 비효율적인 시간 복잡도를 가진다.8 옥트리는 공간을 계층적으로 분할함으로써 이러한 비효율을 극복한다. 특정 쿼리(예: 충돌 검사, 가시성 판단)를 수행할 때, 해당 쿼리 영역과 전혀 겹치지 않는 노드가 발견되면 그 노드에 속한 모든 하위 노드와 객체들은 추가적인 검사 없이 즉시 탐색 과정에서 배제된다. 이 ‘가지치기(pruning)’ 과정은 물리적으로 멀리 떨어진 객체들 간의 상호작용을 검사할 필요가 없다는 공간적 일관성 가정을 자료구조로 구현한 것이며, 이를 통해 불필요한 연산을 원천적으로 차단하여 성능을 획기적으로 향상시킨다.11

옥트리의 개념은 1980년 렌셀러 폴리테크닉 대학교(Rensselaer Polytechnic Institute)의 도널드 미거(Donald Meagher)에 의해 3차원 컴퓨터 그래픽스 분야에 선구적으로 도입되었다.2 그의 기술 보고서 “Octree Encoding: A New Technique for the Representation, Manipulation and Display of Arbitrary 3-D Objects by Computer”는 옥트리를 이용해 임의의 복잡한 3차원 객체를 표현하고, 조작하며, 화면에 표시하는 새로운 기법의 기틀을 마련했다.2

초기 옥트리 연구는 주로 3차원 객체의 효율적인 저장 방식과 불리언 연산(Boolean operations)의 구현에 집중되었다. 옥트리 인코딩을 사용하면 복잡한 객체 간의 합집합(union), 교집합(intersection), 차집합(difference) 연산을 트리 순회를 통한 단순한 정수 연산만으로 수행할 수 있었다.13 이는 부동소수점 연산이 비쌌던 당시의 컴퓨팅 환경에서 매우 큰 장점이었다. 또한, 객체의 표면적에 비례하는 메모리만으로 객체를 표현할 수 있어 저장 효율성도 높았다.13

시간이 흐르면서 옥트리의 응용 범위는 기하학적 모델링을 넘어 훨씬 더 넓은 분야로 확장되었다. 1988년 Gervautz와 Purgathofer는 옥트리를 이미지의 색상 양자화(color quantization) 문제에 적용하는 알고리즘을 발명했다.2 이는 옥트리가 단순히 공간 좌표뿐만 아니라, RGB 색상 공간과 같은 추상적인 3차원 데이터를 구조화하는 데에도 효과적임을 보여준 사례이다. 이후 옥트리는 빠른 공간 쿼리 성능을 바탕으로 컴퓨터 게임 엔진의 실시간 충돌 감지, 광선 추적(ray tracing)의 가속 구조, 지리 정보 시스템(GIS)에서의 대규모 공간 데이터 인덱싱, 로보틱스 분야의 환경 인식 및 지도 작성(mapping) 등 다양한 핵심 기술의 기반으로 자리 잡게 되었다.4 이처럼 옥트리는 3차원 데이터를 다루는 거의 모든 분야에서 그 효율성과 유연성을 인정받으며 지속적으로 발전해왔다.

옥트리는 2차원 공간 분할에 사용되는 자료구조인 쿼드트리(Quadtree)의 직접적인 3차원 확장판으로 이해할 수 있다.1 쿼드트리는 2차원 평면을 재귀적으로 4개의 동일한 사분면(quadrant)으로 분할하며, 각 내부 노드는 4개의 자식 노드를 가진다.17 옥트리는 이 원리를 3차원 공간으로 확장하여, 공간을 8개의 옥턴트(octant)로 분할하고 각 내부 노드가 8개의 자식 노드를 갖도록 한 것이다.19 즉, 쿼드트리가 X축과 Y축에 평행한 두 개의 분할선을 사용하는 반면, 옥트리는 X, Y, Z축에 평행한 세 개의 분할 평면을 사용한다.

이러한 차원적 확장은 단순히 자식 노드의 수가 4개에서 8개로 늘어나는 것 이상의 의미를 내포한다. 3차원 공간의 복잡성으로 인해, 부피를 가진 객체가 여러 옥턴트에 동시에 걸치는(straddling) 경우가 2차원보다 훨씬 더 빈번하고 복잡하게 발생한다. 이는 객체의 삽입, 삭제, 검색 알고리즘을 설계할 때 중요한 고려사항이 되며, 알고리즘의 복잡성을 증가시키는 주요 요인으로 작용한다.

쿼드트리와 옥트리는 더 높은 차원으로도 일반화될 수 있다. d차원 공간을 2d개의 하위 공간으로 분할하는 이러한 자료구조를 통칭하여 하이퍼옥트리(hyperoctree) 또는 오르트리(orthtree)라고 부른다.20 그러나 차원이 증가함에 따라 자식 노드의 수가 기하급수적으로 늘어나기 때문에(2d), 4차원 이상에서는 메모리 비효율성과 관리의 복잡성으로 인해 옥트리 방식의 직접적인 확장은 잘 사용되지 않는다. 대신, 각 단계에서 하나의 축으로만 공간을 이진 분할하는 k-d 트리와 같은 다른 접근법이 고차원 공간에서 더 선호되는 경향이 있다.20

옥트리를 구성하는 각 노드는 세 가지 핵심 요소로 이루어진다: 공간적 범위를 정의하는 경계 상자, 계층 구조를 형성하는 자식 포인터, 그리고 실제 정보를 담는 데이터 필드이다.

첫째, 각 옥트리 노드는 자신이 표현하는 3차원 공간 영역을 명확히 정의하기 위한 축 정렬 경계 상자(Axis-Aligned Bounding Box, AABB)를 가진다.6 이 경계 상자는 해당 노드가 관할하는 공간의 범위를 나타내며, 일반적으로 공간의 최소점 좌표 $P_{min} = (x_{min}, y_{min}, z_{min})$과 최대점 좌표 $P_{max}=(x_{max},y_{max},z_{max})$ 두 개의 3차원 벡터로 정의된다.2 이 AABB는 옥트리 순회 중 특정 영역과의 교차 여부를 판단하는 데 사용되어 효율적인 가지치기를 가능하게 하는 핵심 요소이다.

둘째, 노드의 종류에 따라 자식 노드와의 관계가 결정된다. 공간을 더 분할하는 내부 노드(Internal Node)는 8개의 자식 노드를 가리키는 포인터(또는 이에 상응하는 인덱스) 배열을 포함한다.4 반면, 더 이상 분할되지 않는 트리의 말단에 위치한 리프 노드(Leaf Node)는 자식 포인터를 갖지 않으며(NULL), 대신 실제 데이터를 저장하는 역할을 한다.21 이처럼 자식 포인터의 유무로 내부 노드와 리프 노드를 간단히 구분할 수 있다.21

셋째, 노드에 저장되는 데이터는 옥트리의 응용 분야에 따라 그 형태가 매우 다양하다. 예를 들어, 포인트 클라우드 처리용 옥트리의 리프 노드는 해당 공간에 속하는 점들의 좌표 리스트나 인덱스를 저장한다.22 게임 엔진의 충돌 감지 시스템에서는 해당 노드와 교차하는 게임 객체에 대한 참조나 포인터 리스트를 저장한다.8 볼륨 렌더링(volume rendering)에서는 복셀(voxel)의 색상, 밀도, 재질과 같은 속성 정보를 저장할 수 있다.24 이처럼 옥트리는 그 자체로 범용적인 공간 분할 프레임워크를 제공하며, 각 노드에 어떤 데이터를 저장하느냐에 따라 특정 문제에 특화된 자료구조로 기능한다.

부모 노드가 나타내는 공간을 8개의 자식 옥턴트로 분할하는 과정은 체계적인 규칙에 따라 이루어진다. 분할의 기준은 부모 노드 경계 상자의 중심점(center point) $C = (c_x, c_y, c_z)$이다. 이 중심점을 통과하는 세 개의 축에 평행한 평면들($x=c_x, y=c_y, z=c_z$)이 부모 공간을 정확히 8개의 동일한 크기를 가진 직육면체로 나눈다.6

특정 좌표 $P = (p_x, p_y, p_z)$가 8개의 옥턴트 중 어느 곳에 속하는지를 결정하는 인덱싱은 중심점과의 좌표 비교를 통해 매우 효율적으로 수행될 수 있다. 각 축에 대한 비교 결과를 비트(bit)로 표현하여 조합하는 방식이 널리 사용된다. 예를 들어, 다음과 같은 규칙을 적용할 수 있다 2:

  1. $p_x>c_x$ 이면 X축 비트를 1로, 아니면 0으로 설정한다.
  2. $p_y>c_y$ 이면 Y축 비트를 1로, 아니면 0으로 설정한다.
  3. $p_z>c_z$ 이면 Z축 비트를 1로, 아니면 0으로 설정한다.

이 세 비트를 특정 순서(예: ZYX)로 조합하여 3비트 정수를 만들면 0부터 7까지의 고유한 옥턴트 인덱스를 얻을 수 있다. C++ 스타일의 코드로 표현하면 다음과 같다:

int octantIndex = 0;
if (point.x > center.x) octantIndex |= 1; // 001
if (point.y > center.y) octantIndex |= 2; // 010
if (point.z > center.z) octantIndex |= 4; // 100

이러한 비트 연산을 통한 인덱싱은 매우 빠르며, 재귀적인 삽입 및 탐색 과정에서 경로를 결정하는 데 핵심적으로 사용된다.

일단 옥턴트 인덱스가 결정되면, 해당 자식 노드의 경계 상자는 부모 노드의 경계 상자와 중심점을 이용해 간단히 계산할 수 있다. 예를 들어, 부모 노드의 경계가 $P_{min}$과 $P_{max}$이고 중심점이 C일 때, 각 옥턴트의 경계 상자는 다음과 같이 정의된다 26:

이러한 계산은 재귀적 분할 과정에서 각 노드의 공간적 범위를 명확히 정의하는 기반이 된다.

옥트리를 메모리상에 구현하는 방식은 크게 두 가지로 나뉘며, 각각은 개념적 단순성과 하드웨어 수준의 성능 사이에서 뚜렷한 트레이드오프를 보인다.

포인터 기반(Pointer-based) 옥트리는 가장 직관적이고 전통적인 구현 방식이다.15 이 방식에서는 각 노드를 클래스나 구조체로 정의하고, 내부 노드는 8개의 자식 노드를 가리키는 포인터(또는 참조)를 멤버 변수로 가진다.27 재귀적인 알고리즘(삽입, 탐색 등)을 코드 상에 직접적으로 표현하기 용이하여 구현이 비교적 간단하다. 또한, 트리의 일부만 동적으로 확장하거나 축소하는 것이 유연하다는 장점이 있다. 그러나 이 방식은 현대 컴퓨터 아키텍처의 관점에서 볼 때 몇 가지 심각한 성능적 단점을 내포한다. 동적 메모리 할당(new 또는 malloc)을 통해 노드를 생성하면, 각 노드가 메모리 상의 서로 떨어진 위치에 흩어져 배치될 수 있다(memory fragmentation).29 트리 순회 시 이러한 포인터들을 따라가는 과정은 불규칙하고 예측 불가능한 메모리 접근 패턴(random memory access)을 유발하며, 이는 CPU 캐시 미스(cache miss)를 빈번하게 발생시킨다.27 캐시 미스는 CPU 파이프라인을 정체시켜 이론적인 알고리즘의 효율성에도 불구하고 실제 실행 시간을 크게 저하시키는 주된 원인이 된다.

선형(Linear) 옥트리, 또는 포인터리스(Pointerless) 옥트리는 이러한 하드웨어 비친화적 문제를 해결하기 위해 고안된 대안적 구현 방식이다.31 이 방식의 핵심 아이디어는 트리의 전체 구조, 특히 포인터를 이용한 부모-자식 관계를 명시적으로 저장하지 않는 것이다. 대신, 데이터가 포함된 리프 노드들만을 리스트나 배열 형태의 연속된 메모리 공간에 저장한다.32 각 리프 노드의 3차원 공간상 위치와 크기(깊이)는 모튼 코드(Morton code)와 같은 공간 채움 곡선(space-filling curve)을 사용하여 하나의 정수 값으로 인코딩된다.33 모튼 코드는 다차원 공간의 좌표를 1차원 값으로 매핑하면서 공간적 지역성(spatial locality)을 최대한 보존하는 특성을 가진다. 즉, 3D 공간에서 가까운 두 점은 모튼 코드로 변환된 1D 값도 가까울 가능성이 높다.

이러한 특성 덕분에, 리프 노드들을 모튼 코드 순서로 정렬하여 배열에 저장하면 물리적으로 인접한 노드들이 메모리 상에서도 인접하게 배치된다.32 이는 데이터 지역성을 극대화하여 트리 순회나 범위 탐색 시 순차적인 메모리 접근을 유도하고, 결과적으로 CPU 캐시 히트율(cache hit rate)을 극적으로 향상시킨다.29 또한, 포인터 저장에 필요한 메모리 오버헤드가 전혀 없으므로 매우 압축적인 표현이 가능하다.35 특정 노드를 찾는 작업은 정렬된 모튼 코드 배열에 대한 이진 탐색으로

O(logL) (L은 리프 노드의 수) 시간에 수행할 수 있다.32 그러나 선형 옥트리는 동적인 데이터의 삽입 및 삭제가 발생할 때마다 정렬된 배열을 갱신해야 하므로 포인터 기반 방식보다 업데이트 비용이 더 클 수 있다는 단점이 있다.36

결론적으로, 옥트리 구현 방식의 선택은 단순한 자료구조 설계를 넘어, 기반 하드웨어 아키텍처의 특성을 얼마나 잘 활용할 것인가에 대한 깊은 이해를 요구한다. 개념적 명확성과 구현의 용이성이 중요하다면 포인터 기반 방식이 적합할 수 있지만, 대규모 데이터셋을 다루며 극한의 성능을 추구하는 현대의 고성능 컴퓨팅 환경, 특히 병렬 처리가 중요한 GPU 환경에서는 선형 옥트리가 제공하는 하드웨어 친화적 특성이 훨씬 더 큰 이점을 제공한다.29

옥트리를 생성하는 과정, 즉 구축은 주어진 3차원 데이터셋을 계층적 구조로 조직화하는 첫 단계이다. 구축 방식은 크게 하향식과 상향식으로 나눌 수 있다.

하향식(Top-Down) 구축은 가장 일반적이고 직관적인 방법이다.15 이 접근법은 전체 데이터 공간을 감싸는 하나의 거대한 경계 상자를 루트 노드로 설정하는 것에서 시작한다. 그 후, 이 루트 노드부터 재귀적인 분할 과정을 수행한다. 각 노드에 대해, 미리 정의된 종료 조건(termination condition)을 만족하는지 검사한다. 만약 조건을 만족하지 않으면, 해당 노드의 공간을 8개의 자식 옥턴트로 분할하고, 노드에 포함된 데이터들을 각각의 자식 노드로 재분배한다. 이 과정은 모든 리프 노드가 종료 조건을 만족할 때까지 계속된다.

하향식 구축의 핵심은 언제 분할을 멈출 것인지를 결정하는 종료 조건이다. 이 조건은 옥트리의 최종 구조와 성능에 직접적인 영향을 미치며, 주로 다음 세 가지 기준이 단독 또는 조합되어 사용된다:

  1. 객체 수 임계값: 노드 내에 포함된 객체(점, 폴리곤 등)의 수가 미리 정해진 임계값(예: 8개 또는 16개) 이하로 떨어지면 더 이상 분할하지 않는다.2 이는 데이터가 희소한 영역에서 불필요한 분할을 막아준다.
  2. 최대 깊이: 트리의 깊이가 사전에 정의된 최대 허용 깊이(max depth)에 도달하면 분할을 중단한다.2 이는 트리가 무한정 깊어지는 것을 방지하여 메모리 사용량을 제어하고, 최악의 경우 탐색 성능을 보장하는 역할을 한다.
  3. 최소 노드 크기: 노드의 경계 상자 한 변의 길이가 특정 최소값 이하로 작아지면 분할을 멈춘다.2 이는 나노미터 크기의 매우 작은 객체나 부동소수점 정밀도 문제로 인해 분할이 무한히 일어나는 것을 방지한다.

상향식(Bottom-Up) 구축은 하향식과는 반대 방향으로 진행된다.15 이 방식은 가장 작은 단위의 데이터(예: 개별 포인트 또는 복셀)를 각각 리프 노드로 간주하는 것에서 시작한다. 그 후, 인접한 8개의 노드 그룹을 찾아 이들을 자식으로 하는 부모 노드를 생성하며 병합(merge)하는 과정을 반복한다. 이 과정은 모든 노드가 단일 루트 노드 아래에 통합될 때까지 계속된다. 상향식 접근법은 주로 이미 복셀화된 데이터나 포인트 클라우드로부터 옥트리를 생성하는 경우에 고려될 수 있으며, 때로는 하향식과 결합된 하이브리드 방식으로 사용되기도 한다.15

새로운 데이터 객체를 기존에 구축된 옥트리에 추가하는 삽입 연산은 하향식 구축 과정과 유사한 재귀적 탐색을 기반으로 한다.

삽입 과정은 루트 노드에서 시작한다.3 삽입하려는 객체의 위치를 기반으로, 이 객체가 속해야 할 8개의 자식 옥턴트 중 하나를 결정한다. 그 후 해당 자식 노드로 이동하여 동일한 과정을 반복하며, 트리를 따라 아래로 내려간다.38 이 재귀적 탐색은 리프 노드에 도달할 때까지 계속된다.

리프 노드에 도달하면, 해당 객체를 리프 노드가 관리하는 데이터 목록에 추가한다. 객체를 추가한 후, 리프 노드가 분할 조건을 만족하는지(즉, 객체 수가 임계값을 초과하고 최대 깊이에 도달하지 않았는지) 확인한다. 만약 분할이 필요하다면, 해당 리프 노드는 내부 노드로 역할이 변경된다. 이어서 8개의 새로운 자식 리프 노드가 생성되고, 기존에 부모 노드에 있던 모든 객체(새로 삽입된 객체 포함)들은 각각의 위치에 따라 새로운 8개의 자식 노드로 재분배된다.15

부피를 가진 객체 처리는 옥트리 알고리즘의 복잡성과 성능을 결정하는 핵심적인 도전 과제이다. 점(point) 데이터는 명확하게 하나의 노드에만 속하지만, 폴리곤, 구(sphere), 경계 상자 등 부피를 가진 기하학적 객체는 필연적으로 여러 옥턴트의 경계에 걸칠 수 있다.9 이 ‘경계 문제(boundary problem)’를 해결하는 방식은 메모리 사용량, 쿼리 속도, 업데이트 비용 간의 중요한 트레이드오프를 결정한다. 주요 처리 전략은 다음과 같다 9:

  1. 객체 분할(Object Splitting): 객체를 옥턴트 경계 평면을 기준으로 여러 조각으로 자른 후, 각 조각을 해당하는 자식 노드에 개별적으로 삽입하는 가장 정확한 방식이다. 그러나 삼각형-상자 교차 및 절단과 같은 기하학적 연산은 계산 비용이 매우 높고, 데이터 관리(분할된 조각들의 추적 등)를 복잡하게 만든다.9
  2. 중복 참조(Duplicate References): 객체가 걸쳐 있는 모든 자식 노드에 해당 객체에 대한 참조(포인터)를 저장하는 가장 간단한 방식이다. 구현은 용이하지만, 하나의 객체가 여러 노드에 존재하게 되므로 저장 공간이 낭비되고, 쿼리(특히 광선 추적) 시 동일한 객체에 대해 불필요한 중복 교차 검사를 수행하게 되어 성능 저하를 유발할 수 있다.9 또한, 모든 객체가 새로 생성된 특정 자식 노드에 계속 걸치는 최악의 경우, 최대 깊이에 도달할 때까지 불필요한 분할이 무한히 반복될 수 있다.9
  3. 부모 노드 저장(Promotion to Parent): 객체가 여러 자식 노드에 걸치는 경우, 해당 객체를 자식 노드로 내리지 않고 현재의 부모 노드에 그대로 저장하는 방식이다. 이 전략은 삽입 과정을 단순화하고 중복 저장을 피할 수 있지만, 트리의 상위 레벨(내부 노드)에 많은 객체가 쌓이게 되어 공간 분할의 이점을 약화시킨다. 쿼리 시 내부 노드에 도달했을 때, 자식 노드뿐만 아니라 해당 내부 노드에 저장된 객체들도 모두 검사해야 하므로 탐색 효율이 떨어질 수 있다.9 이러한 딜레마를 해결하기 위해, 노드의 경계를 가상으로 확장하여 경계 문제를 완화하는 ‘느슨한 옥트리(Loose Octrees)’와 같은 변종 기법이 제안되기도 했다.41

옥트리의 진정한 가치는 효율적인 탐색 및 순회 연산에서 드러난다. 공간적 계층 구조를 활용하여 방대한 탐색 공간을 효과적으로 가지치기할 수 있다.

정적인 데이터뿐만 아니라 객체가 움직이거나 사라지는 동적인 환경을 지원하기 위해서는 효율적인 삭제 및 갱신 메커니즘이 필수적이다.

객체 삭제는 먼저 해당 객체를 포함하고 있는 리프 노드를 탐색하여 찾아낸 후, 그 노드의 데이터 목록에서 해당 객체를 제거하는 것으로 시작된다. 객체 삭제 후에는 트리의 최적화를 위해 노드 병합(Node Merging) 과정을 고려할 수 있다. 만약 한 내부 노드의 모든 자식 노드(8개의 형제 노드)에 포함된 객체의 총 수가 분할 임계값 이하로 줄어든다면, 이 8개의 자식 노드들을 모두 제거하고, 남아있는 모든 객체들을 부모 노드로 옮긴 후, 부모 노드를 새로운 리프 노드로 만드는 것이다.15 이 병합 과정은 트리의 상위 레벨로 재귀적으로 전파될 수 있으며, 불필요하게 깊고 복잡해진 트리를 단순화하여 메모리를 절약하고 탐색 효율을 유지하는 데 도움을 준다.

객체들이 지속적으로 움직이는 고도로 동적인 환경(예: 실시간 물리 시뮬레이션, 다수의 플레이어가 움직이는 게임)에서는 옥트리를 갱신하는 전략이 매우 중요하다.

옥트리의 성능은 이론적으로 시간 복잡도와 공간 복잡도를 통해 분석될 수 있다. 여기서 N은 옥트리에 저장된 총 객체의 수를 의미한다.

옥트리의 점근적 복잡도는 평균적인 경우를 가정한 것이며, 실제 성능은 여러 요인에 의해 크게 달라질 수 있다.

이론적인 점근적 복잡도 분석만으로는 실제 하드웨어에서 나타나는 성능을 완벽하게 예측할 수 없다. 현대 CPU 아키텍처에서 메모리 접근 속도는 연산 속도에 비해 매우 느리기 때문에, 캐시 효율성(cache efficiency)과 데이터 지역성(data locality)이 실제 성능에 결정적인 영향을 미친다.

전통적인 포인터 기반 옥트리 구현은 이 측면에서 취약점을 보인다. 재귀적 트리 순회는 메모리 상에서 서로 멀리 떨어진 주소에 위치한 노드들을 무작위로 점프하며 접근하는 경향이 있다.27 이러한 불규칙한 메모리 접근 패턴은 CPU 캐시의 예측을 어렵게 하고 캐시 미스(cache miss)를 빈번하게 유발한다. 캐시 미스가 발생하면 CPU는 훨씬 느린 주 메모리(RAM)에서 데이터를 가져올 때까지 기다려야 하므로, 전체적인 실행 속도가 크게 저하된다.30

이 때문에 객체의 수가 수백, 수천 개 정도로 많지 않은 경우에는, 이론적으로 비효율적인 $O(N^2)$의 단순 배열 순차 탐색이 캐시 비효율적인 O(NlogN) 옥트리 순회보다 오히려 더 빠른 역설적인 현상이 발생할 수 있다.30 이는 CPU의 프리페칭(prefetching) 기능이 배열과 같은 연속된 메모리 구조에 대한 순차 접근을 매우 효율적으로 처리하기 때문이다.

이러한 문제를 해결하기 위해 선형 옥트리나, 노드들을 메모리 풀(memory pool) 또는 블록 단위로 할당하여 연속된 메모리 공간에 배치하는 캐시 친화적(cache-friendly) 구현 방식이 고안되었다. 이러한 방식들은 데이터 지역성을 향상시켜 캐시 히트율을 높이고, 특히 수백만 개 이상의 대규모 데이터셋을 처리할 때 포인터 기반 구현에 비해 상당한 실질적 성능 향상을 가져온다.29

다음 표는 옥트리의 주요 연산에 대한 이론적 시간 복잡도를 요약한 것이다. 이 표는 데이터 분포가 성능에 미치는 영향을 명확히 보여주며, 특정 사용 사례에서 옥트리의 성능을 예측하고 다른 자료구조와 비교하는 데 유용한 기준을 제공한다.

연산 (Operation) 평균 시간 복잡도 (Average Case) 최악 시간 복잡도 (Worst Case) 비고 (Notes)
구축 (Build) O(NlogN) O(N2) 최악의 경우는 불균형 트리가 생성될 때 발생하며, 각 삽입이 $O(N)$에 가까워질 수 있다.
삽입 (Insert) O(logN) O(N) 데이터가 한쪽으로 치우쳐 트리의 깊이가 N에 비례하는 경우 발생한다.
삭제 (Delete) O(logN) O(N) 삽입 연산과 동일한 이유로 최악의 경우가 발생한다.
탐색 (Search) O(logN) O(N) 삽입 연산과 동일한 이유로 최악의 경우가 발생한다.
범위 탐색 (Range Query) O(logN+K) O(N) K는 결과 집합의 크기이며, 최악의 경우 모든 객체가 범위에 포함될 수 있다.

옥트리는 3차원 공간을 분할하는 여러 자료구조 중 하나이며, 각 자료구조는 고유한 분할 전략과 특성을 가지고 있어 특정 응용 분야에 더 적합할 수 있다. 옥트리의 상대적인 장단점을 이해하기 위해 k-d 트리, 경계 볼륨 계층(BVH), 그리고 균등 그리드와 비교 분석한다.

다음 표는 3차원 공간 데이터를 처리하는 데 사용되는 주요 자료구조들의 핵심적인 특징과 장단점을 요약하여 비교한다. 이는 특정 응용 프로그램의 요구사항에 가장 적합한 자료구조를 선택하는 데 실용적인 가이드라인을 제공한다.

특성 (Characteristic) 옥트리 (Octree) k-d 트리 (k-d Tree) BVH (Bounding Volume Hierarchy) 균등 그리드 / 공간 해싱
분할 방식 공간 분할 (재귀적 8분할) 공간 분할 (재귀적 이진 분할) 객체 분할 (계층적 그룹화) 공간 분hal (균일 격자)
트리 구조 8진 트리 (8-ary) 이진 트리 (Binary) 주로 이진 트리 계층 없음 (단일 레벨)
데이터 종속성 데이터 분포에 민감 데이터 분포에 매우 적응적 객체 형상/위치에 매우 적응적 데이터 분포에 비적응적
주요 장점 구현 상대적 용이, 규칙적 셀 데이터 적응성, 균형 트리 보장 용이 꽉 끼는 경계 볼륨, 광선 추적 효율 빠른 이웃 탐색(O(1)), 동적 객체 처리
주요 단점 불균일 데이터에 비효율, 경계 문제 동적 업데이트 복잡, 비등방성 셀 구축 비용 높음, 노드 간 겹침 발생 메모리 낭비(그리드), 해시 충돌(해싱)
대표적 사용 사례 복셀 렌더링, 포인트 클라우드, GIS 최근접 이웃 탐색(NNS) 실시간 광선 추적, 고정밀 충돌 감지 유체 시뮬레이션, 다수 동적 객체 관리

옥트리는 그 효율적인 공간 분할 능력 덕분에 다양한 컴퓨팅 분야에서 핵심적인 자료구조로 활용되고 있다. 옥트리는 단순히 점을 저장하는 구조를 넘어, 각 응용 분야의 특정 문제를 해결하기 위한 ‘메타 구조’ 또는 ‘프레임워크’로서 기능한다. 즉, 옥트리의 기본 ‘재귀적 8분할’ 구조는 동일하게 유지되지만, 각 노드에 어떤 종류의 데이터를 저장하고 어떻게 순회하는지에 따라 특정 도메인에 최적화된 솔루션으로 변모한다.

컴퓨터 그래픽스는 옥트리가 탄생하고 가장 활발하게 활용되어 온 분야이다. 3차원 가상 세계의 복잡성을 관리하고 실시간으로 렌더링하기 위한 다양한 문제 해결에 옥트리가 사용된다.

LiDAR 스캐너나 사진 측량 기술로 생성되는 포인트 클라우드는 수억 개에서 수십억 개에 이르는 점들의 집합으로, 원시 데이터 자체로는 다루기가 매우 어렵다. 옥트리는 이러한 대규모 포인트 클라우드를 효율적으로 관리하고 분석하기 위한 핵심 자료구조이다.

자율 주행 로봇이나 드론이 미지의 환경을 탐색하고 작업을 수행하기 위해서는 자신의 위치를 파악하고 주변 환경 지도를 동시에 생성하는 SLAM 기술이 필수적이다. 옥트리는 이 과정에서 환경을 표현하는 표준적인 방식으로 널리 사용된다.

옥트리는 40년 이상의 역사를 가진 고전적인 자료구조이지만, 하드웨어의 발전과 데이터 규모의 폭증이라는 시대적 요구에 부응하며 끊임없이 진화하고 있다. 현대의 옥트리 연구는 단순한 알고리즘 개선을 넘어, 병렬 컴퓨팅, 대규모 데이터 처리, 인공지능과의 융합 등 새로운 컴퓨팅 패러다임에 최적화된 형태로 발전하고 있다.

전통적인 옥트리의 한계를 극복하기 위해 다양한 변종들이 제안되었다.

현대 컴퓨팅 환경의 특성을 최대한 활용하기 위한 다양한 최적화 기법이 연구되고 있다.

옥트리는 최신 기술 트렌드와 결합하며 새로운 가능성을 열어가고 있다.

이러한 연구 동향들은 옥트리가 더 이상 단일 CPU 코어에서 순차적으로 실행되는 고전적인 자료구조가 아니라, 현대의 이기종(heterogeneous) 및 분산 컴퓨팅 환경에 최적화되고 인공지능과 융합되는 방향으로 끊임없이 진화하고 있음을 명확히 보여준다.

옥트리는 3차원 공간 데이터를 효율적으로 관리하기 위한 강력하고 다재다능한 자료구조로서, 지난 수십 년간 컴퓨터 과학의 여러 분야에서 그 가치를 입증해왔다. 옥트리의 핵심적인 장점과 내재적인 단점을 요약하면 다음과 같다.

장점:

단점:

특정 문제에 가장 적합한 공간 분할 자료구조를 선택하는 것은 시스템 전체의 성능을 좌우하는 중요한 설계 결정이다. 다음은 옥트리와 다른 주요 자료구조들 사이에서 선택하기 위한 실용적인 가이드라인이다.

옥트리 사용이 적합한 경우:

다른 자료구조를 고려해야 할 경우:

40년이 넘는 긴 역사에도 불구하고 옥트리는 사장되지 않고 오히려 현대 컴퓨팅의 발전에 발맞춰 끊임없이 진화하고 있는 살아있는 자료구조이다. 옥트리의 미래는 특히 인공지능 기술과의 깊은 융합에서 찾아볼 수 있다.

3차원 공간을 이해하고 생성하는 딥러닝 모델, 특히 신경 렌더링(Neural Rendering) 분야에서 옥트리는 강력한 공간적 사전 정보(spatial prior)를 제공하는 역할을 한다. 신경망이 비어있는 공간에 불필요한 연산을 낭비하지 않도록 안내하고, 장면의 구조를 계층적으로 인코딩하여 학습과 렌더링을 가속화하는 데 핵심적인 역할을 수행할 것이다.94 즉, 옥트리는 순수 기하학적 자료구조를 넘어, 3D-AI 모델을 위한 효율적인 ‘백본(backbone)’으로 자리매김할 가능성이 높다.

또한, 하드웨어 기술의 발전은 옥트리의 진화를 계속해서 촉진할 것이다. GPU, TPU와 같은 병렬 처리 장치에 더욱 최적화된 새로운 옥트리 변종과 라이브러리들이 등장하여, 실시간 인터랙티브 물리 시뮬레이션, 도시 규모의 디지털 트윈, 자율 주행 자동차의 실시간 환경 인식 등에서 처리할 수 있는 데이터의 규모와 복잡성의 한계를 계속해서 확장해 나갈 것으로 전망된다. 옥트리는 과거의 유산이 아니라, 미래의 3차원 디지털 세계를 구축하는 데 있어 여전히 필수적인 구성 요소로 남을 것이다.

  1. en.wikipedia.org, 8월 1, 2025에 액세스, https://en.wikipedia.org/wiki/Octree#:~:text=An%20octree%20is%20a%20tree,three%2Ddimensional%20analog%20of%20quadtrees.
  2. Octree - Wikipedia, 8월 1, 2025에 액세스, https://en.wikipedia.org/wiki/Octree
  3. Octree Insertion and Searching - GeeksforGeeks, 8월 1, 2025에 액세스, https://www.geeksforgeeks.org/dsa/octree-insertion-and-searching/
  4. Octrees: The Ultimate Spatial Data Structure - Number Analytics, 8월 1, 2025에 액세스, https://www.numberanalytics.com/blog/octrees-ultimate-spatial-data-structure
  5. Octree / PCL - adioshun, 8월 1, 2025에 액세스, https://adioshun.gitbooks.io/pcl/content/Tutorial/Octree/
  6. 4.2. How octree works - Castle Game Engine, 8월 1, 2025에 액세스, https://castle-engine.io/vrml_engine_doc/output/xsl/html/section.how_octree_works.html
  7. Octrees – Knowledge and References - Taylor & Francis, 8월 1, 2025에 액세스, https://taylorandfrancis.com/knowledge/Engineering_and_technology/Computer_science/Octrees/
  8. Introduction to Octrees - Wobbly Duck Studios, 8월 1, 2025에 액세스, https://www.wobblyduckstudios.com/Octrees.php
  9. Advanced Octrees 1: preliminaries, insertion strategies and maximum tree depth, 8월 1, 2025에 액세스, https://geidav.wordpress.com/2014/07/18/advanced-octrees-1-preliminaries-insertion-strategies-and-max-tree-depth/
  10. collision detection and oct trees : r/cpp_questions - Reddit, 8월 1, 2025에 액세스, https://www.reddit.com/r/cpp_questions/comments/1b271t6/collision_detection_and_oct_trees/
  11. Octrees for Efficient Spatial Analysis - Number Analytics, 8월 1, 2025에 액세스, https://www.numberanalytics.com/blog/octrees-efficient-spatial-analysis
  12. Why are oct trees so much more common than hash tables?, 8월 1, 2025에 액세스, https://computergraphics.stackexchange.com/questions/8364/why-are-oct-trees-so-much-more-common-than-hash-tables
  13. Geometric Modeling Using Octree Encoding - MIT Fab Lab, 8월 1, 2025에 액세스, http://fab.cba.mit.edu/classes/S62.12/docs/Meagher_octree.pdf
  14. The Octree Encoding Method for Efficient Solid Modeling. - DTIC, 8월 1, 2025에 액세스, https://apps.dtic.mil/sti/tr/pdf/ADA132472.pdf
  15. Mastering Octrees in Algorithm Design - Number Analytics, 8월 1, 2025에 액세스, https://www.numberanalytics.com/blog/ultimate-guide-to-octree-in-algorithm-design
  16. Mastering Octrees in Topological Robotics - Number Analytics, 8월 1, 2025에 액세스, https://www.numberanalytics.com/blog/ultimate-guide-octrees-topological-robotics
  17. Data Structure / Algorithm - 쿼드 트리 (Quadtree) 공간 분할 - joonyle99’s Blog, 8월 1, 2025에 액세스, https://joonyle99.github.io/datastructure_algorithm/DataStructure_Algorithm-Quadtree/
  18. ‘자 & 알/알고리즘’ 카테고리의 글 목록 (2 Page), 8월 1, 2025에 액세스, https://hyo-ue4study.tistory.com/category/%EC%9E%90%20%26%20%EC%95%8C/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98?page=2
  19. An interactive explanation of quadtrees. : r/programming - Reddit, 8월 1, 2025에 액세스, https://www.reddit.com/r/programming/comments/25ivi5/an_interactive_explanation_of_quadtrees/
  20. Name of the generalization of quadtree and octree? - Mathematics Stack Exchange, 8월 1, 2025에 액세스, https://math.stackexchange.com/questions/644032/name-of-the-generalization-of-quadtree-and-octree
  21. Octree-Node / 3DCollisions - gdbooks, 8월 1, 2025에 액세스, https://gdbooks.gitbooks.io/3dcollisions/content/Chapter5/dynamic_objects.html
  22. Octree - Open3D 0.17.0 documentation, 8월 1, 2025에 액세스, https://www.open3d.org/docs/0.17.0/tutorial/geometry/octree.html
  23. Octree - Open3D 0.13.0 documentation, 8월 1, 2025에 액세스, https://www.open3d.org/docs/0.13.0/tutorial/geometry/octree.html
  24. Octree, 8월 1, 2025에 액세스, https://www.cg.tuwien.ac.at/studentwork/VisFoSe98/eder/octree.htm
  25. Voxel Octree & Visualization - 기억 저장소 - 티스토리, 8월 1, 2025에 액세스, https://nature77s.tistory.com/20
  26. tutorials/OpenGL/Octree/Octree.cpp at master / gametutorials/tutorials - GitHub, 8월 1, 2025에 액세스, https://github.com/gametutorials/tutorials/blob/master/OpenGL/Octree/Octree.cpp
  27. Constructing an Octree Datastructure - MGhabboun’s Technical Blog, 8월 1, 2025에 액세스, https://mghabboun.wordpress.com/2017/02/27/constructing-an-octree-datastructure/
  28. 대용량 3차원 포인트 클라우드의 탐색을 위한 메모리 효율적인 옥트리의 설계 - Korea Science, 8월 1, 2025에 액세스, https://koreascience.kr/article/JAKO201315463255209.pdf
  29. Adaptive Fluid Simulation Using a Linear Octree Structure, 8월 1, 2025에 액세스, https://www.cs.jhu.edu/~misha/ReadingSeminar/Papers/Flynn18.pdf
  30. octree-based frustum culling slower than naive? : r/GraphicsProgramming - Reddit, 8월 1, 2025에 액세스, https://www.reddit.com/r/GraphicsProgramming/comments/1ia2rhd/octreebased_frustum_culling_slower_than_naive/
  31. Statistical optimization of octree searches - Thomas Lewiner, 8월 1, 2025에 액세스, http://thomas.lewiner.org/pdfs/octree_cgf.pdf
  32. www.sci.utah.edu, 8월 1, 2025에 액세스, https://www.sci.utah.edu/~knolla/octsurvey.pdf
  33. An interactive explanation of quadtrees (2014) - Hacker News, 8월 1, 2025에 액세스, https://news.ycombinator.com/item?id=34786075
  34. An Octree-Based Spatial Index for Space-Based Space Surveillance Coverage Volume Computation, 8월 1, 2025에 액세스, https://arc.aiaa.org/doi/pdfplus/10.2514/6.2024-1675
  35. A Fast Algorithm to Display Octrees - CSE, IIT Bombay, 8월 1, 2025에 액세스, https://www.cse.iitb.ac.in/~sharat/icvgip.org/icvgip00/G-51.pdf
  36. 선형 Octree에 의한 CT 영상의 3차원 재구성 및 표현, 8월 1, 2025에 액세스, https://koreascience.kr/article/JAKO198915875835751.pdf
  37. Cornerstone: Octree Construction Algorithms for Scalable Particle Simulations - arXiv, 8월 1, 2025에 액세스, https://arxiv.org/pdf/2307.06345
  38. Octree에 대해 설명해주세요. - velog, 8월 1, 2025에 액세스, https://velog.io/@tmdwns8840/Octree%EC%97%90-%EB%8C%80%ED%95%B4-%EC%84%A4%EB%AA%85%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94
  39. What is the logic to recursively subdivide an octree? - Stack Overflow, 8월 1, 2025에 액세스, https://stackoverflow.com/questions/48720767/what-is-the-logic-to-recursively-subdivide-an-octree
  40. Lodestar - Tech - Octree Algorithms, 8월 1, 2025에 액세스, https://www.cg.tuwien.ac.at/research/vr/lodestar/tech/octree/
  41. What are common benefits and uses of Octrees? : r/GraphicsProgramming - Reddit, 8월 1, 2025에 액세스, https://www.reddit.com/r/GraphicsProgramming/comments/10mf504/what_are_common_benefits_and_uses_of_octrees/
  42. Loose octrees for frustum culling - Need some advice - Stack Overflow, 8월 1, 2025에 액세스, https://stackoverflow.com/questions/5297721/loose-octrees-for-frustum-culling-need-some-advice
  43. Using Octrees and A* for Efficient Pathfinding - YouTube, 8월 1, 2025에 액세스, https://www.youtube.com/watch?v=gNmPmWR2vV4&pp=0gcJCfwAo7VqN5tD
  44. 포인트 탐색과 배경제거 (60%) - Tutorial, 8월 1, 2025에 액세스, https://pcl.gitbook.io/tutorial/part-2/part02-chapter02
  45. Octree-kdTree / 3D_People_Detection - adioshun, 8월 1, 2025에 액세스, https://adioshun.gitbooks.io/3d_people_detection/content/ebook/part02/part02-chapter02.html
  46. Subdividing an octree branch is easy, as the old value is simply replaced by the index to the new data, but how can I handle the gaps in the data created by merging an octree branch? The 8 or more elements will suddenly become just 1 and there will be gaps in the data : r/VoxelGameDev - Reddit, 8월 1, 2025에 액세스, https://www.reddit.com/r/VoxelGameDev/comments/st8vjp/subdividing_an_octree_branch_is_easy_as_the_old/
  47. A Fast, Lightweight, and Dynamic Octree for Proximity Search - arXiv, 8월 1, 2025에 액세스, https://arxiv.org/html/2309.08315v2
  48. Question on complexity of Barnes-Hut algorithm - Software Engineering Stack Exchange, 8월 1, 2025에 액세스, https://softwareengineering.stackexchange.com/questions/382312/question-on-complexity-of-barnes-hut-algorithm
  49. Mastering Octrees in Computational Geometry - Number Analytics, 8월 1, 2025에 액세스, https://www.numberanalytics.com/blog/ultimate-guide-octrees-computational-geometry
  50. Why would one ever use an Octree over a KD-tree?, 8월 1, 2025에 액세스, https://cstheory.stackexchange.com/questions/8470/why-would-one-ever-use-an-octree-over-a-kd-tree
  51. Spatial data structures: Octrees, BSP, and k-d trees / Tim Henning Observable, 8월 1, 2025에 액세스, https://observablehq.com/@2talltim/spatial-data-structures-octrees-bsp-and-k-d-trees
  52. kd-트리 - 코딩연습블로그 - 티스토리, 8월 1, 2025에 액세스, https://coding6467.tistory.com/13
  53. Why specifically are k-d trees preferred in ray tracing and octrees in collision? - Reddit, 8월 1, 2025에 액세스, https://www.reddit.com/r/gameenginedevs/comments/1789f54/why_specifically_are_kd_trees_preferred_in_ray/
  54. kd-tree vs octree for 3d radius search - Stack Overflow, 8월 1, 2025에 액세스, https://stackoverflow.com/questions/17998103/kd-tree-vs-octree-for-3d-radius-search
  55. Difference between BVH and Octree/K-d trees - Computer Graphics Stack Exchange, 8월 1, 2025에 액세스, https://computergraphics.stackexchange.com/questions/7828/difference-between-bvh-and-octree-k-d-trees
  56. Ray Tracing From Scratch: Grid & BVH Comparison by Muhammed Can Erbudak - Medium, 8월 1, 2025에 액세스, https://medium.com/@muhammedcan.erbudak/ray-tracing-from-scratch-grid-bvh-comparison-faa1c27f2832
  57. Bounding volume hierarchy - Wikipedia, 8월 1, 2025에 액세스, https://en.wikipedia.org/wiki/Bounding_volume_hierarchy
  58. Bounding Volume Hierarchy: BVH (part 2) - Introduction to Acceleration Structures, 8월 1, 2025에 액세스, https://www.scratchapixel.com/lessons/3d-basic-rendering/introduction-acceleration-structure/bounding-volume-hierarchy-BVH-part2.html
  59. Lecture-19-BVH and Octrees, 8월 1, 2025에 액세스, https://courses.grainger.illinois.edu/cs419/sp2017/Lecture-19-BVH%20and%20Octrees.pdf
  60. When to use Binary Space Partitioning, Quadtree, Octree? - Stack Overflow, 8월 1, 2025에 액세스, https://stackoverflow.com/questions/99796/when-to-use-binary-space-partitioning-quadtree-octree
  61. An evaluation of Kd-Trees vs Bounding Volume Hierarchy (BVH) acceleration structures in modern CPU architectures - SciELO, 8월 1, 2025에 액세스, https://www.scielo.sa.cr/scielo.php?script=sci_arttext&pid=S0379-39822023000200086
  62. Octree-based Collision Detection in iMSTK - Kitware, Inc., 8월 1, 2025에 액세스, https://www.kitware.com/octree-collision-imstk/
  63. Matth3wThomson/Octree: A simple 3d Physics Simulation created for a uni module - GitHub, 8월 1, 2025에 액세스, https://github.com/Matth3wThomson/Octree
  64. Frustum Culling - LearnOpenGL, 8월 1, 2025에 액세스, https://learnopengl.com/Guest-Articles/2021/Scene/Frustum-Culling
  65. A Recursive Approach for Octree Traversal, 8월 1, 2025에 액세스, https://chiranjivi.tripod.com/octrav.html
  66. An Adaptive Octree for Efficient Ray Tracing - Visualization and Computer Graphics, IEEE Transactions on, 8월 1, 2025에 액세스, https://www.cs.drexel.edu/~david/Classes/Papers/IEEE_TOVCG95_v1n4.pdf
  67. Interactive Isosurface Ray Tracing of Large Octree Volumes - Scientific Computing and Imaging Institute, 8월 1, 2025에 액세스, https://www.sci.utah.edu/~wald/Publications/2006/OctIso/octiso.pdf
  68. Efficient octree traversal, 8월 1, 2025에 액세스, https://bertolami.com/files/octrees.pdf
  69. Octree Algorithm, 8월 1, 2025에 액세스, https://web.cs.wpi.edu/~matt/courses/cs563/talks/color_quant/CQoctree.html
  70. (PDF) Towards Efficient Implementation of an Octree for a Large 3D Point Cloud, 8월 1, 2025에 액세스, https://www.researchgate.net/publication/329603314_Towards_Efficient_Implementation_of_an_Octree_for_a_Large_3D_Point_Cloud
  71. Towards Efficient Implementation of an Octree for a Large 3D Point Cloud - PMC, 8월 1, 2025에 액세스, https://pmc.ncbi.nlm.nih.gov/articles/PMC6308722/
  72. Hierarchical Data Structures (Octrees) for Big Data - YouTube, 8월 1, 2025에 액세스, https://www.youtube.com/watch?v=NnJZUZx0xqM
  73. 옥트리 기반의 해마의 국부적 형상 분석 - Korea Science, 8월 1, 2025에 액세스, https://koreascience.kr/article/CFKO200411923025551.pdf
  74. (PDF) Fast Out‐of‐Core Octree Generation for Massive Point Clouds - ResearchGate, 8월 1, 2025에 액세스, https://www.researchgate.net/publication/343449632_Fast_Out-of-Core_Octree_Generation_for_Massive_Point_Clouds
  75. OCTREE-BASED APPROACH FOR REAL-TIME 3D INDOOR MAPPING USING RGB-D VIDEO DATA, 8월 1, 2025에 액세스, https://isprs-archives.copernicus.org/articles/XLVIII-1-W1-2023/183/2023/isprs-archives-XLVIII-1-W1-2023-183-2023.pdf
  76. Accelerated Mapping and Illumination for a Point … - DSpace@EWHA, 8월 1, 2025에 액세스, https://dspace.ewha.ac.kr/handle/2015.oak/270903
  77. 이동로봇을 위한 SLAM 기술, 8월 1, 2025에 액세스, http://icros.org/Newsletter/202201/5.%EB%A1%9C%EB%B4%87%EA%B8%B0%EC%88%A0%EB%A6%AC%EB%B7%B0.pdf
  78. prime-slam/octreelib: Library for representing point clouds as OcTrees in SLAM. - GitHub, 8월 1, 2025에 액세스, https://github.com/prime-slam/octreelib
  79. Octree maps built by RDS-SLAM. Download Scientific Diagram - ResearchGate, 8월 1, 2025에 액세스, https://www.researchgate.net/figure/Octree-maps-built-by-RDS-SLAM_fig4_348368507
  80. www.numberanalytics.com, 8월 1, 2025에 액세스, https://www.numberanalytics.com/blog/ultimate-guide-to-octree-in-algorithm-design#:~:text=Geographic%20Information%20Systems%20(GIS)%3A,%2C%20tracking%2C%20and%20scene%20understanding.
  81. View of Application of the Properties of an Organized Point Cloud in an Octree in Solving Geodetic Tasks - Journal of Electrical Systems, 8월 1, 2025에 액세스, https://journal.esrgroups.org/jes/article/view/7491/5143
  82. What Is Rapid Octree Meshing? - Ansys, 8월 1, 2025에 액세스, https://www.ansys.com/blog/what-is-rapid-octree-meshing
  83. Octree-Based Shifted Boundary Method for Multiphysics Simulations Using Linearized Navier-Stokes in Complex Geometries - ResearchGate, 8월 1, 2025에 액세스, https://www.researchgate.net/publication/387670006_Octree-Based_Shifted_Boundary_Method_for_Multiphysics_Simulations_Using_Linearized_Navier-Stokes_in_Complex_Geometries
  84. What’s the difference between a ‘regular’ octree and a ‘sparse voxel octree?’ - Reddit, 8월 1, 2025에 액세스, https://www.reddit.com/r/VoxelGameDev/comments/16u132r/whats_the_difference_between_a_regular_octree_and/
  85. Sparse voxel octree - Wikipedia, 8월 1, 2025에 액세스, https://en.wikipedia.org/wiki/Sparse_voxel_octree
  86. A Sparse Voxel Octree-Based Framework for Computing Solar Radiation Using 3D City Models - MDPI, 8월 1, 2025에 액세스, https://www.mdpi.com/2220-9964/6/4/106
  87. Efficient Sparse Voxel Octrees – Analysis, Extensions, and Implementation - Research at NVIDIA, 8월 1, 2025에 액세스, https://research.nvidia.com/sites/default/files/pubs/2010-02_Efficient-Sparse-Voxel/laine2010tr1_paper.pdf
  88. 라이다 점군의 효율적 검색을 위한 CUDA 기반 옥트리 알고리듬 구현 - 대한원격탐사학회지, 8월 1, 2025에 액세스, https://kiss.kstudy.com/Detail/Ar?key=3649677
  89. Fast Collision Detection Method with Octree-Based Parallel Processing in Unity3D - MDPI, 8월 1, 2025에 액세스, https://www.mdpi.com/2673-4591/89/1/37
  90. Sparse Voxel Octree, 8월 1, 2025에 액세스, https://eisenwave.github.io/voxel-compression-docs/svo/svo.html
  91. A Domain Adjusting Region Octree: Indexing a stream of unpredictable point cloud data for line-of-sight analysis - DiVA portal, 8월 1, 2025에 액세스, http://www.diva-portal.org/smash/get/diva2:1895902/FULLTEXT01.pdf
  92. [2306.05133] Octree-based hierarchical sampling optimization for the volumetric super-resolution of scientific data - arXiv, 8월 1, 2025에 액세스, https://arxiv.org/abs/2306.05133
  93. An autonomous navigation method for orchard mobile robots based on octree 3D point cloud optimization - PMC - PubMed Central, 8월 1, 2025에 액세스, https://pmc.ncbi.nlm.nih.gov/articles/PMC11746033/
  94. Octree-based 3D Gaussian Splatting for Robust Object-level 3D Reconstruction Under Strong Lighting - arXiv, 8월 1, 2025에 액세스, https://arxiv.org/html/2406.18199v1
  95. SIGGRAPH에서 시뮬레이션과 생성형 AI의 최신 발전 사항을 발표하는 NVIDIA Research, 8월 1, 2025에 액세스, https://blogs.nvidia.co.kr/blog/siggraph-2024-ai-graphics-research/
  96. [2406.08527] Optimized Feature Generation for Tabular Data via LLMs with Decision Tree Reasoning - arXiv, 8월 1, 2025에 액세스, https://arxiv.org/abs/2406.08527
  97. [자료구조] 5. 트리(Tree), 8월 1, 2025에 액세스, https://levell1.github.io/data%20structure/Tree/
  98. 3D모델링기초(2), 8월 1, 2025에 액세스, https://www.kunjang.ac.kr/default/common/file_download.jsp?SITE_NUM=&MOD_NUM=720&bf_num=31443267
  99. CG351-551 Quad and Oct-trees: Disadvantages of Octrees., 8월 1, 2025에 액세스, http://euklid.mi.uni-koeln.de/c/mirror/www.cs.curtin.edu.au/units/cg351-551/notes/lect5j1.html
  100. Mastering Octrees in Computational Geometry - Number Analytics, 8월 1, 2025에 액세스, https://www.numberanalytics.com/blog/mastering-octrees-computational-geometry
  101. (PDF) Bounding volume hierarchies versus Kd-trees on contemporary many-core architectures - ResearchGate, 8월 1, 2025에 액세스, https://www.researchgate.net/publication/282678485_Bounding_volume_hierarchies_versus_Kd-trees_on_contemporary_many-core_architectures