[go: up one dir, main page]

KR102836854B1 - 최하위 레벨 경계 볼륨 계층을 위한 레벨들의 저장 - Google Patents

최하위 레벨 경계 볼륨 계층을 위한 레벨들의 저장

Info

Publication number
KR102836854B1
KR102836854B1 KR1020247025179A KR20247025179A KR102836854B1 KR 102836854 B1 KR102836854 B1 KR 102836854B1 KR 1020247025179 A KR1020247025179 A KR 1020247025179A KR 20247025179 A KR20247025179 A KR 20247025179A KR 102836854 B1 KR102836854 B1 KR 102836854B1
Authority
KR
South Korea
Prior art keywords
nodes
data
memory
bvh
levels
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
KR1020247025179A
Other languages
English (en)
Other versions
KR20240121341A (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 KR20240121341A publication Critical patent/KR20240121341A/ko
Application granted granted Critical
Publication of KR102836854B1 publication Critical patent/KR102836854B1/ko
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/04Indexing scheme for image data processing or generation, in general involving 3D image data

Landscapes

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

Abstract

본 개시는 장치, 예를 들어 GPU 를 포함하는 그래픽스 프로세싱을 위한 방법들 및 디바이스들에 관한 것이다. 장치는 복수의 레벨들 및 복수의 노드들을 포함하는 BVH 구조를 구성할 수도 있고, BVH 구조는 장면 내 복수의 프리미티브들에 대한 지오메트리 데이터와 연관된다. 장치는 또한 BVH 구조 내 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 GMEM 내 저장량을 식별할 수 있다. 또한, 장치는 복수의 제1 노드들을 포함하는 제1 BVH 섹션과 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 BVH 구조를 할당할 수도 있다. 장치는 또한 GMEM에 복수의 제1 노드들과 연관된 제1 데이터 그리고 시스템 메모리에 복수의 제1 노드들 및 복수의 제2 노드들과 연관된 제2 데이터를 저장할 수 있다.

Description

최하위 레벨 경계 볼륨 계층을 위한 레벨들의 저장
관련 출원에 대한 상호 참조
본원은 2022년 2월 4일자로 출원되고 발명의 명칭이 “STORAGE OF LEVELS FOR BOTTOM LEVEL BOUNDING VOLUME HIERARCHY” 인 미국 특허 출원 번호 17/650,064 의 혜택을 주장하고, 이는 참조에 의해 본원에 전부 명시적으로 원용된다.
기술분야
본 개시는 일반적으로 프로세싱 시스템들에 관한 것이고, 보다 특히, 그래픽스 프로세싱을 위한 하나 이상의 기법들에 관한 것이다.
서론
컴퓨팅 디바이스들은 종종 (예: 그래픽스 프로세싱 유닛(GPU), 중앙 프로세싱 유닛(CPU), 디스플레이 프로세서 등을 활용한) 그래픽스 및/또는 디스플레이 프로세싱을 수행하여 시각적 콘텐츠를 렌더링하고 표시한다. 이러한 컴퓨팅 디바이스는 예를 들어, 컴퓨터 워크스테이션, 스마트폰과 같은 모바일 폰, 임베디드 시스템, 개인용 컴퓨터, 태블릿 컴퓨터 및 비디오 게임 콘솔을 포함할 수도 있다. GPU들은, 그래픽스 프로세싱 커맨드들을 실행하고 프레임을 출력하기 위해 함께 동작하는 하나 이상의 프로세싱 스테이지들을 포함하는 그래픽스 프로세싱 파이프라인을 실행하도록 구성된다. 중앙 프로세싱 유닛 (CPU) 이 하나 이상의 그래픽스 프로세싱 커맨드들을 GPU 에 발행함으로써 GPU 의 동작을 제어할 수도 있다. 현대의 CPU들은 통상적으로 다수의 애플리케이션들을 동시에 실행할 수 있으며, 이들 각각은 실행 동안 GPU를 활용해야 할 수도 있다. 디스플레이 프로세서는 CPU로부터 수신된 디지털 정보를 아날로그 값으로 변환하도록 구성되며 시각적 콘텐츠를 표시하기 위한 디스플레이 패널에 커맨드들을 발행할 수도 있다. 디스플레이 상에 시각적 제시를 위한 콘텐츠를 제공하는 디바이스는 GPU 및/또는 디스플레이 프로세서를 활용할 수도 있다.
현재, 향상된 그래픽스 프로세싱에 대한 필요성이 존재한다. 예를 들어, 그래픽스 프로세싱 분야의 현재 노드 저장 기법들은 효율적으로 가속 구조들을 저장하지 못할 수 있다. 따라서, 가속 구조들을 효율적으로 저장하기 위한 향상된 노드 저장 기법들에 대한 증가된 필요성이 나타났다.
간략한 개요
다음은 하나 이상의 양태들의 간략화된 개요를, 그러한 양태들의 기본적인 이해를 제공하기 위해 제시한다. 이 개요는 모든 고려된 양태들의 포괄적 개관이 아니며, 모든 양태들의 핵심적인 또는 중요한 엘리먼트들을 식별하는 것으로도, 임의의 또는 모든 양태들의 범위를 기술하는 것으로도 의도되지 않는다. 그의 유일한 목적은 이후에 제시되는 더 상세한 설명에 대한 전제로서 하나 이상의 양태들의 일부 개념들을 간략화된 형태로 제시하는 것이다.
본 개시의 양태에서, 방법, 컴퓨터 판독가능 매체, 및 장치가 제공된다. 장치는 그래픽스 프로세싱 유닛(GPU), GPU, 또는 그래픽스 프로세싱을 수행할 수 있는 임의의 장치일 수도 있다. 장치는 복수의 레벨들 및 복수의 노드들을 포함하는 경계 볼륨 계층(BVH) 구조를 구성할 수도 있고, 복수의 레벨들의 각각은 복수의 노드들 중 적어도 하나의 노드를 포함하며, BVH 구조는 장면 내 복수의 프리미티브(primitive)들에 대한 지오메트리 데이터와 연관된다. 장치는 또한 BVH 구조 내 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 그래픽스 메모리(GMEM) 내 저장량을 식별할 수도 있다. 추가적으로, 장치는, GMEM 내 저장량에 기초하여, 복수의 제1 노드들을 포함하는 제1 BVH 섹션 및 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 BVH 구조를 할당할 수도 있고, BVH 구조는 복수의 제1 노드들 및 복수의 제2 노드들을 포함하는 복수의 노드들의 계층에 기초하여 할당된다. 장치는 또한 GMEM에 복수의 제1 노드들과 연관된 제1 데이터 그리고 시스템 메모리에 복수의 제1 노드들 및 복수의 제2 노드들과 연관된 제2 데이터를 저장할 수도 있다. 장치는 또한 제1 데이터 또는 제2 데이터 중 적어도 하나를 취출하기 전에, 복수의 제1 노드들의 제1 어드레스 또는 복수의 제2 노드들의 제2 어드레스 중 적어도 하나를 계산하고, 여기서 제1 데이터 또는 제2 데이터는 계산된 제1 어드레스 또는 계산된 제2 어드레스에 기초하여 취출된다. 더욱이, 장치는 제1 데이터 및 제2 데이터를 저장할 시에, GMEM으로부터의 제1 데이터 또는 시스템 메모리로부터의 제2 데이터 중 적어도 하나를 취출할 수도 있다. 장치는 또한 제1 데이터 또는 제2 데이터 중 적어도 하나에 기초하여, 복수의 노드들 중 복수의 내부 노드들에 대한 광선 삼각형 교차(ray triangle intersection) 또는 복수의 노드들 중 복수의 리프 노드들에 대한 광선 박스 교차(ray box intersection) 중 적어도 하나를 수행할 수도 있다.
본 개시의 하나 이상의 예들의 상세들은 첨부 도면 및 아래의 설명에 제시되어 있다. 본 개시의 다른 특징, 목적 및 이점들은 상세한 설명 및 도면, 그리고 특허청구범위로부터 분명해질 것이다.
도 1 은 본 개시의 하나 이상의 기법들에 따른 예시적인 콘텐츠 생성 시스템을 예시하는 블록도이다.
도 2 는 본 개시의 하나 이상의 기법들에 따른 예시적인 그래픽스 프로세싱 유닛(GPU)이다.
도 3 은 본 개시의 하나 이상의 기법들에 따른 예시적인 광선 추적 프로세스를 예시하는 도면이다.
도 4a 는 본 개시의 하나 이상의 기법들에 따른 예시적인 래스터화 프로세스를 예시하는 도면이다.
도 4b 는 본 개시의 하나 이상의 기법들에 따른 예시적인 광선 추적 프로세스를 예시하는 도면이다.
도 5 는 본 개시의 하나 이상의 기법들에 따른 예시적인 광선 추적 프로세스를 예시하는 도면이다.
도 6a 는 본 개시의 하나 이상의 기법들에 따른 예시적인 데이터 구조를 예시하는 도면이다.
도 6b 는 본 개시의 하나 이상의 기법들에 따른 예시적인 데이터 구조를 예시하는 도면이다.
도 7 은 본 개시의 하나 이상의 기법들에 따른 예시적인 노드 저장 구조를 예시하는 도면이다.
도 8a 는 본 개시의 하나 이상의 기법들에 따른 예시적인 노드 저장 구조를 예시하는 도면이다.
도 8b 는 본 개시의 하나 이상의 기법들에 따른 예시적인 노드 저장 구조를 예시하는 도면이다.
도 8c 는 본 개시의 하나 이상의 기법들에 따른 예시적인 노드 저장 구조를 예시하는 도면이다.
도 9 는 본 개시의 하나 이상의 기법들에 따른 예시적인 노드 저장 호출 흐름을 예시하는 도면이다.
도 10 은 본 개시의 하나 이상의 기법들에 따른 예시적인 노드 저장 호출 흐름을 예시하는 도면이다.
도 11 은 본 개시의 하나 이상의 기법들에 따른 GPU 컴포넌트들간의 예시적인 통신을 예시하는 통신 흐름도이다.
도 12는 본 개시의 하나 이상의 기법들에 따른 예시적인 그래픽스 프로세싱 방법의 플로우차트이다.
도 13는 본 개시의 하나 이상의 기법들에 따른 예시적인 그래픽스 프로세싱 방법의 플로우차트이다.
상세한 설명
시스템들, 장치들, 컴퓨터 프로그램 제품들, 및 방법들의 다양한 양태들이 첨부 도면들을 참조하여 이하에 더 충분히 설명된다. 하지만, 본 개시는 많은 상이한 형태들로 구현될 수도 있고, 본 개시 전체에 걸쳐 제시된 임의의 특정 구조 또는 기능에 한정되는 것으로 해석되어서는 안된다. 오히려, 이들 양태는 본 개시가 철저하며 완전해지고 당업자에게 본 개시의 범위를 충분히 전달하기 위해 제공된다. 본 명세서에서의 교시들에 기초하여, 당업자는, 본 개시의 다른 양태들과 독립적으로 구현되든 또는 결합되든, 본 개시의 범위가 본 명세서에 개시된 시스템들, 장치들, 컴퓨터 프로그램 제품들 및 방법들의 임의의 양태를 커버하도록 의도된다는 것을 인식할 것이다. 예를 들어, 본 명세서에 제시된 임의의 수의 양태들을 이용하여 장치가 구현될 수도 있거나 또는 방법이 실시될 수도 있다. 또한, 본 개시의 범위는 본 명세서에 제시된 본 개시의 다양한 양태들 외에 또는 이에 추가하여 다른 구조, 기능성, 또는 구조 및 기능성을 이용하여 실시되는 그러한 장치 또는 방법을 커버하도록 의도된다. 본 명세서에 개시된 임의의 양태는 청구항의 하나 이상의 엘리먼트들에 의해 구체화될 수도 있다.
다양한 양태들이 본 명세서에서 설명되지만, 이들 양태들의 많은 변형들 및 치환들은 본 개시의 범위에 속한다. 본 개시의 양태들의 일부 잠재적인 이익들 및 이점들이 언급되지만, 본 개시의 범위는 특정 이익들, 사용들, 또는 목적들에 한정되도록 의도되지 않는다. 오히려, 본 개시의 양태들은 상이한 무선 기술들, 시스템 구성들, 네트워크들, 및 송신 프로토콜들에 광범위하게 적용가능한 것으로 의도되고, 이들 중 일부는 예로써 도면들에서 그리고 다음의 설명에서 예시된다. 상세한 설명 및 도면들은 한정하는 것보다는 본 개시의 단지 예시일 뿐이며, 본 개시의 범위는 첨부된 청구항들 및 그 균등물들에 의해 정의된다.
여러 양태들이 다양한 장치 및 방법들에 관하여 제시된다. 이들 장치 및 방법들은 다양한 블록들, 컴포넌트들, 회로들, 프로세스들, 알고리즘들 등 ("엘리먼트들" 로 총칭됨) 에 의해 다음의 상세한 설명에서 설명되고 첨부 도면들에 예시된다. 이들 엘리먼트들은 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이들의 임의의 조합을 사용하여 구현될 수도 있다. 이러한 엘리먼트들이 하드웨어로서 구현되는지 또는 소프트웨어로서 구현되는지는 전체 시스템에 부과된 특정 애플리케이션 및 설계 제약들에 의존한다.
예로서, 엘리먼트, 또는 엘리먼트의 임의의 부분, 또는 엘리먼트들의 임의의 조합은 (프로세싱 유닛들로도 지칭될 수도 있는) 하나 이상의 프로세서들을 포함하는 "프로세싱 시스템"으로서 구현될 수도 있다. 프로세서들의 예들은, 마이크로프로세서들, 마이크로제어기들, 그래픽스 프로세싱 유닛(GPU)들, 범용 GPU(GPGPU)들, 중앙 프로세싱 유닛(CPU)들, 애플리케이션 프로세서들, 디지털 신호 프로세서(DSP)들, RISC(reduced instruction set computing) 프로세서들, 시스템 온 칩(SOC)들, 기저대역 프로세서들, 주문형 집적회로(ASIC)들, 필드 프로그래밍가능 게이트 어레이(FPGA)들, 프로그래밍가능 로직 디바이스(PLD)들, 스테이트 머신들, 게이티드 로직, 이산 하드웨어 회로들, 및 본 개시 전반에 걸쳐 설명된 다양한 기능성을 수행하도록 구성된 다른 적합한 하드웨어를 포함한다. 프로세싱 시스템에서의 하나 이상의 프로세서들이 소프트웨어를 실행할 수도 있다. 소프트웨어는, 소프트웨어, 펌웨어, 미들웨어, 마이크로코드, 하드웨어 기술 언어, 또는 다른 것으로서 지칭되든 간에, 명령들, 명령 세트들, 코드, 코드 세그먼트들, 프로그램 코드, 프로그램들, 서브프로그램들, 소프트웨어 컴포넌트들, 애플리케이션들, 소프트웨어 애플리케이션들, 소프트웨어 패키지들, 루틴들, 서브루틴들, 오브젝트들, 실행가능물들, 실행 스레드들, 프로시저들, 함수들 등을 의미하는 것으로 폭넓게 해석될 수 있다. 용어 애플리케이션은 소프트웨어를 지칭할 수도 있다. 본 명세서에서 설명된 바와 같이, 하나 이상의 기법들은 하나 이상의 기능들을 수행하도록 구성되는 애플리케이션, 즉 소프트웨어를 지칭할 수도 있다. 그러한 예들에서, 애플리케이션은 메모리, 예를 들어, 프로세서의 온칩 메모리, 시스템 메모리, 또는 임의의 다른 메모리 상에 저장될 수도 있다. 프로세서와 같은, 본 명세서에서 설명된 하드웨어는 애플리케이션을 실행하도록 구성될 수도 있다. 예를 들어, 애플리케이션은, 하드웨어에 의해 실행될 경우, 하드웨어로 하여금 본 명세서에서 설명된 하나 이상의 기법들을 수행하게 하는 코드를 포함하는 것으로서 설명될 수도 있다. 예로서, 하드웨어는 메모리로부터 코드에 액세스하고 메모리로부터 액세스된 코드를 실행하여 본 명세서에서 설명된 하나 이상의 기법들을 수행할 수도 있다. 일부 예들에서, 컴포넌트들은 본 개시에서 식별된다. 그러한 예들에서, 컴포넌트들은 하드웨어, 소프트웨어, 또는 이들의 조합일 수도 있다. 컴포넌트들은 별개의 컴포넌트들 또는 단일 컴포넌트의 서브-컴포넌트들일 수도 있다.
이에 따라, 본 명세서에 설명된 하나 이상의 예들에서, 설명된 기능들은 하드웨어, 소프트웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되는 경우, 기능들은 컴퓨터 판독가능 매체 상에 하나 이상의 명령들 또는 코드로서 저장되거나 또는 인코딩될 수도 있다. 컴퓨터 판독가능 매체는 컴퓨터 저장 매체를 포함한다. 저장 매체는 컴퓨터에 의해 액세스될 수도 있는 임의의 가용 매체일 수도 있다. 한정이 아닌 예시로서, 이러한 컴퓨터 판독가능 매체는 랜덤 액세스 메모리 (random-access memory; RAM), 판독 전용 메모리 (read-only memory; ROM), 전기적 소거가능 프로그램가능 ROM (electrically erasable programmable ROM; EEPROM), 광학 디스크 저장, 자기 디스크 저장, 다른 자기 저장 디바이스들, 전술한 타입의 컴퓨터 판독가능 매체들의 조합들, 또는 컴퓨터에 의해 액세스될 수도 있는 명령들 또는 데이터 구조들 형태로 컴퓨터 실행가능 코드를 저장하는데 사용될 수도 있는 임의의 다른 매체를 포함할 수도 있다.
일반적으로, 본 개시는 단일 디바이스 또는 다수의 디바이스들에서 그래픽스 프로세싱 파이프라인을 갖는 것, 그래픽 콘텐츠의 렌더링을 개선하는 것, 및/또는 프로세싱 유닛, 즉 GPU 와 같은, 본 명세서에서 설명된 하나 이상의 기법들을 수행하도록 구성된 임의의 프로세싱 유닛의 부하를 감소시키는 것을 위한 기법들을 설명한다. 예를 들어, 본 개시는 그래픽스 프로세싱을 활용하는 임의의 디바이스에서 그래픽스 프로세싱을 위한 기법들을 설명한다. 다른 예시적인 혜택들이 본 개시 전반에 걸쳐 설명된다.
본 명세서에서 사용된 바와 같이, 용어 "콘텐츠" 의 인스턴스들은 "그래픽 콘텐츠", "이미지" 를 지칭할 수도 있으며, 그 반대도 마찬가지이다. 이것은 용어가 형용사, 명사 또는 다른 품사로 사용되는지 여부에 관계없이 사실이다. 일부 예들에서, 본 명세서에서 사용된 바와 같이, 용어 "그래픽 콘텐츠" 는 그래픽스 프로세싱 파이프라인의 하나 이상의 프로세스들에 의해 생성된 콘텐츠를 지칭할 수도 있다. 일부 예들에서, 본 명세서에서 사용된 바와 같이, 용어 "그래픽 콘텐츠" 는 그래픽스 프로세싱을 수행하도록 구성된 프로세싱 유닛에 의해 생성된 콘텐츠를 지칭할 수도 있다. 일부 예들에서, 본 명세서에서 사용된 바와 같이, 용어 "그래픽 콘텐츠" 는 그래픽스 프로세싱 유닛에 의해 생성된 콘텐츠를 지칭할 수도 있다.
일부 예들에서, 본 명세서에서 사용된 바와 같이, 용어 "디스플레이 콘텐츠" 는 디스플레이잉 프로세싱을 수행하도록 구성된 프로세싱 유닛에 의해 생성된 콘텐츠를 지칭할 수도 있다. 일부 예들에서, 본 명세서에서 사용된 바와 같이, 용어 "디스플레이 콘텐츠" 는 디스플레이 프로세싱 유닛에 의해 생성된 콘텐츠를 지칭할 수도 있다. 그래픽 콘텐츠는 디스플레이 콘텐츠가 되도록 프로세싱될 수도 있다. 예를 들어, 그래픽스 프로세싱 유닛은 프레임과 같은 그래픽 콘텐츠를 버퍼 (프레임버퍼로 지칭될 수도 있음) 에 출력할 수도 있다. 디스플레이 프로세싱 유닛은 버퍼로부터 하나 이상의 프레임들과 같은 그래픽 콘텐츠를 판독하고, 그에 대해 하나 이상의 디스플레이 프로세싱 기술들을 수행하여 디스플레이 콘텐츠를 생성할 수도 있다. 예를 들어, 디스플레이 프로세싱 유닛은 프레임을 생성하기 위해 하나 이상의 렌더링된 레이어들에 대해 컴포지션(composition)을 수행하도록 구성될 수도 있다. 다른 예로서, 디스플레이 프로세싱 유닛은 둘 이상의 레이어들을 함께 단일 프레임으로 컴포징(composing), 블렌딩, 또는 그 밖의 방법으로 결합하도록 구성될 수도 있다. 디스플레이 프로세싱 유닛은 프레임에 대해 스케일링, 예를 들어, 업스케일링 또는 다운스케일링을 수행하도록 구성될 수도 있다. 일부 예들에서, 프레임은 레이어를 지칭할 수도 있다. 다른 예들에서, 프레임은 프레임을 형성하도록 이미 함께 블렌딩된 2개 이상의 레이어들을 지칭할 수도 있으며, 즉, 프레임은 2개 이상의 레이어들을 포함하고, 2개 이상의 레이어들을 포함하는 프레임이 후속하여 블렌딩될 수도 있다.
그래픽스 프로세싱의 양태들은 광선 추적 데이터를 상이한 유형의 메모리, 예를 들어, 시스템 메모리에 저장할 수도 있다. 그러나, 광선 추적 성능에 대한 한 가지 잠재적인 문제는 이용 가능한 메모리 대역폭의 양인데, 메모리(예: 시스템 메모리)로부터 데이터에 액세스하는 데 많은 양의 액세스 사이클들이 소요될 수 있기 때문이다. 일부 사례들에서, 지오메트리 데이터(geometry data)가 가속 구조(예: 경계 볼륨 계층(BVH) 구조)에 저장될 수 있다. 광선 추적 프로세스에서 각각의 광선에 대해, GPU는 루트 노드(즉, 트리 구조 내 최상위 노드)에서 리프 노드들까지 순회(traverse)해야 할 수도 있다. BVH 구조는 다수의 프리미티브들을 포함하는 그래픽스 프로세싱 장면과 연관될 수도 있다. 또한, 이들 프리미티브들의 각각은 BVH 구조 내 노드들 중 하나에 대응할 수도 있다. 그래픽스 프로세싱의 일부 양태들에서, 이러한 가속 구조들(예: BVH 구조들)을 GPU에서의 온칩 그래픽스 메모리에 로딩하면 데이터에 대한 더 빠른 액세스를 달성하고 궁극적으로 더 빠른 광선 추적 성능을 달성하는 데 도움이 될 수 있다. 그러나, 일부 사례들에서, 가속 구조들(예를 들어, BVH 구조들)의 크기가 온칩 메모리의 크기보다 훨씬 클 수도 있다. 이러한 크기 격차를 극복하기 위해, 더 작은 가속 구조들이 최상위 레벨 가속 구조들과 유사한 방식으로 온칩 메모리에 로딩될 수도 있다. 또한, 일부 작은 최하위 레벨 가속 구조들(즉, 취상위 레벨 가속 구조들에 비해 크기가 작음)이 또한 온칩 메모리에 배치될 수도 있다. 그러나, 최하위 레벨 가속 구조들의 조직으로 인해, 온칩 메모리로부터 이들 최하위 레벨 가속 구조들에 액세스하는 것이 어려울 수도 있다. 그래서, 이들 최하위 레벨 가속 구조들은 광선 추적 성능 사양들을 충족할 만큼 자주 액세스하는 것이 불가능할 수도 있다. 본 개시의 양태들은 광선 추적 프로세스들과 연관된 가속 구조들(예를 들어, BVH 구조들)의 저장을 최적화할 수 있다. 가령, 본 개시의 양태들은 이러한 구조들이 쉽게 액세스될 수 있도록 특정 유형의 메모리에 최하위 레벨 가속 구조들을 저장할 수도 있다. 그렇게 하기 위해, 본 개시의 양태들은 최하위 레벨 BVH 구조들을 온칩 그래픽스 메모리(GMEM)에 저장할 수도 있을 뿐만 아니라, 최하위 레벨 BVH 구조들을 시스템 메모리(SYSMEM)에 저장할 수도 있다. 그렇게 함으로써, 본 명세서에 제시된 양태들은 온칩 그래픽스 메모리로부터 BVH 구조들에 더 쉽게 액세스할 수 있다. 일부 사례들에서, 본 개시의 양태들은 온칩 그래픽스 메모리와 시스템 메모리 둘 다에 최하위 레벨 BVH 구조들의 상이한 레벨들을 저장할 수도 있다.
도 1 은 본 개시의 하나 이상의 기법들을 구현하도록 구성된 예시적인 콘텐츠 생성 시스템 (100) 을 예시하는 블록도이다. 콘텐츠 생성 시스템 (100) 은 디바이스 (104) 를 포함한다. 디바이스 (104) 는 본 명세서에 설명된 다양한 기능들을 수행하기 위한 하나 이상의 컴포넌트들 또는 회로들을 포함할 수도 있다. 일부 예들에서, 디바이스 (104) 의 하나 이상의 컴포넌트들은 SOC 의 컴포넌트들일 수도 있다. 디바이스 (104) 는 본 개시의 하나 이상의 기법들을 수행하도록 구성된 하나 이상의 컴포넌트들을 포함할 수도 있다. 나타낸 예에서, 디바이스 (104) 는 프로세싱 유닛 (120), 콘텐츠 인코더/디코더 (122) 및 시스템 메모리 (124) 를 포함할 수도 있다. 일부 양태들에서, 디바이스 (104) 는 다수의 다른 컴포넌트들, 예를 들어, 통신 인터페이스 (126), 트랜시버 (132), 수신기 (128), 송신기 (130), 디스플레이 프로세서 (127), 및 하나 이상의 디스플레이들 (131) 을 포함할 수도 있다. 디스플레이 (131) 에 대한 언급은 하나 이상의 디스플레이들 (131) 을 지칭할 수도 있다. 예를 들어, 디스플레이 (131) 는 단일 디스플레이 또는 다수의 디스플레이들을 포함할 수도 있다. 디스플레이 (131) 는 제1 디스플레이 및 제2 디스플레이를 포함할 수도 있다. 제1 디스플레이는 좌안 디스플레이일 수도 있고 제2 디스플레이는 우안 디스플레이일 수도 있다. 일부 예들에서, 제1 및 제2 디스플레이는 그에 제시를 위한 상이한 프레임들을 수신할 수도 있다. 다른 예들에서, 제1 및 제2 디스플레이는 그에 제시를 위한 동일한 프레임들을 수신할 수도 있다. 추가 예들에서, 그래픽스 프로세싱의 결과들은 디바이스 상에 표시되지 않을 수도 있고, 예를 들어, 제1 및 제2 디스플레이는 그에 제시를 위한 어느 프레임들도 수신하지 않을 수도 있다. 대신에, 프레임들 또는 그래픽스 프로세싱 결과들이 다른 디바이스로 전송될 수도 있다. 일부 양태들에서, 이는 분할 렌더링(split-rendering)으로 지칭될 수도 있다.
프로세싱 유닛 (120) 은 내부 메모리 (121) 를 포함할 수도 있다. 프로세싱 유닛 (120) 은 그래픽스 프로세싱 파이프라인 (107) 에서와 같이 그래픽스 프로세싱을 수행하도록 구성될 수도 있다. 콘텐츠 인코더/디코더 (122) 는 내부 메모리 (123) 를 포함할 수도 있다. 일부 예들에서, 디바이스 (104) 는 하나 이상의 디스플레이들 (131) 에 의한 제시 전에 프로세싱 유닛 (120) 에 의해 생성된 하나 이상의 프레임들에 대해 하나 이상의 디스플레이 프로세싱 기법들을 수행하기 위해 디스플레이 프로세서 (127) 와 같은 디스플레이 프로세서를 포함할 수도 있다. 디스플레이 프로세서 (127) 는 디스플레이 프로세싱을 수행하도록 구성될 수도 있다. 예를 들어, 디스플레이 프로세서(127)는 프로세싱 유닛(120)에 의해 생성된 하나 이상의 프레임들에 대해 하나 이상의 디스플레이 프로세싱 기법들을 수행하도록 구성될 수 있다. 하나 이상의 디스플레이들 (131) 은 디스플레이 프로세서 (127) 에 의해 프로세싱된 프레임들을 표시하거나 그렇지 않으면 제시하도록 구성될 수도 있다. 일부 예들에서, 하나 이상의 디스플레이들 (131) 은 액정 디스플레이 (LCD), 플라즈마 디스플레이, 유기 발광 다이오드 (OLED) 디스플레이, 프로젝션 디스플레이 디바이스, 증강 현실 디스플레이 디바이스, 가상 현실 디스플레이 디바이스, 머리 착용 디스플레이, 또는 임의의 다른 타입의 디스플레이 디바이스 중 하나 이상을 포함할 수도 있다.
프로세싱 유닛 (120) 및 콘텐츠 인코더/디코더 (122) 외부의 메모리, 이를 테면 시스템 메모리 (124) 는 프로세싱 유닛 (120) 및 콘텐츠 인코더/디코더 (122) 에 액세스가능할 수도 있다. 예를 들어, 프로세싱 유닛 (120) 및 콘텐츠 인코더/디코더 (122) 는 시스템 메모리 (124) 와 같은 외부 메모리로부터 판독되거나 및/또는 그에 기록되도록 구성될 수도 있다. 프로세싱 유닛(120) 및 콘텐츠 인코더/디코더(122)는 버스를 통해 시스템 메모리(124)에 통신적으로 커플링될 수도 있다. 일부 예들에서, 프로세싱 유닛(120) 및 콘텐츠 인코더/디코더(122)는 버스 또는 상이한 접속을 통해 서로 통신적으로 커플링될 수도 있다.
콘텐츠 인코더/디코더 (122) 는 시스템 메모리 (124) 및/또는 통신 인터페이스 (126) 와 같은 임의의 소스로부터 그래픽 콘텐츠를 수신하도록 구성될 수도 있다. 시스템 메모리 (124) 는 수신된 인코딩된 또는 디코딩된 그래픽 콘텐츠를 저장하도록 구성될 수도 있다. 콘텐츠 인코더/디코더 (122) 는 인코딩된 또는 디코딩된 그래픽 콘텐츠를, 예를 들어, 시스템 메모리 (124) 및/또는 통신 인터페이스 (126) 로부터, 인코딩된 픽셀 데이터의 형태로, 수신하도록 구성될 수도 있다. 콘텐츠 인코더/디코더 (122) 는 임의의 그래픽 콘텐츠를 인코딩 또는 디코딩하도록 구성될 수도 있다.
내부 메모리 (121) 또는 시스템 메모리 (124) 는 하나 이상의 휘발성 또는 비휘발성 메모리들 또는 저장 디바이스들을 포함할 수도 있다. 일부 예들에서, 내부 메모리 (121) 또는 시스템 메모리 (124) 는 RAM, SRAM, DRAM, 소거가능한 프로그래밍가능 ROM (EPROM), 전기적으로 소거가능한 프로그래밍가능 ROM (EEPROM), 플래시 메모리, 자기 데이터 매체들 또는 광학 저장 매체들, 또는 임의의 다른 타입의 메모리를 포함할 수도 있다.
내부 메모리 (121) 또는 시스템 메모리 (124) 는 일부 예들에 따른 비일시적 저장 매체일 수도 있다. 용어 "비일시적" 은, 저장 매체가 캐리어파 또는 전파 신호에서 구체화되지 않는다는 것을 나타낼 수도 있다. 그러나, 용어 "비일시적" 은 내부 메모리 (121) 또는 시스템 메모리 (124) 가 이동가능하지 않거나 또는 그 콘텐츠들이 정적임을 의미하는 것으로 해석되어서는 안된다. 일 예로서, 시스템 메모리 (124) 는 디바이스 (104) 로부터 제거될 수도 있고, 다른 디바이스로 이동될 수도 있다. 다른 예로서, 시스템 메모리 (124) 는 디바이스 (104) 로부터 제거 가능하지 않을 수도 있다.
프로세싱 유닛 (120) 은 중앙 프로세싱 유닛 (CPU), 그래픽스 프로세싱 유닛 (GPU), 범용 GPU (GPGPU), 또는 그래픽스 프로세싱을 수행하도록 구성될 수 있는 임의의 다른 프로세싱 유닛일 수도 있다. 일부 예들에서, 프로세싱 유닛 (120) 은 디바이스 (104) 의 마더보드에 통합될 수도 있다. 일부 예들에서, 프로세싱 유닛 (120) 은 디바이스 (104) 의 마더보드내 포트에 설치되는 그래픽스 카드 상에 존재할 수도 있거나 또는 그렇지 않으면 디바이스 (104) 와 상호 연동하도록 구성된 주변 디바이스내에 통합될 수도 있다. 프로세싱 유닛 (120) 은 하나 이상의 마이크로프로세서들, GPU들, 주문형 집적 회로들 (ASIC들), 필드 프로그래밍가능 게이트 어레이들 (FPGA들), 산술 로직 유닛들 (ALU들), 디지털 신호 프로세서들 (DSP들), 이산 로직, 소프트웨어, 하드웨어, 펌웨어, 다른 동등한 집적된 또는 이산 로직 회로, 또는 이들의 임의의 조합들과 같은 하나 이상의 프로세서들을 포함할 수도 있다. 기술들이 소프트웨어에서 부분적으로 구현되면, 프로세싱 유닛 (120) 은 적합한 비일시적인 컴퓨터 판독가능 저장 매체, 예컨대 내부 메모리 (121) 에 소프트웨어에 대한 명령들을 저장할 수도 있으며, 본 개시의 기법들을 수행하기 위해 하나 이상의 프로세서들을 사용하여 하드웨어에서 명령들을 실행할 수도 있다. 하드웨어, 소프트웨어, 하드웨어와 소프트웨어의 조합 등을 포함하여, 전술한 것 중 임의의 것은 하나 이상의 프로세서들인 것으로 고려될 수도 있다.
콘텐츠 인코더/디코더 (122) 는 콘텐츠 디코딩을 수행하도록 구성된 임의의 프로세싱 유닛일 수도 있다. 일부 예들에서, 콘텐츠 인코더/디코더 (122) 는 디바이스 (104) 의 마더보드에 통합될 수도 있다. 콘텐츠 인코더/디코더 (122) 는 하나 이상의 마이크로프로세서들, ASIC들 (application specific integrated circuits), 필드 프로그래밍가능 게이트 어레이들 (FPGA들), 산술 로직 유닛들 (ALU들), 디지털 신호 프로세서들 (DSP들), 비디오 프로세서들, 이산 로직, 소프트웨어, 하드웨어, 펌웨어, 다른 동등한 집적 또는 이산 로직 회로, 또는 이들의 임의의 조합과 같은 하나 이상의 프로세서들을 포함할 수도 있다. 기법들이 부분적으로 소프트웨어에서 구현되면, 콘텐츠 인코더/디코더 (122) 는 적합한 비일시적 컴퓨터 판독가능 저장 매체, 예를 들어, 내부 메모리 (123) 에 소프트웨어에 대한 명령들을 저장할 수도 있고, 본 개시의 기법들을 수행하기 위해 하나 이상의 프로세서들을 사용하여 하드웨어에서 명령들을 실행할 수도 있다. 하드웨어, 소프트웨어, 하드웨어와 소프트웨어의 조합 등을 포함하여, 전술한 것 중 임의의 것은 하나 이상의 프로세서들인 것으로 고려될 수도 있다.
일부 양태들에서, 콘텐츠 생성 시스템 (100) 은 통신 인터페이스 (126) 를 포함할 수도 있다. 통신 인터페이스 (126) 는 수신기 (128) 및 송신기 (130) 를 포함할 수도 있다. 수신기 (128) 는 디바이스 (104) 에 대해 본 명세서에서 설명된 임의의 수신 기능을 수행하도록 구성될 수도 있다. 추가적으로, 수신기 (128) 는 다른 디바이스로부터 정보, 예를 들어, 눈 또는 머리 포지션 정보, 렌더링 커맨드들, 또는 위치 정보를 수신하도록 구성될 수도 있다. 송신기 (130) 는 디바이스 (104) 에 대해 본 명세서에서 설명된 임의의 송신 기능을 수행하도록 구성될 수도 있다. 예를 들어, 송신기(130)는 콘텐츠에 대한 요청을 포함할 수도 있는 정보를 다른 디바이스에 송신하도록 구성될 수도 있다. 수신기 (128) 및 송신기 (130) 는 트랜시버 (132) 로 결합될 수도 있다. 그러한 예들에서, 트랜시버 (132) 는 디바이스 (104) 에 대해 본 명세서에서 설명된 임의의 수신 기능 및/또는 송신 기능을 수행하도록 구성될 수도 있다.
도 1을 다시 참조하면, 특정 양태들에서, 프로세싱 유닛(120)은 복수의 레벨들 및 복수의 노드들을 포함하는 경계 볼륨 계층(BVH) 구조를 구성하도록 구성된 BVH 저장 구조(198)를 포함할 수도 있고, 복수의 레벨들 각각은 복수의 노드들 중 적어도 하나의 노드를 포함하며, BVH 구조는 장면 내 복수의 프리미티브들에 대한 지오메트리 데이터와 연관된다. BVH 저장 구조(198)는 또한 BVH 구조 내 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 그래픽스 메모리(GMEM) 내 저장량을 식별하도록 구성될 수도 있다. BVH 저장 구조(198)는 또한, GMEM 내 저장량에 기초하여, 복수의 제1 노드들을 포함하는 제1 BVH 섹션 및 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 BVH 구조를 할당하도록 구성될 수도 있고, BVH 구조는 복수의 제1 노드들 및 복수의 제2 노드들을 포함하는 복수의 노드들의 계층에 기초하여 할당된다. BVH 저장 구조(198)는 또한 GMEM에 복수의 제1 노드들과 연관된 제1 데이터 그리고 시스템 메모리에 복수의 제1 노드들 및 복수의 제2 노드들과 연관된 제2 데이터를 저장하도록 구성될 수도 있다. BVH 저장 구조(198)는 또한 제1 데이터 또는 제2 데이터 중 적어도 하나를 취출하기 전에, 복수의 제1 노드들의 제1 어드레스 또는 복수의 제2 노드들의 제2 어드레스 중 적어도 하나를 계산하도록 구성될 수도 있고, 여기서 제1 데이터 또는 제2 데이터는 계산된 제1 어드레스 또는 계산된 제2 어드레스에 기초하여 취출된다. BVH 저장 구조(198)는 또한, 제1 데이터 및 제2 데이터를 저장할 시에, GMEM으로부터의 제1 데이터 또는 시스템 메모리로부터의 제2 데이터 중 적어도 하나를 취출하도록 구성될 수도 있다. BVH 저장 구조(198)는 또한 제1 데이터 또는 제2 데이터 중 적어도 하나에 기초하여, 복수의 노드들 중 복수의 내부 노드들에 대한 광선 삼각형 교차 또는 복수의 노드들 중 복수의 리프 노드들에 대한 광선 박스 교차 중 적어도 하나를 수행하도록 구성될 수도 있다. 다음 설명은 그래픽스 프로세싱에 중점을 둘 수 있지만, 본 명세서에 설명된 개념들은 다른 유사한 프로세싱 기법들에도 적용가능할 수 있다.
본 명세서에 설명된 바와 같이, 디바이스(104)와 같은 디바이스는 본 명세서에 설명된 하나 이상의 기법들을 수행하도록 구성된 임의의 디바이스, 장치 또는 시스템을 지칭할 수도 있다. 예를 들어, 디바이스는 서버, 기지국, 사용자 장비, 클라이언트 디바이스, 스테이션, 액세스 포인트, 컴퓨터, 예를 들어, 개인용 컴퓨터, 데스크탑 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 컴퓨터 워크스테이션, 또는 메인프레임 컴퓨터, 최종 제품, 장치, 폰, 스마트 폰, 서버, 비디오 게임 플랫폼 또는 콘솔, 핸드헬드 디바이스, 예를 들어, 휴대용 비디오 게임 디바이스 또는 개인용 디지털 보조기 (PDA), 웨어러블 컴퓨팅 디바이스, 예를 들어, 스마트 워치, 증강 현실 디바이스, 또는 가상 현실 디바이스, 비-웨어러블 디바이스, 디스플레이 또는 디스플레이 디바이스, 텔레비전, 텔레비전 셋탑 박스, 중간 네트워크 디바이스, 디지털 미디어 플레이어, 비디오 스트리밍 디바이스, 콘텐츠 스트리밍 디바이스, 차내 컴퓨터, 임의의 모바일 디바이스, 그래픽 콘텐츠를 생성하도록 구성된 임의의 디바이스, 또는 본 명세서에서 설명된 하나 이상의 기법들을 수행하도록 구성된 임의의 디바이스일 수도 있다. 본 명세서에서의 프로세스들은 특정 컴포넌트(예를 들어, GPU) 에 의해 수행되는 것으로 설명될 수도 있지만, 추가 실시형태들에서, 개시된 실시형태들과 일치하는, 다른 컴포넌트들 (예를 들어, CPU) 를 사용하여 수행될 수도 있다.
GPU들은 GPU 파이프라인에서 다수의 유형들의 데이터 또는 데이터 패킷들을 프로세싱할 수도 있다. 예를 들어, 일부 양태들에서, GPU 는 2개 유형들의 데이터 또는 데이터 패킷들, 예를 들어, 컨텍스트 레지스터 패킷들 및 드로우 콜 데이터를 프로세싱할 수도 있다. 컨텍스트 레지스터 패킷은, 그래픽스 컨텍스트가 프로세싱될 방법을 조절할 수도 있는, 예를 들어, 글로벌 레지스터, 셰이딩 프로그램, 또는 상수 데이터에 관한 정보와 같은 글로벌 상태 정보의 세트일 수도 있다. 예를 들어, 컨텍스트 레지스터 패킷들은 컬러 포맷에 관한 정보를 포함할 수도 있다. 컨텍스트 레지스터 패킷들의 일부 양태들에서, 어느 워크로드가 컨텍스트 레지스터에 속하는지를 표시하는 비트가 있을 수도 있다. 또한, 동시에 및/또는 병렬로 실행되는 다수의 기능들 또는 프로그래밍이 있을 수도 있다. 예를 들어, 기능들 또는 프로그래밍은 특정 동작, 예를 들어, 컬러 모드 또는 컬러 포맷을 설명할 수도 있다. 이에 따라, 컨텍스트 레지스터는 GPU 의 다수의 상태들을 정의할 수도 있다.
컨텍스트 상태들은 개별 프로세싱 유닛, 예를 들어, 버텍스 페처(vertex fetcher), 버텍스 셰이더 (VS), 셰이더 프로세서, 또는 지오메트리 프로세서가 어떻게 기능하는지, 및/또는 프로세싱 유닛이 어떤 모드에서 기능하는지를 결정하는데 활용될 수도 있다. 그렇게 하기 위해, GPU들은 컨텍스트 레지스터들 및 프로그래밍 데이터를 사용할 수도 있다. 일부 양태들에서, GPU 는 모드 또는 상태의 컨텍스트 레지스터 정의에 기초하여 파이프라인에서 워크로드, 예를 들어, 버텍스 또는 픽셀 워크로드를 생성할 수도 있다. 특정 프로세싱 유닛들, 예를 들어, 버텍스 페처는, 특정 기능들, 예를 들어, 버텍스가 어셈블링되는 방법을 결정하기 위해 이들 상태들을 사용할 수도 있다. 이들 모드들 또는 상태들이 변할 수도 있기 때문에, GPU들은 대응하는 컨텍스트를 변경할 필요가 있을 수도 있다. 추가로, 모드 또는 상태에 대응하는 워크로드는 변화하는 모드 또는 상태를 뒤따를 수도 있다.
도 2 는 본 개시의 하나 이상의 기법들에 따른 예시적인 GPU (200) 를 예시한다. 도 2에 도시된 바와 같이, GPU(200)는 커맨드 프로세서(CP) (210), 드로우 콜 패킷들(212), 버텍스 페처(220), VS(222), 버텍스 캐시(VPC)(224), 삼각형 셋업 엔진(226), 래스터화기(228), Z 프로세스 엔진(ZPE)(230), 픽셀 보간기(PI) 232, 프래그먼트 셰이더(FS) (234), 렌더 백엔드(RB)(236), 레벨 2(L2) 캐시(UCHE)(238), 및 시스템 메모리(240)를 포함한다. 도 2 는 GPU (200) 가 프로세싱 유닛들 (220-238) 을 포함하는 것을 표시하지만, GPU (200) 는 다수의 추가적인 프로세싱 유닛들을 포함할 수도 있다.  추가적으로, 프로세싱 유닛들 (220-238) 은 단지 예일 뿐이고 프로세싱 유닛들의 임의의 조합 또는 순서가 본 개시에 따라 GPU들에 의해 사용될 수도 있다. GPU (200) 는 또한, 커맨드 버퍼 (250), 컨텍스트 레지스터 패킷들 (260), 및 컨텍스트 상태들 (261) 을 포함한다.
도 2 에 도시된 바와 같이, GPU 는 CP, 예를 들어, CP (210) 또는 하드웨어 가속기를 활용하여 커맨드 버퍼를 컨텍스트 레지스터 패킷들, 예를 들어, 컨텍스트 레지스터 패킷들 (260), 및/또는 드로우 콜 데이터 패킷들, 예를 들어, 드로우 콜 패킷들 (212) 로 파싱할 수도 있다. 그 다음, CP (210) 는 컨텍스트 레지스터 패킷들 (260) 또는 드로우 콜 패킷들 (212) 을 별개의 경로들을 통해 GPU 내의 프로세싱 유닛들 또는 블록들로 전송할 수도 있다. 또한, 커맨드 버퍼(250)는 컨텍스트 레지스터들 및 드로우 콜들의 상이한 상태를 교번할 수도 있다. 예를 들어, 커맨드 버퍼는 다음의 방식으로 구조화될 수도 있다: 컨텍스트 N 의 컨텍스트 레지스터, 컨텍스트 N 의 드로우 콜(들), 컨텍스트 N+1 의 컨텍스트 레지스터, 및 컨텍스트 N+1 의 드로우 콜(들).
GPU는 다양한 상이한 방식으로 이미지들을 렌더링할 수도 있다. 일부 사례들에서, GPU들은 렌더링 및/또는 타일드 (tiled) 렌더링을 사용하여 이미지를 렌더링할 수도 있다. 타일드 렌더링 GPU들에서, 이미지는 상이한 섹션들 또는 타일들로 분할되거나 분리될 수도 있다. 이미지의 분할 후, 각각의 섹션이나 타일을 따로 렌더링할 수도 있다. 타일드 렌더링 GPU들은, 그리드의 각각의 부분, 즉, 타일이 따로 렌더링되도록, 컴퓨터 그래픽스 이미지들을 그리드 포맷으로 분할할 수도 있다. 일부 양태들에서, 비닝 패스 (binning pass) 동안, 이미지는 상이한 빈들 또는 타일들로 분할될 수도 있다. 일부 양태들에서, 비닝 패스 동안, 가시적 프리미티브 또는 드로우 콜들이 식별될 수도 있는 가시성 스트림이 구성될 수도 있다. 타일드 렌더링과 달리, 직접 렌더링은 프레임을 더 작은 빈들 또는 타일들로 분할하지 않는다. 오히려, 직접 렌더링에서는, 전체 프레임이 한 번에 렌더링된다. 또한, 일부 유형의 GPU들은 타일드 렌더링과 직접 렌더링 둘 다를 허용할 수도 있다.
그래픽스 프로세싱의 일부 양태들은 광선 추적(ray tracing)과 같은 상이한 유형의 렌더링 기법들을 활용할 수도 있다. 광선 추적은 이미지 평면 내 픽셀들에 대한 빛의 경로를 추적하고 장면 내 오브젝트들과의 그의 만남 효과를 시뮬레이션하여 이미지를 생성하기 위한 렌더링 기법이다. 이렇게 함으로써, 광선 추적은 믿을 수 없을 정도로 사실적인 조명 효과를 생성할 수 있다. 광선 추적은 보다 사실적인 효과(예: 반사들), 향상된 전역 조명, 향상된 광택 효과, 향상된 피사계 심도 등을 제공하는 것을 포함하는 많은 혜택이 있다 광선 추적은 또한, 진한 음영(hard shadow)들 및/또는 연한 음영(soft shadow)들 같은 상이한 유형의 향상된 음영들을 생성하는 데 도움이 될 수도 있다. 광선 추적의 효과들 중 일부에는 간접 조명과 코스틱스(caustics)(즉, 빛 광선이 표면에서 반사되거나 굴절될 때 발생하는 빛과 색상의 패턴)을 묘사하는 능력이 포함될 수도 있다. 결과적으로, 광선 추적을 통해 실사 이미지(photo realistic image)들이 생성될 수도 있다. 광선 추적은 그래픽스 프로세싱 유닛(GPU) 또는 중앙 프로세싱 유닛(CPU)과 같은 그래픽스 프로세싱 또는 데이터 프로세싱 내의 다수의 상이한 프로세서들에 의해 활용될 수도 있다.
도 3은 광선 추적 프로세스의 일례를 포함하는 도면(300)을 예시한다. 도 3에 도시된 바와 같이, 도면(300)은 카메라(310), 픽셀들(322)을 포함하는 이미지 평면(320), 장면 오브젝트(330), 광원(340), 뷰 광선들(350) 및 음영 광선들(352)을 포함한다. 도 3은 뷰 광선들(350)이 카메라(310)로부터 그리고 이미지 평면(320)을 통해 추적되는 것을 도시한다. 이미지 평면(320)을 통과한 후, 뷰 광선들(350)은 장면 오브젝트(330)로 추적된다. 뷰 광선들(350) 중 적어도 일부는 장면 오브젝트(330)에서 추적되고 음영 광선들(352)로서 광원(340)을 향해 추적된다. 따라서, 음영 광선들(352) 및 뷰 광선들(350)은 광원(340)으로부터의 광을 추적할 수도 있다. 도 3은 어떻게 광선 추적이 이미지 평면 내 픽셀들(예를 들어, 이미지 평면(320) 내 픽셀들(322))에 대한 (예를 들어, 광원(340)으로부터의) 빛의 경로를 추적함으로써 이미지를 생성할 수 있는 지를 묘사한다.
광선 추적은 래스터화(rasterization)와 같이 그래픽스 프로세싱에 활용되는 다수의 다른 렌더링 기법들과 구별될 수 있다. 래스터화의 프로세스에서, 장면 내 각각의 프리미티브에 있는 각각의 픽셀에 대해, 픽셀의 일부가 프리미티브에 의해 가려지면 픽셀이 음영화될 수도 있다. 그에 반해서, 광선 추적의 프로세스에서는, 장면 내 프리미티브에 대응하는 각각의 픽셀에 대해, 광선이 생성된다. 생성된 광선이 특정 프리미티브에 부딪히거나 교차하는 것으로 결정되면, 픽셀이 음영화된다. 그래픽스 프로세싱의 일부 사례들에서, 광선 추적 알고리즘은 하이브리드 광선 추적/래스터화 모델 등을 통해 래스터화와 함께 수행될 수도 있다.
도 4a 및 도 4b는 예시적인 래스터화 프로세스 및 예시적인 광선 추적 프로세스를 각각 포함하는 도면(400) 및 도면(450)을 예시한다. 도 4a에 도시된 바와 같이, 도면(400)은 장면 오브젝트(410) 및 픽셀들(420)을 포함한다. 도 4a는 래스터화 프로세스가, 장면 오브젝트(410)를 포함하는 장면 내 픽셀들(420) 각각에 대해, 픽셀의 일부가 프리미티브에 의해 가려지는 경우 픽셀이 음영화된다고 결정하는 것을 묘사한다. 도 4b에 도시된 바와 같이, 도면(450)은 장면 오브젝트(460), 픽셀들(470), 광원(480), 음영 광선(482), 및 1차 광선(484)을 포함한다. 도 4b는 광선 추적 프로세스가, 생성된 광선(예를 들어, 음영 광선(482))이 1차 광선(484)을 통해 픽셀들(470) 중 하나에 대응하는 장면 오브젝트(460) 내 특정 프리미티브에 부딪히거나 교차하면, 픽셀이 음영화된다고 결정하는 것을 묘사한다.
본 명세서에 표시된 바와 같이, 광선 추적 프로세스는 광선이 장면 내 임의의 프리미티브(들)에 부딪히거나/교차하는지 여부를 결정함으로써 수행될 수도 있다. 예를 들어, 광선 추적 알고리즘은 간단한 쿼리 동작을 수행할 수도 있다: 주어진 광선이 장면 내 어느 프리미티브(들)에 부딪힐 것인가/교차할 것인가? 광선 추적 프로세스는 계산 집약적인데, 많은 양의 광선들이 많은 수의 프리미티브들/삼각형들에 대해 추적될 수 있으며, 이는 많은 수의 광선-삼각형 교차 테스트를 활용할 수 있기 때문이다. 예를 들어, 하나의 광선 추적 절차에서, 약 100만 개의 광선들이 약 100만 개의 프리미티브들/삼각형들에 대해 추적될 수 있으며, 이는 약 1조 개의 광선-삼각형 교차 테스트들을 활용할 수 있다. 광선 추적 절차의 일부 양태들에서, 주어진 광선의 원점은 O(N)으로 표현될 수도 있다. 또한, 장면 내 프리미티브들을 교차하는 최소 시간(tmin), 장면 내 프리미티브들을 교차하는 최대 시간(tmax) 및 장면 내 프리미티브들에 교차하는 계산된 거리과 같이 광선에 대해 계산된 다수의 값들이 있을 수도 있다.
도 5은 광선 추적 프로세스의 일례를 포함하는 도면(500)을 예시한다. 도 5에 도시된 바와 같이, 도면(500)은 광선의 원점(O(N)(510)), 장면 내 프리미티브들을 교차하는 최소 시간(tmin 520), 장면 내 프리미티브들을 교차하는 최대 시간(tmax 522), 장면 내 프리미티브들을 교차하는 계산된 거리(거리 530), 및 장면 내 프리미티브들(프리미티브(540), 프리미티브(541), 및 프리미티브(542))의 수를 포함한다. 도 5는 광선 추적 기법들이 광선이 프리미티브에 부딪힐지를 결정하기 위해 다수의 값들을 활용할 수 있음을 보여준다. 예를 들어, 광선이 프리미티브와 교차하는지 결정하기 위해, 광선 추적 기법들은 광선의 원점(O(N) 510), 프리미티브들을 교차하는 최소 시간(tmin 520), 프리미티브들을 교차하는 최대 시간(tmax 522), 프리미티브들을 교차하는 계산된 거리(거리 530), 및 프리미티브들(프리미티브(540), 프리미티브(541), 및 프리미티브(542))의 수를 활용할 수도 있다.
광선 추적은 경계 볼륨 계층(BVH)과 같은 계산 프로세스를 가속하기 위해 다양한 데이터 구조들을 활용할 수도 있다. 경계 볼륨 계층에서, 프리미티브들은 리프 노드(leaf node)들에 보유된다. 또한, 내부 노드들은 특정 리프 노드 지오메트리를 둘러싸는 액세스 정렬 경계 박스(AABB)들을 보유할 수도 있다. 광선 추적을 위한 데이터 구조들은 또한, 내부 노드들에 대한 광선 박스 교차 및/또는 리프 노드들에 대한 광선 삼각형 테스트를 활용할 수도 있다. 이러한 유형의 데이터 구조들은 광선 추적 프로세스의 계산 복잡도(N)를 줄일 수 있으며, 예를 들어 계산 복잡도(N)를 log(N)만큼 줄일 수 있다.
도 6a 및 도 6b는 광선 추적에 활용되는 예시적인 데이터 구조 기법들을 포함하는 도면(600) 및 도면(650)을 각각 예시한다. 도 6a에 도시된 바와 같이, 도면(600)은 다수의 노드들(내부 노드들 N611 - N617) 및 다수의 프리미티브들(프리미티브들 O621 - O628)를 포함한다. 도 6a는 내부 노드들 N611 - N617 및 프리미티브들 O621 - O628에 대한 광선 박스 교차를 묘사한다. 도 6b에 도시된 바와 같이, 도면(650)은 다수의 노드들(리프 노드들 N661 - N667) 및 다수의 프리미티브들(프리미티브들 O671 - O678)를 포함한다. 도 6b는 리프 노드들 N661 - N667 및 프리미티브들 O671 - O678에 대한 광선 삼각형 테스트를 묘사한다. 도 6a 및 도 6b에 있는 데이터 구조 기법들 양자 모두, 예를 들어 광선 박스 교차 및 광선 삼각형 테스트는 광선 추적에서 계산 복잡성을 줄이는 것을 목표로 한다.
본 명세서에 표시된 바처럼, 광선 추적 프로세스 동안 다수의 상이한 스테이지들이 있다. 예를 들어, 광선 추적의 스테이지들은 경계 볼륨 계층 구성 및 정제(bounding volume hierarchy construction and refinement), 광선 생성, 경계 볼륨 계층 순회(traversal), 광선 삼각형 교차, 및 광선 박스 교차를 포함할 수도 있다. 삼각형들을 다수의 그룹들로 파티셔닝하는 것, 각각의 그룹 주위에 경계 박스를 형성하는 것, 및 각각의 그룹을 재귀적으로 파티셔닝하는 것을 포함하는, 경계 볼륨 계층 구성 동안의 상이한 단계들이 또한 있을 수도 있다. 추가적으로, 경계 볼륨 계층 구성 동안 파티셔닝하는 몇 가지 방법이 있을 수 있으며, 이는 특정 수의 가능한 솔루션들, 예를 들어, 2 n log n 개의 솔루션들을 가져올 수도 있다. 결과적으로, 이들 개선된 솔루션들은 개선된 광선 추적 성능을 낳을 수 있다.
광선 추적의 양태들은 또한 분할 경계 볼륨 계층 (SBVH) 및 선형 경계 볼륨 계층 (LBVH) 과 같은 다수의 경계 볼륨 계층 알고리즘들을 활용할 수도 있다. 일부 사례들에서, SBVH는 LBVH에 비해 더 느린 구축 시간들 및 더 양호한 품질을 가져올 수도 있다. 마찬가지로, LBVH는 SBVH에 비해 더 빠른 구축 시간 및 더 불량한 품질을 가져올 수도 있다. 추가적으로, 광선 추적의 일부 양태들은 경계 볼륨 계층 정제를 활용할 수도 있다. 경계 볼륨 계층 정제에서, 리프당 하나의 삼각형을 갖는 이진 BVH가 주어지면, 광선 추적 기법들은 트리 토폴로지를 퍼뮤팅(permuting)할 수도 있다. 경계 볼륨 계층 정제는 상이한 알고리즘들, 예를 들어, 트리렛 재구조화 BVH (TRBVH) 및 병렬 재삽입 BVH (PRBVH) 를 활용할 수도 있다. 광선 추적의 일부 양태들은 또한 이진 트리(예를 들어, 초기 BVH)를 이진 트리 또는 초기 BVH보다 더 넓은 넓은 BVH로 변환할 수도 있는 BVH 확장(widening)을 활용할 수도 있다. 예를 들어, 초기 BVH에서 계층은 3개의 레벨들을 포함할 수도 있으며, 여기서 프리미티브들은 계층의 제3 레벨에 포함된다. 넓은 BVH에서 계층은 2개의 레벨들을 포함할 수도 있으며, 여기서 프리미티브들은 계층의 제2 레벨에 포함된다. BVH 확장의 일부 사례들에서, 넓은 BVH는 특정 양의 AABB들(예: 최대 8개의 AABB들)을 가진 내부 노드와 특정 양의 프리미티브들/삼각형들(예: 최대 4개의 프리미티브들/삼각형들)을 가진 리프 노드를 포함할 수도 있다.
광선 추적의 일부 양태들은 경계 볼륨 계층 압축을 활용할 수도 있다. 가령, 광선 추적 기법들은 고정된 크기(예를 들어, 64 바이트)에 맞도록 넓은 노드들을 압축할 수도 있다. BVH 압축은 AABB들(예를 들어, 8개의 AABB들)의 양 및/또는 제1 자식 인덱스를 압축하는 내부 노드 압축을 포함할 수 있다. BVH 압축은 또한 특정 양의 프리미티브들/삼각형들(예를 들어, 최대 4개의 프리미티브들/삼각형들) 및 대응하는 인덱스들을 압축하는 리프 노드 압축을 포함할 수 있다. 또한, 광선 추적 기법들은 넓은 BVH의 폭 우선 검색 순회(breadth first search traversal) 및/또는 심도 우선 검색 순회(depth first search traversal)와 같은 경계 볼륨 계층 순회를 활용할 수도 있다. 광선 추적 생성의 일부 양태들은 광선들이 온-더-플라이(on-the-fly)로 생성되는 동작을 활용할 수도 있다. 가령, 1차 광선들, 음영 광선들 및/또는 2차 광선들과 같은 다수의 상이한 유형의 광선들이 생성될 수도 있다.
추가적으로, 하드웨어 또는 소프트웨어, 예를 들어, GPU/CPU 하드웨어 또는 소프트웨어에서 활용되는 다수의 상이한 광선 추적 스테이지들이 있을 수도 있다. 예를 들어, 특정 스테이지들에서, 드라이버는 CPU 또는 GPU 상에서 BVH를 구성할 수도 있다(예: BVH 구성 스테이지 및 BVH 노드 압축 스테이지). BVH 순회 스테이지에서, BVH 순회는 GPU에서의 셰이더에서 발생할 수도 있다. 또한, 특정 스테이지들 (예를 들어, BVH 노드 압축해제 스테이지, 광선 경계 박스 교차 스테이지, 및 광선 삼각형 교차 스테이지) 은 GPU 하드웨어에서 구현될 수도 있다.
그래픽스 프로세싱의 양태들은 광선 추적 데이터를 상이한 유형의 메모리, 예를 들어, 시스템 메모리에 저장할 수도 있다. 그러나, 광선 추적 성능에 대한 한 가지 잠재적인 문제는 이용 가능한 메모리 대역폭의 양인데, 메모리(예: 시스템 메모리)로부터 데이터에 액세스하는 데 많은 양의 액세스 사이클들이 소요될 수 있기 때문이다. 일부 사례들에서, 지오메트리 데이터(geometry data)가 가속 구조(예: 경계 볼륨 계층(BVH) 구조)에 저장될 수 있다. 가속 구조 또는 BVH 구조는 다수의 노드들(예: 이진 트리 구조 또는 n진(n-ary) 트리 구조)를 포함하는 트리 구조이며, 여기서 프리미티브 데이터는 리프 노드들(즉, 트리 구조의 분지들에 있는 노드들)에 저장된다. 광선 추적 프로세스에서 각각의 광선에 대해, GPU는 루트 노드(즉, 트리 구조 내 최상위 노드)에서 리프 노드들까지 순회(traverse)해야 할 수도 있다. BVH 구조는 다수의 프리미티브들을 포함하는 그래픽스 프로세싱 장면과 연관될 수도 있다. 또한, 이들 프리미티브들의 각각은 BVH 구조 내 노드들 중 하나에 대응할 수도 있다. 예를 들어, 일부 장면들의 경우, 장면과 연관된 BVH 구조는 수백만 개의 프리미티브들을 보유할 수도 있다.
그래픽스 프로세싱의 일부 양태들에서, 이러한 가속 구조들(예: BVH 구조들)을 GPU에서의 온칩 그래픽스 메모리에 로딩하면 데이터에 대한 더 빠른 액세스를 달성하고 궁극적으로 더 빠른 광선 추적 성능을 달성하는 데 도움이 될 수 있다. 그러나, 일부 사례들에서, 가속 구조들(예를 들어, BVH 구조들)의 크기가 온칩 메모리의 크기보다 훨씬 클 수도 있다. 이러한 크기 격차를 극복하기 위해, 더 작은 가속 구조들이 최상위 레벨 가속 구조들과 유사한 방식으로 온칩 메모리에 로딩될 수도 있다. 또한, 일부 작은 최하위 레벨 가속 구조들(즉, 취상위 레벨 가속 구조들에 비해 크기가 작음)이 또한 온칩 메모리에 배치될 수도 있다. 그러나, 이들 유형의 최하위 레벨 가속 구조들의 조직으로 인해, 온칩 메모리로부터 이들 유형의 최하위 레벨 가속 구조들에 액세스하는 것은 유익하지 못할 수 있다. 그래서, 이들 최하위 레벨 가속 구조들은 광선 추적 성능 사양들을 충족할 만큼 자주 액세스하는 것이 불가능할 수도 있다. 상기한 바에 기초하여, 광선 추적 프로세스와 연관된 가속 구조들(예를 들어, BVH 구조들)의 저장을 최적화하는 것이 유익할 수 있다. 또한 쉽게 액세스할 수 있는 특정 유형의 메모리(예: 온칩 그래픽스 메모리)에 취하위 레벨 가속 구조들을 저장하는 것이 유익할 수도 있다.
본 개시의 양태들은 광선 추적 프로세스들과 연관된 가속 구조들(예를 들어, BVH 구조들)의 저장을 최적화할 수 있다. 가령, 본 개시의 양태들은 이러한 구조들이 쉽게 액세스될 수 있도록 특정 유형의 메모리에 최하위 레벨 가속 구조들을 저장할 수도 있다. 그렇게 하기 위해, 본 개시의 양태들은 최하위 레벨 BVH 구조들을 온칩 그래픽스 메모리(GMEM)에 저장할 수도 있을 뿐만 아니라, 최하위 레벨 BVH 구조들을 시스템 메모리(SYSMEM)에 저장할 수도 있다. 그렇게 함으로써, 본 명세서에 제시된 양태들은 온칩 그래픽스 메모리로부터 BVH 구조들에 더 쉽게 액세스할 수 있다. 일부 사례들에서, 본 개시의 양태들은 온칩 그래픽스 메모리와 시스템 메모리 둘 다에 최하위 레벨 BVH 구조들의 상이한 레벨들을 저장할 수도 있다.
BVH 구조들을 포함하는 노드 저장의 일부 사례들에서, 상위 레벨의 내부 노드들이 더 하위 레벨 노드들에 비해 더 자주 액세스될 수 있다. 따라서, 최하위 레벨 가속 구조들(예를 들어, 루트 노드를 포함하지 않는 BVH 구조들)의 이들 상위 레벨 노드들이 온칩 그래픽스 메모리에 저장되면 이는 광선 추적 성능을 향상시키는 데 도움이 될 수 있다. 예를 들어, 상위 레벨 노드는 최하위 레벨 가속 구조들에서 첫 번째 또는 두 번째 레벨일 수 있다. 본 명세서에 제시된 양태들은 온칩 메모리 또는 그래픽스 메모리(GMEM)에 최하위 레벨 가속 구조들(예를 들어, 루트 노드를 포함하지 않는 BVH 구조들)의 최상위 레벨들을 저장할 수 있다. 최하위 레벨 가속 구조들의 이들 최상위 레벨들은 온칩 그래픽스 메모리 또는 GMEM의 가용성에 기초하여 저장될 수도 있다. 그런 다음 GPU 드라이버는 그래픽스 메모리 가용성 및 최하위 레벨 가속 구조들의 총 수에 기초하여 그래픽스 메모리에 로드할 BVH 구조들의 레벨들의 수를 결정할 수 있다. 일부 사례들에서, BVH 구조들의 나머지 레벨들이 시스템 메모리에 저장될 수 있다.
일부 양태들에서, 드라이버 또는 GPU 드라이버는 각각의 최하위 레벨 BVH 구조에 대해 그래픽스 메모리에 로딩되는 BVH 구조의 레벨들 수로 GPU를 프로그래밍할 수도 있다. GPU 드라이버는 또한, BVH 구조의 어느 레벨들이 시스템 메모리에 로딩되는지를 결정할 수도 있다. BVH 구조의 상이한 레벨들을 그래픽스 메모리 또는 시스템 메모리에 저장한 후, GPU는 그래픽스 메모리 또는 시스템 메모리에서 상이한 개별 노드들에 액세스하려고 시도할 수도 있다. BVH 구조 내 노드의 레벨에 기초하여, GPU는 노드가 그래픽스 메모리에 저장되는지 또는 시스템 메모리에 저장되는지를 결정하고, 다음으로 그에 따라 노드를 페치(즉, 취출)할 수도 있다.
도 7은 노드 저장 구조(예를 들어, 트리 구조)의 일례를 포함하는 도면(700)을 예시한다. 보다 구체적으로, 도면(700)은 그래픽스 메모리 또는 시스템 메모리에 구조의 상이한 노드들을 저장하기 위한 BVH 구조를 포함한다. 도 7에 도시된 바와 같이, 도면(700)은 BVH 구조의 제1 레벨 내 노드들(예를 들어, 노드 N710), BVH 구조의 제2 레벨 내 노드들(예를 들어, 노드들 N720 및 N721), BVH 구조의 제3 레벨 내 노드들(예를 들어, 노드들 N730, N731, N732, 및 N733), BVH 구조의 제4 레벨 내 노드들(예를 들어, 노드들 N740, N741, N742, 및 N743) 및 BVH 구조의 제5 레벨 내 노드들(예를 들어, 노드들 N750, N751, N752, 및 N753) 를 포함한다. 도면(700)에 도시된 노드들은 BVH 구조의 최하위 레벨에 있을 수도 있다. 도 7에 도시된 바와 같이, BVH 구조의 더 상위 레벨 노드들(예를 들어, 노드들 N710, N720, N721, N730, N731, N732, 및 N733)은 그래픽스 메모리 또는 GMEM에 저장될 수도 있다. 또한, BVH 구조의 더 하위 레벨 노드들(예를 들어, 노드들 N740, N741, N742, N743, N750, N751, N752, 및 N753)은 시스템 메모리 또는 SYSMEM에 저장될 수도 있다. 일부 사례들에서, BVH 구조의 더 상위 레벨 및 더 하위 레벨 노드들 양자 모두는 시스템 메모리에 저장될 수도 있다. 추가적으로, 일부 사례들에서, 아래에서 더 자세히 설명되는 바처럼, 드라이버 또는 GPU 드라이버는 BVH 구조의 어느 노드들/레벨들이 그래픽스 메모리 또는 GMEM에 저장되는지 뿐만 아니라 BVH 구조의 어느 노드들/레벨들이 시스템 메모리에 저장되는지를 결정할 수도 있다. 예를 들어, 드라이버 또는 GPU 드라이버는 그래픽스 메모리 또는 GMEM을 검색하여 거기에 저장된 BVH 구조의 노드들/레벨들을 식별할 수도 있다. 또한, 드라이버 또는 GPU 드라이버는 시스템 메모리를 검색하여 거기에 저장된 BVH 구조의 노드들/레벨들을 식별할 수도 있다.
드라이버 또는 GPU 드라이버는 BVH 구조의 노드 저장에 대한 다수의 책임들을 포함할 수도 있다. 예를 들어, GPU 드라이버는 어떤 노드들이 그래픽스 메모리나 시스템 메모리에 저장될 수 있는지를 식별할 수도 있다. 또한, 이용 가능한 온칩 메모리와 최하위 레벨 BVH들의 수에 기초하여, GPU 드라이버는 각각의 BVH에 대해 온칩 그래픽스 메모리(GMEM)에 저장할 노드들/레벨들의 수를 결정할 수도 있다. GPU 드라이버는 또한 GMEM 베이스 어드레스와 GMEM에 저장할 레벨들의 수를 배정할 수도 있다. 또한, GPU 드라이버는 GMEM 베이스 어드레스 및 최대 저장 레벨(예를 들어, GMEM 내 최대 저장 레벨)을 하드웨어 디스크립터 또는 가속 구조(AS) 디스크립터로 업데이트할 수도 있다. AS 디스크립터는 BVH에 대응하는 특정 정보(예: 시스템 어드레스, GMEM 어드레스, GMEM 내 레벨들의 수, GMEM 내 시작 레벨 등)로 GPU 하드웨어에 프로그래밍될 수 있는 구조이다. GPU 드라이버는 또한 인접 메모리(contiguous memory) 내 최대 저장 레벨에 도달할 때까지 모든 노드들을 패킹(packing)/저장할 수도 있다.
GPU 하드웨어는 또한, BVH 구조의 노드 저장에 대한 다수의 책임들을 포함할 수도 있다. 예를 들어, GPU 하드웨어는 BVH 구조에 저장된 각각의 노드의 레벨을 식별하거나 추적할 수도 있다. 추가적으로, BVH 구조 내 노드의 레벨에 기초하여, GPU 하드웨어는 메모리로부터 노드를 취출하기 위해 메모리(예를 들어, GMEM 또는 SYSMEM)에 페치 요청(즉, 취출 요청)을 전송할 수도 있다. 일부 사례들에서, 자주 액세스할 수 있는 노드들의 대부분이 시스템 메모리보다는 그래픽스 메모리에 저장될 수 있는데, 이는 시스템 메모리에 비해 그래픽스 메모리에서 노드들을 취출하는 것이 더 빠를 수 있기 때문이다.
도 8a는 노드 저장 구조(예를 들어, 트리 구조)의 일례를 포함하는 도면(800)을 예시한다. 가령, 도면(800)은 그래픽스 메모리 또는 시스템 메모리에 구조의 상이한 노드들을 저장하기 위한 BVH 구조를 포함한다. 도 8a에 도시된 바와 같이, 도면(800)은 BVH 구조의 제1 레벨 내 노드들(예를 들어, 노드(801)), BVH 구조의 제2 레벨 내 노드들(예를 들어, 노드들(802 및 803)), BVH 구조의 제3 레벨 내 노드들(예를 들어, 노드들(804, 805, 806, 및 807)), BVH 구조의 제4 레벨 내 노드들(예를 들어, 노드들(808, 809, 810, 및 811)) 및 BVH 구조의 제5 레벨 내 노드들(예를 들어, 노드들(812, 813, 814, 및 815)) 를 포함한다. 본 명세서에 표시된 바처럼, 도 8a의 도면(800)에 도시된 노드들은 BVH 구조의 최하위 레벨에 있을 수도 있다.
도 8a 및 도 8b에 예시된 바와 같이, 최하위 레벨 BVH 구조의 더 상위 레벨 노드들(예를 들어, 노드들(801, 802, 803, 804, 805, 806, 및 807))은 그래픽스 메모리 또는 GMEM에 저장될 수도 있다. 가령, 도 8b의 도면(830)에 도시된 바와 같이, 노드들(801, 802, 803, 804, 805, 806, 및 807)은 그래픽스 메모리(832)에 저장될 수 있다. 도 8b는 또한 노드들이 메모리 내의 오프셋(예를 들어, GMEM 오프셋(834))에 기초하여 그래픽스 메모리(832)에 저장될 수도 있다는 것을 보여준다. 이 오프셋은 시작 노드 오프셋뿐만 아니라 GMEM의 베이스 어드레스에 기초한 GMEM 시작 오프셋일 수도 있다.
도 8a 및 도 8c에 묘사된 바와 같이, BVH 구조의 더 하위 레벨 노드들(예를 들어, 노드들(808, 809, 810, 811, 812, 813, 814, 및 815))은 시스템 메모리 또는 SYSMEM에 저장될 수도 있다. 가령, 도 8c의 도면(860)에 도시된 바와 같이, 노드들(808, 809, 810, 811, 812, 813, 814, 및 815)은 시스템 메모리(862)에 저장될 수도 있다. 추가적으로, 도 8c에 도시된 바처럼, BVH 구조의 더 상위 레벨 및 더 하위 레벨 노드들 양자 모두는 시스템 메모리에 저장될 수도 있다. 예를 들어, 노드들(801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 및 815)은 시스템 메모리(862)에 저장될 수도 있다. 도 8c는 또한 노드들이 메모리 내의 오프셋(예를 들어, SYSMEM 오프셋(864))에 기초하여 시스템 메모리(862)에 저장될 수도 있다는 것을 보여준다. 이 오프셋은 시작 노드 오프셋뿐만 아니라 SYSMEM의 베이스 어드레스에 기초한 SYSMEM 시작 오프셋일 수도 있다. 더욱이, 드라이버 또는 GPU 드라이버는 BVH 구조의 어느 노드들/레벨들이 그래픽스 메모리(832)에 저장되는지, 그리고 BVH 구조의 어느 노드들/레벨들이 시스템 메모리(862)에 저장되는지 결정할 수도 있다. 예를 들어, 드라이버 또는 GPU 드라이버는 그래픽스 메모리(832)를 검색하여 거기에 저장된 BVH 구조의 노드들/레벨들을 식별할 수도 있다. 또한, 드라이버 또는 GPU 드라이버는 시스템 메모리(862)를 검색하여 거기에 저장된 BVH 구조의 노드들/레벨들을 식별할 수도 있다.
도 8a, 8b, 및 8c에 나타낸 바와 같이, 노드들이 GMEM(예를 들어, 그래픽스 메모리(832)) 또는 SYSMEM(예를 들어, 시스템 메모리(862))에 저장된 후, 노드들은 GMEM 또는 SYSMEM으로부터 페치되거나 취출될 수도 있다. 일부 사례들에서, 더 상위 레벨 노드들(예: 노드들(801-807))의 대부분이 시스템 메모리보다는 그래픽스 메모리(832)에 저장될 수도 있는데, 이는 더 상위 레벨 노드들이 하위 레벨 노드들(예: 노드들(808-815))보다 더 자주 액세스될 수 있기 때문이다. 실제로, 시스템 메모리(862)에 비해 그래픽스 메모리(832)로부터 노드들을 취출하는 것이 더 빠를 수 있으므로, 더 자주 액세스되는 노드들(예를 들어, 더 상위 레벨 노드들(801-807))이 그래픽스 메모리(832)에 저장될 수 있다. 더 하위 레벨 노드들(예를 들어, 노드들(808-815))은 시스템 메모리(862)에 저장될 수 있는데, 이는 이들 노드들이 더 상위 레벨 노드들에 비해 자주 액세스되지 않을 수 있고 그래픽스 메모리(832)에 비해 시스템 메모리(862)에 액세스하는 데 더 오랜 시간이 걸릴 수 있기 때문이다. 도 8c에 도시된 바와 같이, 일부 사례들에서, 더 상위 레벨 노드들(예: 노드들(801-807)) 및 더 하위 레벨 노드들(예: 노드들(808-815)) 양자 모두는 시스템 메모리(862)에 저장될 수도 있다.
본 명세서에 제시된 양태들은 또한 어떤 레벨들이 GMEM에 저장되고 어떤 레벨들이 SYSMEM에 저장되는지를 결정하는 것과 같이 BVH 구조의 상이한 레벨들을 분할/할당하기 위한 상이한 방법들을 포함할 수도 있다. 예를 들어, 본 개시의 양태들은 어떤 레벨들이 GMEM 또는 SYSMEM에 저장되는지 식별하기 위한 것과 같이 노드 저장 구조(예를 들어, 트리 구조)를 분할하기 위한 알고리즘을 포함할 수도 있다. 일 양태에서, 알고리즘은 GMEM에 로드/저장할 레벨들의 최상위 수(예를 들어, n 개의 최상위 레벨들)를 결정하기 위해 노드 저장 구조를 분할/할당할 수도 있다. 예를 들어, 최상위/상위 레벨들은 노드 저장 구조 내 최상위 2개 레벨들일 수도 있으므로, 알고리즘은 GMEM에 저장할 최상위 2개 레벨들을 할당할 수도 있다. 알고리즘은 나머지 레벨들(즉, GMEM에 저장되지 않은 레벨들)이 SYSMEM에 저장될 것을 결정할 수도 있다. 추가적으로, 알고리즘은 특정 수의 레벨들(예: n개 레벨들)까지 심도 우선 순회를 수행하고 이들 레벨의 노드들을 인접 메모리에 배치하는 한편, 다른 수의 노드 레벨들(예: n+1개 노드 레벨들)을 대기열(queue) 또는 저장소(storage)에 추가할 수도 있다. 예를 들어, 알고리즘은 노드 저장 구조 내 최상위 2개 레벨들에 대해 심도 우선 순회를 수행하고 이들 최상위 2개 노드 레벨들을 인접 메모리에 배치하는 한편, 다른 3개 레벨들을 대기열 또는 저장소에 추가할 수도 있다. 다음으로, 여기에 제시된 양태들은 알고리즘의 제1 패스 동안 패킹된 노드들의 수를 저장할 수도 있다. 추가로, 여기에 제시된 양태들은 n+1개 레벨 노드들 각각을 대기열에서 디큐잉(즉, 대기열에서 제거)하고 이들 디큐잉된 노드들 각각으로부터 심도 우선 순회를 수행할 수도 있다. 그렇게 한 후, 이들 디큐잉된 노드들은 인접 메모리에 배치될 수도 있다. 일부 사례들에서, 최상위 레벨 노드들이 더 하위 노드들에 비해 향상된 캐시 히트들을 받을 수 있고, 그러한 경우들에서, 중간 레벨 노드들을 로딩/저장하는 것도 유리할 수 있다.
추가적으로, 본 명세서에 제시된 양태들은 특정 범위의 노드 레벨들(예를 들어, BVH 구조의 레벨 m 에서 레벨 n 까지)을 GMEM에 저장하기 위해 BVH 구조를 분할하기 위한 알고리즘을 포함할 수도 있다. 본 명세서에 제시된 양태들은 제1 수의 레벨들(예를 들어, m개 레벨들)까지 심도 우선 순회를 수행하고 이들 레벨을 인접 메모리에 배치할 수도 있다. 동시에, 제2 수의 노드 레벨들(예를 들어, m+1개 레벨들)이 대기열에 추가될 수도 있다. 또한, 본 명세서에 제시된 양태들은 알고리즘의 제1 패스 동안 패킹된 노드들의 수를 저장할 수도 있다. 본 명세서에 제시된 양태들은 또한 대기열에서 제2 수의 노드 레벨들(예를 들어, m+1개 레벨들)의 각각을 디큐잉할 수 있을 뿐만 아니라, 특정 수의 노드 레벨들(예: n개 레벨들)에 도달할 때까지 이들 디큐잉된 노드들의 각각으로부터 심도 우선 순회를 수행하고 이들 레벨들을 인접 메모리에 배치할 수 있다. 동시에, 본 명세서에 존재하는 양태들은 대기열에 소정 수의 노드 레벨들(예를 들어, n+1개 레벨들)을 배치할 수도 있다. 본 개시의 양태들은 또한 알고리즘의 제2 패스 동안 패킹된 노드들의 수를 저장할 수도 있다. 추가적으로, n+1개 레벨 노드들의 각각은 대기열로부터 디큐잉될 수 있고, 그 후 디큐잉된 노드들 각각으로부터 심도 우선 순회가 수행될 수도 있다. 디큐잉된 노드들은 인접 메모리에 배치될 수도 있는 한편, 동시에 n+1개 노드 레벨들을 대기열에 배치할 수도 있다.
일부 양태들에서, 드라이버 또는 GPU 드라이버는 메모리(예를 들어, GMEM 또는 SYSMEM)에 로딩/저장될 각각의 BVH 구조의 레벨들의 수를 결정할 수도 있다. 예를 들어, GPU 드라이버는 휴리스틱스(heuristics) 및/또는 GMEM의 저장 가용성에 기초하여 레벨들의 수를 결정할 수도 있다. 광선 추적 프로세스 동안, GPU 드라이버는 BVH 구조의 지정된 레벨들을 GMEM에 로딩할 수도 있다. BVH 구조의 이들 지정된 레벨들은 동적으로 로딩될 수도 있으며 이에 따라 하드웨어 디스크립터가 프로그래밍될 수도 있다. 최상위 레벨 가속 구조를 구성하는 동안, 드라이버는 어떤 BVH 구조가 GMEM에 부분적으로 로딩되는지, GMEM에 완전히 로딩되는지, 또는 완전히 스킵(skip)되는지를 결정하거나 완성할 수도 있다. 이 결정은 휴리스틱스 및/또는 GMEM의 저장 가용성에 기초할 수도 있다.
또한, GPU 드라이버는 특정 정보로 각각의 가속 구조(AS) 디스크립터 또는 하드웨어 디스크립터에 대한 GPU 하드웨어를 프로그래밍할 수도 있다. 가령, GPU 드라이버는 GMEM 시작 오프셋 값(즉, GMEM 베이스 어드레스로부터의 오프셋)으로 GPU 하드웨어를 프로그래밍할 수도 있다. 예를 들어, GMEM 시작 오프셋 값은 GMEM 베이스 어드레스로부터 2개 또는 3개 어드레스들의 오프셋일 수도 있다. GPU 드라이버는 또한 시작 노드 오프셋(즉, 시작 노드로부터의 오프셋 양)으로 GPU 하드웨어를 프로그래밍할 수도 있다. 또한, GPU 드라이버는 GMEM 내 BVH 시작 레벨(즉, GMEM에 노드들이 존재하는 BVH의 시작 레벨)로 GPU 하드웨어를 프로그래밍할 수도 있다. 또한, GPU 드라이버는 GMEM 내 BVH 종료 레벨(즉, GMEM 내 BVH의 마지막 레벨의 종료점)로 GPU 하드웨어를 프로그래밍할 수도 있다. GPU 드라이버는 또한 시스템 메모리 어드레스로 GPU 하드웨어를 프로그래밍할 수도 있다.
도 9은 노드 저장 프로세스를 위한 호출 흐름(call flow)의 일례를 포함하는 도면(900)을 예시한다. 보다 구체적으로, 도면(900)은 그래픽스 메모리 및/또는 시스템 메모리에 BVH 구조의 상위 노드 레벨들을 저장하기 위한 드라이버 또는 GPU 드라이버의 호출 흐름을 포함한다. 도 9에 도시된 바와 같이, 도면(900)은 노드 저장 호출 흐름의 다수의 단계들(예를 들어, 단계들(910, 920, 930, 940, 950, 960 및 970))를 포함한다. 단계(910)에서, 애플리케이션은 장면 내 특정 지오메트리(예를 들어, 애플리케이션에 의해 드라이버에게 제공되는 지오메트리)에 대한 BVH 구조를 구축하거나 구성하라는 요청을 드라이버에게 보낼 수도 있다. 단계(920)에서, 드라이버는 이용 가능한 GMEM 크기 및 장면 내 BVH(들)의 수에 기초하여 GMEM에 배치할 레벨들의 수를 결정할 수도 있다. 단계(930)에서, 드라이버는 GMEM에 배치된 BVH 노드들이 인접 메모리 위치에 배치된다는 제약으로 BVH를 구성할 수도 있다. 단계(940)에서, 드라이버는 오프셋 및 크기를 결정할 뿐만 아니라 GMEM의 일부를 BVH 구조에 할당할 수도 있다. 드라이버는 또한 BVH 디스크립터에 정보/상세들, 예를 들어, GMEM 시작 오프셋, 시작 노드 오프셋, GMEM 내 BVH 시작 레벨, 및 GMEM 내 BVH 종료 레벨을 추가할 수도 있다. 단계(950)에서, BVH에 대한 광선 추적을 개시하기 전에, 드라이버는 (시작 레벨 및 종료 레벨에 대응하는) 인접 메모리 내 데이터를 미리 결정된 GMEM 시작 오프셋으로 GMEM에 로딩할 수도 있다. 단계(960)에서, 드라이버는 GMEM 어드레스, SYSMEM 어드레스, GMEM 시작 및 종료 레벨 정보를 포함하는 BVH 기술자로 GPU를 프로그래밍할 수도 있다. 단계(970)에서, 드라이버는 BVH 구조를 순회하는 광선들을 디스패칭(dispatching)함으로써 GPU 상에서 광선 추적을 개시할 수도 있다.
도 10은 노드 저장 프로세스를 위한 호출 흐름의 일례를 포함하는 도면(1000)을 예시한다. 보다 구체적으로, 도면(1000)은 그래픽스 메모리 및/또는 시스템 메모리에 BVH 구조의 상위 노드 레벨들을 저장하기 위한 GPU 또는 GPU 하드웨어의 호출 흐름을 포함한다. 도 10에 도시된 바와 같이, 도면(1000)은 노드 저장 호출 흐름의 다수의 단계들(예를 들어, 단계들(1010, 1020, 1030, 1040, 1050, 1060 및 1070))를 포함한다. 단계(1010)에서, GPU는 광선 추적 절차와 연관된 특정 광선을 추적할 수도 있다. 단계(1020)에서, GPU는 레벨 ID 및/또는 노드 ID에 대응하는 BVH 노드를 페치(즉, 취출)할 수도 있다. 단계(1030)에서 GPU는 레벨 ID가 GMEM 시작 레벨과 GMEM 종료 레벨 사이에 있는지 여부를 결정할 수도 있다. 레벨 ID가 GMEM 시작 레벨과 GMEM 종료 레벨 사이에 있으면, 단계(1040)에서 GPU는 GMEM으로부터 노드와 연관된 데이터를 페치할 수도 있다. 데이터를 페치하기 위해, 단계(1050)에서, GPU는 노드 ID와 GMEM 오프셋에 기초하여 노드 어드레스를 계산할 수도 있다. 예를 들어, 노드 어드레스는 부모 노드에 존재하는 노드 ID(즉, 부모 노드가 자식 노드 ID들을 보유함)에 기초하여 계산될 수도 있다. 그렇게 한 후에, GPU는 노드와 관련된 데이터에 대한 페치를 발행할 수도 있다. 레벨 ID가 GMEM 시작 레벨과 GMEM 종료 레벨 사이에 있지 않으면, 단계(1042)에서 GPU는 SYSMEM으로부터 노드와 연관된 데이터를 페치할 수도 있다. 데이터를 페치하기 위해, 단계(1052)에서, GPU는 노드 ID와 SYSMEM 베이스 어드레스에 기초하여 노드 어드레스를 계산할 수도 있다. 그렇게 한 후에, GPU는 노드와 관련된 데이터에 대한 페치를 발행할 수도 있다. 단계(1060)에서, GPU는 노드가 내부 노드인지 여부를 결정할 수도 있다. 노드가 내부 노드인 경우, 단계(1070)에서, GPU는 광선 박스 교차를 수행할 수도 있다. 노드가 내부 노드가 아닌 경우에, 단계(1072)에서, GPU는 광선 삼각형 교차를 수행할 수도 있다.
도 10은 GPU 또는 GPU 하드웨어에서의 노드 저장 호출 흐름의 상세들을 묘사한다. 도 10에 도시된 바와 같이, GPU는 GPU에서 레벨 ID를 구현할 수도 있다. 레벨 ID는 루트 노드에서 특정 값(예를 들어, 0의 값)으로 초기화된 후, 현재 레벨 노드의 자식 노드에 액세스하면서 그 값을 증분(예를 들어, 1씩 값을 증분)할 수도 있다. 이와 같이 GPU는 BVH 구조를 순회하는 동시에 노드의 레벨 ID를 유지할 수도 있다.
본 개시의 양태들은 다수의 이익들 또는 이점들을 포함할 수도 있다. 가령, 본 개시의 양태는 광선 추적 프로세스와 연관된 가속 구조들(예를 들어, BVH 구조들)의 저장을 최적화할 수 있다. 저장 프로세스를 최적화하기 위해, 본 개시의 양태들은 특정 유형의 메모리(예를 들어, GMEM) 내 최하위 레벨 가속 구조들에 특정 노드들을 저장할 수 있으므로, 이러한 노드들은 더 쉽게 액세스할 수 있다. 그렇게 함으로써, 본 명세서에 제시된 양태들은 온칩 그래픽스 메모리로부터 BVH 구조들에 더 쉽게 액세스할 수 있으며, 이는 차례로 광선 추적 성능을 최적화하거나 향상시킬 수 있다.
도 11 은 본 개시의 하나 이상의 기법들에 따른 그래픽스 프로세싱의 통신 흐름도 (1100) 이다. 도 11 에 도시된 바와 같이, 도면(1100)은 본 개시의 하나 이상의 기법들에 따라 GPU(또는 다른 그래픽스 프로세서)의 컴포넌트들, 이를테면 GPU 컴포넌트(1102), GPU 컴포넌트(1104) 및 메모리(1106) (예를 들어, GMEM 또는 SYSMEM) 사이의 예시적인 통신을 포함한다.
1110에서, GPU 컴포넌트(1102)는 복수의 레벨들 및 복수의 노드들을 포함하는 경계 볼륨 계층(BVH) 구조를 획득할 수도 있고, 복수의 레벨들의 각각은 복수의 노드들 중 적어도 하나의 노드를 포함하며, BVH 구조는 장면 내 복수의 프리미티브들(예를 들어, 프리미티브들(1112))에 대한 지오메트리 데이터와 연관된다. 장면 내 프리미티브들(예를 들어, 프리미티브들(1112))은 GPU의 다른 컴포넌트 또는 다른 부분(예를 들어, GPU 컴포넌트(1104))으로부터 수신될 수도 있다. 복수의 노드들은 복수의 내부 노드들 및 복수의 리프 노드들을 포함할 수도 있으며, 여기서 복수의 내부 노드들은 복수의 프리미티브들에 대한 복수의 경계 박스들과 연관될 수도 있고, 복수의 리프 노드들은 복수의 프리미티브들에 대한 지오메트리 데이터와 연관될 수도 있다. BVH 구조는 장면 내 복수의 프리미티브들에 대한 광선 추적 프로세스와 연관된 데이터 구조일 수도 있고, 광선 추적 프로세스는 복수의 프리미티브들에 대한 지오메트리 데이터와 연관된 복수의 광선들을 포함할 수도 있다.
1120에서, GPU 컴포넌트(1102)는 BVH 구조 내 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 제1 메모리 내 저장량을 식별할 수도 있다.
1130에서, GPU 컴포넌트(1102)는 제1 메모리 내 저장량에 기초하여, 복수의 제1 노드들을 포함하는 제1 BVH 섹션 및 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 BVH 구조를 할당할 수도 있고, BVH 구조는 복수의 제1 노드들 및 복수의 제2 노드들을 포함하는 복수의 노드들의 계층에 기초하여 할당된다. 복수의 제1 노드들은 장면 내 복수의 프리미티브들에 대한 광선 추적 프로세스에서 제1 광선량과 연관될 수도 있고, 복수의 제2 노드들은 광선 추적 프로세스에서 제2 광선량과 연관될 수도 있고, 여기서 제1 광선량은 제2 광선량과 상이하다. 복수의 노드들의 계층은 BVH 구조에서 복수의 노드들 각각에 대한 노드 식별자(ID) 및 복수의 레벨들 각각에 대한 레벨 ID와 연관될 수도 있으며, 여기서 복수의 제1 노드들은 복수의 레벨들의 제1 섹션에 대응할 수도 있고 복수의 제2 노드들은 복수의 레벨들의 제2 섹션에 대응할 수도 있다. BVH 구조는 복수의 레벨들의 제1 섹션과 복수의 레벨들의 제2 섹션에 기초하여 할당될 수도 있으며, 복수의 레벨들 중 각각의 레벨은 복수의 레벨들 중 다른 레벨들과 비교하여 상이한 레벨 ID를 포함할 수도 있다. 또한, 복수의 제1 노드들은 BVH 구조에서 상위 레벨 노드들에 대응할 수도 있고, 복수의 제2 노드들은 BVH 구조에서 하위 레벨 노드들에 대응할 수도 있다. 상위 레벨 노드들은 BVH 구조에서 루트 노드를 포함할 수도 있고 하위 레벨 노드들은 복수의 리프 노드들을 포함할 수도 있다.
1140에서, GPU 컴포넌트(1102)는 복수의 제1 노드들과 연관된 제1 데이터(예를 들어, 데이터(1142))를 제1 메모리에 저장할 수도 있다. 일부 양태들에서, 1140에서, GPU 컴포넌트(1102)는 또한 복수의 제1 노드들 및 복수의 제2 노드들과 연관된 제2 데이터(예를 들어, 데이터(1142))를 제2 메모리에 저장할 수도 있다. 복수의 제1 노드들과 연관된 제1 데이터는 제1 메모리 내 식별된 저장량과 동일할 수도 있다.
1150에서, GPU 컴포넌트(1102)는 제1 데이터 또는 제2 데이터 중 적어도 하나를 취출하기 전에, 복수의 제1 노드들의 제1 어드레스 또는 복수의 제2 노드들의 제2 어드레스 중 적어도 하나를 계산할 수도 있다. 복수의 제1 노드들의 제1 어드레스는 제1 메모리의 오프셋 값과 복수의 제1 노드들의 각각에 대한 노드 식별자(ID)에 기초하여 계산될 수 있고, 복수의 제2 노드들의 제2 어드레스는 제2 메모리의 베이스 어드레스 및 복수의 제2 노드들의 각각에 대한 노드 ID에 기초하여 계산될 수도 있다.
1160에서, GPU 컴포넌트(1102) 는 제1 데이터 및 제2 데이터를 저장한 후, 제1 메모리로부터의 제1 데이터 또는 제2 메모리로부터의 제2 데이터(예를 들어, 데이터(1142)) 중 적어도 하나를 취출할 수도 있으며, 여기서 제1 데이터 또는 제2 데이터는 계산된 제1 어드레스 또는 계산된 제2 어드레스에 기초하여 취출된다. 제1 데이터 또는 제2 데이터 중 적어도 하나는 BVH 구조에서 복수의 노드들 각각에 대한 노드 식별자(ID) 또는 복수의 레벨들의 각각의 레벨에 대한 레벨 ID에 기초하여 취출될 수도 있다. 또한, 복수의 제1 노드들의 계층에 기초하여, 제1 데이터 또는 제2 데이터 중 적어도 하나가 취출될 수도 있다. 제1 메모리는 그래픽스 메모리일 수도 있고, 제2 메모리는 시스템 메모리일 수도 있다. 또한, GPU 컴포넌트(1102)는 제1 메모리로부터의 제1 데이터 또는 제2 메모리로부터의 제2 데이터 중 적어도 하나를 페치할 수도 있다. 가령, 제1 데이터 또는 제2 데이터 중 적어도 하나를 취출하는 것은 제1 메모리로부터 제1 데이터 또는 제2 메모리로부터 제2 데이터 중 적어도 하나를 페치하는 것을 포함할 수도 있다.
1170에서, GPU 컴포넌트(1102)는 제1 데이터 또는 제2 데이터 중 적어도 하나에 기초하여, 복수의 노드들 중 복수의 내부 노드들에 대한 광선 삼각형 교차 또는 복수의 노드들 중 복수의 리프 노드들에 대한 광선 박스 교차 중 적어도 하나를 수행할 수도 있다.
도 12는 본 개시의 하나 이상의 기법들에 따른 그래픽스 프로세싱의 예시적인 방법의 플로우차트(1200)이다. 방법은 GPU, 이를테면 그래픽스 프로세싱을 위한 장치, 그래픽스 프로세서, CPU, 무선 통신 디바이스, 및/또는 도 1 내지 도 11의 예와 관련하여 사용되는 바처럼 그래픽스 프로세싱을 수행할 수도 있는 임의의 장치에 의해 수행될 수도 있다. 본 명세서에 설명된 방법들은, 리소스 활용 및/또는 전력 절약을 향상시키는 것과 같은 다수의 이익들을 제공할 수 있다.
1202에서, GPU는 도 1 내지 도 11에 있는 예들과 관련하여 설명된 바처럼, 복수의 레벨들 및 복수의 노드들을 포함하는 BVH 구조를 획득할 수도 있고, 복수의 레벨들의 각각은 복수의 노드들 중 적어도 하나의 노드를 포함하며, BVH 구조는 장면 내 복수의 프리미티브들에 대한 지오메트리 데이터와 연관된다. 예를 들어, 도 11의 1110에 설명되어 있는 바처럼, GPU 컴포넌트(1102)는 복수의 레벨들 및 복수의 노드들을 포함하는 BVH 구조를 획득할 수도 있고, 복수의 레벨들의 각각은 복수의 노드들 중 적어도 하나의 노드를 포함하며, BVH 구조는 장면 내 복수의 프리미티브들에 대한 지오메트리 데이터와 연관된다. 또한, 단계(1202)는 도 1에 있는 프로세싱 유닛 (120) 에 의해 수행될 수도 있다. 복수의 노드들은 복수의 내부 노드들 및 복수의 리프 노드들을 포함할 수도 있으며, 여기서 복수의 내부 노드들은 복수의 프리미티브들에 대한 복수의 경계 박스들과 연관될 수도 있고, 복수의 리프 노드들은 복수의 프리미티브들에 대한 지오메트리 데이터와 연관될 수도 있다. BVH 구조는 장면 내 복수의 프리미티브들에 대한 광선 추적 프로세스와 연관된 데이터 구조일 수도 있고, 광선 추적 프로세스는 복수의 프리미티브들에 대한 지오메트리 데이터와 연관된 복수의 광선들을 포함할 수도 있다.
1204에서, GPU는 도 1 내지 도 11의 예와 관련하여 설명된 바와 같이, BVH 구조 내 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 제1 메모리내 저장량을 식별할 수도 있다. 예를 들어, 도 11의 1120에 설명된 바처럼, GPU 컴포넌트(1102)는 BVH 구조 내 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 제1 메모리 내 저장량을 식별할 수도 있다. 또한, 단계(1204)는 도 1에 있는 프로세싱 유닛 (120) 에 의해 수행될 수도 있다.
1206에서, GPU는, 도 1 내지 도 11에 있는 예들과 관련하여 설명된 바처럼, 제1 메모리 내 저장량에 기초하여, 복수의 제1 노드들을 포함하는 제1 BVH 섹션 및 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 BVH 구조를 할당할 수도 있고, BVH 구조는 복수의 제1 노드들 및 복수의 제2 노드들을 포함하는 복수의 노드들의 계층에 기초하여 할당된다. 예를 들어, 도 11의 1130에서 설명된 바처럼, GPU 컴포넌트(1102)는 제1 메모리 내 저장량에 기초하여, 복수의 제1 노드들을 포함하는 제1 BVH 섹션 및 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 BVH 구조를 할당할 수도 있고, BVH 구조는 복수의 제1 노드들 및 복수의 제2 노드들을 포함하는 복수의 노드들의 계층에 기초하여 할당된다. 또한, 단계(1206)는 도 1에 있는 프로세싱 유닛 (120) 에 의해 수행될 수도 있다. 복수의 제1 노드들은 장면 내 복수의 프리미티브들에 대한 광선 추적 프로세스에서 제1 광선량과 연관될 수도 있고, 복수의 제2 노드들은 광선 추적 프로세스에서 제2 광선량과 연관될 수도 있고, 여기서 제1 광선량은 제2 광선량과 상이하다. 복수의 노드들의 계층은 BVH 구조에서 복수의 노드들 각각에 대한 노드 식별자(ID) 및 복수의 레벨들 각각에 대한 레벨 ID와 연관될 수도 있으며, 여기서 복수의 제1 노드들은 복수의 레벨들의 제1 섹션에 대응할 수도 있고 복수의 제2 노드들은 복수의 레벨들의 제2 섹션에 대응할 수도 있다. BVH 구조는 복수의 레벨들의 제1 섹션과 복수의 레벨들의 제2 섹션에 기초하여 할당될 수도 있으며, 복수의 레벨들 중 각각의 레벨은 복수의 레벨들 중 다른 레벨들과 비교하여 상이한 레벨 ID를 포함할 수도 있다. 또한, 복수의 제1 노드들은 BVH 구조에서 상위 레벨 노드들에 대응할 수도 있고, 복수의 제2 노드들은 BVH 구조에서 하위 레벨 노드들에 대응할 수도 있다. 상위 레벨 노드들은 BVH 구조에서 루트 노드를 포함할 수도 있고 하위 레벨 노드들은 복수의 리프 노드들을 포함할 수도 있다.
1208에서, GPU는 도 1 내지 도 11 에 있는 예들과 관련하여 설명된 바와 같이, 복수의 제1 노드들과 연관된 제1 데이터를 제1 메모리에 저장할 수도 있다. 일부 양태들에서, 1208에서, GPU는 또한 복수의 제1 노드들 및 복수의 제2 노드들과 연관된 제2 데이터를 제2 메모리에 저장할 수도 있다. 예를 들어, 도 11의 1140에 설명된 바처럼, GPU 컴포넌트(1102)는 또한 제1 메모리에 복수의 제1 노드들과 연관된 제1 데이터 그리고 제2 메모리에 복수의 제1 노드들 및 복수의 제2 노드들과 연관된 제2 데이터를 저장할 수도 있다. 또한, 단계(1208)는 도 1에 있는 프로세싱 유닛 (120) 에 의해 수행될 수도 있다. 복수의 제1 노드들과 연관된 제1 데이터는 제1 메모리 내 식별된 저장량과 동일할 수도 있다.
도 13는 본 개시의 하나 이상의 기법들에 따른 그래픽스 프로세싱의 예시적인 방법의 플로우차트(1300)이다. 방법은 GPU, 이를테면 그래픽스 프로세싱을 위한 장치, 그래픽스 프로세서, CPU, 무선 통신 디바이스, 및/또는 도 1 내지 도 11의 예와 관련하여 사용되는 바처럼 그래픽스 프로세싱을 수행할 수도 있는 임의의 장치에 의해 수행될 수도 있다. 본 명세서에 설명된 방법들은, 리소스 활용 및/또는 전력 절약을 향상시키는 것과 같은 다수의 이익들을 제공할 수 있다.
1302에서, GPU는 도 1 내지 도 11에 있는 예들과 관련하여 설명된 바처럼, 복수의 레벨들 및 복수의 노드들을 포함하는 BVH 구조를 획득할 수도 있고, 복수의 레벨들의 각각은 복수의 노드들 중 적어도 하나의 노드를 포함하며, BVH 구조는 장면 내 복수의 프리미티브들에 대한 지오메트리 데이터와 연관된다. 예를 들어, 도 11의 1110에 설명되어 있는 바처럼, GPU 컴포넌트(1102)는 복수의 레벨들 및 복수의 노드들을 포함하는 BVH 구조를 획득할 수도 있고, 복수의 레벨들의 각각은 복수의 노드들 중 적어도 하나의 노드를 포함하며, BVH 구조는 장면 내 복수의 프리미티브들에 대한 지오메트리 데이터와 연관된다. 또한, 단계(1302)는 도 1에 있는 프로세싱 유닛 (120) 에 의해 수행될 수도 있다. 복수의 노드들은 복수의 내부 노드들 및 복수의 리프 노드들을 포함할 수도 있으며, 여기서 복수의 내부 노드들은 복수의 프리미티브들에 대한 복수의 경계 박스들과 연관될 수도 있고, 복수의 리프 노드들은 복수의 프리미티브들에 대한 지오메트리 데이터와 연관될 수도 있다. BVH 구조는 장면 내 복수의 프리미티브들에 대한 광선 추적 프로세스와 연관된 데이터 구조일 수도 있고, 광선 추적 프로세스는 복수의 프리미티브들에 대한 지오메트리 데이터와 연관된 복수의 광선들을 포함할 수도 있다.
1304에서, GPU는 도 1 내지 도 11의 예와 관련하여 설명된 바와 같이, BVH 구조 내 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 제1 메모리내 저장량을 식별할 수도 있다. 예를 들어, 도 11의 1120에 설명된 바처럼, GPU 컴포넌트(1102)는 BVH 구조 내 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 제1 메모리 내 저장량을 식별할 수도 있다. 또한, 단계(1304)는 도 1에 있는 프로세싱 유닛 (120) 에 의해 수행될 수도 있다.
1306에서, GPU는, 도 1 내지 도 11에 있는 예들과 관련하여 설명된 바처럼, 제1 메모리 내 저장량에 기초하여, 복수의 제1 노드들을 포함하는 제1 BVH 섹션 및 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 BVH 구조를 할당할 수도 있고, BVH 구조는 복수의 제1 노드들 및 복수의 제2 노드들을 포함하는 복수의 노드들의 계층에 기초하여 할당된다. 예를 들어, 도 11의 1130에서 설명된 바처럼, GPU 컴포넌트(1102)는 제1 메모리 내 저장량에 기초하여, 복수의 제1 노드들을 포함하는 제1 BVH 섹션 및 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 BVH 구조를 할당할 수도 있고, BVH 구조는 복수의 제1 노드들 및 복수의 제2 노드들을 포함하는 복수의 노드들의 계층에 기초하여 할당된다. 또한, 단계(1306)는 도 1에 있는 프로세싱 유닛 (120) 에 의해 수행될 수도 있다. 복수의 제1 노드들은 장면 내 복수의 프리미티브들에 대한 광선 추적 프로세스에서 제1 광선량과 연관될 수도 있고, 복수의 제2 노드들은 광선 추적 프로세스에서 제2 광선량과 연관될 수도 있고, 여기서 제1 광선량은 제2 광선량과 상이하다. 복수의 노드들의 계층은 BVH 구조에서 복수의 노드들 각각에 대한 노드 식별자(ID) 및 복수의 레벨들 각각에 대한 레벨 ID와 연관될 수도 있으며, 여기서 복수의 제1 노드들은 복수의 레벨들의 제1 섹션에 대응할 수도 있고 복수의 제2 노드들은 복수의 레벨들의 제2 섹션에 대응할 수도 있다. BVH 구조는 복수의 레벨들의 제1 섹션과 복수의 레벨들의 제2 섹션에 기초하여 할당될 수도 있으며, 복수의 레벨들 중 각각의 레벨은 복수의 레벨들 중 다른 레벨들과 비교하여 상이한 레벨 ID를 포함할 수도 있다. 또한, 복수의 제1 노드들은 BVH 구조에서 상위 레벨 노드들에 대응할 수도 있고, 복수의 제2 노드들은 BVH 구조에서 하위 레벨 노드들에 대응할 수도 있다. 상위 레벨 노드들은 BVH 구조에서 루트 노드를 포함할 수도 있고 하위 레벨 노드들은 복수의 리프 노드들을 포함할 수도 있다.
1308에서, GPU는 도 1 내지 도 11 에 있는 예들과 관련하여 설명된 바와 같이, 복수의 제1 노드들과 연관된 제1 데이터를 제1 메모리에 저장할 수도 있다. 일부 양태들에서, 1308에서, GPU는 또한 복수의 제1 노드들 및 복수의 제2 노드들과 연관된 제2 데이터를 제2 메모리에 저장할 수도 있다. 예를 들어, 도 11의 1140에 설명된 바처럼, GPU 컴포넌트(1102)는 또한 제1 메모리에 복수의 제1 노드들과 연관된 제1 데이터 그리고 제2 메모리에 복수의 제1 노드들 및 복수의 제2 노드들과 연관된 제2 데이터를 저장할 수도 있다. 또한, 단계(1308)는 도 1에 있는 프로세싱 유닛 (120) 에 의해 수행될 수도 있다. 복수의 제1 노드들과 연관된 제1 데이터는 제1 메모리 내 식별된 저장량과 동일할 수도 있다.
1310에서, GPU는 도 1 내지 도 11에 있는 예들과 관련하여 설명된 바처럼, 제1 데이터 또는 제2 데이터 중 적어도 하나를 취출하기 전에, 복수의 제1 노드들의 제1 어드레스 또는 복수의 제2 노드들의 제2 어드레스 중 적어도 하나를 계산할 수도 있다. 예를 들어, 도 11의 1150에 설명된 바처럼, GPU 컴포넌트(1102)는 제1 데이터 또는 제2 데이터 중 적어도 하나를 취출하기 전에, 복수의 제1 노드들의 제1 어드레스 또는 복수의 제2 노드들의 제2 어드레스 중 적어도 하나를 계산할 수도 있다. 또한, 단계(1310)는 도 1에 있는 프로세싱 유닛 (120) 에 의해 수행될 수도 있다. 복수의 제1 노드들의 제1 어드레스는 제1 메모리의 오프셋 값과 복수의 제1 노드들의 각각에 대한 노드 식별자(ID)에 기초하여 계산될 수 있고, 복수의 제2 노드들의 제2 어드레스는 제2 메모리의 베이스 어드레스 및 복수의 제2 노드들의 각각에 대한 노드 ID에 기초하여 계산될 수도 있다.
1312에서, GPU는 도 1 내지 도 11에 있는 예들과 관련하여 설명된 바처럼, 제1 데이터 및 제2 데이터를 저장한 후, 제1 메모리로부터의 제1 데이터 또는 제2 메모리로부터의 제2 데이터 중 적어도 하나를 취출할 수도 있으며, 여기서 제1 데이터 또는 제2 데이터는 계산된 제1 어드레스 또는 계산된 제2 어드레스에 기초하여 취출된다. 예를 들어, 도 11의 1160에 설명된 바처럼, GPU 컴포넌트(1102) 는 제1 데이터 및 제2 데이터를 저장할 시에, 제1 메모리로부터의 제1 데이터 또는 제2 메모리로부터의 제2 데이터 중 적어도 하나를 취출할 수도 있으며, 여기서 제1 데이터 또는 제2 데이터는 계산된 제1 어드레스 또는 계산된 제2 어드레스에 기초하여 취출된다. 또한, 단계(1312)는 도 1에 있는 프로세싱 유닛 (120) 에 의해 수행될 수도 있다. 제1 데이터 또는 제2 데이터 중 적어도 하나는 BVH 구조에서 복수의 노드들 각각에 대한 노드 식별자(ID) 또는 복수의 레벨들의 각각의 레벨에 대한 레벨 ID에 기초하여 취출될 수도 있다. 또한, 복수의 제1 노드들의 계층에 기초하여, 제1 데이터 또는 제2 데이터 중 적어도 하나가 취출될 수도 있다. 제1 메모리는 그래픽스 메모리(예를 들어, GMEM)일 수도 있고, 제2 메모리는 시스템 메모리일 수도 있다. 또한, GPU는 제1 메모리로부터의 제1 데이터 또는 제2 메모리로부터의 제2 데이터 중 적어도 하나를 페치할 수도 있다. 가령, 제1 데이터 또는 제2 데이터 중 적어도 하나를 취출하는 것은 제1 메모리로부터 제1 데이터 또는 제2 메모리로부터 제2 데이터 중 적어도 하나를 페치하는 것을 포함할 수도 있다.
1314에서, GPU는 도 1 내지 도 11에 있는 예들과 관련하여 설명된 바처럼, 제1 데이터 또는 제2 데이터 중 적어도 하나에 기초하여, 복수의 노드들 중 복수의 내부 노드들에 대한 광선 삼각형 교차 또는 복수의 노드들 중 복수의 리프 노드들에 대한 광선 박스 교차 중 적어도 하나를 수행할 수도 있다. 예를 들어, 도 11의 1170에 설명된 바처럼, GPU 컴포넌트(1102)는 제1 데이터 또는 제2 데이터 중 적어도 하나에 기초하여, 복수의 노드들 중 복수의 내부 노드들에 대한 광선 삼각형 교차 또는 복수의 노드들 중 복수의 리프 노드들에 대한 광선 박스 교차 중 적어도 하나를 수행할 수도 있다. 또한, 단계(1314)는 도 1에 있는 프로세싱 유닛 (120) 에 의해 수행될 수도 있다.
구성들에서, 그래픽스 프로세싱을 위한 방법 또는 장치가 제공된다. 장치는 GPU, 그래픽스 프로세서, 또는 그래픽스 프로세싱을 수행할 수도 있는 기타 프로세서일 수도 있다. 양태들에서, 장치는 디바이스(104) 내의 프로세싱 유닛(120)일 수도 있거나, 또는 디바이스(104) 또는 다른 디바이스 내의 기타 하드웨어일 수도 있다. 장치, 예를 들어, 프로세싱 유닛(120)은 복수의 레벨들 및 복수의 노드들을 포함하는 경계 볼륨 계층(BVH) 구조를 구성하기 위한 수단을 포함할 수도 있고, 복수의 레벨들의 각각은 복수의 노드들 중 적어도 하나의 노드를 포함하며, BVH 구조는 장면 내 복수의 프리미티브들에 대한 지오메트리 데이터와 연관된다. 장치, 예를 들어, 프로세싱 유닛(1102)은 또한, BVH 구조 내 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 제1 메모리 내 저장량을 식별하기 위한 수단을 포함할 수도 있다. 장치, 예를 들어, 프로세싱 유닛(120)은 또한, 제1 메모리 내 저장량에 기초하여, 복수의 제1 노드들을 포함하는 제1 BVH 섹션 및 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 BVH 구조를 할당하기 위한 수단을 포함할 수도 있고, BVH 구조는 복수의 제1 노드들 및 복수의 제2 노드들을 포함하는 복수의 노드들의 계층에 기초하여 할당된다. 장치, 예를 들어, 프로세싱 유닛(120)은 또한, 제1 메모리에 복수의 제1 노드들과 연관된 제1 데이터 그리고 제2 메모리에 복수의 제1 노드들 및 복수의 제2 노드들과 연관된 제2 데이터를 저장하기 위한 수단을 포함할 수도 있다. 장치, 예를 들어, 프로세싱 유닛(120)은 또한, 제1 데이터 및 제2 데이터를 저장할 시에, 제1 메모리로부터의 제1 데이터 또는 제2 메모리로부터의 제2 데이터 중 적어도 하나를 취출하기 위한 수단을 포함할 수도 있다. 장치, 예를 들어, 프로세싱 유닛(120)은 또한 제1 데이터 또는 제2 데이터 중 적어도 하나를 취출하기 전에, 복수의 제1 노드들의 제1 어드레스 또는 복수의 제2 노드들의 제2 어드레스 중 적어도 하나를 계산하기 위한 수단을 포함할 수도 있고, 여기서 제1 데이터 또는 제2 데이터는 계산된 제1 어드레스 또는 계산된 제2 어드레스에 기초하여 취출된다. 장치, 예를 들어, 프로세싱 유닛(120)은 또한 제1 데이터 또는 제2 데이터 중 적어도 하나에 기초하여, 복수의 노드들 중 복수의 내부 노드들에 대한 광선 삼각형 교차 또는 복수의 노드들 중 복수의 리프 노드들에 대한 광선 박스 교차 중 적어도 하나를 수행하기 위한 수단을 포함할 수도 있다.
본 명세서에서 설명되는 요지는 하나 이상의 이익 또는 이점을 실현하도록 구현될 수도 있다. 예를 들어, 설명된 그래픽스 프로세싱 기법들은 GPU, 그래픽 프로세서, 또는 본 명세서에 설명된 노드 저장 기법들을 구현하기 위해 그래픽스 프로세싱을 수행할 수 있는 기타 프로세서에 의해 사용될 수도 있다. 이는 또한 다른 그래픽스 프로세싱 기법들에 비해 낮은 비용으로 달성될 수 있다. 더욱이, 본 명세서의 그래픽스 프로세싱 기법들은 데이터 프로세싱 또는 실행을 개선하거나 또는 속도를 높일 수 있다. 또한, 본 명세서의 그래픽스 프로세싱 기법들은 리소스 또는 데이터 활용 및/또는 리소스 효율성을 개선할 수 있다. 추가적으로, 본 개시의 양태들은 메모리 대역폭 효율을 향상시키거나 및/또는 GPU에서의 프로세싱 속도를 증가시키기 위해 노드 저장 기법들을 활용할 수도 있다.
개시된 프로세스들/플로우차트들에서 블록들의 특정 순서 또는 체계는 예시의 접근법들의 예시임이 이해된다. 설계 선호들에 기초하여, 프로세스들/플로우차트들에서 블록들의 특정 순서 또는 체계는 재배열될 수도 있다는 것이 이해된다. 또한, 일부 블록들은 조합될 수도 있거나 생략될 수도 있다. 첨부 방법 청구항들은, 샘플 순서에서 다양한 블록들의 엘리먼트들을 제시하고, 제시된 특정 순서 또는 체계에 한정하는 것을 의미하지는 않는다.
이전의 설명은 당업자가 본원에 기재된 다양한 양태들을 실시하는 것을 가능하게 하기 위해서 제공된다. 이들 양태들에 대한 다양한 수정들이 당업자에게 쉽게 분명해질 것이고, 본 명세서에 정의된 일반 원리들은 다른 양태들에 적용될 수도 있다. 따라서, 청구항들은 여기에 보여진 다양한 양태들에 한정되는 것으로 의도된 것이 아니라, 청구항들의 문언에 부합하는 전체 범위가 부여되야 하고, 단수형 엘리먼트에 대한 언급은 "하나 및 오직 하나만" 을, 명확하게 그렇게 언급되지 않았으면, 의미하도록 의도된 것이 아니라 오히려 "하나 이상" 을 의미하도록 의도된다. 단어 "예시적인"은 예, 사례, 또는 예시로서 기능함을 의미하도록 본원에서 사용된다.  본 명세서에 "예시적" 으로 설명된 임의의 양태는 반드시 다른 양태들보다 바람직하거나 또는 유리한 것으로 해석될 필요는 없다.
달리 구체적으로 언급되지 않는 한, 용어 "일부" 는 하나 이상을 지칭하고, 용어 "또는" 은 문맥이 달리 지시하지 않는 경우 "및/또는"으 로 해석될 수도 있다. "A, B, 또는 C 중 적어도 하나", "A, B, 또는 C 중 하나 이상", "A, B, 및 C 중 적어도 하나", "A, B, 및 C 중 하나 이상", 및 "A, B, C, 또는 이들의 임의의 조합" 과 같은 조합들은 A, B, 및/또는 C 의 임의의 조합을 포함하고, A 의 배수들, B 의 배수들, 또는 C 의 배수들을 포함할 수도 있다.  구체적으로, "A, B, 또는 C 중 적어도 하나", "A, B, 또는 C 중 하나 이상", "A, B, 및 C 중 적어도 하나", "A, B, 및 C 중 하나 이상", 및 "A, B, C, 또는 이들의 임의의 조합" 과 같은 조합들은 A 단독, B 단독, C 단독, A 및 B, A 및 C, B 및 C, 또는 A 및 B 및 C 일
수도 있고, 임의의 이러한 조합들은 A, B, 또는 C 의 하나 이상의 멤버 또는 멤버들을 포함할 수도 있다. 당업자에게 알려져 있거나 나중에 알려지게 될 본 개시 전체에 걸쳐 설명된 다양한 양태들의 엘리먼트들에 대한 모든 구조적 및 기능적 등가물들은 참조에 의해 본원에 명시적으로 포함되고 청구항들에 의해 포함되도록 의도된다. 또한, 본원에 개시된 어느 것도 그러한 개시가 명시적으로 청구항들에 인용되는지 여부에 관계없이 공중에 받쳐지는 것으로 의도되지 않는다. "모듈", "메커니즘", "엘리먼트", "디바이스"등의 단어는 "수단" 이라는 단어의 대체물이 아닐 수도 있다. 그래서, 청구항 엘리먼트는, 엘리먼트가 어구 "하는 수단" 을 이용하여 명시적으로 인용되지 않는다면, 기능식 (means plus function) 으로서 해석되지 않아야 한다.
하나 이상의 예에서, 본원에 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합에서 구현될 수도 있다. 예를 들어, 용어 "프로세싱 유닛"이 본 개시 전반에 걸쳐 사용되었지만, 그러한 프로세싱 유닛들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합에서 구현될 수도 있다. 임의의 기능, 프로세싱 유닛, 본 명세서에서 설명된 기법, 또는 다른 모듈이 소프트웨어에서 구현되는 경우, 기능, 프로세싱 유닛, 본 명세서에서 설명된 기법, 또는 다른 모듈은 컴퓨터 판독가능 매체 상의 하나 이상의 명령들 또는 코드로서 저장되거나 송신될 수도 있다.
본 개시에 따라, 용어 "또는" 은 문맥이 달리 지시하지 않는 경우 "및/또는" 으로 해석될 수도 있다. 추가적으로, "하나 이상" 또는 "적어도 하나" 등과 같은 문구들이 본 명세서에 개시된 일부 특징들에 대해 사용되고 다른 특징들에 대해서는 사용되지 않았을 수도 있지만, 그러한 문언이 사용되지 않은 특징들은 문맥이 달리 지시하지 않는 경우 내재된 그러한 의미를 갖는 것으로 해석될 수도 있다.
하나 이상의 예들에서, 본 명세서에서 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합에서 구현될 수도 있다. 예를 들어, 용어 "프로세싱 유닛" 이 본 개시 전반에 걸쳐 사용되었지만, 그러한 프로세싱 유닛들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합에서 구현될 수도 있다. 임의의 기능, 프로세싱 유닛, 본 명세서에 설명된 기술, 또는 다른 모듈이 소프트웨어에서 구현되는 경우, 기능, 프로세싱 유닛, 본 명세서에 설명된 기술, 또는 다른 모듈은 컴퓨터 판독가능 매체 상에 하나 이상의 명령 또는 코드로서 저장되거나 전송될 수도 있다. 컴퓨터 판독가능 매체들은 한 장소로부터 다른 장소로의 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체들 또는 컴퓨터 데이터 저장 매체들을 포함할 수도 있다.  이러한 방식으로, 컴퓨터 판독가능 매체들은 일반적으로 (1) 비일시적인 유형의 컴퓨터 판독가능 저장 매체들 또는 (2) 신호 또는 캐리어 파와 같은 통신 매체에 대응할 수도 있다. 데이터 저장 매체들은 본 개시에서 설명된 기법들의 구현을 위한 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수도 있는 임의의 가용 매체들일 수도 있다.  한정이 아닌 예로서, 그러한 컴퓨터 판독가능 매체들은 RAM, ROM, EEPROM, CD-ROM 또는 다른 광학 디스크 저장부, 자기 디스크 저장부 또는 다른 자기 저장 디바이스들을 포함할 수도 있다.  본 명세서에서 사용된 바와 같이, 디스크 (disk) 및 디스크 (disc) 는 콤팩트 디스크 (CD), 레이저 디스크, 광학 디스크, 디지털 다용도 디스크 (DVD), 플로피 디스크 및 블루-레이 디스크를 포함하고, 여기서 디스크 (disk) 들은 보통 데이터를 자기적으로 재생하는 한편, 디스크 (disc) 들은 레이저들로 데이터를 광학적으로 재생한다. 또한, 상기의 조합들이 컴퓨터 판독가능 매체들의 범위 내에 포함되어야 한다. 컴퓨터 프로그램 제품은 컴퓨터 판독가능 매체를 포함할 수도 있다.
그 코드는 하나 이상의 디지털 신호 프로세서들 (DSP들), 범용 마이크로프로세서들, 주문형 집적 회로들 (ASIC들), 산술 로직 유닛들 (ALU들), 필드 프로그래밍가능 로직 어레이들 (FPGA들), 또는 다른 균등한 집적된 또는 별개의 로직 회로부와 같은 하나 이상의 프로세서들에 의해 실행될 수도 있다. 이에 따라, 본 명세서에 사용된 바와 같은 용어 "프로세서" 는 전술한 구조 또는 본 명세서에서 설명된 기법들의 구현에 적합한 임의의 다른 구조 중 임의의 것을 지칭할 수도 있다. 또한, 그 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들에서 완전히 구현될 수 있다.
본 개시의 기법들은 무선 핸드셋, 집적 회로 (IC) 또는 IC들의 세트 (예를 들면, 칩 세트) 를 포함하는, 매우 다양한 디바이스들 또는 장치들에서 구현될 수도 있다. 다양한 컴포넌트들, 모듈들, 또는 유닛들은 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양태들을 강조하기 위해 본 개시에 설명되지만, 상이한 하드웨어 유닛들에 의한 실현을 반드시 필요로 하는 것은 아니다. 오히려, 전술된 바처럼, 다양한 유닛들이 임의의 하드웨어 유닛에 결합될 수도 있거나, 또는 적합한 소프트웨어 및/또는 펌웨어와 함께, 전술된 하나 이상의 프로세서들을 포함하는 상호 연동적인 (inter-operative) 하드웨어 유닛들의 집합에 의해 제공될 수도 있다. 따라서, 본원에서 사용된 바와 같은 용어 "프로세서"는, 전술한 구조 중 임의의 것 또는 본원에서 설명된 기법들의 구현에 적합한 임의의 다른 구조를 지칭할 수도 있다. 또한, 그 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들에서 완전히 구현될 수도 있다.
다음의 양태들은 오직 예시일 뿐이며 제한 없이 본 명세서에서 설명된 다른 양태들 또는 교시들과 결합될 수도 있다.
양태 1은 그래픽스 프로세싱을 위한 장치로서, 메모리에 커플링된 적어도 하나의 프로세서를 포함하고, 상기 적어도 하나의 프로세서는 복수의 레벨들 및 복수의 노드들을 포함하는 경계 볼륨 계층(BVH) 구조를 획득하는 것으로서, 복수의 레벨들의 각각은 복수의 노드들 중 적어도 하나의 노드를 포함하며, BVH 구조는 장면 내 복수의 프리미티브들에 대한 지오메트리 데이터와 연관되는, 상기 경계 볼륨 계층(BVH) 구조를 획득하고; BVH 구조 내 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 제1 메모리 내 저장량을 식별하고; 제1 메모리 내 저장량에 기초하여, 복수의 제1 노드들을 포함하는 제1 BVH 섹션 및 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 BVH 구조를 할당하는 것으로서, BVH 구조는 복수의 제1 노드들 및 복수의 제2 노드들을 포함하는 복수의 노드들의 계층에 기초하여 할당되는, 상기 BVH 구조를 할당하고; 제1 메모리에 복수의 제1 노드들과 연관된 제1 데이터를 저장하도록 구성된, 그래픽스 프로세싱을 위한 장치이다.
양태 2 는 양태 1의 장치에 있어서, 적어도 하나의 프로세서는 또한 제2 메모리에 복수의 제1 노드들 및 복수의 제2 노드들과 연관된 제2 데이터를 저장하고; 제1 데이터 및 제2 데이터를 저장한 후에, 제1 메모리로부터의 제1 데이터 또는 제2 메모리로부터의 제2 데이터 중 적어도 하나를 취출하도록 구성된다.
양태 3 는 양태 1 및 2 중 어느 것의 장치에 있어서, 적어도 하나의 프로세서는 또한제1 데이터 또는 제2 데이터 중 적어도 하나를 취출하기 전에, 복수의 제1 노드들의 제1 어드레스 또는 복수의 제2 노드들의 제2 어드레스 중 적어도 하나를 계산하도록 구성되고, 제1 데이터 또는 제2 데이터는 계산된 제1 어드레스 또는 계산된 제2 어드레스에 기초하여 취출된다.
양태 4 는 양태 1 내지 3 중 어느 것의 장치에 있어서, 복수의 제1 노드들의 제1 어드레스는 제1 메모리의 오프셋 값과 복수의 제1 노드들의 각각에 대한 노드 식별자(ID)에 기초하여 계산되고, 복수의 제2 노드들의 제2 어드레스는 제2 메모리의 베이스 어드레스 및 복수의 제2 노드들의 각각에 대한 노드 ID에 기초하여 계산된다.
양태 5 는 양태 1 내지 4 중 어느 것의 장치에 있어서, 적어도 하나의 프로세서는 또한 제1 데이터 또는 제2 데이터 중 적어도 하나에 기초하여, 복수의 노드들 중 복수의 내부 노드들에 대한 광선 삼각형 교차 또는 복수의 노드들 중 복수의 리프 노드들에 대한 광선 박스 교차 중 적어도 하나를 수행하도록 구성된다.
양태 6 는 양태 1 내지 5 중 어느 것의 장치에 있어서, 제1 데이터 또는 제2 데이터 중 적어도 하나는 BVH 구조에서 복수의 노드들 각각에 대한 노드 식별자(ID) 또는 복수의 레벨들의 각각의 레벨에 대한 레벨 ID에 기초하여 취출된다.
양태 7 는 양태 1 내지 6 중 어느 것의 장치에 있어서, 제1 데이터 또는 제2 데이터 중 적어도 하나는 복수의 제1 노드들의 계층에 기초하여 취출되고, 제1 메모리는 그래픽스 메모리이고 제2 메모리는 시스템 메모리이다.
양태 8 는 양태 1 내지 7 중 어느 것의 장치에 있어서, 제1 데이터 또는 제2 데이터 중 적어도 하나를 취출하기 위해, 적어도 하나의 프로세서는 제1 메모리로부터 제1 데이터 또는 제2 메모리로부터 제2 데이터 중 적어도 하나를 페치하도록 구성된다.
양태 9 는 양태 1 내지 8 중 어느 것의 장치에 있어서, 복수의 제1 노드들은 장면 내의 복수의 프리미티브들에 대한 광선 추적 프로세스에서 제1 광선량과 연관되고, 복수의 제2 노드들은 광선 추적 프로세스에서 제2 광선량과 연관되고, 제1 광선량은 제2 광선량과 상이하다.
양태 10 는 양태 1 내지 9 중 어느 것의 장치에 있어서, 복수의 노드들의 계층은 BVH 구조에서 복수의 노드들 각각에 대한 노드 식별자(ID) 및 복수의 레벨들 각각에 대한 레벨 ID와 연관되며, 복수의 제1 노드들은 복수의 레벨들의 제1 섹션에 대응하고 복수의 제2 노드들은 복수의 레벨들의 제2 섹션에 대응한다.
양태 11 는 양태 1 내지 10 중 어느 것의 장치에 있어서, BVH 구조는 복수의 레벨들의 제1 섹션과 복수의 레벨들의 제2 섹션에 기초하여 할당되며, 복수의 레벨들 중 각각의 레벨은 복수의 레벨들 중 다른 레벨들과 비교하여 상이한 레벨 ID를 포함한다.
양태 12 는 양태 1 내지 11 중 어느 것의 장치에 있어서, 복수의 제1 노드들은 BVH 구조에서 상위 레벨 노드들에 대응하고, 복수의 제2 노드들은 BVH 구조에서 하위 레벨 노드들에 대응한다.
양태 13 는 양태 1 내지 12 중 어느 것의 장치에 있어서, 상위 레벨 노드들은 BVH 구조에서 루트 노드를 포함하고 하위 레벨 노드들은 복수의 리프 노드들을 포함한다.
양태 14 는 양태 1 내지 13 중 어느 것의 장치에 있어서, 복수의 노드들은 복수의 내부 노드들 및 복수의 리프 노드들을 포함하며, 여기서 복수의 내부 노드들은 복수의 프리미티브들에 대한 복수의 경계 박스들과 연관되고, 복수의 리프 노드들은 복수의 프리미티브들에 대한 지오메트리 데이터와 연관된다.
양태 15 는 양태 1 내지 14 중 어느 것의 장치에 있어서, 복수의 제1 노드들과 연관된 제1 데이터는 제1 메모리 내 식별된 저장량과 동일하다.
양태 16 는 양태 1 내지 15 중 어느 것의 장치에 있어서, 장치는 무선 통신 디바이스이고, 장치는 적어도 하나의 프로세서에 커플링된 안테나 또는 트랜시버 중 적어도 하나를 더 포함한다.
양태 17 는 양태 1 내지 16 의 어느 것을 구현하기 위한 그래픽스 프로세싱의 방법이다.
양태 18 은 양태 1 내지 16 중 어느 것을 구현하기 위한 수단을 포함하는 그래픽스 프로세싱을 위한 장치이다.
양태 19은 컴퓨터 실행가능 코드를 저장하는 비일시적 컴퓨터 판독가능 매체로서, 코드는, 적어도 하나의 프로세서에 의해 실행될 때, 적어도 하나의 프로세서로 하여금 양태 1 내지 16 중 어느 것을 구현하게 하는 비일시적 컴퓨터 판독가능 매체이다.

Claims (30)

  1. 그래픽스 프로세싱을 위한 장치로서,
    메모리; 및
    상기 메모리에 커플링된 적어도 하나의 프로세서를 포함하고, 상기 적어도 하나의 프로세서는
    복수의 레벨들 및 복수의 노드들을 포함하는 경계 볼륨 계층(BVH) 구조를 획득하는 것으로서, 상기 복수의 레벨들의 각각은 상기 복수의 노드들 중 적어도 하나의 노드를 포함하며, 상기 BVH 구조는 장면 내 복수의 프리미티브들에 대한 지오메트리 데이터와 연관되는, 상기 경계 볼륨 계층(BVH) 구조를 획득하고;
    상기 BVH 구조 내 상기 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 제1 메모리 내 저장량을 식별하고;
    상기 제1 메모리 내 저장량에 기초하여, 복수의 제1 노드들을 포함하는 제1 BVH 섹션 및 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 상기 BVH 구조를 할당하는 것으로서, 상기 BVH 구조는 상기 복수의 제1 노드들 및 상기 복수의 제2 노드들을 포함하는 상기 복수의 노드들의 계층에 기초하여 할당되는, 상기 BVH 구조를 할당하고;
    상기 제1 메모리에 상기 복수의 제1 노드들과 연관된 제1 데이터를 저장하도록 구성된, 그래픽스 프로세싱을 위한 장치.
  2. 제 1 항에 있어서,
    상기 적어도 하나의 프로세서는 또한
    제2 메모리에 상기 복수의 제1 노드들 및 상기 복수의 제2 노드들과 연관된 제2 데이터를 저장하고;
    상기 제1 데이터 및 상기 제2 데이터를 저장한 후에, 상기 제1 메모리로부터의 상기 제1 데이터 또는 상기 제2 메모리로부터의 상기 제2 데이터 중 적어도 하나를 취출하도록 구성된, 그래픽스 프로세싱을 위한 장치.
  3. 제 2 항에 있어서,
    상기 적어도 하나의 프로세서는 또한
    상기 제1 데이터 또는 상기 제2 데이터 중 적어도 하나를 취출하기 전에, 상기 복수의 제1 노드들의 제1 어드레스 또는 상기 복수의 제2 노드들의 제2 어드레스 중 적어도 하나를 계산하도록 구성되고, 상기 제1 데이터 또는 상기 제2 데이터는 계산된 상기 제1 어드레스 또는 계산된 상기 제2 어드레스에 기초하여 취출되는, 그래픽스 프로세싱을 위한 장치.
  4. 제 3 항에 있어서,
    상기 복수의 제1 노드들의 상기 제1 어드레스는 상기 제1 메모리의 오프셋 값과 상기 복수의 제1 노드들의 각각에 대한 노드 식별자(ID)에 기초하여 계산되고, 상기 복수의 제2 노드들의 상기 제2 어드레스는 상기 제2 메모리의 베이스 어드레스 및 상기 복수의 제2 노드들의 각각에 대한 노드 ID에 기초하여 계산되는, 그래픽스 프로세싱을 위한 장치.
  5. 제 2 항에 있어서,
    상기 적어도 하나의 프로세서는 또한
    상기 제1 데이터 또는 상기 제2 데이터 중 적어도 하나에 기초하여, 상기 복수의 노드들 중 복수의 내부 노드들에 대한 광선 삼각형 교차 또는 상기 복수의 노드들 중 복수의 리프 노드들에 대한 광선 박스 교차 중 적어도 하나를 수행하도록 구성된, 그래픽스 프로세싱을 위한 장치.
  6. 제 2 항에 있어서,
    상기 제1 데이터 또는 상기 제2 데이터 중 적어도 하나는 상기 BVH 구조에서 상기 복수의 노드들의 각각에 대한 노드 식별자(ID) 또는 상기 복수의 레벨들의 각각의 레벨에 대한 레벨 ID에 기초하여 취출되는, 그래픽스 프로세싱을 위한 장치.
  7. 제 2 항에 있어서,
    상기 제1 데이터 또는 상기 제2 데이터 중 적어도 하나는 상기 복수의 제1 노드들의 계층에 기초하여 취출되고, 상기 제1 메모리는 그래픽스 메모리이고 상기 제2 메모리는 시스템 메모리인, 그래픽스 프로세싱을 위한 장치.
  8. 제 2 항에 있어서,
    상기 제1 데이터 또는 상기 제2 데이터 중 적어도 하나를 취출하기 위해, 상기 적어도 하나의 프로세서는 상기 제1 메모리로부터의 상기 제1 데이터 또는 상기 제2 메모리로부터의 상기 제2 데이터 중 적어도 하나를 페치하도록 구성된, 그래픽스 프로세싱을 위한 장치.
  9. 제 1 항에 있어서,
    상기 복수의 제1 노드들은 상기 장면 내의 상기 복수의 프리미티브들에 대한 광선 추적 프로세스에서 제1 광선량과 연관되고, 상기 복수의 제2 노드들은 상기 광선 추적 프로세스에서 제2 광선량과 연관되고, 상기 제1 광선량은 상기 제2 광선량과 상이한, 그래픽스 프로세싱을 위한 장치.
  10. 제 1 항에 있어서,
    상기 복수의 노드들의 계층은 상기 BVH 구조에서 상기 복수의 노드들 각각에 대한 노드 식별자(ID) 및 상기 복수의 레벨들 각각에 대한 레벨 ID와 연관되며, 상기 복수의 제1 노드들은 상기 복수의 레벨들의 제1 섹션에 대응하고 상기 복수의 제2 노드들은 상기 복수의 레벨들의 제2 섹션에 대응하는, 그래픽스 프로세싱을 위한 장치.
  11. 제 10 항에 있어서,
    상기 BVH 구조는 상기 복수의 레벨들의 상기 제1 섹션과 상기 복수의 레벨들의 상기 제2 섹션에 기초하여 할당되며, 상기 복수의 레벨들 중 각각의 레벨은 상기 복수의 레벨들 중 다른 레벨들과 비교하여 상이한 레벨 ID를 포함하는, 그래픽스 프로세싱을 위한 장치.
  12. 제 1 항에 있어서,
    상기 복수의 제1 노드들은 상기 BVH 구조에서 상위 레벨 노드들에 대응하고, 상기 복수의 제2 노드들은 상기 BVH 구조에서 하위 레벨 노드들에 대응하는, 그래픽스 프로세싱을 위한 장치.
  13. 제 12 항에 있어서,
    상기 상위 레벨 노드들은 상기 BVH 구조에서 루트 노드를 포함하고 상기 하위 레벨 노드들은 복수의 리프 노드들을 포함하는, 그래픽스 프로세싱을 위한 장치.
  14. 제 1 항에 있어서,
    상기 복수의 노드들은 복수의 내부 노드들 및 복수의 리프 노드들을 포함하며, 상기 복수의 내부 노드들은 상기 복수의 프리미티브들에 대한 복수의 경계 박스들과 연관되고, 상기 복수의 리프 노드들은 상기 복수의 프리미티브들에 대한 상기 지오메트리 데이터와 연관되는, 그래픽스 프로세싱을 위한 장치.
  15. 제 1 항에 있어서,
    상기 복수의 제1 노드들과 연관된 상기 제1 데이터는 상기 제1 메모리 내 식별된 저장량과 동일한, 그래픽스 프로세싱을 위한 장치.
  16. 제 1 항에 있어서,
    상기 장치는 무선 통신 디바이스이고, 상기 장치는 상기 적어도 하나의 프로세서에 커플링된 안테나 또는 트랜시버 중 적어도 하나를 더 포함하는, 그래픽스 프로세싱을 위한 장치.
  17. 그래픽스 프로세싱의 방법으로서,
    복수의 레벨들 및 복수의 노드들을 포함하는 경계 볼륨 계층(BVH) 구조를 획득하는 단계로서, 상기 복수의 레벨들의 각각은 상기 복수의 노드들 중 적어도 하나의 노드를 포함하며, 상기 BVH 구조는 장면 내 복수의 프리미티브들에 대한 지오메트리 데이터와 연관되는, 상기 경계 볼륨 계층(BVH) 구조를 획득하는 단계;
    상기 BVH 구조 내 상기 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 제1 메모리 내 저장량을 식별하는 단계;
    상기 제1 메모리 내 저장량에 기초하여, 복수의 제1 노드들을 포함하는 제1 BVH 섹션 및 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 상기 BVH 구조를 할당하는 단계로서, 상기 BVH 구조는 상기 복수의 제1 노드들 및 상기 복수의 제2 노드들을 포함하는 상기 복수의 노드들의 계층에 기초하여 할당되는, 상기 BVH 구조를 할당하는 단계;
    상기 제1 메모리에 상기 복수의 제1 노드들과 연관된 제1 데이터를 저장하는 단계
    를 포함하는, 그래픽스 프로세싱의 방법.
  18. 제 17 항에 있어서,
    제2 메모리에 상기 복수의 제1 노드들 및 상기 복수의 제2 노드들과 연관된 제2 데이터를 저장하는 단계; 및
    상기 제1 데이터 및 상기 제2 데이터를 저장한 후에, 상기 제1 메모리로부터의 상기 제1 데이터 또는 상기 제2 메모리로부터의 상기 제2 데이터 중 적어도 하나를 취출하는 단계를 더 포함하는, 그래픽스 프로세싱의 방법.
  19. 제 18 항에 있어서,
    상기 제1 데이터 또는 상기 제2 데이터 중 적어도 하나를 취출하기 전에, 상기 복수의 제1 노드들의 제1 어드레스 또는 상기 복수의 제2 노드들의 제2 어드레스 중 적어도 하나를 계산하는 단계를 더 포함하고, 상기 제1 데이터 또는 상기 제2 데이터는 계산된 상기 제1 어드레스 또는 계산된 상기 제2 어드레스에 기초하여 취출되는, 그래픽스 프로세싱의 방법.
  20. 제 19 항에 있어서,
    상기 복수의 제1 노드들의 상기 제1 어드레스는 상기 제1 메모리의 오프셋 값과 상기 복수의 제1 노드들의 각각에 대한 노드 식별자(ID)에 기초하여 계산되고, 상기 복수의 제2 노드들의 상기 제2 어드레스는 상기 제2 메모리의 베이스 어드레스 및 상기 복수의 제2 노드들의 각각에 대한 노드 ID에 기초하여 계산되는, 그래픽스 프로세싱의 방법.
  21. 제 18 항에 있어서,
    상기 제1 데이터 또는 상기 제2 데이터 중 적어도 하나에 기초하여, 상기 복수의 노드들 중 복수의 내부 노드들에 대한 광선 삼각형 교차 또는 상기 복수의 노드들 중 복수의 리프 노드들에 대한 광선 박스 교차 중 적어도 하나를 수행하는 단계를 더 포함하는, 그래픽스 프로세싱의 방법.
  22. 제 18 항에 있어서,
    상기 제1 데이터 또는 상기 제2 데이터 중 적어도 하나는 상기 BVH 구조에서 상기 복수의 노드들의 각각에 대한 노드 식별자(ID) 또는 상기 복수의 레벨들의 각각의 레벨에 대한 레벨 ID에 기초하여 취출되는, 그래픽스 프로세싱의 방법.
  23. 제 18 항에 있어서,
    상기 제1 데이터 또는 상기 제2 데이터 중 적어도 하나는 상기 복수의 제1 노드들의 계층에 기초하여 취출되고, 상기 제1 메모리는 그래픽스 메모리이고 상기 제2 메모리는 시스템 메모리인, 그래픽스 프로세싱의 방법.
  24. 제 18 항에 있어서,
    상기 제1 데이터 또는 상기 제2 데이터 중 적어도 하나를 취출하는 단계는 상기 제1 메모리로부터의 상기 제1 데이터 또는 상기 제2 메모리로부터의 상기 제2 데이터 중 적어도 하나를 페치하는 단계를 포함하는, 그래픽스 프로세싱의 방법.
  25. 제 17 항에 있어서,
    상기 복수의 제1 노드들은 상기 장면 내의 상기 복수의 프리미티브들에 대한 광선 추적 프로세스에서 제1 광선량과 연관되고, 상기 복수의 제2 노드들은 상기 광선 추적 프로세스에서 제2 광선량과 연관되고, 상기 제1 광선량은 상기 제2 광선량과 상이한, 그래픽스 프로세싱의 방법.
  26. 제 17 항에 있어서,
    상기 복수의 노드들의 계층은 상기 BVH 구조에서 상기 복수의 노드들의 각각에 대한 노드 식별자(ID) 및 상기 복수의 레벨들의 각각에 대한 레벨 ID와 연관되고, 상기 복수의 제1 노드들은 상기 복수의 레벨들의 제1 섹션에 대응하고, 상기 복수의 제2 노드들은 상기 복수의 레벨들의 제2 섹션에 대응하고, 상기 BVH 구조는 상기 복수의 레벨들의 상기 제1 섹션과 상기 복수의 레벨들의 상기 제2 섹션에 기초하여 할당되며, 상기 복수의 레벨들 중 각각의 레벨은 상기 복수의 레벨들 중 다른 레벨들과 비교하여 상이한 레벨 ID를 포함하는, 그래픽스 프로세싱의 방법.
  27. 제 17 항에 있어서,
    상기 복수의 제1 노드들은 상기 BVH 구조에서 상위 레벨 노드들에 대응하고, 상기 복수의 제2 노드들은 상기 BVH 구조에서 하위 레벨 노드들에 대응하고 상기 상위 레벨 노드들은 상기 BVH 구조에서 루트 노드를 포함하고 상기 하위 레벨 노드들은 복수의 리프 노드들을 포함하는, 그래픽스 프로세싱의 방법.
  28. 제 17 항에 있어서,
    상기 복수의 노드들은 복수의 내부 노드들 및 복수의 리프 노드들을 포함하며, 상기 복수의 내부 노드들은 상기 복수의 프리미티브들에 대한 복수의 경계 박스들과 연관되고, 상기 복수의 리프 노드들은 상기 복수의 프리미티브들에 대한 상기 지오메트리 데이터와 연관되는, 그래픽스 프로세싱의 방법.
  29. 제 17 항에 있어서,
    상기 복수의 제1 노드들과 연관된 상기 제1 데이터는 상기 제1 메모리 내 식별된 저장량과 동일한, 그래픽스 프로세싱의 방법.
  30. 그래픽스 프로세싱을 위한 컴퓨터 실행가능 코드를 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 코드는 프로세서에 의해 실행될 때, 상기 프로세서로 하여금:
    복수의 레벨들 및 복수의 노드들을 포함하는 경계 볼륨 계층(BVH) 구조를 획득하게 하는 것으로서, 상기 복수의 레벨들의 각각은 상기 복수의 노드들 중 적어도 하나의 노드를 포함하며, 상기 BVH 구조는 장면 내 복수의 프리미티브들에 대한 지오메트리 데이터와 연관되는, 상기 경계 볼륨 계층(BVH) 구조를 획득하게 하고;
    상기 BVH 구조 내 상기 복수의 노드들 중 적어도 일부를 저장하는 데 이용 가능한 제1 메모리 내 저장량을 식별하게 하고;
    상기 제1 메모리 내 저장량에 기초하여, 복수의 제1 노드들을 포함하는 제1 BVH 섹션 및 복수의 제2 노드들을 포함하는 제2 BVH 섹션으로 상기 BVH 구조를 할당하게 하는 것으로서, 상기 BVH 구조는 상기 복수의 제1 노드들 및 상기 복수의 제2 노드들을 포함하는 상기 복수의 노드들의 계층에 기초하여 할당되는, 상기 BVH 구조를 할당하게 하고;
    상기 제1 메모리에 상기 복수의 제1 노드들과 연관된 제1 데이터를 저장하게 하는, 비일시적 컴퓨터 판독가능 저장 매체.

KR1020247025179A 2022-02-04 2023-01-19 최하위 레벨 경계 볼륨 계층을 위한 레벨들의 저장 Active KR102836854B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/650,064 US11593990B1 (en) 2022-02-04 2022-02-04 Storage of levels for bottom level bounding volume hierarchy
US17/650,064 2022-02-04
PCT/US2023/011172 WO2023150028A1 (en) 2022-02-04 2023-01-19 Storage of levels for bottom level bounding volume hierarchy

Publications (2)

Publication Number Publication Date
KR20240121341A KR20240121341A (ko) 2024-08-08
KR102836854B1 true KR102836854B1 (ko) 2025-07-21

Family

ID=85278602

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020247025179A Active KR102836854B1 (ko) 2022-02-04 2023-01-19 최하위 레벨 경계 볼륨 계층을 위한 레벨들의 저장

Country Status (6)

Country Link
US (2) US11593990B1 (ko)
EP (1) EP4473494A1 (ko)
KR (1) KR102836854B1 (ko)
CN (1) CN118786464B (ko)
TW (1) TW202338739A (ko)
WO (1) WO2023150028A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11763523B2 (en) * 2022-02-04 2023-09-19 Qualcomm Incorporated Compressed THIT stack for hardware-accelerated GPU ray tracing
US11978151B2 (en) * 2022-08-31 2024-05-07 Qualcomm Incorporated Multi-level bounding volume hierarchy coalescing

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210287422A1 (en) * 2020-03-13 2021-09-16 Advanced Micro Devices, Inc. Partially resident bounding volume hierarchy

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9183667B2 (en) * 2011-07-15 2015-11-10 Kirill Garanzha Out-of-core ray tracing with memory-efficient page generation
US9818221B2 (en) * 2016-02-25 2017-11-14 Qualcomm Incorporated Start node determination for tree traversal for shadow rays in graphics processing
DE102019108046A1 (de) * 2018-04-11 2019-10-17 Intel IP Corporation Vorrichtung und verfahren zum komprimieren von blattknoten einer hüllkörperhierarchie (bhv)
US10699370B1 (en) * 2018-12-28 2020-06-30 Intel Corporation Apparatus and method for a compressed stack representation for hierarchical acceleration structures of arbitrary widths
US12340468B2 (en) * 2020-03-15 2025-06-24 Intel Corporation Apparatus and method for displaced mesh compression
US11282260B2 (en) * 2020-06-09 2022-03-22 Qualcomm Incorporated Bounded volume hierarchy (BVH) tree traversal using spatial division

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210287422A1 (en) * 2020-03-13 2021-09-16 Advanced Micro Devices, Inc. Partially resident bounding volume hierarchy

Also Published As

Publication number Publication date
EP4473494A1 (en) 2024-12-11
TW202338739A (zh) 2023-10-01
CN118786464B (zh) 2025-09-30
US20250061537A1 (en) 2025-02-20
WO2023150028A1 (en) 2023-08-10
CN118786464A (zh) 2024-10-15
US11593990B1 (en) 2023-02-28
KR20240121341A (ko) 2024-08-08

Similar Documents

Publication Publication Date Title
KR102695571B1 (ko) 머신 러닝 워크로드들에서 텐서 오브젝트 지원을 위한 방법들 및 장치
US12229877B2 (en) Geometry culling using bounding volume hierarchy (BVH) for ray tracing
US12205223B2 (en) Bounding volume hierarchy leaf node compression
KR102836854B1 (ko) 최하위 레벨 경계 볼륨 계층을 위한 레벨들의 저장
US11978151B2 (en) Multi-level bounding volume hierarchy coalescing
KR102823035B1 (ko) 하드웨어 가속 gpu 레이 트레이싱을 위한 압축된 thit 스택
US12100186B2 (en) Leaf node compression with compressibility prediction
US20250046015A1 (en) Spatial locality for first-hit ray bvh traversals
US20250131638A1 (en) Temporal coherence for ray traversal
US12056819B2 (en) Compressed traversal stack for GPU ray tracing
US20250022204A1 (en) Adaptive bounding volume hierarchy rebuild with biased cost function
US20260038203A1 (en) Generation and traversal of conservative low-resolution bounding volume hierarchy

Legal Events

Date Code Title Description
A302 Request for accelerated examination
PA0105 International application

St.27 status event code: A-0-1-A10-A15-nap-PA0105

PA0201 Request for examination

St.27 status event code: A-1-2-D10-D11-exm-PA0201

PA0302 Request for accelerated examination

St.27 status event code: A-1-2-D10-D17-exm-PA0302

St.27 status event code: A-1-2-D10-D16-exm-PA0302

PG1501 Laying open of application

St.27 status event code: A-1-1-Q10-Q12-nap-PG1501

D13-X000 Search requested

St.27 status event code: A-1-2-D10-D13-srh-X000

D14-X000 Search report completed

St.27 status event code: A-1-2-D10-D14-srh-X000

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

St.27 status event code: A-1-2-D10-D21-exm-PE0902

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

St.27 status event code: A-1-2-D10-D22-exm-PE0701

F11 Ip right granted following substantive examination

Free format text: ST27 STATUS EVENT CODE: A-2-4-F10-F11-EXM-PR0701 (AS PROVIDED BY THE NATIONAL OFFICE)

PR0701 Registration of establishment

St.27 status event code: A-2-4-F10-F11-exm-PR0701

PR1002 Payment of registration fee

St.27 status event code: A-2-2-U10-U12-oth-PR1002

Fee payment year number: 1

U12 Designation fee paid

Free format text: ST27 STATUS EVENT CODE: A-2-2-U10-U12-OTH-PR1002 (AS PROVIDED BY THE NATIONAL OFFICE)

Year of fee payment: 1

PG1601 Publication of registration

St.27 status event code: A-4-4-Q10-Q13-nap-PG1601

Q13 Ip right document published

Free format text: ST27 STATUS EVENT CODE: A-4-4-Q10-Q13-NAP-PG1601 (AS PROVIDED BY THE NATIONAL OFFICE)