홈 예제 스크린샷 사용자 매뉴얼 Bluesky 로고 YouTube ☰
OghmaNano 유기/페로브스카이트 태양전지, OFET 및 OLED 시뮬레이션 다운로드 Quick Start guide

광학 시스템에서 광선 추적이 작동하는 원리

1. 서론

OghmaNano showing 3D ray tracing through a Cooke Triplet lens
OghmaNano에서의 전체 3차원 광선 추적 과정. 광선들은 광원에서 방출된 뒤 다중 요소로 구성된 광학 시스템을 통과하여 검출기 평면에 기록된다.
Light bending by refraction at material interfaces
굴절 현상은 광선이 서로 다른 굴절률을 갖는 매질들 사이를 통과할 때 그 진행 방향이 변하게 하는 현상입니다. 복잡한 광학 시스템에서는 다수의 표면을 통한 반복적인 굴절 과정이 최종 이미지 형성 및 광출력 분포를 결정하게 됩니다.

광학 시스템에서의 광선 추적은 본질적으로 3차원 공간에서 기하광학 법칙들을 반복적으로 적용하는 과정이다. 광선은 위치 \(\mathbf{x}\), 방향 \(\mathbf{k}\), 파장 \(\lambda\), 그리고 광출력 \(P\)에 의해 정의된다. 이 광선이 시나리오 내에서 전파될 때 굴절, 반사, 흡수 및 클리핑 현상을 통해 표면들과 상호작용하게 된다.

각 인터페이스에서 광선의 진행 방향은 스넬의 법칙에 의해 결정된다. 이 법칙의 스칼라 형태는 다음과 같다:

\[ n_1 \sin(\theta_1) = n_2 \sin(\theta_2) \]

실제 시뮬레이션에서는 광선 추적이 완전한 3차원 공간에서 수행된다. 이를 위해 입사 방향 \(\mathbf{k}_i\), 표면 법선 \(\mathbf{n}\), 굴절된 방향 \(\mathbf{k}_t\)를 명시적으로 계산하는 벡터 공식이 필요하다. 일반적으로 사용되는 공식의 한 예는 다음과 같다:

\[ \mathbf{k}_t = \frac{n_1}{n_2}\mathbf{k}_i + \left(\frac{n_1}{n_2}\cos\theta_i - \cos\theta_t\right)\mathbf{n} \]

여기서 \(\cos\theta_i = -\mathbf{k}_i \cdot \mathbf{n}\)과 \(\cos\theta_t\)는 스넬의 법칙에 따라 결정된다. 이 연산은 시스템 내 모든 계면에서 수행되며, 이를 통해 렌즈, 박막 및 구조화된 표면들로 구성된 임의로 복잡한 구조물을 통과하는 광선의 경로를 추적할 수 있다(?? 및 ?? 참조).

방향 변화 외에도 각 상호작용 과정에서 광출력이 반사광선과 투과광선 사이에 재분배된다. 이 과정은 프레넬 방정식에 의해 결정된다. 비편광광의 경우 다음과 같은 간결한 형태가 적용된다:

\[ R = \left|\frac{n_1 \cos\theta_i - n_2 \cos\theta_t}{n_1 \cos\theta_i + n_2 \cos\theta_t}\right|^2, \quad T = 1 - R \]

일반적으로 편광 의존성 계수 \(R_s, R_p\) 및 \(T_s, T_p\)를 활용할 수 있다. 이 계수들은 각 경계면에서 광출력이 어떻게 분배되는지를 결정하며 손실률, 투과율 및 효율성을 예측하는 데 필수적이다.

2. 단순한 무차별적 광선 추적 방법

원칙적으로 광선 추적은 매우 간단한 과정입니다. 즉, 광선을 전파시킨 뒤 다음 교차점을 찾고 스넬의 법칙 및 프레넬 방정식을 적용한 후 계속 진행하는 것입니다. 하지만 실제 광학 시스템(예: OLED, 렌즈, 또는 각종 소자에서의 광추출 현상)을 시뮬레이션할 때는 수십만 혹은 수백만 개의 광선을 추적해야 하는 경우가 많습니다. 이때 가장 큰 계산 부하를 초래하는 요소는 물리적 현상 자체가 아니라 광선이 가장 먼저 교차하는 객체를 찾아내는 탐색 문제입니다.

이산화된 장면에서는 표면들이 일반적으로 삼각형 메시 형태로 표현된다. 단순한 구현 방식에서는 장면 내의 모든 삼각형에 대해 광선과의 교차 여부를 검사하게 된다. 광선 \(\mathbf{r}(t) = \mathbf{o} + t\mathbf{d}\)과 꼭짓점들 \(\mathbf{v}_0, \mathbf{v}_1, \mathbf{v}_2\)로 정의되는 삼각형 간의 교차점은 바리센트릭 형태로 표현될 수 있다.

\[ \mathbf{o} + t\mathbf{d} = \mathbf{v}_0 + u(\mathbf{v}_1 - \mathbf{v}_0) + v(\mathbf{v}_2 - \mathbf{v}_0), \quad u,v \ge 0,\; u+v \le 1 \]

\(t,u,v\)을 구하는 과정(예: 뫼러-트럼보어 알고리즘 활용)을 통해 광선이 삼각형과 교차하는지 여부를 판단할 수 있다. 모든 삼각형에 대해 무차별 탐색을 수행할 경우, 광선 하나당 계산량은 \(N\)개의 삼각형에 대해 \(\mathcal{O}(N)\) 수준으로 증가하게 되며 이는 곧 계산상으로 불가능한 수준에 이르게 된다.

3. 보다 빠른 광선 추적

Bounding volume hierarchy (BVH) showing a ray intersecting bounding boxes before testing individual triangles
경계 체적 계층 구조(BVH)는 기하체들을 중첩된 경계 상자들로 감싸 광선 추적 속도를 향상시킨다. 먼저 광선이 크기가 큰 경계 상자들과 교차하는지 확인하며, 해당 상자와 교차할 경우에만 더 작은 상자들로 진입하여 최종적으로 개별 삼각형들과의 교차 여부를 검사한다. 만약 어떤 영역의 경계 상자들과도 광선이 교차하지 않는다면 해당 영역 전체를 처리 과정에서 생략할 수 있다.

이를 해결하기 위해 장면 데이터는 경계 체적 계층 구조(BVH)와 같은 공간 가속 구조를 활용해 분할됩니다. 기하체는 재귀적으로 축 정렬 경계 상자(AABB)들로 나뉘어 트리 구조를 형성합니다. 각 노드에는 특정 삼각형 집합을 포함하는 경계 체적이 존재합니다. 이후 광선 탐색은 계층적으로 수행되는데, 먼저 경계 상자와의 교차 여부를 확인한 뒤 교차가 발생했을 경우에만 하위 노드들로 내려가게 됩니다.

이를 통해 실제로는 광선-기하체 교차 검사의 복잡도가 \(\mathcal{O}(N)\)에서 \(\mathcal{O}(\log N)\) 수준으로 감소하여 시뮬레이션 속도가 크게 향상됩니다. BVH 구조의 개략도는 ??에 제시되어 있습니다.

추가적인 최적화 기법으로는 CPU 코어 간 멀티스레딩, 광선 뒤쪽에 위치한 삼각형들의 사전 제외 처리, 그리고 파장별 배치 처리가 있다. 그럼에도 불구하고 핵심 문제는 여전히 광선이 처음으로 만나게 되는 표면을 효율적으로 찾아내는 탐색 문제로 남아 있다.

4. 사용자 입장에서 이는 어떤 의미인가요? (즉, 어떻게 하면 시뮬레이션 속도를 높일 수 있나요?)

광학 시뮬레이션 환경을 설정할 때 성능은 사용되는 기하학적 프리미티브의 개수에 크게 영향을 받습니다. 따라서 물리적 정확도를 유지하면서도 삼각형 개수를 최소화하는 것이 바람직합니다. 예를 들어 CAD 모델을 가져올 때 볼트나 나사산, 미세한 기계적 구조와 같이 불필요한 세부 사항들은 반드시 제거해야 합니다.

추가되는 각 삼각형은 광선-기하체 교차 계산 비용을 증가시킨다. 여러 파장이나 대규모 광선 집합을 시뮬레이션할 경우 이러한 비용은 더욱 가중된다. 따라서 기존의 CAD 워크플로우와는 달리, 효율적인 광학 모델링을 위해서는 광학적 관련성만을 반영하도록 기하체를 신중히 단순화해야 한다.

요약하자면, 광학 시스템에서의 광선 추적 과정은 3차원 공간에서의 스넬의 법칙 적용, 프레넬 반사 및 투과 현상의 계산, 그리고 장면 내 기하체에 대한 효율적인 탐색으로 구성된다. 이들 요소들이 결합되어 OghmaNano 내에서 물리 기반 광학 시뮬레이션의 기반이 된다.