KR20100094532A - 광선 추적법을 이용하는 렌더링 시스템 및 방법 - Google Patents
광선 추적법을 이용하는 렌더링 시스템 및 방법 Download PDFInfo
- Publication number
- KR20100094532A KR20100094532A KR1020107013780A KR20107013780A KR20100094532A KR 20100094532 A KR20100094532 A KR 20100094532A KR 1020107013780 A KR1020107013780 A KR 1020107013780A KR 20107013780 A KR20107013780 A KR 20107013780A KR 20100094532 A KR20100094532 A KR 20100094532A
- Authority
- KR
- South Korea
- Prior art keywords
- rays
- ray
- collision
- gad
- testing
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/52—Parallel processing
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
본 발명의 시스템은 광선과 기본형(primitive) 간의 충돌(intersection)의 식별을 가속화하기 위한 충돌 테스트 자원과, 애플리케이션 필요 렌더링 서비스와 인터페이싱하고 충돌 테스트 자원과 인터페이싱하는 프로세싱용 호스트 컴퓨팅 자원을 포함하며, 또한 상기 충돌 테스트 자원에 의해 식별된 충돌을 쉐이딩(shading)-처리하는 프로세스도 포함한다. 이러한 충돌의 쉐이딩은 충돌 테스트를 위한 더 많은 광선의 생성을 야기할 수 있으며, 또 다른 시스템 및 방법의 형태는, 렌더링 품질의 열화는 최소화하면서, 이러한 광선을 목표 또는 또 다른 기준에 부합하도록 적응적으로 공식화하는 방법을 포함한다. 복수의 광선이 병렬적으로 추적되고, 충돌 테스트 자원의 처리량이 높아짐에 따라, 본 발명의 시스템 및 방법은 충돌에 대해 테스트될 다수의 타입의 광선을 기술(describe)하는 효율을 증가시킬 수 있으며, 따라서 충돌 테스트 자원으로 광선을 전송하기 위한 대역폭이 감소하게 된다.
Description
본 발명은 2007년11월19일자 미국 특허 출원 11/942,336호로부터 우선권을 주장하며, 상기 미국 특허 출원의 내용은 본원에서 참조로서 통합되어 있다.
본 발명은 3차원 장면(scene)으로부터 2차원 표현을 렌더링하는 것에 관련되며, 특히, 장면을 사실적(photo-realistic) 2차원 표현으로 빠르게 렌더링하기 위해 광선 추적법(ray tracing)을 이용하는 것에 관한 것이다.
광선 추적법을 이용하여 사실적 이미지를 렌더링하는 것은 컴퓨터 그래픽 기술 분야에서 공지되어 있다. 광선 추적법은 장면의 요소들과 상호작용하는 빛의 물리적 작용을 모델링하기 때문에, 사실적인 그림자 및 조명 효과 등의 사실적인 이미지를 생성하는 것으로 알려져 있다. 그러나 광선 추적법은 또한 연산 집약적이라고 알려져 있으며, 또한 현재의 그래픽 워크스테이션은 광선 추적법을 이용하여 복잡한 장면을 렌더링하기에 상당한 시간을 필요로 한다.
일반적으로 광선 추적법은 장면 내 구조물의 표면을 기술하는 기하학적 기본형(geometric primitive)(가령, 삼각형)로 구성된 장면 기술(scene description)을 획득하는 단계와, 장면 내 광선을 추적함으로써 상기 장면에서 빛이 기본형들과 상호작용하는 방식을 모델링하는 단계를 포함한다. 상기 광선은 가상 빛의 벡터이며, 원점과 3-공간 방향을 갖는다.
예를 들어, 하나의 장면에 거리와 그 위에 위치하는 자동차가 있고, 이 거리의 하나의 측부에 건물들이 있을 수 있다. 이러한 장면에서의 자동차는 연속적인 표면에 근사하는 많은 개수의 삼각형(가령, 1백만 개의 삼각형)으로 정의될 수 있다. 상기 장면을 바라보는 카메라 위치가 정의된다. 카메라로부터 쏘아지는 광선은 종종 1차 광선이라고 일컬어지며, 예를 들어 반사를 가능하게 하기 위해 하나의 물체(object)에서 또 다른 물체로 쏘아지는 광선은 2차 광선이라고 일컬어진다. 선택된 해상도(가령, SVGA 디스플레이에 대한 1024x768)의 이미지 평면이 카메라와 장면 사이에서 선택된 위치로 놓인다.
광선 추적법의 첫 번째 목표는, 예를 들어, 이러한 이미지가 모니터 상에서 디스플레이될 수 있도록 이미지 평면의 각각의 픽셀에 대해 색상과 밝기를 결정하는 것이다. 물리적 세계(physical world)에서, 카메라 시점으로 이러한 장면을 바라봄으로써, 확산 및 직사 광원을 포함하는 하나 이상의 광원에 의해 존재하는 카메라에 도달하는 광선을 도출할 것이다. 물리적 세계에서, 이들 광원은 빛 에너지를 장면으로 투사한다. 이러한 빛 에너지는, 빛이 접촉하게 되는 물질의 타입에 따라, 그리고 빛에너지가 광원에서 카메라로 이동하는 동안 상기 빛에너지가 접촉하는 순서에 따라, 회절, 반사 및/또는 흡수된다. 광선 추적법은 이러한 프로세스를 복제한 것이다.
물리적 세계는, 광원에서 카메라까지의 빛에너지를 추적함으로써 운영되지만, 광원에서 생성된 광의 단지 작은 부분만 카메라에 도달하기 때문에, 대부분의 환경에서, 광원과의 충돌을 판단하기 위해서 광선은 카메라에서부터로 거꾸로 추적되어야 했다.
간소화된 광선 추적 알고리즘은 하나 이상의 광선을 카메라로부터 이미지의 각각의 픽셀을 통해 장면으로 쏘는 과정을 포함한다. 그 후, 각각의 광선이, 장면을 구성하는 각각의 기본형(primitive)에 대해 테스트되어, 상기 광선이 만나게 되는 기본형을 식별할 수 있으며, 그 후, 기본형이 상기 광선에 미치는 영향이 무엇인지(가령, 상기 광선을 반사하는지 굴절시키는지)가 판단된다. 이러한 반사 및/또는 굴절에 의해, 상기 광선은 다른 방향으로 진행하거나, 서로 다른 경로를 취할 수 있는 복수의 2차 광선으로 쪼개지거나, 두 가지 모두가 발생될 수 있다. 그 후, 이들 2차 광선 모두가 장면 기본형에 대해 테스트되어, 상기 2차 광선들과 충돌하는 기본형이 판단된다. 이러한 프로세스는, 2차(3차 등) 광선이, 예를 들어, 장면을 떠나거나 광원에 도달함으로써, 끝날 때까지, 재귀적으로 계속된다. 이러한 광선과 기본형의 충돌이 모두 판단되는 동안, 이들을 매핑하는 트리가 생성된다. 광선이 끝난 후, 트리를 통해 거꾸로 광원의 기여자(contribution)가 추적되어, 장면의 픽셀에 미치는 영향이 판단된다. 쉽게 이해되는 바와 같이, 수백만 개의 삼각형과의 충돌을 판단하기 위해, (예를 들어) 1024x768개의 광선을 테스트하는 것의 계산 복잡도는 계산적으로 비경제적이며, 이러한 광선 개수는, 광선과 물질의 충돌 결과로서 생성되는 모든 추가적인 광선에 대해서는 해당되지도 않는다. 일반적으로, 광선 추적 시스템은, 광선을 표현하는 데이터에 비교해, 기본형 정보를 로딩할 때 대부분의 대역폭을 사용한다.
장면을 통과하는 광선을 추적하는 것은, 실제로 막대한 양의 장면 기하학적 형상(scene geometry)을 랜덤하게 액세스하는 것을 필요로 한다. 알다시피, 통상의 계산 패러다임은, 대기시간(latency)과 대역폭과 메모리 크기의 역의 상관관계를 갖고, 다양한 메모리 계층(memory tier)에 대해 제공된다. 예를 들어, 대부분의 컴퓨팅 시스템은, 메인 동적 메모리로의 메모리 액세스를 중개하는 다 계층 캐시를 제공하며, 상기 메인 동적 메모리는 비휘발성 저장장치로의 액세스를 중개한다. 메인 동적 메모리를 액세스하는 것은 온-칩 캐시를 액세스하는 것보다 대역폭과 대기시간에 있어 몇 십 배 더 느릴 수 있으며, 비휘발성 메모리를 액세스하는 것은 메인 메모리를 액세스하는 것보다 대기시간과 대역폭에 있어 훨씬 더 느릴 수 있다. 일부 경우, 기존 프로세서 아키텍처가, 현재 메인 메모리나 비휘발성 메모리에 있는 데이터가 요청될 때를 예측함으로써, 상당한 대기시간의 차이를 성공적으로 감출 수 있다. 광선 추적법에서는 이러한 예측이 어려운 것으로 알려져 있다. 따라서 광선 추적법을 위해 계층구조의 캐시 컴퓨터를 이용할 때, 상기 캐시는 자주 한계에 도달할 수 있다(cache thrashing). 다른 한편으로는, 전체적인 복합 장면을 구성하는 모든 기본형을 랜덤 액세스할 수 있기에 충분히 빠른 메모리를 제공하는 것은 비용이 많이 들고, 대부분의 기존 시스템의 능력을 넘어서는 것이다. 미래에는, 장면 해상도 및 복잡도가 계속 증가할 것이라고 기대되고 있으며, 따라서 컴퓨터가 점점 더 강력해질 지라도, 더 많은 메모리와 더 높은 메모리 대역폭과 앞서 언급된 문제점들도 계속 증가할 것이라고 예측되고 있다.
이러한 종류의 문제와 관련하여 일부 알고리즘적 접근법이 제안되었다. 이러한 한 가지 접근법으로는, Matt Pharr 외 다수의 “Rendering Complex Scene with Memory-Coherent Ray Tracing" Proceedings of SigGraph (1997)(이하, "Pharr")에 기재된 것이 있다. Pharr에 따르면, 광선 추적될 장면을 기하학적 복셀(geometry voxel)로 분할하며, 이때 각각의 기하학적 복셀은 장면 기본형(가령, 삼각형)를 포함하는 큐브이다. Pharr은 또한 스케줄링 격자(scheduling grid)를 중첩하는 것을 기재하고 있는데, 여기서 상기 스케줄링 격자의 각각의 요소는 기하학적 복셀의 일부분을 덮을 수 있는 스케줄링 복셀이다. (즉, 스케줄링 복셀도, 기하학적 복셀의 큐브와 크기와는 다를 수 있는 장면 내 입체 큐브이다.) 각각의 스케줄링 복셀은 연계된 광선 큐(ray queue)를 가지며, 상기 광선 큐는 스케줄링 복셀 내부에 현재 위치하는 광선(즉, 이들 광선이 스케줄링 복셀 내부에 있다)과, 어느 기하학적 복셀이 상기 스케줄링 복셀과 겹치는지에 대한 정보를 포함한다.
Pharr에 따르면, 스케줄링 복셀이 처리될 때, 스케줄링 복셀 내에 포함된 기하학적 복셀의 기본형과의 충돌에 대해, 상기 연계된 큐 내의 광선이 테스트된다. 광선과 기본형의 충돌이 발견되면, 쉐이딩 계산(shading calculation)이 수행되어, 발생된 광선을 도출할 수 있으며, 상기 발생된 광선은 광선 큐에 추가된다. 상기 스케줄링 복셀에서 어떠한 충돌도 발견되지 않는다면, 광선은, 비어있지 않는 다음 번 스케줄링 복셀로 전진하고, 상기 스케줄링 복셀의 광선 큐에 위치하게 된다.
Pharr에 따르면, 이러한 접근법에 의해 추구되어지는 이점은, 일반적으로 범용 프로세서와 함께 제공될 수 있는 캐시에 장면 기하학적 형상을 맞추는 것을 보조한다는 것이다. 이에 따라서, 각각의 스케줄링 복셀 내 장면 기하학적 형상이 캐시 내에 맞는 경우, 상기 장면 기하학적 형상과 광선의 충돌 테스트 동안, 상기 캐시는 한계에 자주 도달하게 되지 않을 것이다.
또한, Pharr에 따르면, 테스트를 위한 광선을 스케줄링 복셀에 큐 저장(queuing)함으로써, 기본형이 기하학적 형상 캐시(geometry cache)로 인출될 때, 그 곳에서 더 많은 작업이 수행될 수 있다. 다음 번에 복수의 스케줄링 복셀이 처리될 수 있는 상황에서, 스케줄링 알고리즘은, 기하학적 형상 캐시로 로딩될 필요가 있는 기하학적 형상의 크기를 최소화할 스케줄링 복셀을 선택할 수 있다.
Pharr에 따르면, 특정 장면이 불균일한 복잡도를 갖는 경우, 즉, 장면의 일부 부분에서 기본형의 밀도가 더 높은 경우, 제안된 정규 스케줄링 격자가 잘 기능하지 않을 수 있다. Pharr는 정규 스케줄링 격자를 대체하여 적응적 데이터 구조(가령, 옥트리(octree))가 사용될 수 있다고 가정한다. 옥트리는, 계층구조의 각각의 층에서 장면의 각각의 주축(즉, x, y 및 z 축)을 따라는 분할을 야기함으로써, 3차원 장면에 공간적 분할을 도입한다. 결과적으로, 옥트리 분할에 의해, 8개의 더 작은 서브-볼륨이 도출되고, 이들 서브-볼륨은 각각 8개의 더 작은 서브-볼륨으로 분할될 수 있다. 각각의 서브-볼륨에서, 서브-볼륨이 추가로 분할될 것인지의 여부를 결정하는 분할할 것/분할하지 말 것 플래그(divide/do not divide flag)가 설정된다. 이러한 서브-볼륨은, 상기 서브-볼륨 내의 기본형의 개수가 테스트하기에 충분히 적어질 때까지, 분할될 필요가 있다. 따라서 하나의 옥트리에 있어서, 장면의 특정 부분에 얼마나 많은 기본형이 존재하느냐에 따라 분할 횟수가 제어된다. 따라서 옥트리에 의해, 볼륨의 다양한 수준의 입체적 분할이 렌더링될 수 있다.
이와 유사한 접근법이 Pfister에게 허여된 US 특허 제6,556,200호(이하 “Pfister")에서 공개되어 있다. Pfister는 하나의 장면을 복수의 스케줄링 블록으로 구분(partitioning)하는 것을 공개하고 있다. 각각의 블록에 대해 하나씩의 광선 큐가 제공되며, 종속도 그래프(dependency graph)를 이용하여, 각각의 큐 내의 광선이 공간 및 시간적으로 정렬된다. 상기 종속도 그래프에서 정의된 순서에 따라, 광선이 각각의 스케줄링 블록을 통해 추적된다. Pfister는 Pharr의 논문을 인용했으며, Pfister는 스케줄링 블록에 대해 (예를 들자면, 삼각형만이 아닌) 둘 이상의 유형의 그래픽 기본형을 렌더링하고, 보다 복잡한 스케줄링 알고리즘을 고안하기를 원했다. Pfister는 또한 메모리 계층구조의 다중 캐싱 레벨에서 장면 기하학적 형상의 하위-부분을 스테이징(staging)하는 것에 대해 고찰했다.
또 다른 접근법으로는 패킷 추적법(packet tracing)이 있으며, 이러한 패킷 추적법에 대한 일반적인 논문으로는 Ingo Wald, Phillip Slusallek, Carsten Benthin 외 다수,“Interactive Rendering through Coherent Ray Tracing", Proceedings of EUROGRAPHICS 2001, pp153-164, 20(3), Manchester, United Kingdom (Sep.2001)이 있다. 패킷 추적법은 격자를 통해 가간섭성 광선(coherent ray)의 그룹을 추적하는 과정을 포함한다. 상기 광선들은 실질적으로 공통적인 격자 위치로부터 발산되고, 실질적으로 서로 유사한 방향으로 이동하여, 대부분의 광선이 공통적인 격자 위치를 통과한다. 따라서 패킷 추적법은 광선이 하나의 유사한 출발점에서부터 서로 유사한 방향으로 이동하는지를 식별하는 것을 필요로 한다. 변형예로는 광선의 패킷의 에지와 경계를 이루도록 원뿔형 광선을 사용하는 것이 있으며, 이에 따라서 원뿔형 광선이 사용되어 어느 복셀이 충돌되는지를 판단할 수 있으며, 이로 인해서 하나의 특정 광선 패킷에 대한 계산 횟수가 감소된다(즉, 모든 광선이 충돌에 대해 테스트되지 않고, 패킷의 외부 에지 상에 위치하는 광선만 충돌에 대해 테스트된다). 패킷 추적법은 여전히, 서로 유사한 위치로부터 시작하여, 서로 유사한 방향으로 진행하는 광선의 식별을 필요로 한다. 광선 추적 동안 광선이 반사, 굴절 및/또는 발생됨에 따라, 이러한 광선은 점점 더 식별하기 어려워질 수 있다.
본 발명의 하나의 양태에서, 기본형(primitive)들로 구성된 3-D 장면(3-D scene)의 2-D 표현(2-D representation)을 렌더링(rendering)하기 위한 방법이 제공되며, 상기 방법은
3-D 장면을 구성하는 기본형들과의 충돌에 대해 테스트될 광선(ray)을 형성하는 단계와,
기하학적 형상 가속화 데이터(GAD: geometry acceleration data) 요소와 기본형과의 충돌에 대해 상기 광선을 병렬적으로 테스트(parallelized testing)하도록 구성된 충돌 테스팅 자원(intersection testing resource)에서 상기 광선을 수용하는 단계와,
광선을 복수의 집합(collection)으로 분배하기 위해 상기 GAD 요소의 충돌에 대해 광선을 테스트하는 단계로서, 각각의 집합은 기본형들의 집합을 바운딩하는 GAD의 하나의 요소와 연계되어 있는 특징의 단계와,
광선의 집합의 추가적인 충돌 테스트에 대한 준비여부(readiness)를 추적하는 단계와,
추가적인 충돌 테스트에 대해 준비 된 집합에 대한 테스트를 스케줄링하고, 이용가능한 상태 별로, 충돌 테스트에 대해 추가적인 광선을 스케줄링하고, 테스트에 의해, 테스트되는 광선이, 기본형의 점점 더 작은 집합을 바운딩하는 GAD의 요소와 연계된 집합으로 분배되고, 기본형이 중간 GAD 요소 없이 GAD의 주어진 요소에 의해 바운딩된다고 식별될 때, 상기 기본형들을, 상기 주어진 GAD 요소와 연계된 집합 내 광선과의 충돌에 대해 테스트하고, 임의의 식별된 충돌에 대한 표시자(indication)를 출력하는 단계와,
출력된 표시자에 의해 식별되는 충돌을 쉐이딩(shading)하는 단계로서, 이러한 쉐이딩에 의해, 추가적인 출돌 테스트를 위한 쉐이더 광선(shader ray)이 생성되는 단계
를 포함한다. 이때, 각각의 광선 그룹은 카메라 광선과 쉐이더 광선 중 한 가지를 포함하고, 집합(collection)은 상기 카메라 광선과 쉐이더 광선 중 한 가지 이상을 포함한다.
본 발명의 상기 양태에서, 상기 방법은 아직 충돌 테스트될 예정인 새로 형성된 카메라 광선보다 우선적으로, 식별된 충돌의 쉐이딩의 결과로서 발생되는 쉐이더 광선을 수용하는 단계를 더 포함한다.
본 발명의 상기 양태에서, 각각의 집합에는 광선의 최대 개수가 존재하며, 충돌 테스팅 자원은, GAD 요소와 기본형 중 하나 이상과의 충돌에 대해 상기 최대 개수 이상의 광선을 병렬적으로 테스트하도록 설정되된다.
본 발명의 상기 양태에서, 상기 충돌 테스팅 자원은 하나의 집합의 광선들을 GAD 요소와 병렬로 테스트하면서, 다른 집합의 광선을 기본형과 병렬로 테스트하도록 구성된다.
본 발명의 상기 양태에서, 각각의 광선은 하나의 샘플 및 각각의 가중치와 연계되어 있으며, 상기 각각의 가중치는 각각의 광선이 연계되어 있는 샘플에 대한 각각의 광선의 중요도를 나타내며, 나타난 충돌에 따라 생성된 쉐이더 광선의 개수는 표시자에 식별된 광선과 연계된 가중치에 의해 부분적으로 또는 전적으로 결정된다.
본 발명의 상기 양태에서, GAD는 계층구조 그래프(hierarchical graph)로서 구성되며, 상기 그래프에서, 그래프의 노드는 GAD의 요소를 나타내고, 상기 요소들은 상기 요소들 간의 상호관계를 나타내는 에지(edge)에 의해 연결되고, 그래프의 리프 노드(leaf node)는 기본형들을 바운딩하며, 비-리프 노드(non-leaf node)는 하나 이상의 중간에 삽입되는 GAD 요소를 갖고 기본형을 바운딩한다.
본 발명의 또 다른 양태에서, 기본형(primitive)들로 구성된 3-D 장면(3-D scene)의 2-D 표현(representation)을 렌더링(rendering)하기 위한 시스템이 제공되며, 상기 시스템은
3-D 장면을 구성하는 기본형들과의 충돌(intersection)에 대해 테스트될 카메라 광선을 형성하고, 식별된 충돌에 대해, 역시 충돌 테스트될 쉐이더 광선의 생성을 야기하는 쉐이딩(shading) 프로세스를 실행하고, 카메라 광선과 쉐이더 광선을 출력하기 위한 컴퓨팅 자원과,
집합(collection) 단위로, GAD(Geometry Acceleration Data) 요소와 기본형 중 하나 이상과의 충돌에 대해 광선을 테스트하기 위한 충돌 테스팅 자원(intersection testing resource)
을 포함하며, 상기 충돌 테스팅 자원은
출력된 광선을 수용하며,
상기 수용된 광선을 저장하는 메모리 자원을 관리하고,
충돌 테스팅 자원에서 충돌 테스트되도록 이용가능한 광선의 집합의 리스트를 유지관리하며, 이때 상기 광선의 집합은 GAD의 각각의 요소와 연계되고, 상기 광선은, 이러한 광선이 주어진 집합과 연계된 GAD 요소와 충돌한다고 결정되면, 상기 주어진 집합에 추가되며, 상기 충돌 테스팅 자원은
추가적인 충돌 테스트에 대해 리스트 내 집합의 준비 여부를 추적하고,
추가적인 충돌 테스트에 대해 준비 된 집합에 대한 테스트를 스케줄링하고,
스케줄링된 집합의 광선의 테스트를 시작하고, 광선이 테스트될 GAD 요소 또는 기본형을 선택하는데, 이러한 선택은 스케줄링된 집합과 연계된 GAD의 요소와 상호관계된 GAD의 요소를 식별하는 것을 기반으로 이뤄지며, 상기 충돌 테스팅 자원은
광선과 기본형 간의 식별된 충돌의 표시자를 출력한다.
본 발명의 상기 양태에서, 상기 컴퓨팅 자원은, 컴퓨터에 의해 실행가능한 인스트럭션을 이용하여, 처리될 광선의 순서를 결정하는 유지관리 프로세스를 형성하도록 설정된다.
본 발명의 상기 양태에서, 상기 컴퓨팅 자원은 카메라 광선에 비해 쉐이더 광선의 출력을 선호하도록 설정된다.
본 발명의 상기 양태에서, 쉐이딩을 위해 출력되는 쉐이더 광선의 개수는 충돌과 관련된 광선과 연계된 가중치에 따라 달라진다.
본 발명의 상기 양태에서, 상기 충돌 테스팅 자원은 먼저 수용된 광선을, 장면을 구성하는 기본형을 총체적으로 바운딩하는 GAD의 하나 이상의 요소와 연계되는 하나 이상의 디폴트 광선 집합으로 할당하도록 구성된다.
본 발명의 상기 양태에서, GAD의 요소들은 계층구조 그래프로 서로 상관되어 있으며, 이때, GAD의 요소는 그래프의 노드로 표현되고, AD의 식별된 요소들은 스케줄링된 집합과 연계된 GAD의 요소의 자손 노드를 포함한다.
본 발명의 상기 양태에서, 메모리 자원은 저장하는 광선의 최대 개수를 가지며, 광선의 집합은, 충돌 테스팅 자원에서 제공되는 충돌 테스트 셀의 개수와 동일한 최대 개수의 광선을 갖고 있을 때 가득 찬 상태가 되며, 상기 충돌 테스팅 자원은, 가득 찬 광선 집합의 테스트 스케줄링을 우선순위화하고, 컴퓨터 자원ㅇ로부터 광선을 수용함으로써, 광선 테스트의 처리량을 최대화하며, 이러한 우선순위화 후에 처리량이 이용가능한 상태로 남아 있는 경우, 메모리 자원은 최대 개수의 광선을 저장하며, 충돌 테스팅 자원은 라운드 로빈(round robin) 방식, 무작위(random) 방식 및 의사무작위(pseudorandom) 방식 중 하나 이상을 기반으로, 광선의 집합을 충돌 테스트에 대해 스케줄링한다.
본 발명의 상기 양태에서, 상기 충돌 테스팅 자원은, 거 큰 광선 집합을 테스트에 대해 우선적으로 스케줄링하고, 두 번째로, 가변 원점 및 방향의 쉐이더 광선의 생성을 시뮬레이트함으로써 더 긴 주기의 평균 처리량을 촉진함으로써 충돌 테스트의 처리를 우선순위화한다.
본 발명의 상기 양태에서, 상기 컴퓨팅 자원은, 컴퓨터 판독형 매체로부터 얻어진 컴퓨터에 의해 실행가능한 인스트럭션을 이용하여, 렌더링될 장면을 표현하는 데이터를 수용하는 단계와, 상기 장면을 표현하는 데이터를 바탕으로 GAD 요소를 공식화(formulating)하는 단계와, 기본형을 충돌 테스팅 자원으로 제공하는 단계와, 충돌 테스트될 카메라 광선을 장면으로 제공하는 단계와, 검출된 관선/기본형 충돌의 표시자(indication)을 수신하는 단계와, 쉐이딩을 위해 이러한 충돌을 배열하는 단계와, 상기 쉐이딩에 의해 2차 광선의 생성이 야기되는 단계로서, 드라이버가 충돌 테스팅 자원으로의 카메라 광선의 제공보다 이러한 2차 광선의 제공을 우선순위화하는 단계를 포함하는 방법을 수행한다.
도 1은 렌더링될 장면의 단순화된 예를 도시한다.
도 2는 도 1의 장면을 추상화하기 위해 사용되는 GAD 데이터의 그래프의 단순화된 예를 도시한다.
도 3은 렌더링 시스템의 충돌 테스팅 기능을 제공할 수 있는 충돌 테스팅 유닛의 양태를 도시한다.
도 4는 ITU에서 사용되기 위한 예시적 테스트 셀의 양태를 도시한다.
도 5는 충돌 테스팅 유닛의 추가적인 양태를 도시한다.
도 6은 ITU에서 수행될 수 있는 예시적 방법의 양태를 도시한다.
도 7은 ITU에서 수행될 수 있는 또 다른 예시적 방법의 양태를 도시한다.
도 8은 테스팅 양태에 따르는 충돌 테스팅되기 위한 프로세서 중심 구현예를 도시한다.
도 9는 이들 양태에 따르는 ITU에서 인터페이싱하는 호스트 시스템을 도시한다.
도 10A은 호스트 시스템의 추가적인 양태 및 바람직한 ITU의 호스트 시스템의 추가적인 양태를 도시한다.
도 10B는 도 10A의 ITU의 구성요소의 변형예를 도시한다.
도 11-14는 도 15 및 16에 대해 설명되는 구현 양태를 통해 더 효과적으로 표현될 수 있는 광선의 예를 도시한다.
도 15 및 26은 충돌 테스트를 위해 호스트에서 ITU로의 전송된 광선의 효과적인 표현에 대한 방법 양태를 도시한다.
도 17은 일부 양태에 따른느 광선에 대한 데이터 구조를 도시한다.
도 18-20은 본원에서 기재된 시스템에서 사용될 수 있는 광선 쉐이딩 및 광선 발산의 양태를 설명한다.
도 21은 도 18-20에 관련하여 광선 추적법을 포함하는 예시적 방법을 도시한다.
도 22는 본 발명의 양태에 따르는 시스템을 사용할 수 있는 렌더링 팜을 도시한다.
도 2는 도 1의 장면을 추상화하기 위해 사용되는 GAD 데이터의 그래프의 단순화된 예를 도시한다.
도 3은 렌더링 시스템의 충돌 테스팅 기능을 제공할 수 있는 충돌 테스팅 유닛의 양태를 도시한다.
도 4는 ITU에서 사용되기 위한 예시적 테스트 셀의 양태를 도시한다.
도 5는 충돌 테스팅 유닛의 추가적인 양태를 도시한다.
도 6은 ITU에서 수행될 수 있는 예시적 방법의 양태를 도시한다.
도 7은 ITU에서 수행될 수 있는 또 다른 예시적 방법의 양태를 도시한다.
도 8은 테스팅 양태에 따르는 충돌 테스팅되기 위한 프로세서 중심 구현예를 도시한다.
도 9는 이들 양태에 따르는 ITU에서 인터페이싱하는 호스트 시스템을 도시한다.
도 10A은 호스트 시스템의 추가적인 양태 및 바람직한 ITU의 호스트 시스템의 추가적인 양태를 도시한다.
도 10B는 도 10A의 ITU의 구성요소의 변형예를 도시한다.
도 11-14는 도 15 및 16에 대해 설명되는 구현 양태를 통해 더 효과적으로 표현될 수 있는 광선의 예를 도시한다.
도 15 및 26은 충돌 테스트를 위해 호스트에서 ITU로의 전송된 광선의 효과적인 표현에 대한 방법 양태를 도시한다.
도 17은 일부 양태에 따른느 광선에 대한 데이터 구조를 도시한다.
도 18-20은 본원에서 기재된 시스템에서 사용될 수 있는 광선 쉐이딩 및 광선 발산의 양태를 설명한다.
도 21은 도 18-20에 관련하여 광선 추적법을 포함하는 예시적 방법을 도시한다.
도 22는 본 발명의 양태에 따르는 시스템을 사용할 수 있는 렌더링 팜을 도시한다.
다음의 기재는 해당업계 종사자가 본 발명의 다양한 형태를 구현 및 사용할 수 있도록 하기 위해 제공된다. 특정 기법, 구현예 및 응용예에 대한 기재는 단지 예로서 제공된 것이다. 해당업계 종사자라면 이러한 본원에서 기재된 예에 대한 다양한 수정을 명백히 알 수 있으며, 본 발명의 범위 내에서, 본원에서 정의되는 일반적인 원리가 또 다른 예시 및 응용예에 적용될 수 있다.
3차원(3-D) 장면(scene)의 예시(도 1)에 관련된 형태를 소개하는 것부터 본원의 설명이 시작되며, 상기 도 1의 예시는 도 2의 예시에서 나타난 바와 같이, 기하학적 형상 가속화 데이터(geometry acceleration data)로 추상화될 수 있다. 이러한 3-D 장면은, 본원에서 설명되고 기재되는 예시에 따르는 시스템 및 방법에 의해, 2차원 표현으로 렌더링될 수 있다. 상기 본 발명의 시스템은 광선과 기본형(primitive) 간의 충돌(intersection)의 식별을 가속화하기 위한 충돌 테스트 자원과, 애플리케이션 필요 렌더링 서비스와 인터페이싱하고 충돌 테스트 자원과 인터페이싱하는 프로세싱용 호스트 컴퓨팅 자원을 포함하며, 또한 상기 충돌 테스트 자원에 의해 식별된 충돌을 쉐이딩(shading)-처리하는 프로세스도 포함한다.
이러한 충돌의 쉐이딩은 충돌 테스트를 위한 더 많은 광선의 생성을 야기할 수 있으며, 또 다른 시스템 및 방법의 형태는, 렌더링 품질의 열화는 최소화하면서, 이러한 광선을 목표 또는 또 다른 기준에 부합하도록 적응적으로 공식화하는 방법을 포함한다. 복수의 광선이 병렬적으로 추적되고, 충돌 테스트 자원의 처리량이 높아짐에 따라, 본 발명의 시스템 및 방법은 충돌에 대해 테스트될 다수의 타입의 광선을 기술(describe)하는 효율을 증가시킬 수 있으며, 따라서 충돌 테스트 자원으로 광선을 전송하기 위한 대역폭이 감소하게 된다.
다음의 그래프는 추후 설명될 본 발명의 시스템과 방법의 형태를 이해하기에 유용한 개념의 총괄을 제공한다.
[배경기술] 항목에서 설명된 바와 같이, 3-D 장면을 렌더링하는 것은 상기 장면을 디스플레이를 위한 2-D 표현으로 생성하는 것과 관련된다. 이러한 변환은 상기 장면을 바라보는 카메라 위치를 선택할 것을 필요로 한다. 카메라 위치는 종종 장면의 뷰어(viewer)(가령, 게임하는 사람, 애니메이션을 시청하는 사람 등)의 위치를 나타낸다. 일반적으로, 2-D 표현은 카메라와 장면 사이의 평면 위치에 있어서, 2-D 표현은 희망 해상도의 픽셀 어레이를 포함한다. 각각의 픽셀에 대한 색상은 렌더링을 통해 결정된다. 광선 추적 동안, 먼저, 광선이, 2-D 표현의 평면과 희망 포인트에서 충돌하도록 카메라 위치로부터 쏘아질 수 있으며, 그 후, 3-D 장면으로 계속된다. 이때, 광선이 2-D 표현과 충돌하는 곳의 위치가 보관된다(예를 들어, 상기 광선과 연계된 데이터 구조에 저장된다).
카메라 위치(즉, 충돌 테스트될 광선의 최초 발산 포인트)가 반드시 공간에서 하나의 포인트로 정의될 필요는 없으며, 카메라 위치가 확산적일 수 있다. 따라서 광선은 카메라 위치 내라고 여겨지는 복수의 포인트로부터 쏘아질 수 있다. 각각의 광선은 2-D 표현과 하나의 픽셀(또한 표본이라고도 일컬어질 수 있음) 내에서 충돌한다. 일부 구현예에서, 광선이 픽셀과 충돌한 더 정확한 위치가 기록될 수 있으며, 이로 인해서, 이웃하는 픽셀들 간에서 색상의 더 정확한 보간(interpolation) 및 혼합(blending)이 가능해질 수 있다.
일반적으로, 물체(object)의 표면을 근사하는 많은 수의 작은 기하학적 기본형(geometric primitive)(가령, 삼각형)을 제공함으로써, 3-D 장면 내 사실적이고 세밀한 물체의 윤곽이 표현된다(예를 들어, 와이어 프레임 모델). 따라서 복잡한 물체는, 더 단순한 물체보다, 더 많고 더 작은 기본형으로 표현될 필요가 있다. 특히, 복잡한 장면은 많은 물체를 가질 수 있기 때문에, 더 높은 해상도를 이용할지라도, 광선과 복수의 기본형 간의 충돌 테스트를 수행하는 것은 연산 집약적이다. 따라서 하나의 장면에서 하나 이상의 기본형에 대한 경계값을 근사(또는 추상화)하여, 이러한 테스트를 가속화하기 위해, 기하학적 형상 가속화 데이터(geometry acceleration data)(이하, GAD)가 사용될 수 있다.
명료한 기재를 위해, 특정 타입의 물체에 대한 데이터(가령, 삼각형 기본형의 3개의 꼭짓점에 대한 좌표)가, 상기 물체에 대한 데이터를 언급하기 보다는, 상기 물체 자체로서 기재된다. 예를 들어, “기본형 인출하기(fetching a primitive)”를 언급할 때, 상기 기본형을 나타내는 데이터가 인출되는 것으로 이해되어야 한다.
기하학적 형상 가속화 데이터(
Geometry
Acceleration
Data
)
충돌 테스트를 가속화하기 위해 앞서 다른 물체 또는 기본형의 경계값을 근사(추상화)하기 위한 수단으로서 GAD(Geometry Acceleration Data)가 소개되었다. GAD는 장면 내 기본형들의 집합을 각각 바운딩(bounding)하는 요소를 포함할 수 있다. 바운딩은, 3-D 공간에서 각각의 기본형 집합을 둘러싸는 기하학적 형상을 제공하는 과정을 포함할 수 있으며, 따라서, 광선이 상기 기하학적 형상의 표면에 충돌하지 않는 것은, 상기 광선이 상기 형태에 의해 바운딩되는 어떠한 기본형과도 충돌하지 않음을 나타낸다. 무엇보다 GAD가 광선과 기본형 간의 충돌을 더 빨리 식별하기 위해, 기본형을 추상화하는데 유용하기 때문에, GAD 요소는 광선과의 충돌에 대해 쉽게 테스트될 수 있는 형태인 것이 바람직하다. 예를 들어, 광선과의 충돌에 대해 구(sphere)를 테스트하는 것은 보통, KD 트리 내 3-D 박스를 테스트하는 것보다 연산을 덜 필요로 한다. GAD 형태에 대한 그 밖의 다른 고려사항으로는, 근사되는 경계값을 갖는 기본형의 형태가 있으며, 또한 GAD 형태가 기본형 또는 기본형 집합에 더 잘 맞도록 회전되어야 하는가의 여부 또는 하나의 장면 내에서 형태가 회전되지 말아야 하는가의 여부가 있다. GAD로서 사용될 수 있는 구조의 예로는, 구, 정사각형, 직사각형, 스플라인(spline)의 그룹 등이 있다.
GAD는 서로 상호관련되어 있을 수 있는 복수의 개별적인 요소를 포함할 수 있다. 예를 들어, GAD의 요소는 복수의 구일 수 있으며, 이때, 각각의 구는 렌더링될 장면의 외관(aspect) 또는 부분을 기술하는 기하학적 형상들의 일부분을 바운딩한다. 복수의 GAD 요소(가령, 구)는 하나의 그래프에서 상호관련되어 있을 수 있다.
GAD의 요소들의 그래프에서, 상기 요소들은 그래프 노드로서 식별될 수 있으며, 한 쌍의 요소가 에지에 의해 연결될 수 있다. 한 쌍의 요소들이 에지에 의해 연결되는 경우, 상기 에지는 노드 중 하나가 나머지 노드와는 다른 상대 입도(relative granularity)를 가진다고 나타낼 수 있는데, 이는 에지가 연결하는 노드들 중 하나의 노드가 나머지 노드보다 더 많거나, 더 적은 기본형들을 바운딩한다는 것을 의미할 수 있다. 따라서 이러한 GAD의 배열에서, 충돌 테스트 동안, 에지를 따라서 그래프를 횡단함으로써, 충돌 테스트 중인 광선이 다양한 개수 및/또는 배열의 기본형들을 바운딩하는 GAD 요소에 대해 테스트될 수 있다.
앞서 언급된 바와 같이, 구는 GAD 요소로서 사용될 수 있는 형태의 하나의 타입이다. GAD 요소로서 구를 사용하면, GAD 그래프의 부분의 이동성(portability)/교환가능성(interchangeability)이 강화될 수 있다. 구체의 GAD의 그래프는, KD 트리에서 그러는 것처럼 공간적으로 또는 그 밖의 다른 방식으로 균형 상태를 유지한다는 명시적인 목표로 순응될 필요가 없다. 예를 들어, 이러한 그래프의 부분 전체가 원하는 대로 이동될 수 있다. 이러한 이동성에 의해, GAD 그래프의 최적화가 가능해질 수 있으며, 이러한 최적화는 둘 이상의 프레임 동안 렌더링 시스템에서 유지될 것이다. 또한 사용자가 시스템에게, 어느 기본형 및 기하학적 형상의 그 밖의 다른 조각이 더 큰 장면에 대한 빌딩 블록을 포함하는지, 또는 상기 장면에서 광선의 불균형하게 큰 부분에 의해 충돌될 수 있는지에 관한 힌트를 제공하는 것을 가능하게 할 것이다.
본 발명의 일부 양태에서, GAD의 그래프가 장면을 기술하는 기본형을 총체적으로 바운딩하는 하나 이상의 루트 노드(root node)를 포함하도록, GAD의 요소가 그래프에서 계층적으로 배열될 수 있으며, 각각의 루트 노드는 기본형들의 부분집합을 바운딩한다. 또한 장면은 단지 주어진 범위만 갖기 때문에(즉, 장면은 유한하기 때문에), GAD의 그래프의 루트 노드는 단순하게 함축될 수 있고, 상기 루트 노드는 전체 장면을 포함하는 것으로 정의될 수 있다. 예를 들어, 하나의 장면이 바운딩 박스 또는 구 내에서 형성될 수 있으며, 루트 노드는 상기 바운딩 박스 또는 구와 기능적으로 동일한 영역에 있다고 할 수 있다.
각각의 루트 노드가 하나 이상의 자손 노드를 가질 수 있으며, 상기 자손 노드는 각각, 각각의 루트 노드에 의해 바운딩되는 기본형에 포함된 부분집합을 바운딩한다. 차례로, 이들 자손 노드는 부모 요소로서 기능할 수 있는데, 각각의 부모 노드에 의해 바운딩되는 기본형에 포함된 부분집합을 바운딩하는 하나 이상의 자손 요소가 있을 수 있다. 특정 부모 노드의 자손 노드에 의해 바운딩되는 기본형 부분집합들은 서로소일 수 있으며, 그 결과로, 자손 노드들 중 하나에 의해 바운딩되는 기본형은 또 다른 자손 노드에 의해서 다시 바운딩되지 않는다. 다양한 자손 노드들은 각자의 바운딩되는 기본형 집합들 간에 넌-제로 유니온(non-zero union)을 가지면서, 반면에 부분집합 관계는 갖지 않을 수 있다.
GAD의 특정 요소에 의해 바운딩되는 기본형의 추가적인 분할은, 이러한 GAD 요소 내에서 바운딩되는 기본형의 개수가, 추가적인 분할이 필요하지 않을 만큼 충분히 작다고 추정될 때까지 이뤄질 수 있다. GAD의 요소들 간의 기본형의 이러한 분할은 기본형의 그룹을 원하는 입도(granularity)의 정도로 참조하기 위한 뼈대를 제공하는 기능을 할 수 있다. 예를 들어, 도 1에서 도시된 나뭇잎은 먼저, 전체 나뭇잎을 바운딩하는 구(즉, GAD의 요소)를 이용해 추상화되고, 그 후, 상기 나뭇잎의 더 작은 부분들이 더 작은 구 또는 그 밖의 다른 형태를 이용해 추상될 수 있다. 예를 들어, 하나 이상의 구를 이용하여 잎맥이 추상화될 수 있다. 전체 나뭇잎을 바운딩(추상화)하는 구가, 상기 나뭇잎의 일부분만 바운딩하는 구를 전체적으로 바운딩할 필요는 없으며, 그렇게 하지 않는 경우가 빈번할 수 있다. 즉, 하나의 장면 내 기본형은 복수의 GAD 요소에 의해 바운딩될 수 있지만, 상기 기본형을 바운딩하는 각각의 GAD 요소가, 상기 기본형을 역시 바운딩하는 또 다른 GAD 요소에 의해 또 바운딩될 필요는 없다는 것이다.
본 발명의 바람직한 양태에서, 분할의 충분함 여부는 충돌 테스트를 수행하기 위한 하드웨어 유닛 또는 그 밖의 다른 자원의 특성을 기반으로 할 수 있다. 예를 들어, (이하에서 예로서 제시될) 충돌 테스트 유닛이 32개의 테스트 유닛을 포함하는 경우, 분할은 GAD의 특정 요소에 의해 32개의 기본형만 바운딩될 때까지만 분할은 계속되어, GAD의 하나의 요소에 의해 바운딩되는 모든 기본형의 테스트가 병렬로 이뤄질 수 있다(이는 이하에서 더 상세히 설명될 것이다).
앞서 설명된 예시가 하나의 그래프로 배열되는 구(球)형 바운딩 요소의 예시에 초점을 맞췄지만, 그 밖의 다른 타입의 기하학적 형상 가속 구조(예를 들어, KD 트리, 옥트리, BSP 트리 및 복셀 격자)가 노드의 그래프로서 배열될 수 있다. 예를 들어, 그래프의 노드는, kd 트리를 기초로 하는 경우라면, kd-트리의 노드를 포함할 것이다. 그래프의 에지(edge)는 주어진 공간의 추가적인 분할 개념을 포함할 것이다. 즉, 주어진 노드는 자신을 8개까지의 다른 노드와 연결하는 8개까지의 에지를 가질 것이다. 이때 상기 8개의 다른 노드는 상기 주어진 노드의 경계 내에서 발견되는 입방체이다. 언급된 다른 예시적 기하학적 형상 가속 구조에 유사한 상황이 적용된다.
본원에서 GAD의 바람직한 임의의 양태를 요약해보면, GAD는 노드의 그래프를 포함할 수 있으며, 여기서 노드는 각각의 에지에 의해 다른 노드로 연결될 수 있다.
임의의 양태에서, 각각의 노드는 나머지 노드 중 단 하나의 노드로 연결된다. 임의의 양태에서, 제 1 노드를 제 2 노드로 연결하는 에지는 상기 제 1 노드와 제 2 노드 간의 입도의 방향을 나타낸다. 예를 들어, 더 높은 입도는, 하나의 에지에 의해 연결되는 제 1 노드와 제 2 노드 중 어느 노드가 더 적은 GAD 요소, 또는 개별적인 기하학적 형상 조각, 또는 이들의 조합을 바운딩하는지를 나타낼 수 있다. 반대 예를 들자면, 더 낮은 입도는 상기 노드들 중 하나가, 또 다른 에지에 의해 상기 더 낮은 입도 노드와 연결될 수 있는 다른 노드에 의해 바운딩되는 기본형을 바운딩하는 것에 추가로, 더 높은 입도 노드에 의해서도 바운딩되는 기본형 모두를 바운딩함을 나타낼 수 있다.
이러한 입도의 방향은 그래프에서 명시적으로, 또는 묵시적으로 정의될 수 있는데, 이는 명시적으로 정의된 경우, 의도적 지향성 검색이 더 큰 GAD 요소에서 더 작은 요소의 일반적인 방향으로 실시되어, 점점 더 적은 기본형이 충돌 테스트를 위해 식별될 수 있음을 의미한다. 방향이 묵시적인 경우, 지향성 검색은 우연하게 발생할 수 있거나, 바운딩 볼륨을 정의하는 정보가 그래프에서 방향을 추출하기 위해 사용될 수 있다. 예를 들어, GAD 요소의 상대 크기를 판단하기 위한 테스트가 실시될 수 있으며, 요소들 중 더 작은 요소가 선택될 수 있다.
넓게 보자면, GAD의 요소는, GAD의 나머지 요소뿐 아니라, 또 다른 GAD 요소에 의해 바운딩되는 기본형과 임의의 더 작은 GAD 요소에 의해 적어도 부분적으로 바운딩되는 기본형까지도 이종적으로(heterogenously) 바운딩할 수 있다. 예를 들어, 더 큰 구가 도 1에서 도시된 전체 나뭇잎을 바운딩하면서, 각각의 더 작은 구가 나뭇잎의 잎 끝을 정의하는 기본형을 바운딩할 수 있다. 그러나 나뭇잎의 일부분이 전체 나뭇잎을 바운딩하는 구보다 작은 어떠한 구에 의해서도 바운딩되지 않는 기본형에 의해 정의될 수 있다. 이와 달리, GAD의 임의의 하나의 요소가 기본형이나 그 밖의 다른 GAD 요소만을 바운딩하여, GAD 배열의 나뭇잎 노드에 도달할 때까지 기본형이 충돌에 대해 테스트되지 않도록, GAD 배열이 정의될 수 있다.
임의의 특정 예시에 대해 추가로 설명하자면, 계층적으로 배열된 GAD가 3차원 장면의 기하학적 형상을 표현하기 위해 사용될 수 있다. 계층적으로 배열된 GAD의 루트 노드가 전체 3차원 장면을 표현할 수 있다. 상기 계층적으로 배열된 기하학적 형상 가속화 데이터(GAD)의 중간 노드는 3차원 장면의 기하학적 형상의 서로 다른 크기를 갖는, 또는 서로 다른 그룹에 속하는 하위부분을 표현할 수 있다. 계층적으로 배열된 기하학적 형상 가속화 데이터의 나뭇잎 노드는 3차원 장면의 기하학적 기본형을 바운딩할 수 있다. 또한 GAD의 임의의 그래프가, 자신의 노드로서, 횡단될 수 있는 노드로 구성된 완전한 서브-그래프(sub-graph)를 포함할 수 있다. 그리고 계층적 그래프의 특정 예에서, 각각의 노드는 계층적 서브-그래프를 포함할 수 있다.
기본형간 계층구조(intra-primitive hierarchy)를 생성할 때, 단순한 상태 머신으로도 (고도로 최적화된 계층구조만큼이나 바람직한 계층구조에 가까운) 충분한 결과가 산출될 수 있다. 이는 대부분의 물체가 구와 어느 정도는 닮아 있고, 장면 내 물체들이 물체들 사이의 공간에 비해 더 큰 것이 일반적이기 때문이다. 기하학적 기본형 데이터와 기하학적 형상 가속화 데이터는 비동기적으로 생성될 수 있으며, 그 결과로, 소프트웨어 드라이버가 장면 기술(scene description)을 수신할 수 있고, 장면 기술로부터 기하학적 기본형 데이터와 기하학적 형상 가속화 데이터 모두를 생성할 수 있다.
더 구체적인 예를 설명하자면, 도 1은 나뭇잎(100)의 평면도로서, 여기서 기하학적 형상 가속화 데이터가 나뭇잎을 구성하는 기본형들의 집합을 바운딩하며, GAD의 노드가 도 2의 예시적 그래프(200) 배열로 디스플레이된다. 나뭇잎(100)은 2개의 큰 삼각형(즉, 삼각형(130)과 삼각형(125))으로 구성된 배경 상에서 위치하는 것으로 도시된다. 각각의 원과 박스(box)가 3-D 구와 박스를 표현한다. 상기 박스는 사각형이나 입방체일 수 있으며, 또는 구현예에서 요구되는 그 밖의 다른 형태(가령, 평행육면체)일 수도 있다.
도시된 바와 같이, GAD의 요소는 구가 아닌 형태(가령, 사각형(251, 252, 253 및 254))를 포함할 수 있다. 이러한 바운딩의 또 다른 양태로는, 구(220)가 루트 노드로 기능하여 전체 나뭇잎을 바운딩하는 것이 있다. 구(221)는 나뭇잎(100)의 배경을 구성하는 큰 삼각형(130 및 125)뿐 아니라 나뭇잎(100)까지 바운딩한다. 구(220)는 구(221)와 구(241) 모두를 바운딩하며, 상기 구(241)는 구(240)를 바운딩한다. 구(240)와 구(241)는 모두 나뭇잎(100)을 구성하는 기본형을 바운딩한다. 구(220, 221, 240 및 241)의 배열은 하나의 구가 복수의 “자손” 구를 반드시 바운딩할 필요는 없음을 설명한다. 또한, 구(220 및 221)의 배열(도 2 참조)은 2개의 구가 하나의 동일한 기하학적 형상을 바운딩할지라도, 이들이 장면 내 기본형의 부분집합을 바운딩하는 노드로의 연결을 가져야 하는 것은 아니다.
구(215)는 나뭇잎(100)의 잎끝 4분의1을 바운딩한다. 구(240)가 구(215)에 의해 바운딩되는 기본형을 바운딩할지라도, 구(215)가 구(240)에 의해 전체적으로 바운딩되지는 않는다. 도 2의 구(215)를 참조할 때, 노드(210-214)는 구(215)의 자손이지만, 관심 고려사항은 기본형이 바운딩된다는 것이기 때문에, 각각의 구(210-214)의 전체 범위는 구(215)에 의해 바운딩될 필요는 없다. 구(242 및 243)는 나뭇잎(100)의 중심 잎맥의 부분을 바운딩한다. 박스(230)는 나뭇잎(100)의 기본형들의 집합을 바운딩하고, 또한 그래프(200)에서 도시된 바와 같이, 자손 노드(250-254)를 포함한다. 박스(250)는 기본형을 직접 바운딩하기도 하고, 자손 노드를 바운딩하기도 한다. 박스(251 및 252)는 기본형들을 직접 바운딩하며, 박스(253 및 254) 각각은 하나의 기본형을 바운딩한다. 박스와 구 모두를 사용하는 것은 GAD에 대한 서로 다른 형태가 동시에 사용될 수 있음을 나타낸다. 또한, GAD 요소는 하나의 기본형, 또는 둘 이상의 기본형을 바운딩할 수 있다.
도 2는 도 1의 장면을 추상화하기 위해 사용될 수 있는 GAD의 요소의 그래프(200)를 도시한다. 특히, (도 1은 작은 장면을 도시하고 있지만) 장면 기본형들은 렌더링될 평균 장면 크기에 비교할 때 꽤 작기 때문에, 보통은, GAD의 실제 그래프가 그래프(200)보다 훨씬 더 클 것으로 이해될 것이다. 그래프(200)는, 각각 장면을 구성하는 기본형의 일부분을 바운딩하는 GAD의 요소를 표현하는 노드들만 포함한다. 이해하다시피, 이러한 예시는 그래프에서 GAD의 요소의 고도로 계층화된 배열을 갖는다. 설명을 위해, 노드(230)에서 광선이 GAD의 요소와의 충돌에 대해 테스트되고, 노드(230)에서 충돌하지 않는 경우, GAD 요소(240-244) 또는 상기 요소들 내 기본형에 대해서는 테스트가 이뤄질 필요가 없다. 우발적으로, 또는 다르게, 하나의 기본형이 복수의 GAD 요소에 의해 바운딩되는 경우, 이들 요소들 간의 공간에서 적어도 부분적으로 겹치는 부분이 존재하고, 이러한 겹치는 부분 내 기본형에 대한 충돌 테스트는 건너뛰어져서, 추후 또 다른 GAD 요소의 프로세싱 동안 수행되도록 할 수 있다.
충돌
테스팅
(
Intersection
Testing
)
도 3은 충돌 테스팅 자원의 하나의 예이며, 렌더링 시스템에서 3차원 장면의 2차원 표현을 광선-추적하기 위해 사용될 수 있는 충돌 테스팅 유닛(intersection testing unit)(이하, “ITU”)(350)의 블록도를 포함한다. ITU(350)는 제어 프로세스나 드라이버를 통해 호출될 수 있는 기능이나 유틸리티로서 관찰될 수 있으며, 상기 제어 프로세스나 드라이버는 ITU(350)에게, 광선 및 상기 광선이 충돌에 대해 테스트될 장면의 요소를 제공한다. 이러한 프로세스 및 드라이버의 예는 추후의 도면과 관련지어 기재될 것이다.
광선 추적을 가속하기 위해, 장면의 부분들을 바운딩하는 GAD가 ITU(350)에 제공되고, 이러한 GAD를 ITU가 광선의 충돌 테스팅을 가속화하기 위해 사용될 수 있다. ITU(350)에 의해 상기 GAD가 유용한 포맷으로 제공될 것이며, 상기 GAD는 핸드쉐이크 절차(handshake procedure), 또는 매개변수 선택, 미리 계획된 구성 등의 대상일 될 수 있다.
ITU(350)는 식별된 충돌의 표시자(indication)를 리턴(return)하며, 통상 이러한 표시자는 ITU(350)가 광선과 상기 광선이 주어진 정확도 내에서 충돌하는지 판단되는 기본형을 식별하기에 충분한 정보를 제공한다는 것을 나타낸다.
예를 들어, 그 밖의 다른 렌더링 프로세스, 가령, 쉐이딩 및 초기 광선 발생 기능을 이용하여 ITU(350)와 인터페이싱하는 드라이버를 통해 ITU(350)에 정보가 제공될 수 있다. ITU(350)는 자신에게 제공되는(또는 자신에게 제공되는 그 밖의 다른 정보를 기반으로 하여 획득된) 광선, GAD, 기본형(또는 더 일반적으로는 장면의 기하학적 형상)을 이용하여 충돌 테스트를 수행할 수 있기 때문에, ITU(350)의 관점에서, 상기 ITU(350)는 자신에게 제공되는 정보의 기원을 “인지”하고 있을 필요가 없다. 따라서 ITU(350)가 시스템으로 충돌 테스트 기능을 제공함으로써, 시스템 전체적으로 장면의 2-D 표현을 렌더링할 수 있다.
ITU(350)는 자신에게 데이터가 제공되는 방식, 시기 및 어떠한 데이터가 제공되는지를 제어할 수 있다. 그 결과로, ITU(350)는 수동형이 아니다. 그리고 예를 들어, ITU(350)는 충돌 테스트를 위해 요구될 때 광선, 기하학적 형상 데이터, 또는 가속화 데이터를 인출할 수 있다. 예를 들어, 충돌 테스트를 위한 많은 수의 광선이, 테스트될 광선을 포함하는 장면을 식별하기에 충분한 정보와 함께, ITU(350)로 제공될 수 있다. 따라서 ITU(350)는 프로세싱 동안 광선의 임시 저장을 제어할 수 있으며, 프로세싱 동안 필요할 때 GAD의 기본형과 요소의 인출도 개시할 수 있다. 일부 예에서, 주어진 시간 동안, 1만 개(10,000) 이상의 복수의 광선이 충돌 테스트를 위해 ITU(350)에 제공될 수 있다. 예를 들어, 시동될 때, ITU(350)에 1만 개(10,000) 이상의 광선이 제공될 수 있으며, 광선 테스트가 종료되어 감에 따라, ITU(350)에서 처리되는 광선의 개수를 최초 개수에 근사하게 유지하도록 새로운 광선이 제공될 수 있다.
또한, ITU(350)는 자신에게 입력 데이터를 제공하거나 자신의 출력을 수신하는 유닛과 비동기로(asynchronously) 동작할 수 있다. 여기서, 용어 “비동기(asynchronous)”는, 전에 수신된 광선에 대한 충돌 테스트가 계속되는 동안 ITU가 추가적인 광선의 충돌 테스트를 수신하고 시작할 수 있다는 의미를 포함할 수 있다. 또한, 용어 “비동기”는, ITU(350)가 광선을 수신한 순서대로 광선들이 충돌 테스트를 끝낼 필요가 없다는 의미를 포함할 수 있다. 또한 용어 “비동기”는, 3-D 장면 내에서의 광선의 위치 또는 장면 상에 중첩되는 스케줄링 격자의 위치에 관계없이, ITU(350)의 충돌 테스팅 자원이 충돌 테스팅의 할당이나 스케줄링에 대해, 또는 세대 간 관계(intergenerational relationship)를 갖는 광선(가령, 부모 광선과 적은 수의 부모 광선으로부터 생성된 자손 광선)만, 또는 특정 세대의 광선(가령, 카메라 광선, 또는 2차 광선)만 테스트하기 위해, 이용 가능한 상태라는 의미도 포함한다.
이러한 예시적 ITU(350)의 특성에 관련하여, ITU(350)는 메모리(340)를 포함하며, 상기 메모리(340)는 광선 공급원(ray source, 305)으로부터 광선을 수신하고, 상기 광선 공급원(305)은 예를 들어, 호스트 프로세서, 또는 쉐이딩 코드(shading code) 또는 쉐이딩 프로세서, 또는 이들의 조합 상에서 실행되는 드라이버일 수 있다. 메모리(340)는 (광선 데이터(333)로 식별되는) 광선 데이터를 저장하기 위한 논리적 및/또는 물리적 파티션과, 광선 집합 버퍼(ray collection buffer, 331)를 포함할 수 있으며, 둘 모두, 이들의 용도와 기능이 본원에서 추가로 설명될 것이다.
ITU(350)는 복수의 테스트 셀(310a-310n) 및 테스트 셀(340a-340n)을 포함한다. 본 예시에서, 테스트 셀(310a-310n)은 GAD 데이터 저장소(316)로부터 제공된 GAD의 요소를 테스트하기 위한 것이며, 테스트 셀(340a-340n)은 기본형 데이터 저장소(317)로부터 제공된 기본형을 테스트하기 위한 것이다. 논리적으로, GAD 데이터 저장소(316) 및 기본형 데이터 저장소(317)는 따로 따로 식별되지만, 동일한 물리적 메모리 자원이거나 부분적으로 공유되거나 부분적으로 분리되어 있을 수 있다.
또한 ITU(350)는 기본형과 상기 기본형과 추돌하는 광선의 식별된 충돌에 대한 표시자(indication)를 수신하는 출력 버퍼(375)를 포함한다. 예를 들어, 상기 표시자는, 기본형과 충돌한 광선을 식별하기에 충분한 정보와 짝을 이루는 기본형에 대한 식별을 포함한다. 광선에 대한 식별 정보는, 호스트 프로세서가 이용가능한 자원에서 유지되는 광선의 리스트(list)에서 특정 광선을 식별하는 참조(reference), 예를 들어, 인덱스(index)를 포함할 수 있다. 예를 들어, 상기 리스트는 호스트 프로세서 상에서 실행 중인 드라이버에 의해 유지될 수 있다. 또한 광선 식별 정보는 상기 광선을 재구성(reconstruct)하기에 충분한 정보(가령, 광선의 발생점과 방향)도 포함할 수 있다. 참조를 전달할 때는 더 적은 수의 비트가 필요할 것이며, 이는 이점이 될 수 있다.
ITU(350)는 집합 관리 로직(collection management logic, 380)도 포함하며, 본원에서 추후 상세히 기재될 것이지만, 상기 집합 관리 로직은 메모리(340)에 저장된 광선 집합에 대한 상태를 추적하고, 어느 집합이 처리될 준비가 되었는지를 판단한다. 도 3에서, 집합 관리 로직(380)이 상기 메모리(340)로 연결되어 있는 것으로 도시되어 있으며, 테스트를 위해 광선을, 연결된 테스트 셀의 각각으로 전달하는 것을 개시한다. ITU(350)가 GAD 요소(그 밖의 다른 GAD 요소나 기본형을 바운딩하는 GAD 요소)를 이용해 동작하는 경우, 집합 관리 로직(380)은, 이들의 조합보다는, 특정 집합이 하나의 GAD 요소(기본형이나 그 밖의 다른 GAD 요소들을 바운딩하는 GAD 요소)와 연계되어 있는가의 여부에 따라서, 테스트 셀(340a-340n)이나 테스트 셀(310a-310n)에 각각 광선을 할당한다.
특정 GAD 요소가 그 밖의 다른 GAD 요소와 기본형 모두를 바운딩할 수 있는 예에서, ITU(350)는 각각의 테스트 셀뿐 아니라 광선에 GAD 요소와 기본형을 모두 제공하기 위한 데이터경로(datapath)를 가질 것이며, 집합 관리 로직(380)은 테스팅 자원들 간에서 집합 중 광선을 테스트하도록 배열될 것이다. 이러한 예에서, GAD 요소와 기본형 간의 통상적인 형태 차이(가령, 구와 삼각형) 때문에, 테스트 로직을 스위칭하거나, 테스트되는 형태에 대해 최적화된 충돌 테스트 알고리즘을 로딩하기 위한 표시자(indication)가 집합 관리 로직(380)으로부터 제공될 수 있다.
이에 추가하여, 또는 이를 대체하여, 집합 관리 로직(380)은 테스트 셀(310a-310n) 및 테스트 셀(340a-340n)과 인터페이싱할 수 있다. 이러한 변형DP에서, 집합 관리 로직(380)은 각각의 테스트 셀에 정보를 제공하여, 각각의 테스트 셀은 메모리(340)로부터 테스트를 위한 광선 데이터의 인출을 개시할 수 있다. 테스트 로직(380)이 메모리(340)로부터 분리되어 있는 것으로 도시되었지만, 구현 시, 테스트 로직(380)에 의해 수행되는 관리 기능이 메모리(340)에 저장된 데이터에 대부분 관련될 때, 테스트 로직(380)은 메모리(340)의 회로 내에서 상호 관련되어 구현될 수 있다.
충돌 테스트 자원에 의한 메모리(340)로의 액세스의 병렬화 정도를 증가시킬 수 있는 것이 본원에서 기재된 본 발명의 양태의 하나의 이점이다. 따라서 메모리(340)로의 액세스 포트의 개수가 증가함에 따라, 바람직하게는, 테스트 셀 당 최소한 하나의 개수까지로 증가시키는 것이 바람직하다. 이러한 실시예의 구성 및 이점의 예가, 도 5와 관련하여, 더 설명될 것이다. 도 6 및 7의 방법(600 및 700)과 관련하여 ITU(350)의 동작의 예시가 제공된다.
도 4는 테스트 셀(310a)의 예를 도시하며, 상기 테스트 셀(310a)은 작업 메모리(410)와 테스트 로직(420)을 포함할 수 있다. 작업 메모리(410)는 몇 개의 레지스터일 수 있으며, 이러한 레지스터들은 표면과의 충돌에 대해 라인 세그먼트(line segment)를 테스트하기에 충분한 정보를 포함하거나 또 다른 구현예에서는 더 복잡할 수 있다. 예를 들어, 작업 메모리(410)는, 충돌에 대해 수신된 특정 형태를 테스트하도록 테스트 로직(420)을 설정하기 위한 인스트럭션을 저장하고, 수신된 데이터를 바탕으로 어떠한 형태가 수신되었는지를 검출할 수 있다. 예를 들어, 하나의 점과 상기 점에 대한 반경에 의해, 하나의 구가 특정될 수 있다. 하나의 구가 이 데이터의 관점에서 GAD로서 사용되었다는 점이 추론될 수 있다. 테스트 로직(420)은 이용 가능한, 또는 선택가능한 해상도로 충돌 테스트를 수행하며, 검출된 충돌이 존재하느냐의 여부를 가리키는 하나의 2진 값을 리턴할 수 있다. 상기 2진 값은 판독을 위해 작업 메모리에 저장되거나 메모리(340)의 판독 사이클 동안 래칭(latching)을 위해 출력될 수 있다.
도 5는 예시적 메모리 구성에 더 상세히 초점을 맞추면서, 충돌 테스팅 유닛(500)의 구현예의 양태를 도시한다. ITU(500)에서, 테스트 셀(310a-310n) 및 테스트 셀(430a-340n)이 다시 나타난다. 이는 테스트 셀의 개수에 대한 어떠한 필수조건을 의미하는 것은 아니다. 이 예시에서, 테스트 셀(310a-310n)은 GAD 요소의 충돌 테스팅을 위한 것이며, 테스트 셀(340a-340n)은 기본형의 충돌 테스팅을 위한 것이다. 따라서 ITU(500)에서 기본형과 GAD 요소 모두 병렬로 테스트될 수 있다. 그러나 하나의 종류의 테스트 셀, 또는 또 다른 종류의 테스트 셀이 필요하다고 판단된 경우, 임의의 테스트 셀은 적정하게 재구성될 수 있다. 트랜지스터 밀도가 계속 증가함에 따라, 이러한 테스트 셀이 더 많이 수용될 수 있다. 설명될 바와 같이, 테스트 셀의 일부분은, 테스트 셀들이 일반적인 형태(즉, 기본형이나 GAD 요소)에 대해 광선을 테스트할 동작 그룹으로 취급될 수 있다. 테스트 셀(340-340n)은, 특정 정확도 레벨(가령, 16비트)로 기본형과의 충돌을 나타내는 2진 값을 리턴할 수 있으며, 또한 광선이 기본형의 어디와 충돌하는지에 대한 더 정확한 표시자를 리턴할 수도 있으며, 이는 더 큰 기본형에 대해 유용할 수 있다.
ITU(500)에서, 메모리(540)는 복수의 독립적인 동작 뱅크(operation bank)(510 내지 515)를 포함하며, 상기 동작 뱅크들은 각각, 2개의 포트를 갖는다. GAD 테스트 로직(505)을 통해 하나의 포트가 액세스되는 동안, 나머지 하나는 기본형 테스트 로직(530)을 통해 액세스된다. 각각의 GAD 테스트 로직 및 기본형 테스트 로직(505 및 530)은 동작 버퍼(560-565)와 동작 버퍼(570-575) 각각의 사이에서 데이터의 흐름을 관리하여, 각각, GAD 저장소(316)와 기본형 저장소(317)로부터 테스트를 위한 GAD 요소를 획득하도록 동작한다. 상기 뱅크(510-515)는, 대부분의 부분에 대하여, GAD 테스트 로직 및 기본형 테스트 로직(505 및 530)에 의한 광선 데이터로의 액세스를 충돌(conflict) 없이 제공하도록 동작하며, 그 결과로, 각각의 테스트 셀(310a-310n) 및 테스트 셀(340a-340n)에 뱅크(510-515) 각각으로부터의 하나씩의 광선이 제공될 수 있다. 동일한 뱅크에 위치하는 2개의 광선이 테스트될 경우, 충돌(conflict)이 발생할 수 있으며, 이러한 경우, 테스트 로직(505 및 530)에 의해 액세스가 연쇄적으로(serially) 핸들링될 수 있다. 일부 경우, 하나의 프로세싱이 종료되는 동안, 동작 버퍼(560-565 및 570-575)가 다음 번 프로세싱을 위해 로딩될 수 있다.
충돌 없는(consistent) 배열로 광선을 테스트함으로써, 어느 테스트 셀에 할당되는 어느 광선을 추적하느냐가 감소될 수 있다. 예를 들면, 각각의 집합이 32개의 광선을 가질 수 있으며, 테스트 셀(310a-310n)의 32가 있을 수 있다. 예를 들어, 하나의 집합 내 4번째 광선을 충돌 없이 제공함으로써, 테스트 셀(310d)은, 자신에게 제공되었던 광선이 무엇인지에 대한 정보를 유지할 필요가 없으며, 단지 충돌(intersection)에 대한 표시자만 리턴할 필요가 있다.
광선 집합 데이터를 위한 저장소는, 각각 ITU(350)와 ITU(500)를 위한 광선 집합 버퍼(331)와 광선 집합 버퍼(520)로서 구현될 수 있다. 광선 집합 저장소는 광선 집합을 위한 n-방향 인터리빙된 캐시로서 구현될 수 있으며, 그 결과로, 임의의 주어진 광선 집합이 광선 집합 버퍼(331 또는 520) 중 n개의 부분 중 하나에 저장될 수 있다. 그 후, 광선 집합 버퍼(331 또는 520)는 버퍼의 n개의 부분 각각에 저장된 광선 집합의 리스트를 유지할 수 있다. 광선 집합 버퍼(331 또는 520)의 구현예는 하나의 광선 집합과 연계되어 있는 GAD의 요소의 특성(가령, 장면을 렌더링할 때 사용되는 GAD의 요소들 중에서 고유한 영문숫자열(alphanumeric character string))을 식별하는 것을 이용하는 단계를 포함할 수 있다. 상기 영문숫자열은 숫자일 수 있다. 상기 문자열이 해쉬(hash)-처리되어, 광선 집합 버퍼(331 및 520)의 n개의 부분 중 하나로 참조 값이 획득될 수 있다. 또 다른 구현예에서, 예를 들어, 사용 중인 영문숫자열의 세그먼트를 이러한 버퍼의 일부분으로 매핑함으로써, GAD의 요소가 광선 집합 버퍼(331 및 520)의 주어진 부분에 저장될 것으로 예정될 수 있다. 기본형/광선의 충돌(intersection) 출력(580)이 잠재적 기본형/광선 충돌을 식별하기 위한 출력을 나타내며, 상기 출력(580)은 직렬, 또는 병렬일 수 있다. 예를 들어, 32개의 기본형 테스트 셀(540a-540n)이 존재하는 경우, 출력(580)은 막 테스트된 기본형에 대한 각각의 광선에 대해 충돌의 존재 여부를 나타내는 32비트를 포함할 수 있다. 물론, 또 다른 구현예에서 출력이 테스트 셀로부터 직접 도출될 수 있다.
이하에서, ITU(350 및 500)의 동작적 양태가 도 6 및 7과 관련지어 더 설명된다. 기본형들로 구성된 하나의 장면에서 광선을 충돌 테스트하기 위한 다음의 예시적 방법은, 각각 기본형들의 집합을 바운딩하는 GAD 요소들의 그래프를 횡단(traverse)하는 ITU 동작을 포함한다. 이러한 횡단 동안, 광선들의 집합이, GAD 요소와의 충돌에 대해 테스트된다. 광선들의 집합은, 주어진 GAD 요소와의 충돌에 대해 광선을 테스트함으로써, 형성될 수 있으며, 그 후, 상기 요소들과 충돌하는 광선들에 대해, 하나의 집합이 형성될 수 있다. 집합이 충분한 개수의 광선을 가질 때까지, 광선은 주어진 GAD 요소와의 충돌에 대해 계속 테스트될 수 있다. 그 후, 상기 집합의 광선이, 상기 GAD 요소로 연결되는 GAD 요소의 노드와의 충돌에 대해 테스트될 수 있다. 이들 양태는 도 6 및 7과 관련하여 이하에서 더 상세히 설명될 것이다.
다음의 기재는 도 6에서 도시된 충돌 테스트 방법(600)에 관한 것이다. 간단하게 상기 방법은 ITU(350)에 대해 기재될 것이다. 단계(605)에서, 장면을 구성하는 기본형의 집합을 바운딩하는 GAD 요소를 포함하는 추상화된 장면(scene abstraction)의 최소한 일부분이 GAD 저장소(316)에 수신된다. 상기 장면 추상화는 GAD 요소에 관련된 정보를 포함하며, 이 예에서, 이러한 정보는 GAD 요소를, 그래프의 노드 및 상기 노드의 쌍 사이의 에지로 매핑(mapping)하는 그래프를 포함한다. 또한 단계(606)에서, 광선 공급원(305)으로부터의 광선 데이터가 메모리(340)에 수신된다. 집합 관리 로직(380)은, 우선 광선을 집합에 할당하도록 동작한다(이때, 각각의 집합은 GAD의 하나의 요소와 연계되어 있다). 예를 들어, GAD의 요소는 그래프의 루트 노드(root node)일 수 있으며, 우선, 수신된 모든 노드는 상기 루트 노드와 연계되는 하나 이상의 집합에 할당된다. 또한 광선의 수신은, 전체 집합이도록 그룹으로 크기가 정해질 수 있으며, 예를 들어, 이러한 각각의 집합은 광선 집합 버퍼(331)에서 식별된 집합처럼 다뤄질 수 있다.
단계(607)에서, 우선 광선들이 하나의 집합(가령, 루트 노드 또는 카메라 원점을 바운딩하는 구를 위한 집합)으로 할당된다. 단계(608)에서 예를 들어, 지정된 개수 이상의 광선을 갖는 임의의 집합을 준비됨(ready)으로 플래깅(flagging)함으로써, 테스트될 준비가 된 집합이 식별된다. 단계(609)에서, 임의의 집합이 준비되었는지의 여부가 판단되고, 준비되지 않은 경우, 더 많은 광선 데이터가 수신되며(단계(606)), 집합이 준비된 경우, 준비된 집합의 선택이 이뤄지고(610), 상기 준비된 집합들과 연계된 노드가 테스트 노드로서 식별된다.
복수의 집합들이 병렬로 테스트될 수 있다는 것을 이해하고, 하나의 집합의 처리에 초점을 맞추자면, 메모리(340)로부터 테스트 노드와 연계된 집합의 광선의 수신(615)은, 집합 관리 로직(380)에 의해, 예를 들어, 집합에서 데이터로서 저장되어 있는 이러한 광선의 주소(address)를 메모리(340)에 제공함으로써, 개시되며, 상기 메모리(340)가 복수의 출력 포트에 광선 데이터를 제공한다. 상기 광선 데이터의 도착지가 테스트 셀(310a-310n) 및 테스트 셀(340a-340n) 중 하나 이상으로 정해질 수 있다.
특히, 예시적 테스트 셀(310a-310n)은 GAD 요소를 충돌 테스트하기 위한 것이며, 테스트 셀(340a-340n)은 기본형을 충돌 테스트하기 위한 것이다. 단계(625)에서, 테스트될 준비가 된 기본형이 테스트 셀(340a-340n)에서 충돌 테스트되며, 이때, 단계(625)에서, 예를 들어, 기본형들을 바운딩하는 GAD의 더 높은 입도의 노드가 존재하는가의 여부를 판단함으로써, 기본형이 테스트될 준비가 되었는지의 여부가 판단될 수 있다. 이러한 판단은 테스트 대상인 집합과 연계되는 노드로 연결되는 모든 기하학적 형상을 간단하게 식별하는 과정을 포함할 수 있으며, 연결된 임의의 기본형이 테스트를 위해 테스트 셀(340a-340n)로 제공될 수 있다.
기본형들이 테스트될 준비가 되어 있는가의 여부를 판단하는 것은 제공되는 장면 추상화의 구현을 바탕으로(즉, GAD의 속성을 바탕으로) 한다. 예를 들어, GAD는 GAD 요소들의 그래프를 포함하며, 상기 GAD 요소들은 각각 기본형의 집합을 바운딩하며, 그래프의 노드로서 배열되고, 이때, 노드들의 쌍은 에지에 의해 연결된다. 각각의 GAD 요소에 의해 바운딩되는 기본형들의 집합은 구현예에서 달라질 수 있으며, 어느 노드의 쌍이 연결되는지도 구현예에서 달라질 수 있다. 예를 들어, GAD의 제 1 요소가 제 1 기본형을 바운딩할 수 있는데, 상기 제 1 기본형은, 더 작은 체적을 갖는(또는 상기 제 1 요소에 의해 바운딩되는 기본형 집합의 부분집합만 바운딩하는) 또 다른 GAD 요소에 의해 바운딩되지 않는다(더 높은 입도). 그러나 제 1 요소에 의해 바운딩되는 또 다른 기본형은, 기본형의 부분집합을 바운딩하거나 더 작은 체적을 갖는 그 밖의 다른 하나 이상의 (더 높은 입도의) GAD 요소에 의해 바운딩될 수 있다. 따라서 단계(625)에서, 입도가 더 높은 GAD 요소에 의해 바운딩되지 않을 때, 제 1 기본형은 테스트될 준비가 될 것이다.
이러한 테스트될 준비가 된 임의의 기본형은, 테스트되는 노드와 연계되는 집합을 구성하는 광선과 함께, 테스트 셀(340a-340n)로 제공될 것이다. 이러한 기본형이 둘 이상 존재하는 경우(이런 경우는 잦을 것이다), 집합의 광선은 테스트 셀(340a-340n)에 로딩될 수 있으며, 각각의 기본형이 상기 테스트 셀을 통해 연쇄적으로 제공될 수 있어서, 그 결과로, 각각의 기본형이 모든 광선에 대해 거의 병렬로 테스트된다. 단계(630)에서, 임의의 충돌에 대한 표시자(indication)가 출력된다. 일반적으로, 주어진 광선에 대한 가장 가까운 충돌만 관심의 대상이기 때문에, 단계(645)에서, 가장 가까운 충돌이 판단된다. 이전의 가장 가까운 충돌이 광선 데이터와 함께 유지될 수 있으며, 집합 관리 로직(380)이 임의의 검출된 충돌이 저장된 충돌보다 더 가까운지의 여부를 판단하여, 적정하게 광선 데이터를 업데이트할 수 있다.
테스트를 위해 선택된 노드에 의해 바운딩되는 GAD 요소를 테스트하는 것(즉, 선택된 노드와 연계된 GAD 요소가 그 밖의 다른 GAD 요소를 바운딩함)과 관련하여, 집합으로부터의 광선이 테스트 셀(310a-310n)로 분배되는 것이 이뤄지고, 그 후, 단계(632)에서 바운딩된 GAD 요소의 인출이 개시되는데, 이는 집합 관리 로직(380)이 GAD 저장소(316)로 주소지정 정보(addressing information)를 입력하고, 상기 GAD 저장소(316)가 주소지정된 GAD 요소를 테스트 셀(310a-310n)로 출력함을 의미한다. 복수의 GAD 요소가 바운딩되는 경우(보통 이 경우에 해당함), 복수의 GAD 요소의 블록 판독이 제공되는 경우, 직렬화 버퍼(serializing buffer)에 의해, 요소들이 테스트 셀(310a-310n)로 연쇄적으로 스트리밍되도록 배열될 수 있다.
테스트 셀(310a-310n)에서, 집합의 각각의 광선이 연쇄적으로 제공되는 GAD 요소와의 충돌에 대해 테스트되며, 광선이 충돌한다고 판단되는 경우(650), 충돌된 GAD 요소에 대한 집합이 존재하는가의 여부가 판단되며(655), 존재한다고 판단된 경우, 공간이 허락하는 한 광선이 상기 집합으로 추가되고, 존재하지 않는다고 판단된 경우, 집합이 생성되며(660), 상기 광선이 추가된다. 기존의 집합에 공간이 없는 경우, 새로운 집합이 생성될 수 있다.
일부 구현예에서, 하나의 집합 내 최대 개수의 광선과 다수의 테스트 셀(310a-310n)로의 1:1 대응이 제공되어, 주어진 GAD 요소에 대해 하나의 집합 내 모든 광선이 병렬로 테스트될 수 있다. 그러나 하나의 집합 내에 더 많은 광선이 제공되는 경우, 상기 집합의 더 많은 광선이 테스트될 필요가 있는가의 여부에 대한 판단(665)이 수행되고, 테스트될 필요가 있다고 판단된 경우, 상기 방법은 단계(635)로부터 계속된다.
다시 말하자면, 테스트를 위해 선택된 노드가 테스트 노드로서 선택해제될 수 있다(675). 상기 노드와 연계된 집합의 모든 광선은, 바운딩되는 기본형 및/또는 바운딩되는 GAD 요소에 대해 테스트될 것이며, 이에 따라서, 프로세싱을 완료하거나, 그 밖의 다른 GAD 요소와 연계되는 그 밖의 다른 집합으로 분배될 것이다. 따라서 단계(680)가 수행되어, 이 시점에서 이러한 연계된 집합의 광선이 추가로 추적되지 않고, 오히려, 그 밖의 다른 집합이 처리될 때, 정해지지 않은 시간구간 동안 미뤄질 수 있다. 그 후, 상기 방법(600)은 단계(608)로 복귀하며, 상기 단계(608)에서, 집합 관리 로직(380)에 의해 집합의 준비여부(readiness)가 판단된다. 집합의 준비여부에 대한 결정은 다수 번의 계산 및 결정을 포함할 수 있다. 극단적으로 단순화하자면, 각각의 집합의 가득함 레벨(fullness level)을 결정 또는 검사하는 과정을 동반하며, 가장 가득 찬 집합을 선택할 수 있다. 집합이 GAD의 요소들에 대응하기 때문에, 또 다른 결정 과정이 GAD의 주어진 하나 이상의 요소에 대해 테스트를 완료하기로 결정하는 과정과, 이들 요소와 연계되는 집합을 테스트에 대해 준비된 집합으로서 선택하는 과정을 포함할 수 있다. 또는 주어진 집합이, GAD 요소의 그래프의 다른 부분을 통해 이미 테스트 완료된 광선을 보유하고 있다고, 집합의 준비여부가 판단될 수 있으며, 상기 광선의 완료는 주어진 집합을 처리하는 과정에 따른다. 광선 집합을 위한 저장소가 고정 크기 영역으로 할당되는 경우, 집합 관리 로직(380)은, 단지 적은 개수의 광선만 가지며 일정 시간 동안 광선이 추가되지 않은 집합이 테스트에 대해 준비된 집합이라고 선택되어서, 상기 집합에 의해 사용되는 공간을 다른 집합을 위해 자유롭게 해야 한다고 결정할 수도 있다. 또한 먼저 많은 수의 광선이 수신되어, 그 결과로, 이용 가능한 크기의 광선 집합 저장 공간이 채워질 수 있다. 광선 저장 공간은 가득 차 있지만, 집합의 준비여부를 결정하기 위한 다른 수단이 충분히 준비된 집합을 트리거하지 않는 경우, 추가적인 처리를 위한 집합의 랜덤 또는 휴리스틱(heuristic) 선택이 구현될 수 있다. 그 밖의 다른 편법 및 선택 기준이 구현될 수 있다.
ITU(350) 및 방법(600)과 관련하여, 테스트 셀(310a-310n)과 테스트 셀(340a-340n)은 각각 GAD 요소와 기본형 중 단지 한 가지씩만 테스트했다. 그러나 어떤 의미에서는, 기본형과 GAD 모두 기하학적 형상(가령, 삼각형 및 구)이다. 따라서 GAD의 특정 노드에 의해 이들 유형의 형태 중 하나, 또는 나머지 하나가 바운딩(또는 그 밖의 다른 방식에 의한 둘러싸임)되는지의 여부에 대한 선험적 판단이 필요하지 않다. 오히려, GAD의 특정 노드에 의해 바운딩되는 기하학적 형상에 대한 참조가 유지관리될 수 있으며, 상기 기준과 연계된 데이터가 인출될 수 있다. 본 발명의 일부 양태에서, 하나의 타입의 형태를 기술하는 데이터의 크기에 대하여 상기 타입의 형태가 추론될 수 있다. 테스트 셀(310a-310n 및 340a-340n)은 재설정가능해질 수 있으며, 이에 따라서, 자신에게 제공되는 타입의 형태를 충돌 테스트할 수 있다. 이러한 환경에서, GAD 저장소(316) 및 기본형 저장소(317)는 각각, 테스트 셀(310a-310n 및 340a-340n)로의 연결을 가질 것이다. 그러나 데이터경로 복잡도의 관점에서, 각각의 테스트 셀에서의 기하학적 형상 테스팅의 완전한 설정가능성과 선택가능성을 구현할 수 있도록, 각각의 메모리와 각각의 테스트 셀 간의 하나의 독립적인 연결을 반드시 운영하도록 하지 않는 것이 유리할 수 있다.
다음의 기재는 도 7에서 도시된 충돌 테스팅의 방법(700)에 관한 것이며, 이는 특정 장면에 대한 GAD가 계층적 그래프로 배열되는 하나의 구현예를 설명하고 있다. 이 예시에서, GAD는 GAD의 요소와 기본형의 가능한 조합보다는, GAD 요소와 기본형 중 하나를 바운딩하도록 제한받는다. 이러한 예시는 GAD 그래프 중 리프 노드(leaf node)만 기본형을 직접 바운딩할 것을 내포한다(즉, 리프 노드만, GAD의 또 다른 더 높은 입도를 갖는 요소에 의해 바운딩되지 않는 기본형의 집합을 바운딩할 것이다).
충돌 테스팅의 방법(700)에서, 동작들은 특정 구조 덕분일 수 있으며, 데이터는 특정 메모리 자원에 저장되는 것으로 식별될 수 있다. 그러나 이는 하나의 구현예에 불과하며, 방법의 양태는 이러한 예시에 제한되지 않는다. 방법(700)은 장면에서의 충돌 테스팅을 위한 광선을 수산하는 단계(705)로 시작한다. 우선 상기 광선이 그래프의 GAD의 노드와 연계되어 있는 광선 집합으로 할당된다(단계(717)). 예를 들어, 상기 광선이 그래프의 루트 노드(root node), 또는 광선을 발산하는 카메라 위치를 둘러싸는 노드를 충돌하는 것으로 가정될 수 있다. 이러한 초기 할당 후에, 임의의 집합이 테스트될 준비가 되어 있는지가 판단된다(단계(715)). 보통 초기에 많은 수의 광선이 전송되기 때문에, 하나 이상의 광선 집합이 거의 확실히 테스트될 준비가 되며, 준비된 집합의 선택이 이뤄진다(단계(717)). 또한 초기에 전송된 광선은 가득 찬 집합(full collection)으로서 수신될 수 있으며, 입력 큐(input queue)(가령, ITU(350) 및 ITU(500)에 이미 저장되어 있는 집합)에서 처리될 수 있다. 예를 들어, 하나의 준비된 집합이 선택되고, 상기 준비된 집합은 ITU(350, 또는 500)의 각각의 테스트 셀을 위한 단 하나씩의 광선만 포함하며, 그 결과로, 주어진 집합의 모든 광선이 병렬로 테스트될 수 있다. 집합 관리 로직(380) 또는 GAD 테스트 로직(505)은, 예를 들어, 준비된 집합들의 리스트를 유지하고, 상기 리스트의 첫 번째 항목(또는 다른 항목)을 취함으로써, 테스트를 위해 준비된 집합을 선택할 수 있다. 노드의 준비여부를 나타내는 플래그가 설정되고 체크될 수도 있다.
준비된 집합의 선택(717) 후, 집합 관리 로직(380) 또는 GAD 테스트 로직(505)에 의해, 각각의 선택된 집합에 대해 GAD 그래프의 노드가 식별되고(720), 각각의 로직은 이러한 노드가 기본형이나 또 다른 GAD 요소(즉, 자신 외 다른 노드)를 바운딩하는가의 여부를 판단한다. 집합 관리 로직(380)과 GAD 테스트 로직(505) 내에서 노드/집합 연계 관계가 관리될 수 있다. 기본형들 또는 그 밖의 다른 GAD 요소들의 바운딩 간의 구별화가 비트 표시자를 바탕으로, 또는 하나의 집합이 어떠한 종류의 참조를 포함하고 있는지를 바탕으로, 또는 그 밖의 다른 적정한 수단에 의해, 이뤄질 수 있다.
기본형 바운딩 우선(primitive bounding first)에 관련하여, GAD 요소가 기본형을 바운딩하는 경우, 집합 관리 로직(380) 또는 기본형 테스트 로직(350)이 메모리(340/350)로부터의 광선 데이터의 인출(단계(726))을 개시하고, 테스트 셀(340a-340n 및 540a-540n) 각각들 간의 광선의 분배(단계(726))를 개시한다.
또한 각각의 로직(380 및 530)은 바운딩되는 기본형을 기본형 데이터 저장소(317)로부터의 인출(727)을 개시한다. 이 예시에서, 각각의 기본형이 각각의 테스트 셀(340a-340n 및 540a-540n)에 공통적으로 제공되더라도, 이러한 인출은 블록으로서, 또는 스트림으로서, 수행될 수 있어서, 기본형 데이터 저장소(317)로부터 블록이 판독되는 경우, 기본형의 스트림이 버퍼나 그 밖의 다른 적합한 장치에 의해 생성될 수 있다. 이 예시에서, 하나의 공통된 기본형에 대한 테스트를 위해 하나의 집합의 여러 다른 광선이 테스트 셀들로 분배(728)될 때, 이러한 예시적 ITU에서, 기본형 데이터가 기본형 데이터 저장소(317)에서 각각의 테스트 셀(340a-340n)로 직접 제공되는 것이 고려되어진다. 기본형 및/또는 GAD 요소가 반복적인 프로세싱을 위해 버퍼 내에 저장되지 않고, 대신 일반적으로, 광선들의 집합에 대한 테스트 후, ITU 메모리로부터 폐기된다는 점에서, 이러한 버퍼는 캐시가 아니다.
ITU(350)에서, 로직(380)에 의해 광선 분배가 개시되고, 광선 데이터가 메모리(340)로부터 각각의 테스트 셀(340a-340n)로 직접 제공된다. ITU(500)용으로, 광선 데이터가 테스트 로직(530)에 의해 메모리로부터 획득되고 버퍼(570-575)로 제공될 수 있다. 주어진 집합의 둘 이상의 광선이 동일한 뱅크에 저장되는 상황에서, 테스트 로직(530)이 각각의 메모리 뱅크(510-515)에 대한 요청(request)의 큐를 유지관리할 수 있다. 두 경우 모두, 참조(예를 들어, 광선 데이터의 시작점을 식별하는 메모리 위치 참조(memory location reference))에 의해, 주어진 집합 내 광선들이 식별될 수 있으며, 광선은 지정된 크기를 가질 수 있다.
그 후, 광선이, 테스트 셀로 제공되는 기본형과의 충돌에 대해 테스트된다(단계(730))(즉, 이 예시에서는, 각각의 테스트 셀은 서로 다른 광선을 가지며, 공통의 기본형을 이용해 상기 광선을 테스트한다). 광선의 충돌 테스트 후, 각각의 테스트 셀(340a-340n, 540a-540n)이 검출된 충돌을 나타낸다. 이들 충돌은 기본형과 광선의 충돌이기 때문에, 중요한 충돌은 보통 첫 번째 충돌이다. ITU(350)에서, 광선은 순서 없이 테스트될 수 있으며(즉, 광선 원점으로부터 더 먼 기본형에 대해 먼저 테스트될 수 있다), 따라서 가장 가까운 충돌을 추적하는 메커니즘이 제공될 수 있다. 예를 들어, 광선과 함께 저장된 데이터가 상기 지점에서 식별된 광선에 대한 가장 가까운 충돌을 나타낸다. 이러한 가장 가까운 충돌 데이터는 테스트 로직(380 및 530)에 의해 인출될 수 있지만, 테스트 셀로는 제공될 필요가 없다. 대신, 테스트 로직이 상기 데이터를 내포할 수 있으며, 테스트 셀로부터 리턴된 검출된 충돌의 거리를, 이전에 식별된 가장 가까운 충돌에 비교하여, 더 가까운 충돌이 식별되는 경우, 상기 더 가까운 충돌을 갖는 적정한 광선 데이터를 업데이트할 수 있다. 저장 공간이 더 필요할지라도, 모든 충돌이 광선 데이터에 저장될 수 있으며, 완전한 충돌 테스팅 후 가장 가깝다고 판단된 충돌, 또는 이러한 데이터가 최적화와 분석을 위해 사용될 수 있다.
가장 가까운 충돌을 판단(736)한 후, GAD의 노드에 의해 바운딩되는 추가적인 기본형이 테스트되어야 하는지가 판단(738)되며, 그런 경우, 상기 기본형이 인출되는 프로세스가 단계(727)로부터 반복되며, 다수의 구현예에서, 이 단계(738)는 지정된 개수의 기본형에 대해 루프로 구현될 수 있다. 테스트될 어떠한 기본형도 남아 있지 않은 경우, 프로세스는 또 다른 집합이 테스트될 준비가 되었는지 식별하는 단계(715)로 돌아간다.
일부 예에서, 하나의 집합 내 다수의 광선과 다수의 테스트 셀(340a-340n 또는 540a-540n) 간에 1:1 대응이 유지되어, 그 결과로, 기본형이 테스트 셀로 스트리밍될 때 광선이 테스트 셀에 머무르게 된다. 그러나 하나의 집합 내 테스트 셀보다 더 많은 광선이 존재하는 경우, 또는 모든 광선이 테스트된 것이 아닌 경우, 방법(700)은 추가적인 루프 포인트를 포함할 수 있으며, 추가적인 광선이 인출(726)되면, 프로세스가 상기 단계(726)로부터 반복된다. 그렇지 않다면, 방법(700)은, 하나의 집합이 테스트될 준비가 되었는지의 여부를 판단하는 단계(715)에서 계속된다.
다른 GAD 요소를 바운딩하는 노드와 연계된 집합에 관련하여, 방법(700)은 상기 GAD 테스트 로직(505) 및 집합 관리 로직(380)이 집합의 광선을 획득하고 각각 테스트 셀(540a-540n) 및 테스트 셀(340a-340n)로 분배하는 과정(724)을 포함한다. 기본형 인출과 마찬가지로, 각각의 로직(505 및 380)은 테스트 셀에 의해 수신되기 위한 GAD 요소의 생성(725)을 개시하며, 예를 들어, GAD의 테스트 셀에 의한 수신은 직렬 스트림과 같다. 단계(725)에서 획득된 GAD 요소는 집합과 연계된 노드로 연결되어 있는 GAD 요소이다. (가령, 도 2의 노드(220)와 연계된 집합이 선택된다면, 노드(215, 241, 221 및 230)에 대한 GAD 요소가 인출될 것이다.
테스트 셀에서, 집합의 각각의 광선이 상기 테스트 셀로 제공되는 GAD 요소와의 충돌에 대해 테스트된다(733). 충돌에 대한 표시자가 테스트 셀로부터 로직(380 및 505)으로 출력된다(740). 테스트 셀들 간에서 GAD의 요소가 공통적으로 테스트되는 경우, 로직(380 및 505)은 상기 GAD 요소에 대해 테스트되는 광선의 각각의 검출된 충돌을 기록한다. 이 예시에서의 테스트가 GAD 요소를 통해 연속적으로 진행되기 때문에, 로직(380 및 505)은 상기 GAD 요소와 연계된 집합 내 충돌 광선에 대한 참조를 기록하여, 노드별로 가능한 충돌 광선을 수집한다(743). 다른 광선이 이미 상기 GAD 요소와의 충돌에 대해 주석이 달린 경우(즉, 광선의 집합이 저장될 수 있으며, 준비될 때까지 연기된 경우), 일부 광선이 이전 테스트에서의 충돌로 식별될 수 있으며, 나중에 집합이 프로세싱될 준비가 되었다고 판단될 때 이들 광선이 테스트될 것이다.
테스트될 연결된 노드에 대한 GAD 요소가 더 있는지의 여부가 판단되며, 더 있는 경우, 이러한 노드가 테스트 셀로 획득(또는 로딩)된다. 연결된 노드에 대해 모든 GAD 요소가 테스트된 경우, 단계(761)에서, (광선과 테스트 셀의 1:1 대응이 구현되지 않는 경우) 집합 중 테스트될 광선이 더 남아 있는가의 여부가 판단된다. 모든 광선이 테스트된 경우, 프로세싱은, 현재 존재하는 집합의 준비 여부를 판단하는 단계(745)로 계속되고, 그 후, 단계(715)에서, 준비 여부의 상태가 사용되어, 더 많은 광선을 획득하는 단계(705), 또는 추가적인 집합 테스트로 진행하는지를 결정할 수 있다. 단계(761)에서 테스트될 광선이 더 있는 경우, 프로세싱은 단계(724)로부터 계속된다.
물론, 테스트될 기본형, 또는 GAD 요소, 또는 광선이 더 있는 경우, 이러한 임의의 데이터의 인출이, 테스트와 병렬로 발생할 수 있으며, 연쇄적인 설명 방식이 프로세스의 연쇄적인 수행을 의미하지 않는 것으로 이해되어야 한다.
또한 ITU(350)와 ITU(500)에서 테스팅 자원(즉, 테스트 셀(340a-340n)과 테스트 셀(540a-540n) 각각)이 기본형과 GAD 요소 모두에 대해 존재하기 때문에, 테스트될 준비가 된 집합을 식별하는 단계는, (1) 기본형을 바운딩하는 GAD 요소와 연계된 집합과 병렬로 발생할 수 있으며, (2) 다른 GAD 요소(즉, 다른 연결 노드를 바운딩하는 그래프의 노드)를 바운딩하는 GAD 요소와 연계된 집합과 병렬로 발생할 수 있다. 따라서 주어진 시간에서 복수의 집합들이 처리될 수 있다.
GAD 요소와의 충돌에 대해 광선을 테스트하는 것의 출력은, 동일한 광선에 대해 기본형과의 충돌에 대해 테스트하는 것의 출력과 상이하며(즉, GAD 요소와의 충돌이 상기 GAD 요소에 대한 집합으로의 집합을 도출하며, 기본형과의 충돌은 상기 기본형과의 가장 가까운 충돌을 판단하여 이러한 충돌을 출력하는 것을 도출한다), 집합 데이터를 라이트 백(write back)하는 것과 상충하거나, 특정 광선이 병렬로 테스트되는 2개의 집합에 속하게 되는 경우조차, 충돌 출력이 발생하지 않을 것이다. 예를 들어, 테스트 셀(340a-340n)의 복수의 인스턴트화에서 기본형 충돌에 대해 복수의 광선 집합을 테스트함으로써, 추가적인 병렬화가 구현된다면, 이러한 테스트의 순서 바른 완료가 강화되기 위한 특징(가령, 복수의 충돌의 저장, 또는 록 비트(lock bit) 등)도 구현될 수 있다.
요컨대, 방법(700)은 광선을 수신하는 단계와, 상기 광선을 집합으로 할당하는 단계와, 테스트 준비된 집합을 선택하는 단계(이때, 준비 여부는 알고리즘적으로 판단됨)와, 선택된 집합의 광선을 적정 테스트 셀로 할당하는 단계와, 테스트 셀을 통해 충돌 테스트하기 위해 적정한 기하학적 형상(geometry)을 스트리밍하는 단계를 포함한다. 출력은 상기 기하학적 형상이 장면 기본형인지 또는 GAD 요소인지에 따라 달라진다. GAD 요소에 대해 테스트되는 광선에 있어서, 상기 GAD 요소는 테스트되는 집합과 연계된 노드와의 그래프 연결을 기초로 식별되며, 광선이 테스트되는 GAD 요소와 연계된 집합에 추가된다. 집합들은 준비 여부에 대해 검토되고 준비됐을 때 테스트를 위해 선택된다. 기본형과 광선의 충돌에 있어서, 광선을 이용하여 가장 가까운 충돌이 추적된다. 준비된 집합과 연계될 때 광선이 테스트되기 때문에, 특정 광선과 연계된 집합이 테스트될 준비가 될 때까지, 상기 특정 광선에 대한 충돌 테스트가 연기된다는 의미가 내포된다. 광선들은 동시에 복수의 집합들로 모아질 수 있으며, 이로 인해서, 이러한 광선이 장면의 기하학적 형상의 서로 이질적인 부분들에 대해 테스트될 수 있다(즉, 상기 광선은 횡단 순서에 따라 테스트될 필요는 없다).
앞서 언급된 바와 같이, 일부 구현예에서, GAD의 요소는 선택되어 서로 상관될 수 있으며, 그 결과로, 특정 GAD 요소가 또 다른 GAD 요소와 기본형 모두를 직접 바운딩하지 않으며, 대신, 기본형은 개별 GAD 요소에 의해 직접 바운딩된다(이 구현예는 균질 구현예라고 일컬어질 수 있으며, GAD 요소와 기본형은, GAD의 주어진 요소 내에서“혼합”되지 않는다). 이러한 GAD 배열은, 특정 타입의 형태를 추돌 테스트하도록 최적화된 테스트 셀에서의 GAD 요소와 기본형의 테스트를 촉진시키기 때문에 매우 유용할 수 있다. 이렇게 선택된 구현예는 GAD 요소나 기본형을 테스트하기 위해 테스트 셀이 최적화된 경우, 테스트 셀로 광선을 할당하는 것에 영향을 미칠 수 있는데, 이는, 이용 가능한 경우, 각각의 타입의 형태를 최적화된 테스터(tester)로 할당하는 것이 바람직할 것이기 때문이다. 본원의 기재를 바탕으로, 방법(700)은, 균질하거나, 그렇지 않은가에 따라, 임의의 구성의 GAD에 대해 적응될 수 있다.
앞서 언급된 방법(600 및 700)에서, 광선의 집합에 제공되는 정보를 바탕으로 메모리로부터 광선이 로딩되었다. 따라서 이러한 로딩은, 각각의 광선을 나타내는 데이터가 저장되어 있는 각각의 메모리 위치를 결정하는 과정을 포함할 수 있다. 이러한 데이터는 광선 집합에 포함될 수 있으며, 이때 광선 집합은, 상기 집합 내 광선의 광선 데이터가 저장되는 메모리 위치의 리스트, 또는 그 밖의 다른 저장소로의 참조를 포함할 수 있다. 예를 들어, 광선 집합은 메모리(385) 내 위치로의 참조를 포함할 수 있으며, 이들 참조는 절대적이거나 베이스로부터의 오프셋이거나 이러한 데이터를 참조하기 위한 또 다른 적합한 방식의 값일 수 있다.
또한, 방법(600 및 700)은, 테스트 셀을 통해 기본형 또는 GAD 요소가 순환될 때, 광선 데이터가 테스트 셀 내에서 "안정적(stationary)"일 것이라는 관점에서 기재되었다. 그러나 구현예에 따라 테스트 셀에 기본형과 GAD 요소 중 하나를 고정하고, 광선이 상기 기본형과 GAD 요소에 대해 순환될 수 있다. 동일한 GAD 요소와 연계된 복수의 광선 집합이 테스트될 준비가 된 경우 이러한 상황은 바람직할 수 있다. ITU(350 및 500)의 동작은 이러한 변화 또는 기회를 수용하도록 변경될 수 있다. 각각의 테스트 셀이 GAD의 요소의 일부분을 충돌 테스트하도록 광선을 복수의 테스트 셀로 복제하는 것을 포함하여, 그 밖의 다른 구현예가 제공될 수 있다.
또한, 광선의 리스트와 가속화 데이터의 요소의 리스트 모두를 순환할 수 있는 보다 복잡한 테스트 셀이 제공될 수 있다. 이러한 구현예에서, 각각의 테스트 셀은 GAD의 모든 적정 요소와의 충돌에 대해 광선의 집합을 테스트할 수 있다. 그러나 현재 기술의 한계의 관점에서, 이러한 구현예는, 복잡한 장면을 위한 광선과 GAD의 요소가 제공되는 모든 테스트 셀을 유지하기 위해 더 큰 메모리(440)와 더 넓은 대역폭 인터페이스를 필요로 할 가능성이 높을 것이다. 광선, 또는 GAD의 특정 요소를 테스트 셀에서 안정적(stationary)이도록 유지하는 것이 더 작은 작업 메모리를 필요로 할 것이기 때문에, 기술이 발전함에 따라, 이러한 구현예가 더 선호될 수 있으며, 어떤 의미로는, ITU(350)를 여러 번 복제하는 것처럼 보일 수 있으며, 이는 수십, 수백, 또는 수천 개의 테스트 셀을 갖는 구현예에서 실용적인 이점을 갖는다.
예시적 방법 및 장치가 광선들의 개발가능한 잠재적인 병렬화를 확인할 수 있다. 앞서 도 4와 관련하여 설명된 바와 같이, ITU(가령, ITU(350) 또는 ITU(500)) 내 메모리가 주어진 최대 개수의 광선을 저장할 수 있을 것이다. 복잡도와 비용 등을 고려하면, 이러한 ITU에서 저장될 수 있는 광선의 최대 개수는, 장면을 완전히 렌더링하기 위해 테스트될 광선의 개수보다 작다. 따라서 광선은, 장면의 렌더링 동안, ITU에 의해 조건적으로 수용될 수 있다. 광선 입력으로부터의 새로운 광선의 수용 조건은, 상기 새로운 광선을 나타내는 데이터를 저장하기 위한 이용가능한 공간이 메모리에 있다는 것이다. 상기 광선들은 가득 찬 집합(full collection)에 가까운 개수로 수용될 수 있으며, 형태들의 디폴트 그룹(가령, GAD 요소의 그래프의 루트 노드)에 대하여 프로세싱될 준비가 됐다고 식별될 수 있다.
앞서 많은 예로 설명된 바와 같이, ITU는 메모리에, 광선 입력으로부터 이전에 수신된 광선을 나타내는 정보를 저장한다. ITU는, 이들 광선에 대하여, 복수의 집합 중 하나 이상의 광선 집합과 각각의 광선의 연계를 유지관리한다. 상기 ITU는 또한, 메모리에 저장되어 있는 복수의 집합에 대해 집합의 가득 참 여부(collection fullness)에 대한 표시자(indication)를 유지관리한다. 이들 표시자는 가득 찬 집합을 나타내는 각각의 플래그이거나, 하나의 주어진 집합과 연계된 광선의 개수를 나타내는 숫자일 수 있다.
ITU는 (앞서 언급된 바와 같이) 집합별로, 충돌 테스트되기 위한 광선을 선택하며, 이때, 상기 ITU 집합은 복수의 집합 중에서 가득 찬 집합을 선택하는 일에 편중되어 있다. 가득 찬 집합이 이용 가능하지 않는 경우, 새로운 광선이 테스트되기 위해 선택된다. 가득 찬 집합과 새로운 광선이 이용 가능하지 않는 경우(가령, 가득 찬 집합과 새로운 광선을 저장하기 위해 이용 가능한 메모리가 없기 때문에 이들이 수용되지 않는 경우), ITU에 의해 복수의 집합 중 부분적으로 가득 찬 집합(partially full collection)이 선택된다. 상기 ITU는 광선 집합과 각각의 형태 그룹(이전 예에서 GAD 그래프 요소로서 식별됨, 예를 들어, 즉, GAD의 하나의 요소에 의해 바운딩되는 기본형의 그룹)의 연계 관계를 액세스한다. 상기 ITU는, 앞서 언급된 바와 같이, 충돌을 나타내고 이들을 대량으로 처리하도록 동작한다. 부분적으로 가득 찬 광선 집합은 2차 광선의 생성을 촉진하며, 이러한 2차 광선의 생성으로부터 이용 가능한 광선이 증가되어 병렬화 가능한 광선 집합을 식별할 수 있다. 이때 2차 광선은, 식별된 광선/기본형 충돌의 결과로서 발생되는 임의의 광선을 포함하는 것으로 보이며, 충돌과 관련되어 있는 광선은 반드시 카메라 광선인 것은 아니며, 따라서 “2차 광선”은 카메라 광선에서 이동된 임의의 개수의 광선/기본형 충돌일 수 있다. 광선/기본형 충돌의 쉐이딩(shading)의 결과로서, 또 다른 광선이 발산될 때마다, 편의를 위해, 상기 새로운 광선은 새로운 “세대”로 고려될 수 있다. 따라서 본 발명의 다수의 양태에서, 이들 양태는 임의의 세대에서, 테스트되기 위한 광선을 모두 모으도록 기능하며, 일부 동작 모드에서, 각 세대에 관계없이, 복수의 광선의 생성을 촉진시켜서, 장면 내에서 광선을 더 바람직하게 분배하여, 광선 충돌 테스팅의 더 많은 병렬화를 가능하게 할 수 있다.
또한 각각의 ITU(350 또는 500)는 한정된 개수의 테스트 셀을 포함하며, 하나의 주어진 광선이 하나의 형태와 충돌하는가의 여부를 판단하기 위한 약간의 시간을 필요로 하기 때문에, ITU는 최대 처리량(maximum throughput)을 갖는다. 이 예시에서, 본원에 따라서 실제 처리량을 ITU의 최대 처리량에 가깝게 유지하는 것은 테스팅 자원의 효율적인 사용을 의미한다. 본원에서 기재된 방법 및 장치는, 광선의 가득 찬 집합을 주로 테스트함으로써, 효율적인 충돌 테스트를 위해 제공된다. 또한, 앞서, ITU(350 또는 500)에서 광선 집합의 시퀀스가 테스트될 수 있다고 기재되었고, 각각의 광선 집합에 대해 기본형들의 그룹이 각각의 광선 집합에 대해 순환될 수 있다(가령, 32개의 광선 집합이 각각 32 개의 GAD 요소에 대해 테스트될 수 있다). 따라서 다음 번 테스트되기 위한 광선 집합이 무엇인지를 특정하는 입력이 광선 집합의 시퀀스로 관찰될 수 있다. 이 시퀀스는, 이전에 입력된 광선과 새로운 광선 중 하나의 가득 찬 집합으로 채워져 있는 것이 바람직하다. 그러나 때때로, 예를 들어, 라운드 로빈(round robin) 방식으로, 부분적으로 가득 찬 집합을 선택함으로써, 가능성 있는 다양한 원점(origin)과 방향(direction)으로부터의 다양한 2차 광선의 생성을 시뮬레이트하는 것이 바람직할 수 있다.
앞서 기재된 ITU는 하드웨어 제어에 더 초점을 맞춘 구현예이며, 이는 전용 가속기(accelerator)로서의 구현예에 더 적합할 수 있다. 그러나 본 발명의 양태는 보다 하드웨어를 중심으로 하는 구현예로 구현될 수도 있으며, 이러한 구현예는 특수 목적 인스트럭션을 사용할 수 있다. 이러한 구현예의 양태는 도 8과 관련하여 제공된다. 특히, 프로세서(805)는 메모리 인터페이스(825)로 연결되어 있는 인출 유닛(fetch unit, 820)과, 인스트럭션 캐시(830)와, 인스트럭션 디코더(845)와, 데이터 캐시(850)를 포함한다. 데이터 캐시(850)는 테스트 셀(810a-810n)로의 입력을 수행한다. 또한 인스트럭션 디코더(845)도 테스트 셀(810a-810n)로 입력을 제공한다. 인스트럭션 생성기(865)가 인스트럭션 디코더(845)로 인스트럭션 입력을 제공한다. 테스트 셀이 검출된 충돌의 표시자를 라이트 백 유닛(write back unit, 860)으로 출력하고, 그 후, 라이트 백 유닛(860)이 데이터 캐시(850)에 데이터를 저장할 수 있다. 또한 라이트 백 유닛(860)으로부터의 출력이, 인스트럭션의 생성 시, 인스트럭션 생성기(865)의 입력으로서 사용된다. 테스트 셀에서 처리되는 인스트럭션이 정의된 표면과 광선 간의 충돌 테스트인 경우, 이러한 프로세서(805)에서 사용되는 인스트럭션은 하나의 단일 인스트럭션, 복수 데이터 벼화를 가질 수 있다.
예를 들어, “인스트럭션(instruction)”은 기본형과 GAD의 요소 중 하나를 포함할 수 있으며, 복수 데이터 요소는, “인스트럭션”으로 제공되는 기본형 또는 GAD 요소에 대한 테스팅을 위한 개별 광선을 포함할 수 있다. 인스트럭션을 포함하여 추가적인 정보는 복잡하거나 단순할 수 있다. 예를 들어, 프로세서(805)가 복잡하고, 고-집적 프로세서인 경우, 또한 상기 프로세서는 대형 인스트럭션 셋(large instruction set)을 가질 수 있으며, 충돌 테스트 인스트럭션을 다른 인스트럭션들로부터 구별해 내기 위해 필요한 복수의 비트가 존재할 수 있다. 또한 다양한 충돌 테스트 인스트럭션이 제공될 수 있다. 예를 들면, 여러 다른 기본형 형태와 여러 다른 GAD 요소 형태에 대한 충돌 테스트 인스트럭션, 또는 심지어 여러 다른 테스팅 알고리즘에 대한 충돌 테스트 인스트럭션이 있다.
통상의 예에서, 각각의 충돌 테스트 인스트럭션은 기하학적 요소의 참조(GAD의 요소이거나 기본형의 참조)와, 기하학적 요소와의 충돌에 대해 테스트되기 위한 복수의 광선의 참조를 포함할 것이다. 디코더(845)가 기하학적 요소의 참조를 판단하기 위해 인스트럭션을 해석하고, 인출 유닛(fetch, 820) 및 메모리 인터페이스(825)를 통한 요소의 인출을 개시한다. 일부 구현예에서, 디코더(845)가 인스트럭션의 개수를 예견(lookahead)하여, 장차 요구되는 기하학적 요소의 인출을 개시할 수 있다. 상기 기하학적 요소는 인출 유닛(820)에 의해, 디코더(845)로 제공될 수 있으며, 상기 디코더(845)는 기하학적 요소를 테스트 셀(810a-810n)로 제공한다. 또한 디코더(845)는 테스트 셀(810a-810n)에 적합한 인스트럭션 정보를 제공하여, 원하는 테스트를 수행할 수 있고, 이때, 복수의 테스트도 가능하다.
또한 디코더(845)는 기능적 주소 인스트럭션으로부터 데이터 캐시(850)로의 광선 참조를 제공하며, 상기 데이터 캐시(850)는 각각의 광선을 충돌 테스트하기에 충분한 각각의 데이터를 각각의 테스트 셀(810a-810n)로 제공한다. 충돌 테스트를 위해 필요하지 않은 광선과 연계되는 데이터는 제공될 필요가 없다.
각각의 테스트 셀(810a-810n)에서 기하학적 요소가 각각의 광선과의 충돌에 대해 테스트되고, 상기 각각의 테스트 셀(810a-810n)로부터 충돌 표시자가 출력되어, 라이트 백 유닛(860)에 의해 수신된다. 테스트되는 기하학적 요소의 속성에 따라서, 상기 라이트 백 유닛(860)은 두 개의 서로 다른 기능 중 하나를 수행한다. 테스트 셀(810a-810n)이 기본형을 충돌 테스트하는 경우, 라이트 백 유닛(860)은, 테스트되는 기본형과 충돌한 각각의 광선에 대한 표시자를 출력한다. 테스트 셀(810a-810n)이 GAD의 요소를 테스트하는 경우, 라이브 백 유닛은 테스트 셀(810a-810n)의 출력을 인스트럭션 유닛(865)으로 제공한다.
인스트럭션 유닛(865)은, 추가적인 충돌 테스팅을 테스트 셀에 지시하는 미래의 인스트럭션을 어셈블하도록 동작한다. 인스트럭션 유닛(865)은, 다음과 같이, 어느 광선이 주어진 GAD 요소와 충돌했는지를 특정하는 테스트 셀(810a-810n)의 입력을 이용하여 동작한다. 테스트 셀(810a-810n)로부터의 입력을 이용하여, 인스트럭션 유닛(865)은, GAD 입력을 바탕으로, 테스트 셀(810a-810n)로부터의 입력에서 특정된 GAD의 요소로 연결되어 있는 GAD의 요소를 결정한다. 인스트럭션 유닛(865)은, 인스트럭션 캐시(830)에 저장되어 있는 하나의 인스트럭션이, 연결된 것으로 식별된 GAD의 각각의 요소에 대해 이미 존재하는가의 여부를 결정하고, 상기 인스트럭션이 임의의 추가적인 광선 기준을 수용할 수 있는가의 여부(즉, 상기 인스트럭션의 모든 데이터 슬롯이 가득 찼는가)를 결정한다. 인스트럭션 유닛(865)은 식별된 광선 중 테스트 셀 입력 내 충돌만큼의 개수의 광선을 상기 인스트럭션에 추가하고, 나머지 광선 참조를 수신하기에 충분한 다른 인스트럭션을 생성한다. 인스트럭션 유닛(865)은 이러한 절차를, 테스트 셀 입력에서 식별된 요소와 연결된 것으로 식별된 GAD의 각각의 요소에 대해 수행한다. 따라서 테스트 셀 입력을 처리한 후, 충돌로서 식별된 광선은 각각, GAD의 연결된 요소에 대해 광선의 테스트를 특정하는 인스트럭션에 추가된다. 상기 인스트럭션은 인스트럭션 캐시(830)에 저장될 수 있다. 인스트럭션은, GAD 입력(870)으로부터 수신된 GAD의 요소의 조직을 바탕으로, 인스트럭션 캐시(830)에서 조직될 수 있다.
예를 들어, GAD 입력(870)은 GAD의 그래프를 제공할 수 있으며, 이때, 그래프의 노드는 GAD의 요소를 나타내고, 노드들의 쌍은 에지(edge)에 의해 연결되어 있다. 상기 에지는 어느 노드가 어느 다른 노드로 연결되어 있는지를 식별하고, 인스트럭션 유닛(865)은, 노드들을 연결하는 에지를 따름으로써, 인스트럭션 캐시(830)를 검색하여, GAD의 주어진 요소에 대해 어느 인스트럭션이 캐시 내에 이미 존재하는지를 식별할 수 있으며, 여기서 새로운 광선이 추가될 수 있다. 주어진 GAD 요소에 대해 복수의 인스트럭션이 존재하는 경우, 이들은 하나의 리스트로 링크될 수 있다. 관련 인스트럭션이 발견될 수 있는 인스트럭션 캐시(830) 내 잠재적 위치를 식별하기 위한 또 다른 방법, 가령, GAD 요소의 ID를 해쉬(hash)-처리하는 방식이 또한 구현될 수 있다. 또한 인스트럭션은 테스트 시 GAD의 노드를 참조할 수 있으며, 그 결과로, 상기 인스트럭션은, 인스트럭션의 발행 및 디코딩에 응답하여, GAD의 연결된 노드의 인출을 야기할 것이다. 각각의 이러한 연결된 요소는, 각각의 테스트 셀에 유지되어 있는 각각의 광선의 테스트를 위해, 테스트 셀(810a-810n)을 통해 스트리밍될 수 있다.
따라서 연결된 노드에 대한 충돌 테스트에 있어서, 이들 예시에 따라 구현되는 프로세서는, 제 1 노드와의 충돌에 대해 식별된 광선을 모으는(collect) 인스트럭션을 획득하거나 생성하기 위한 기능을 제공할 것이다. 앞서 기재된 예에 따르면, 프로세서(805)로 제공되는 GAD가 계층구조를 갖는 경우, GAD의 그래프를 계층적 순서로 횡단할 수 있다. 또한 ITU(350 및 500)와 관련하여 앞서 언급된 세대간 광선 집합에 대한 양태가 도 8과 관련하여 기재된 시스템에 적용될 수도 있다.
GAD의 예시적 연결 및 소스는 예에 불과하며, 다른 배열도 가능하다. 예를 들어, 메모리(815)가 GAD 요소에 대한 소스일 수 있다.
특정 ITU 구현예에서, 선택된 정확도 레벨(가령, 8비트, 16비트, 24비트의 정확도 등)에서 충돌 테스트가 수행될 것이다. 일부 구현예에서, 구현된 ITU는 높은 정확도로 충돌 테스팅을 수행하여, 그 결과로, 추가적인 테스팅 없이, 원하는 정확도로의 광선과 GAD 요소(또는 기본형) 간의 충돌 위치가 결정될 수 있다.
또 다른 양태에서, 구현된 ITU는 광선과 GAD 요소/기본형 간의 충돌에 대해 낮은 정확도의 예비 테스트를 수행할 수 있으며, 이러한 예비 테스트는 높은 정확도의 테스트보다 더 가능성 있는, 그러나 잘못된 충돌(즉, 거짓 양성(false positive) 충돌)의 검출을 도출할 수 있다. 이러한 예비 충돌의 검출 후, 더 높은 분해능의 충돌 테스트가 실시되어, 이들 기본형 중 어느 기본형이 주어진 광선과 첫 번째로 충돌하는가를 결정할 수 있다. 가장 일반적인 쉐이딩 알고리즘에서, 첫 번째로 충돌하는 기본형은 광선 웨이딩 계산에서 사용되는 기본형이다. 우선 더 낮은 정확도의 테스트를 수행함으로써, 명백하게 충돌하지 않는 광선과 기본형에 대해, 더 높은 정확도의 더 연산-집중적인 충돌 테스트를 피할 수 있다. 충돌 위치의 더 높은 정확도 표시자는 상기 정보의 기하학적 형상-중심 표현(geometry-centric representation)을 이용하여 나타내어질 수 있다. 예를 들어, 충돌 위치는 삼각형의 기본형을 기술하는 꼭짓점들 중 하나 이상에 대하여 나타내어질 수 있다.
앞서 언급된 방법 및 상기 방법을 구현하는 시스템은, 하나의 장면에 대하여 충돌 테스트하기 위해 광선을 수용할 수 있는 구현 프로세스라고 볼 수 있으며, 상기 프로세스는 GAD의 요소들에 대해 광선을 테스트하여, 각각의 광선이 각각의 GAD 요소와 충돌하는가의 여부를 바탕으로, 광선의 집합을 형성하도록 동작할 수 있다. 따라서 이러한 테스팅의 결과는 복수의 집합이 형성될 수 있다는 것이며, 상기 복수의 집합 각각은 GAD 요소와 연계된다. 이들 예에서, GAD 요소들은 하나의 그래프로 배열되기 때문에(이때, 에지가 노드의 쌍을 연결함), 임의의 주어진 광선 집합을 테스트하기 위한 다음 단계는, 상기 집합이 연계되어 있는 노드로, 에지에 의해, 연결된 GAD 요소(즉, 그래프의 노드)와의 충돌에 대해 집합의 광선을 테스트하기 위한 단계이다. 그러나 광선의 집합이 테스트될 준비가 될 때까지, 그 밖의 다른 광선의 충돌 테스트를 추구하기 위해, 상기 다음 단계는 미뤄진다. 우선, 상기 프로세스는 광선의 또 다른 집합이 테스트될 준비가 되어 있는가의 여부를 판단할 수 있으며, 준비가 되어 있다고 판단된 경우, 상기 집합은 테스트되기 위해 스케줄링될 수 있다. 그 밖의 어떠한 집합도 테스트될 준비가 되어 있지 않다면, 충돌 테스트를 위한 더 많은 광선을 수용하기 위한 이용 가능한 메모리 공간이 존재하는 경우, 추가적인 광선이 수용되고 테스트된다. 그러나 이용 가능한 메모리 공간이 충분하게 존재하지 않는 경우, 잠재적으로 의사 무작위적으로(pseudorandomly), 또는 휴리스틱(heuristic)을 이용하여, 광선의 집합이 테스트를 위해 선택될 수 있다. 이러한 휴리스틱적 선택은, 예를 들어, 가득 참 여부 표시자를 참조함으로써, 메모리 공간이 이용가능해질 때까지, 또는 집합이 준비된 것으로 판단될 때까지, 계속될 수 있다. 그 후, 집합이 준비된 경우, 상기 집합이 테스트되고, 이용가능한 메모리 공간이 존재하는 경우, 새로운 광선이 수용되고 테스트된다.
휴리스틱적 선택 방법은, 이용률(utilization rate)이나 충돌 테스팅 자원의 크기를 테스트하거나 모니터링함으로써, 인식될 수 있으며, 휴리스틱이 더 바람직한 장기적이거나 평균적인 이용을 제공할 수 있는 경우, 휴리스틱이 사용될 수 있다.
따라서 구현된 프로세스는 가득 찬 광선 집합의 충돌 테스팅을 가장 먼저 수행하며, 두 번째로는, 이용 가능한 메모리 공간을 처리되는 광선으로 채우도록 노력한다. 어떠한 가득 찬 집합도 존재하지 않고, 이용 가능한 메모리 공간이 불충분한 경우, 의사 무작위, 또는 휴리스틱적 선택으로부터 집합이 선택된다. 따라서 상기 프로세스는, 실전에서 메모리 저장 공간이 허용하는 만큼의 수의 광선을 테스트하면서, 충분한 공간 가간섭성(spatial coherence)을 이용하여 광선의 테스트를 향상시키며, 불충분한 개수의 광선이 더 효율적인 충돌 테스팅을 위한 공간 가간섭성을 갖는 경우, 복수의 서로 다른 원점과 방향으로부터의 광선의 생성이 촉진되어 충분한 개수의 광선의 집성(aggregation)이 충돌 테스트의 효율을 증가시킬 수 있다. 예시적 구현예에서 이러한 본 발명의 양태는 간결하게 이뤄진다. 그러나 또 다른 구현예가 이러한 양태를 채용할 수도 있으며, 이는 본 발명의 범위 및 등가물 내에 있는 것으로 여겨진다. 이들 양태는, 호스트 상에 위치하는 프로세스(가령, 드라이버 프로세스 등) 내의 ITU(350) 또는 ITU(500) 내에서 구현될 수 있거나, 충돌 테스팅 자원과 상기 충돌 테스팅 자원용 드라이버 사이에서 협력적으로 구현될 수 있다. 호스트 프로세서의 상호대화(interaction)는 나중 도면을 참조하여 더 설명될 것이다.
앞의 기재로부터 이해될 수 있는 또 다른 양태에서, 광선의 충돌 테스팅을, 적합한 양의 광선이 모아지고 정의된 물체의 세트에 대해 테스트될 준비가 될 때까지, 미루면서, 충돌 테스트될 필요가 있는 기본형의 범위를 좁히거나, 기본형을 반복적으로 배제할 수 있다. 임의의 집합의 광선은 카메라 광선, 또는 쉐이딩 계산(또는 빛이나 그림자를 샘플링하기 위한 그 밖의 다른 연산)으로부터 도출된 그 밖의 다른 타입의 광선을 포함할 수 있으며, 그 결과로, 상기 방법은, 복수의 광선을 충돌 테스트할 때, 상기 광선들이 유사하지 않은 원점과 방향을 가질 수 있더라도, 장면 가속화 데이터 및 장면 기본형으로의 더 구조화되고 예측 가능한 액세스가 가능하다는 효과를 갖는다. 다시 말하자면, 예로든 이러한 방법에 의해, 서로 다른 원점, 방향 및 목적지를 갖지만, 여전히 공통의 가속화 데이터 요소 또는 기본형과의 충돌에 대해 병렬로 테스트될 수 있는 광선을 식별하는 것이 가능해진다.
그 밖의 다른 광선과 그 밖의 다른 가속화 데이터(또는 기본형)가 테스트되는 동안, 이러한 광선의 식별은 시간의 흐름에 따라 분산될 수 있다. 실제로, 이들 양태는 병렬 테스트되기 위한 서로 다른 세대의 광선을 모으는 것으로 나타날 수도 있으며, 이는 예를 들어, 1차 카메라 광선이, GAD 요소와의 충돌에 대해, 생성된 2차 광선과 병렬로 테스트될 수 있어서, 장면의 완전히 상이한 부분 내 완전히 상이한 물체의 특정한 반사를 테스트할 수 있는 것을 의미하며, 이때, 2차 광선은 완전히 상이한 카메라 광선과 관련 있을 수 있다. 요컨대, 이들 방법 및 시스템은, 임의의 개수의 서로 다른 원점 및 방향을 갖는 장면 내에서 이동하는 광선으로 구성된 큰 그룹으로부터 잠복 광선 가간섭성을 추출하도록 동작하고, 상기 추출된 잠복 광선을 이용하여, 병렬화된 충돌 테스트와 메모리 대역폭의 보존을 가능하게 할 수 있으며, 이로 인해서, 장면 기본형 또는 GAD 요소를 캐시에 중간-저장하지 않고, 더 크고 저렴한 메모리의 직접 액세스를 가능하게 할 수 있다. 또한 이 방법은, 2차 광선과 관련된 것이 어떤 카메라 광선인지에 관계없이, 또는 각각의 원점과 방향에 관계없이, 상기 2차 광선(즉, 카메라 광선이 아닌 광선)의 광범위한 산란 및 이용가능성을 가능하게 하는 과정과, GAD 요소와의 충돌에 대해 광선을 테스트함으로써, 이러한 광선 및 그 밖의 다른 가능한 광선(가령, 카메라 광선)을 모으는 과정을 포함할 수 있다. 따라서 이러한 방법의 구현예는 앞서, GAD 요소와의 충돌을 바탕으로 하는 렌더링 시간 동안 다중 세대 광선을 모으고, 이러한 집합을 정제(refine)하는 것으로 기재된 전용 하드웨어 접근법 및 SIMD 접근법의 변형예를 포함할 수 있다.
앞서 언급된 양태 중 대부분은 광선 데이터 및 광선 집합 데이터가 분리되어 유지관리된다는 관점에서 기재되었다. 그러나 일부 구현예에서, 이러한 분리성은 명시적이거나 명백할 필요는 없으며, 광선 집합 데이터 및 광선 데이터는 예를 들어 내용 연관 데이터베이스(content associative database)로서 유지관리될 수 있으며, 이때, 집합과 광선 간의 연계 관계 및 집합과 GAD의 요소 간의 연계 관계가 유지관리될 수 있으며, 테스트되기 위한 집합과 연계된 광선 및 상기 집합과 연계된 GAD의 요소를 식별하기 위해 사용될 수 있다.
앞의 기재는 대부분, 충돌 테스팅 자원 내에서의 기능(functionality) 및 이의 구현에 관한 것이었다. 이러한 충돌 테스팅 자원은 일반적으로, 대형 시스템 내에서, 또는 렌더링 서비스를 필요로 하는 애플리케이션과 인터페이싱하는 시스템 그룹에서 사용될 것이다. 상기 시스템은, 장면을 렌더링하기 위해, 데이터를 수신하는 드라이버 및 그 밖의 다른 프로세스를 실행하고, 충돌 테스팅 자원과 인터페이싱하여, 렌더링의 충돌 테스팅 부분을 달성할 수 있다.
다음의 기재는 이러한 시스템 및 상기 시스템으로 구성된 그룹에 대한 개요를 제공하며, 뒤 이어, 이러한 시스템 상에서 실행될 수 있는 프로세서와 기능은 어떠한 종류인지에 대한 예를 기재한다. 컴퓨터 시스템(900)은 호스트 시스템(903)을 포함하며, 상기 호스트 시스템(903)은 메모리(925)와 인터페이싱하는 CPU(905)와, 사용자 인터페이스(915)를 포함한다. 상기 사용자 인터페이스(915)는 키보드(920), 마우스(921) 및 조이스틱(922)으로부터 입력을 수신하고, 예를 들어, 디스플레이(940)로 출력을 제공할 수 있다. 호스트 시스템(903)은 충돌 테스팅 자원(910)과 인터페이싱하며, 이는 온칩 메모리(912)(가령, SRAM) 및 오프칩 메모리(930)(가령, DRAM)와 인터페이싱하는 로직(911)을 이용하여 구현될 수 있다. 로직(911)과 메모리(912)의 조합은 앞서 언급된 바와 같이 ITU(350) 또는 ITU(500)를 구현할 수 있다. 테스팅 자원(910)을 위한 드라이버 등의 소프트웨어가 CPU(905) 상에서 실행된다. 상기 드라이버는 로직(911)으로 광선을 제공하고, 쉐이딩 계산 및 디스플레이하기 위해 렌더링된 장면을 생성하기 위해 필요한 그 밖의 다른 계산에서 사용될 식별된 광선/기본형 충돌을 수신할 것이다.
도 10A는 CPU(905)가, 광선 추적법을 이용한 렌더링을 필요로 할 수 있는 애플리케이션 코드(1025)를 위한 프로세싱 자원을 제공할 수 있는 렌더링 시스템(1000)의 예를 도시한다. 예를 들어, 이러한 애플리케이션은 비디오 게임, 3-D 모델링/설계 툴 및 임의의 시각화 툴을 포함할 수 있다. 따라서 CPU(905)는, 이러한 애플리케이션 코드 중, 렌더링되기 위한 장면을 기술하는 정보를 처리하고, 이러한 정보를, 예를 들어, 애플리케이션 프로그래밍 인터페이스, 함수 호출, 또는 그 밖의 다른 적합한 구현을 통해, 기하학적 형상 프로세스(1020), 샘플 프로세스(1010) 및 쉐이더 프로세스(shader process, 1015)로 제공할 수 있다. 상기 정보는, 장면에 대해 와이어프레임(wireframe)을 표현하는 기본형, 또는 와이어 프레임이 구성될 수 있는 픽셀 어레이, 또는 (넓게 말해서) 렌더링될 장면 내 물체의 표면을 나타내는 또 다른 적합한 수단을 포함할 수 있는 기하학적 형상을 포함할 수 있다. 도 10A는 또한 CPU(905)가, 충돌될 광선을 기술하는 정보를 저장하는 버퍼(1040)를 통해 충돌 테스팅 자원과 통신하는 것을 도시한다. 충돌 테스팅 자원(910)에서 구현된 수신기(1050)가 광선에 대해 기술하는 정보를 수신한다. 이하에서, 충돌 테스팅을 위해, 많은 수의 광선을 효과적으로 전달하기 위해 이러한 광선 정보가 구조화될 수 있는 방법의 예를 설명한다.
저장 및/또는 전송을 위한 광선 표현법
불규칙적인 광선이 3-차원 원점 및 3-공간 방향 벡터에 의해 표현된다. 이러한 표현은, “세계 공간(world space)”을 표현하기(즉, 상대참조 없이, 장면 내 광선에 대한 절대 위치 및 방향을 제공하기)에 적합한 정확도의 6개의 숫자 값을 필요로 한다. 주어진 시간에서 복수의 광선이 추적되기 위한 대역폭과 저장 공간 요구치는, 이러한 시스템에서 시스템 대역폭과 저장 공간에 대한 그 밖의 다른 요구에 비교할 때, 합리적으로 작기 때문에, 이러한 표현은 대부분의 광선 추적 적용예에 적합한 것으로 발견되었다. 그러나 하드웨어-가속된 충돌 테스터와 인터페이싱하는 소프트웨어 드라이버가 호스트 프로세서에 의해 실행되고, 상기 테스터가 장면 기본형 및/또는 그래픽 가속화 데이터 요소에 대해 훨씬 더 많은 수의 광선을 병렬로 테스트하는 광선 추적 시스템 아키텍처에 있어서, 하드웨어 가속기로의 광선 데이터 전송을 위한 대역폭 및 저장 공간 요구치가 제한 요인이라고 발견되었다.
렌더링 시스템(1000)은 본 발명의 광선 데이터 전송/수신 효율 양태를 이용할 수 있다. 샘플 프로세스(120)가 디스플레이될 장면을 표현하는 픽셀의 2-D 평면을 유지하도록 동작한다(그리고 이를 위해 광선 추적법에 의해 픽셀의 색상이 결정된다). 샘플 프로세스(120)가 축적된 픽셀 빛에너지에 대한 버퍼를 장면 버퍼(1011)에서 유지관리할 수 있다(실제로, 이러한 빛에너지에 대해 복수의 버퍼가 유지관리될 수 있으며, 이 추상화는 이러한 구현예의 세부사항의 일반화를 나타낸다). 장면 버퍼(1011)의 픽셀은 주어진 장면을 위한 렌더링이 완료된 후 출력될 수 있다. 샘플 프로세스(120)는 또한, 충돌 테스팅 자원(1045)에서의 장면을 구성하는 기본형에 대한 충돌 테스팅을 위한 카메라 광선을 발산할 수 있다. 이들 발산된 카메라 광선은 버퍼(1040)로 먼저 출력될 수 있다.
기하학적 형상 프로세스(geometry process, 1020)는, 애플리케이션(1025)에 의해 제공되는 꼭짓점들의 리스트로부터, 장면 기본형 및 기하학적 형상 가속화 데이터를 생성할 수 있다. 상기 기본형 및 가속화 데이터는 ITU(910)로 제공될 수 있다. 필요 및/또는 요구에 따라, 다양한 인터페이스 구성요소가 이러한 통신 및 뒤 따르는 저장 과정 중간에 삽입될 수 있다.
쉐이더(shader, 1035)는 색상 계산(color calculation) 및 장면 기본형과 광선 간의 충돌을 식별하기 위해 이뤄질 그 밖의 다른 작업을 수행하기 위한 임의의 개수의 서로 다른 코드 부분, 프로세스 및 또는 그 외 다른 구현을 나타낸다. 이러한 작업은, 이하에서 설명될 바와 같이, 2차 광선(가령, 그림자 광선, 반사 광선)의 발생을 포함할 수 있다. 쉐이더(1035)는 또한 이러한 2차 광선을 버퍼(1040)로 출력한다. 이하에서 더 상세히 설명될 바와 같이, 쉐이더(1035)는 또한, ITU(910)로부터, 식별된 광선/기본형 충돌의 표시자를 수신할 수 있다.
버퍼(1040)는 샘플 프로세스(120)와 쉐이더(1035) 각각을 위한 전용 포트를 포함할 수 있다. 버퍼(1040)는 또한 ITU(910)로의 출력 포트를 갖는다. 버퍼(1040)는, 호스트(103)나 ITU(910)에 의해, 또는 상기 버퍼(1040) 내부에 위치하는 회로나 소프트웨어에 의해 관리될 수 있다. 버퍼(1040)는 단순히 FIFO 큐이거나, 더 복잡한 구성을 가겨서 그 결과로, 광선 선택을 순서에 관계없이 수행하거나 광선을 리오더링(reordering)할 수 있다. 버퍼(1040)는 또한 ITU(910)의 일부분일 수 있다.
샘플 프로세스(1010), 쉐이더(1035) 및 수신기(1050)의 동작을 더 상세히 설명하기 전에, 앞의 프로세스 및 구성요소의 동작과 관련하여, 장면에서 충돌 테스트될 수 있는 예시적 타입의 광선이, 각각의 광선을 정의하기에 충분한 데이터 등의 특성과 함께 제공된다.
광선의 유형
카메라 광선
카메라 광선에 대한 양태는 도 12와 관련하여 설명된다. 카메라 광선은 카메라(1205)로부터 발산되며, 이때 상기 카메라는 모션 픽처와 유사하고, 장면이 바라봐질 위치를 나타낸다. 카메라(1205)는 물리적 개체가 아니고, 3D 공간 내 하나 이상의 점(point)이다. 카메라 광선은 핀홀 카메라 광선(즉, 모든 광선이 동일한 원점을 공유함)과, 비-핀홀 카메라 광선(즉, 광선들은 유사한 원점을 갖지만 정확히 동일한 원점을 갖진 않음)을 포함한다. 핀홀 카메라로부터의 광선은 이미지 평면 상에 놓이는 x 및 y 포지션으로부터 얻어질 수 있는 방향을 갖는다. 도 12에서, 광선(1210a-1210f)이 도시된다. 각각의 광선(1210a-1210e)은 이미지 평면(1250)과 충돌한다. 각각의 광선이 이미지 평면(1250)과 충돌하게 되는 위치가 각각 도면부호(1215a-1215f)로 식별된다.
비-핀홀 카메라에 대하여, 정의된 관계(가령, 프로그래밍된 정의값)에 의해, 카메라로부터 발산된 광선들이 공통적으로 갖고 있는 카메라 속성을 참조함으로써, 이미지 평면 상의 x 및 y 포지션이 완전한 광선 원점 및 방향으로 해석되어질 수 있다. 따라서 카메라 광선은, 이미지 평면 상의 위치를 표현하기에 적합한 정확도로, 공유 카메라 속성과 결합하는 2개의 숫자 값으로 표현될 수 있으며, 이는 구현될 것이 요구되는 임의의 오버-샘플링(over-sampling) 및/또는 다중-샘플링(multi-sampling)에 대한 것이다.
카메라 광선을 전체 프레임에 대해 발산하거나, 이미지 평면의 하나의 영역으로 발산하는 것이 바람직한 경우, 단일 토큰이 이들 광선을 표현할 수 있으며, 이때, 상기 토큰은 광선 발산의 간격(interval)을 특정하는 프로그래밍된 관계 또는 이미지 평면과 정의된 위치(또는 샘플링 기법의 관계나 샘플링 매개변수로부터 얻어질 수 있는 위치)에서 충돌시키기 위해 광선이 카메라로부터 발산되게 하는 샘플링 기법을 제공한다.
반사 광선
반사 광선의 양태는 도 11을 참조하여 설명된다. 반사 광선은 광선과 기본형의 충돌로부터 야기되며, 이때, 쉐이딩 계산이, 장면에서 반사 광선이 추가적인 충돌 테스팅을 위해 발산되어야 할 것인지를 결정한다. 특정 예를 들면, 카메라 광선(1106)은 카메라(1105)로부터 발산되고, 카메라 광선(1106)는 기본형과 포인트(1115)에서 충돌한다. 이 기본형/광선 충돌 쌍은 ITU로부터 쉐이더(1035)로 출력된다. 그 후, 쉐이더(1035)가 반사 광선(1120a-1120f)이 포인트(111)를 원점으로 갖고 기본형(1110)로부터 발산되어야 할 것을 결정한다.
나타나다시피, 쉐이딩 동작은 종종, 하나의 원점에서 복수의 자손 광선을 생성하는 과정을 포함한다. 이들 광선을 충돌 테스팅 유닛으로 효과적으로 전송하기 위해, 원점은 상기 자손 광선들의 공유 데이터로서 한 번 전송될 수 있으며, 각각의 자손 광선에 대해 단 하나의 방향 벡터만 전송된다. 선택사항으로서, 3-공간 단위 벡터를 대신하여, 각각의 광선 방향은 각도의 쌍으로서 전송될 수 있다.
몬테 - 카를로 원점/ 오클루전 광선( Monte - Carlo Origin / Occlusion Ray)
몬테-카를로 원점/차폐 광선은 도 14를 참조하여 설명된다. 일부 라이트닝 기법(lighting technique), 가령, 복수의 몬테-카를로 샘플링 기법, 앰비언트 오클루전(ambient occlusion) 및 그 밖의 다른 기법이 반구(hemisphere) 상의 복수의 점을 샘플링한다. 이들 기법을 위해 발산되는 광선은 또한, 앞서 언급된 반사 광선을 위해 사용된 기법과 유사한 기법을 이용하여 더 효과적으로 전손 및/또는 저장될 수 있다. 그러나 각각의 광선에 대해 고정된 공통 원점을 제공하는 것 대신, 광선 원점은, 이들이 규칙적으로(regular), 무작위적으로(random), 매개변수적으로(parametrically) 및/또는 프로그래밍에 의해(programmatically) 얻어질 수 있다. 따라서 이러한 광선의 원점은 독립적으로 특정될 필요는 없으며, 광선 전송 효율은 각각의 광선에 대해 원점과 방향을 구축하기에 충분한 정보를 전송함으로써 증가될 수 있다. 예를 들어, 모든 광선이 반구 표면 상의 하나의 점의 접선에 수직인 방향으로 발산될 것이다. 표면 상의 이들 점은 밀도 함수(density function)에 의해 기술될 수 있다.
도 14는 반구 표면(505)을 도시하며, 상기 반구 표면으로부터 다양한 광선(가령, 광선(1410a-1410f 및 1415a-1415c))이 발산될 수 있다. 광선(1410a-1410b)에 관하여, 이들은 각도(1425a 및 1425b)에 의해 부분적으로 매개변수화되는 것으로 나타나며, 상기 각도는 로컬 표면 접선 벡터에 대하여 측정된다. 특히 도 14의 예에서, 광선(1410a-1410f)은 각도(가령, 각도(1425a 및 1425b)로 기술될 수 있다. 각각의 광선에 대한 원점은, 다른 광선 원점으로부터의 상대 거리(가령, 거리(1435))에 의해 결정될 수 있다. 또한 원점은 기준 점(가령, 기준 점(1430))에 대하여 표현, 또는 그 밖의 다른 방식으로 결정될 수 있으며, 예를 들어, 각각 광선(1410d 및 1410e)까지의 거리(1440 및 1445)에 의해 설명된다. 존재할 수 있는 또 다른 예시적 매개변수 상황으로는 하나의 공통 원점으로부터 발산되는 광선들(가령, 1415a-1415c) 간의 각도가 있으며, 이때, 이러한 각도들은 각도(1420a 및 1420b)로서 식별된다. 또 다른 상황에서, 광선(1410c)의 원점 대(versus) 도 14의 그 밖의 다른 광선이 나타나내는 바와 같이, 광선이 표면(1405)으로부터 무작위적, 또는 의사 무작위적 간격을 두고 발산될 수 있다. 이러한 광선은 통계적 방법(statistical method)으로 기술될 수 있다.
따라서 이러한 광선의 원점은 규칙적 간격으로 위치되거나, 무작위적 또는 의사 무작위적으로 분산되어 위치하거나, 그 밖의 다른 매개변수에 따라, 또는 프로그래밍에 따라 얻어지는 것으로 기술될 수 있다. 따라서 각각의 광선에 대해 원점과 방향을 명시적으로 제공하는 것 대신, 매개변수 또는 프로그래밍적 정의값이 전송되고, ITU에서의 각각의 광선의 원점과 방향의 결정을 위해 사용된다.
즉석 전역 조명/그림자 광선(Instant Global Illumination/Shadow Rays)
도 13이 알려진 광원을 충돌되는 기본형(또는 그 밖의 다른 원점)으로부터 기원하는 그림자 광선으로 샘플링하는 즉석 전역 조명 등의 라이트닝 기법(lighting technique)에 관련된 양태를 설명하기 위해 참조된다. 그림자 광선을 발산하는 과정은 광선을, 원점으로부터, 광원이 그 내부에 존재하는 것으로 알려진 공간 내 정의된 하나의 점으로 전송하는 과정을 포함한다. 이들 광선의 전송은, ITU에 모든 가능한 빛 위치에 대한 표를 제공함으로써, 더 효과적으로 이뤄질 수 있다. 이러한 빛 위치의 표를 이용하여, 발산될 광선에 대한 방향 벡터가 인덱스로부터 빛 위치의 표로 얻어질 수 있다. 또한 복수의 그림자 광선은 하나의 단일 충돌되는 기본형에 대해 발산될 필요가 있기 때문에, 상기 복수의 그림자 광선에 대한 원점은 단 한 번만 전송될 수 있다.
추가적인 설명을 하자면, 카메라(1305)가 카메라 광선(1310a 및 1310b)을 생성하며, 상기 카메라 광선들은 기본형(1315a 및 1315d)과 점(1320a 및 1320d)에서 충돌한다. 이러한 충돌 각각은 쉐이더(1035)에 의해 표시될 것이다. 쉐이더(1035)에 의해, 광선(1335a, 1335c 및 1330b)은 (1320a)에서의 충돌에 대해 발산될 수 있다. 광선(1335a)은 광원(1340a)을 목적지로 가지며, 광선(1335c)은 광원(1340c)을 목적지로 가지며, 각각의 광선은 이들 광선 경로 상에 어떠한 장애물도 갖지 않는 것으로 도시된다. 따라서 점(1320a)은 이들 광선에 대한 또 다른 물체의 그림자 내에 있지 않는다. 광선(1330b)은 광원(1340b) 쪽으로 발사되었지만, 점(1320b)에서 물체(1315b)와 충돌하는 것으로 도시된다. 이러한 충돌 후에 광선은 점선으로 표현된다.
도시되는 바와 같이, 각각의 광선(1335a, 1335 및 1330a)은 하나의 공통 원점을 공유하며, 상기 원점으로부터, 서로 다른 알려진 광원까지로의 방향을 갖는다. 따라서 이들 방향은, 3D 공간 내 광원의 위치를 특정하기 보다는, 광원의 위치의 표나 그 밖의 다른 편성물을 인덱싱함으로써, 특정될 수 있다. 또한 그림자 광선들은 하나의 공통 원점으로부터 발산되기 때문에, 공통의 원점은 공유 광선 데이터로서 제공될 수도 있다. 물체(1315d)와 점(1320d)에서 충돌하는 카메라 광선(1310b)에 대해 유사한 상황이 도시된다. 광선(1335b 및 1335d)이 광원(1340b 및 1340c)에 대해 발사되고, 또 다른 물체와 충돌하지 않아서, 점(1320d)은 이들 광원에 대한 그림자 내에 있지 않다고 판단될 수 있다. 그러나 광선(1330a)은 광원(1340a)을 목적지로 갖지만, 물체(1315c)와 점(1320c)에서 충돌한다. 따라서 점(1320d)은 물체(1320b)의 그림자 내에 있다고 판단될 수 있다. 다시, 이들 그림자 광선은 각각의 광원을 목적지로 갖고, 하나의 공통 원점으로부터 기원하기 때문에, 상기 공통 원점은 공유 광선 데이터로서 표현될 수 있으며, 각각의 광선 방향은 광원 및 이들의 각각의 위치의 리스트로의 인덱스에 의해 표시된다.
앞서 언급된 예시적 광선 타입 및 이들 광선을 전송하고 저장하기 위한 효율을 증가시키기 위한 방식은, 예를 들어, 수신기(1050)의 고정된 함수 회로로 구현될 수 있다. 이러한 회로는 버퍼(1040)를 통해 샘플 프로세서(1010) 및 쉐이더(1035)로부터의 데이터를 해석할 수 있다. 예를 들어, 수신기(1050)에서 수신된 헤더는 앞서 식별된 타입 중 하나의 타입의 복수 광선으로서 그 밖의 다른 데이터를 해석하기 위한 포맷을 특정하는 정보를 포함할 수 있다. 이러한 헤더는 광선 타입을 특정하는 정보를 포함할 수 있으며, 상기 광선 타입은 지원되는 광선 타입을 설명하기에 적정한 수의 비트일 수 있다. 그 밖의 다른 정보는 데이터가 전송될 복수의 광선일 수 있다. 또 다른 전송되는 정보는, 복수의 광선들이 공유하는 광선 데이터, 또는 복수의 광선들 간에 다른 방식으로 공통될 광선 데이터로서 수신될 데이터의 일부분과, 각각의 광선에 대해 개별적으로 수신될 데이터의 또 다른 부분 을 식별하는 정보일 수 있다. 예를 들어, 공통의 원점으로부터 광선이 반사 광선으로서 발산되는 경우, 헤더에서 식별되는 데이터의 일부분은 공통 원점에 대한 것이고, 헤더에서 식별되는 데이터의 또 다른 부분은 각각의 반사 광선의 방향에 대한 것일 수 있으며, 또는 그 밖의 다른 경우, 광선 방향에 대한 공식 및/또는 매개변수적 정의에 대한 것일 수 있다. 따라서 이 구현예에서, 헤더, 또는 그 밖의 다른 전송되는 설정 정보를 이용함으로써, 예를 들어, 광선 방향을 특정하는 숫자의 서로 다른 정확도를 가능하게 함으로써, 광선 데이터 세부사항이 유연해질 수 있다.
그림자 광선의 예시에 대한 변형예와 일반예는 광선이 발산되고, 공통의 위치를 목적지로 삼는 상황을 포함할 수 있지만, 다양한 원점을 가질 수 있다. 이에 대한 첫 번째 예로는 특정 광원의 가림 여부(occlusion)에 대해 각각 테스트될 필요가 있는 복수의 기본형/광선 충돌이 식별되는 상황이 있을 것이다. 복수의 광선은 각각의 광선/기본형 충돌에서, 광원의 가림 여부를 테스트하기 위한 그림자 광선을 표현할 수 있다. 불규칙적 또는 가변(또는 둘 모두) 표면의 복수 점이 알려진 광원 쪽으로의 방향으로 광선을 발산하는 또 다른 예시가 존재한다. 이러한 예시는 태양광으로 조명되는 물이 보여지는 경우 제공된다. 물의 복수의 부분으로부터의 광선은 태양의 방향으로 발산될 것이다. 따라서 이러한 광선의 원점은 다양할 것이지만, 광선의 목적지는 거의 유사할 것이다. 원점은 또한 매개변수에 의해 특정 및/또는 (의사) 무작위적 요소에 의해 특정되어, 예를 들어, 바람이 표면에 미치는 영향을 반영할 수 있다. 이러한 예시의 또 다른 변형예가 가능하며, 한 가지 일반화된 예가 존재하고, 이 예에 따르면, 표면 또는 물체가 주어진 광원으로부터의 조명에 노출되지만 빛과 표면의 충돌은 표면에 걸친 위치에 따라 달라질 것이다. 그 후, 복수의 광은 상기 광원을 목적지로 갖는 그룹으로 표현될 수 있으며, 매개변수적으로, 또는 무작위화된 원점을 가질 수 있다.
또 다른 양태로는 광원이 아닌 다른 물체가 복수의 서로 다른 광선에 대한 목적지인 상황을 포함한다. 예를 들어, 렌즈는 시계(field of view)로부터 광선을 집중시킬 수 있으며, 상기 시계 내 광선 충돌과 관련된 기본형에 의해, 상기 렌즈의 표면 상의 목적지를 공유하는 광선들을 발생시킬 수 있다. 더 일반적으로, 이들 상황에서, 복수의 광선들 간에 최소한 목적지가 공유되며, 따라서 상기 복수의 광선들 간에 공유되는 광선 데이터로 표현될 수 있다. 이러한 기재로부터 그 밖의 다른 상황도 도출될 수 있다.
그 밖의 다른 구현예에서, 헤더에서 특정될 수 있는 정보는 하드-코딩(hard-code)될 수 있으며, 그 결과로, 시작 비트 시퀀스가, 복수의 광선을 특정하기 위한 정보의 다양한 타입의 공통 및 공유 부분에 대해 미리 배열된 비트 위치를 가질 수 있는 광선 데이터의 시작부분을 식별할 수 있다. 일부 구현예에서, 주어진 헤더에 대해 특정된 복수의 광선이 고정되거나 그 밖의 다른 방식으로 내재될 수 있다.
앞서 언급된 예시적 구현예에는, 헤더 데이터 해석 등의 데이터 해석(data interpretation)을 통해 약간의 유연성이 제공될 수 있으며, 충돌 광선의 타입이 더 효과적으로 표현되고 미리 판단될 시스템에 적합하다(그 밖의 다른 광선 타입은, 공유 광선 데이터의 사용 없이, 각각의 광선에 대해 원점과 방향을 완전히 정의함으로써 표현될 수 있다). 그러나 보다 프로그래밍-가능하며 유연한 구현예가 제공될 수 있다. 보다 프로그래밍-가능한 구현예에 의해, 예를 들어, 서로 다른 카메라 동작, 오클루선 광선 및 몬테 카를로 광선을 위한 샘플링 및 분배 기법의 변화가 가능한 구성이 지원될 수 있다. 또한, 그 밖의 다른 타입의 공통 및 개별적 광선 데이터가 프로그래밍에 의해 설정될 수 있다.
예를 들어, 앞서 언급된 오클루전 광선은 알려진 광원의 표를 이용할 수 있으며, 그 결과로 별도의 광선 데이터는 광원에 대한 완전한 정확도의 3-공간 좌표보다는 광원에 대한 인덱스들을 포함할 수 있다. 또 다른 구현예는 광원의 분배 기능에 대해 제공될 수 있으며, 여기서 수신기(1050)는, 식별된 충돌로부터의 오클루전을 위해 샘플링된 광원 위치를 발생하기 위한 분배 기능을 이용할 것이다. 그리고 이러한 예에서, 분배 기능은 개별적인 광선 데이터를 전송하는 정보의 일부분일 것이다. 이러한 예는, 기법 공개가 제공된 예, 또는 제공된 예시적 광선 유형으로 제한되는 것은 아니며, 희망되는 유형과 형태에 관계없이 광선 데이터의 효율적인 전송 및 세부사항을 위해 보다 일반적으로 적용되고 적응된 것이다. 이러한 적용 및 적응은 수신기(1050) 내 프로그램 가능한 자원의 제공에 의해 보조될 수 있다.
이러한 프로그램 가능한 양태는 도 1C에 관련하여 도시되며, 상기 양태는 버퍼(1040)를 통한 광선 정보를 수신하고, 또한 메모리 자원(181)과 통신하여, 광선 재구성 동안 데이터를 저장하는 프로세서(180)를 제공한다. 재구성된 광선은 광선 출력(190)을 통해 출력된다.
앞의 기재는 광선의 공급원로부터 광선을 전송하는 것, 예를 들어, 샘플 유닛이나 쉐이더 코드에 주로 관련되어 있었다. 그러나 광선의 저장 효율을 증가하는 것 또한 제공될 수 있다. 예를 들어, 광선 전송에 관련하여, 도 10A에서, 수신기(1050)는 샘플 프로세스(120) 및 쉐이더(1035)로부터의 입력을 수신하고, 완전히 특정된 원점 및 방향으로서 광선을, 연결(1052)을 통해, 메모리(912)로, 또는 충돌 테스팅 자원(1045)으로 출력하는 것으로 도시되었다. 일부 구현예에서, 메모리(912)는 또한 광선 정보를, 연결(1053)을 통해 충돌 테스팅 자원(1045)으로 직접 제공할 수 있다.
특정 충돌 테스팅 유닛 구현예는 충돌 테스팅 유닛에서 광선 메모리를 보존하는 것으로부터 이점을 취할 수 있다. 이러한 경우, 광선이 압축된 형태로 저장(가령, 공유 및 개별 데이터 표현으로 저장)되고 충돌 테스트를 수행하기에 앞서서 압축해제될 수 있다. 이는 여분의 연산 자원과 맞바꾸어 메모리 절약을 야기한다. 예를 들어, 도 10A에 따르면 이러한 광선 저장 예시에서, 수신기(1050)는 연결(1052)을 통해 메모리(912)로부터의 데이터 판독과 메모리로의 데이터 기입을 수행한다. 따라서 수신기는, 먼저 광선을 수신하면, 광선을 수정 없이 메모리(1912)에 저장할 수 있고, 그 후, 이들을 불러와서(retreive), 재구성 동작을 수행하여, 광선 출력(1051)을 통해 광선들을 출력할 수 있다. 광선 출력(1051)은 충돌 테스팅 자원(1045)과 연결되어 있어서, 충돌 테스팅 자원에게 충돌 데스팅을 위한 광선 데이터를 제공할 수 있다. 수신기(1050)는 또한 수신될 때 광선 중 일부는 저장하고, 그 밖의 다른 광선의 원점과 방향은, 수신된 광선 데이터로부터 판단함으로써, 상기 그 밖의 다른 광선을 충돌 테스팅에서 바로 사용되기 위해 재구성할 수 있다.
도 15는 광선 그룹(가령, 앞서 언급된 예시적 광선 유형에 따르는 광선 그룹)을 효과적으로 표현하는 데이터를 생성하고, 상기 데이터를 가령 충돌 테스팅 자원(1045)으로 전송하기 위한 (도 10A의) 호스트(905)에서 구현가능한 방법을 도시한다. 방법(1500)은 발산될 복수의 광선을 결정하는 단계(1505)를 포함한다. 예를 들어, 샘플 프로세스(1010)는 카메라 광선의 그룹을 발산시키도록 결정할 수 있다. 상기 방법은 또한, 복수의 광선의 공유 속성을 식별하는 단계(1510)를 포함할 수 있다. 예를 들어, 카메라 광선의 그룹의 경우, 공유 속성은 카메라의 위치일 수 있다. 그 후, 상기 방법은 공유 속성을 전송될 데이터로서 표현하는 단계를 포함한다. 상기 방법은 공유 속성을 나타내는 데이터 및 광선 그룹의 각각의 원점 및 방향을 결정하기에 충분한 그 밖의 다른 데이터를 전송하는 단계로 마쳐진다.
결정 단계(1505)와 식별 단계(1510)는, 기재의 명료성을 위해 따로 따로 식별되었다. 그러나 다수의 구현예에서, 이들 단계는 이러한 광선을 발산시킬 것을 결정하는 프로세스 외부 관점에서“식별가능”하지 않다. 쉐이더 또는 샘플 프로세스가 광선 그룹을 발산시킬 것을 결정할 수 있고, 이러한 결정 단계에서, 쉐이더나 샘플 프로세스는 광선 그룹을, 개별적인 광선 데이터 형태에 추가로 공유 속성으로 표현할 수 있기 때문에, 공유 속성을 식별하는 단계는 묵시적(implicit)일 수 있다. 따라서 광선 그룹을 표현하는 전송된 데이터가, 추가적인 프로세싱 없이 광선 그룹을 결정하는 프로세스로부터 출력될 수 있다. 다수의 경우에서, 이러한 구현은 그룹 내 각각의 광선에 대해 개별적인 원점 및 방향을 출력하고, 상기 그룹의 공유 속성을 식별하는 것보다 바람직할 것이다.
도 16은 충돌 테스팅 유닛(910)(가령, 수신기(1050))에서의 구현가능한, 광선 그룹을 나타내는 데이터를 수신하기 위한 방법을 도시한다. 상기 방법은 광선 데이터 입력으로부터 데이터를 수신하는 단계(1605)를 포함한다(가령, 버퍼(138)를 통해 수신기(1050)로). 상기 데이터는 앞서 도 15와 관련하여 설명된 바와 같이, 공유 광선 데이터와 그 밖의 다른 광선 데이터를 포함한다. 또한 상기 방법은 공유 광선 데이터 및 그 밖의 다른 광선 데이터를 식별하기 위해 데이터를 해석하는 단계(1610)와, 수신된 데이터에서 기술되어 있는 광선 그룹의 각각의 광선에 대한 원점과 방향을 결정하는 단계(1615)를 포함한다. 해석 단계(1610)와 결정 단계(1615)는 수신기(1050) 내에서 실시될 수 있으며, 수신기(1050)에 의해 수행되는 동작들, 가령, 양태의 해석과 결정은 수신된 데이터 및 구현예의 내용에 따라 달라질 수 있다. 예를 들어, 수신된 데이터가 내용을 기술하는 헤더를 포함하는 경우, 상기 수신기는 공유 광선 데이터를 식별하고, 그룹에 대한 광선 유형을 해석하고, 결정 단계(1615)에서 상기 광선 유형을 사용할 수 있다. 보다 프로그램 가능한 구현예가 제공되는 경우, 수신된 데이터는 수신기(1050)의 프로그래밍 부분을 위한, 수신된 데이터를 어떻게 해석해야할지에 대한 인스트럭션을 포함할 수 있다. 해석은 궁극적으로 결정 단계에 영향을 미치는데, 결정 단계가 광선 유형, 광원 인덱스 및 그룹 내 광선을 더 효율적으로 표현하기 위해 사용되는 그 밖의 다른 다양한 정보를 기반으로 하기 때문이다. 상기 방법은 또한, 그룹 내 각각의 광선에 대해 결정된 원점과 방향을 충돌 테스팅에서 사용하는 단계(1620)를 포함할 수 있다.
렌더링 과정의 추적 및 제어에 관련된
프로셋
및 시스템
쉐이더(shader, 1035)가 도 10A에서는 단일 개체로 도시되었지만, 쉐이더는 재료(가령, 피부, 머리카락, 물 등)에 특정적인 것이 일반적이다. 더 일반적으로, 쉐이더는 하나의 장면에서 광선에 의해 충돌되는 기본형의 색상을 결정하기 위해 수행되는 임의의 종류의 절차로 일컬어질 수 있다. 쉐이더는 또한 재료와 연계하여 질감 데이터(texture data)를 액세스할 수도 있으며, 상기 질감 데이터는 재료를 기반으로 변할 것이다. 따라서 쉐이더(1035)는, 서로 다른 광선에 의해 충돌되는 서로 다른 기본형의 색생을 결정하기 위해 각각 사용되는 서로 다른 복수의 프로세스가 주어진 시간 동안 호스트 프로세서(905)에서 실행되는 일반적인 경우를 나타내는 것이다.
또한 쉐이더는 임의의 개수의 표준화된 절차(가령, “조명을 산란시킴(get diffuse lighting)”절차)를 호출하도록 프로그래밍될 수 있다. 이들 표준화된 절차는 쉐이더에 의해 유틸리티처럼 사용될 수 있으며, 상기 쉐이더는 상기 절차로부터 리턴된 결과를 자신의 계산 및 프로세스에서 사용할 수 있다. 추후 설명될 바와 같이, 쉐이더에 의해 사용되는 이들 표준화된 절차, 또는 그 밖의 다른 유틸리티는 본원에서 기재된 적응성 광선 추적 양태를 구현하도록 수정될 수 있다.
샘플 프로세스(1010)는 광선을 충돌 테스팅 자원(1045)을 위한 입력으로서 발산시킨다. 이들 광선은 카메라 위치, 또는 장면 내 임의의 위치로부터 시작될 수 있다. 샘플 프로세스(1010)는 다양한 연산 또는 계산(가령, 현재 장면 품질이나 특정 조명 효과의 해답을 결정하기 위한 연산)을 기반으로 특정 광선을 발생시킬 결정을 할 수 있다. 또한 샘플 프로세스(1010)는 그 밖의 다른 연산을 수행할 수 있는데, 가령, 이웃하는 샘플에 대한 샘플 값의 표준 편차의 계산, 이웃하는 샘플에 대한 샘플 데이터의 필터링, 샘플 값의 조정 및 스케일링, 샘플에 대한 다양한 2D 신호 처리 연산이 있다(그러나 이로 제한되는 것은 아님). 마지막으로, 샘플 프로세스(1010)는 광선 추적 계산의 결과를 디스플레이, 저장 및/또는 그 외 다른 처리를 위한 최종 픽셀 색상 값으로 변환하도록 설정된다. 앞서 설명된 바와 같이, 본 발명의 시스템에서 충돌 테스팅은, GAD 요소와 장면 기본형 중 하나 이상에 대해 광선의 집합(collection)을 병렬로 테스트함으로써 진행되며, 이때, 충돌 테스팅을 수행하는 장치 또는 시스템은 현재 테스트 중인 광선의 혈통(lineage)을 알고 있을 필요는 없고, 실제로, 집합 내 각각의 광선은 선대(ancestry), 원점 및 방향에 있어서 서로 관련이 없을 수 있다. 이러한 테스팅 방식은, 이하에서 설명되겠지만, 광선 추적이 통상적으로 관리유지되는 방식 및 중간 쉐이딩이 인자를 픽셀을 위한 최종 색상 값으로 도출하는 방식에 대한 변형예 및 적응예 더 포함한다.
충돌 테스팅 자원(1045)은 샘플 프로세스(1010) 및/또는 쉐이더(1035)로부터 광선 데이터를 수신하며, 기하학적 형상 프로세스(1020)로부터 기본형 데이터( 및 선택사항으로서 기하학적 형상 가속화 데이터)를 수신한다. 충돌 테스팅 자원(1045)은 어느 광선이 어느 기본형과 충돌하는가를 식별하고, 이러한 광선/기본형 충돌에 대한 표시자를 쉐이더(1035)로 전송한다. 물론, 도 1은 추상화된 것으로, 실제 구현예는 다른 동작을 제공할 수 있다. 예를 들면, 이러한 표시자가 상기 표시자에서 식별된 기본형의 색상을 결정하기 위한 (쉐이더라고 일컬어질 수 있는) 프로세스를 개시하는 드라이버에게 제공될 수 있다.
호스트 프로세스(905)는 또한, 본 발명의 양태에 따른 광선 추적 적응화의 구현예에서 사용될 수 있는 유지관리 프로세서(management process, 1018)를 운영하는 것으로 도시된다. 일부 구현예에서, 유지관리 프로세스(1018)는 그 기능이 쉐이더 프로세서나 그 밖의 다른 프로세서에 포함될 수 있기 때문에, 제공되지 않을 수도 있다. 유지관리 프로세서(1018) 또는 또 다른 적합한 프로세스나 구현예에서 호스트 프로세서(905)는 어느 광선이 충돌 테스팅 자원(1045)에게 제공될 것인지를 결정하거나, 호스트 프로세서(905)와 충돌 테스팅 자원(1045) 간 대역폭이 이러한 모든 광선을 동시에 전송하기에 충분하지 않는 경우, 최소한, 이러한 광선의 순서를 결정한다. 특히, 샘플 프로세스(1010) 및 쉐이더(1035)는 각각 충돌 테스팅 자원(1045)으로 전송되기 위한 광선을 생성할 수 있다. 유지관리 프로세스(1018)는 쉐이더(1035)로부터의 광선들의 충돌 테스팅 자원(1045)으로의 전송 우선순위(따라서 테스팅 우선순위)가 정해질 수 있도록 한다. 예를 들어, 쉐이더(1035)는 광선 그룹을 발생시키고, 샘플 프로세스(1010)가 카메라 광선 그룹을 발생시킬 수 있으며, 쉐이더 광선 그룹이 카메라 광선에 비해 유지관리 프로스세(1018)(또는 또 다른 구현예)에 의해 선호될 것이다. 이러한 선호적 처리에 의해, 장면을 횡단하는 2차 광선(즉, 카메라 광선이 아닌 다른 광선)의 발생 및 테스팅이 보강된다. 일반적으로, 본 발명의 양태에 따르는 광범위한 2차 광선의 발생이 촉진되고 시뮬레이트될 것이다. 또 다른 양태에서, 이러한 카메라 광선에 비한 쉐이더 광선 그룹의 선호적 처리는, 그 밖의 다른 곳에서도(가령, 충돌 테스팅 자원을 위한 수신기 내에서도) 구현될 수 있다.
대부분의 광선 추적 시스템이 동작하는 방식에 관련된 맥락이 다음의 기재를 이해하기 위해 도움이 될 수 있다. 기존에는, 광선 추적을 위한 충돌 테스팅 및 쉐이딩은, 광선과 장면 기본형 간의 식별된 충돌의 트리를 구축함으로써 진행됐으며, 이때 트리는 충돌 점에서의 기본형의 색상을 결정하기 위해 생성된 자손 광선의 체인(chain)을 나타낸다. 예를 들어, 광선이 렌더링되는 2-D 표현의 픽셀을 통해 발산된다. 기본형과의 가장 가까운 충돌이 식별될 때까지, 상기 광선은 장면에서 충돌에 대해 테스팅된다. 그 후, 확산 및 반사 조명 환경을 샘플링하기 위해, 또는 알려진 광원이 또 다른 물체에 의해 가려지는지(occlusion), 그 결과로, 충돌 점이 상기 물체의 그림자 내에 있는지의 여부를 결정하기 위해, 또는 둘 모두를 위해 자손 광선이 발생된다. 이들 광선 중 일부(가령, 확산 및 반사 조명 자손 광선)는 그들 자체가 다른 물체와 충돌할 수 있으며, 그 후, 또 다른 자손 광선을 발생시킬 수 있다.
다시 말하자면, 많은 경우에서, 기본형을 위한 쉐이더는, 장면 내 또 다른 기본형이나 광원에 대한 추가적인 쉐이딩 계산의 결과로부터 얻어져야 하는 정보 없이, 충돌된 기본형의 색상을 결정할 수 없으며, 상기 추가적인 쉐이딩 계산은 상기 또 다른 기본형 및 광원을 식별하기 위한 추가적인 충돌 테스팅을 포함한다.
이러한 프로세스는 보통 각각의 발생된 광선에 대해, 광선이 장면을 떠나거나 광원에 도달할 때까지 계속된다. 광원에 도달하는 광선들에 대하여, 상기 광원이 샘플링되어 상기 광원으로부터의 빛의 색상을 결정할 수 있고, 그 후, 광선의 색상이 결정된다. 그 후, 중간 충돌의 체인이 회귀되어, 픽셀로부터 원래 발산된 광선에 도달할 때까지, 각각의 연결점에서, 체인의 다음 기본형의 쉐이딩으로부터의 결과를 이용하여 광선의 현재 색상이 다음 광선의 색상을 결정할 수 있다. 그 후, 상기 픽셀의 색상에 대한 상기 광선의 기여자(contribution)가 결정될 수 있다. 각각의 쉐이딩 단계에서, 들어오는 빛의 색상을 기술하는 벡터에 쉐이딩 결과값이 곱해져서, 트리에서 다음 번 충돌에서 사용되기 위해 나가는 빛의 색상을 결정할 수 있다.
이러한 방법에서는 트리 내 각각의 노드에 대한 쉐이딩 계산의 종결 동안 상기 트리가 회귀될 수 있도록, 트리 내 광선의 각각의 체인에 포함되어 있는 모든 중간 충돌을 저장할 필요가 있다. 예를 들어, 충돌된 기본형과 연계된 데이터가 상기 기본형이 거칠고 붉은 표면을 갖는다고 나타낼 수 있으며, 쉐이더(1035)(또는 이들 쉐이더들 간에서 개시되는 쉐이더 프로세스)가 상기 데이터를 액세스한다. 그러나 쉐이더(1035)는 상기 기본형으로 입사되는 빛의 색상에 대한 정보를 갖지 않고, 상기 쉐이더(1035)는, 예를 들어 확산과 반사 광을 결정하기 위한 추가적인 충돌이 이뤄지기 전까지는, 상기 기본형과 충돌하는 광선에 대해 상기 기본형이 어떠한 색상이어야 할지를 결정할 수 없을 것이다.
또 다른 접근법에 따르면, 각각의 충돌이 다른 충돌로부터 독립적으로 구해질 수 있으며, 각각의 충돌에서, 쉐이딩 계산의 결과가 곱해지기 보다는 더해지는 것으로 고려될 수 있다. 바람직한 양태에서, 중간 쉐이딩 결과가 더해지도록 하기 위한 방법은 색상 감쇠 벡터(color attenuation vector)를 운반하는 과정을 포함한다. 이때 샘플 프로세스(1010) 또는 쉐이더(1035)에 의해 각각의 광선이 발산된다. 이 감쇠 벡터는 각각의 충돌된 기본형이, 하나 이상의 소스로부터 광선과 기본형의 충돌 점에 도달하는 광에 어떤 영향을 미치는가를 추적한다.
따라서 광선이 기여(contribute)하는 샘플 원점과 색상 감쇠 벡터를 포함하는 각각의 광선에 대해 광선 데이터 구조가 제공된다. 이러한 정보를 이용하여, 충돌 테스트 동안 임의의 중간 점에서, 상기 광선이 어느 픽셀에 기여하는가와 앞선 충돌이 상기 광선의 색상에 어떠한 영향을 미쳤는가가 판단될 수 있다. (이는 장면 내에서 빛이 실제로 전파되는 방식 및 광선/기본형 충돌이 이러한 빛에 어떻게 영향을 미치는가의 반대 순으로 이뤄진다.)
이러한 시스템에서, 샘플 프로세스(1010)는 현재 축적된 상태의 픽셀의 색상을 나타내는 샘플 버퍼(1011)(또는 복수 샘플 버퍼)를 유지관리할 수 있다.(즉, 각각의 자손 광선이 끝날 때, 트리의 상부로 전파되지 않고, 그 기여자가 샘플 버퍼에서 개별적으로 반사된다.) 또한 샘플 프로세스(1010)는 장면의 렌더링 동안, 이동 중인 광선의 상태뿐 아니라, 주어진 시점에서 쉐이더(1035)로부터 수신된 픽셀 색상에 대한 정보까지 유지관리할 수 있다.
도 17은 광선을 표현하는 데이터 구조(1700)의 예를 도시하며, 상기 데이터 구조의 성분(1705, 1710, 1715, 1720)은 샘플 식별자(1805), 광선 방향(1710), 광선 원점(1715), 색상 감쇠 벡터(1720) 및 가중치(1725)를 포함한다.
적정한 예를 들자면, 색상 감쇠 벡터는 광선 쉐이딩 동안 색상을 표현하기 위해 사용되는 색상 기반(color basis)에서 순수 백색으로부터의 감쇠 정도로서 표현될 수 있다. 이때, 상기 색상 기반에서 숫자는, 카메라로부터의 현재 광선까지의 광선의 경로가, 상기 경로를 따라 이동하는 광선의 색상에 미치는 영향을 결정하기 위한 사용될 수 있는 관계를 갖는다. 이러한 색상 기반은 RGB, 또는 그 밖의 다른 임의의 유용한 또는 바람직한 기반일 수 있다. 예를 들어, RGB의 예를 들어 보면, 순수 백색은 [1, 1, 1]로 표현될 수 있으며, 사용되는 계산 방식의 정확도를 반영하기 위해 복수의 0을 포함할 수도 있다. RGB는 잘 알려진 색상 기반이기 때문에, 일부 예와 양태를 설명하기 위해 사용될 것이지만 어떠한 양태로 RGB의 사용으로 제한되는 것은 아니며, 가산(additive) 및 감산(subtractive) 색상 기반을 포함하여 그 밖의 다른 임의의 색상 기반이 사용될 수 있다.
도 18은 광선 추적 동안 이러한 색상 벡터가 사용될 수 있는 방식을 설명하기 위해 사용된다. 도 18의 요소는 카메라(1805)와, 색상 필터(1820), 광원(1840 및 1830)을 포함한다. 물리적 세계에서, 광원(1840 및 1830)으로부터 발산되는 빛이 색상 필터(1820)에 도달하고, 상기 빛은 색상 필터(1820)에 의해 필터링되어, 필터링된 빛 중 일부가 카메라(1805)로 도달한다(이 예에서는 명료성을 위해 카메라(1805)와 기본형(1820) 간의 이미지 평면이 발산된다). 카메라(1805)가 충돌 테스팅을 위해 광선(1810)을 발산하도록 광선 추적은 역으로 이뤄진다. 광선(1810)이 기본형(1815)에서 색상 필터(1820)와 충돌한다. 대부분의 종래의 광선 추적은, 이러한 충돌을 충돌 트리 내 노드로 주해함(annotating)으로써 이뤄진다. 그 후, 프로그램 코드(가령, 쉐이더)에 의해 자손 광선(1825 및 1835)이 광원(1840 및 1830)의 색상을 테스트하기 위해 발산되고, 이들 광원의 가려짐 여부(occlusion)가 결정될 수 있다(이 예시는 단순화되었기 때문에, 일반적으로 발생하는 다수의 중간 광선/기본형 충돌은 생략되었다). RGB 색상 기반 예에서, 자손 광선(1825 및 1835)이 각각의 광원(1830 및 1840)에 도달하면, 각각의 광원의 색상(가령, 광원(1840)의 색상은 청색이고 광원(1830)의 색상은 적색이라고 말할 수 있다)이 트리 위쪽으로, 광선(1810)과 기본형(1815)의 충돌을 표현하는 노드까지로 전파된다. 그 후, 각각의 광원(1840 및 1830)에 광선(1810)과 기본형(1815)의 충돌이 미치는 영향이 결정되고, 그 후, 이에 따라서 카메라(1805)로 다시 전파되는 빛의 색상이 결정된다. 색상 필터(1820)가 청록색(cyan)이라고 가정하면, 상기 색상 필터(1820)는 적색 광을 걸러낼 것이고, 가능한 감소된 밝기로 청색 광을 허용할 것이다.
본 발명의 양태에서, 카메라(1805)는 광선(1810)을 발산하고, 상기 광선(1810)은 색상 감쇠 벡터와 연계되며, 상기 색상 감쇠 벡터는 카메라(1805)로부터의 발산 후 순수 백색(가령, [111])으로서 초기화될 수 있다. 광선(1810)이 기본형(1815)과 충돌한다. 다시, 색상 필터(1820)가 청록색이라고 가정하면, 상기 색상 필터(1820)는 물리적으로 앞서 언급된 바와 동일하게 기능할 것이다. 그러나 본 발명의 양태에서, 색상 필터(1820)가 기본형(1815)에 도달하는 빛의 색상에 어떠한 영향을 미칠지를 (상기 기본형(1815)에서) 미리 판단하고, 이러한 영향은, 그 밖의 다른 이전 광선/기본형 충돌의 영향과 함께, 상기 광선이 “지니는(carry)”색상 감쇠 벡터로 표현된다. 특히, 이 예시에서, 색상 필터(1820)가 청록색이며, 광선(1810)의 색상 감쇠 벡터가 백색이어서, 색상 필터(1820)가 광선(1810)에 미치는 영향은 적색 광의 제거(filtering out)일 것이다. 이 영향은, 적색 성분을 감소시킴으로써, 감쇠 벡터에 기록된다. 예를 들어, RGB 기반(Red Green Blue)에서, 광선(1810)의 감쇠 벡터는 [111]로 시작할 수 있다. 이러한 벡터에 미치는 기본형(1815)의 영향은 적색 광의 제거를 반영하는 [011]로 표현될 수 있다.
그 후 이러한 업데이트된 색상 감쇠 벡터가 자손 광선(1825, 1835)과 연계된다. 다시, 자손 광선(1825 및 1835)은 각각 광원(1830 및 1840)과 충돌한다. 광원(1830 및 1840)의 색상은 적색과 청색이라고 가정된다. 자손 광선(1825 및 1835)의 감쇠 벡터는, 적색이 제거되도록, 그들의 선대(예를 들어, 카메라 광선에서 현재 위치까지의 경로)가 카메라 광에 미칠 영향을 나타낸다. 따라서 광원(1830)은 카메라(1805)에서의 빛의 색상에 어떠한 기여자도 갖지 않는다고 결정되고, 반면에, 광원(1840)은 청색이므로, 카메라(1805)에 도달하는 빛의 색상은 청색이라고 결정될 것이다. 이러한 결정은 샘플 버퍼(가령, 스크린 버퍼(111))에 색상을 직접 기입함으로써 이뤄질 수 있다. 다르게 말하자면, 이 양태에서, 광선은 빛의 서로 다른 색상의 서로 다른 감쇠를 서로 다른 비율로 표현하는 채널로서 보여질 수 있다.
또 다른 예에서, 광원(1840 및 1830) 모두가 백색이라고 가정하면, 자손 광선(1825 및 1835)은, 선대 경로에 의해 적색 광의 필터링이 야기된다는 정보(감쇠 벡터[011])를 갖고, 그들 각각의 광원에 “도달”할 것이다. 따라서 광원(1840 및 1830)에 대한 장면(즉, 픽셀) 빛 에너지에 대한 기여자(contribution)는 청록색일 것이며, 이러한 기여자는 샘플 버퍼(211)로 다시 기록될 것이다(각각의 자손 광선(1825 및 1835)에 대하여 스크린 픽셀에 대한 각각의 광선의 기여자를 특정하는 정보도 역시 존재한다는 사실에 의해 보조된다).
더 복잡하고 사실적인 상황에서, 충돌에 관여하는 각각의 광선의 색상 감쇠 벡터에 영향을 미치는 복수의 중간 광선/기본형 충돌이 존재할 수 있다. 그러나 각각의 광선에 대한 색상 감쇠 벡터가 광선의 경로가 상기 경로를 이동할 수 있는 광빛의 색상에 어떤 영향을 미칠 수 있는가에 대한 히스토리(history)를 포함할 수 있다.
본 발명에 따르는 광선 추적의 다양한 변형예가 빛에너지 설명의 이러한 형태를 사용한다. 이들 예시 및 구현예 중 일부가 복수의 샘플 버퍼를 사용할 수 있으며, 이러한 샘플 버퍼 각각에서 광선이 따로 따로 보아질 수 있으며, 샘플 버퍼 간에서 이동될 수 있다. 앞서 언급된 바와 같이, 특정 유형의 광선 추적 또는 그 밖의 다른 환경을 위해 유용하거나 바람직할 임의의 색상 기반이 사용될 수 있다.
이들 양태에서 어떻게 빛에너지가 설명되는가를 기술하는 첫 번째 예에서, 2개의 광원(하나는 적색과 다른 하나는 청색)을 갖는 하나의 장면에서 청록 색상 필터가 카메라 광선과 충돌되었다. 청록 색상 필터는 자신에게 도달하는 적색 광을 걸러내 버린다고 알려져 있기 때문에, 장면의 광원의 색상에 관련된 정보뿐 아니라 (색상 필터(1820)의) 기본형(1815)에 미치는 영향까지 갖는 프로세스는, 중간 물체에 의해 적색 광이 가려지는지의 여부를 결정하여, 기본형(1815)이 적색 광의 그림자 내에 있는지의 여부를 결정하기 위한 자손 광선을 발생시키지 않도록 결정할 수 있다. 왜냐하면, 기본형(1815)이 가려지는지의 여부에 상관없이, 적색 광은 어떤 식으로든 대부분 제거될 것이기 때문이다. 따라서 임계치보다 낮다고 결정될 수 있는 최종 기여자를 갖는 광선은 발생시키지 않음으로써, 충돌 테스팅을 위해 발생되는 광선의 양이 감소될 수 있다. 이러한 상황의 배경은 단순화된 광원 오클루전 상황에 대부분 적용될 수 있다.
물론, 더 복잡한 재료에서, 기본형(1815)으로부터 적색 광이 나오도록 하는 약간의 굴절과 반사가 존재할 수 있으며, 그 결과로 가림 여부(occlusion)가 약간의 관심의 대상이 될 수도 있다. 이러한 상황의 존재 여부는, 기본형(1815)에 대한 쉐이더에 의해 판단되며, 이러한 예시적 양태에서, 상기 쉐이더는 각각의 지시되는 상황(가령, 반사 및 굴절)에 대해 자손 광선을 생성하고, 이러한 상황의 각각의 강도 또는 중요도를 각각의 자손 광선에 가중치로서 기록하기도 한다. 예를 들어, 색상 필터(1820)로부터의 반사가 매우 경미한 경우, 반사에 대한 자손 광선은 광선(1810)과 연계된 가중치보다 훨씬 낮은 가중치를 갖고 발산될 수 있다. (반사 대 확산 등의 양태가 이와 유사하게 다뤄질 수 있다.) 따라서 가중치는 주어진 광선의 특정 기본형의 쉐이딩에 있어서의 상대적 중요도뿐 아니라 상기 광선이 궁극적으로 있게 된 카레라 광선(그리고 상기 광선이 참조하게 될 샘플)에 있어서의 상대적 중요도도 나타낸다. 따라서 가중치를 이용하여 광선 추적의 지능적인 실시간 적응화가 구현될 수 있다.
도 2의 맥락에서, 충돌 테스트 자원(250)은 광선(1810)과 기본형(1815) 간의 식별된 충돌을 리턴하며, 기본형(1815)에 대한 쉐이더는 자손 광선을 발생시키고, 기본형이 상기 기본형에 도달할 빛에 비치는 영향에 대한 각각의 자손 광선의 상대적 기여자를 기술한다. 이들 상대적 기여자는, 광선(1810)의 가중치를 기반으로 각각의 자손 광선에게 가중치를 제공함으로써 표현될 수 있다. 또한 바람직한 양태에서, 각각의 자손 광선의 부모 광선의 영향이 각각의 자손의 가중치로 표현될 수 있다. 예를 들어, 자손 광선의 가중치의 합계는 광선(1810)의 가중치와 거의 동일하도록 광선(1810)의 가중치가 자손 광선들 간에 할당될 수 있다. 그 후, 각각의 자손 광선은 충돌 테스트될 수 있으며, 쉐이딩/가중치 프로세스가 반복된다.
도 19는 물체(1920)와 기본형(1915)에서 충돌하는 광선(1910)을 발산하는 카메라(1905)의 단순화된 예를 도시한다. 선택되어야 할 광선이 비율조정 방식(scalable manner) 및 일반 방식으로 다뤄질 수 있는지의 여부에 대한 결정이 이뤄진다.
기본형(1915)과 연계된 쉐이더는 자손 광선(1930a-1930e)을 발산하도록 결정한다. 기본형(1915)에 대한 쉐이더는 최소한, 각각의 자손 광선(1930a-1930e)에 대해 상대 기여자를 나타낼 것이다. 또한 각각의 자손 광선(1930a-1930e)의 상대 기여자를 효과적으로 설명하기 위해, 그리고 샘플에 기여할 광선들 간의 고정된 에너지 비율을 유지하기 위해, 상기 광선(1910)과 연계된 가중치가 각각의 자손 광선(1930a-1930e)에 대한 각각의 가중치를 결정하기 위해 사용된다. 이 예에서 발산되는 복수의 광선은 프레넬 식(fresnel term)으로 계산될 수 있다. 가중치 분배의 예를 들자면, 자손 광선(1930a-1930e)의 가중치들의 합이 광선(1910)의 가중치와 거의 동일하도록 광선(1910)의 가중치가 보존된다. 이러한 추가적인 가중치 수정예는 쉐이더의 일부분, 또는 쉐이더로부터 입력을 수신하는 프로세스로 고려될 수 있다. 이러한 가중치들의 합산은 반드시 필요한 것은 아니며, 쉐이더는 가중치를 다양한 방식으로 할당할 수 있다. 즉, 쉐이딩되는 광선의 가중치는 반사되지 않거나, 그 밖의 다른 방식으로 자손 광선에게 완전히 전파되지 않을 수 있으며, 및/또는 샘플에 에너지로 기여되지 않을 수 있다.
특정 샘플로부터 발산되는 광선의 가중치는 샘플 자체와 연계되는 가중치이거나, 상기 샘플 연계 가중치로 합산되거나, 또는 그 밖의 다른 방식으로 관련될 수 있다. 샘플과 관련된 가중치는 특정 샘플/픽셀에 대해 축적되도록 남겨진 빛에너지의 크기를 추적하도록 사용될 수 있다. 예를 들어, 10개의 카메라 광선이 하나의 샘플에 대해 발산된 경우, 발산 기본형에 대한 색상 정보 또는 빛 에너지의 60%에 대해 설명하는 광을 수신한 후, 나머지 샘플 가중치는 약분되어 감소될 수 있다. 카메라 광선의 가중치는, 복잡한 장면을 통해 선대가 광선 추적될 때, 분산될 수 있으며, 그 결과로, 본래 발산된 카메라 광선의 개수보다 더 많은 수의 광선이상기 샘플에 기여할 수 있다.
충돌 테스팅 자원(1045)을 충돌 테스트하기 위해 자손 광선을 제공하기 전에, 모든 자손 광선(1930a-1930e)이 충돌 테스트되어야 하는지에 대한 결정이 이뤄질 수 있다.
하나의 예시적 양태에서, 각각의 광선과 연계된 가중치가, 해당 광선이 충돌 테스트되어야 하는가의 여부를 결정할 때 사용된다. 예를 들어, 상기 양태에 따르는 렌더링 시스템에 의해, 목표 우선순위(가령, 장면 품질, 렌더링 속도(가령, 희망 프레임 레이트))의 선택이 가능해질 수 있다. 광선/기본형 충돌 프로세싱을 위한 가중치 임계값이 설정될 수 있으며, 우선순위 목표의 조정에서 주기적으로 수정될 수 있다. 상기 임계값은 주어진 자손 광선이 충돌 테스트받아야 하는지, 아닌지를 결정하기 위해 사용될 수 있다.
예를 들어, 렌더링 속도가 우선순위화되는 경우, 가능한 가장 바람직함 품질의 장면을 얻는 것보다 희망 프레임 레이트의 유지가 더 중요하게 고려되지만, 프레임 레이트 유지의 매개변수 내에서 가능한 나은 품질을 얻도록 하는 것이 여전히 바람직하다. 이러한 상황에서, 주어진 시간프레임(timeframe) 내에서 처리되기 위한 더 많은 광선이 존재할 수 있으며, 따라서 장면 렌더링에 비교적 낮은 중요도를 갖는 광선에 프로세싱 자원을 사용하는 것이 피해지는 것이 바람직할 수 있으며, 일부 예에서는 이러한 중요도가 각각의 광선과 연계된 각각의 가중치에 의해 측정된다.
도 19의 예를 다시 참조하면, 상기 광선(1930a-1930e)을 나타내는 화살표의 각각의 길이가, 상기 광선과 연계된 가중치의 값의 상대 크기를 나타낸다고 가정하면, 광선(1930e)은 추가적인 프로세싱을 하기엔 너무 작은 가중치를 갖는다고 판단될 수 있으며, 상기 광선은 충돌 테스트를 위해 처리되기 보다는 포기될 수 있다고 결정될 수 있다. 이러한 예는 렌더링 동안 기본형(1915)에 대한 쉐이더가 우선수위를 나타내는 정보(가령, 렌더링 속도)를 수신하지 않고, 이러한 고려사항 없이 실행될 수 있는 상황이다. 그러나 쉐이더는 쉐이더에 의해 얼마나 많은 광선이 개시되어야 하는지를 결정(개시에 반대로서, 그 후, 상기 광선들을 도태(culling)시키는지를 결정)하기 위해 사용될 수 있는 가중치 정보의 입력을 허용하도록 쓰여질 수 있다.
또한 쉐이딩 알고리즘은 부모 광선의 가중치에 따라 선택될 수 있다. (가령, 자손 광선(1930a-1930e)의 발산을 야기하는 쉐이딩 알고리즘은 부모 광선(1910)의 가중치를 기반으로 선택될 수 있다.) 부모 광선(1910)이 비교적 높은 가중치를 갖는 경우, 상기 광선은 장면 렌더링에서 비교적 중요하다고 추정될 수 있다. 주어진 광선에 대한 가중치는 통계적 샘플링, 또는 광선 가중치의 추적을 토대로 판단될 수 있다. 예를 들어, 샘플 프로세스(210)는 예를 들어, 이러한 가중치의 이동 평균, 또는 얼마나 많은 광선이 특정 가중치 계급 내에 있는지에 대한 저장공간(bin), 또는 광선 가중치의 분포를 이해하기 위한 그 밖의 다른 임의의 허용될 수 있는 수단을 유지함으로써, 현재 충돌 중인 가중치의 분포를 추적할 수 있다.
예를 들어, (아마도 정비례 관계를 갖는)계산 비용과 결과의 품질의 범위를 갖는 몇 개의 알고리즘이 특정 조명 기능을 수행하기 위해 이용가능하며, 부모 광선(1910)이 비교적 높은 가중치를 갖는 경우, 연산적으로 더 높은 비용의, 그러나, 더 바람직한 품질의 알고리즘이 기본형을 쉐이딩하기 위해 선택될 수 있다.
예를 들어, 다른 상황에서, 충돌되는 특정 기본형의 색상을 결정할 때, 복수의 서로 다른 조명 효과(가령, 정반사 조명, 반사 및 굴절)가 고려될 수 있다. 이러한 상황에서, 하나 이상의 유형의 자손 광선이 각각의 조명 효과에 대해 생성될 수 있다. 각각의 자손 광선은 관련 가중치를 가질 것이며, 그 값은 최소한 자손 광선의 부모 광선(가령 광선(1910))의 가중치를 기초로 결정될 것이다. 또한 모든 자손 광선의 가중치의 합계가 광선(306)의 가중치와 거의 동일하여, 광선(306)의 가중치가 보존될 수 있다. 광선(306)의 가중치가 자손 광선 간에서 분배되는 방식은 다양할 수 있다.
예를 들어, 쉐이더가 정반사 빛이 기본형에서(1915)에서 총 빛 효과의 20%이고, 확산 조명이 50%이며, 굴절이 나머지 30%에 해당한다고 판단한 경우, 각각의 효과(정반사, 확산 및 굴절)에 대해 발산되는 자손 광선은 그룹으로 광선(1910)의 가중치의 약 20%, 50% 및 30%를 할당받을 수 있다. 각각의 광선들 중에, 그룹에 할당된 광선이 동등하게 추가로 분할될 수 있다. 그 밖의 다른 분할 방식도 가능하다. 예를 들면, 확산 조명 성면의 일부 광선에 대한 가중치는 나머지 확산 조명 광선보다 더 크게 정해질 수 있다. 통계적으로, 의사무작위 및/또는 무작위 가중치 분포가 구현될 수 있다. 이러한 쉐이더가 빛을 발산할 뿐 아니라 상호작용하는 표면의 기본형을 위한 것인 경우, 부모 광선 가중치의 일부 부분이 더해지거나 샘플에서 결정된 것으로 설명될 수 있다. 다시 말하자면, 기본형이 빛을 발산하기 때문에, 부모 광선에서 전파되는 빛 에너지의 일부, 또는 전부는 상기 발산으로 인한 것이거나, 동시에 샘플로 추가될 수 있다는 것이다. 이러한 추가는 색상 및 상기 색상에 의해 표현되는 에너지의 상대 크기를 추적하는 과정뿐 아니라, 샘플의 현재 색상을 추가될 빛에너지와 혼합하여, 현재 업데이트된 색상에 도달하는 과정까지 포함한다.
광선과 연계된 가중치의 할당 및 해석을 조절함으로써, 렌더링 시스템(1000)은 광선 추적된 이미지의 품질과 속도에 관련된 광범위한 적응성 광선 추적 동작을 가능하게 하며, 그 결과로, 렌더링 시스템(1000)은 주관적이고 객관적인 장면 품질을 효과적으로 유지하는 방식으로 시스템 자원을 사용할 수 있다. 또한 렌더링 시스템(1000)은 특정 목표를 유지(가령, 광선 추적을 위한 이용가능한 자원이 변동될 때 최소 프레임 레이트를 유지)하도록 광선 추적 동작의 적응화를 구현할 수 있다.
기재된 양태의 범위 내의 또 다른 적응화로는 이미 발생된 광선의 중요도를 희석하거나 집중시키는 것이 있다. 예를 들면, 하나의 픽셀로 빛 에너지를 기여시킬 10개의 카메라 광선이 발생될 수 있으며, 각각의 광선은 규칙적인 간격을 두고 떨어져 있는 장면의 샘플 부분들로 향해질 수 있다. 이들 광선 중 몇 개의 광선이 큰 기본형(가령, 벽)으로 직접 향하는 경우, 카메라 광선 중 일부는 불필요해질 수 있다. 일반적으로 카메라 광선에 대한 가중치는 발산되는 광선의 개수의 관점에서 결정되기 때문에, 이들 광선 중 일부는 취소되는 것이 바람직하고, 나머지 광선의 효과가 이에 따라 증가되어야 하는 것이 바람직하다. 이러한 증가는 이미 완료된 카메라 광선의 색상 기여자의 가중치를 증가시킴으로써 이뤄질 수 있으며, 나머지 광선이 완료될 때, 이들은 또한 그들 본래의 샘플 가중치보다 더 가중치가 부여될 수 있다. 아니면, 광선이 저장 영역에 있는 것으로 식별되고, 그들의 가중치가 나머지 카메라 광선 중 일부의 취소분을 차지하도록 이에 상응하여 증가될 수 있다. 이러한 집중화 기능은, 복수의 유사한 광선이 발생되었지만, 결과적으로 시간 및/또는 그 밖의 다른 자원이 이용가능한 범위 내에서 받아들일 만한 렌더링 품질을 도출하기 위해 더 적은 수의 광선이 필요하다는 결정이 도출되는 어떠한 상황에서도 적용될 수 있다.
이러한 기능은 또한, 샘플의 색상을 정제(refine)하기 위해 더 많은 광선이 발산되어야 한다고 결정되는 반대의 경우에서도 작용될 수 있다. 이러한 결정은 예상보다 더 많은 프로세싱 자원이 이용가능하다고 식별된 때, 또는 복잡한 장면이 렌더링되도록 주어진 경우 정확도가 불충분하다고 결론 내려진 때(가령, 유사한 광선으로부터 리턴된 색상들 간의 변차가 너무 큰 경우)에 도출될 수 있다. 이러한 경우, 주어진 샘플로부터 더 많은 광선이 발산될 수 있으며, 상기 샘플에 이미 기여된 광선의 색상에 대한 가중치는 감소될 수 있다. 충돌 테스트되는 광선에 대한 가중치가 저장된 곳에서 액세스가능한 경우, 조정될 수 있다. 또는 각각의 광선이 프로세싱을 완료하고 색상 정보를 리턴한 후, 광선 가중치의 적정한 조정이 이뤄질 수 있다. 따라서 이러한 양태에서, 빛 에너지는 샘플을 참조하는 일부 광선에 대해 상기 샘플에 이미 기여할 수 있으며(가령, 발산 쉐이더에 만나는 것에 따라), 상기 광선이 기여하는 상기 빛 에너지의 상대적 중요도가, 이러한 기여 후에, 조정되어, 상기 샘플에 영향을 미치는 광선 추적에 대한 적응화를 구현할 수 있다.
앞서 언급된 바와 같이, 쉐이더가 자손 광선에게, 쉐이딩되는 광선에 의해 표현될 수 있는 빛 에너지의 크기와 그 합이 동일한 빛 에너지를 전파하거나 기여하지 않을 수 있도록, 광선 가중치는 엄격하게 보존될 필요는 없다. 따라서 일부 예에서 광선 가중치가 보존되거나 또는 거의 보존될 수 있을 지라도, 구현예는 이러한 기능을 반드시 제공할 필요는 없으며, 일부 경우에서는 이러한 기능을 제공하지 않음으로써, 관련 계산이 피해질 수 있다.
광선 추적 동안의 광선 추적 적응가능성의 또 하나의 예가 도 20을 참조하여 제공된다. 도 20은 광선(2010) 및 광선(2011)의 공급원(2005)을 도시한다. 광선(2010)은 물체(2025)와 (식별되지 않은 기본형에서) 직접 충돌하며, 광선(2011)은 기본형(2015)에서 물체(2020)와 직접 충돌한다. 앞서 언급된 바와 같이, 각각의 충돌은 쉐이더 프로세서에 의해 나타내어질 것이다. 광선(2010)은 물체(2025)와 직접 충돌하며, 상기 물체에 대한 쉐이더(또는 더 구체적으로는 충돌된 기본형에서의 물체(2025)의 표면에 대한 쉐이더)가 실행되고, 광원(2050)으로부터 정반사 조명을 테스트를 위한 광선(2055)을 발생시킬 수 있다(가령, 물체(2025)의 표면이 다소 광택이 있을 수 있다). 이러한 광선/기본형 충돌에 대한 쉐이더는 또한 또 다른 광선을 발생시키거나, 확산 조명 등의 또 다른 계산을 요청할 수 있다. 더 복잡한 표면은 추가적인 광선의 생성을 필요로 하는 추가적인 양태(가령, 표면 밑 산란)에 대해 발생되는 추가적인 계산을 가질 수 있다. 설명된 적응가능성 양태에 대한 중요성은 광선/기본형(2015)의 충돌에 대해 더 설명한 후 기재할 것이다.
광선(2011)은 물체(2020)와 기본형(2015)에서 충돌하며, 이로 인해서 기본형(2015)에 대한 쉐이더가 실행될 수 있다. 이 예에서, 물체(2020)는 유리로 구성된다고 가정하면, 물체(2020)에 대한 쉐이더는 추적을 위한 투과 광선(2030)뿐 아니라 반사 광선(2031)까지 발생시킬 것이다. 이 예에서, 상기 쉐이더는 광선(2030)과 광선(2031) 각각에 대한 가중치를 계산함에 있어, 광선(2011)과 연계된 가중치가 사용되도록 한다. 광선(2011)이 물체(2020)의 표면에 법선으로 직접 입사된다고 가정되면, 상기 쉐이더는 반사 광선(2031)보다 투과 광선(2030)에 더 높은 가중치를 할당할 것이다. 그 후, 반사 광선(2031)은 추적될 것이며, 상기 광선(2031)이 물체(2025)와 후면에서 충돌함이 판단될 것이다. 이제, 광선(2011)의 가중치가 (예를 들어) 광선(2031)과 광선(2030)간에 분할되기 때문에, 광선(2031)의 가중치는 광선(2010)의 가중치보다 더 작을 것이다(예를 들어, 광선(2011)과 광선(2010)이 카메라 광선인 경우, 일반적으로 이에 해당한다). 이러한 상황의 물리적 영향은, 물체(2020)에서 물체(2025)의 후면의 가벼운 반사가 존재하며, 광선(2010)에 의해 충될는 물체(2025)의 일부분은 광선 공급원(2005)으로부터 직접 보여질 수 있다는 것이다.
따라서 광선(2010)/물체(2025) 충돌에 대한 쉐이더 프로세서는 광선(2010)과 연계된 가중치로의 액세스를 가질 수 있으며, 이 예시에서, 연계된 가중치를 토대로, 정확한 쉐이딩이 요구됨이 판단될 수 있고, 따라서, 상기 쉐이더 프로세서는 물체의 색상에 영향을 미치는 조명의 더 많은 양태가 정확하게 판단되도록 동작될 것이다. 이와 달리, 물체(2025)와 광선(2031)의 충돌에 대한 쉐이더(동일한 쉐이더 프로세스의 또 다른 개시일 수 있다)는 광선(2031)이 훨씬 더 낮은 가중치와 연계되어 있음을 알 것이고, 이에 따라서, 확산 조명 호출만 수행할 것이고, 연산적으로 고비용의 광선 추적은 완전히 무시할 것이다.
또는, 들어오는 광선의 가중치에 관계없이 각각의 쉐이더 프로세스가 동일하게 동작하고, 그 후, 유지관리 프로세스(130)가 각각의 쉐이더 프로세스로부터 출력된 광선과 연계된 가중치를 기초로 광선을 도태시킬 수 있다. 유지관리 프로세스(130) 구현예에서의 각각의 쉐이더 프로세서로부터 출력된 가중치의 상대 크기가 여전히 각각의 부모 광선(2010 및 2031)의 가중치가 서로 상이하고, 광선(2010)이 더 높은 가중치를 가짐을 반영할 것이기 때문에, 어느 구현예이든, 본 발명의 양태에 따르는 적응성을 제공할 수 있다. 그러나 이들 예시적 구현예의 양태에서 주의할 점은, 쉐이더 프로세서에 의해, 또는 유지관리 프로세서에 의해 장면에 대한 광선의 중요도의 측정치가 참조되어, 상기 광선에 의해 충돌되는 점에서의 색상을 정확하게 결정하기 위해 소비되는 노력을 수정할 수 있다는 것이다. 편리한 구현예는 광선을 표현하는 데이터 구조(도 17) 내에 포함된 가중치를 이용하는 것이며, 여기서 부모 광선의 상대적 중요도의 계속성을 유지하기 위해, 상기 광선은 자손 광선(가령, 자손 반사 및 자손 투과 광선)들로 분할된다.
도 6에서 도시된 다음의 예시적 방법(600)은, 예를 들어 광선 가중치를 토대로 광선 도태, 희석, 집중 및 쉐이딩 알고리즘의 선택을 포함하는 앞서 대강 설명된 예시적 적응화를 요약한 것이다. 이러한 양태의 다중 구현이 도 21의 방법에서 도시되어 있으며, 이들 중 일부는 고립되어, 또는 조합되어 사용될 수 있다.
방법(2100)은 샘플로부터 카메라 광선을 발산하는 단계(2110)와, 충돌 테스팅을 위해 이들 광선을 제공하는 단계(2115)를 포함한다. 그 후, 방법(2100)은 식별된 충돌의 표시자를 수신하는 단계(2120)와, 수신 후, 충돌되는 기본형이나 그 밖의 다른 요소(가령 빛)가 발산 요소(emissive element)인지의 여부를 결정하는 단계(2130)와, 발산요소라고 결정된 경우 색상 기여자를 충돌에서 식별된 광선에 의해 식별되는 샘플 버퍼 위치로 기록하는 단계(2135)를 포함한다. 상기 요소가 발산 요소가 아닌 경우, 상기 광선과 연계된 가중치를 부분적으로, 또는 전적으로 기반으로 하여 광선/기본형 충돌을 쉐이딩함에 있어 쉐이더 자원을 이용할 것인가의 여부를 결정하는 단계(2140)를 포함한다. 자원이 사용될 경우, 그 후, 광선 가중치를 기초로 쉐이딩 알고리즘이 선택되며(2155), 이러한 알고리즘의 출력은 추가적인 충돌 테스트를 위해 발산될 자손 광선의 개수의 결정(2165)을 포함할 수 있다. 상기 자손 광선은 추가로 충돌 테스트되기 위해 제공된다(2175). 가능하면 병렬로, 주어진 샘플에 기여하는 충분한 광선이 존재하는가의 여부가 결정될 수 있으며(2160), 충분한 광선이 존재하지 않는다고 결정된 경우, 광선의 이하 충분함(under sufficiency) 또는 이상 충분함(over sufficiency)이 존재하는지의 여부에 따라, 상기 샘플에 기여하는 광선의 개수가 상향 또는 하향 정정된다(2170). 이러한 새로우 카메라 광선이 충돌 테스트를 위해 제공된다(2175).
렌더링 과정(단계(2145))이 불충분한 경우, 쉐이딩 자원을 사용할지의 여부에 대한 결정 및 쉐이딩 알고리즘 선택에서 사용되는 임계값이 업데이트될 수 있으며, 그 결과로, 더 적은 수의 광선이 쉐이딩 및/또는 더 많은 수의 단순화된 쉐이딩 알고리즘이 사용될 수 있다. “이상(over)” 충분함이 존재하는 경우, 임계값은 낮아져서, 더 높은 품질의 쉐이딩 알고리즘 및/또는 더 많은 수의 광선이 쉐이딩되거나 더 많은 자손 광선이 발생될 수 있다.
앞서 설명된 예시 및 양태는, 장면의 렌더링 동안 입도(granular) 수준으로(가령, 이미지 프레임의 시퀀스 내 프레임) 광선 추적을 적응하기 위한 메커니즘을 제공한다. 이러한 적응화는, 기본 목표인지 또는 명시적으로 선택된 목표인지에 관계없이 목표를 조정할 때 이뤄질 수 있다. 장면 렌더링에 대한 광선의 중요도를 결정할 때 사용되기 위한 광선과 연계된 가중치의 사용이 광선 중요도의 입도 결정이 어떻게 이뤄질 수 있는지에 대한 예와, 부모 광선으로부터 자손 광선으로 추적되는 이러한 결정에서 사용되는 정보의 예 등을 제공한다. 그러나 이러한 중요도 추적에 대한 그 밖의 다른 구현예가 제공될 수 있으며, 적응적 광선 추적이 이들 구현예를 기초로 이뤄질 수 있다.
렌더링된 이미지를 얻기 위해, 광선이 (빛의 발산을 야기하는 프로그램 코드와 연계된 임의의 기본형일) 발산 요소와 충돌할 때 이에 반응하여 빛에너지는 궁극적으로 하나의 광선과 연계된 샘플에 기여된다(방법(600)의 단계(630 및 635)를 참조). 따라서 발산 요소는 빛을 반사시킬 수 있는 렌즈, 또는 텔레비전 스크린을 이용한 빛 등의 예를 포함할 수 있으며, 따라서 발산 요소는 완전히 발산형이지 않으며, 복합적인 광 상호작용을 가질 수 있다. 따라서 발산 요소를 위한 쉐이더는, 주어진 광선/기본형 충돌을 쉐이딩할 때, 빛 에너지가 상기 광선과 연계된 샘플로 추가되게 하며, 이때, 상기 빛에너지가 상기 쉐이더의 발산 성분을 나타낸다. 또한 쉐이더는 그 밖의 다른 다양한 타입의 광선을 발산되게 한다. 일부 경우, 원하는 효과에 따라서, 발산 성분 및 그 밖의 다른 광선에 의해 표현되는 빛 에너지는 부모 광선에 의해 표현된 빛에너지의 크기와 유사하거나, 더 크거나 더 작을 수 있다. 샘플 프로세스(110)는 각각의 샘플로 추가되는 빛에너지를 추적하여, 그 결과로, 이미 추가된 빛 에너지의 색상에 대한 새롭게 추가된 빛 에너지의 상대 효과를 결정하기에 충분한 데이터를 유지할 수 있다. 예를 들어, 샘플 프로세스(110)는 빛 에너지의 추가를 추적하는 샘플과 연계되는 가중치를 유지하고, 예를 들어, 이미 추가된 빛에너지에 대한 새로 추가된 빛에너지의 상대적 효과를 결정하도록 참조될 수 있다. (가령, 쉐이딩되는 광선의 발산 성분이 약하고, 반면에 많은 빛에너지가 상기 쉐이딩된 광선과 연계된 샘플에 이미 추가된 경우, 샘플의 색상은 크게 달라지지 않을 것이다.) 다른 예에서, 쉐이더에 의해 광선의 가중치가 예상되는 것보다 더 커질 수 있다: 이러한 경우는 샘플에 대한 상기 광선의 예상된 큰 영향이 의해 나타내어질 것이지만, 광선 가중치 기여자를 구현하기 위한 임의의 명시적 또는 묵시적 요구사항을 위반하지는 않을 것이다.
앞서 상세히 설명된 바와 같이, 광선 중요도를 기반으로 하는, 더 구체적으로는, 광선 가중치를 기반으로 하는 적응화는 쉐이더 프로세스에 의한 광선의 발산 후에 구현될 수 있으며, 그 결과로, 가령, 얼마나 많은 자손 광선이 상기 부모 광선에 대해 발산되어야 하는지를 결정할 때, 쉐이더 프로세스는 쉐이딩되는 주어진 광선의 중요도를 특정하게 인지할 필요가 없다. 종종, 쉐이더는 코드를 복사하기 보다는, 공통의 조명 계산 유틸리티를 호출할 수 있다. 이는 쉐이더의 연결성(portability) 및 모듈성(modularity)을 증가시키기 위해 제공될 수 있다. 예를 들어, 쉐이더는 확산 및 특정 조명 계산을 위해 조명 유틸리티를 호출할 수 있다. 이들 유틸리티는 앞서 언급된 양태에 따른 적응화를 구현할 수 있다. 예를 들어, 이들 유틸리티는 조명 효과를 위해 사용될 알고리즘의 유형을 결정할 때, 광선 가중치 정보를 사용할 수 있으며, 더 중요한 광선에 대해 더 정확하지만, 연산적으로 더 비싼 효과를 사용할 수도 있다. 유틸리티를 호출하는 쉐이더는 조명 정보가 어떻게 계산되는지를 알 필요는 없으며, 간단하게 이 유틸리티를 사용할 수 있다.
또 다른 변형 구현예에는 쉐이더 프로세스 출력을 쉐이더 프로세스가 충돌 테스트할 자손 광선으로서 수신하는 유지관리 프로세스가 포함될 수 있다. 상기 유지관리 프로세스는 이들 자손 광선의 일부, 또는 전부가 실제로 충돌 테스트되어야 하는지의 여부를 판단할 수 있다. 상기 유지관리 프로세스는 시스템 이용에 대한 가시성(visibility)을 가질 수 있으며, 어떠한 해로운 효과 없이, 현재 시스템 이용도가, 이러한 충돌 테스팅을 지원할 수 있는지의 여부를 판단할 수 있다. 이러한 해로운 효과로는 프레임 레이트 목표를 유지하지 못하는 것, 또는 더 높은 중요도의 광선 대신 더 낮은 중요도의 광선을 충돌 테스팅하는 것이 있으며, 이는 불필요한 렌더링 품질 저하를 초래할 수 있다.
또 다른 변형예에서, 쉐이더 프로세스는 현재 자원 이용도에 대한 정보를 전달받을 수 있으며, 현재 광선/기본형 충돌이 쉐이딩되는 방식을 결정하기 위해, 상기 쉐이더 프로세스는, 광선 가중치에 의해 결정될 수 있는 광선의 중요도와 함께, 상기 정보를 사용할 수 있다. 이러한 이용 정보는 API나 함수 호출로 공식화될 수 있으며, 이에 따라서 쉐이더 프로세스가 이러한 사용 정보를 적정한 때에 획득할 수 있다. 다양한 구현 가능성이, 프레임간 렌더링 동안에도 광선 추적을 적응하기 위해 존재할 수 있다. 다른 구현예가 보다 분권화된 제어를 도출하도록 사용 정보를 더 넓게 분배할 수 있는 반면에, 이러한 일부 구현예는 쉐이딩되는 광선의 집중적인 유지관리에 의존할 수 있다.
일반적인 적용가능성에 대한 또 다른 아이템으로는 주어진 광선/기본형 충돌에 대한 쉐이딩 알고리즘 선택이 광선의 중요도뿐 아니라 알고리즘에 의해 얻어지는 최종 품질의 표시자를 기반으로 이뤄질 수 있다는 것이다. 가끔 특정 알고리즘의 결과의 품질은 수행되는 광선 추적법의 유형에 따라 달라질 수 있다. 예를 들어, 이러한 알고리즘의 결과의 품질은 수행되는 광선 추적법으로부터의 관심 출력이 무엇이냐에 따라 달라질 수 있으며, 따라서 임의의 주어진 쉐이딩 알고리즘은 서로 다른 환경에서 서로 다른 “품질”의 결과를 제공하는 것을 판단될 수 있다. 따라서 이러한 알고리즘은 품질의 범위 및 품질을 용도와 관련짓는 것에 관련될 수 있다. 또한 이러한 알고리즘의 등급은 주관적 품질 평가 대 객관적 품질 평가에 관련될 수 있다.
일부 예에서, 일부 값(가령, 광선과 연계된 가중치)은 그 밖의 다른 값(광선이 발산될 샘플과 연계된 가중치)(또는 카메라 광선의 후대 광선의 경우, 부모 광선으로부터의 연계된 샘플의 상속에 의한 가중치)과 관련된다. 이러한 숫자적 관계는 추가되어, 예를 들어, 광선 가중치들의 합계가 샘플 가중치와 유사해지거나, 본 발명의 양태 내에서, 이러나 과계가 더 복잡, 또는 덜 명백해질 수 있다. 또한 광선 가중치를 기초로 하는 적응화에 관련된 예시는, 도태되거나, 또 다른 자손 광선의 부모가 되기 위한, 광선을 기초로 하는 적응화, 또는 광선의 종단(peer)을 설명하여, 광선의 기여자를 정제하였다. 이들 예시는 고려되는 광선의 가중치에 초점을 맞췄으나, 도태나 그 밖의 다른 광선 관련 프로세싱을 위한 특정 예시에서 특정 광선의 가중치가 고려되지 않도록, 본원에서 공개되는 양태들은 임의의 일반적인 방식으로의 광선 가중치를 기초로 하는 적응화도 포함한다.
도 22는 복수의 컴퓨터(2210a-2210n)를 포함하는 렌더링 팜(rendering farm, 2000)을 도시하며, 상기 복수의 컴퓨터 중 일부는 하드웨어 가속기(910)를 구비하고 있다. 상기 컴퓨터(2210a-2210n)는 LAN 상에서 스위치(2220)에 의해 연결되며, 상기 스위치(2220)는 라우터(2225)로 연결되고, NAS(network area storage, 2215)로 연결된다. 라우터(2225)는 네트워크(2226)(가령, 인터넷, 사설망, 또는 이들의 임의의 조합으로 연결될 수 있다. 네트워크(2226)는 저장장치 영역 네트워크 자원92230) 및 (또한, 하드웨어 가속기(910)를 구비할 수 있는) 그 밖의 다른 컴퓨터(2211a-2211n)로의 액세스를 제공한다. 많은 양의 렌더링이 필요할 때, 이러한 렌더링 팜이 사용되어, 복수의 프로세싱 자원들 간에 렌더링을 분산시킬 수 있다. 각각의 컴퓨터에 렌더링될 복수의 장면이 제공될 수 있으며, 상기 각각의 컴퓨터는 하드웨어 가속기(910)를 이용하여 이러한 렌더링을 가속화할 것이다.
본 명세서에서, “네트워크”는 컴퓨터 시스템들 및/또는 모듈들 간에 전자 데이터의 전송을 가능하게 하는 하나 이상의 데이터 링크를 포함할 수 있다. 네트워크 또는 또 다른 통신 연결(하드와이어링된 연결, 무선, 또는 하드와이어와 무선의 조합)을 통해 정보가 컴퓨터로 전송 또는 제공될 때, 상기 컴퓨터는 상기 연결을 컴퓨터 판독가능형 매체로서 이용할 수 있다. 따라서 예를 들어, 컴퓨터 판독가능형 매체는 희망 프로그램 코드 수단을 컴퓨터에 의해 실행가능한 인스트럭션이나 데이터 구조의 형태로 지니거나 저장하기 위해 사용될 수 있는, 또는 범용 또는 특수 목적 컴퓨터에 의해 액세스될 수 있는 네트워크나 데이터 링크를 포함할 수 있다.
임의의 프로세싱이 로컬 영역 네트워크나 광역 네트워크 등의 네트워크를 통해 분산될 수 있으며, 피어 투 피어(peer to peer) 기법을 이용하여 구현될 수 있다. 제품이나 시스템의 희망 성능, 또는 희망 가격 포인트, 또는 이들의 조합을 토대로, 작업의 분할이 결정될 수 있다. 기재된 유닛 중 임의의 유닛을 부분적으로 또는 전적으로 소프트웨어로 구현하는 실시예에서, 유닛 기능을 나타내는 컴퓨터에 의해 실행가능한 인스트럭션이 컴퓨터 판독형 매체에 저장될 수 있으며, 이러한 컴퓨터 판독형 매체로는, 가기 디스크, 광학 디스크, 플래쉬 메모리, USB 장치, 또는 저장 장치들의 네트워크(가령 NAS 또는 SAN 설비) 등일 수 있다. 그 밖의 다른 관련 정보, 예를 들어, 프로세싱을 위한 데이터가 이러한 매체 상에 저장될 수 있다.
본 명세서에서 기재되고 청되는 방법들의 양태는 컴퓨터 하드웨어를 포함하는 특수 또는 범용 컴퓨터에서 구현될 수 있다. 이러한 하드웨어, 펌웨어 및 소프트웨어는 비디오 카드나 그 밖의 다른 외부(또는 내부) 컴퓨터 시스템 주변 기기 상에서 구현될 수 있다. 다양한 기능이 소비자 맞춤가능한 FPGA나 ASIC 또는 그 밖의 다른 설정가능한 프로세서로 제공될 수 있으며, 일부 기능은 유지관리 프로세서나 호스트 프로세서로 제공될 수 있다. 이러한 프로세싱 기능들은 개인용 컴퓨터, 데스크톱 컴퓨터, 랩톱 컴퓨터, 메시지 프로세서, 핸드-헬드 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 또는 프로그램가능한 소비자 전자기기, 게임 콘솔, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 모바일 전화기, PDA, 호출기 등에서 사용될 수 있다.
컴퓨터 실행가능형 인스트럭션으로는, 예를 들어, 범용 컴퓨터나 특수 컴퓨터 또는 큭수 처리 장치가 특정 기능이나 기능의 그룹을 수행하도록 하는 인스트럭션 및 데이터가 있다. 상기 컴퓨터 실행가능형 인스트럭션은, 예를 들어, 2진 코드, 중간 포맷 인스트럭션 코드(가령, 어셈블리어), 소스 코드일 수 있다.
Claims (16)
- 기본형(primitive)들로 구성된 3-D 장면(3-D scene)의 2-D 표현(2-D representation)을 렌더링(rendering)하기 위한 방법에 있어서, 상기 방법은
3-D 장면을 구성하는 기본형들과의 충돌에 대해 테스트될 광선(ray)을 형성하는 단계와,
기하학적 형상 가속화 데이터(GAD: geometry acceleration data) 요소와 기본형과의 충돌에 대해 상기 광선을 병렬적으로 테스트(parallelized testing)하도록 구성된 충돌 테스팅 자원(intersection testing resource)에서 상기 광선을 수용하는 단계와,
광선을 복수의 집합(collection)으로 분배하기 위해 상기 GAD 요소의 충돌에 대해 광선을 테스트하는 단계로서, 각각의 집합은 기본형들의 집합을 바운딩하는 GAD의 하나의 요소와 연계되어 있는 특징의 단계와,
광선의 집합의 추가적인 충돌 테스트에 대한 준비여부(readiness)를 추적하는 단계와,
추가적인 충돌 테스트에 대해 준비 된 집합에 대한 테스트를 스케줄링하고, 이용가능한 상태 별로, 충돌 테스트에 대해 추가적인 광선을 스케줄링하고, 테스트에 의해, 테스트되는 광선이, 기본형의 점점 더 작은 집합을 바운딩하는 GAD의 요소와 연계된 집합으로 분배되고, 기본형이 중간 GAD 요소 없이 GAD의 주어진 요소에 의해 바운딩된다고 식별될 때, 상기 기본형들을, 상기 주어진 GAD 요소와 연계된 집합 내 광선과의 충돌에 대해 테스트하고, 임의의 식별된 충돌에 대한 표시자(indication)를 출력하는 단계와,
출력된 표시자에 의해 식별되는 충돌을 쉐이딩(shading)하는 단계로서, 이러한 쉐이딩에 의해, 추가적인 출돌 테스트를 위한 쉐이더 광선(shader ray)이 생성되는 단계
를 포함하며, 이때, 각각의 광선 그룹은 카메라 광선과 쉐이더 광선 중 한 가지를 포함하고, 집합(collection)은 상기 카메라 광선과 쉐이더 광선 중 한 가지 이상을 포함하는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 방법. - 제 1 항에 있어서,
아직 충돌 테스트될 예정인 새로 형성된 카메라 광선보다 우선적으로, 식별된 충돌의 쉐이딩의 결과로서 발생되는 쉐이더 광선을 수용하는 단계
를 더 포함하는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 방법. - 제 1 항에 있어서, 각각의 집합에는 광선의 최대 개수가 존재하며, 충돌 테스팅 자원은, GAD 요소와 기본형 중 하나 이상과의 충돌에 대해 상기 최대 개수 이상의 광선을 병렬적으로 테스트하도록 설정되는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 방법.
- 제 1 항 내지 제 3 항 중 어느 한 항에 있어서, 상기 충돌 테스팅 자원은 하나의 집합의 광선들을 GAD 요소와 병렬로 테스트하면서, 다른 집합의 광선을 기본형과 병렬로 테스트하도록 구성되는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 방법.
- 제 1 항 내지 제 4 항 중 어느 한 항에 있어서, 각각의 광선은 하나의 샘플 및 각각의 가중치와 연계되어 있으며, 상기 각각의 가중치는 각각의 광선이 연계되어 있는 샘플에 대한 각각의 광선의 중요도를 나타내며, 나타난 충돌에 따라 생성된 쉐이더 광선의 개수는 표시자에 식별된 광선과 연계된 가중치에 의해 부분적으로 또는 전적으로 결정되는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 방법.
- 제 1 항 내지 제 5 항 중 어느 한 항에 있어서, GAD는 계층구조 그래프(hierarchical graph)로서 구성되며, 상기 그래프에서, 그래프의 노드는 GAD의 요소를 나타내고, 상기 요소들은 상기 요소들 간의 상호관계를 나타내는 에지(edge)에 의해 연결되고, 그래프의 리프 노드(leaf node)는 기본형들을 바운딩하며, 비-리프 노드(non-leaf node)는 하나 이상의 중간에 삽입되는 GAD 요소를 갖고 기본형을 바운딩하는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 방법.
- 기본형(primitive)들로 구성된 3-D 장면(3-D scene)의 2-D 표현(representation)을 렌더링(rendering)하기 위한 시스템에 있어서, 상기 시스템은
3-D 장면을 구성하는 기본형들과의 충돌(intersection)에 대해 테스트될 카메라 광선을 형성하고, 식별된 충돌에 대해, 역시 충돌 테스트될 쉐이더 광선의 생성을 야기하는 쉐이딩(shading) 프로세스를 실행하고, 카메라 광선과 쉐이더 광선을 출력하기 위한 컴퓨팅 자원과,
집합(collection) 단위로, GAD(Geometry Acceleration Data) 요소와 기본형 중 하나 이상과의 충돌에 대해 광선을 테스트하기 위한 충돌 테스팅 자원(intersection testing resource)
을 포함하며, 상기 충돌 테스팅 자원은
출력된 광선을 수용하며,
상기 수용된 광선을 저장하는 메모리 자원을 관리하고,
충돌 테스팅 자원에서 충돌 테스트되도록 이용가능한 광선의 집합의 리스트를 유지관리하며, 이때 상기 광선의 집합은 GAD의 각각의 요소와 연계되고, 상기 광선은, 이러한 광선이 주어진 집합과 연계된 GAD 요소와 충돌한다고 결정되면, 상기 주어진 집합에 추가되며, 상기 충돌 테스팅 자원은
추가적인 충돌 테스트에 대해 리스트 내 집합의 준비 여부를 추적하고,
추가적인 충돌 테스트에 대해 준비 된 집합에 대한 테스트를 스케줄링하고,
스케줄링된 집합의 광선의 테스트를 시작하고, 광선이 테스트될 GAD 요소 또는 기본형을 선택하는데, 이러한 선택은 스케줄링된 집합과 연계된 GAD의 요소와 상호관계된 GAD의 요소를 식별하는 것을 기반으로 이뤄지며, 상기 충돌 테스팅 자원은
광선과 기본형 간의 식별된 충돌의 표시자를 출력하는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 시스템. - 제 7 항에 있어서, 상기 컴퓨팅 자원은, 컴퓨터에 의해 실행가능한 인스트럭션을 이용하여, 처리될 광선의 순서를 결정하는 유지관리 프로세스를 형성하도록 설정되는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 시스템.
- 제 7 항 또는 제 8 항에 있어서, 상기 컴퓨팅 자원은 카메라 광선에 비해 쉐이더 광선의 출력을 선호하도록 설정되는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 시스템.
- 제 7 항 내지 제 9 항 중 어느 한 항에 있어서, 쉐이딩을 위해 출력되는 쉐이더 광선의 개수는 충돌과 관련된 광선과 연계된 가중치에 따라 달라지는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 시스템.
- 제 7 항 내지 제 10 항 중 어느 한 항에 있어서, 상기 충돌 테스팅 자원은 먼저 수용된 광선을, 장면을 구성하는 기본형을 총체적으로 바운딩하는 GAD의 하나 이상의 요소와 연계되는 하나 이상의 디폴트 광선 집합으로 할당하도록 구성되는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 시스템.
- 제 7 항 내지 제 11 항 중 어느 한 항에 있어서, GAD의 요소들은 계층구조 그래프로 서로 상관되어 있으며, 이때, GAD의 요소는 그래프의 노드로 표현되고, AD의 식별된 요소들은 스케줄링된 집합과 연계된 GAD의 요소의 자손 노드를 포함하는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 시스템.
- 제 7 항 내지 제 12 항 중 어느 한 항에 있어서, 메모리 자원은 저장하는 광선의 최대 개수를 가지며, 광선의 집합은, 충돌 테스팅 자원에서 제공되는 충돌 테스트 셀의 개수와 동일한 최대 개수의 광선을 갖고 있을 때 가득 찬 상태가 되며, 상기 충돌 테스팅 자원은, 가득 찬 광선 집합의 테스트 스케줄링을 우선순위화하고, 컴퓨터 자원ㅇ로부터 광선을 수용함으로써, 광선 테스트의 처리량을 최대화하며, 이러한 우선순위화 후에 처리량이 이용가능한 상태로 남아 있는 경우, 메모리 자원은 최대 개수의 광선을 저장하며, 충돌 테스팅 자원은 라운드 로빈(round robin) 방식, 무작위(random) 방식 및 의사무작위(pseudorandom) 방식 중 하나 이상을 기반으로, 광선의 집합을 충돌 테스트에 대해 스케줄링하는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 시스템.
- 제 7 항에 있어서, 상기 충돌 테스팅 자원은, 거 큰 광선 집합을 테스트에 대해 우선적으로 스케줄링하고, 두 번째로, 가변 원점 및 방향의 쉐이더 광선의 생성을 시뮬레이트함으로써 더 긴 주기의 평균 처리량을 촉진함으로써 충돌 테스트의 처리를 우선순위화하는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 시스템.
- 제 7 항에 있어서, 상기 컴퓨팅 자원은, 컴퓨터 판독형 매체로부터 얻어진 컴퓨터에 의해 실행가능한 인스트럭션을 이용하여, 렌더링될 장면을 표현하는 데이터를 수용하는 단계와, 상기 장면을 표현하는 데이터를 바탕으로 GAD 요소를 공식화(formulating)하는 단계와, 기본형을 충돌 테스팅 자원으로 제공하는 단계와, 충돌 테스트될 카메라 광선을 장면으로 제공하는 단계와, 검출된 관선/기본형 충돌의 표시자(indication)을 수신하는 단계와, 쉐이딩을 위해 이러한 충돌을 배열하는 단계와, 상기 쉐이딩에 의해 2차 광선의 생성이 야기되는 단계로서, 드라이버가 충돌 테스팅 자원으로의 카메라 광선의 제공보다 이러한 2차 광선의 제공을 우선순위화하는 단계를 포함하는 방법을 수행하는 것을 특징으로 하는 2-D 표현을 렌더링하기 위한 시스템.
- 청구항 제 1 항 내지 제 6 항 중 어느 한 항에 따른 방법을 구현하기 위한 컴퓨터에 의해 실행가능한 인스트럭션을 저장하는 컴퓨터 판독형 저장 매체.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/942,336 US8237711B2 (en) | 2007-11-19 | 2007-11-19 | Tracing of shader-generated ray groups using coupled intersection testing |
US11/942,336 | 2007-11-19 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20100094532A true KR20100094532A (ko) | 2010-08-26 |
KR101545039B1 KR101545039B1 (ko) | 2015-08-17 |
Family
ID=40641457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020107013780A KR101545039B1 (ko) | 2007-11-19 | 2008-11-10 | 광선 추적법을 이용하는 렌더링 시스템 및 방법 |
Country Status (5)
Country | Link |
---|---|
US (2) | US8237711B2 (ko) |
EP (2) | EP2223295B1 (ko) |
JP (2) | JP5480815B2 (ko) |
KR (1) | KR101545039B1 (ko) |
WO (1) | WO2009067351A1 (ko) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120033585A (ko) * | 2010-09-30 | 2012-04-09 | 삼성전자주식회사 | 데이터 처리 장치 및 방법 |
KR101228118B1 (ko) * | 2010-12-22 | 2013-01-31 | 서강대학교산학협력단 | 다각형 중요도에 기반을 둔 교차 검사 가속화 자료 구조 구성 방법 |
KR101381580B1 (ko) * | 2014-02-04 | 2014-04-17 | (주)나인정보시스템 | 다양한 조명 환경에 강인한 영상 내 차량 위치 판단 방법 및 시스템 |
KR101482578B1 (ko) * | 2010-09-27 | 2015-01-14 | 인텔 코오퍼레이션 | 에지 검출 및 셰이더 재사용을 이용한 멀티뷰 광선 추적 |
US9449423B2 (en) | 2012-10-16 | 2016-09-20 | Samsung Electronics Co., Ltd. | Apparatus and method for image processing |
US9779537B2 (en) | 2012-07-24 | 2017-10-03 | Samsung Electronics Co., Ltd. | Method and apparatus for ray tracing |
US10186071B2 (en) | 2014-05-02 | 2019-01-22 | Samsung Electronics Co., Ltd. | Rendering system and method for generating ray |
WO2020123060A1 (en) * | 2018-12-13 | 2020-06-18 | Advanced Micro Devices, Inc. | Water tight ray triangle intersection without resorting to double precision |
Families Citing this family (66)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8674987B2 (en) | 2006-09-19 | 2014-03-18 | Caustic Graphics, Inc. | Dynamic ray population control |
US8018457B2 (en) * | 2006-09-19 | 2011-09-13 | Caustic Graphics, Inc. | Ray tracing system architectures and methods |
US8390621B2 (en) * | 2007-01-24 | 2013-03-05 | Take Two Interactive Software, Inc. | System and method for calculating multi-resolution dynamic ambient occlusion |
WO2009117691A2 (en) | 2008-03-21 | 2009-09-24 | Caustic Graphics, Inc | Architectures for parallelized intersection testing and shading for ray-tracing rendering |
EP3385913B1 (en) * | 2008-09-22 | 2020-04-01 | Imagination Technologies Limited | Systems and methods for a ray tracing shader api |
US8755515B1 (en) | 2008-09-29 | 2014-06-17 | Wai Wu | Parallel signal processing system and method |
US9483864B2 (en) * | 2008-12-05 | 2016-11-01 | International Business Machines Corporation | System and method for photorealistic imaging using ambient occlusion |
US8248405B1 (en) * | 2009-02-26 | 2012-08-21 | Adobe Systems Incorporated | Image compositing with ray tracing |
GB2484445B (en) | 2009-07-24 | 2014-09-17 | Uws Ventures Ltd | Direct ray tracing of 3D scenes |
US8564617B2 (en) * | 2010-01-12 | 2013-10-22 | International Business Machines Corporation | Accelerated volume rendering |
US8494221B2 (en) * | 2011-04-28 | 2013-07-23 | Honeywell International Inc. | Inverse star tracker using psuedo-random overlapping circles |
US10185785B2 (en) * | 2012-04-12 | 2019-01-22 | Refraresources Llc | System and method for tracking components of complex three dimensional structures |
US9058690B2 (en) * | 2012-10-05 | 2015-06-16 | Disney Enterprises, Inc. | Ray cone hierarchy renderer |
GB2546020B (en) * | 2012-11-02 | 2017-08-30 | Imagination Tech Ltd | Method of scheduling discrete productions of geometry |
KR101500814B1 (ko) * | 2012-12-27 | 2015-03-10 | 이화여자대학교 산학협력단 | 구들의 교집합을 이용한 바운딩 볼륨 생성 장치 및 방법 |
US10970429B2 (en) * | 2013-01-07 | 2021-04-06 | Magma Giessereitechnologie Gmbh | Method and algorithm for simulating the influence of thermally coupled surface radiation in casting processes |
US9508315B2 (en) * | 2013-03-08 | 2016-11-29 | Disney Enterprises, Inc. | Ordering rays in rendered graphics for coherent shading |
GB2513698B (en) * | 2013-03-15 | 2017-01-11 | Imagination Tech Ltd | Rendering with point sampling and pre-computed light transport information |
KR20140115063A (ko) | 2013-03-20 | 2014-09-30 | 한국전자통신연구원 | 레이 트레이싱 전파환경에서 전파 수신레벨 결정장치 및 방법 |
KR102110819B1 (ko) | 2013-05-08 | 2020-05-15 | 삼성전자주식회사 | 영상 처리 장치 및 방법 |
US11257271B2 (en) | 2013-09-26 | 2022-02-22 | Imagination Technologies Limited | Atomic memory update unit and methods |
US9466091B2 (en) * | 2013-09-26 | 2016-10-11 | Imagination Technologies Limited | Atomic memory update unit and methods |
CN110097492A (zh) * | 2013-09-26 | 2019-08-06 | 想象技术有限公司 | 原子存储器更新单元和方法 |
KR102116981B1 (ko) * | 2013-10-02 | 2020-05-29 | 삼성전자 주식회사 | 광선 추적 가속 방법 및 장치 |
KR102285840B1 (ko) * | 2013-11-11 | 2021-08-05 | 삼성전자주식회사 | 3차원 영상 렌더링 방법 및 이를 적용한 영상 출력 장치 |
US10229526B2 (en) * | 2014-03-13 | 2019-03-12 | Imagination Technologies Limited | Rendering of soft shadows |
KR102197067B1 (ko) | 2014-04-02 | 2020-12-30 | 삼성전자 주식회사 | 멀티 프레임들의 동일한 영역을 연속으로 렌더링하는 방법 및 장치 |
KR102166426B1 (ko) * | 2014-07-07 | 2020-10-16 | 삼성전자주식회사 | 렌더링 시스템 및 이의 렌더링 방법 |
KR102370617B1 (ko) * | 2015-04-23 | 2022-03-04 | 삼성전자주식회사 | 적응적 샘플링을 수행하여 영상을 처리하는 방법 및 장치. |
US10297068B2 (en) * | 2017-06-06 | 2019-05-21 | Adshir Ltd. | Method for ray tracing augmented objects |
US10614614B2 (en) | 2015-09-29 | 2020-04-07 | Adshir Ltd. | Path tracing system employing distributed accelerating structures |
US10565776B2 (en) | 2015-12-12 | 2020-02-18 | Adshir Ltd. | Method for fast generation of path traced reflections on a semi-reflective surface |
US12008704B2 (en) | 2016-01-28 | 2024-06-11 | Snap Inc. | System for photo-realistic reflections in augmented reality |
US10614612B2 (en) | 2018-06-09 | 2020-04-07 | Adshir Ltd. | Fast path traced reflections for augmented reality |
US10579812B2 (en) * | 2016-02-19 | 2020-03-03 | Adobe Inc. | 3D digital content interaction and control |
EP3220356B1 (en) * | 2016-03-14 | 2020-06-17 | Imagination Technologies Limited | Methods and graphics processing units for determining differential data for rays of a ray bundle |
WO2017181151A1 (en) * | 2016-04-14 | 2017-10-19 | Cornell University | Methods for incremental 3d printing and 3d printing arbitrary wireframe meshes |
CN109661684B (zh) * | 2016-09-06 | 2023-03-28 | 维塔医疗股份公司 | 用于现实交互式超声模拟的射线追踪方法 |
KR20180050124A (ko) | 2016-11-04 | 2018-05-14 | 삼성전자주식회사 | 가속 구조를 생성하는 방법 및 장치 |
KR20180069461A (ko) | 2016-12-15 | 2018-06-25 | 삼성전자주식회사 | 가속 구조를 생성하는 방법 및 장치 |
US10290143B2 (en) * | 2017-06-14 | 2019-05-14 | Imagination Technologies Limited | Compressed ray direction data in a ray tracing system |
KR101826123B1 (ko) * | 2017-07-14 | 2018-02-07 | 한국과학기술정보연구원 | 비정렬 격자 볼륨 렌더링 방법 및 장치 |
CN107845135B (zh) * | 2017-11-15 | 2020-11-20 | 山东师范大学 | 一种三维仿真模型及模型库的构建方法及装置 |
KR20200109315A (ko) | 2018-01-16 | 2020-09-22 | 퍼시픽 라이트 앤드 홀로그램 인크. | 전자기 필드 컴퓨팅들을 이용한 3차원 디스플레이들 |
US10559115B2 (en) * | 2018-03-02 | 2020-02-11 | Microsoft Technology Licensing, Llc | Techniques for generating visualizations of ray tracing images |
US10699468B2 (en) | 2018-06-09 | 2020-06-30 | Adshir Ltd. | Method for non-planar specular reflections in hybrid ray tracing |
US10580196B1 (en) * | 2018-08-10 | 2020-03-03 | Nvidia Corporation | Method for continued bounding volume hierarchy traversal on intersection without shader intervention |
US10740952B2 (en) * | 2018-08-10 | 2020-08-11 | Nvidia Corporation | Method for handling of out-of-order opaque and alpha ray/primitive intersections |
EP3881445A1 (en) * | 2018-11-13 | 2021-09-22 | Nokia Solutions and Networks Oy | Testing method and arrangement |
US10825231B2 (en) * | 2018-12-10 | 2020-11-03 | Arm Limited | Methods of and apparatus for rendering frames for display using ray tracing |
US10930051B2 (en) | 2018-12-28 | 2021-02-23 | Intel Corporation | Apparatus and method for general ray tracing queries |
US10762686B2 (en) * | 2018-12-28 | 2020-09-01 | Intel Corporation | Apparatus and method for a hierarchical beam tracer |
KR102151444B1 (ko) * | 2019-04-11 | 2020-09-03 | 주식회사 실리콘아츠 | Mimd 기반의 t&i 스케줄링을 이용한 레이 트레이싱 장치 |
US11288856B2 (en) * | 2019-11-05 | 2022-03-29 | Intelligent Fusion Technology, Inc. | Method and system for wave propagation prediction |
US11017581B1 (en) | 2020-01-04 | 2021-05-25 | Adshir Ltd. | Method for constructing and traversing accelerating structures |
US11295509B2 (en) | 2020-06-29 | 2022-04-05 | Imagination Technologies Limited | Intersection testing in a ray tracing system using multiple ray bundle intersection tests |
US11308683B2 (en) | 2020-06-29 | 2022-04-19 | Imagination Technologies Limited | Intersection testing in a ray tracing system using ray bundle vectors |
US11436784B2 (en) | 2020-07-30 | 2022-09-06 | Apple Inc. | SIMD group formation techniques for primitive testing associated with ray intersect traversal |
US11367242B2 (en) * | 2020-07-30 | 2022-06-21 | Apple Inc. | Ray intersect circuitry with parallel ray testing |
US11995767B2 (en) | 2020-08-17 | 2024-05-28 | Intel Corporation | Apparatus and method for compressing ray tracing acceleration structure build data |
US12002145B2 (en) * | 2020-08-17 | 2024-06-04 | Intel Corporation | Apparatus and method for efficient graphics processing including ray tracing |
US11360431B2 (en) | 2020-09-17 | 2022-06-14 | Pacific Light & Hologram, Inc. | Reconstructing objects with display zero order light suppression |
US12002190B2 (en) * | 2020-12-29 | 2024-06-04 | Apple Inc. | Primitive testing for ray intersection at multiple precisions |
US20220309734A1 (en) * | 2021-03-29 | 2022-09-29 | Samsung Electronics Co., Ltd. | Apparatus and method with graphics processing |
GB2614098B (en) * | 2022-03-31 | 2024-05-01 | Imagination Tech Ltd | Methods and hardware logic for writing ray tracing data from a shader processing unit of a graphics processing unit |
US11900842B1 (en) | 2023-05-12 | 2024-02-13 | Pacific Light & Hologram, Inc. | Irregular devices |
Family Cites Families (48)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4625289A (en) | 1985-01-09 | 1986-11-25 | Evans & Sutherland Computer Corp. | Computer graphics system of general surface rendering by exhaustive sampling |
EP0459761A3 (en) | 1990-05-31 | 1993-07-14 | Hewlett-Packard Company | Three dimensional computer graphics employing ray tracking to compute form factors in radiosity |
JP3093444B2 (ja) * | 1992-06-10 | 2000-10-03 | 富士通株式会社 | グラフィック表示装置 |
US6559843B1 (en) | 1993-10-01 | 2003-05-06 | Compaq Computer Corporation | Segmented ray casting data parallel volume rendering |
GB9424273D0 (en) | 1994-12-01 | 1995-01-18 | Wrigley Adrian M T | Improvements in and relating to image constrcution |
US6529193B1 (en) | 1996-06-25 | 2003-03-04 | Mental Images Gmbh & Co. Kg | System and method for generating pixel values for pixels in an image using strictly deterministic methodologies for generating sample points |
US5973699A (en) | 1996-09-19 | 1999-10-26 | Platinum Technology Ip, Inc. | System and method for increasing the performance for real-time rendering of three-dimensional polygonal data |
US5990896A (en) | 1996-09-30 | 1999-11-23 | Mitsubishi Electric Information Technology Center America, Inc. (Ita) | Rapid and efficient terrain surface finding system |
US6111582A (en) | 1996-12-20 | 2000-08-29 | Jenkins; Barry L. | System and method of image generation and encoding using primitive reprojection |
US6023279A (en) | 1997-01-09 | 2000-02-08 | The Boeing Company | Method and apparatus for rapidly rendering computer generated images of complex structures |
US6028608A (en) | 1997-05-09 | 2000-02-22 | Jenkins; Barry | System and method of perception-based image generation and encoding |
JPH11353496A (ja) * | 1998-06-10 | 1999-12-24 | Ken Nishimura | 光線追跡のための交点探索装置 |
US6489955B1 (en) | 1999-06-07 | 2002-12-03 | Intel Corporation | Ray intersection reduction using directionally classified target lists |
US6556200B1 (en) | 1999-09-01 | 2003-04-29 | Mitsubishi Electric Research Laboratories, Inc. | Temporal and spatial coherent ray tracing for rendering scenes with sampled and geometry data |
US6344837B1 (en) | 2000-06-16 | 2002-02-05 | Andrew H. Gelsey | Three-dimensional image display with picture elements formed from directionally modulated pixels |
US7499053B2 (en) | 2000-06-19 | 2009-03-03 | Mental Images Gmbh | Real-time precision ray tracing |
US7184042B2 (en) | 2000-06-19 | 2007-02-27 | Mental Images Gmbh | Computer graphic system and computer-implemented method for generating images using a ray tracing methodology that makes use of a ray tree generated using low-discrepancy sequences and ray tracer for use therewith |
AU2002245076A1 (en) | 2000-12-06 | 2002-07-16 | Sun Microsystems, Inc. | Using ancillary geometry for visibility determination |
US7009608B2 (en) | 2002-06-06 | 2006-03-07 | Nvidia Corporation | System and method of using multiple representations per object in computer graphics |
US7362332B2 (en) | 2002-06-20 | 2008-04-22 | Nvidia Corporation | System and method of simulating motion blur efficiently |
US6853377B2 (en) | 2002-06-26 | 2005-02-08 | Nvidia Corporation | System and method of improved calculation of diffusely reflected light |
DE10239672B4 (de) | 2002-08-26 | 2005-08-11 | Universität des Saarlandes | Verfahren und Vorrichtung zur Erzeugung einer zweidimensionalen Abbildung einer dreidimensionalen Struktur |
US7012604B1 (en) | 2002-09-12 | 2006-03-14 | Advanced Micro Devices, Inc. | System architecture for high speed ray tracing |
US7250948B2 (en) | 2002-11-15 | 2007-07-31 | Sunfish Studio, Llc | System and method visible surface determination in computer graphics using interval analysis |
WO2004068300A2 (en) * | 2003-01-25 | 2004-08-12 | Purdue Research Foundation | Methods, systems, and data structures for performing searches on three dimensional objects |
US7098907B2 (en) | 2003-01-30 | 2006-08-29 | Frantic Films Corporation | Method for converting explicitly represented geometric surfaces into accurate level sets |
US7212207B2 (en) | 2003-08-20 | 2007-05-01 | Sony Computer Entertainment Inc. | Method and apparatus for real-time global illumination incorporating stream processor based hybrid ray tracing |
US7483024B2 (en) | 2003-12-31 | 2009-01-27 | Autodesk, Inc. | Accelerated ray-object intersection |
DE102004007835A1 (de) * | 2004-02-17 | 2005-09-15 | Universität des Saarlandes | Vorrichtung zur Darstellung von dynamischen komplexen Szenen |
US20060098009A1 (en) | 2004-10-28 | 2006-05-11 | Miguel Zuniga | Method and apparatus for ray and range queries using wide object isolation techniques |
US7348975B2 (en) | 2004-12-28 | 2008-03-25 | Intel Corporation | Applications of interval arithmetic for reduction of number of computations in ray tracing problems |
US7969437B2 (en) | 2004-12-28 | 2011-06-28 | Intel Corporation | Method and apparatus for triangle representation |
US7973790B2 (en) | 2005-08-11 | 2011-07-05 | Realtime Technology Ag | Method for hybrid rasterization and raytracing with consistent programmable shading |
US20070132754A1 (en) | 2005-12-12 | 2007-06-14 | Intel Corporation | Method and apparatus for binary image classification and segmentation |
FR2896895B1 (fr) | 2006-02-01 | 2008-09-26 | Redway Soc Par Actions Simplifiee | Procede de synthese d'une image virtuelle par lancer de faisceaux |
US20080024489A1 (en) | 2006-07-28 | 2008-01-31 | Robert Allen Shearer | Cache Utilization Optimized Ray Traversal Algorithm with Minimized Memory Bandwidth Requirements |
US7864174B2 (en) | 2006-08-24 | 2011-01-04 | International Business Machines Corporation | Methods and systems for reducing the number of rays passed between processing elements in a distributed ray tracing system |
US7830379B2 (en) | 2006-09-19 | 2010-11-09 | Caustic Graphics, Inc. | Architectures for parallelized intersection testing and shading for ray-tracing rendering |
US7688320B2 (en) | 2006-09-27 | 2010-03-30 | International Business Machines Corporation | Methods and systems for texture prefetching based on a most recently hit primitive algorithm |
US7884819B2 (en) | 2006-09-27 | 2011-02-08 | International Business Machines Corporation | Pixel color accumulation in a ray tracing image processing system |
US8339398B2 (en) * | 2006-09-28 | 2012-12-25 | International Business Machines Corporation | Integrated acceleration data structure for physics and ray tracing workload |
US7940266B2 (en) | 2006-10-13 | 2011-05-10 | International Business Machines Corporation | Dynamic reallocation of processing cores for balanced ray tracing graphics workload |
US7782318B2 (en) | 2006-11-22 | 2010-08-24 | International Business Machines Corporation | Method for reducing network bandwidth by delaying shadow ray generation |
US7852336B2 (en) | 2006-11-28 | 2010-12-14 | International Business Machines Corporation | Dynamic determination of optimal spatial index mapping to processor thread resources |
US8139060B2 (en) | 2006-11-28 | 2012-03-20 | International Business Machines Corporation | Ray tracing image processing system |
US9092901B2 (en) | 2006-11-29 | 2015-07-28 | University Of Utah Research Foundation | Parallel grid population |
KR100889602B1 (ko) | 2006-12-05 | 2009-03-20 | 한국전자통신연구원 | 광선 추적을 위한 광선-삼각형 충돌 처리 방법 및 장치 |
US8085267B2 (en) | 2007-01-30 | 2011-12-27 | International Business Machines Corporation | Stochastic addition of rays in a ray tracing image processing system |
-
2007
- 2007-11-19 US US11/942,336 patent/US8237711B2/en active Active
-
2008
- 2008-11-10 EP EP08851950.9A patent/EP2223295B1/en active Active
- 2008-11-10 KR KR1020107013780A patent/KR101545039B1/ko active IP Right Grant
- 2008-11-10 WO PCT/US2008/083044 patent/WO2009067351A1/en active Application Filing
- 2008-11-10 EP EP18215738.8A patent/EP3483838B1/en active Active
- 2008-11-10 JP JP2010535002A patent/JP5480815B2/ja active Active
-
2012
- 2012-08-05 US US13/567,076 patent/US8736610B2/en active Active
-
2014
- 2014-02-14 JP JP2014026792A patent/JP5756940B2/ja active Active
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101482578B1 (ko) * | 2010-09-27 | 2015-01-14 | 인텔 코오퍼레이션 | 에지 검출 및 셰이더 재사용을 이용한 멀티뷰 광선 추적 |
KR20120033585A (ko) * | 2010-09-30 | 2012-04-09 | 삼성전자주식회사 | 데이터 처리 장치 및 방법 |
US9342919B2 (en) | 2010-09-30 | 2016-05-17 | Samsung Electronics Co., Ltd. | Image rendering apparatus and method for preventing pipeline stall using a buffer memory unit and a processor |
KR101228118B1 (ko) * | 2010-12-22 | 2013-01-31 | 서강대학교산학협력단 | 다각형 중요도에 기반을 둔 교차 검사 가속화 자료 구조 구성 방법 |
US9779537B2 (en) | 2012-07-24 | 2017-10-03 | Samsung Electronics Co., Ltd. | Method and apparatus for ray tracing |
US9449423B2 (en) | 2012-10-16 | 2016-09-20 | Samsung Electronics Co., Ltd. | Apparatus and method for image processing |
KR101381580B1 (ko) * | 2014-02-04 | 2014-04-17 | (주)나인정보시스템 | 다양한 조명 환경에 강인한 영상 내 차량 위치 판단 방법 및 시스템 |
US10186071B2 (en) | 2014-05-02 | 2019-01-22 | Samsung Electronics Co., Ltd. | Rendering system and method for generating ray |
WO2020123060A1 (en) * | 2018-12-13 | 2020-06-18 | Advanced Micro Devices, Inc. | Water tight ray triangle intersection without resorting to double precision |
Also Published As
Publication number | Publication date |
---|---|
JP2011503757A (ja) | 2011-01-27 |
US8736610B2 (en) | 2014-05-27 |
KR101545039B1 (ko) | 2015-08-17 |
EP3483838A2 (en) | 2019-05-15 |
US8237711B2 (en) | 2012-08-07 |
EP3483838A3 (en) | 2019-07-10 |
JP5480815B2 (ja) | 2014-04-23 |
WO2009067351A1 (en) | 2009-05-28 |
EP2223295A1 (en) | 2010-09-01 |
EP2223295A4 (en) | 2014-04-02 |
JP2014081972A (ja) | 2014-05-08 |
JP5756940B2 (ja) | 2015-07-29 |
US20130050213A1 (en) | 2013-02-28 |
US20090128562A1 (en) | 2009-05-21 |
EP3483838B1 (en) | 2021-07-28 |
EP2223295B1 (en) | 2019-02-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101545039B1 (ko) | 광선 추적법을 이용하는 렌더링 시스템 및 방법 | |
US10789758B2 (en) | Ray tracing in computer graphics using intersection testing at selective resolution | |
US8854369B2 (en) | Systems and methods for concurrent ray tracing | |
JP5485257B2 (ja) | レイトレース・レンダリングのための並列化された交差テストおよびシェーディングのアーキテクチャ | |
US11854141B2 (en) | Early release of resources in ray tracing hardware |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
N231 | Notification of change of applicant | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20180802 Year of fee payment: 4 |