KR101820621B1 - 광선 추적 어플리케이션들에서 트리 순회를 위한 시작 노드 결정 - Google Patents

광선 추적 어플리케이션들에서 트리 순회를 위한 시작 노드 결정 Download PDF

Info

Publication number
KR101820621B1
KR101820621B1 KR1020167031809A KR20167031809A KR101820621B1 KR 101820621 B1 KR101820621 B1 KR 101820621B1 KR 1020167031809 A KR1020167031809 A KR 1020167031809A KR 20167031809 A KR20167031809 A KR 20167031809A KR 101820621 B1 KR101820621 B1 KR 101820621B1
Authority
KR
South Korea
Prior art keywords
data structure
hierarchical data
node
bounding volumes
processor
Prior art date
Application number
KR1020167031809A
Other languages
English (en)
Other versions
KR20160148582A (ko
Inventor
유라이 오베르트
비니트 고엘
운스 모우리
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20160148582A publication Critical patent/KR20160148582A/ko
Application granted granted Critical
Publication of KR101820621B1 publication Critical patent/KR101820621B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/08Volume rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/005Tree description, e.g. octree, quadtree
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/12Bounding box

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)
  • Image Analysis (AREA)

Abstract

적어도 하나의 프로세서가 계층적 데이터 구조에서 복수의 프리미티브들을 조직화할 수도 있다. 적어도 하나의 프로세서는 계층적 데이터 구조의 비 루트 노드들과 연관된 복수의 바운딩 볼륨들을 오프 스크린 렌더 타겟으로 래스터화할 수도 있다. 적어도 하나의 프로세서는 복수의 바운딩 볼륨들로부터 나오는 광선에 의해 교차되는 바운딩 볼륨을 결정할 수도 있다. 적어도 하나의 프로세서는 계층적 데이터 구조의 순회를 시작하기 위해 계층적 데이터 구조에서 시작 노드로서 바운딩 볼륨과 연관되는 계층적 데이터 구조의 비 루트 노드를 결정할 수도 있다. 적어도 하나의 프로세서는 광선에 의해 교차되는 프리미티브들을 결정하기 위해 시작 노드로부터 시작하는 계층적 데이터 구조를 순회할 수도 있다.

Description

광선 추적 어플리케이션들에서 트리 순회를 위한 시작 노드 결정{START NODE DETERMINATION FOR TREE TRAVERSAL IN RAY TRACING APPLICATIONS}
이 개시물은 광선 추적을 위한 광선 프리미티브 교차를 결정하기 위해 계층적 데이터 구조를 순회하는 것을 포함한, 그래픽스 프로세싱에 관한 것이다.
컴퓨터 그래픽스에 있어서, 광선 축적은 3 차원 (3D) 장면 (scene) 을 통해 3D 광선들을 추적하고 광선 프리미티브 교차들을 발견하는 프로세스이다. 광선 프리미티브 교차들을 발견하는 프로세스를 가속화하기 위해서, 장면 지오메트리가 장면 프리미티브들을 계층적으로 그룹화하는 가속 데이터 구조 (ADS)(예를 들어, 삼각형들) 로 배열된다. ADS 는 광선에 의해 교차되는 장면의 프리미티브들을 결정하기 위해 장면 프리미티브들의 계층에 대해 광선 교차 테스트들을 수행하는 것에 의해 재귀적으로 순회될 수도 있다.
루트 노드로부터 ADS 를 순회하는 대신, 그래픽스 프로세싱 유닛 (GPU) 는 내부 노드로부터 ADS 의 순회를 대신 시작할 수도 있고, 이에 의해 GPU 가 계층에 대해 수행할 수도 있는 광선 교차 테스트들의 수를 감소한다. GPU 는 계층적 데이터 구조의 내부 노드들과 연관된 바운딩 볼륨들의 서브세트를 오프 스크린 렌더 타겟으로 래스터화하는 것에 의해 순회를 시작할 ADS 의 내부 노드를 결정할 수도 있다. GPU 는, 오프 스크린 렌더 타겟으로부터 샘플링된 컬러 값으로서, 광선에 의해 교차되는 내부 노드의 노드 인덱스를 결정할 수도 있고, 그 노드로부터 ASD 의 순회를 시작할 수도 있으며, 이에 의해 ADS 를 순회하기 위해 GPU 가 수행할 수도 있는 광선 교차 테스트들의 수를 감소한다.
개시물의 일 예에 있어서, 방법은 적어도 하나의 프로세서에 의해, 계층적 데이터 구조에서 복수의 프리미티브들을 조직화하는 단계를 포함할 수도 있다. 방법은, 적어도 하나의 프로세서에 의해, 계층적 데이터 구조의 비 루트 노드들과 연관된 복수의 바운딩 볼륨들을 오프 스크린 렌더 타겟으로 래스터화하는 단계를 더 포함할 수도 있다. 방법은, 적어도 하나의 프로세서에 의해, 그리고 복수의 바운딩 볼륨들을 오프 스크린 렌더 타겟으로 레스터화하는 것에 기초하여, 계층적 데이터 구조의 순회를 시작하기 위해 상기 계층적 데이터 구조에서의 시작 노드로서 상기 계층적 데이터 구조의 비 루트 노드를 결정하는 단계를 더 포함할 수도 있다. 방법은, 적어도 하나의 프로세서에 의해, 광선에 의해 교차되는 프리미티브를 결정하기 위해 시작 노드로부터 시작하는 상기 계층적 데이터 구조를 순회하는 단계를 포함할 수도 있다.
개시물의 다른 예에 있어서, 장치는 메모리, 및 적어도 하나의 프로세서를 포함할 수도 있고, 적어도 하나의 프로세서는, 계층적 데이터 구조에서 복수의 프리미티브들을 조직화하고; 계층적 데이터 구조의 비 루트 노드들과 연관된 복수의 바운딩 볼륨들을 오프 스크린 렌더 타겟으로 래스터화하고; 복수의 바운딩 볼륨들을 오프 스크린 렌더 타겟으로 레스터화하는 것에 기초하여, 계층적 데이터 구조의 순회를 시작하기 위해 계층적 데이터 구조에서의 시작 노드로서 계층적 데이터 구조의 비 루트 노드를 결정하며; 그리고 광선에 의해 교차되는 프리미티브를 결정하기 위해 시작 노드로부터 시작하는 계층적 데이터 구조를 순회하도록 구성된다.
개시물의 다른 예에 있어서, 장치는 계층적 데이터 구조에서 복수의 프리미티브들을 조직화하는 수단을 포함할 수도 있다. 장치는 계층적 데이터 구조의 비 루트 노드들과 연관된 복수의 바운딩 볼륨들을 오프 스크린 렌더 타겟으로 래스터화하는 수단을 더 포함할 수도 있다. 장치는 복수의 바운딩 볼륨들을 오프 스크린 렌더 타겟으로 레스터화하는 것에 기초하여, 계층적 데이터 구조의 순회를 시작하기 위해 계층적 데이터 구조에서의 시작 노드로서 계층적 데이터 구조의 비 루트 노드를 결정하는 수단을 더 포함할 수도 있다. 장치는 광선에 의해 교차되는 프리미티브를 결정하기 위해 시작 노드로부터 시작하는 계층적 데이터 구조를 순회하는 수단을 더 포함할 수도 있다.
개시물의 또 다른 예에 있어서, 컴퓨터 판독가능 저장 매체는 명령들을 저장할 수도 있고, 명령들은, 실행될 때, 하나 이상의 프로그램가능 프로세서들로 하여금, 적어도 하나의 프로세서에 의해, 계층적 데이터 구조에서 복수의 프리미티브들을 조직화하게 하고; 적어도 하나의 프로세서에 의해, 계층적 데이터 구조의 비 루트 노드들과 연관된 복수의 바운딩 볼륨들을 오프 스크린 렌더 타겟으로 래스터화하게 하고; 적어도 하나의 프로세서에 의해, 그리고 복수의 바운딩 볼륨들을 오프 스크린 렌더 타겟으로 레스터화하는 것에 기초하여, 계층적 데이터 구조의 순회를 시작하기 위해 계층적 데이터 구조에서의 시작 노드로서 상기 계층적 데이터 구조의 비 루트 노드를 결정하게 하며; 그리고 적어도 하나의 프로세서에 의해, 광선에 의해 교차되는 프리미티브를 결정하기 위해 시작 노드로부터 시작하는 계층적 데이터 구조를 순회하게 한다.
첨부 도면들 및 하기의 설명에서 하나 이상의 예들의 상세들이 기술된다. 다른 피처들, 목적들 및 이점들은 설명 및 도면들로부터, 그리고 청구항들로부터 명백해질 것이다.
도 1 은 이 개시물의 하나 이상의 양태들을 구현하기 위해 구성될 수도 있는 일 예의 컴퓨팅 디바이스를 도시하는 블록 다이어그램이다.
도 2 는 도 1 의 CPU, GPU 및 시스템 메모리의 예시의 구현들을 도시하는 더 상세하게 도시하는 블록 다이어그램이다.
도 3 은 GPU 가 광선 추적을 수행할 수도 있는 예시의 장면을 도시하는 블록 다이어그램이다.
도 4 는 예시의 장면을 바운딩 볼륨들로 파티셔닝하는 것을 도시하는 블록 다이어그램이다.
도 5 는 도 4 에 나타낸 프리미티브들 및 바운딩 볼륨들과 연관되는 노드들을 갖는 예시의 계층적 데이터 구조를 도시한다.
도 6 은 예시의 오프 스크린 렌더 타겟으로 조직화되는 바운딩 볼륨들의 예시의 표현을 도시하는 블록 다이어그램이다.
도 7 은 광선 프리미티브 교차를 찾아내기 위해 예시의 계층적 트리 구조를 순회하기 위한 시작 노드를 결정하기 위한 예시의 프로세스를 도시하는 플로우챠트이다.
일반적으로, 이 개시물은 계층적 데이터 구조의 내부 노드로부터 장면 프리미티브들의 계층적 데이터 구조의 순회를 시작하는 것에 의해 광선 추적 목적들을 위한 광선에 의해 교차되는 프리미티브를 결정하기 위한 기법들을 기재한다. 그래픽 프로세싱 유닛 (GPU) 상에서, 가속 데이터 구조 (ADS) 와 같은 계층적 데이터 구조를 순회할 때, 루트 노드로부터 계층적 데이터 구조의 순회를 시작하는 것은 부적당한 성능을 산출할 수도 있는데, 이는 그러한 순회가 계층적 데이터 구조에 있어서 장면 프리미티브들에 대한 외부 광선 교차 테스트를 GPU 가 수행하기를 요구할 수도 있다.
루트 노드로부터 계층적 데이터 구조를 순회하는 대신, GPU 는 루트 노드 이외의 노드로부터 계층적 데이터 구조의 순회를 대신 시작할 수도 있으며, 이에 의해 GPU 가 수행할 수도 있는 광선 교차 테스트들의 수를 감소시킨다. GPU 는 계층적 데이터 구조의 내부 노드들 및 리프 노드들과 연관된 바운딩 볼륨들의 서브세트를 오프 스크린 렌더 타겟으로 래스터화하기 위해 그 그래픽 프로세싱 파이프라인으로부터 셰이더 유닛들을 활용하는 것에 의해 순회를 시작할 계층적 데이터 구조의 비 루트 노드를 결정할 수도 있다. GPU 는, 오프 스크린 렌더 타겟으로서, 계층적 데이터 구조의 순회를 시작할 내부 비 루트 노드를 결정할 수도 있으며, 이에 의해 계층적 데이터 구조를 순회하기 위해 GPU 가 수행할 수도 있는 광선 교차 테스트들의 수를 감소시킨다. 오프 스크린 렌더 타겟으로 래스터화하는 것은 광선 교차 테스트들을 수행하는 것 보다 비교적 계산적으로 덜 비싸기 때문에, GPU 는 루트 노드로부터 계층적 데이터 구조를 순회하는 것과 비교하여 광선 추적 성능에 있어서 실질적인 증가를 실현할 수도 있다.
본 개시들의 양태들에 따라, GPU 는 복수의 계층적 데이터 구조를 조직화하기 위해 구성될 수도 있다. GPU 는 또한 계층적 데이터 구조의 비 루트 노드들과 연관된 복수의 바운딩 볼륨들을 오프 스크린 렌더 타겟으로 래스터화하도록 구성될 수도 있다. GPU 는 또한 복수의 바운딩 볼륨들로부터 나오는 광선에 의해 교차되는 바운딩 볼륨을 결정하도록 구성될 수도 있다. GPU 는 또한, 계층적 데이터 구조의 순회를 시작하기 위해 계층적 데이터 구조에서 시작 노드로서 바운딩 볼륨과 연관되는 계층적 데이터 구조의 비 루트 노드를 결정하도록 구성될 수도 있다. GPU 는 또한 광선에 의해 교차되는 프리미티브를 결정하기 위해 시작 노드로부터 시작하는 계층적 데이터 구조를 순회하도록 구성될 수도 있다.
도 1 은 이 개시물의 하나 이상의 양태들을 구현하기 위해 구성될 수도 있는 예시의 컴퓨팅 디바이스를 도시하는 블록 다이어그램이다. 도 1 에 나타낸 바와 같이, 디바이스 (2) 는 비디오 디바이스들, 미디어 플레이어들, 셋톱 박스들, 무선 핸드셋들, 예컨대 모바일 전화기들 및 이른바 스마트폰들, 개인용 디지털 보조기들 (PDA들), 데스크탑 컴퓨터들, 랩탑 컴퓨터들, 게이밍 콘솔들, 비디오 컨퍼런싱 유닛들, 테블릿 컴퓨팅 디바이스들 등을 포함할 수도 있지만 이에 제한되지 않는다. 도 1 의 예에서, 디바이스 (2) 는 중앙 프로세싱 유닛 (CPU)(6), 시스템 메모리 (10), 및 GPU (12) 를 포함할 수도 있다. 디바이스 (2) 는 또한 디스플레이 프로세서 (14), 송수신기 모듈 (3), 사용자 인터페이스 (4), 및 디스플레이 (8) 를 포함할 수도 있다. 송수신기 모듈 (3) 및 디스플레이 프로세서 (14) 는 둘다가 CPU (6) 및/또는 GPU (12) 와 동일한 집적 회로 (IC) 의 부분일 수도 있거나, 그 둘다가 CPU (6) 및/또는 GPU (12) 를 포함하는 IC 또는 IC들 외부에 있을 수도 있거나 또는 CPU (6) 및/또는 GPU (12) 를 포함하는 IC 외부에 있는 IC 에 형성될 수도 있다.
디바이스 (2) 는 명료함을 위해 도 1 에 나타내지 않은 부가 모듈들 및 유닛들을 포함할 수도 있다. 예를 들어, 디바이스 (2) 는, 디바이스 (2) 가 미디어 플레이어인 스피커 또는 디바이스 (2) 가 모바일 무선 전화기인 예들에서 전화 통신들을 발효시키기 위해, 도 1 에는 어느 것도 나타나 있지 않은, 스피커 및 마이크로폰을 포함할 수도 있다. 디바이스 (2) 는 또한 비디오 카메라를 포함할 수도 있다. 더욱이, 디바이스 (2) 에 나타낸 다양한 모듈들 및 유닛들이 디바이스 (2) 이 모든 예에서 필요하지 않을 수도 있다. 예를 들어, 사용자 인터페이스 (4) 및 디스플레이 (8) 는, 디바이스 (2) 가 데스크탑 컴퓨터 또는 외부 사용자 인터페이스 또는 디스플레이와 인터페이스하기 위해 장착되는 다른 디바이스인 예들에서 디바이스 (2) 외부에 있을 수도 있다.
사용자 인터페이스 (4) 의 예들은 트랙볼, 마우스, 키보드, 및 다른 타입의 입력 디바이스들을 포함하지만 이에 제한되지 않는다. 사용자 인터페이스 (4) 는 또한 터치 스크린일 수도 있고 디스플레이 (8) 의 부분으로서 통합될 수도 있다. 송수신기 모듈 (3) 은 디바이스 (2) 와 다른 디바이스 또는 네트워크 사이의 무선 또는 유선 통신을 허용하기 위한 회로를 포함할 수도 있다. 송수신기 모듈 (3) 은 변조기들, 복조기들, 증폭기들 및 유선 또는 무선 통신을 위한 다른 그러한 회로를 포함할 수도 있다.
CPU (6) 는 실행을 위한 컴퓨터 프로그램의 명령들을 프로세싱하도록 구성된 중앙 프로세싱 유닛 (CPU) 와 같은 마이크로프로세서일 수도 있다. CPU (6) 는 디바이스 (2) 의 동작을 제어하는 범용 또는 특수 목적 프로세서를 포함할 수도 있다. 사용자는 CPU (6) 로 하여금 하나 이상의 소프트웨어 어플리케이션들을 실행하게 하기 위해 디바이스 (2) 에 입력을 제공할 수도 있다. CPU (6) 상에서 실행하는 소프트웨어 어플리케이션들은, 예를 들어 오퍼레이팅 시스템, 워드 프로세서 어플리케이션, 이메일 어플리케이션, 스프레드시트 어플리케이션, 미디어 플레이어 어플리케이션, 비디오 게임 어플리케이션, 그래픽 사용자 인터페이스 어플리케이션 또는 다른 프로그램을 포함할 수도 있다. 부가적으로, CPU (6) 는 GPU (12) 의 동작을 제어하기 위해 GPU 드라이버 (22) 를 실행할 수도 있다. 사용자는 하나 이상의 디바이스들 (미도시), 예컨대 키보드, 마우스, 마이크로폰, 터치 패드 또는 사용자 인터페이스 (4) 를 통해 디바이스 (2) 에 커플링되는 다른 입력 디바이스를 통해 디바이스 (2) 에 입력을 제공할 수도 있다.
CPU (6) 상에서 실행하는 소프트웨어 어플리케이션들은, 디스플레이 (8) 로의 그래픽스 데이터의 렌더링을 야기하도록 CPU (6) 에게 명령하는 하나 이상의 그래픽스 렌더링 명령들을 포함할 수도 있다. 일부 예들에서, 소프트웨어 명령들은, 예를 들어, 오픈 그래픽스 라이브러리 (OpenGL®) API, 오픈 그래픽스 라이브러리 임베딩된 시스템 (OpenGL ES) API, Direct3D API, X3D API, RenderMan API, WebGL API, 또는 임의의 공개 또는 사설 표준 그래픽스 API 와 같은, 그래픽스 어플리케이션 프로그래밍 인터페이스 (API) 를 따를 수도 있다. 그래픽스 렌더링 명령들을 프로세싱하기 위해서, CPU (6) 는 GPU (12) 로 하여금 그래픽스 데이터의 렌더링의 일부 또는 모두를 수행하게 하기 위한 하나 이상의 그래픽스 렌더링 커맨드들을 (예를 들어, GPU 드라이버 (22) 를 통해) GPU (12) 에 발행할 수도 있다. 일부 예들에서, 렌더링될 그래픽스 데이터는 그래픽스 프리미티브들의 리스트, 예를 들어 점들, 선들, 삼각형들, 사변형들, 삼각형 스트림들 등을 포함할 수도 있다.
GPU (12) 는 디스플레이 (8) 로 하나 이상의 그래픽스 프리미티브들을 렌더링하기 위해 그래픽스 동작들을 수행하도록 구성될 수도 있다. 이로써, CPU (6) 상에서 실행하는 소프트웨어 어플리케이션들 중 하나가 그래픽스 프로세싱을 필요로 할 때, CPU (6) 는 디스플레이 (8) 로 렌더링하기 위해 GPU (12) 그래픽스 커맨드들 및 그래픽스 데이터를 제공할 수도 있다. 그래픽스 데이터는, 예를 들어 드로잉 커맨드들, 상태 정보, 프리미티브 정보, 텍스처 정보 등을 포함할 수도 있다. GPU (12) 는, 일부 경우들에서, CPU (6) 보다 효율적인 복잡한 그래픽 관련 동작들의 프로세싱을 제공하는 고도 병렬 구조로 형성될 수도 있다. 예를 들어, GPU (12) 는 다중 꼭지점들 또는 화소들에 대해 병렬 방식으로 동작하도록 구성되는, 셰이더 유닛들과 같은, 복수의 프로세싱 엘리먼트들을 포함할 수도 있다. GPU (12) 의 고도 병렬 성질은, 일부 경우들에서, GPU (12) 가, CPU (6) 를 사용하여 디스플레이 (8) 에 직접 장면들을 드로우하는 것보다 더 빨리 디스플레이 (8) 상으로 그래픽스 이미지들 (예를 들어, GUI들 및 2 차원 (2D) 및/또는 3 차원 (3D) 그래픽스 장면들) 을 드로우하게 할 수도 있다.
GPU (12) 는, 일부 경우들에서, 디바이스 (2) 의 마더보드에 집적될 수도 있다. 다른 경우들에서, GPU (12) 는 디바이스 (2) 의 마더보드에 있어서 포트에 설치되는 그래픽스 카드에 존재할 수도 있거나 또는 그렇지 않으면 디바이스 (2) 와 상호동작하도록 구성된 주변 디바이스 내에 통합될 수도 있다. GPU (12) 는 하나 이상의 프로세서들, 예컨대 하나 이상의 마이크로프로세서들, 어플리케이션 특정 집적 회로들 (ASIC들), 필드 프로그램가능 게이트 어레이들 (FPGA들), 디지털 신호 프로세서들 (DSP들), 또는 다른 등가 집적 또는 이산 로직 회로를 포함할 수도 있다. GPU (12) 는 또한 하나 이상의 코어들을 포함할 수도 있어서, GPU (12) 가 멀티 코어 프로세서로서 지칭될 수도 있다.
GPU (12) 는 그래픽스 메모리 (40) 에 직접 커플링될 수도 있다. 따라서, GPU (12) 는 버스를 사용하지 않으면서 그래픽스 메모리 (40) 로부터 데이터들 판독하고 메모리 (40) 에 데이터를 기입할 수도 있다. 즉, GPU (12) 는 오프 칩 메모리 대신, 로컬 스토리지를 사용하여 국부적으로 데이터를 프로세싱할 수도 있다. 그러한 그래픽스 메모리 (40) 는 온 칩 메모리로서 지칭될 수도 있다. 이것은 심한 버스 트래픽을 경험할 수도 있는, 버스를 통해 데이터를 판독 및 기입하기 위한 GPU (12) 의 필요성을 제거하는 것에 의해 보다 효율적인 방식으로 GPU (12) 가 동작하게 한다. 하지만, 일부 경우들에서, GPU (12) 가 별도의 메모리를 포함하는 것이 아니라 대신 버스를 통해 시스템 메모리 (10) 를 활용할 수도 있다. 그래픽스 메모리 (40) 는 하나 이상의 휘발성 또는 비휘발성 메모리들 또는 저장 디바이스들, 예를 들어 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 소거가능 프로그램가능 ROM (EPROM), 전기적 소거가능 프로그램가능 ROM (EEPROM) 플래시 메모리, 자기 데이터 매체들 또는 광학 저장 매체들 등을 포함할 수도 있다.
일부 예들에서, GPU (12) 는 시스템 메모리 (10) 에서 전체 형성된 이미지를 저장할 수도 있다. 디스플레이 프로세서 (14) 는 시스템 메모리 (10) 로부터 이미지를 취출하고 디스플레이 (8) 의 화소들로 하여금 이미지를 디스플레이하도록 조명하게 하는 값들을 출력할 수도 있다. 디스플레이 (8) 는 GPU (12) 에 의해 생성된 이미지 컨텐츠를 디스플레이하는 디바이스 (2) 의 디스플레이일 수도 있다. 디스플레이 (8) 는 액정 디스플레이 (LCD), 유기 발광 다이오드 디스플레이 (OLED), 캐소드 레이 튜브 (CRT) 디스플레이, 플라즈마 디스플레이, 또는 디스플레이 디바이스의 다른 타입일 수도 있다.
본 개시물의 양태들에 따라, GPU (12) 는 계층적 데이터 구조에서 복수의 프리미티브들을 조직화할 수도 있다. GPU (12) 는 계층적 데이터 구조의 노드들과 연관된 하나 이상의 바운딩 볼륨들을 오프 스크린 렌더 타겟으로 래스터화할 수도 있다. GPU (12) 는 계층 데이터 구조의 순회를 시작하기 위해 계층적 데이터 구조에서 시작 노드로서 계층적 데이터 구조의 내부 비 루트 노드를 결정할 수도 있다. GPU (12) 는 광선에 의해 교차되는 프리미티브를 결정하기 위해 시작 노드로부터 시작하는 계층적 데이터 구조를 순회할 수도 있다.
도 2 는 도 1 의 CPU (6), GPU (12), 및 시스템 메모리 (10) 의 예시의 구현들을 더 상세하게 도시하는 블록 다이어그램이다. 도 2 에 나타낸 바와 같이, CPU (6) 는 적어도 하나의 소프트웨어 어플리케이션 (18), 그래픽스 API (20), 및 GPU 드라이버 (22) 를 포함할 수도 있으며, 이들 각각은 CPU (6) 상에서 실행하는 하나 이상의 소프트웨어 어플리케이션들 또는 서비스들일 수도 있다.
CPU (6) 및 GPU (12) 에 가용인 메모리는 시스템 메모리 (10) 및 프레임 버퍼 (16) 를 포함할 수도 있다. 프레임 버퍼 (16) 는 시스템 메모리 (10) 의 부분일 수도 있고 또는 시스템 메모리 (10) 와는 별도일 수도 있다. 프레임 버퍼 (16) 는 렌더링된 이미지 데이터를 저장할 수도 있다.
소프트웨어 어플리케이션 (18) 은 GPU (12) 의 기능을 활용하는 임의의 어플리케이션일 수도 있다. 예를 들어, 소프트웨어 어플리케이션 (18) 은 GPU 어플리케이션, 오퍼레이팅 시스템, 포터블 매핑 어플리케이션, 엔지니어링 또는 예술 어플리케이션들을 위한 컴퓨터 보조 디자인 프로그램, 비디오 게임 어플리케이션, 또는 2D 또는 3D 그래픽스를 사용하는 소프트웨어 어플리케이션의 다른 타입일 수도 있다.
소프트웨어 어플리케이션 (18) 은 그래픽 사용자 인터페이스 (GUI) 및/또는 그래픽 장면을 렌더링하도록 GPU (12) 에 명령하는 하나 이상의 드로잉 명령들을 포함할 수도 있다. 예를 들어, 드로잉 명령들은 GPU (12) 에 의해 렌더링될 하나 이상의 그래픽스 프리미티브들의 세트를 정의하는 명령들을 포함할 수도 있다. 일부 예들에서, 드로잉 명령들은, 총괄적으로, GUI 에서 사용된 복수의 윈도잉 표면들의 전부 또는 부분을 정의할 수도 있다. 부가적인 예들에 있어서, 드로잉 명령들은, 총괄적으로, 어플리케이션에 의해 정의된 모델 공간 또는 월드 공간 내에 하나 이상의 그래픽스 오브젝트들을 포함하는 그래픽스 장면의 전부 또는 부분을 정의할 수도 있다.
소프트웨어 어플리케이션 (18) 은 그래픽스 API (20) 를 통해 GPU 드라이버 (22) 를 호출하여, 하나 이상의 그래픽스 프리미티브들을 디스플레이가능한 그래픽스 이미지들로 렌더링하기 위해 GPU (12) 에 하나 이상의 커맨드들을 발행할 수도 있다. 예를 들어, 소프트웨어 어플리케이션 (18) 은 그래픽스 API (20) 를 통해, GPU 드라이버 (22) 를 호출하여, GPU (12) 에 프리미티브 정의들을 제공할 수도 있다. 일부 경우들에서, 프리미티브 정의들은 드로잉 프리미티브들의 리스트, 예를 들어 삼각형들, 사각형들, 삼각형 팬들, 삼각형 스트립들 등의 형태로 GPU (12) 에 제공될 수도 있다. 프리미티브 정의들은 렌더링될 프리미티브들과 연관된 하나 이상의 꼭지점들을 특정하는 꼭지점 사양들을 포함할 수도 있다. 꼭지점 사양들은 각각의 꼭지점에 대해 포지션 좌표들을 포함할 수도 있고, 일부 경우들에서, 꼭지점과 연관된 다른 속성들, 예를 들어 컬러 좌표들, 법선 벡터들, 및 텍스처 좌표들을 포함할 수도 있다. 프리미티브 정의들은 또한, 프리미티브 타입 정보 (예를 들어, 삼각형, 사각형, 삼각형 팬, 삼각형 스트립 등), 스케일링 정보, 회전 정보 등을 포함할 수도 있다. 소프트웨어 어플리케이션 (18) 에 의해 GPU 드라이버 (22) 에 발행된 명령들에 기초하여, GPU 드라이버 (22) 는 프리미티브를 렌더링하기 위해 수행하도록 GPU (12) 에 대한 하나 이상의 동작들을 특정하는 하나 이상의 커맨드들을 공식화할 수도 있다. GPU (12) 가 CPU (6) 로부터 커맨드를 수신할 때, 그래픽스 프로세싱 파이프라인 (24) 은 커맨드를 디코딩하고 커맨드에 특정된 동작을 수행하도록 그래픽스 프로세싱 파이프라인 (24) 을 구성한다. 예를 들어, 그래픽스 프로세싱 파이프라인 (24) 에서의 입력 어셈블러 (26) 는 프리미티브 데이터를 판독하고 그 데이터를 그래픽스 프로세싱 파이프라인 (24) 에서 다른 그래픽스 파이프라인 스테이지들에 의한 사용을 위해 프리미티브들로 어셈블링할 수도 있다. 특정된 동작들을 수행한 후, 그래픽스 프로세싱 파이프라인 (24) 은 디스플레이 디바이스와 연관된 프레임 버퍼 (16) 로 렌더링된 데이터를 출력한다.
프레임 버퍼 (16) 는 GPU (12) 를 위해 목적지 화소들을 저장한다. 각각의 목적지 화소는 고유 스크린 화소 위치와 연관될 수도 있다. 일부 예들에서, 프레임 버퍼 (16) 는 각각의 목적지 화소에 대한 목적지 알파값 및 컬러 성분들을 저장할 수도 있다. 예를 들어, 프레임 버퍼 (16) 는 각각의 화소에 대해 적, 녹, 청, 알파 (RGBA) 를 저장할 수도 있으며, 여기서 "RGB" 성분들은 컬러값들에 대응하고 "A" 성분은 목적지 알파값에 대응한다. 프레임 버퍼 (16) 및 시스템 메모리 (10) 가 별도의 메모리 유닛들인 것으로 도시되어 있지만, 다른 예들에서, 프레임 버퍼 (16) 는 시스템 메모리 (10) 의 부분일 수도 있다.
일부 예들에서, 그래픽스 프로세싱 파이프라인 (24) 은 꼭지점 셰이더 스테이지, 선체 (hull) 셰이더 스테이지, 도메인 셰이더 스테이지, 지오메트리 셰이더 스테이지, 및 화소 셰이더 스테이지를 포함할 수도 있다. 그래픽스 프로세싱 파이프라인 (24) 의 이러한 스테이지들은 셰이더 스테이지들로 고려될 수도 있다. 이들 셰이더 스테이지들은 GPU (12) 에서 셰이더 유닛들 (46) 에 대해 실행하는 하나 이상의 셰이더 프로그램들로서 구현될 수도 있다. 셰이더 유닛들 (46) 은 프로세싱 컴포넌트들의 프로그램가능한 파이프라인으로서 구성될 수도 있다. 일부 예들에서, 셰이더 유닛 (46) 은 "셰이더 프로세서들" 또는 "단일화된 셰이더들" 로서 지칭될 수도 있고, 지오메트리, 꼭지점, 화소 또는 그래픽스를 렌더링하기 위한 다른 셰이딩 동작들을 수행할 수도 있다. 셰이더 유닛들 (46) 은 프로세서 코어들 (48) 을 포함할 수도 있고, 이들 각각은 동작들을 페칭하고 디코딩하기 위한 하나 이상의 컴포넌트들, 산술 계산들을 수행하기 위한 하나 이상의 산술 로직 유닛들, 하나 이상의 메모리들, 캐시들 및 레지스터들을 포함할 수도 있다.
GPU (12) 는 그래픽스 프로세싱 파이프라인 (24) 에서 꼭지점 셰이더 스테이지, 선체 셰이더 스테이지, 도메인 셰이더 스테이지, 지오메트리 셰이더 스테이지 및 화소 셰이더 스테이지 중 하나 이상을 실행하기 위해 셰이더 유닛들 (46) 에 커맨드들을 전송하는 것에 의해 다양한 셰이딩 동작들, 예컨대 꼭지점 셰이딩, 선체 셰이딩, 도메인 셰이딩, 지오메트리 셰이딩, 화소 셰이딩 등을 수행하도록 셰이더 유닛들 (46) 을 지정할 수도 있다. 일부 예들에서, GPU 드라이버 (22) 는 하나 이상의 셰이더 프로그램들을 컴플라이하고, 컴플라이된 셰이더 프로그램들을 GPU (12) 내에 포함된 하나 이상의 프로그램가능 셰이더 유닛들 상으로 다운로드하도록 구성될 수도 있다. 셰이더 프로그램들은 하이 레벨 셰이딩 언어, 예를 들어, OpenGL 셰이딩 언어 (GLSL), 하이 레벨 셰이딩 언어 (HLSL), 그래픽스를 위한 C (Cg) 셰이딩 언어 등으로 기입될 수도 있다. 컴플라이된 셰이더 프로그램들은 GPU (12) 내에서 셰이더 유닛들 (46) 의 동작을 제어하는 하나 이상의 명령들을 포함할 수도 있다. 예를 들어, 셰이더 프로그램들은 꼭지점 셰이더 스테이지의 기능들을 수행하기 위해 셰이더 유닛들 (46) 에 의해 실행될 수도 있는 꼭지점 셰이더 프로그램들, 선체 셰이더 스테이지의 기능들을 수행하기 위해 셰이더 유닛들 (46) 에 의해 실행될 수도 있는 선체 셰이더 프로그램들, 도메인 셰이더 스테이지의 기능들을 수행하기 위해 셰이더 유닛들 (46) 에 의해 실행될 수도 있는 도메인 셰이더 프로그램들, 지오메트리 셰이더 스테이지의 기능들을 수행하기 위해 셰이더 유닛들 (46) 에 의해 실행될 수도 있는 지오메트리 셰이더 프로그램들, 및/또는 화소 셰이더의 기능들을 수행하기 위해 셰이더 유닛들 (46) 에 의해 실행될 수도 있는 화소 셰이더 프로그램들을 포함할 수도 있다. 꼭지점 셰이더 프로그램은 프로그램가능 셰이더 유닛 또는 단일화된 셰이더 유닛의 실행을 제어하고, 꼭지점 동작들 마다 하나 이상을 특정하는 명령들을 포함할 수도 있다.
그래픽스 메모리 (40) 는 GPU (12) 의 집적 회로에 물리적으로 집적되는 온 칩 스토리지 또는 메모리이다. 그래픽스 메모리 (40) 는 온 칩이기 때문에, GPU (12) 는 시스템 버스를 통해 시스템 메모리 (10) 로부터 값들을 판독하거나 이 메모리 (10) 에 값들을 기입하는 것 보다 더 빨리 그래픽스 메모리 (40) 로부터 값들을 기록하거나 이 메모리 (40) 에 값들을 기입하는 것이 가능할 수도 있다. 그래픽스 메모리 (40) 는 장면 프리미티브들 (예를 들어, 삼각형들) 을 계층적으로 그룹화하는 ADS (41) 을 저장할 수도 있다. 일부 예들에 있어서, ADS (41) 는 시스템 메모리 (10) 에, 셰이더 유닛들의 셰이더 메모리 (미도시) 에, 또는 공유 시스템/그래픽스 메모리 (미도시) 에 저장될 수도 있다.
본 개시물의 양태들에 따라, GPU (12) 는 ADS (41) 에서 복수의 프리미티브들을 조직화할 수도 있다. GPU (12) 는 ADS (41) 의 노드들과 연관된 하나 이상이 바운딩 볼륨들을 그래픽스 메모리 (40) 에 저장된 오프 스크린 렌더 타겟으로 래스터화할 수도 있다. GPU (12) 는 ADS (41) 의 순회를 시작하기 위해 ADS (41) 에서 시작 노드로서 ADS (41) 의 비 루트 노드를 결정할 수도 있다. GPU (12) 는 광선에 의해 교차되는 프리미티브를 결정하기 위해 시작 노드로부터 시작하는 ADS (41) 를 순회할 수도 있다.
도 3 은 GPU (12) 가 광선 추적을 수행할 수도 있는 예시의 장면을 도시하는 블록 다이어그램이다. 도 3 에 나타낸 바와 같이, 장면 (50) 은 프리미티브들 (52A-52E)(이하, "프리미티브들 (52)") 을 포함하는 2D 또는 3D 장면일 수도 있다. 광선 추적 프로세스들의 부분으로서, GPU (12) 는 2D 또는 3D 광선일 수도 있고, 소스 (55) 로부터 발산하는, 광선 (54) 에 대해, 광선 (54) 에 의해 교차되는 장면 (50) 의 프리미티브들 (52) 에서 프리미티브들을 결정할 수도 있다.
GPU (12) 는 장면 (50) 을 분할하고, 장면 (50) 의 분할된 부분들을 계층적으로 배열하며, 그리고 장면 (50) 의 분할된 부분들의 계층을 회귀적으로 순회하는 것에 의해 광선 (54) 에 의해 교차되는 프리미티브들 (52) 에서 프리미티브를 조직적으로 결정할 수도 있다. 도 4 는 장면 (50) 을 바운딩 볼륨들로 파티셔닝하는 것을 도시하는 블록 다이어그램이다. 도 4 에 나타낸 바와 같이, GPU (12) 는 프리미티브들 (52) 을 바운딩 볼륨들 (56A-56E)("바운딩 볼륨들 (56)") 로 개념적으로 파티셔닝할 수도 있다. 바운딩 볼륨들 (56) 은, 인클로징된 프리미티브들의 모든 점들이 놓일 수도 있는 최소 영역을 갖는 바운딩 박스들일 수도 있는, 축 정렬된 바운딩 박스들 (AABB들) 일 수도 있다. 바운딩 박스들은 박스들의 에지들이 좌표축 (예를 들어, x, y, 및 z 축) 에 평행할 수도 있도록 축 정렬될 수도 있다.
바운딩 볼륨 (56A) 은 장면 (50) 의 모든 프리미티브들을 바운딩하는 바운딩 박스일 수도 있다. 바운딩 볼륨들 (56B 및 56C) 는, 바운딩 볼륨들 (56B 및 56C) 이 바운딩 볼륨 (56A) 에 의해 바운딩된 장면 (50) 의 일부의 서브세트를 바운딩한다는 점에서 바운딩 볼륨 (56A) 의 서브세트들일 수도 있다. 바운딩 볼륨 (56B) 은 프리미티브들 (52A 및 52B) 를 바운딩할 수도 있고, 바운딩 볼륨 (56C) 는 프리미티브들 (54C, 52D 및 52E) 를 바운딩할 수도 있다. 바운딩 볼륨들 (56D 및 56E) 는 바운딩 볼륨 (56C) 의 서브세트들일 수도 있고, 바운딩 볼륨 (56B) 에 의해 바운딩된 장면 (50) 의 일부의 서브세트를 바운딩할 수도 있다. 바운딩 볼륨 (56D) 은 프리미티브들 (52C 및 52D) 를 바운딩할 수도 있고, 바운딩 볼륨 (56E) 는 프리미티브 (52E) 를 바운딩할 수도 있다.
도 4 에 나타낸 예에 있어서, GPU (12) 는 프리미티브들 (52) 을 5 개의 바운딩 볼륨들 (56) 로 파티션할 수도 있다. GPU (12) 는 5 개의 바운딩 볼륨들 (56) 보다 더 많거나 적게 바운딩 볼륨들을 사용할 수도 있다. 예를 들어, GPU (12) 는 프리미티브들 (52A 및 52B) 를 각각 개별적으로 바운딩하기 위해 바운딩 볼륨 (56B) 의 서브세트들로서 부가 바운딩 볼륨들을 생성할 수도 있다. 일부 예들에서, CPU (6) 는 또한 프리미티브들 (52) 을 바운딩 볼륨들 (56) 로 파티셔닝하도록 구성될 수도 있다.
도 5 는 도 4 에 나타낸 바운딩 볼륨들 (50) 및 프리미티브들 (52) 과 연관되는 노드들을 갖는 예시의 계층적 데이터 구조를 도시한다. 위에서 논의된 바와 같이, 장면의 장면 프리미티브들은 ADS (41) 로 조직화될 수도 있고, ADS (41) 는 광선 프리미티브 교차를 결정하기 위해 순회될 수도 있다. GPU (12) 는 그래픽스 메모리 (40) 에 ADS (41) 를 저장할 수도 있다. 도 5 에 나타낸 바와 같이, 바운딩 볼륨들 (56) 및 프리미티브들 (52) 은, 장면 (50) 과 연관되는 바운딩 볼륨 계층 (BVH) 트리 (60) 와 같은, ADS (41) 의 노드들과 연관될 수도 있다. GPU (12) 또는 CPU (6) 는 장면 (50) 에서 프리미티브들 (52) 및 바운딩 볼륨들 (56) 과 연관되는 노드들 (62A-62E)("노드들 (62)") 를 포함할 수도 있도록 BVH 트리 (60) 를 구성할 수도 있다. 보다 구체적으로, 루트 노드 (62A), 내부 노드 (62C), 및 리프 노드들 (62B, 62D, 및 62E) 은 각각 바운딩 볼륨들 (56) 의 바운딩 볼륨과 연관될 수도 있다. 루트 노드 (62A) 이외의 BVH 트리 (60) 는 BVH 트리 (60) 의 비 루트 노드들로서 지칭될 수도 있다. 예를 들어, 내부 노드들 (62C) 및 리프 노드들 (62B, 62D, 및 62E) 은 BVH 트리 (60) 의 비 루트 노드들로서 지칭될 수도 있다. 리프 노드들 (62B, 62D, 및 62E) 은 각각 프리미티브들 (52) 의 적어도 하나의 프리미티브와 링크될 수도 있다. 예를 들어, 리프 노드 (62B) 는 프리미티브들 (52A 및 52B) 와 링크될 수도 있고, 리프 노드 (62D) 는 프리미티브들 (52E) 와 링크될 수도 있다. BVH 트리 (60) 는 밸런싱되지 않은 2 진 트리로 고려될 수도 있는데, 이는 계층적 데이터 구조 (60) 의 각각의 비 리프 노드가 최대 2 개의 자식 노드들을 갖고, 리프 노드들 (62B, 62D, 및 62E) 는 동등하지 않은 깊이들을 가질 수도 있기 때문이다.
바운딩 볼륨 (56A) 은 장면 (50) 의 모든 프리미티브들 (52) 을 바운딩하기 때문에, GPU (12) 는 바운딩 볼륨 (56A) 과 루트 노드 (62A) 를 연관시킬 수도 있다. GPU (12) 는, 루트 노드 (62A) 의 자식 노드들인 노드들 (62B 및 62C) 를 바운딩 볼륨들 (56B 및 56C) 과 각각 연관시킬 수도 있는데, 이는 바운딩 볼륨들 (56B 및 56C) 이 각각 바운딩 볼륨 (56A) 의 서브세트들이기 때문이다. GPU (12) 는 프리미티브들 (52A 및 52B) 을 노드 (62B) 와 링크할 수도 있는데, 이는 노드 (62B) 와 연관된 바운딩 볼륨 (56B) 이 프리미티브들 (52A 및 52B) 를 바운딩하고, 바운딩 볼륨 (56B) 의 서브세트들인 부가 바운딩 볼륨들이 없기 때문이다.
GPU (12) 는 바운딩 볼륨들 (56D 및 56E) 을 노드 (62C) 의 자식 노드들인 노드들 (62D 및 62E) 와 연관시킬 수도 있는데, 이는 바운딩 볼륨들 (56D 및 56E) 이 각각 노드 (62C) 와 연관된 바운딩 볼륨 (56C) 의 서브세트이기 때문이다. GPU (12) 는 프리미티브들 (52C 및 52D) 를 노드 (62D) 와 링크할 수도 있는데, 이는 노드 (62D) 와 연관된 바운딩 볼륨 (56D) 이 프리미티브들 (52C 및 52D) 를 바운딩하기 때문이고, 그리고 바운딩 볼륨 (56D) 의 서브세트들인 부가 바운딩 볼륨들이 없기 때문이다. GPU (12) 는 또한 링크 프리미티브 (52E) 를 노드 (62E) 와 링크할 수도 있는데, 이는 노드 (62E) 와 연관된 바운딩 볼륨 (56E) 이 프리미티브 (52E) 를 바운딩하기 때문이고, 그리고 바운딩 볼륨 (56E) 의 서브세트들인 부가 바운딩 볼륨들이 없기 때문이다.
GPU (12) 는 BVH 트리 (60) 의 노드들 (62) 과 연관된 바운딩 볼륨들 (56) 에 대해 광선 박스 교차 테스트를 수행하는 것에 의해 광선 (54) 를 교차하는 프리미티브 (52) 의 프리미티브를 결정하도록 BVH 트리 (60) 를 순회할 수도 있다. GPU (12) 는 루트 노드 (62A) 와 연관된 바운딩 볼륨 (56A) 에 대해 광선 박스 교차 테스트를 수행하는 것에 의해 BVH 트리 (60) 의 순회를 시작할 수도 있다. GPU (12) 는 광선 (54) 이 바운딩 볼륨 (56A) 을 교차한다고 결정하는 경우, GPU (12) 는 BVH 트리 (60) 를 노드 (62B) 로 순회하는 것을 계속할 수도 있고, GPU (12) 는 노드 (62B) 와 연관된 바운딩 볼륨 (56B) 에 대해 광선 박스 교차 테스트를 수행할 수도 있다. GPU (12) 가 광선 (54) 이 바운딩 볼륨 (56B) 를 교차하지 않는다고 결정하는 경우, GPU (12) 는 BVH 트리를 노드 (62A) 까지 그리고 노드 (62C) 에 이르기까지 회귀적으로 순회할 수도 있고, GPU (12) 는 노드 (62C) 와 연관된 바운딩 볼륨 (56C) 에 대해 광선 박스 교차 테스트를 수행할 수도 있다. GPU (12) 가 광선 (54) 이 바운딩 볼륨 (56C) 를 교차한다고 결정하는 경우, GPU (12) 는 BVH 트리 (60) 를 노드 (62D) 로 순회하는 것을 계속할 수도 있고, GPU (12) 는 노드 (62D) 와 연관된 바운딩 볼륨 (56D) 에 대해 광선 박스 교차 테스트를 수행할 수도 있다. GPU 가 광선 (54) 이 바운딩 볼륨 (56D) 와 교차한다고 결정하는 경우, GPU (12) 는 노드 (62D) 에 링크된 프리미티브들에 대해 광선 프리미티브 교차 테스트들을 수행할 수도 있다. 이에 따라, GPU (12) 는 프리미티브 (52C) 에 대해 광선 프리미티브 교차 테스트를 수행할 수도 있고, 또한 프리미티브 (52D) 에 대해 광선 프리미티브 교차 테스트를 수행할 수도 있다. GPU (12) 는 광선 (54) 이 프리미티브 (52D) 를 교차한다는 것을 프리미티브 (52D) 에 대한 광선 프리미티브 교차 테스트로부터 결정할 수도 있다. GPU (12) 가 광선 (54) 이 프리미티브 (52D) 를 교차한다고 결정한 후에, GPU (12) 는 BVH 트리 (60) 를 노드 (62C) 까지 그리고 노드 (62E) 에 이르기까지 회귀적으로 순회하는 것을 계속할 수도 있고, GPU (12) 는 노드 (62E) 와 연관된 바운딩 볼륨 (56E) 에 대해 광선 박스 교차 테스트를 수행할 수도 있다. GPU (12) 는, 광선 교차 테스트에 기초하여, 광선 (54) 이 바운딩 볼륨 (56E) 를 교차하지 않는 것을 결정할 수도 있으며, 이에 의해 광선 (54) 에 대해 BVH 트리 (60) 의 순회를 종료한다.
내부 노드 (62C) 또는 리프 노드들 (62B, 62D, 및 62E) 중 하나와 같은 비 루트 노드로부터 시작하는 BVH 트리 (60) 가 순회될 수 있는 경우, GPU (12) 는 루트 노드 (62A) 로부터 BVH 트리 (60) 의 순회를 시작하는 것에 대해 수행하는 광선 교차 테스트들의 수를 감소시킬 수 있고, 이에 의해 광선에 의해 교차되는 프리미티브를 결정하는 효율을 증가시킨다. GPU (12) 는 BVH 트리 (60) 의 비 루트 노드와 연관된 바운딩 볼륨이 광선 (54) 에 교차된다고 결정하는 것에 의해 BVH 트리 (60) 의 비 루트 노드로부터 BVH 트리 (60) 의 순회를 시작할 수도 있다. GPU (12) 는 그래픽스 메모리 (40) 에서 오프 스크린 렌더 타겟으로 적어도 바운딩 볼륨 (56) 의 서브세트를 래스터화할 수도 있다. GPU (12) 는 복수의 바운딩 볼륨들 (56) 을 오프 스크린 렌더 타겟으로 래스터화하는 것에 기초하여, BVH 트리 (60) 의 순회를 시작하기 위해 BVH 트리 (60) 에서 시작 노드로서 BVH 트리 (60) 의 비 루트 노드를 결정할 수도 있다. GPU (12) 는 광선 (54) 에 의해 교차되는 프리미티브를 결정하기 위해 시작 노드로부터 시작하는 BVH 트리 (60) 를 순회할 수도 있다.
도 6 은 예시의 오프 스크린 렌더 타겟으로 래스터화된 바운딩 볼륨들의 예시의 표현을 도시하는 블록 다이어그램이다. GPU (12) 는, BVH 트리의 상부 레벨들의 특정된 수에 대해, 그래픽스 메모리 (40) 에서 오프 스크린 렌더 타겟으로 BVH 트리의 특정된 상부 레벨들에서의 노드들과 연관된 바운딩 볼륨들의 표현을 래스터화하기 위해 그 그래픽스 파이프라인의 꼭지점 셰이더 및/또는 화소 셰이더를 사용할 수도 있다. 예를 들어, 16-레벨 BVH 트리가 주어지면, GPU (12) 는 BVH 트리의 상부 5-6 레벨들과 연관된 바운딩 볼륨들의 표현을 래스터화할 수도 있다. 이로써, GPU (12) 는 BVH 트리의 모든 레벨들 보다 더 적게 연관된 바운딩 볼륨들의 표현을 래스터화하기 위해 선정할 수도 있다.
도 6 에 나타낸 바와 같이, GPU (12) 는 렌더 타겟 (64) 에서 BVH 트리 (60) 의 노드들 (62D-62E) 과 연관된 바운딩 볼륨들 (56B-56E) 의 표현들 (66A-66D)("표현들 (66)") 를 렌더링할 수도 있다. GPU (12) 는 그래픽스 메모리 (40) 에 렌더 타겟 (64) 을 저장할 수도 있다. GPU (12) 는 바운딩 볼륨들 (56B-56E) 를 투영할 수도 있고, GPU (12) 의 셰이더 유닛들 (46) 은 다각형들, 정육면체들 등과 같은 2 차원 또는 3 차원 표현들로서 BVH 트리 (60) 의 비 루트 노드들 (62B-62E) 와 연관된 바운딩 볼륨들 (56B-56E) 의 표현들을 래스터화할 수도 있다. 예를 들어, 렌더 타겟 (64) 에서 픽셀들로 바운딩 볼륨들 (56) 의 각각을 스캔 변환할 수도 있다. 일 예에서, GPU (12) 는 플랫 셰이드된 큐브들로서 바운딩 볼륨들 (56B-56E) 의 표현들 (66) 을 래스터화할 수도 있다. GPU (12) 는 또한, 상이한 컬러들에서 바운딩 볼륨들 (56B-56E) 의 표현들 (66) 을 래스터화할 수도 있어서, 표현들 (66) 의 각각의 출력 컬러가 BVH 트리 (60) 에서 연관된 노드를 표시하는 노드 인덱스를 나타낼 수도 있다. GPU (12) 는 연관된 바운딩 볼륨의 형상을 일치시키기 위해 내부 노드들의 표현들의 각각을 스케일링하고 번역할 수도 있다. 일부 예들에서, GPU (12) 는 장면 (50) 에서 바운딩 볼륨들 (56B-56E) 와 비교하여 상대적으로 낮은 해상도로 바운딩 볼륨들 (56B-56E) 의 표현들 (66) 을 래스터화할 수도 있다. 이러한 방식으로, GPU (12) 는 광선 프리미티브 교차들을 결정하는데 있어서 그 성능을 더 증가시킬 수도 있다.
GPU (12) 는 투영된 바운딩 볼륨들 (56B-56E) 의 표준 깊이 테스팅을 수행하는 것에 의해 그리고 투영된 바운딩 볼륨들 (56B-56E) 의 상이한 깊이들을 나타내기 위해 표현들 (66) 의 화소들에 상이한 출력 컬러들을 할당하는 것에 의해 표현들 (66) 의 출력 컬러를 결정할 수도 있다. GPU (12) 는 BVH 트리 (60) 의 노드들 (62) 과 표현들 (66) 의 화소들에 할당된 출력 컬러들을 연관시킬 수도 있다. 이러한 방식으로, GPU (12) 는 화소의 출력 컬러를 샘플링하는 것에 의해 렌더 타겟 (64) 에서 화소와 연관된 BVH 트리 (60) 에서 노드를 결정할 수도 있다. 표현들 (66) 을 렌더 타겟 (64) 으로 래스터화하는 것의 부분으로서, GPU (12) 는 렌더 타겟 (64) 에서 화소들로의 프라이머리 광선들의 매핑을 결정할 수도 있어서, 렌더 타겟 (64) 에서의 픽셀에 대해, GPU (12) 는 픽셀을 교차하는 광선 (54) 과 같은 하나 이상의 프라이머리 광선들을 매핑할 수도 있다. 일부 예들에서, 렌더 타겟 (64) 은 화소와 프라이머리 광선 사이에서 일 대 일 매핑을 가질 수도 있다. 다른 예들에서, 표현들 (66) 이 타겟 (64) 를 렌더링하기 위해 (대응 바운딩 볼륨들 (56) 의 해상도와 비교하여) 상대적으로 더 낮은 해상도로 래스터화되는 경우, 화소는 다중 프라이머리 광선들로 매핑될 수도 있다. GPU (12) 는 표현 (66C) 이 광선 (54) 의 소스에 가장 근접한 표현이고 광선 (54) 에 매핑된 화소를 포함한다고 결정할 수도 있다. GPU (12) 는 화소의 컬러를 결정하기 위해 광선 (54) 에 매핑된 표현 (66C) 에서 화소를 샘플링할 수도 있다. GPU (12) 는 표현 (66C) 에서 화소의 샘플링된 컬러가 노드 (62D) 에 대한 노드 인덱스와 연관된다고 결정할 수도 있고, 이에 의해 표현 (66C) 이 노드 (62D) 와 연관된다고 결정할 수도 있다. 따라서, GPU (12) 는 BVH 트리 (60) 를 순회하기 위한 시작 노드로서 노드 (62D) 를 설정할 수도 있고 노드 (62D) 로부터 BVH 트리 (60) 의 순회를 시작할 수도 있다.
GPU (12) 가 노드 (62D) 로부터 시작하는 BVH 트리 (60) 를 순회하기 때문에, GPU (12) 는 노드 (62D) 와 연관된 바운딩 볼륨 (56D) 에 대해 광선 박스 교차 테스트를 먼저 수행할 수도 있다. GPU 가 광선 (54) 이 바운딩 볼륨 (56D) 을 교차한다고 결정하는 경우, GPU (12) 는 노드 (62D) 에 링크되는 프리미티브 (52C) 에 대해 광선 프리미티브 교차 테스트를 수행할 수도 있다. GPU 가 광선 (54) 이 프리미티브 (52C) 를 교차하지 않는다고 결정하는 경우, GPU (12) 는 노드 (62D) 까지 BVH 트리 (60) 를 회귀적으로 순회할 수도 있고 노드 (62D) 에 링크된 프리미티브 (52D) 에 대해 광선 프리미티브 교차 테스트를 수행할 수도 있다. GPU (12) 는 프리미티브 (52D) 에 대한 광선 프리미티브 교차 테스트로부터 광선 (54) 이 프리미티브 (52D) 를 교차하는 것을 결정할 수도 있다. GPU (12) 는 노드 (62C) 까지 BVH 트리 (60) 를 회귀적으로 순회할 수도 있으며 이에 의해 광선 (54) 에 대한 BVH 트리의 순회를 종료한다. 알 수 있는 바와 같이, 광선 (54) 을 교차하는 프리미티브를 찾아내기 위한 BVH 트리 (60) 의 순회는 GPU (12) 가 루트 노드로부터 시작하는 BVH 트리 (60) 를 순회하는데 필요한 경우와는 대조적으로 상대적으로 더 적은 광선 박스 교차 테스트들을 수행하는 것을 포함할 수도 있다.
일부 예들에서, 시야각에 의존하여, 임의의 2 개의 노드들의 바운딩 볼륨들의 표현들은 스크린 상에 투영될 때 오버랩할 수도 있다. 이 경우, BVH 트리 (60) 의 순회는 2 개의 오버랩하는 바운딩 볼륨들의 최하위 공통 선조로부터 시작할 수도 있다. 바운딩 볼륨들의 2 개의 표현들이 오버랩하는 경우, 및 2 개의 바운딩 볼륨들의 오버랩된 영역에서 광선이 교차하는 경우, GPU (12) 는 바운딩 볼륨들과 연관된 노드들의 최저 공통 선조 노드를 결정할 수도 있고 2 개의 오버랩하는 표현들에 의해 표현된 바운딩 볼륨들과 연관된 노드들의 최저 공통 선조 노드로부터 BVH 트리 (60) 의 순회를 시작할 수도 있다. 예를 들어, 표현들 (66) 을 렌더 타겟 (64) 으로 래스터화하는 동안, GPU (12) 는 표현 (66C) 및 표현 (66D) 가 영역 (69) 에서 오버랩하는 것을 결정할 수도 있다. GPU (12) 는 노드들 (62D 및 62E) 의 최하위 공통 선조 노드와 연관된 출력 컬러를 결정할 수도 있고 영역 (69) 에서의 화소들의 출력 컬러를 노드들 (62D 및 62E) 의 최저 공통 선조 노드와 연관된 동일한 출력 컬러로 설정할 수도 있다. 이 예에서, GPU (12) 는 노드 (62C) 가 노드들 (62D 및 62E) 의 최저 공통 선조 노드라고 결정할 수도 있고 영역 (69) 에서의 화소들의 출력 컬러를 노드 (62C) 와 연관되는 표현 (66B) 의 출력 컬러로 설정할 수도 있다.
예를 들어, 소스 (55) 로부터 방사하는 광선 (68) 이 영역 (69) 을 교차하는 경우, GPU (12) 는 노드 (62C) 로부터 순회를 시작하는 것을 결정할 수도 있다. 노드 (62C) 가 렌더 타겟 (64) 에서 표현 (66B) 로 나타낸 바운딩 볼륨 (56C) 과 연관되기 때문에, GPU (12) 는 노드 (62C) 와 연관된 바운딩 볼륨 (56C) 에 대한 광선 박스 교차 테스트를 수행할 수도 있다. GPU (12) 가 광선 (68) 이 바운딩 볼륨 (56C) 를 교차한다고 결정하는 경우, GPU (12) 는 BVH 트리 (60) 를 노드 (62D) 로 순회할 수도 있다. GPU (12) 는 노드 (62D) 와 연관된 바운딩 볼륨 (56D) 에 대해 광선 박스 교차 테스트를 수행할 수도 있다. GPU 가 광선 (54) 이 바운딩 볼륨 (56D) 을 교차한다고 결정하는 경우, GPU (12) 는 노드 (62D) 에 링크된 프리미티브 (52C) 에 대해 광선 프리미티브 교차 테스트를 수행할 수도 있다. GPU 가 광선 (54) 이 프리미티브 (52C) 를 교차하지 않는다고 결정하는 경우, GPU (12) 는 노드 (62D) 까지 BVH 트리 (60) 를 회귀적으로 순회할 수도 있고 노드 (62D) 에 링크된 프리미티브 (52D) 에 대한 광선 프리미티브 교차 테스트를 수행할 수도 있다. GPU (12) 는 프리미티브 (52D) 에 대한 광선 프리미티브 교차 테스트로부터 광선 (54) 이 프리미티브 (52D) 를 교차하는 것을 결정할 수도 있다. 하지만, GPU (12) 는 노드 (62C) 까지 그리고 노드 (62E) 에 이르기까지 BVH 트리 (60) 를 회귀적으로 순회하는 것을 계속할 수도 있고, 노드 (62E) 와 연관된 바운딩 볼륨 (56E) 에 대해 광선 박스 교차 테스트를 수행할 수도 있다. GPU (12) 는 광선 (54) 이 바운딩 볼륨 (56E) 을 교차하지 않는다고 결정할 수도 있고, 이에 의해 광선 (54) 에 대한 BVH 트리 (60) 의 순회를 종료한다.
도 7 은 광선 프리미티브 교차를 찾아내기 위해 예시의 계층적 트리 구조를 순회하기 위한 시작 노드를 결정하기 위한 예시의 프로세스를 도시하는 플로우챠트이다. 도 7 에 나타낸 바와 같이, 프로세스는 CPU (6) 또는 GPU (12) 와 같은, 적어도 하나의 프로세서에 의해, 계층적 데이터 구조에서 복수의 프리미티브들을 조직화하는 것 (702) 을 포함할 수도 있다. 프로세스는 CPU (6) 또는 GPU (12) 에 의해, 계층적 데이터 구조의 비 루트 노드들과 연관된 복수의 바운딩 볼륨들을 래스터화하는 것 (704) 을 더 포함할 수도 있다. 프로세스는 CPU (6) 또는 GPU (12) 에 의해, 복수의 바운딩 볼륨들을 오프 스크린 렌더 타겟으로 래스터화 하는 것에 기초하여, 계층적 데이터 구조의 순회를 시작하기 위해 계층적 데이터 구조에서 시작 노드로서 계층적 데이터 구조의 비 루트 노드를 결정하는 것 (706) 을 더 포함할 수도 있다. 프로세스는 CPU (6) 또는 GPU (12) 에 의해, 광선에 의해 교차되는 프리미티브를 결정하기 위해 시작 노드로부터 시작하는 계층적 데이터 구조를 순회하는 것 (708) 을 더 포함할 수도 있다.
일부 예들에서, 프로세스는 GPU (12) 에 의해, 복수의 바운딩 볼륨들의 복수의 표현들을 오프 스크린 렌더 타겟으로 래스터화하는 것을 더 포함할 수도 있다. 프로세스는, CPU (6) 또는 GPU (12) 에 의해, 표현의 출력 컬러에 적어도 부분적으로 기초하여 복수의 바운딩 볼륨들의 복수의 표현들의 표현과 연관된 노드를 결정하는 것을 더 포함할 수도 있다. 프로세스는, CPU (6) 또는 GPU (12) 에 의해, 복수의 표현들의 하나 이상의 표현들에서 하나 이상의 화소들이 광선에 매핑되는 것을 결정하는 것, 및 CPU (6) 또는 GPU (12) 에 의해, 시작 노드로서 하나 이상의 화소들과 연관된 계층적 데이터 구조의 노드를 결정하는 것을 더 포함할 수도 있다.
일부 예들에서, 프로세스는 CPU (6) 또는 GPU (12) 에 의해, 복수의 표현들의 2 이상의 표현들이 오버랩하는 것을 결정하는 것, GPU (12) 에 의해, 최하위 공통 선조 표현의 출력 컬러와 2 이상의 표현들의 오버랩의 영역을 채우는 것, 및 CPU (6) 또는 GPU (12) 에 의해, 시작 노드로서 최하위 공통 선조의 출력 컬러와 연관되는 계층적 데이터 구조의 노드를 결정하는 것을 더 포함할 수도 있다. 일부 예들에서, 프로세스는 GPU (12) 에 의해, 복수의 바운딩 볼륨들보다 상대적으로 더 낮은 해상도로 오프 스크린 렌더 타겟으로 복수의 바운딩 볼륨들의 복수의 표현들을 래스터화하는 것을 더 포함할 수도 있다.
하나 이상의 예들에서, 기재된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되는 경우, 기능들은 컴퓨터 판독가능 매체 상에서 하나 이상의 명령들 또는 코드로서 저장되거나 송신될 수도 있다. 컴퓨터 판독가능 매체들은 일 장소에서 다른 장소로 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체들 또는 컴퓨터 데이터 저장 매체들 포함할 수도 있다. 데이터 저장 매체들은 이 개시물에 기재된 기법들의 구현을 위해 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 프로세서들 또는 하나 이상의 컴퓨터들에 의해 액세스될 수 있는 임의의 가용 매체들일 수도 있다. 한정이 아닌 예시로서, 그러한 컴퓨터 판독가능 매체들은 RAM, ROM, EEPROM, CD-ROM 또는 다른 광학 디스크 저장, 자기 디스크 저장 또는 다른 자기 저장 디바이스들, 또는 명령들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 반송하거나 저장하기 위해 사용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 또한, 임의의 접속은 컴퓨터 판독가능 매체로 적절히 칭한다. 예를 들어, 소프트웨어가 동축 케이블, 광섬유 케이블, 꼬임쌍선, 디지털 가입자 라인 (DSL) 또는 무선 기술들, 예컨대 적외선, 무선, 및 마이크로파를 사용하여 웹사이트, 서버 또는 다른 원격 광 소스로부터 송신되면, 동축 케이블, 광섬유 케이블, 꼬임쌍선, DSL, 또는 기술들, 예컨대 적외선, 무선, 및 마이크로파는 매체의 정의 내에 포함된다. 디스크 (disk) 및 디스크 (disc) 는, 본 명세서에서 사용된 바와 같이, 컴팩 디스크 (CD), 레이저 디스크, 광학 디스크, 디지털 다기능 디스크 (DVD), 플로피 디스크 및 블루레이 디스크를 포함하고, 여기서 디스크들 (disks) 은 보통 데이터를 자기적으로 재생하고, 디스크들 (disc) 은 데이터를 레이저에 의해 광학적으로 재생한다. 위의 조합들은 또한 컴퓨터 판독가능 매체들의 범위 내에 포함된다.
코드는 하나 이상의 프로세서들, 예컨대 하나 이상의 디지털 신호 프로세서들 (DPS들), 범용 마이크로프로세서들, 어플리케이션 특정 집적 회로들 (AISC들), 필드 프로그램가능 로직 어레이들 (FPGA들), 또는 다른 등가의 집적 또는 이산 로직 회로에 의해 실행될 수도 있다. 따라서, 본 명세서에서 사용된 바와 같이, 용어 "프로세서" 및 "프로세싱 유닛" 은 앞에 언급한 구조 또는 본 명세서에 기재된 기법들의 구현을 위해 적합한 임의의 다른 구조 중 어느 것을 지칭할 수도 있다. 부가적으로, 일부 양태들에서, 본 명세서에 기재된 기능은 인코딩 및 디코딩을 위해 구성되거나 결합된 코덱으로 통합된 전용 하드웨어 및/또는 소프트웨어 모듈 내에 제공될 수도 있다. 또한, 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들에서 전부 구현될 수도 있다.
이 개시물의 기법들은 무선 핸드셋, 집적 회로 (IC) 또는 IC들의 세트 (즉, 칩셋) 를 포함한, 광범위한 디바이스들 또는 장치들에서 구현될 수도 있다. 개시된 기법들을 수행하기 위해 구성된 디바이스들의 기능적 양태들을 강조하기 위해 상이한 하드웨어 유닛들에 의해 다양한 컴포넌트들, 모듈들 또는 유닛들이 이 개시물에 기재되지만, 반드시 상이한 하드웨어 유닛들에 의한 실현을 필요로 하지는 않는다. 오히려, 위에 기재된 바와 같이, 다양한 유닛들은 적절한 소프트웨어 및/또는 펌웨어와 협력하여, 상술한 바와 같이 하나 이상의 프로세서들을 포함하는, 상호동작적 하드웨어 유닛들의 집합에 의해 제공되거나 코덱 하드웨어 유닛에서 결합될 수도 있다.
다양한 예들이 기재되었다. 이들 및 다른 예들은 다음의 청구항들의 범위 내에 있다.

Claims (28)

  1. 적어도 하나의 프로세서에 의해, 계층적 데이터 구조에서 복수의 바운딩 볼륨들을 조직화하는 단계;
    상기 적어도 하나의 프로세서에 의해, 상기 계층적 데이터 구조의 비 루트 노드들과 연관된 상기 복수의 바운딩 볼륨들의 표현들을 픽셀들로서 오프 스크린 렌더 타겟에 래스터화하는 단계;
    상기 적어도 하나의 프로세서에 의해, 그리고 광선에 매핑되는 상기 오프 스크린 렌더 타겟에 래스터화된 상기 픽셀들 중 하나의 컬러 값을 샘플링하는 것에 적어도 부분적으로 기초하여, 상기 계층적 데이터 구조의 순회를 시작하기 위해 상기 계층적 데이터 구조에서의 시작 노드로서 상기 계층적 데이터 구조의 비 루트 노드를 결정하는 단계; 및
    상기 적어도 하나의 프로세서에 의해, 상기 광선이 상기 복수의 바운딩 볼륨들 중 하나에 의해 바운딩되는 프리미티브를 교차하는지 여부를 결정하기 위해 상기 시작 노드로부터 시작하는 상기 계층적 데이터 구조를 순회하는 단계를 포함하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하는 방법.
  2. 제 1 항에 있어서,
    상기 적어도 하나의 프로세서에 의해, 상기 시작 노드로서 상기 픽셀들 중 하나와 연관된 상기 계층적 데이터 구조의 노드를 결정하는 단계를 더 포함하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하는 방법.
  3. 제 1 항에 있어서,
    상기 적어도 하나의 프로세서에 의해, 상기 복수의 바운딩 볼륨들의 상기 표현들 중 2 이상이 오버랩하는 것을 결정하는 단계;
    상기 적어도 하나의 프로세서에 의해, 상기 복수의 바운딩 볼륨들의 상기 표현들 중 2 이상의 오버랩의 영역을, 최하위 공통 선조 (ancestor) 표현의 컬러 값으로 채우는 단계; 및
    상기 적어도 하나의 프로세서에 의해, 상기 시작 노드로서 상기 최하위 공통 선조 표현의 컬러 값과 연관되는 상기 계층적 데이터 구조의 노드를 결정하는 단계를 더 포함하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하는 방법.
  4. 제 1 항에 있어서,
    상기 적어도 하나의 프로세서에 의해, 상기 복수의 바운딩 볼륨들의 상기 표현들을 상기 복수의 바운딩 볼륨들 보다 상대적으로 더 낮은 해상도에서 상기 오프 스크린 렌더 타겟으로 래스터화하는 단계를 더 포함하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하는 방법.
  5. 제 1 항에 있어서,
    상기 복수의 바운딩 볼륨들은 상기 계층적 데이터 구조의 모든 비 루트 노드들 보다 더 적게 연관되는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하는 방법.
  6. 제 1 항에 있어서,
    상기 계층적 데이터 구조의 비 루트 노드들과 연관된 상기 복수의 바운딩 볼륨들의 상기 표현들은, 상기 복수의 바운딩 볼륨들에 의해 바운딩된 프리미티브들의 표현들을 포함하지 않는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하는 방법.
  7. 광선 추적을 위한 그래픽스 데이터를 프로세싱하도록 구성된 장치로서,
    계층적 데이터 구조에서 조직화된 복수의 바운딩 볼륨들을 저장하도록 구성된 메모리; 및
    적어도 하나의 프로세서를 포함하고,
    상기 적어도 하나의 프로세서는,
    상기 계층적 데이터 구조의 비 루트 노드들과 연관된 상기 복수의 바운딩 볼륨들의 표현들을 픽셀들로서 오프 스크린 렌더 타겟에 래스터화하고;
    광선에 매핑되는 상기 오프 스크린 렌더 타겟에 래스터화된 상기 픽셀들 중 하나의 컬러 값을 샘플링하는 것에 적어도 부분적으로 기초하여, 상기 계층적 데이터 구조의 순회를 시작하기 위해 상기 계층적 데이터 구조에서의 시작 노드로서 상기 계층적 데이터 구조의 비 루트 노드를 결정하고; 그리고
    상기 광선이 상기 복수의 바운딩 볼륨들 중 하나에 의해 바운딩되는 프리미티브를 교차하는지 여부를 결정하기 위해 상기 시작 노드로부터 시작하는 상기 계층적 데이터 구조를 순회하도록 구성되는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하도록 구성된 장치.
  8. 제 7 항에 있어서,
    상기 적어도 하나의 프로세서는 또한,
    상기 시작 노드로서 상기 픽셀들 중 하나와 연관된 상기 계층적 데이터 구조의 노드를 결정하도록 구성되는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하도록 구성된 장치.
  9. 제 7 항에 있어서,
    상기 적어도 하나의 프로세서는 또한,
    상기 복수의 바운딩 볼륨들의 상기 표현들 중 2 이상이 오버랩하는 것을 결정하고;
    상기 복수의 바운딩 볼륨들의 상기 표현들 중 2 이상의 오버랩의 영역을, 최하위 공통 선조 표현의 컬러 값으로 채우고; 그리고
    상기 시작 노드로서 상기 최하위 공통 선조 표현의 컬러 값과 연관되는 상기 계층적 데이터 구조의 노드를 결정하도록 구성되는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하도록 구성된 장치.
  10. 제 7 항에 있어서,
    상기 적어도 하나의 프로세서는 또한,
    상기 복수의 바운딩 볼륨들의 상기 표현들을 상기 복수의 바운딩 볼륨들 보다 상대적으로 더 낮은 해상도에서 상기 오프 스크린 렌더 타겟으로 래스터화하도록 구성되는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하도록 구성된 장치.
  11. 제 7 항에 있어서,
    상기 복수의 바운딩 볼륨들은 상기 계층적 데이터 구조의 모든 비 루트 노드들 보다 더 적게 연관되는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하도록 구성된 장치.
  12. 계층적 데이터 구조에서 복수의 바운딩 볼륨들을 조직화하는 수단;
    상기 계층적 데이터 구조의 비 루트 노드들과 연관된 상기 복수의 바운딩 볼륨들의 표현들을 픽셀들로서 오프 스크린 렌더 타겟에 래스터화하는 수단;
    광선에 매핑되는 상기 오프 스크린 렌더 타겟에 래스터화된 상기 픽셀들 중 하나의 컬러 값을 샘플링하는 것에 적어도 부분적으로 기초하여, 상기 계층적 데이터 구조의 순회를 시작하기 위해 상기 계층적 데이터 구조에서의 시작 노드로서 상기 계층적 데이터 구조의 비 루트 노드를 결정하는 수단; 및
    상기 광선이 상기 복수의 바운딩 볼륨들 중 하나에 의해 바운딩되는 프리미티브를 교차하는지 여부를 결정하기 위해 상기 시작 노드로부터 시작하는 상기 계층적 데이터 구조를 순회하는 수단을 포함하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하는 장치.
  13. 제 12 항에 있어서,
    상기 시작 노드로서 상기 픽셀들 중 하나와 연관된 상기 계층적 데이터 구조의 노드를 결정하는 수단을 더 포함하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하는 장치.
  14. 제 12 항에 있어서,
    상기 복수의 바운딩 볼륨들의 상기 표현들 중 2 이상이 오버랩하는 것을 결정하는 수단;
    상기 복수의 바운딩 볼륨들의 상기 표현들 중 2 이상의 오버랩의 영역을, 최하위 공통 선조 표현의 컬러 값으로 채우는 수단; 및
    상기 시작 노드로서 상기 최하위 공통 선조 표현의 컬러 값과 연관되는 상기 계층적 데이터 구조의 노드를 결정하는 수단을 더 포함하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하는 장치.
  15. 제 12 항에 있어서,
    상기 복수의 바운딩 볼륨들의 상기 표현들을 상기 복수의 바운딩 볼륨들 보다 상대적으로 더 낮은 해상도에서 상기 오프 스크린 렌더 타겟으로 래스터화하는 수단을 더 포함하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하는 장치.
  16. 제 12 항에 있어서,
    상기 복수의 바운딩 볼륨들은 상기 계층적 데이터 구조의 모든 비 루트 노드들 보다 더 적게 연관되는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하는 장치.
  17. 광선 추적을 위한 그래픽스 데이터를 프로세싱하기 위한 명령들을 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서,
    상기 명령들은, 실행될 때, 하나 이상의 프로그램가능 프로세서들로 하여금,
    적어도 하나의 프로세서에 의해, 계층적 데이터 구조에서 복수의 바운딩 볼륨들을 조직화하게 하고;
    상기 적어도 하나의 프로세서에 의해, 상기 계층적 데이터 구조의 비 루트 노드들과 연관된 상기 복수의 바운딩 볼륨들의 표현들을 픽셀들로서 오프 스크린 렌더 타겟에 래스터화하게 하고;
    상기 적어도 하나의 프로세서에 의해, 그리고 광선에 매핑되는 상기 오프 스크린 렌더 타겟에 래스터화된 상기 픽셀들 중 하나의 컬러 값을 샘플링하는 것에 적어도 부분적으로 기초하여, 상기 계층적 데이터 구조의 순회를 시작하기 위해 상기 계층적 데이터 구조에서의 시작 노드로서 상기 계층적 데이터 구조의 비 루트 노드를 결정하게 하며; 그리고
    상기 적어도 하나의 프로세서에 의해, 상기 광선이 상기 복수의 바운딩 볼륨들 중 하나에 의해 바운딩되는 프리미티브를 교차하는지 여부를 결정하기 위해 상기 시작 노드로부터 시작하는 상기 계층적 데이터 구조를 순회하게 하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하기 위한 명령들을 저장하는 비일시적 컴퓨터 판독가능 저장 매체.
  18. 제 17 항에 있어서,
    실행될 때, 하나 이상의 프로그램가능 프로세서들로 하여금, 상기 시작 노드로서 상기 픽셀들 중 하나와 연관된 상기 계층적 데이터 구조의 노드를 결정하게 하는,
    명령들을 더 포함하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하기 위한 명령들을 저장하는 비일시적 컴퓨터 판독가능 저장 매체.
  19. 제 17 항에 있어서,
    실행될 때, 하나 이상의 프로그램가능 프로세서들로 하여금,
    상기 복수의 바운딩 볼륨들의 상기 표현들 중 2 이상이 오버랩하는 것을 결정하게 하고;
    상기 복수의 바운딩 볼륨들의 상기 표현들 중 2 이상의 오버랩의 영역을, 최하위 공통 선조 표현의 컬러 값으로 채우게 하며; 그리고
    상기 시작 노드로서 상기 최하위 공통 선조 표현의 컬러 값과 연관되는 상기 계층적 데이터 구조의 노드를 결정하게 하는,
    명령들을 더 포함하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하기 위한 명령들을 저장하는 비일시적 컴퓨터 판독가능 저장 매체.
  20. 제 17 항에 있어서,
    실행될 때, 하나 이상의 프로그램가능 프로세서들로 하여금,
    상기 복수의 바운딩 볼륨들의 상기 표현들을 상기 복수의 바운딩 볼륨들 보다 상대적으로 더 낮은 해상도에서 상기 오프 스크린 렌더 타겟으로 래스터화게 하는,
    명령들을 더 포함하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하기 위한 명령들을 저장하는 비일시적 컴퓨터 판독가능 저장 매체.
  21. 제 17 항에 있어서,
    상기 복수의 바운딩 볼륨들은 상기 계층적 데이터 구조의 모든 비 루트 노드들 보다 더 적게 연관되게 하는, 광선 추적을 위한 그래픽스 데이터를 프로세싱하기 위한 명령들을 저장하는 비일시적 컴퓨터 판독가능 저장 매체.
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
KR1020167031809A 2014-04-21 2015-04-17 광선 추적 어플리케이션들에서 트리 순회를 위한 시작 노드 결정 KR101820621B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/257,385 US9697640B2 (en) 2014-04-21 2014-04-21 Start node determination for tree traversal in ray tracing applications
US14/257,385 2014-04-21
PCT/US2015/026406 WO2015164204A1 (en) 2014-04-21 2015-04-17 Start node determination for tree traversal in ray tracing applications

Publications (2)

Publication Number Publication Date
KR20160148582A KR20160148582A (ko) 2016-12-26
KR101820621B1 true KR101820621B1 (ko) 2018-01-19

Family

ID=53002825

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167031809A KR101820621B1 (ko) 2014-04-21 2015-04-17 광선 추적 어플리케이션들에서 트리 순회를 위한 시작 노드 결정

Country Status (7)

Country Link
US (1) US9697640B2 (ko)
EP (1) EP3134874A1 (ko)
JP (1) JP6273380B2 (ko)
KR (1) KR101820621B1 (ko)
CN (1) CN106233338B (ko)
BR (1) BR112016024477A2 (ko)
WO (1) WO2015164204A1 (ko)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2526598B (en) 2014-05-29 2018-11-28 Imagination Tech Ltd Allocation of primitives to primitive blocks
KR102244619B1 (ko) * 2014-09-30 2021-04-26 삼성전자 주식회사 가속 구조를 생성 및 탐색하는 방법
KR102467031B1 (ko) * 2015-08-31 2022-11-14 삼성전자주식회사 가속 구조를 생성 및 탐색하는 방법
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
US11010956B2 (en) * 2015-12-09 2021-05-18 Imagination Technologies Limited Foveated rendering
US10565776B2 (en) 2015-12-12 2020-02-18 Adshir Ltd. Method for fast generation of path traced reflections on a semi-reflective surface
KR102604737B1 (ko) * 2016-01-11 2023-11-22 삼성전자주식회사 가속 구조를 생성하는 방법 및 장치
US10614612B2 (en) 2018-06-09 2020-04-07 Adshir Ltd. Fast path traced reflections for augmented reality
US10410401B1 (en) 2017-07-26 2019-09-10 Adshir Ltd. Spawning secondary rays in ray tracing from non primary rays
US12008704B2 (en) 2016-01-28 2024-06-11 Snap Inc. System for photo-realistic reflections in augmented reality
JP6728735B2 (ja) * 2016-02-08 2020-07-22 株式会社ダイフク 物品搬送設備
US9818221B2 (en) * 2016-02-25 2017-11-14 Qualcomm Incorporated Start node determination for tree traversal for shadow rays in graphics processing
US9805495B2 (en) * 2016-02-26 2017-10-31 Qualcomm Incorporated Single pass bounding volume hierarchy rasterization
US10043303B2 (en) * 2016-03-30 2018-08-07 Intel IP Corporation Methods and apparatus for more efficient ray tracing of instanced geometry
KR20180050124A (ko) * 2016-11-04 2018-05-14 삼성전자주식회사 가속 구조를 생성하는 방법 및 장치
US10417807B2 (en) * 2017-07-13 2019-09-17 Imagination Technologies Limited Hybrid hierarchy of bounding and grid structures for ray tracing
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
US10885698B2 (en) * 2018-08-10 2021-01-05 Nvidia Corporation Method for programmable timeouts of tree traversal mechanisms in hardware
US10810785B2 (en) * 2018-08-10 2020-10-20 Nvidia Corporation Method for forward progress tree traversal mechanisms in hardware
US10740952B2 (en) * 2018-08-10 2020-08-11 Nvidia Corporation Method for handling of out-of-order opaque and alpha ray/primitive intersections
US10825230B2 (en) 2018-08-10 2020-11-03 Nvidia Corporation Watertight ray triangle intersection
TWI719379B (zh) * 2018-12-20 2021-02-21 國立中山大學 光線追蹤方法與電腦程式產品
US11017581B1 (en) 2020-01-04 2021-05-25 Adshir Ltd. Method for constructing and traversing accelerating structures
US11295508B2 (en) * 2020-06-10 2022-04-05 Nvidia Corporation Hardware-based techniques applicable for ray tracing for efficiently representing and processing an arbitrary bounding volume
CN113674389B (zh) * 2021-10-25 2022-03-01 深圳须弥云图空间科技有限公司 场景渲染方法、装置、电子设备及存储介质
US20240203036A1 (en) * 2022-12-16 2024-06-20 Advanced Micro Devices, Inc. Technique for generating a bounding volume hierarchy
CN119131221A (zh) * 2024-11-14 2024-12-13 源卓微纳科技(苏州)股份有限公司 图形数据的栅格化方法及栅格化系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050243346A1 (en) 2004-05-03 2005-11-03 Microsoft Corporation Planar mapping of graphical elements
US7002571B2 (en) 2002-06-04 2006-02-21 Intel Corporation Grid-based loose octree for spatial partitioning
US9424685B2 (en) 2012-07-31 2016-08-23 Imagination Technologies Limited Unified rasterization and ray tracing rendering environments

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7499053B2 (en) 2000-06-19 2009-03-03 Mental Images Gmbh Real-time precision ray tracing
US8188997B2 (en) * 2000-06-19 2012-05-29 Mental Images Gmbh Accelerated ray tracing using shallow bounding volume hierarchies
US8411088B2 (en) * 2000-06-19 2013-04-02 Nvidia Corporation Accelerated ray tracing
US7340711B2 (en) 2004-06-04 2008-03-04 Cadence Design Systems, Inc. Method and apparatus for local preferred direction routing
US7289119B2 (en) * 2005-05-10 2007-10-30 Sony Computer Entertainment Inc. Statistical rendering acceleration
US20080024489A1 (en) 2006-07-28 2008-01-31 Robert Allen Shearer Cache Utilization Optimized Ray Traversal Algorithm with Minimized Memory Bandwidth Requirements
US7830379B2 (en) 2006-09-19 2010-11-09 Caustic Graphics, Inc. Architectures for parallelized intersection testing and shading for ray-tracing rendering
GB0710795D0 (en) * 2007-06-05 2007-07-18 Arm Norway As Method of and apparatus for processing graphics
US7773087B2 (en) 2007-04-19 2010-08-10 International Business Machines Corporation Dynamically configuring and selecting multiple ray tracing intersection methods
US8212816B1 (en) 2007-12-17 2012-07-03 Nvidia Corporation System, method, and computer program product for parallel ray tracing traversal and intersection utilizing a single instruction multiple data (SIMD) processing architecture
US8502819B1 (en) 2007-12-17 2013-08-06 Nvidia Corporation System and method for performing ray tracing node traversal in image rendering
WO2009117691A2 (en) * 2008-03-21 2009-09-24 Caustic Graphics, Inc Architectures for parallelized intersection testing and shading for ray-tracing rendering
US8253730B1 (en) 2008-08-29 2012-08-28 Adobe Systems Incorporated System and method for construction of data structures for ray tracing using bounding hierarchies
WO2010036716A1 (en) * 2008-09-23 2010-04-01 Edda Technology, Inc. Methods for interactive labeling of tubular structures in medical imaging
US8379022B2 (en) * 2008-09-26 2013-02-19 Nvidia Corporation Fragment shader for a hybrid raytracing system and method of operation
US9483864B2 (en) * 2008-12-05 2016-11-01 International Business Machines Corporation System and method for photorealistic imaging using ambient occlusion
JP5419044B2 (ja) * 2008-12-20 2014-02-19 国立大学法人 東京大学 ボリュームデータの実時間レンダリング方法及び装置
US8570322B2 (en) 2009-05-12 2013-10-29 Nvidia Corporation Method, system, and computer program product for efficient ray tracing of micropolygon geometry
US8275805B2 (en) * 2010-03-26 2012-09-25 Intel Corporation Method of decreasing a total computation time for a visual simulation loop in a virtual world application
US8692825B2 (en) 2010-06-24 2014-04-08 International Business Machines Corporation Parallelized streaming accelerated data structure generation
US8797323B2 (en) 2011-01-18 2014-08-05 Intel Corporation Shadowing dynamic volumetric media
US8791945B2 (en) 2011-05-18 2014-07-29 Intel Corporation Rendering tessellated geometry with motion and defocus blur
US8638331B1 (en) 2011-09-16 2014-01-28 Disney Enterprises, Inc. Image processing using iterative generation of intermediate images using photon beams of varying parameters
CN103765481B (zh) 2011-08-05 2016-06-29 想象技术有限公司 用于3-d场景加速结构创建和更新的系统和方法
KR20130092055A (ko) 2012-02-10 2013-08-20 삼성전자주식회사 영상 처리 장치 및 방법
CN102609992A (zh) * 2012-02-12 2012-07-25 北京航空航天大学 基于三角网格变形体的自碰撞检测方法
JP5545307B2 (ja) * 2012-02-21 2014-07-09 コニカミノルタ株式会社 画像処理装置及び画像処理方法
US9224235B2 (en) * 2013-03-20 2015-12-29 Nvidia Corporation System, method, and computer program product for compression of a bounding volume hierarchy
US9501860B2 (en) * 2014-01-03 2016-11-22 Intel Corporation Sparse rasterization
KR102219289B1 (ko) 2014-05-27 2021-02-23 삼성전자 주식회사 레이 트레이싱 시스템에서의 가속 구조 탐색 장치 및 그 탐색 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7002571B2 (en) 2002-06-04 2006-02-21 Intel Corporation Grid-based loose octree for spatial partitioning
US20050243346A1 (en) 2004-05-03 2005-11-03 Microsoft Corporation Planar mapping of graphical elements
US9424685B2 (en) 2012-07-31 2016-08-23 Imagination Technologies Limited Unified rasterization and ray tracing rendering environments

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Reshetov, Alexander, Alexei Soupikov, and Jim Hurley. "Multi-level ray tracing algorithm." ACM Transactions on Graphics (TOG) 24.3 (2005): 1176-1185

Also Published As

Publication number Publication date
EP3134874A1 (en) 2017-03-01
KR20160148582A (ko) 2016-12-26
US20150302629A1 (en) 2015-10-22
CN106233338B (zh) 2019-12-03
US9697640B2 (en) 2017-07-04
BR112016024477A2 (pt) 2017-08-15
JP6273380B2 (ja) 2018-01-31
CN106233338A (zh) 2016-12-14
JP2017516209A (ja) 2017-06-15
WO2015164204A1 (en) 2015-10-29

Similar Documents

Publication Publication Date Title
KR101820621B1 (ko) 광선 추적 어플리케이션들에서 트리 순회를 위한 시작 노드 결정
KR102003655B1 (ko) 그래픽 프로세싱에서 셰도우 레이들에 대한 트리 횡단을 위한 시작 노드 결정
JP6219552B1 (ja) 内積ベースの固定関数論理を使用したレイ−ボックス交差テスト
US9984492B2 (en) Efficient hierarchy traversal in ray tracing applications
US9773340B2 (en) Rendering using ray tracing to generate a visibility stream
CN108701367B (zh) 单遍次包围体阶层光栅化
US11282260B2 (en) Bounded volume hierarchy (BVH) tree traversal using spatial division
KR102140387B1 (ko) 대역폭-압축된 그래픽스 데이터의 저장
US9852539B2 (en) Single pass surface splatting
CN111127620B (zh) 一种生成半球域采样模式的方法、装置及计算机存储介质
CN111243073B (zh) 一种规则栅格的相交加速方法、装置及计算机存储介质

Legal Events

Date Code Title Description
PA0105 International application

Patent event date: 20161115

Patent event code: PA01051R01D

Comment text: International Patent Application

PG1501 Laying open of application
A201 Request for examination
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20170829

Comment text: Request for Examination of Application

PA0302 Request for accelerated examination

Patent event date: 20170829

Patent event code: PA03022R01D

Comment text: Request for Accelerated Examination

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20170918

Patent event code: PE09021S01D

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20171221

PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20180115

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20180115

End annual number: 3

Start annual number: 1

PG1601 Publication of registration
PC1903 Unpaid annual fee