광선 투사
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
광선 투사는 컴퓨터 그래픽스에서 3차원 장면을 2차원 이미지로 렌더링하는 기본적인 렌더링 알고리즘 중 하나이다. 관찰자의 눈에서 나오는 광선을 추적하여 빛을 샘플링하며, 각 픽셀에 대해 눈에서 광선을 추적하여 가장 가까운 객체를 찾고, 표면 속성과 조명 효과를 고려하여 픽셀의 색상을 결정한다. 핀홀 카메라 모델이나 평행 투영 카메라 모델을 기반으로 하며, 선 그림 생성, 음영 처리된 그림 생성, 부피 및 물리적 특성 계산 등에 활용된다. 광선 투사는 반사, 굴절, 그림자를 정확하게 렌더링하는 데는 한계가 있지만 텍스처 맵 등을 통해 어느 정도 모방할 수 있으며, 초기 3D 비디오 게임에서 렌더링 방식으로 사용되었다. 또한, 앨리어싱 문제를 해결하기 위해 앤티앨리어싱 기술을 사용한다. 1960년대 아서 아펠에 의해 개념이 제시되었으며, 초기 1인칭 슈팅 게임, 특히 울펜슈타인 3D, 섀도캐스터, 코만치 시리즈, 둠 등에서 활용되었다. 계산 기하학에서는 '광선 추적 문제'로 정의되어, 주어진 광선과 가장 먼저 교차하는 객체를 찾는 문제로 연구된다.
더 읽어볼만한 페이지
- 컴퓨터 그래픽스 알고리즘 - 알파 합성
알파 합성은 이미지의 투명도를 표현하고 합성하는 기술로, 알파 채널을 사용하여 투명도 정보를 저장하고 스트레이트 알파와 프리멀티플라이드 알파 방식으로 이미지를 합성하며, PNG, TIFF, GIF 등 다양한 이미지 형식이 이를 지원한다. - 컴퓨터 그래픽스 알고리즘 - 클리어타입
클리어타입은 마이크로소프트에서 개발한 서브픽셀 렌더링 기술로, LCD와 같은 평판 모니터에서 텍스트 가독성을 향상시키기 위해 픽셀을 구성하는 서브픽셀을 개별적으로 제어하여 글꼴의 앤티에일리어싱 효과를 개선하고 텍스트를 더 부드럽게 보이도록 하는 기술이다.
광선 투사 | |
---|---|
개요 | |
![]() | |
종류 | 렌더링 알고리즘 |
분야 | 3차원 컴퓨터 그래픽스 레이 트레이싱 전역 조명 |
상세 정보 | |
설명 | 광선을 추적하여 물체의 표면 효과를 계산하는 렌더링 기법 |
관련 기술 | 레이 트레이싱 렌더링 전역 조명 3차원 컴퓨터 그래픽스 CAD CAM 솔리드 모델링 |
특징 | |
장점 | 구현 용이 빠른 연산 속도 |
단점 | 정교한 효과 구현의 어려움 계단 현상 발생 가능성 |
활용 분야 | |
활용 | 3차원 컴퓨터 그래픽스 모델링 이미지 렌더링 CAD/CAM |
참고 문헌 | |
논문 | '솔리드 모델링을 위한 광선 투사' - Scott D. Roth (1982년 2월) '기계 부품 및 공정의 기하학적 모델링' - H. B. Voelker, A. A. G. Requicha (1977년 12월) '강체 솔리드 표현: 이론, 방법 및 시스템' - A. A. G. Requicha (1980년 12월) |
서적 | '대화형 컴퓨터 그래픽스 원리' - W. Newman, R. Sproull (1973년 12월) 'GPU 기반 대화형 시각화 기술' - Daniel Weiskopf (2006년) '컴퓨터 그래픽스: 원리 및 실제' - James D. Foley, Andries van Dam, Steven K. Feiner, John F. Hughes (1995년) |
관련 링크 | |
참고 자료 | '효율적인 광선 추적에 대한 참고 사항' - Solomon Boulos (2005년) |
2. 개념
광선 투사는 컴퓨터 그래픽스 렌더링 알고리즘 중 가장 기본적인 것으로, 광선 추적의 기하학적 알고리즘을 사용한다. 3차원 장면을 2차원 이미지로 만들기 위해, 관찰자의 눈에서 나온 가상의 광선이 물체와 만나는 지점을 계산한다. 광선 투사는 광선이 충돌한 지점에 입사하는 빛의 색상을 계산할 때 추가 광선을 재귀적으로 추적하지 않아 속도가 빠르고 단순하다. 이 때문에 반사, 굴절, 그림자를 자연스럽게 표현하기는 어렵지만, 텍스처 맵 등을 활용하여 어느 정도 비슷하게 만들 수 있다. 빠른 계산 속도 덕분에 광선 투사는 초창기 실시간 3D 비디오 게임에서 유용하게 사용되었다. 광선 투사는 원뿔, 구와 같은 비평면 표면 및 고체를 쉽게 처리할 수 있다는 장점이 있다. 수학적 표면이 광선과 교차할 수 있다면 광선 투사로 렌더링할 수 있으며, 복잡한 객체는 솔리드 모델링 기술을 사용하여 생성하고 쉽게 렌더링할 수 있다.
2. 1. 기본 원리
관찰자의 시점에서 각 픽셀에 해당하는 광선을 발사하고, 이 광선이 장면 내의 물체와 만나는 지점을 찾는다. 광선이 물체와 만나는 첫 번째 지점의 표면 속성(색상, 질감 등)과 조명 효과를 고려하여 해당 픽셀의 최종 색상을 결정한다.광선 투사의 기본 아이디어는 픽셀마다 하나씩 눈에서 광선을 추적하여 해당 광선의 경로를 막는 가장 가까운 객체를 찾는 것이다. 이미지를 스크린 도어라고 생각하고 스크린의 각 사각형이 픽셀이라고 생각하면, 이것이 바로 눈이 해당 픽셀을 통해 보는 객체이다. 장면의 재질 속성과 빛의 영향을 사용하여 이 알고리즘은 이 객체의 음영을 결정할 수 있다. 표면이 빛을 향하고 있다면 빛이 해당 표면에 도달하여 차단되거나 그림자에 가려지지 않는다는 단순화된 가정이 이루어진다. 표면의 음영은 기존의 3D 컴퓨터 그래픽스 음영 처리 모델을 사용하여 계산된다.

광선과 카메라 기하학은 모든 기하학적 추론의 기초를 형성한다. 위 그림은 이미지 처리에서 원근 효과를 위한 핀홀 카메라 모델과 질량 분석을 위한 평행 카메라 모델을 보여준다. 단순한 핀홀 카메라 모델은 초점(또는 눈)과 사각형 픽셀 배열(또는 화면)로 구성된다. 직선 광선은 픽셀 배열을 통과하여 초점을 장면과 연결하며 픽셀당 광선 하나가 있다. 그림의 음영을 처리하기 위해 광선의 강도를 측정하여 픽셀로 저장한다. 픽셀의 값을 담당하는 반사 표면은 픽셀의 광선과 교차한다.
초점 거리, 즉 초점과 화면 사이의 거리가 무한대인 경우 모든 광선이 서로 평행하고 화면에 수직이므로 뷰를 "평행"이라고 한다. 원근 뷰는 그림을 만드는 데 자연스럽지만, 일부 응용 프로그램에서는 공간에 균일하게 분포될 수 있는 광선이 필요하다.
모델링의 편의성을 위해 카메라에 대한 일반적인 표준 좌표계는 화면이 X-Y 평면에 있고 장면이 +Z 반 공간에 있으며 초점이 -Z 축에 있다.

광선은 카메라 모델의 3D 공간에서 단순한 직선이다. 점(X0, Y0, Z0)과 방향 벡터(Dx, Dy, Dz)로 매개변수화된 형태로 정의하는 것이 가장 좋다. 이 형태에서 선의 점은 단일 매개변수 t를 통해 정렬되고 액세스된다. t의 모든 값에 대해 선의 해당 점(X, Y, Z)이 정의된다.
:X = X0 + t · Dx
:Y = Y0 + t · Dy
:Z = Z0 + t · Dz
벡터가 정규화되면 매개변수 t는 선을 따라의 거리이다. 벡터는 다음 계산으로 쉽게 정규화할 수 있다.
:Dist = √(Dx2 + Dy2 + Dz2)
:Dx = Dx / Dist
:Dy = Dy / Dist
:Dz = Dz / Dist
하나 이상의 표면에 의해 경계가 정해진 객체의 기하학적 정의가 주어지면, 화면에서 모든 경계 표면과 하나의 광선이 교차하는 계산 결과는 두 개의 배열로 정의된다.
- 광선 매개변수: ''t''[1], ''t''[2], ..., ''t''[n]
- 표면 포인터: S[1], S[2], ..., S[n]
여기서 n은 광선-표면 교차점의 수이다. 광선 매개변수 ''t''[i]의 정렬된 목록은 진입-탈출 지점을 나타낸다. 광선은 점 ''t''[1]에서 고체에 들어가고, ''t''[2]에서 나가고, ''t''[3]에서 고체에 들어간다. 점 ''t''[1]은 카메라에 가장 가깝고 ''t''[n]은 가장 멀리 있다. 광선 매개변수와 연관하여 표면 포인터는 교차하는 표면에 대한 고유한 주소를 포함한다. 표면은 굴절 유/무에 따른 색상, 반사율, 투명도, 반투명도 등 다양한 속성을 가질 수 있다. 표면과 관련된 고체는 밀도와 같은 고유한 물리적 속성을 가질 수 있다. 예를 들어, 객체가 서로 다른 재료의 조립품으로 구성되고 전체 질량 중심과 관성이 중요한 경우에 유용할 수 있다.
2. 2. 카메라 모델
광선과 카메라 기하학은 모든 기하학적 추론의 기초를 형성한다. 위 그림은 이미지 처리에서 원근 효과를 위한 핀홀 카메라 모델과 질량 분석을 위한 평행 카메라 모델을 보여준다. 단순한 핀홀 카메라 모델은 초점(또는 눈)과 사각형 픽셀 배열(또는 화면)로 구성된다. 직선 광선은 픽셀 배열을 통과하여 초점을 장면과 연결하며 픽셀당 광선 하나가 존재한다. 그림의 음영을 처리하기 위해 광선의 강도를 측정하여 픽셀로 저장한다. 픽셀의 값을 담당하는 반사 표면은 픽셀의 광선과 교차한다.
초점 거리, 즉 초점과 화면 사이의 거리가 무한대인 경우 모든 광선이 서로 평행하고 화면에 수직이므로 뷰를 "평행"이라고 한다. 원근 뷰는 그림을 만드는 데 자연스럽지만, 일부 응용 프로그램에서는 공간에 균일하게 분포될 수 있는 광선이 필요하다.
모델링의 편의성을 위해 카메라에 대한 일반적인 표준 좌표계는 화면이 X-Y 평면에 있고 장면이 +Z 반 공간에 있으며 초점이 -Z 축에 있다.
2. 3. 광선-표면 교차
광선 투사의 핵심은 광선과 물체 표면 간의 교차점을 계산하는 것이다. 광선 투사는 3차원 장면을 2차원 이미지로 렌더링하기 위해 이미지 순서로 작동하며, 이때 관찰자의 눈에서 나오는 광선이 물체 표면과 만나는 지점을 찾는다.
이러한 광선-표면 교차점 계산은 다양한 기하학적 형태에 대해 수행될 수 있다. 예를 들어 평면, 구, 원뿔 등 다양한 형태의 표면에 대한 교차 계산 알고리즘이 개발되었다. "솔리드 모델링을 위한 광선 투사" 논문에 따르면, 광선 투사의 가장 어려운 수학적 문제는 선과 표면의 교차점을 찾는 것이며, 평면, 이차 곡면, 토러스, 매개변수 표면 패치 등이 원시 솔리드를 경계할 수 있다.
광선은 카메라 모델의 3D 공간에서 단순한 직선으로 표현된다. 점 (X0, Y0, Z0)과 방향 벡터 (Dx, Dy, Dz)로 매개변수화된 형태로 정의되며, 단일 매개변수 t를 통해 선의 점들이 정렬되고 액세스된다.
- X = X0 + t · Dx
- Y = Y0 + t · Dy
- Z = Z0 + t · Dz
벡터가 정규화되면 매개변수 t는 선을 따라의 거리가 된다.
광선과 카메라 기하학은 모든 기하학적 추론의 기초를 형성한다. 핀홀 카메라 모델은 초점(또는 눈)과 사각형 픽셀 배열(또는 화면)로 구성되며, 직선 광선은 각 픽셀을 통과하여 초점을 장면과 연결한다.
하나 이상의 표면에 의해 경계가 정해진 객체의 기하학적 정의가 주어지면, 화면에서 모든 경계 표면과 하나의 광선이 교차하는 계산 결과는 다음과 같은 두 개의 배열로 정의된다.
- 광선 매개변수: ''t''[1], ''t''[2], ..., ''t''[n]
- 표면 포인터: S[1], S[2], ..., S[n]
여기서 n은 광선-표면 교차점의 수이다. 광선 매개변수 ''t''[i]의 정렬된 목록은 진입-탈출 지점을 나타내며, 광선은 점 ''t''[1]에서 고체에 들어가고, ''t''[2]에서 나가는 식이다. 표면 포인터는 교차하는 표면에 대한 고유한 주소를 포함하며, 표면은 색상, 반사율, 투명도 등 다양한 속성을 가질 수 있다.
3. 알고리즘 및 응용
광선 투사(Ray casting)는 컴퓨터 그래픽스에서 렌더링 알고리즘의 기초적인 기법 중 하나로, 광선 추적의 기하학적 알고리즘을 사용한다. 광선 추적 기반 렌더링은 3차원 장면을 2차원 이미지로 만들기 위해 이미지 순서로 작동한다. 관찰자의 눈에서 나오는 기하학적 광선은 빛이 광선 방향에서 관찰자로 이동하는 것을 샘플링하기 위해 추적된다.[1]
광선 투사의 속도와 단순함은 광선이 충돌하는 지점에 들어오는 빛의 색상을 계산할 때 추가 광선을 재귀적으로 추적하지 않는다는 점에서 비롯된다. 이렇게 하면 반사, 굴절, 그림자를 자연스럽게 표현하기는 어렵지만, 텍스처 맵 등을 활용하여 어느 정도 흉내낼 수 있다. 계산 속도가 빠르다는 장점 때문에 광선 투사는 초창기 실시간 3D 비디오 게임에서 유용한 렌더링 방식으로 사용되었다.[1]
광선 투사의 기본 개념은 픽셀마다 눈에서 광선을 하나씩 추적하여 해당 광선의 경로를 막는 가장 가까운 물체를 찾는 것이다. 이미지를 스크린 도어라고 생각하면, 스크린의 각 사각형이 픽셀이고, 눈이 해당 픽셀을 통해 보는 물체가 바로 그것이다. 장면의 재질 속성과 빛의 영향을 고려하여 이 물체의 음영을 결정한다. 표면이 빛을 향하고 있다면 빛이 표면에 도달하여 차단되거나 그림자에 가려지지 않는다는 가정을 한다. 표면의 음영은 기존의 3D 컴퓨터 그래픽 음영 처리 모델을 사용하여 계산된다. 광선 투사가 스캔라인 알고리즘에 비해 가지는 주요 이점 중 하나는 원뿔, 구와 같은 비평면 표면과 고체를 쉽게 처리할 수 있다는 것이다. 수학적 표면이 광선과 교차할 수 있다면 광선 투사로 렌더링할 수 있다. 복잡한 객체는 솔리드 모델링 기술을 사용하여 생성하고 쉽게 렌더링할 수 있다.[1]
"솔리드 모델링을 위한 광선 투사" 논문에 따르면, 광선 투사는 모델링된 복합 솔리드를 시각화하고 분석하기 위해 가상의 광선을 프로브로 사용한다. 단순성 덕분에 광선 투사는 안정적이고 확장 가능하다. 가장 어려운 수학적 문제는 선과 표면의 교차점을 찾는 것이다. 따라서 평면, 이차 곡면, 토러스 및 매개변수 표면 패치와 같은 표면이 원시 솔리드를 경계할 수 있다. 광선 투사의 적합성과 효율성은 중요한 문제이다. 대화형 모델링을 위한 빠른 그림 생성 기능이 가장 큰 과제이다.[1]
광선과 카메라 기하학은 모든 기하학적 추론의 기초를 형성한다. 아래 그림은 이미지 처리에서 원근 효과를 위한 핀홀 카메라 모델과 질량 분석을 위한 평행 카메라 모델을 보여준다. 단순한 핀홀 카메라 모델은 초점(또는 눈)과 사각형 픽셀 배열(또는 화면)로 구성된다. 직선 광선은 픽셀 배열을 통과하여 초점을 장면과 연결하며, 픽셀당 하나의 광선이 있다. 그림의 음영을 처리하기 위해 광선의 강도를 측정하여 픽셀에 저장한다. 픽셀의 값을 담당하는 반사 표면은 픽셀의 광선과 교차한다.[5]
초점 거리, 즉 초점과 화면 사이의 거리가 무한대인 경우, 모든 광선은 서로 평행하고 화면에 수직이므로 뷰를 "평행"이라고 한다. 원근 뷰는 그림을 만드는 데 자연스럽지만, 일부 응용 프로그램에서는 공간에 균일하게 분포된 광선이 필요하다.[5]
모델링의 편의를 위해 카메라에 대한 일반적인 표준 좌표계는 화면이 X-Y 평면에 있고, 장면이 +Z 반 공간에 있으며, 초점이 -Z 축에 있다.[5]
광선은 카메라 모델의 3D 공간에서 단순한 직선이다. 점(X0, Y0, Z0)과 방향 벡터(Dx, Dy, Dz)로 매개변수화된 형태로 정의하는 것이 가장 좋다. 이 형태에서 선의 점은 단일 매개변수 t를 통해 정렬되고 접근된다. t의 모든 값에 대해 선의 해당 점(X, Y, Z)이 정의된다.
: X = X0 + t · Dx
: Y = Y0 + t · Dy
: Z = Z0 + t · Dz
벡터가 정규화되면 매개변수 t는 선을 따라의 거리이다. 벡터는 다음 계산으로 쉽게 정규화할 수 있다.
: Dist = √(Dx2 + Dy2 + Dz2)
: Dx = Dx / Dist
: Dy = Dy / Dist
: Dz = Dz / Dist
하나 이상의 표면에 의해 경계가 정해진 객체의 기하학적 정의가 주어지면, 화면에서 모든 경계 표면과 하나의 광선이 교차하는 계산 결과는 두 개의 배열로 정의된다.
- 광선 매개변수: ''t''[1], ''t''[2], ..., ''t''[n]
- 표면 포인터: S[1], S[2], ..., S[n]
여기서 n은 광선-표면 교차점의 수이다. 광선 매개변수 ''t''[i]의 정렬된 목록은 진입-탈출 지점을 나타낸다. 광선은 점 ''t''[1]에서 고체에 들어가고, ''t''[2]에서 나가고, ''t''[3]에서 들어간다. 점 ''t''[1]은 카메라에 가장 가깝고 ''t''[n]은 가장 멀리 있다. 광선 매개변수와 연관하여 표면 포인터는 교차하는 표면에 대한 고유한 주소를 포함한다. 표면은 굴절 유/무에 따른 색상, 반사율, 투명도, 반투명도 등 다양한 속성을 가질 수 있다. 표면과 관련된 고체는 밀도와 같은 고유한 물리적 속성을 가질 수 있다. 예를 들어, 객체가 서로 다른 재료의 조립품으로 구성되고 전체 질량 중심과 관성이 중요한 경우에 유용할 수 있다.[1]
3. 1. 선 그림 생성
광선 투사를 사용하여 물체의 윤곽선을 표현하는 선 그림을 생성할 수 있다. 화면에서 위에서 아래로, 왼쪽에서 오른쪽으로 픽셀마다 광선을 생성한다. 각 광선을 평가하여 보이는 표면을 식별한다. 픽셀 위치 (X, Y)의 보이는 표면이 이전 픽셀 (X-1, Y)의 보이는 표면과 다르면, (X-½, Y)를 중심으로 하는 픽셀 하나 길이의 수직선을 표시한다. 마찬가지로, (X, Y)의 보이는 표면이 이전 픽셀 (X, Y-1)의 보이는 표면과 다르면, (X, Y-½)를 중심으로 하는 픽셀 하나 길이의 수평선을 표시한다. 이렇게 함으로써 3D 모델의 형태를 시각화하고, 보이는 표면의 경계를 따라 선을 그릴 수 있다.[1]
결과적으로 생성되는 그림은 거친 해상도에서 들쭉날쭉하게 보이는 수평 및 수직 가장자리로만 구성된다. Roth의 광선 투사 시스템은 이러한 방식으로 오른쪽의 고체 객체 이미지를 생성했다. 이 과정에서 상자 인클로저, 동적 바운딩, 일관성과 같은 최적화 기법이 사용되었다. 각 그림에 대해 화면은 약 100x100 (약 10,000개)개의 광선으로 샘플링되었고, 이진 검색을 통해 새로운 가장자리가 발견되었다. 그 후, 모든 가장자리는 가장자리의 양쪽에서 픽셀 단위로 추가 광선을 투사하여 추적되었다. 각 그림은 780x780 해상도의 Tektronix 튜브에 그려졌다.[1]
3. 2. 음영 처리된 그림 생성
광선 투사를 사용하여 음영 처리된 그림을 만들려면, 화면의 각 픽셀마다 광선을 하나씩 투사한다. 각 픽셀에서 보이는 표면의 정보(S[1])를 사용하여 표면의 법선 벡터를 계산한다. 픽셀의 밝기(광 강도)는 이 법선 벡터와 광원에서 표면으로 향하는 벡터 사이 각도의 코사인 값에 비례한다. 이러한 방식으로 모든 픽셀을 처리하면 장면의 래스터 이미지가 생성된다.[5]
표면의 반사 속성을 고려하면 더 사실적인 표현이 가능하다. 여기에는 확산 반사, 경면 반사, 투과 등이 포함된다. 예를 들어, 다음 그림은 단일 광원에 대해 추가적인 광선을 투사하여 다양한 효과를 표현하는 방법을 보여준다.

렌더링될 이미지의 한 픽셀에 대해, 알고리즘은 초점에서 시작하는 광선을 투사하여 반투명 사각형과 빛나는 원의 교차 여부를 확인한다. 이후 거울 반사에 보이는 것을 결정하기 위해, 광선과 표면 교차점의 법선 벡터와 대칭인 방향으로 추가 광선을 투사한다. 이 광선은 불투명한 삼각형과 교차한다. 마지막으로, 각 광선-표면 교차점이 그림자 속에 있는지 확인하기 위해 "그림자 감지" 광선을 광원에서 해당 교차점으로 투사하여 다른 표면이 경로를 막는지 확인한다.[5]

1979년경, GM 연구소의 스콧 로스와 다니엘 배스는 흑백 광선 투사 시스템을 개발하여 Ramtek 컬러 래스터 디스플레이에 그림을 출력했다. 이 시스템은 사용자에게 다음과 같은 제어 기능을 제공했다.[5]
- 시점 및 위치
- 초점 거리: 넓은 각도에서 평행으로
- 줌 배율
- 광원의 수
- 빛의 위치 및 강도
- 선택적인 그림자
- 주변광 및 배경의 강도
- 표면 반사율
- % 확산 반사
- % 경면 반사
- % 투과
3. 3. 부피 및 물리적 특성 계산
광선 투사를 통해 물체의 부피, 질량, 관성 모멘트와 같은 물리적 특성을 계산할 수 있다. 이는 CAD/CAM 분야에서 제품 설계 및 분석에 활용된다.곡면으로 둘러싸인 고체의 부피는 "근사 합" 적분 방법을 사용하여 계산할 수 있는데, 고체를 여러 개의 직사각형 평행육면체로 근사하는 방식이다. 평행 투시도에서 고체의 "심층" 그림을 찍어 광선을 투사하면 고체가 부피 요소로 분할된다. 평행육면체의 두 차원은 화면에서 광선의 2D 간격에 의해 정의되어 일정하게 유지된다. 나머지 세 번째 차원은 가변적이며, 들어오고 나가는 지점으로 정의되어 계산된다.
화면에서 광선 사이의 수평 및 수직 거리가 S인 경우, 각 광선이 "감지하는" 부피는 다음과 같이 계산된다.
: S × S × (''t''[2]-''t''[1] + ''t''[4]-''t''[3] + ∙∙∙ + ''t''[n]-''t''[n-1]) / L
여기서 L은 방향 벡터의 길이이며, 정규화된 경우 1이다.
: L = √(Dx2 + Dy2 + Dz2)
각 (''t''[''i'']-''t''[''i''-1])/L은 고체 내부에 있는 광선 조각의 길이를 나타낸다.

4. 고급 기법
광선 투사는 기본적인 알고리즘 외에도 다양한 고급 기법과 함께 사용될 수 있다.
광선과 카메라 기하학은 모든 기하학적 추론의 기초를 형성한다. 위 그림은 이미지 처리에서 원근 효과를 위한 핀홀 카메라 모델과 질량 분석을 위한 평행 카메라 모델을 보여준다. 단순한 핀홀 카메라 모델은 초점(또는 눈)과 사각형 픽셀 배열(또는 화면)로 구성된다. 직선 광선은 픽셀 배열을 통과하여 초점을 장면과 연결하며 픽셀당 광선 하나가 있다. 픽셀의 값을 담당하는 반사 표면은 픽셀의 광선과 교차한다.
초점 거리, 즉 초점과 화면 사이의 거리가 무한대인 경우 모든 광선이 서로 평행하고 화면에 수직이므로 뷰를 "평행"이라고 한다. 원근 뷰는 그림을 만드는 데 자연스럽지만 일부 응용 프로그램에서는 공간에 균일하게 분포될 수 있는 광선이 필요하다.
모델링의 편의성을 위해 카메라에 대한 일반적인 표준 좌표계는 화면이 X-Y 평면에 있고 장면이 +Z 반 공간에 있으며 초점이 -Z 축에 있다.
광선은 카메라 모델의 3D 공간에서 단순한 직선이다. 점(X0, Y0, Z0)과 방향 벡터(Dx, Dy, Dz)로 매개변수화된 형태로 정의하는 것이 가장 좋다. 이 형태에서 선의 점은 단일 매개변수 t를 통해 정렬되고 액세스된다. t의 모든 값에 대해 선의 해당 점(X, Y, Z)이 정의된다.
:X = X0 + t · Dx
:Y = Y0 + t · Dy
:Z = Z0 + t · Dz
벡터가 정규화되면 매개변수 t는 선을 따라의 거리이다. 벡터는 다음 계산으로 쉽게 정규화할 수 있다.
:Dist = √(Dx2 + Dy2 + Dz2)
:Dx = Dx / Dist
:Dy = Dy / Dist
:Dz = Dz / Dist
하나 이상의 표면에 의해 경계가 정해진 객체의 기하학적 정의가 주어지면, 화면에서 모든 경계 표면과 하나의 광선이 교차하는 계산 결과는 두 개의 배열로 정의된다.
- 광선 매개변수: ''t''[1], ''t''[2], ..., ''t''[n]
- 표면 포인터: S[1], S[2], ..., S[n]
여기서 n은 광선-표면 교차점의 수이다. 광선 매개변수 ''t''[i]의 정렬된 목록은 진입-탈출 지점을 나타낸다. 광선은 점 ''t''[1]에서 고체에 들어가고, ''t''[2]에서 나가고, ''t''[3]에서 고체에 들어간다. 점 ''t''[1]은 카메라에 가장 가깝고 ''t''[n]은 가장 멀리 있다. 광선 매개변수와 연관하여 표면 포인터는 교차하는 표면에 대한 고유한 주소를 포함한다. 표면은 굴절 유/무에 따른 색상, 반사율, 투명도, 반투명도 등 다양한 속성을 가질 수 있다.
4. 1. In-out 광선 분류

광선 투사 절차는 고체 구성 트리의 상단에서 시작하여 재귀적으로 하단으로 내려간 후, 기본 고체와 관련하여 광선을 분류하고, 트리를 거슬러 올라가 왼쪽 및 오른쪽 하위 트리의 분류를 결합한다.

위 그림은 세 가지 이진 연산자에 대한 왼쪽 및 오른쪽 분류의 결합을 보여준다.
4. 2. 현실적인 음영 처리
광선 투사는 컴퓨터 그래픽스의 렌더링 알고리즘 중 가장 기본적인 기법으로, 광선 추적의 기하학적 알고리즘을 사용한다. 광선 추적 기반 렌더링은 3차원 장면을 2차원 이미지로 만들기 위해 이미지 순서로 작동한다. 이때 기하학적 광선은 관찰자의 눈에서 빛이 오는 방향을 따라가며, 그 빛의 세기(복사 조도)를 측정한다. 광선 투사가 빠르고 단순한 이유는 광선이 물체와 만나는 지점에서 빛의 색상을 계산할 때, 빛의 반사, 굴절, 그림자 효과를 만드는 추가적인 광선을 재귀적으로 추적하지 않기 때문이다.이러한 단순함 때문에 반사, 굴절, 그림자를 완벽하게 표현하기는 어렵지만, 텍스처 맵 등을 활용하여 어느 정도 비슷하게 만들 수 있다. 빠른 계산 속도 덕분에 광선 투사는 초창기 실시간 3D 비디오 게임에서 유용하게 사용되었다.
하지만, 보조 광선을 사용하여 빛의 반사, 굴절, 그림자 효과를 더 사실적으로 표현할 수 있다. 예를 들어, 위의 그림처럼 단일 광원에 대해 추가 광선을 투사할 수 있다. 먼저 렌더링될 이미지의 한 픽셀에 대해, 알고리즘은 초점에서 시작하는 광선을 투사하여 반투명 사각형과 빛나는 원이 교차하는지 확인한다. 그다음, 거울 반사에 보이는 것을 확인하기 위해 광선과 표면 교차점의 표면 법선과 대칭인 방향으로 해당 지점에서 시작하는 추가 광선을 투사해야 한다. 이 광선은 불투명한 삼각형과 교차한다. 마지막으로, 각 광선-표면 교차점이 그림자 속에 있는지 확인하기 위해 "그림자 감지" 광선을 광선-표면 교차점에서 광원으로 투사하여 다른 표면이 해당 경로를 막는지 확인한다.
터너 휘티드는 이러한 보조 광선 및 추가 광선 기법을 "재귀적 광선 추적"이라고 불렀다.[5] 재귀 횟수를 제한하여 렌더링 비용을 줄일 수 있다. 휘티드는 물체의 굴절률에 따라 결정된 각도로 보이는 표면 지점에서 보조 광선을 생성하여 투명 물체의 굴절을 모델링했다.
4. 3. 성능 최적화
광선 투사의 계산 비용을 줄이기 위해 다양한 최적화 기법이 개발되었다. 이러한 기법들은 렌더링 시간을 단축시키고, 더 복잡한 장면을 실시간으로 처리할 수 있게 해준다. 주요 최적화 기법은 다음과 같다:- 경계 상자 (Bounding Volume): 객체 주변에 단순한 형태의 경계 상자(예: 직육면체, 구)를 만들어 광선과의 교차 여부를 먼저 검사한다. 광선이 경계 상자와 교차하지 않으면, 그 안에 있는 복잡한 객체와의 교차 검사를 생략할 수 있다. 경계 상자를 활용하면 광선-솔리드 교차점에 대한 검색은 이진 검색과 유사하게 작동하며, "광선이 울타리를 교차"하는지 테스트하여 계층 구조 검색을 안내한다. 트리의 중간 노드에서 테스트가 실패하면 광선이 복합체 외부로 분류되므로 하위 트리를 재귀적으로 탐색할 필요가 없다.
- 공간 분할 (Spatial Partitioning): 전체 3차원 공간을 작은 셀(cell)로 나누고, 각 셀에 속하는 객체 목록을 저장한다. 광선이 특정 셀을 통과할 때, 해당 셀에 속하는 객체들과만 교차 검사를 수행한다. 공간 분할의 최적 조건은 공간에서 기본 울타리가 겹치지 않고, 구성 트리가 균형을 이루며 공간에서 가까운 하위 솔리드가 트리에서도 가깝게 구성되는 것이다. 반대로, 최악의 조건은 모든 기본 울타리가 서로 겹치는 경우이다.
- 일관성 (Coherence) 활용: 인접한 픽셀에서 보이는 표면이 같을 가능성이 높다는 점을 이용한다. 즉, 이전 픽셀에서 찾은 객체 정보를 재활용하여 현재 픽셀의 광선-객체 교차 검사를 빠르게 처리할 수 있다. 이는 인접한 픽셀에서 보이는 표면이 다를 가능성보다 같을 가능성이 더 높다는 경험적 진실을 적용한 것이다. 선 그림의 경우 가장자리가 포함된 이미지 영역은 일반적으로 전체 이미지 영역보다 훨씬 작으므로, 광선 투사는 열린 영역이 아닌 가장자리 주변에 집중될 수 있다. 이를 위해 광선을 사용하여 화면을 희소하게 샘플링하고, 인접한 광선이 서로 다른 가시 표면을 식별할 때 이진 검색을 통해 가장자리를 찾는다.
- '''조기 종료''': 트리의 복합 노드의 연산자가 - 또는 &이고 광선이 복합체의 왼쪽 하위 솔리드 외부로 분류되는 경우, 광선은 오른쪽 하위 솔리드와 관계없이 복합체 외부로 분류된다. 따라서 오른쪽 하위 솔리드와 관련하여 광선을 분류하는 것은 불필요하다.
- '''변환''': 처음에 스크린-장면 변환을 기본 객체의 장면-로컬 변환과 결합하고 결과 스크린-로컬 변환을 기본 객체의 데이터 구조에 저장하면, 광선-표면 교차점당 광선 변환이 하나 제거된다.
- '''재귀''': 깊은 구성 트리가 주어지면 재귀는 메모리를 할당하고 해제하는 것과 결합하여 비용이 많이 들 수 있다. 재귀는 스택으로 정적 배열을 사용하여 시뮬레이션할 수 있다.
- '''동적 경계''': 솔리드의 보이는 가장자리만 표시하려는 경우, 광선 투사 알고리즘은 검색을 줄이기 위해 광선을 동적으로 경계할 수 있다. 즉, 광선이 하위 솔리드와 교차하는 것을 찾은 후, 알고리즘은 화면에 가장 가까운 교차점을 사용하여 "광선 교차 상자" 테스트에 대한 깊이 경계를 좁힐 수 있다. 이것은 트리의 + 부분에 대해서만 작동하며, 맨 위에서 시작한다. -, &의 경우, 광선의 근처 "in" 부분이 나중에 "out"이 될 수 있다.
이 외에도 다양한 최적화 기법들이 연구되고 있으며, 광선 투사의 성능을 향상시키는데 기여하고 있다.
5. 앤티앨리어싱 (Anti-aliasing)
앨리어싱으로 인한 들쭉날쭉한 가장자리는 점 샘플링 기술의 바람직하지 않은 효과이며 래스터 디스플레이 알고리즘의 고전적인 문제이다. 선형 또는 부드럽게 곡선진 가장자리는 들쭉날쭉하게 보이며 이미지의 움직임으로 인해 가장자리가 흐릿하게 보이거나 작은 움직이는 에스컬레이터처럼 보이기 때문에 특히 애니메이션에서 불쾌감을 준다. 또한, 광선 간의 간격보다 작은 장면의 세부 사항이 손실될 수 있다. 선 그림의 들쭉날쭉한 가장자리는 가장자리 추적을 통해 부드럽게 할 수 있다. 이러한 알고리즘의 목적은 픽셀 정확도 내에서 그림을 그리는 데 필요한 선의 수를 최소화하는 것이다.
하위 픽셀 정확도로 음영 처리된 그림의 들쭉날쭉한 가장자리를 부드럽게 하려면 가장자리에 대한 정보를 위해 추가 광선을 투사해야 한다.( 수퍼샘플링 참조). 가장자리는 표면의 교차점 또는 곡면의 프로파일에 의해 형성된다. "일관성"을 이진 검색을 통해 적용하면, 픽셀 (X,Y)에서 보이는 표면이 픽셀 (X+1,Y)에서 보이는 표면과 다른 경우, (X+½,Y)에서 중간에 광선을 생성하고 거기에서 보이는 표면을 식별할 수 있다. 샘플 포인트 사이의 거리를 더 세분할 수 있지만 검색을 깊게 할 필요는 없다. 들쭉날쭉한 가장자리를 부드럽게 하는 주요 검색 깊이는 가장자리 전체의 강도 기울기에 따라 달라진다. 가장자리를 포함하는 이미지 영역은 일반적으로 전체 영역의 작은 비율이고, 이진 검색에서 투사된 추가 광선은 가장자리를 형성하는 보이는 기본 요소의 깊이로 제한될 수 있으므로 들쭉날쭉한 가장자리를 부드럽게 하는 데 드는 비용은 적당하다.
6. 역사
컴퓨터 그래픽스 렌더링 기술 중 하나인 광선 투사는 1960년대에 아서 아펠(Arthur Appel)이 처음으로 그 개념을 제시하였다. 1980년대에는 스콧 로스(Scott Roth)와 터너 휘티드(Turner Whitted)가 각각 "광선 투사"와 "광선 추적"이라는 용어로 발전시켰다.
7. 초기 컴퓨터 게임에서의 광선 투사
초기 1인칭 게임에서 광선 투사는 2차원 경기장에서 3차원 세계를 효율적으로 렌더링하는 데 사용되었다. 화면의 수평 너비를 간단한 1차원 스캔을 이용해 처리하는 방식이었다.[6] 초기 1인칭 슈팅 게임은 2D 광선 투사를 통해 2차원 세계에서 3차원 효과를 만들어냈으나, 플레이어가 위나 아래를 볼 수 없고 전단 왜곡으로 제한된 각도로만 볼 수 있다는 한계가 있었다.[7][8]
이러한 렌더링 방식은 프레임의 각 픽셀마다 광선을 발사하는 최신 엔진과는 달리, 충돌 지점을 찾으면 투영 왜곡을 표면 텍스처에 적용하고 전체 수직 열을 프레임으로 복사하는 방식이었다. 이는 렌더링 유형에 제한을 가했는데, 예를 들어 '''깊이 정렬'''은 가능했지만 깊이 버퍼링은 불가능하여 다각형이 서로 앞이나 뒤에 완전히 위치해야 했고, 부분적으로 겹치거나 교차할 수 없었다.
7. 1. 울펜슈타인 3D (Wolfenstein 3D)

''울펜슈타인 3D''는 벽의 높이가 일정하고 바닥과 천장이 단색인 사각형 기반 그리드로 구성되었다. 세상을 그리기 위해 화면 픽셀의 각 열에 대해 단일 광선을 추적했고, 광선이 벽에 부딪히는 세계의 위치와 광선이 부딪히기 전 이동 거리에 따라 벽 텍스처의 수직 조각이 선택되고 크기가 조정되었다.[9]
그리드 기반 레벨을 사용한 이유는 두 가지였다. 첫째, 광선-벽 충돌을 더 빠르게 찾을 수 있어 잠재적인 충돌을 더 예측 가능하게 한다. 둘째, 메모리 오버헤드를 줄일 수 있다. 그러나 넓고 트인 공간을 표현하려면 추가 공간이 필요했다.
7. 2. 섀도캐스터 (ShadowCaster)
레이븐 소프트웨어의 게임 ''섀도캐스터''(ShadowCaster)는 울펜슈타인 3D 엔진을 개선하여 바닥과 천장 텍스처를 추가하고 벽 높이를 다양하게 변경했다.7. 3. 코만치 (Comanche) 시리즈
노바 로직이 코만치 게임을 위해 개발한 복셀 스페이스 엔진은 화면 픽셀의 각 열을 통해 광선을 추적하고 각 광선을 높이 맵의 점에 대해 테스트했다. 그런 다음 높이 맵의 각 요소를 픽셀 열로 변환하고, 보이는 부분(즉, 앞에 그려진 픽셀에 의해 가려지지 않은 부분)을 결정하고 텍스처 맵의 해당 색상으로 그렸다.[10]7. 4. 둠 (DOOM)
초기 1인칭 슈팅 게임은 2D 광선 투사를 사용하여 2차원 세계에서 3차원 효과를 냈다. 세계는 3차원으로 보이지만 플레이어는 위나 아래를 볼 수 없었고, 전단 왜곡으로 제한된 각도로만 볼 수 있었다.[7][8] 이러한 렌더링 방식은 최신 엔진처럼 프레임의 각 픽셀마다 광선을 발사할 필요가 없었다. 충돌 지점을 찾으면 투영 왜곡을 표면 텍스처에 적용하고 전체 수직 열을 결과에서 프레임으로 복사했다.이후 DOS 게임, 예를 들어 ''id Software''의 ''DOOM''은 속도 향상을 위해 광선 투사 2.5D의 많은 제약을 유지했지만, BSP 같은 대체 렌더링 기술로 전환하면서 더는 광선 투사 엔진이 아니게 되었다.[11]
8. 계산 기하학에서의 광선 투사
계산 기하학에서 광선 투사 문제는 '''광선 추적 문제'''라고도 하며, ''d''차원 공간에 있는 객체 집합이 주어졌을 때 각 질의 광선에 대해 광선에 처음 부딪히는 객체를 빠르게 찾을 수 있도록 자료 구조로 사전 처리하는 질의 문제로 정의할 수 있다. 이 문제는 공간 차원, 객체 유형, 질의 광선 제한 등 다양한 설정에 대해 연구되었다.[12] 희소 복셀 옥트리를 사용하는 것이 한 가지 기술이다.
참조
[1]
간행물
Ray Casting for Modeling Solids
1982-02
[2]
간행물
Geometric modeling of mechanical parts and processes
1977-12
[3]
간행물
Representation for rigid solids: Theory, methods, and systems
1980-12
[4]
서적
Principles of Interactive Computer Graphics
Mcgraw-Hill
1973-12
[5]
간행물
An Improved Illumination Model for Shaded Display
1980-06
[6]
웹사이트
Ray Casting (Concept) - Giant Bomb
https://www.giantbom[...]
2021-08-31
[7]
웹사이트
Ray Casting (Concept) - Giant Bomb
https://www.giantbom[...]
2021-08-31
[8]
Youtube
Looking up and down in a raycasting game - y-shearing, change pitch #Shorts
https://www.youtube.[...]
2021-11-23
[9]
웹사이트
Wolfenstein-style ray casting tutorial
http://www.permadi.c[...]
F. Permadi
[10]
서적
Black Art of 3D Game Programming
1995
[11]
웹사이트
ADG Filler #48 - Is the Doom Engine a Raycaster? - YouTube
https://www.youtube.[...]
2015-06-19
[12]
서적
Ray shooting, depth orders and hidden surface removal
Springer-Verlag
1993
[13]
간행물
Ray Casting for Modeling Solids
1982-02
[14]
간행물
RPU: A Programmable Ray Processing Unit for Realtime Ray Tracing
[15]
서적
GPU-Based Interactive Visualization Techniques
Springer Science & Business Media
[16]
서적
Computer Graphics: Principles and Practice
Addison-Wesley
[17]
간행물
ACM SIGGRAPH 2005 Courses on - SIGGRAPH '05
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com