KR20170036416A - 트리를 탐색하는 장치 및 방법 - Google Patents

트리를 탐색하는 장치 및 방법 Download PDF

Info

Publication number
KR20170036416A
KR20170036416A KR1020150135548A KR20150135548A KR20170036416A KR 20170036416 A KR20170036416 A KR 20170036416A KR 1020150135548 A KR1020150135548 A KR 1020150135548A KR 20150135548 A KR20150135548 A KR 20150135548A KR 20170036416 A KR20170036416 A KR 20170036416A
Authority
KR
South Korea
Prior art keywords
node
tree
memory
information
target node
Prior art date
Application number
KR1020150135548A
Other languages
English (en)
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 삼성전자주식회사
Priority to KR1020150135548A priority Critical patent/KR20170036416A/ko
Priority to US15/169,813 priority patent/US20170091898A1/en
Priority to JP2016183157A priority patent/JP2017062787A/ja
Priority to EP16190472.7A priority patent/EP3147867A1/en
Priority to CN201610851588.0A priority patent/CN106558091A/zh
Publication of KR20170036416A publication Critical patent/KR20170036416A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • 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
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/005Tree description, e.g. octree, quadtree
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/60Shadow generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Software Systems (AREA)
  • Geometry (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

일 실시 예에 따른 트리 탐색 방법은 복수의 자식 노드들이 유효한 탐색 대상인 경우, 복수의 자식 노드들 중 어느 하나의 자식 노드를 타겟 노드로 결정하는 단계; 및 경로 코드를 키(key)값으로 이용하여 나머지 자식 노드에 대한 정보를 메모리에 저장하는 단계;를 포함한다.

Description

트리를 탐색하는 장치 및 방법{APPARATUS AND METHOD FOR TRAVERSING TREE}
트리를 탐색하는 장치 및 방법에 관한 것이다.
3D 렌더링은 3차원 객체 데이터를 주어진 카메라의 시점(view point)에서 보이는 영상으로 합성(synthesis)해주는 영상 처리 과정이다. 광선 추적 방법은 렌더링의 대상이 되는 씬 오브젝트(scene object)들과 광선이 교차되는 지점을 추적하는 과정이다. 광선 추적(ray-tracing)은 가속 구조(acceleration structure)의 탐색(traversal)과 광선-프리미티브(ray-primitive) 간의 교차 검사(intersection test) 과정을 포함한다. 이때, 탐색과 교차 검사 과정에서 많은 연산량(computation) 및 넓은 메모리 대역폭(memory bandwidth)을 필요로 한다.
트리를 탐색하는 장치 및 방법을 제공하는데 있다.
또한, 상기 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체를 제공하는데 있다.
일 실시 예에 따른 트리 탐색 방법은 복수의 자식 노드들이 유효한 탐색 대상인 경우, 상기 복수의 자식 노드들 중 어느 하나의 자식 노드를 타겟 노드로 결정하는 단계; 및 경로 코드를 키(key)값으로 이용하여 나머지 자식 노드에 대한 정보를 메모리에 저장하는 단계;를 포함한다.
또한, 상기 메모리는 복수의 트리 탐색 유닛에 의해 공유된다.
또한, 상기 메모리는 캐쉬 메모리인 것을 특징으로 한다.
또한, 상기 타겟 노드를 결정하는 단계는, 현재 타겟 노드의 경로 정보와 다음 타겟 노드의 상대적인 위치를 이용하여 상기 다음 타겟 노드를 결정하는 것을 특징으로 한다.
또한, 상기 타겟 노드를 결정하는 단계는, 유효한 탐색 대상인 자식 노드가 존재하지 않는 경우, 현재 타겟 노드의 경로 정보와 비트 스택의 값을 이용하여 탐색을 종료하거나, 다음 타겟 노드의 경로 코드를 결정하고, 상기 결정된 경로 코드를 키 값으로 이용하여 상기 메모리로부터 다음 타겟 노드의 정보를 획득하는 것을 특징으로 한다.
또한, 상기 다음 타겟 노드의 정보는 상기 다음 타겟 노드의 주소 및 디코딩 정보를 포함하는 것을 특징으로 한다.
또한, 교차 검사를 통해 상기 복수의 자식 노드들 중 어느 자식 노드가 유효한 탐색 대상인지를 결정하는 단계를 더 포함한다.
또한, 상기 트리는 트레이싱 시스템에서 사용되는 것을 특징으로 한다.
또한, 상기 저장하는 단계는,상기 트리의 깊이마다 상기 나머지 자식 노드에 대한 정보를 상기 메모리에 저장하였는지 여부를 비트 스택에 저장하는 단계를 포함하는 것을 특징으로 한다.
일 실시 예에 따른 트리 탐색 장치는 복수의 자식 노드들이 유효한 탐색 대상인 경우, 상기 복수의 자식 노드들 중 어느 하나의 노드를 타겟 노드로 결정하는 트리 탐색 유닛들; 및 경로 코드를 키(key)값으로 이용하여 나머지 자식 노드에 대한 정보를 저장하는 메모리;를 포함한다.
또한, 상기 메모리는 상기 트리 탐색 유닛들에 의해 공유된다.
또한, 상기 메모리는 캐쉬 메모리인 것을 특징으로 한다.
또한, 상기 트리 탐색 유닛들은 현재 타겟 노드의 경로 정보와 다음 타겟 노드의 상대적인 위치를 이용하여 상기 다음 타겟 노드를 결정하는 것을 특징으로 한다.
또한, 상기 트리 탐색 유닛들은 유효한 탐색 대상인 자식 노드가 존재하지 않는 경우, 현재 타겟 노드의 경로 정보와 비트 스택의 값을 이용하여 탐색을 종료하거나, 다음 타겟 노드의 경로 코드를 결정하고, 상기 결정된 경로 코드를 키 값으로 이용하여 상기 메모리로부터 다음 타겟 노드의 정보를 획득하는 것을 특징으로 한다.
또한, 상기 다음 타겟 노드의 정보는 상기 다음 타겟 노드의 주소 및 디코딩 정보를 포함하는 것을 특징으로 한다.
또한, 상기 트리 탐색 유닛들은 교차 검사를 통해 상기 복수의 자식 노드들 중 어느 자식 노드가 유효한 탐색 대상인지를 결정하는 것을 특징으로한다.
또한, 상기 트리는 레이 트레이싱 시스템에 사용되는 것인 특징으로 한다.
또한, 상기 트리 탐색 유닛들은 상기 트리의 깊이마다 상기 나머지 자식 노드에 대한 정보를 상기 메모리에 저장하였는지 여부를 비트 스택에 저장하는 것을 특징으로 한다.
탐색 유닛들이 공유하는 메모리에 노드에 대한 정보를 저장할 수 있다.
탐색 유닛들이 경로 코드를 키(key) 값으로 이용하여 메모리에 접속할 수 있다.
탐색 유닛들은 경로 코드를 키 값으로 이용하여 트리를 탐색할 수 있다.
도 1은 광선 추적을 설명하기 위한 도면이다.
도 2는 레이 트레이싱 코어를 설명하기 위한 도면이다.
도 3은 레이 트레이싱 코어가 광선 추적을 수행하는 동작을 설명하기 위한 도면이다.
도 4는 광선 추적을 가속하기 위한 방법을 설명하기 위한 도면이다.
도 5는 도 4의 광선 추적을 가속하기 위한 방법을 설명하기 위한 도면이다.
도 6은 일 실시 예에 따른 트리 탐색 장치를 나타내는 구성도이다.
도 7은 일 실시 예에 따른 트리 탐색 방법을 설명하는 순서도이다.
도 8은 트리 탐색 유닛이 트리를 탐색하는 방법을 나타내는 순서도이다.
도 9 내지 도 22는 일 실시 예에 따라 트리를 탐색하는 방법을 설명하기 위한 도면이다.
아래에서는 첨부한 도면을 참조하여 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 본 개시의 실시예를 상세히 설명한다. 그러나 본 개시는 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 또한, 도면에서 본 개시를 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
본 개시에서 사용되는 용어는, 본 개시에서 언급되는 기능을 고려하여 현재 사용되는 일반적인 용어로 기재되었으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 다양한 다른 용어를 의미할 수 있다. 따라서 본 개시에서 사용되는 용어는 용어의 명칭만으로 해석되어서는 안되며, 용어가 가지는 의미와 본 개시의 전반에 걸친 내용을 토대로 해석되어야 한다.
또한, 제1, 제2 등의 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 구성 요소들은 이 용어들에 의해 한정되어서는 안 된다. 이 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로 사용된다.
또한, 본 개시에서 사용된 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것이며, 본 개시를 한정하려는 의도로 사용되는 것이 아니다. 단수의 표현은 문맥상 명백하게 단수를 뜻하지 않는 한, 복수의 의미를 포함한다. 또한, 명세서 전체에서, 어떤 부분이 다른 부분과 "연결"되어 있다고 할 때, 이는 "직접적으로 연결"되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 "전기적으로 연결"되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성 요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성 요소를 제외하는 것이 아니라 다른 구성 요소를 더 포함할 수 있는 것을 의미한다.
본 명세서(특히, 특허 청구 범위에서)에서 사용된 "상기" 및 이와 유사한 지시어는 단수 및 복수 모두를 지시하는 것일 수 있다. 또한, 본 개시에 따른 방법을 설명하는 단계들의 순서를 명백하게 지정하는 기재가 없다면, 기재된 단계들은 적당한 순서로 행해질 수 있다. 기재된 단계들의 기재 순서에 따라 본 개시가 한정되는 것은 아니다.
본 명세서에서 다양한 곳에 등장하는 "일부 실시예에서" 또는 "일 실시예에서" 등의 어구는 반드시 모두 동일한 실시예를 가리키는 것은 아니다.
본 개시의 일부 실시예는 기능적인 블록 구성들 및 다양한 처리 단계들로 나타내어질 수 있다. 이러한 기능 블록들의 일부 또는 전부는, 특정 기능들을 실행하는 다양한 개수의 하드웨어 및/또는 소프트웨어 구성들로 구현될 수 있다. 예를 들어, 본 개시의 기능 블록들은 하나 이상의 마이크로프로세서들에 의해 구현되거나, 소정의 기능을 위한 회로 구성들에 의해 구현될 수 있다. 또한, 예를 들어, 본 개시의 기능 블록들은 다양한 프로그래밍 또는 스크립팅 언어로 구현될 수 있다. 기능 블록들은 하나 이상의 프로세서들에서 실행되는 알고리즘으로 구현될 수 있다. 또한, 본 개시는 전자적인 환경 설정, 신호 처리, 및/또는 데이터 처리 등을 위하여 종래 기술을 채용할 수 있다. "매커니즘", "요소", "수단" 및 "구성"등과 같은 용어는 넓게 사용될 수 있으며, 기계적이고 물리적인 구성들로서 한정되는 것은 아니다.
또한, 도면에 도시된 구성 요소들 간의 연결 선 또는 연결 부재들은 기능적인 연결 및/또는 물리적 또는 회로적 연결들을 예시적으로 나타낸 것일 뿐이다. 실제 장치에서는 대체 가능하거나 추가된 다양한 기능적인 연결, 물리적인 연결, 또는 회로 연결들에 의해 구성 요소들 간의 연결이 나타내어질 수 있다.
이하 첨부된 도면을 참고하여 본 개시를 상세히 설명하기로 한다.
도 1은 광선 추적을 설명하기 위한 도면이다. 도 1을 참조하면, 3차원 모델링에서, 레이 트레이싱 코어는 시점(10)을 결정하고, 시점(view point)에 따라 화면(image, 20)을 결정한다. 시점(10)과 화면(20)이 결정되면, 레이 트레이싱 코어(ray tracing core)는 시점(10)으로부터 화면(20)의 각 픽셀(pixel)들에 대하여 광선을 생성한다.
도 1의 구성들을 설명하면, 시점(10)으로부터 1차 광선(primary ray, 30)이 생성된다. 1차 광선(30)은 화면(20)을 지나 씬 오브젝트(scene object, 70)와 교차된다. 1차 광선(30)과 씬 오브젝트(70)의 교차점에서는 반사 광선(reflection ray, 40) 및 굴절 광선(refraction ray, 50)이 생성된다. 또한, 교차점에서 광원(80)의 방향으로 쉐도우 광선(shadow ray, 60)이 생성된다. 이때, 반사, 굴절, 쉐도우 광선들(40, 50, 60)을 2차 광선이라고 한다. 씬 오브젝트(70)는 화면(20)에 대한 렌더링의 대상이 되는 오브젝트를 나타낸다. 씬 오브젝트(70)는 복수의 프리미티브들을 포함한다.
레이 트레이싱 코어는 1차 광선(30), 2차 광선들(40, 50, 60) 및 2차 광선들로부터 파생되는 광선들을 분석한다. 레이 트레이싱 코어는 분석 결과에 기초하여 화면(20)을 구성하는 픽셀들의 색상 값을 결정한다. 이때, 레이 트레이싱 코어는 씬 오브젝트(70)의 특성을 고려하여 픽셀들의 색상 값을 결정한다.
도 2는 레이 트레이싱 코어(ray tracing core, 100)을 설명하기 위한 도면이다. 도 2를 참조하면, 레이 트레이싱 코어(100)는 광선 생성 유닛(110), TRV 유닛(120), IST 유닛(130) 및 쉐이딩 유닛(140)을 포함한다. 도 2에서는 TRV 유닛(120), IST 유닛(130)이 레이 트레이싱 코어(100)에 포함되는 것으로 도시되었으나, TRV 유닛(120), IST 유닛(130)은 별도의 하드웨어로 구현될 수 있다. 도 2에 도시된 레이 트레이싱 코어(100)는 본 실시 예와 관련된 구성요소들만이 도시되어 있다. 따라서, 도 2에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음을 본 실시 예와 관련된 기술분야에서 통상의 지식을 가진 자라면 이해할 수 있다.
레이 트레이싱 코어(100)는 생성된 광선들과 3차원 공간에 위치한 오브젝트들의 교차점을 추적하고, 화면을 구성하는 픽셀들의 색상 값을 결정한다. 다시 말해서, 레이 트레이싱 코어(100)는 광선들과 오브젝트들의 교차점을 찾고, 교차점에서의 오브젝트의 특성에 따라 2차 광선을 생성하고 교차점의 색상의 값을 결정한다.
레이 트레이싱 코어(100)는 가속 구조를 탐색하고 교차 검사를 수행할 때, 이전 탐색의 결과 및 이전 교차 검사의 결과를 이용할 수 있다. 다시 말하면, 레이 트레이싱 코어(100)는 이전 렌더링 과정에서 수행된 결과를 현재 렌더링 과정에 적용함으로써, 현재 렌더링을 보다 빠르게 수행할 수 있다.
광선 생성 유닛(110)은 1차 광선 및 2차 광선을 생성한다. 광선 생성 유닛(110)은 시점으로부터 1차 광선을 생성하고, 1차 광선과 오브젝트의 교차점에서 반사, 굴절, 또는 쉐도우 2차 광선을 생성한다. 광선 생성 유닛(110)은 또한 2차 광선과 오브젝트의 교차점에서 또 다른 2차 광선을 생성할 수 있다. 광선 생성 유닛(110)은 정해진 횟수 내에서 반사, 굴절, 쉐도우 광선을 생성하거나, 오브젝트의 특성에 따라 반사, 굴절, 쉐도우 광선의 생성 횟수를 결정할 수 있다.
TRV 유닛(120)은 광선 생성 유닛(110)으로부터 생성된 광선에 대한 정보를 수신한다. 생성된 광선은 1차 광선, 2차 광선 및 2차 광선에 의해 파생된 광선을 모두 포함한다. 예를 들어, 1차 광선의 경우, TRV 유닛(120)은 생성된 광선의 시점 및 방향에 대한 정보를 수신할 수 있다. 또한, 2차 광선의 경우, TRV 유닛(120)은 2차 광선의 출발점 및 방향에 대한 정보를 수신할 수 있다. 2차 광선의 출발점은 1차 광선이 히트된 지점을 나타낸다. 시점 또는 출발점은 좌표로 표현될 수 있으며, 방향은 벡터로 표현될 수 있다.
TRV 유닛(120)은 외부 메모리(250)로부터 가속 구조에 대한 정보를 독출(read)한다. 가속 구조는 가속 구조 생성 장치(200)에 의해 생성되고, 생성된 가속 구조는 외부 메모리(250)에 저장된다. 가속 구조는 3차원 공간의 오브젝트들의 위치 정보를 포함하고 있는 구조를 나타낸다. 예를 들어, 가속 구조는 KD-tree(K-Dimensional tree), BVH(Bounding Volume Hierarchy) 등이 적용될 수 있다.
TRV 유닛(120)은 가속 구조를 탐색하여, 광선이 히트(hit)된 오브젝트 또는 리프 노드(leaf node)를 출력한다. 예를 들어, TRV 유닛(120)은 가속 구조에 포함된 노드들을 탐색하여, 노드들 중 최하위 노드인 리프 노드들 중에서 광선이 히트된 리프 노드를 IST 유닛(130)으로 출력한다. 다시 말해서, TRV 유닛(120)은 가속 구조를 구성하는 바운딩 박스(Bounding Box)들 중에서 어느 바운딩 박스에 광선이 히트되었는지 판단하고, 바운딩 박스에 포함된 오브젝트들 중에서 어느 오브젝트에 광선이 히트되었는지 판단한다. 히트된 오브젝트에 대한 정보는 TRV 캐쉬에 저장된다. 바운딩 박스는 복수의 오브젝트 또는 프리미티브들을 포함하는 단위를 나타낼 수 있으며 가속 구조에 따라 다른 형태로 표현될 수 있다. TRV 캐쉬는 TRV 유닛(120)이 탐색 과정에서 사용하는 데이터를 일시적으로 저장하기 위한 메모리를 나타낸다.
TRV 유닛(120)은 이전 렌더링의 결과를 이용하여 가속 구조를 탐색할 수 있다. TRV 유닛(120)은 TRV 캐쉬에 저장된 이전 렌더링의 결과를 이용하여 이전 렌더링과 동일한 경로로 가속 구조를 탐색할 수 있다. 예를 들어, TRV 유닛(120)이 입력된 광선에 대한 가속 구조를 탐색할 때, TRV 유닛(120)은 입력된 광선과 동일한 시점 및 방향을 갖는 이전 광선이 히트된 바운딩 박스에 대한 탐색을 우선적으로 수행할 수 있다. 또한, TRV 유닛(120)은 이전 광선에 대한 탐색 경로를 참조하여 가속 구조를 탐색할 수 있다.
IST 유닛(130)은 TRV 유닛(120)로부터 광선이 히트된 오브젝트 또는 리프 노드를 수신하고, 외부 메모리(250)로부터 히트된 오브젝트에 포함된 프리미티브들에 대한 정보를 독출(read)한다. 독출된 프리미티브들에 대한 정보는 IST 캐쉬에 저장될 수 있다. IST 캐쉬는 교차 검색 과정에서 IST 유닛(130)이 사용하는 데이터를 일시적으로 저장하기 위한 메모리를 나타낸다.
IST 유닛(130)은 광선과 프리미티브 간의 교차 검사를 수행하여, 광선이 히트된 프리미티브 및 교차점을 출력한다. TRV 유닛(120)으로부터 광선이 히트된 오브젝트가 무엇인지를 수신한 IST 유닛(130)은 히트된 오브젝트에 포함된 복수의 프리미티브들 중에서 어느 프리미티브에 광선이 히트되었는지를 검사한다. 광선이 히트된 프리미티브를 찾은 다음, IST 유닛(130)은 히트된 프리미티브의 어느 지점과 광선이 교차하였는지를 나타내는 교차점을 출력한다. 교차점은 좌표 형태로 쉐이딩 유닛(140)으로 출력될 수 있다.
IST 유닛(130)은 이전 렌더링의 결과를 이용하여 교차 검사를 수행할 수 있다. IST 유닛(130)은 IST 캐쉬에 저장된 이전 렌더링의 결과를 이용하여 이전 렌더링과 동일한 프리미티브에 대해 우선적으로 교차 검사를 수행할 수 있다. 예를 들어, 입력된 광선과 프리미티브에 대한 교차 검사를 수행할 때, IST 유닛(130)은 입력된 광선과 동일한 시점 및 방향을 갖는 이전 광선이 히트된 프리미티브에 대한 교차 검사를 우선적으로 수행할 수 있다.
쉐이딩 유닛(140)은 IST 유닛(130)으로부터 수신된 교차점에 대한 정보 및 교차점의 물질 특성에 기초하여 픽셀의 색상 값을 결정한다. 쉐이딩 유닛(140)은 교차점의 물질 기본 색상 및 광원에 의한 효과 등을 고려하여 픽셀의 색상 값을 결정한다.
레이 트레이싱 코어(100)는 외부 메모리(250)로부터 광선 추적에 필요한 데이터를 수신한다. 외부 메모리(250)에는 가속 구조 생성 장치(200)에 의해 생성된 가속 구조 또는 프리미티브들에 대한 정보를 나타내는 기하 데이터(geometry data)가 저장된다. 프리미티브는 삼각형, 사각형 등의 다각형일 수 있으며, 기하 데이터는 오브젝트에 포함된 프리미티브들의 정점 및 위치에 대한 정보를 나타낼 수 있다.
가속 구조 생성 장치(200)는 3차원 공간상의 오브젝트들의 위치 정보를 포함하는 가속 구조를 생성한다. 가속 구조 생성 장치(200)는 여러 가지 형태의 가속 구조를 생성할 수 있다. 예를 들어, 가속 구조는 3차원 공간이 계층적 트리로 분할된 형태일 수 있으며 가속 구조 생성 장치(200)는 BVH 또는 KD-tree를 적용하여 3차원 공간상의 오브젝트들의 관계를 나타내는 구조를 생성할 수 있다. 가속 구조 생성 장치(200)는 리프 노드의 최대 프리미티브의 수 및 트리 깊이(tree depth)를 결정하고, 결정에 기초하여 가속 구조를 생성할 수 있다.
도 3은 레이 트레이싱 코어가 광선 추적을 수행하는 동작을 설명하기 위한 도면이다. 레이 트레이싱 코어는, 예를 들어, 도 2에 도시된 레이 트레이싱 코어(100)의 구조를 가질 수 있다. 따라서, 이하 생략된 내용이라 하더라도 레이 트레이싱 코어(100)에 관하여 이상에서 기술된 내용은 도 3의 광선 추적 방법에도 적용된다.
310단계에서, 레이 트레이싱 코어(100)는 광선을 생성한다. 레이 트레이싱 코어(100)는 1차 광선, 2차 광선 및 2차 광선에 의해 파생된 광선들을 생성한다.
320단계에서, 레이 트레이싱 코어(100)는 외부 메모리(250)로부터 독출된 가속 구조를 탐색한다. 레이 트레이싱 코어(100)는 생성된 광선들의 시점 및 방향에 기초하여 가속 구조(251)를 탐색하여 광선이 히트된 바운딩 박스를 검출하고, 히트된 바운딩 박스에 포함된 오브젝트를 중에서 광선이 히트된 오브젝트를 검출한다. 레이 트레이싱 코어(100)는 히트된 오브젝트를 검출할 때까지 가속 구조(251)를 탐색하는 것을 반복하여 수행한다. 예를 들어, 레이 트레이싱 코어(100)는 어느 하나의 경로를 따라 가속 구조를 탐색하고, 탐색된 경로 상의 리프 노드에 광선이 히트되지 않았으면, 다른 경로로 가속 구조를 탐색한다.
레이 트레이싱 코어(100)는 모든 경로를 순차적으로 탐색할 수 있지만, 이전 광선의 탐색 정보에 기초하여 특정 경로를 우선적으로 탐색할 수 있다. 예를 들어, 이전 광선의 시점과 방향이 현재 광선의 시점과 방향과 동일 또는 유사한 경우, 레이 트레이싱 코어(100)는 이전 광선에서 히트된 리프 노드가 포함된 경로를 우선적으로 탐색할 수 있다.
330단계에서, 레이 트레이싱 코어(100)는 교차 검사를 수행한다. 레이 트레이싱 코어(100)는 외부 메모리(250)로부터 독출된 프리미티브들의 기하 데이터(252)에 기초하여 교차 검사를 수행한다. 레이 트레이싱 코어(100)는 히트된 프리미티브를 검출할 때까지 교차 검사를 반복하여 수행한다. 예를 들어, 레이 트레이싱 코어(100)는 어느 하나의 프리미티브에 대한 교차 검사를 하고, 프리미티브에 광선이 히트되지 않았으면, 다른 프리미티브에 대한 교차 검사를 한다.
레이 트레이싱 코어(100)는 모든 프리미티브들을 순차적으로 교차 검사할 수 있지만, 이전 광선의 교차 검사 정보에 기초하여 특정 프리미티브를 우선적으로 교차 검사할 수 있다. 예를 들어, 이전 광선과 현재 광선의 시점과 방향이 동일 또는 유사한 경우, 레이 트레이싱 코어(100)는 이전 광선에서 히트된 프리미티브에 대한 교차 검사를 우선적으로 수행할 수 있다.
340단계에서, 레이 트레이싱 코어(100)는 교차 검사에 기초하여 픽셀의 쉐이딩을 수행한다. 레이 트레이싱 코어(100)는 340단계가 종료하면, 310단계로 진행한다. 레이 트레이싱 코어(100)는 310 내지 340단계를 화면을 구성하는 모든 픽셀들에 대해 반복적으로 수행한다.
도 4는 광선 추적을 가속하기 위한 방법을 설명하기 위한 도면이다. 도 4를 참조하면, 제1화면(412)은 t=0일 때 렌더링된 화면을 나타내고, 제2화면(422)은 t=1일 때 렌더링된 화면을 나타낸다. 제1화면(412)과 제2화면(422)에서 토끼(433)만이 이동하고 사각형(431)과 삼각형(432)은 움직임이 없기 때문에, 제1화면(412)과 제2화면(422)은 거의 유사하다. 따라서, 레이 트레이싱 코어(100)는 제1화면(412)에 대한 렌더링 결과를 이용하여 제2화면(422)에 대한 렌더링을 수행할 수 있다. 예를 들어, 제1시점(410)과 제2시점(420)의 위치가 동일하고, 제1광선(411)과 제2광선(421)의 방향이 동일하다면, 레이 트레이싱 코어(100)는 제1광선(411)에 대한 광선 추적의 결과를 제2광선(421)의 광선 추적에 적용하여, 제2광선(421)의 광선 추적을 가속할 수 있다. 예를 들어, 레이 트레이싱 코어(100)의 TRV 유닛(120)은 제2광선(421)에 대한 탐색을 수행할 때, 제1광선(411)이 히트된 바운딩 박스를 우선적으로 탐색할 수 있다. 또한, 레이 트레이싱 코어(100)의 IST 유닛(130)은 제2광선(421)에 대한 교차 검사할 때, 제1광선(411)이 히트된 삼각형(432)에 대해 우선적으로 교차 검사를 수행할 수 있다.
도 5는 도 4의 광선 추적을 가속하기 위한 방법을 설명하기 위한 도면이다. 도 5를 참조하면, 가속 구조는 5개의 노드(1 내지 5)를 포함하고, 노드3 내지 노드5는 리프 노드를 나타낸다.
TRV 유닛(120)은 3가지 경로를 따라 가속 구조를 탐색할 수 있다. 첫째로, TRV 유닛(120)은 제1경로인 노드1, 노드2 및 노드3을 따라 가속 구조를 탐색할 수 있다. 둘째로, TRV 유닛(120)은 제2경로인 노드1, 노드2 및 노드4를 따라 가속 구조를 탐색할 수 있다. 셋째로, TRV 유닛(120)은 제3경로인 노드1 및 노드5를 따라 가속 구조를 탐색할 수 있다. 이때, TRV 유닛(120)이 제2광선(421)에 대한 탐색을 수행할 때, TRV 유닛(120)은 제1광선(411)이 히트된 삼각형(432)을 탐색하는 제2경로를 우선적으로 탐색한다. 따라서, TRV 유닛(120)이 제1경로 또는 제3경로를 탐색하는 과정을 생략할 수 있다.
도 6은 일 실시 예에 따른 트리 탐색 장치를 나타내는 구성도이다. 트리 탐색 장치(tree traversal apparatus, 600)는 복수의 트리 탐색 유닛들(610) 및 메모리(620)를 포함한다.
트리는 복수의 노드들을 포함하고, 트리 탐색 장치(600)는 노드들을 탐색한다. 트리 탐색 장치(600)는 노드의 자식 노드들이 유효한 탐색 대상인지를 결정하기 위해 교차 검사를 수행한다.
복수의 트리 탐색 유닛들(610)은 독립적으로 트리를 탐색할 수 있다. 또한, 복수의 트리 탐색 유닛들(610)은 독립적으로 메모리(620)에 접속할 수 있다.
트리 탐색 유닛들(610)은 트리를 탐색할 때 메모리(620)를 이용한다. 트리 탐색 유닛들(610)은 메모리(620)에 탐색할 노드에 대한 정보를 저장할 수 있다. 노드에 대한 정보는 노드의 주소 또는 디코딩 정보를 포함할 수 있다. 디코딩 정보는 압축된 바운딩 박스에 대한 정보를 디코딩하기 위한 파라메타들을 포함할 수 있다. 계층적으로(hierarchy) 연결된 트리 구조에서 랜덤하게 노드의 데이터를 획득하기 위해서는 디코딩 정보가 요구된다. 따라서, 트리 탐색 유닛들(610)은 메모리(620)에 저장된 디코딩 정보를 이용하여 압축된 노드의 데이터를 디코딩할 수 있다.
트리 탐색 유닛들(610)은 메모리(620)를 공유한다. 예를 들어, 메모리(620)는 캐쉬 메모리일 수 있다.
트리 탐색 유닛(610)은 복수의 자식 노드들 중 어느 하나의 노드를 타겟 노드로 결정한다. 트리 구조의 경우, 어느 하나의 노드는 2개의 자식 노드들을 포함할 수 있다. 트리 탐색 유닛(610)은 현재 노드의 경로 정보와 결정된 타겟 노드의 상대적인 위치를 이용하여 타겟 노드의 경로 정보를 결정할 수 있다.
트리 탐색 유닛(610)은 타겟 노드의 노드 데이터를 획득하고, 노드 데이터에 대한 연산을 수행한다. 예를 들어, 트리 탐색 유닛(610)은 노드 데이터를 이용하여 타겟 노드의 자식 노드들과 광선이 교차하였는지를 검사할 수 있다. 다시 말해서, 트리 탐색 유닛(610)은 교차 검사를 통해서 어느 자식 노드가 유효한 탐색 대상인지를 결정한다. 광선과 교차한 자식 노드가 유효한 탐색 대상이 된다. 2개의 자식 노드들이 모두 유효한 탐색 대상인 경우, 트리 탐색 유닛(610)은 어느 하나의 노드를 타겟 노드로 결정하고, 나머지 자식 노드에 대한 정보는 메모리(620)에 저장한다.
트리 탐색 유닛(610)은 경로 코드를 키(key)값으로 이용하여 나머지 자식 노드에 대한 정보를 저장한다. 트리 탐색 유닛(610)은 나머지 자식 노드의 경로 정보를 키 값으로 메모리(620)의 주소를 결정하고, 결정된 주소에 나머지 자식 노드에 대한 정보를 저장한다. 트리 탐색 유닛(610)이 메모리(620)의 주소를 결정하는 방법에 관하여는 도 9 이하에서 상세히 설명한다.
트리 탐색 유닛(610)은 경로 코드를 이용하여 메모리(620)에 접속할 수 있다. 트리 탐색 유닛(610)은 메모리(620)에 노드에 대한 정보를 저장하거나, 노드에 대한 정보를 독출(read)할 때, 경로 코드를 이용할 수 있다.
경로 코드는 트리에 포함된 노드의 상대적인 위치를 나타내는 코드이다. 경로 코드는 이진 코드일 수 있다. 예를 들어, 왼쪽 노드의 경로는 0으로, 오른쪽 노드의 경로는 1로 나타낼 수 있다. 루트 노드로부터 2번째 깊이에 위치한 왼쪽 노드는 00으로 나타낼 수 있다. 상기와 같이 탐색 경로를 코드로 나타내는 것은 일 예일 뿐이며, 다양한 방법으로 탐색 경로를 코드로 나타낼 수 있다.
트리 탐색 유닛(610)은 복수의 자식 노드들이 유효한 탐색 대상인 경우, 현재 노드에 저장되어 있는 자식 노드들의 주소를 사용하여 타겟 노드를 결정한다. 또한, 트리 탐색 유닛(610)은 유효한 탐색 대상이 되는 자식 노드가 없는 경우, 메모리(620)로부터 노드에 대한 정보를 독출하여 타겟 노드를 결정한다.트리 탐색 유닛(610)이 다음 타겟 노드를 결정하는 방법에 관하여는 도 9 이하에서 상세히 설명한다.
트리는 레이 트레이싱 시스템에 사용될 수 있다. 레이 트레이싱 시스템은 광선이 바운딩 박스와 교차하는지를 판단하기 위해 트리를 사용한다. 예를 들어, 트리 탐색 유닛들(610)은 각각의 광선들이 노드들과 교차하는지를 검사할 수 있다. 트리 탐색 유닛들(610)은 개별적으로 광선을 수신하고, 수신된 광선이 어느 노드와 교차하는지를 탐색한다. 트리 탐색 유닛들(610)은 타겟 노드의 자식 노드들과 광선이 교차하는지 판단하고, 타겟 노드를 변경하여, 변경된 타겟 노드의 자식 노드들과 광선이 교차하는지 판단하는 과정을 반복하여 수행한다.
트리 탐색 유닛(610)은 트리의 깊이마다 나머지 자식 노드에 대한 정보를 메모리(620)에 저장하였는지 여부를 비트 스택에 저장한다. 트리의 깊이는 루트 노드부터 몇 번째 자식 노드인지를 나타낸다. 예를 들어, 트리 탐색 유닛(610)은 메모리(620)에 나머지 자식 노드에 대한 정보를 저장하고, 비트 스택에 1을 기록(write)할 수 있다.
도 7은 일 실시 예에 따른 트리 탐색 방법을 설명하는 순서도이다.
단계 710에서, 트리 탐색 유닛(610)은 복수의 자식 노드들이 유효한 탐색 대상이 경우, 복수의 자식 노드들 중 어느 하나의 노드를 타겟 노드로 결정한다. 예를 들어, 트리 탐색 유닛(610)은 루트 노드의 자식 노드들 중 어느 하나를 타겟 노드로 결정할 수도 있다.
단계 720에서, 트리 탐색 유닛(610)은 나머지 자식 노드의 경로 코드를 키 값으로 이용하여 나머지 자식 노드에 대한 정보를 메모리(620)에 저장한다.
트리 탐색 유닛(610)은 타겟 노드에 대한 연산을 수행하고, 다음 타겟 노드를 결정한다. 유효한 탐색 대상인 자식 노드가 존재하는 경우, 트리 탐색 유닛(610)은 자식 노드를 다음 타겟 노드로 결정한다. 유효한 탐색 대상인 자식 노드가 존재하지 않는 경우, 트리 탐색 유닛(610)은 현재 타겟 노드의 경로 정보와 비트 스택 값을 이용하여 다음 타겟 노드를 결정할 수 있다. 트리 탐색 유닛(610)은 현재 타겟 노드의 경로 코드와 비트 스택 값을 이용하여 메모리(620)의 주소를 획득하고, 획득된 주소에 저장된 다음 타겟 노드의 정보를 독출한다. 트리 탐색 유닛(610)은 다음 타겟 노드에 대한 연산을 수행한다. 다음 타겟 노드의 정보는 다음 타겟 노드의 주소 및 디코딩 정보를 포함한다.
다음 타겟 노드가 없는 경우, 트리 탐색 유닛(610)은 탐색을 종료할 수 있다.
도 8은 트리 탐색 유닛이 트리를 탐색하는 방법을 나타내는 순서도이다.
단계 801에서, 트리 탐색 유닛(610)은 노드를 푸쉬(push) 또는 팝(pop) 하는지를 판단한다. 노드를 푸쉬 한다는 것은 노드에 대한 정보를 메모리(620)에 저장하는 것을 의미한다. 노드를 팝 한다는 것은 메모리(620)에 저장된 노드에 대한 정보를 독출하는 것을 의미한다. 트리 탐색 유닛(610)은 유효한 탐색 대상인 노드이지만, 나중에 탐색할 노드를 메모리(620)에 푸쉬할 수 있다. 또한, 트리 탐색 유닛(610)은 유효한 탐색 대상인 노드가 존재하지 않는 경우, 메모리(620)에 저장된 노드를 팝 할 수 있다.
단계 802에서, 트리 탐색 유닛(610)은 노드를 푸쉬 하는지를 판단한다.
단계 803에서, 트리 탐색 유닛(610)은 푸쉬 경로 코드를 획득하고, 경로 코드를 업데이트한다. 푸쉬할 노드에 따라 푸쉬 경로 코드가 달라진다. 푸쉬 경로 코드는 푸쉬할 노드의 경로를 나타낸다.
단계 804에서, 트리 탐색 유닛(610)은 푸쉬 경로 코드에 노드에 대한 정보를 기록한다. 다시 말해서, 트리 탐색 유닛(610)은 푸쉬 경로 코드를 키 값으로 메모리(620)의 주소를 결정하고, 결정된 주소에 푸쉬할 노드에 대한 정보를 기록한다.
단계 805에서, 트리 탐색 유닛(610)은 팝 경로 코드를 획득한다. 팝 경로 코드는 팝 할 노드의 경로를 나타낸다.
단계 806에서, 트리 탐색 유닛(610)은 팝 경로 코드로부터 노드에 대한 정보를 독출한다. 다시 말해서, 트리 탐색 유닛(610)은 팝 경로 코드를 키 값으로 메모리(620)의 주소를 결정하고, 결정된 주소에 저장된 노드에 대한 정보를 독출한다.
단계 807에서, 트리 탐색 유닛(610)은 메모리(620)로부터 노드에 대한 정보를 독출하는 것이 실패하였는지 판단한다. 예를 들어, 메모리(620)가 캐쉬 메모리인 경우, 캐쉬 미스가 발생하였는지 판단한다.
단계 808에서, 트리 탐색 유닛(610)은 탐색을 재시작하고, 경로 코드를 초기화한다.
단계 809에서, 트리 탐색 유닛(610)은 경로 코드를 업데이트 한다. 트리 탐색 유닛(610)은 메모리(620)에 저장된 노드에 대한 정보를 독출하고, 독출된 노드에 대한 정보에 따라 경로 코드를 업데이트한다.
단계 810에서, 트리 탐색 유닛(610)은 경로 코드를 업데이트 한다.
도 9 내지 도 22는 일 실시 예에 따라 트리를 탐색하는 방법을 설명하기 위한 도면이다. 도 9 내지 도 22를 참조하면, 트리 탐색 유닛(610)은 루트 노드(0) 내지 리프 노드(8)를 탐색할 수 있다. 도 9 내지 도 22에서 왼쪽에 위치한 자식 노드를 경로 코드 0으로 나타내었으며, 오른쪽에 위치한 자식 노드는 경로 코드 1로 나타내었다. 반대로 경로 코드를 부여하는 것도 가능하며 0 또는 1이 아닌 다른 코드를 부여하는 것도 가능하다.
도 9는 트리 탐색 유닛(610)이 트리 탐색을 시작하는 것을 나타낸다. 트리 탐색 유닛(610)은 루트 노드(0)부터 탐색을 시작한다. 메모리(620)는 주소(address)와 노드 데이터(node data)를 저장할 수 있다. 경로(path)는 현재(current), 다음(next), 푸쉬(push) 등으로 나타낼 수 있다. 비트 스택(bit stack)은 트리의 깊이마다 푸쉬가 이루어졌는지를 나타낸다. Current는 현재 노드의 경로를 나타내고, next는 다음 노드의 경로를 나타내고, push는 메모리(620)에 푸쉬된 노드의 경로를 나타낸다.
도 10은 루트 노드(0)의 왼쪽 자식 노드(1)를 다음에 탐색할 노드로 결정한 경우를 나타낸다. 도 10은 노드(1) 및 노드(6)이 모두 유효한 탐색 대상이고, 왼쪽 자식 노드(1)를 타겟 노드로 결정한 경우를 나타낸다. 다음에 탐색할 노드가 루트 노드(0)의 왼쪽 자식 노드(1)이므로, 트리 탐색 유닛(610)은 next=0 으로 설정한다.
또한, 오른쪽 자식 노드(6)는 나중에 탐색할 노드이므로, 트리 탐색 유닛(610)은 push=1 으로 설정한다. 또한, 트리의 루트 노드에서 히트(hit) 되었으므로, 트리 탐색 유닛(610)은 bit stack=1 로 설정한다. 트리 탐색 유닛(610)은 노드(6)을 나중에 탐색할 것이므로, 노드(6)의 경로를 키 값으로 이용하여 메모리(620)에 노드(6)에 대한 정보를 저장한다. 예를 들어, 트리 탐색 유닛(610)은 노드(6)의 경로는 1이고, 경로의 종료를 나타내는 코드 1을 이용하여 4자리 이진 코드 1100을 노드(6)의 경로 코드로 생성할 수 있다. 다시 말해서, 1100 에서 가장 왼쪽의 1은 경로를 나타내고, 두번째 1은 경로의 종료를 나타낸다. 트리 탐색 유닛(610)은 1100에 대응하는 메모리(620)의 주소에 노드(6)에 대한 정보를 저장한다.
도 11은 트리 탐색 유닛(610)이 노드(1)을 탐색하는 것을 나타낸다. 트리 탐색 유닛(610)은 current=0 으로 설정한다.
도 12는 트리 탐색 유닛(610)이 노드(5)를 메모리(620)에 푸쉬 하는 것을 나타낸다. 노드(1) 다음에 탐색할 노드가 오른쪽 자식 노드(2)이므로, 트리 탐색 유닛(610)은 next=(0,1) 로 설정한다.
또한, 왼쪽 자식 노드(5)는 나중에 탐색할 노드이므로, 트리 탐색 유닛(610)은 push=(0,0) 으로 설정한다. 또한, 노드(1)에서 히트(hit) 되었으므로, 트리 탐색 유닛(610)은 bit stack=(1,1) 로 설정한다. 트리 탐색 유닛(610)은 노드(5)를 나중에 탐색할 것이므로, 노드(5)의 경로를 키 값으로 이용하여 메모리(620)에 노드(5)에 대한 정보를 저장한다. 예를 들어, 트리 탐색 유닛(610)은 노드(5)의 경로는 (0,0)이고, 경로의 종료를 나타내는 코드 1을 이용하여 4자리 이진 코드 0010을 노드(5)의 경로 코드로 생성할 수 있다. 다시 말해서, 0010 에서 왼쪽의 00은 노드(5)의 경로를 나타내고, 1은 경로의 종료를 나타낸다. 트리 탐색 유닛(610)은 0010에 대응하는 메모리(620)의 주소에 노드(5)에 대한 정보를 저장한다.
도 13은 트리 탐색 유닛(610)이 노드(2)를 탐색하는 과정을 나타낸다. 노드(2)가 탐색되기 때문에, 트리 탐색 유닛(610)은 current=(0,1)로 설정한다.
도 14는 트리 탐색 유닛(610)이 노드(4)를 메모리(620)에 푸쉬 하는 것을 나타낸다. 노드(2) 다음에 탐색할 노드가 노드(2)의 왼쪽 자식 노드(3)이므로, 트리 탐색 유닛(610)은 next=(0,1,0)으로 설정한다.
또한, 노드(2)의 오른쪽 자식 노드(3)는 나중에 탐색할 노드이므로, 트리 탐색 유닛(610)은 push=(0,1,1) 으로 설정한다. 또한, 노드(2)에서 히트(hit) 되었으므로, 트리 탐색 유닛(610)은 bit stack=(1,1,1) 로 설정한다. 트리 탐색 유닛(610)은 노드(4)를 나중에 탐색할 것이므로, 노드(4)의 경로를 키 값으로 이용하여 메모리(620)에 노드(4)에 대한 정보를 저장한다. 예를 들어, 트리 탐색 유닛(610)은 노드(4)의 경로는 (0,1,1)이고, 경로의 종료를 나타내는 코드 1을 이용하여 4자리 이진 코드 0111을 노드(4)의 경로 코드로 생성할 수 있다. 다시 말해서, 0111 에서 왼쪽의 011은 노드(4)의 경로를 나타내고, 1은 경로의 종료를 나타낸다. 트리 탐색 유닛(610)은 0111에 대응하는 메모리(620)의 주소에 노드(4)에 대한 정보를 저장한다.
도 15는 트리 탐색 유닛(610)이 노드(3)를 탐색하는 과정을 나타낸다. 노드(3)가 탐색되기 때문에, 트리 탐색 유닛(610)은 current=(0,1,0)로 설정한다.
도 16은 트리 탐색 유닛(610)이 리프 노드(3)을 탐색한 이후의 동작을 설명하기 위한 도면이다. 노드(3)가 리프 노드이므로, 노드(3)은 자식 노드를 갖지 않는다. 트리 탐색 유닛(610)은 bit stack을 참조하여 반전시킬 비트를 결정한다. bit stack=(1,1,1)이므로, 트리 탐색 유닛(610)은 현재 경로 코드의 3번째 비트를 반전 시키고, bit stack의 가장 오른쪽 비트는 삭제한다. 트리 탐색 유닛(610)는 노드(3)의 경로 코드의 3번째 비트를 반전시켜 다음에 탐색할 노드의 경로를 획득한다. 노드(3)의 경로 코드는 (0,1,0)이므로 다음에 탐색할 노드의 경로는 (0,1,1)이 된다. bit stack=(1,1,1)에서 오른쪽 비트가 삭제되고, bit stack=(1,1)이 된다.
도 17은 트리 탐색 유닛(610)이 노드(4)를 탐색하는 과정을 나타낸다. 도 16에서 트리 탐색 유닛(610)이 탐색할 다음 경로 코드로 (0,1,1)을 획득하였으므로, 트리 탐색 유닛(610)은 0111을 키 값으로 메모리(620)의 주소를 획득하고, 0111에 저장된 노드 데이터를 획득한다. 0111에 저장된 노드 데이터는 노드(4)에 대한 정보이므로, 트리 탐색 유닛(610)은 노드(4)에 대한 정보를 이용하여 노드(4)를 탐색할 수 있다.
도 18은 트리 탐색 유닛(610)이 리프 노드(4)을 탐색한 이후의 동작을 설명하기 위한 도면이다. 노드(4)가 리프 노드이므로, 노드(4)은 자식 노드를 갖지 않는다. 따라서, bit stack=(1,1)이므로, 트리 탐색 유닛(610)는 노드(4)의 경로 코드의 2번째 비트를 반전시켜 다음에 탐색할 노드의 경로를 획득한다. 노드(4)의 경로 코드는 (0,1,1)이므로 다음에 탐색할 노드의 경로는 (0,0)이 된다. 또한, 트리 탐색 유닛(610)는 비트 스택의 마지막 비트를 삭제한다. 따라서, bit stack=(1,1)에서 오른쪽 비트가 삭제되고, bit stack=(1)이 된다.
도 19는 트리 탐색 유닛(610)이 노드(5)를 탐색하는 과정을 나타낸다. 도 18에서 트리 탐색 유닛(610)이 탐색할 다음 경로 코드로 (0,0)을 획득하였으므로, 트리 탐색 유닛(610)은 0010을 키 값으로 메모리(620)의 주소를 획득하고, 0010에 저장된 노드 데이터를 획득한다. 0010에 저장된 노드 데이터는 노드(5)에 대한 정보이므로, 트리 탐색 유닛(610)은 노드(5)에 대한 정보를 이용하여 노드(5)를 탐색할 수 있다.
도 20은 트리 탐색 유닛(610)이 리프 노드(5)을 탐색한 이후의 동작을 설명하기 위한 도면이다. 노드(5)가 리프 노드이므로, 노드(5)은 자식 노드를 갖지 않는다. 따라서, bit stack=(1)이므로, 트리 탐색 유닛(610)는 노드(5)의 경로 코드의 1번째 비트를 반전시켜 다음에 탐색할 노드의 경로를 획득한다. 노드(5)의 경로 코드는 (0,0)이므로 다음에 탐색할 노드의 경로는 (1)이 된다. 또한, 트리 탐색 유닛(610)는 비트 스택의 마지막 비트를 삭제한다. 따라서, bit stack=(1)에서 1이 삭제된다.
도 21은 트리 탐색 유닛(610)이 노드(6)를 탐색하는 과정을 나타낸다. 도 20에서 트리 탐색 유닛(610)이 탐색할 다음 경로 코드로 (1)을 획득하였으므로, 트리 탐색 유닛(610)은 1100을 키 값으로 메모리(620)의 주소를 획득하고, 1100에 저장된 노드 데이터를 획득한다. 1100에 저장된 노드 데이터는 노드(6)에 대한 정보이므로, 트리 탐색 유닛(610)은 노드(6)에 대한 정보를 이용하여 노드(6)를 탐색할 수 있다.
도 22는 트리 탐색 유닛(610)이 탐색을 종료하는 과정을 나타낸다. 노드(6)이 히트되지 않았으며, bit stack에 저장된 값이 없으므로, 트리 탐색 유닛(610)은 트리를 탐색하는 것을 종료한다.
한편, 상술한 실시예는, 컴퓨터에서 실행될 수 있는 프로그램으로 작성 가능하고, 컴퓨터에 의해 판독 가능한 매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 또한, 상술한 실시예에서 사용된 데이터의 구조는 컴퓨터 판독 가능 매체에 여러 수단을 통하여 기록될 수 있다. 또한, 상술한 실시예는 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터에 의해 실행가능한 명령어를 포함하는 기록 매체의 형태로 구현될 수 있다. 예를 들어, 소프트웨어 모듈 또는 알고리즘으로 구현되는 방법들은 컴퓨터가 읽고 실행할 수 있는 코드들 또는 프로그램 명령들로서 컴퓨터가 읽을 수 있는 기록 매체에 저장될 수 있다.
컴퓨터 판독 가능 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 기록 매체일 수 있고, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체를 포함할 수 있다. 예를 들어, 컴퓨터 판독 가능 매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등) 및 광학적 판독 매체(예를 들면, 시디롬, DVD 등)와 같은 저장 매체를 포함할 수 있으나, 이에 제한되지 않는다. 또한, 컴퓨터 판독 가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있다.
또한, 컴퓨터가 읽을 수 있는 복수의 기록 매체가 네트워크로 연결된 컴퓨터 시스템들에 분산되어 있을 수 있으며, 분산된 기록 매체들에 저장된 데이터(예: 프로그램 명령어 및 코드)가 적어도 하나의 컴퓨터에 의해 실행될 수 있다.
본 개시에서 설명된 특정 실행들은 일 실시예 일 뿐이며, 어떠한 방법으로도 본 개시의 범위를 한정하는 것은 아니다. 명세서의 간결함을 위하여, 종래 전자적인 구성들, 제어 시스템들, 소프트웨어, 및 상기 시스템들의 다른 기능적인 측면들의 기재는 생략될 수 있다.
전술한 본 개시의 설명은 예시를 위한 것이며, 본 개시가 속하는 기술분야의 통상의 지식을 가진 자는 본 개시의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 쉽게 변형이 가능하다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 예를 들어, 단일형으로 설명되어 있는 각 구성 요소는 분산되어 실시될 수도 있으며, 마찬가지로 분산된 것으로 설명되어 있는 구성 요소들도 결합된 형태로 실시될 수 있다.
본 개시에서 모든 예들 또는 예시적인 용어(예들 들어, 등등)의 사용은 단순히 본 개시를 상세히 설명하기 위한 것으로서 특허청구범위에 의해 한정되지 않는 이상 상기 예들 또는 예시적인 용어로 인해 본 개시의 범위가 한정되는 것은 아니다.
또한, "필수적인", "중요하게" 등과 같이 구체적인 언급이 없다면 본 개시에 기재된 구성 요소들은 본 개시의 실행을 위하여 반드시 필요한 구성 요소가 아닐 수 있다.
본 개시의 실시예들과 관련된 기술 분야에서 통상의 지식을 가진 자는 상기 기재의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다.
본 개시는 다양한 변환을 가할 수 있고 여러 가지 실시 예를 가질 수 있는바, 본 개시는 명세서에 기재된 특정한 실시 형태에 의해 한정되는 것이 아니며, 본 개시의 사상 및 기술 범위에 포함되는 모든 변환, 균등물 내지 대체물이 본 개시에 포함되는 것으로 이해되어야 한다. 그러므로, 개시된 실시예들은 한정적인 관점이 아닌 설명적 관점에서 이해되어야 한다.
본 개시의 범위는 발명의 상세한 설명보다는 특허 청구 범위에 의하여 나타나며, 특허 청구 범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 개시의 범위에 포함되는 것으로 해석되어야 한다.
본 명세서에 기재된 "...부", "모듈" 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어 또는 소프트웨어로 구현되거나 하드웨어와 소프트웨어의 결합으로 구현될 수 있다.
"부", "모듈"은 어드레싱될 수 있는 저장 매체에 저장되며 프로세서에 의해 실행될 수 있는 프로그램에 의해 구현될 수도 있다.
예를 들어, "부", "모듈" 은 소프트웨어 구성 요소들, 객체 지향 소프트웨어 구성 요소들, 클래스 구성 요소들 및 태스크 구성 요소들과 같은 구성 요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로 코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들 및 변수들에 의해 구현될 수 있다.
본 명세서에서, "A는 a1, a2 및 a3 중 하나를 포함할 수 있다"는 기재은, A라는 엘리먼트(element)에 포함될 수 있는 예시적인 엘리먼트가 a1, a2 또는 a3라는 넓은 의미이다.
상기 기재로 인해 엘리먼트 A를 구성할 수 있는 엘리먼트가 반드시 a1, a2 또는 a3로 국한된다는 것은 아니다. 따라서 A를 구성할 수 있는 엘리먼트가, a1, a2 및 a3 이외에 예시되지 않은 다른 엘리먼트들을 배제한다는 의미로, 배타적으로 해석되지 않음에 유의하여야 한다.
또한, 상기 기재는, A는 a1를 포함하거나, a2를 포함하거나, 또는 a3를 포함할 수 있다는 의미이다. 상기 기재가 A를 구성하는 엘리먼트들이 반드시 소정 집합 내에서 선택적으로 결정된다는 것을 의미하지는 않는다. 예를 들어 상기 기재가, 반드시 a1, a2 및 a3를 포함하는 집합으로부터 선택된 a1, a2, 또는 a3가 컴포넌트 A를 구성한다는 것으로, 제한적으로 해석되지 않음에 유의하여야 한다.
또한 본 명세서에서, "a1, a2 또는(및) a3 중 적어도 하나"는 기재는, "a1", "a2", "a3", "a1 및 a2", "a1 및 a3", "a2 및 a3", 및 "a1, a2 및 a3" 중에서 한 가지를 나타낸다.
따라서, "a1 중 적어도 하나, a2 중 적어도 하나 또는(및) a3 중 적어도 하나"라고 명시적으로 기재되지 않는 이상, "a1, a2 또는(및) a3 중 적어도 하나"는 기술이 "a1 중 적어도 하나", "a2 중 적어도 하나" 또는(및) "a3 중 적어도 하나"라고 해석되지 않음에 유의하여야 한다.
600: 트리 탐색 장치
610: 트리 탐색 유닛
620: 메모리

Claims (19)

  1. 트리 탐색을 사용하는 시스템에서 트리를 탐색하는 방법에 있어서,
    복수의 자식 노드들이 유효한 탐색 대상인 경우, 상기 복수의 자식 노드들 중 어느 하나의 자식 노드를 타겟 노드로 결정하는 단계; 및
    경로 코드를 키(key)값으로 이용하여 나머지 자식 노드에 대한 정보를 메모리에 저장하는 단계;를 포함하는, 트리 탐색 방법.
  2. 제 1 항에 있어서,
    상기 메모리는 복수의 트리 탐색 유닛에 의해 공유되는, 트리 탐색 방법.
  3. 제 1 항에 있어서,
    상기 메모리는 캐쉬 메모리인, 트리 탐색 방법.
  4. 제 1 항에 있어서, 상기 타겟 노드를 결정하는 단계는,
    현재 타겟 노드의 경로 정보와 다음 타겟 노드의 상대적인 위치를 이용하여 상기 다음 타겟 노드를 결정하는 것을 특징으로 하는, 트리 탐색 방법.
  5. 제 1 항에 있어서, 상기 타겟 노드를 결정하는 단계는,
    유효한 탐색 대상인 자식 노드가 존재하지 않는 경우, 현재 타겟 노드의 경로 정보와 비트 스택의 값을 이용하여 탐색을 종료하거나, 다음 타겟 노드의 경로 코드를 결정하고, 상기 결정된 경로 코드를 키 값으로 이용하여 상기 메모리로부터 다음 타겟 노드의 정보를 획득하는 것을 특징으로 하는 트리 탐색 방법.
  6. 제 5 항에 있어서,
    상기 다음 타겟 노드의 정보는 상기 다음 타겟 노드의 주소 및 디코딩 정보를 포함하는 것을 특징으로 하는 트리 탐색 방법.
  7. 제 1 항에 있어서,
    교차 검사를 통해 상기 복수의 자식 노드들 중 어느 자식 노드가 유효한 탐색 대상인지를 결정하는 단계를 더 포함하는 트리 탐색 방법.
  8. 제 1 항에 있어서,
    상기 트리는 트레이싱 시스템에서 사용되는, 트리 탐색 방법.
  9. 제 1 항에 있어서, 상기 저장하는 단계는,
    상기 트리의 깊이마다 상기 나머지 자식 노드에 대한 정보를 상기 메모리에 저장하였는지 여부를 비트 스택에 저장하는 단계를 포함하는, 트리 탐색 방법.
  10. 제1항 내지 제9항 중 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
  11. 트리를 탐색하는 장치에 있어서,
    복수의 자식 노드들이 유효한 탐색 대상인 경우, 상기 복수의 자식 노드들 중 어느 하나의 노드를 타겟 노드로 결정하는 트리 탐색 유닛들; 및
    경로 코드를 키(key)값으로 이용하여 나머지 자식 노드에 대한 정보를 저장하는 메모리;를 포함하는, 트리 탐색 장치.
  12. 제 11 항에 있어서,
    상기 메모리는 상기 트리 탐색 유닛들에 의해 공유되는, 트리 탐색 장치.
  13. 제 11 항에 있어서,
    상기 메모리는 캐쉬 메모리인, 트리 탐색 장치.
  14. 제 11 항에 있어서,
    상기 트리 탐색 유닛들은 현재 타겟 노드의 경로 정보와 다음 타겟 노드의 상대적인 위치를 이용하여 상기 다음 타겟 노드를 결정하는 것을 특징으로 하는 트리 탐색 장치.
  15. 제 11 항에 있어서,
    상기 트리 탐색 유닛들은 유효한 탐색 대상인 자식 노드가 존재하지 않는 경우, 현재 타겟 노드의 경로 정보와 비트 스택의 값을 이용하여 탐색을 종료하거나, 다음 타겟 노드의 경로 코드를 결정하고, 상기 결정된 경로 코드를 키 값으로 이용하여 상기 메모리로부터 다음 타겟 노드의 정보를 획득하는 것을 특징으로 하는 트리 탐색 장치.
  16. 제 15 항에 있어서,
    상기 다음 타겟 노드의 정보는 상기 다음 타겟 노드의 주소 및 디코딩 정보를 포함하는 것을 특징으로 하는 트리 탐색 장치.
  17. 제 11 항에 있어서,
    상기 트리 탐색 유닛들은 교차 검사를 통해 상기 복수의 자식 노드들 중 어느 자식 노드가 유효한 탐색 대상인지를 결정하는 것을 특징으로 하는 트리 탐색 장치.
  18. 제 11 항에 있어서,
    상기 트리는 레이 트레이싱 시스템에 사용되는 것인, 트리 탐색 장치.
  19. 제 11 항에 있어서,
    상기 트리 탐색 유닛들은 상기 트리의 깊이마다 상기 나머지 자식 노드에 대한 정보를 상기 메모리에 저장하였는지 여부를 비트 스택에 저장하는, 트리 탐색 장치.
KR1020150135548A 2015-09-24 2015-09-24 트리를 탐색하는 장치 및 방법 KR20170036416A (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020150135548A KR20170036416A (ko) 2015-09-24 2015-09-24 트리를 탐색하는 장치 및 방법
US15/169,813 US20170091898A1 (en) 2015-09-24 2016-06-01 Apparatus for and method of traversing tree
JP2016183157A JP2017062787A (ja) 2015-09-24 2016-09-20 ツリーを探索する装置及びその方法
EP16190472.7A EP3147867A1 (en) 2015-09-24 2016-09-23 Apparatus for and method of traversing tree
CN201610851588.0A CN106558091A (zh) 2015-09-24 2016-09-26 用于遍历树的设备和遍历树的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150135548A KR20170036416A (ko) 2015-09-24 2015-09-24 트리를 탐색하는 장치 및 방법

Publications (1)

Publication Number Publication Date
KR20170036416A true KR20170036416A (ko) 2017-04-03

Family

ID=57326161

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150135548A KR20170036416A (ko) 2015-09-24 2015-09-24 트리를 탐색하는 장치 및 방법

Country Status (5)

Country Link
US (1) US20170091898A1 (ko)
EP (1) EP3147867A1 (ko)
JP (1) JP2017062787A (ko)
KR (1) KR20170036416A (ko)
CN (1) CN106558091A (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10649524B2 (en) 2017-04-07 2020-05-12 Intel Corporation Apparatus and method for foveated rendering, bin comparison and TBIMR memory-backed storage for virtual reality implementations
CN108763322B (zh) * 2018-05-02 2021-05-18 浪潮通用软件有限公司 一种实现树结构的方法及装置
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
US10825230B2 (en) * 2018-08-10 2020-11-03 Nvidia Corporation Watertight ray triangle intersection
WO2021149526A1 (ja) * 2020-01-23 2021-07-29 ソニーグループ株式会社 情報処理装置、情報処理方法及びプログラム
US11302056B2 (en) * 2020-06-10 2022-04-12 Nvidia Corporation Techniques for traversing data employed in ray tracing
CN111708967B (zh) * 2020-06-11 2023-05-16 浙江浙大网新国际软件技术服务有限公司 一种基于网站地图的指纹识别方法
US11450057B2 (en) 2020-06-15 2022-09-20 Nvidia Corporation Hardware acceleration for ray tracing primitives that share vertices
GB2601792A (en) * 2020-12-10 2022-06-15 Imagination Tech Ltd Intersection testing for ray tracing
CN113704294A (zh) * 2021-08-17 2021-11-26 北京达佳互联信息技术有限公司 数据处理方法、装置、电子设备和存储介质
CN114090157A (zh) * 2021-11-18 2022-02-25 中国平安财产保险股份有限公司 树形控件的数据处理方法、装置、设备和存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080024489A1 (en) * 2006-07-28 2008-01-31 Robert Allen Shearer Cache Utilization Optimized Ray Traversal Algorithm with Minimized Memory Bandwidth Requirements
US20080088619A1 (en) * 2006-10-17 2008-04-17 Robert Allen Shearer Branch Prediction for Acceleration Data Structure Traversal
US7719532B2 (en) * 2007-02-09 2010-05-18 International Business Machines Corporation Efficient and flexible data organization for acceleration data structure nodes
US9305392B2 (en) * 2012-12-13 2016-04-05 Nvidia Corporation Fine-grained parallel traversal for ray tracing
KR20150057868A (ko) * 2013-11-20 2015-05-28 삼성전자주식회사 레이 트레이싱 시스템에서의 이진트리 탐색 방법 및 장치
US9552664B2 (en) * 2014-09-04 2017-01-24 Nvidia Corporation Relative encoding for a block-based bounding volume hierarchy

Also Published As

Publication number Publication date
CN106558091A (zh) 2017-04-05
EP3147867A1 (en) 2017-03-29
JP2017062787A (ja) 2017-03-30
US20170091898A1 (en) 2017-03-30

Similar Documents

Publication Publication Date Title
KR20170036416A (ko) 트리를 탐색하는 장치 및 방법
US9965888B2 (en) Method and apparatus for generating and traversing acceleration structure
JP6474585B2 (ja) レイトレーシング処理装置及びその方法
KR101705581B1 (ko) 데이터 처리 장치 및 방법
US10497167B2 (en) Method and apparatus for generating acceleration structure
US9355491B2 (en) Ray tracing apparatus and method
US9576389B2 (en) Method and apparatus for generating acceleration structure in ray tracing system
KR102116981B1 (ko) 광선 추적 가속 방법 및 장치
KR102161749B1 (ko) 화상의 렌더링을 위하여 광선 추적을 수행하는 방법 및 장치.
KR102493461B1 (ko) 렌더링 시스템 및 방법
KR102604737B1 (ko) 가속 구조를 생성하는 방법 및 장치
KR20150114767A (ko) 멀티 프레임들의 동일한 영역을 연속으로 렌더링하는 방법 및 장치
KR20150039496A (ko) 이전 렌더링의 결과를 이용하여 광선을 추적하는 방법 및 장치
KR101705072B1 (ko) 영상 처리 장치 및 방법
JP6460914B2 (ja) レイトレーシング・システムでの加速構造探索装置及び加速構造探索方法
KR20150136348A (ko) 레이 트레이싱 시스템에서의 가속 구조 탐색 장치 및 그 탐색 방법
KR102252374B1 (ko) 광선 추적 유닛 및 광선 데이터를 처리하는 방법
KR20150034062A (ko) 동일한 그룹의 데이터를 라우팅하는 방법 및 장치, 렌더링 유닛을 재구성하는 방법 및 장치
KR102537530B1 (ko) 가속 구조를 생성하는 방법 및 장치
KR100843292B1 (ko) 룩업 테이블을 이용한 레이 트레이싱 장치 및 방법
KR102051903B1 (ko) 공간 가속 구조 탐색 장치 및 방법
KR102467031B1 (ko) 가속 구조를 생성 및 탐색하는 방법
US20150186288A1 (en) Apparatus and method of operating cache memory
KR20160133358A (ko) 트리 구조를 생성하는 장치 및 방법
CN116086427A (zh) 基准地图获取方法、装置、设备和存储介质