판 비교
1번째 줄 근처
추가: ## 개요
추가: 광선 추적(ray tracing)은 3차원 컴퓨터 그래픽스에서 가상의 광선을 발사하여 빛의 전달을 모델링함으로써 디지털 이미지를 생성하는 렌더링 알고리즘이다[1]. 글로벌 일루미네이션의 하위 개념에 속하며, 편향되지 않은 렌더링(unbiased rendering)과 3차원 컴퓨터 그래픽스 전반에 걸쳐 사용된다[1]. 광선 투사(ray casting), 재귀적 광선 추적(recursive ray tracing), 분산 광선 추적(distribution ray tracing), 광자 매핑(photon mapping), 경로 추적(path tracing) 등 다양한 광선 추적 기반 렌더링 기술이 존재한다[2][3]. 이들 기술은 계산 비용과 시각적 충실도의 스펙트럼에서 스캔라인 렌더링(scanline rendering) 방식보다 일반적으로 느리지만 더 높은 충실도를 제공한다[2][3]. 따라서 초기에는 정지 컴퓨터 생성 이미지(CGI)나 영화·텔레비전 시각 효과(VFX)처럼 렌더링에 오랜 시간이 걸리는 것을 감수할 수 있는 분야에 먼저 도입되었으며, 프레임당 렌더링 속도가 중요한 비디오 게임 같은 실시간 응용 프로그램에는 덜 적합했다[2][3]. 그러나 2018년부터 실시간 광선 추적을 위한 하드웨어 가속이 새로운 상용 그래픽 카드에 표준화되었고, 그래픽 API도 이에 맞춰 개발되어 하이브리드 광선 추적과 래스터화 기반 렌더링을 프레임 렌더링 시간의 영향을 줄이면서 게임 등 실시간 응용 프로그램에서 사용할 수 있게 되었다[2][3].
추가:
추가: 광선 추적은 반사, 굴절, 부드러운 그림자(soft shadows), 빛 산란(scattering), 피사계 심도(depth of field), 모션 블러(motion blur), 코스틱(caustics), 앰비언트 어클루전(ambient occlusion), 분산 현상(색수차 등) 등 다양한 광학 효과를 시뮬레이션할 수 있다[2][3]. 또한 음파를 광파와 유사하게 추적하는 데도 사용할 수 있어, 사실적인 잔향과 메아리를 렌더링함으로써 비디오 게임에서 더욱 몰입감 있는 사운드 디자인을 위한 실행 가능한 옵션이 된다[2][3]. 실제로 거의 선형적인 움직임을 가진 물리적 파동 또는 입자 현상은 광선 추적으로 시뮬레이션될 수 있다[2][3]. 도메인 전체에서 빛을 샘플링하는 광선 추적 기반 렌더링 기술은 일반적으로 여러 광선을 생성하며, 결과적인 노이즈를 줄이기 위해 디노이징(denoising) 기술에 의존하는 경우가 많다[2][3].
추가:
추가: ## 작동 방식과 유형
추가:
추가: ### 기본 원리
추가:
추가: 광선 추적은 광선 투사 또는 스캔라인 렌더링 기술보다 더 사실적인 방식으로 3차원 컴퓨터 그래픽스 환경에서 시각적 이미지를 생성하는 방법을 설명한다[2][3]. 이 방법은 가상의 눈(eye)에서 가상 화면의 각 화소(pixel)를 통해 경로를 추적하고, 그를 통해 보이는 물체의 색상을 계산함으로써 작동한다[2][3].
추가:
추가: 장면은 프로그래머나 시각 예술가(일반적으로 중간 도구를 사용)에 의해 수학적으로 설명된다[2][3]. 장면은 디지털 사진과 같은 수단을 통해 캡처된 이미지 및 모델의 데이터를 통합할 수도 있다[2][3].
추가:
추가: 일반적으로 각 광선은 장면의 모든 객체 중 일부와의 교차 여부를 테스트해야 한다[2][3]. 가장 가까운 객체가 식별되면, 알고리즘은 교차점에서 들어오는 빛을 추정하고, 객체의 재료 속성을 조사하며, 이 정보를 결합하여 픽셀의 최종 색상을 계산한다[2][3]. 특정 조명 알고리즘 및 반사성 또는 반투명 재료는 더 많은 광선을 장면에 다시 투사해야 할 수도 있다[2][3].
추가:
추가: 처음에는 카메라를 향하는 것이 아니라 카메라에서 멀리 광선을 보내는 것이 직관적이지 않거나 "역방향"처럼 보일 수 있다(실제 빛이 현실에서 하는 것처럼). 하지만 그렇게 하는 것이 훨씬 더 효율적이다[2][3]. 주어진 광원에서 나오는 압도적인 대다수의 광선은 시청자의 눈에 직접 들어오지 않으므로, "정방향" 시뮬레이션은 기록되지 않는 광선 경로에 엄청난 양의 계산을 낭비할 수 있다[2][3]. 따라서 광선 추적에서 사용되는 단축키는 주어진 광선이 뷰 프레임과 교차한다고 전제하는 것이다. 최대 반사 횟수에 도달하거나 광선이 교차 없이 특정 거리를 이동한 후에는 광선은 더 이상 이동하지 않고 픽셀의 값이 업데이트된다[2][3].
추가:
추가: ### 직사각형 뷰포트를 위한 광선 계산
추가:
추가: 입력으로는 눈 위치 \(E \in \mathbb{R}^3\), 대상 위치 \(T \in \mathbb{R}^3\), 시야각 \(\theta \in [0, \pi]\) (인간의 경우 \(\approx \pi/2\) rad = 90°로 가정), 뷰포트 수직 및 수평 방향의 정사각형 픽셀 수 \(m, k \in \mathbb{N}\), 실제 픽셀 인덱스 \(i, j \in \mathbb{N}\) (1 ≤ i ≤ k, 1 ≤ j ≤ m), 위아래를 나타내는 수직 벡터 \(\vec{v} \in \mathbb{R}^3\) (보통 \(\vec{v} = [0, 1, 0]\)), 뷰포트 회전을 결정하는 롤 구성 요소 C 등이 있다[2][3].
추가:
추가: 아이디어는 각 뷰포트 픽셀의 중심 \(P_{ij}\)의 위치를 찾는 것이다. 이를 통해 눈 \(E\)를 통과하여 해당 픽셀을 통과하는 선을 찾고, 최종적으로 점 \(E\)와 벡터 \(\vec{R}_{ij} = P_{ij} - E\) (또는 그 정규화 \(\vec{r}_{ij}\))로 설명되는 광선을 얻을 수 있다[2][3].
추가:
추가: 먼저 왼쪽 아래 뷰포트 픽셀 \(P_{1m}\)의 좌표를 찾아야 하고, 픽셀 크기를 곱한 뷰포트와 평행한 방향(벡터 \(\vec{b}_n\), \(\vec{v}_n\))을 따라 이동하여 다음 픽셀을 찾아야 한다[2][3]. 눈과 뷰포트 사이의 거리 \(d\)를 포함하는 공식이 제시되지만, 이 값은 광선 정규화 \(\vec{r}_{ij}\) 중에 줄어들 것이므로 \(d = 1\)로 받아들이고 계산에서 제거하는 것이 좋다[2][3].
추가:
추가: 사전 계산으로 벡터 \(\vec{t}\)와 뷰포트에 평행한 벡터 \(\vec{b}, \vec{v}\)를 찾아 정규화한다[2][3].
추가:
추가: \[
추가: \vec{t} = T - E, \quad \vec{b} = \vec{t} \times \vec{v}
추가: \]
추가: \[
추가: \vec{t}_n = \frac{\vec{t}}{\|\vec{t}\|}, \quad \vec{b}_n = \frac{\vec{b}}{\|\vec{b}\|}, \quad \vec{v}_n = \vec{t}_n \times \vec{b}_n
추가: \]
추가:
추가: 뷰포트 중심 \(C = E + \vec{t}_n d\)임을 유의하고, 다음으로 종횡비 \(\frac{m-1}{k-1}\)의 역수를 포함하여 뷰포트 크기 \(h_x, h_y\)를 2로 나눈 값을 계산한다[2][3].
추가:
추가: \[
추가: g_x = \frac{h_x}{2} = d \tan \frac{\theta}{2}, \quad g_y = \frac{h_y}{2} = g_x \frac{m-1}{k-1}
추가: \]
추가:
추가: 다음으로 뷰포트에 평행한 방향(\(\vec{b}, \vec{v}\))을 따라 다음 픽셀 이동 벡터 \(\vec{q}_x, \vec{q}_y\)와 왼쪽 아래 픽셀 중심 \(\vec{p}_{1m}\)을 계산한다[2][3].
추가:
추가: \[
추가: \vec{q}_x = \frac{2 g_x}{k-1} \vec{b}_n, \quad \vec{q}_y = \frac{2 g_y}{m-1} \vec{v}_n, \quad \vec{p}_{1m} = \vec{t}_n d - g_x \vec{b}_n - g_y \vec{v}_n
추가: \]
추가:
추가: 최종적으로 각 픽셀 중심 \(P_{ij}\)와 광선 벡터 \(\vec{R}_{ij}\)는 다음과 같이 구한다[2][3].
추가:
추가: \[
추가: P_{ij} = \vec{p}_{1m} + (i-1)\vec{q}_x + (j-1)\vec{q}_y, \quad \vec{R}_{ij} = P_{ij} - E
추가: \]
추가:
추가: ### 주요 유형
추가:
추가: 자료에 언급된 광선 추적 기반 렌더링 기술의 유형은 다음과 같다[2][3].
추가:
추가: - **광선 투사(ray casting)**: 비재귀적인 광선 추적으로, 주 시야 결정과 그림자 판별에 사용된다. 아서 아펠이 1968년 처음 제안했다.
추가: - **재귀적 광선 추적(recursive ray tracing)**: 거울 반사와 굴절을 위해 광선을 재귀적으로 추적한다. 터너 위티드가 1979년 최초로 시연했다.
추가: - **분산 광선 추적(distribution ray tracing)**: 광선을 분산시켜 부드러운 그림자, 피사계 심도, 모션 블러, 광택 있는 반사 등을 시뮬레이션한다.
추가: - **광자 매핑(photon mapping)**: 광원에서 광자를 발사하여 장면 전체의 조명 정보를 저장한 후 렌더링에 활용한다.
추가: - **경로 추적(path tracing)**: 렌더링 방정식을 풀기 위해 광선 경로를 확률적으로 샘플링하는 편향되지 않은 렌더링 기법으로, 전역 조명을 물리적으로 정확하게 시뮬레이션한다.
추가:
추가: ## 사례
추가:
추가: 자료에 명시적으로 언급된 광선 추적 적용 사례는 다음과 같다.
추가:
추가: - **MAGI/SynthaVision Sampler (1974)**: MAGI가 제작한 초기 애니메이션 비디오로, 광선 추적을 사용해 입체의 음영 처리된 그림을 생성했다[2][3].
추가: - **The Compleat Angler (1979)**: 터너 위티드가 벨 연구소에서 제작한 재귀적 광선 추적 영화로, 거울 반사, 굴절, 그림자, 안티앨리어싱을 시연했다[2][3].
추가: - **몬스터 하우스 (Monster House, 2006)**: 경로 추적을 사용하여 완전히 렌더링된 초기 장편 영화[2][3].
추가: - **하늘에서 음식이 내린다면 (Cloudy with a Chance of Meatballs, 2009)**: 경로 추적으로 완전히 렌더링된 장편 영화[2][3].
추가: - **몬스터 대학교 (Monsters University, 2013)**: 경로 추적으로 완전히 렌더링된 장편 영화[2][3].
추가:
추가: 자료에는 2018년 이후 하드웨어 가속 실시간 광선 추적이 상용 그래픽 카드에 표준화되어 게임 등 실시간 응용 프로그램에서 하이브리드 광선 추적과 래스터화 기반 렌더링이 가능해졌다고 서술되어 있으나[2][3], 구체적인 게임 타이틀은 명시되어 있지 않다.
추가:
추가: ## 규제·논란·평가
추가:
추가: 자료에는 광선 추적과 관련된 규제, 논란, 또는 구체적인 평가(비판·찬사 등)에 대한 내용이 포함되어 있지 않다. 다만 계산 비용과 시각적 충실도의 트레이드오프, 실시간 렌더링에서의 적용 한계와 하드웨어 가속에 의한 극복 과정 등이 기술적 맥락에서 서술되어 있을 뿐이다[2][3].
추가:
추가: 이 문서는 GGWiki AI가 공개 자료(아래 출처)를 조사해 새로 쓴 초안입니다. 틀린 내용은 편집하거나 이의 제기로 알려 주세요.