KR102393665B1 - 그래픽 처리 시스템 - Google Patents
그래픽 처리 시스템 Download PDFInfo
- Publication number
- KR102393665B1 KR102393665B1 KR1020150036445A KR20150036445A KR102393665B1 KR 102393665 B1 KR102393665 B1 KR 102393665B1 KR 1020150036445 A KR1020150036445 A KR 1020150036445A KR 20150036445 A KR20150036445 A KR 20150036445A KR 102393665 B1 KR102393665 B1 KR 102393665B1
- Authority
- KR
- South Korea
- Prior art keywords
- primitives
- node
- vertices
- tree
- subset
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/005—Tree description, e.g. octree, quadtree
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/40—Hidden part removal
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
Abstract
복수의 프리미티브들(31)의 세트가 그래픽 처리 시스템에서 출력 프레임에 대해서 처리될 때, 프리미티브들(31)의 세트가 프리미티브들의 복수의 서브 세트들로 분할되고, 프리미티브들(31)의 세트가 분리된 서브 세트들(33) 중 하나를 트리의 각 리프 노드(34)가 표시하고, 트리의 각 부모 노드 35, 36, 37가 그 자식 노드들 모두의 프리미티브들의 서브 세트들의 결합에 대응하는 프리미티브들의 서브 세트를 표시하도록 구성되는, 프리미티브들의 세트를 표시하기 위한 트리 표시(30)가 생성된다. 트리 표시의 각 노드에 대하여, 노드가 표시하는 프리미티브들의 서브 세트, 노드가 표시하는 프리미티브들의 서브 세트 내의 프리미티브들이 사용하는 버텍스들, 및 노드가 표시하는 프리미티브들의 서브 세트가 내부에 있는 공간의 용적을 나타내는 데이터가 결정된다. 그 다음 트리 표시를 이용해서 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 처리될 프리미티브들의 세트 및 버텍스들의 세트를 결정한다.
Description
본 발명은 그래픽 처리 시스템에 관한 것으로, 특히 그래픽 처리 시스템에서 출력을 렌더링(rendering)할 때 렌더링될 프리미티브들(primitives) 및 버텍스들(vertices)을 식별하는 방법 및 장치에 관한 것이다.
컴퓨터 그래픽 시스템은 일반적으로 삼각형과 같은 통상적으로 간단한 다각형인 소위 프리미티브들을 처리함으로써, 예를 들면 표시용 프레임을 렌더링한다. 프레임에 대한 프리미티브들은 통상적으로 렌더링되는 순으로 리스트에 기록될 것이고, 각 프리미티브는 관련 버텍스 어레이 내의 자신의 인덱스에 의해 참조되는 버텍스 세트와 관련되어 있을 것이다. 이렇게 함으로써, 그래픽 처리 시스템은 일반적으로 렌더링될 프리미티브의 시퀀스를 수신할 것이고, 프리미티브들을 차례로 처리해서 출력 프레임을 생성할 것이다. 렌더링될 소정의 프레임은 수 만개의 프리미티브를 포함할 수도 있다.
그래픽 처리가 가지고 있는 하나의 문제는, 프레임에 대해 정의된 일부 프리미티브들이 예를 들어 뷰 프러스텀(view frustum) 밖에 있기 때문에 실제로 최종 출력에 표시되지 않을 수도 있다는 점이다. 따라서, 프레임이 렌더링되기 전에 그러한 프리미티브들을 식별하여, 이들 프리미티브들을 처리하는 것을 피하려고 하는 것으로 알려져 있다.
그렇지만, 현재 본 출원인은, 그러한 기술을 이용해서 뷰 프러스텀 밖에 있는 프리미티브들을 처리하는 것을 피할 수 있지만, 실제로 그러한 기술은 (예를 들면, 버텍스 처리가 버텍스 어레이 내의 모든 버텍스에 대해 행해지기 때문에) 처리되는 버텍스의 개수를 상당히 줄일 수 없다는 것을 인식했다. 그러한 버텍스 처리는 상당한 부담일 수 있고, 이것은 상당한 밴드폭 리소스(resources)을 갖는 좀더 강력한 데스크탑 시스템에서는 문제가 아닐 수도 있지만, 본 출원인은 좀더 제한된 밴드폭 및 처리 리소스를 가질 수도 있는 동력이 낮은 휴대장치용 특히 그래픽 처리 시스템에서 행해지는 버텍스 처리량을 줄이려고 하는 데 유리할 것이라는 것을 인식했다.
따라서, 본 출원인은 그래픽 처리 시스템에서 렌더링될 프리미티브들 및 버텍스들을 식별하기 위한 방법 및 장치를 개선할 여지가 남아 있다고 믿는다.
본 발명의 제1 국면에 의하면, 그래픽 처리 시스템에서 출력용 프레임에 대해 렌더링될 복수의 프리미티브들의 세트를 처리하는 방법이 제공되고, 상기 프리미티브들의 세트 내의 각 프리미티브는 한 개 이상의 버텍스와 관련되어 있으며, 상기 방법은,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 상기 프리미티브들의 세트를 프리미티브들의 복수의 서브 세트들로 분할하는 단계와,
상기 프리미티브들의 서브 세트들이 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 트리의 리프 노드들(leaf nodes)에 할당되고, 상기 프리미티브들의 세트가 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 분할된 서브 세트들 중 하나를 트리(tree)의 각 리프 노드(leaf node)가 표시하고, 트리의 각 부모 노드가 그 자식 노드들의 모두의 프리미티브들의 서브 세트들의 조합에 대응하는 프리미티브들의 서브 세트를 표시하도록 구성되는, 프리미티브들의 세트를 표시하기 위한 트리 표시를 생성하는 단계와,
상기 트리 표시의 각 노드에 대하여, 노드가 표시하는 프리미티브들의 서브 세트를 나타내는 데이터, 노드가 표시하는 프리미티브들의 서브 세트의 프리미티브들이 사용하는 버텍스들을 나타내는 데이터, 및 노드가 표시하는 프리미티브들의 서브 세트가 내부에 있는 공간의 용적을 나타내는 데이터를 생성하여 저장하는 단계와,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 생성된 트리 표시를 순회해서 상기 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하는 단계 및
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 출력 프레임에 대해 상기 생성된 트리 표시를 순회해서 결정된 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 렌더링하는 단계를 포함한다.
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 생성된 트리 표시를 순회해서 상기 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하는 단계 및
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 출력 프레임에 대해 상기 생성된 트리 표시를 순회해서 결정된 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 렌더링하는 단계를 포함한다.
본 발명의 제2 국면에 의하면, 그래픽 처리 시스템에서 출력용 프레임에 대해 렌더링될 복수의 프리미티브들의 세트를 처리하는 장치가 제공되고, 상기 프리미티브들의 세트 내의 각 프리미티브는 한 개 이상의 버텍스와 관련되어 있으며, 상기 장치는
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 상기 프리미티브들의 세트를 프리미티브들의 복수의 서브 세트들로 분할하고,
상기 프리미티브들의 서브 세트가 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 트리의 리프 노드들에 할당되고, 상기 프리미티브들의 세트가 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 분할된 서브 세트들 중 하나를 트리의 각 리프 노드가 표시하고, 트리의 각 부모 노드가 그 자식 노드들의 모두의 프리미티브들의 서브 세트들의 조합에 대응하는 프리미티브들의 서브 세트를 표시하도록 구성되는, 상기 프리미티브들의 세트를 표시하기 위한 트리 표시를 생성하며,
상기 트리 표시의 각 노드에 대하여, 노드가 표시하는 프리미티브들의 서브 세트를 나타내는 데이터, 노드가 표시하는 프리미티브들의 서브 세트의 프리미티브들이 사용하는 버텍스들을 나타내는 데이터, 및 노드가 표시하는 프리미티브들의 서브 세트가 내부에 있는 공간의 용적을 나타내는 데이터를 생성하여 저장하고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 생성된 트리 표시를 순회해서 상기 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 출력 프레임에 대해 상기 생성된 트리 표시를 순회해서 결정된 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 렌더링하도록
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 생성된 트리 표시를 순회해서 상기 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 출력 프레임에 대해 상기 생성된 트리 표시를 순회해서 결정된 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 렌더링하도록
구성된 처리 회로를 구비한다.
본 발명의 제3 국면에 의하면, 그래픽 처리 시스템에서 출력용 프레임에 대해 처리될 복수의 프리미티브들의 세트를 표시하는 데이터 구조가 제공되고, 상기 프리미티브들의 세트 내의 각 프리미티브는 한 개 이상의 버텍스와 관련되어 있으며, 상기 데이터 구조는,
상기 복수의 프리미티브들의 세트를 표시하는 트리 표시를 표시하는 데이터를 구비하고,
상기 데이터가 표시하는 상기 트리 표시는, 상기 프리미티브들의 세트가 분리되었던 프리미티브들의 복수의 서브 세트들 중 하나를 트리의 각 리프 노드가 표시하고, 트리의 각 부모 노드가 그 자식 노드들의 모두의 프리미티브들의 서브 세트들의 조합에 대응하는 프리미티브들의 서브 세트를 표시하도록 구성되며,
상기 트리 표시의 각 노드에 대해 저장되는 데이터는,
노드가 표시하는 프리미티브들의 서브 세트;
노드가 표시하는 프리미티브들의 서브 세트의 프리미티브들이 사용하는 버텍스들; 및
노드가 표시하는 프리미티브들의 서브 세트가 내부에 있는 공간의 용적을 나타낸다.
본 발명에 있어서는, 그래픽 처리 시스템에서 출력 프레임을 생성할 때 렌더링될 프리미티브들의 세트를 처리해서 프리미티브들의 세트를 표시하는 트리 표시를 생성하고, 트리의 각각의 노드들은 프리미티브들의 세트 내의 프리미티브들의 각각의 서브 세트들을 표시한다. 각 노드에 대해서, 프리미티브들의 서브 세트 및 이들 프리미티브들과 관련된 대응하는 버텍스를 식별해서 표시한다.
추가로 이하에 설명하는 것처럼, 그러한 트리 구조를 이용해서 프리미티들의 세트를 표시하는 것이, 실제로 출력 프레임을 렌더링할 때 처리될 필요가 없는, 프리미티브들의 세트 내의 프리미티브들과, 프리미티브들의 세트 내의 프리미티브들과 관련된 버텍스들을 좀더 효율적으로 식별하는 것을 용이하게 함으로써, 프리미티브들의 세트를 렌더링할 때의 처리 부담을 줄인다. 특히, 공지된 기술에 대하여는, 그 중에서도, 본 발명의 트리 표시를 이용해서, 프리미티브들이 뷰 프러스텀 밖에 있으면 프리미티브들이 추가로 처리되는 것을 거절할 뿐만 아니라, 프리미티브들이 뷰 프러스텀 밖에 있으면 버텍스들의 처리도 효율적으로 피할 수 있다(예를 들면, 상당한 버텍스 처리가 발생하기 전에, 감소된 또는 최소의 처리될 버텍스들의 리스트가 구축되는 것을 가능하게 할 수 있다). 이것은 출력 프레임을 렌더링할 때, 밴드폭, 전력 등의 상당한 절약을 제공할 수 있고, 따라서 동력이 작은 기기 및/또는 휴대기기에 사용하기 위한 그래픽 처리 시스템에서 특히 유리하다.
또한, 이하에 추가로 설명하는 것처럼, 본 발명은, 렌더링을 필요로 하는 어플리케이션(예를 들면)으로부터 어떤 "도움" 또는 "입력" 없이 동작할 수 있다(바람직하게는 동작한다). 그러면, 이것은 어플리케이션 프로그래머가 (예를 들면) 그들의 어플리케이션을 구성하여 뷰 프러스텀 밖에 있는 프리미티브들 및/또는 버텍스들의 처리를 (예를 들면) 피하려고 하는 어떤 요구든 제거한다.
본 발명에서 렌더링되는 출력용 프레임은 그래픽 처리 시스템에 의해 생성되는 어떤 적절한 원하는 출력 프레임일 수 있다. 하나의 바람직한 실시예에 있어서는, 그것은 (예를 들면, 스크린 상에 또는 프린터를 통해서) 표시하기 위한 출력 프레임이지만, 마찬가지로 그래픽 처리 시스템을 이용해서 (예를 들면, 렌더-텍스처 프로세스에서) 텍스처 등을 생성할 수 있는 어떤 다른 형태의 출력, 또는 어떤 다른 형태의 출력 데이터 어레이일 수 있다.
프리미티브들의 세트는 출력 프레임을 생성하기 위해서 처리되는 어떤 적절한 프리미티브들의 세트일 수도 있다. 그것은 어떤 원하는 적절한 개수의 프리미티브를 포함할 수도 있다. 바람직한 실시예에 있어서는, 그것은 몇천 개 또는 몇만 개(예를 들면, 20,000)의 프리미티브를 구비한다. 세트 내의 프리미티브들은 자기가 원하는 렌더링 순서로 리스트에 기록되는 것이 바람직하다. 프리미티브들의 세트 내의 각 프리미티브는 프리미티브를 식별하기 위해서 사용될 수 있는 관련 인덱스 값을 갖질 수도 있고, 본 실시예에 있어서는 갖는다. 프리미티브 인덱스 값들은 프리미티브들의 세트에 대한 렌더링 순서로 프리미티브들의 위치에 대응하여, 그 위치를 표시하는 것이 바람직하다(이렇게 함으로써 프리미티브들이 (예를 들면, 로우(low)에서 하이(high)로) 자신의 렌더링 순서로 인덱싱되는 것이 바람직하다).
프리미티브들의 세트는 출력 프레임을 생성하기 위해서 처리되는 모든 프리미티브를 구비할 수도 있지만, 바람직한 실시예에 있어서는 출력 프레임을 생성하기 위해서 처리될 프리미티브들의 전부가 아니라 일부를 구비한다. 이 후자의 경우에는, 프리미티브들의 세트는 프레임에 대한 프리미티브들의 특정한 식별가능한 세트, 예를 들면, 바람직하게는 프레임용 특정한 드로우 콜(draw call)에 대한 프리미티브들의 세트를 구비하는 것이 바람직하다. 이렇게 함으로써, 하나의 바람직한 실시예에 있어서는, 프리미티브들의 세트가 출력 프레임용 드로우 콜에 대한 프리미티브들의 세트를 구비한다.
프리미티브들의 세트가 출력 프레임에 대한 모든 프리미티브를 구비하지 않는 경우(즉, 출력 프레임에 대해 처리될 프리미티브들(예를 들면 드로우 콜)의 세트가 복수 있다), 본 발명의 프로세스는 출력 프레임에 대한 프리미티브들(예를 들면 드로우 콜)의 복수의 세트들에 대해서 행해지는 것이 바람직하다(그리고 출력 프레임의 프리미티브들(예를 들면, 드로우 콜)의 각 세트에 대해서 반복되는 것이 바람직하다).
프리미티브들의 복수의 세트들이 본 발명의 방식으로 처리되고 있는 경우, 바람직한 실시예에 있어서는, 프리미티브들의 하나의 세트에 대해서 생성된 데이터는, (그렇게 하는 것이 적절하고 (어쩌면) 유용한 경우) 프리미티브들의 또 다른 (예를 들면, 다음의) 세트와 사용하기 위해서 보유될 수 있고, 바람직하게는 보유된다(예를 들면, 캐시에 저장되는 것이 바람직하다).
프리미티브들의 세트는 어떤 적절한 원하는 방식으로 프리미티브들의 복수의 서브 세트들로 분할될 수 있다. 바람직하게는, 프리미티브들의 세트는 같은 서브 세트들로 분할된다. 이렇게 함으로써 각 서브 세트가 동일한 또는 비슷한 개수의 프리미티브들을 포함하는 것이 바람직하다.
바람직한 실시예에 있어서는, 프리미티브들의 세트 내의 프리미티브들은 자기들의 렌더링 순서에 근거해 프리미티브들의 서브 세트들로 분할된다. 이것을 근거로 프리미티브들의 세트를 세분하는 것은, 프리미티브들을 노드들에 할당할 때 프리미티브들의 공간적 분포를 고려해야 할 필요성을 회피하고, 이렇게 함으로써 비교적 빠른 저렴한 방식으로 수행될 수 있다.
프리미티브들이 관련된 인덱스들을 갖는 경우, 그에 따라 프리미티브들의 세트가 프리미티브들의 인덱스 값들에 근거해 서브 세트들로 분할되는 것이 바람직하다. 이 경우, 프리미티브들의 세트에 대한 인덱스 값들의 범위는 인덱스 값들의 복수, 바람직하게는 같은 서브 범위들로 분할되는 것이 바람직하고, 프리미티브들의 각 서브 세트는 프리미티브 인덱스 값들의 각각의 서브 범위에 대응한다.
프리미티브들의 각 서브 세트는 어떤 원하는 개수의 프리미티브를 포함할 수 있지만, 바람직한 실시예에 있어서는, 프리미티브들의 각 서브 세트가, (프리미티브 인덱스들의) 프리미티브들의 선택된, 바람직하게는 미리 결정된 임계 개수 이상의 프리미티브, 예를 들면 바람직하게는 128개의 프리미티브를 포함하지 않도록 (어떤 다른 제약에 따라) 세분이 행해진다. 따라서, 프리미티브들의 서브 세트들의 개수는 많은 서브 세트들을 포함하는 것이 바람직하고, 프리미티브들의 세트는, 각 서브 세트가 임계 개수의 프리미티브보다 적은 프리미티브를 갖게 하기 위해서 상기의 많은 서브 세트들로 분할되어야 한다.
프리미티브 세트 세분 프로세스는 또한 프리미티브들의 서브 세트들의 총 개수가 선택된, 바람직하게는 미리 결정된 임계 개수의 서브 세트, 예를 들면 256개의 서브 세트를 초과하지 않는다는 제약을 받는 것이 바람직하다. 이 제약은 우선권을 얻음으로써, 임계 개수의 서브 세트가 초과하게 되면, 임계 개수의 서브 세트가 초과하지 않게 될 (초과하지 않을) 때까지 서브 세트당 허용된 프리미티의 개수가 증가된다.
프리미티브들의 세트를 세분하는 다른 방식도 원한다면 가능할 것이다.
일단 프리미티브들의 세트가 프리미티브들의 복수의 서브 세트들로 분할되었다면, 프리미티브들의 세트의 트리 표시가 생성되고, 트리의 각 리프 노드는, 프리미티브들의 세트가 분할되었던 각각의 서브 세트에 대응한다(이렇게 함으로써 프리미티브들의 서브 세트들이 있기 때문에 같은 개수의 리프 노드들이 있을 것이다).
프리미티브들의 서브 세트들은 어떤 원하는 적절한 방식으로 각각의 리프 노드에 할당될 수 있다. 바람직한 실시예에 있어서는, 프리미티브 서브 세트들은 (원하는) 프리미티브 렌더링 순서를 유지(보존)하는 것을 용이하게 하는 방식으로 리프 노드들에 할당된다. (본 기술에 알려진 것처럼, 많은 경우에 있어서는 그래픽 처리를 필요로 하는 어플리케이션에 의해 지정된 프리미티브 렌더링 순서가 프리미티브들을 렌더링할 때 유지되도록 요구된다. 따라서, 본 발명은 이것을 달성하도록 구성되는 것이 바람직하다).
이것은 원하는 대로 달성될 수도 있지만, 바람직한 실시예에 있어서는, 트리의 하나의 에지에 있는 리프 노드로부터 트리의 다른 에지에 있는 리프 노드로(그래서 왼쪽에서 오른쪽으로, 혹은 오른쪽에서 왼쪽으로), 프리미티브들의 인덱스들의 순서로 프리미티브 서브 노드들을 리프 노드들에 할당함으로써 달성된다. 원한 렌더링 순서를 보존(재생)하는 것을 용이하게 하는 다른 방식도 원한다면 사용될 수 있다.
리프 노드들은 각각 프리미티브들의 세트가 분할되었던 특정한 서브 세트를 나타낸다. 트리 내의 각 높은 노드는 그 자식 노드들의 각각이 표시하는 프리미티브들의 서브 세트들의 조합을 나타낸다. 이렇게 함으로써, 예를 들면, 2개의 리프 노드를 그 자식 노드로서 갖는 부모 노드는 2개의 자식 리프 노드가 표시하는 프리미티브들의 2개의 서브 세트의 조합을 나타낼 것이다. 이것은 각 높은 노드에 대하여 트리 노드를 (트리의 루트 노드는 문제의 프리미티브들의 전체 세트를 나타내도록) 반복한다.
트리의 각 노드는 어떤 원하는 적절한 개수의 자식 노드를 가질 수도 있다. 바람직한 실시예에 있어서는, 트리 구조는 균형이 잡혀있고 및/또는 대칭적이다. 바람직하게는 각 부모 노드는 2개의 자식 노드를 갖는다.
바람직한 실시예에 있어서는, 트리 구조는 리프 노드의 두 수의 거듭제곱을 갖는다.
트리 구조에 대한 다른 방식도 원한다면 가능할 것이다.
트리 표시의 각 노드에 대해서는, 노드가 표시하는 프리미티브들의 서브 세트; 프리미티브들의 서브 세트와 관련된 버텍스들; 및 프리미티브들의 서브 세트가 내부에 있는 공간의 영역을 나타내는 데이터가 저장된다. 다른 데이터는 또한 원한다면 노드에 대해 및/또는 각 노드에 대해 저장될 수 있다.
노드가 표시하는 프리미티브들의 서브 세트를 나타내는 데이터는 어떤 적절한 원하는 형태를 취할 수 있다. 그것은 (서브 세트가 포함하는) 프리미티브 서브 세트에 대해서, 프리미티브들의 범위, 및 바람직하게는 프리미티브 위치의 범위(바람직하게는 프리미티브 인덱스들의 범위)를 나타내는 것이 바람직하다. 바람직하게는, 데이터는 문제의 노드에 대하여, 프리미티브들의 서브 세트 내의 프리미티브들의 개수 및 서브 세트(에 대한 예를 들면, 시작 인덱스)에 대한 시작 위치(프리미티브 시퀀스에서)를 나타낸다. 다른 방식도 물론 원한다면 가능할 것이다.
노드에 대한 프리미티브들이 사용하는 버텍스들을 나타내는 데이터는 마찬가지로 어떤 원하는 적절한 형태를 취할 수 있다. 각 프리미티브는 관련된 버텍스들의 세트를 가질 것이고, 버텍스들은, 또한 각 개개의 버텍스들을 식별할 수 있도록 인덱스되는 것이 바람직하다. 이렇게 함으로써, 각 버텍스는 버텍스를 식별하는 관련 인덱스를 갖는 것이 바람직하다. 버텍스 인덱싱은 프리미티브 인덱싱과 동일할 필요는 없고, 일반적으로 동일하지 않을 것이며, 2개(이상의) 프리미티브는 원한다면 버텍스들을 공유할 수도 있다.
하나의 바람직한 실시예에 있어서는, 노드에 대한 프리미티브들의 서브 세트와 관련된 버텍스들을 나타내는 데이터는, 프리미티브들의 세트와 관련된 각 버텍스에 대해, 버텍스가 노드에 대한 프리미티브들의 서브 세트와 관련되어 있는지 아닌지 여부를 나타낸다. 예를 들면, 바람직하게는, 각 노드는 (프리미티브들의 세트에 대한) 모든 버텍스들을 표시하는 비트 맵(비트 필드)과 관련되어 있을 수 있고, 버텍스 비트 맵 내의 비트들은, 그에 따라 버텍스들 중의 어느 것이 문제의 노드와 관련되어 있는 프리미티브들과 관련되어 있는지를 나타내도록 설정되어 있다.
또 다른 바람직한 실시예에 있어서는, 각 노드는 노드와 관련되어 있는 버텍스들(의 인덱스들)을 나타내는 1개 이상의 버텍스 인덱스 범위들과 관련되어 있다. 버텍스 인덱스들의 범위를 이용하면 프리미티브들의 세트에 대한 트리 표시를 구축하는 비용을 감소시킬 수도 있고, 각 노드에 대한 버텍스 비트 맵을 저장하는 것보다 더 적은 데이터를 요구할 수도 있다.
이 경우, (예를 들면, 바람직하게는 노드와 관련되어 있지 않은 버텍스 인덱스들(버텍스들)의 "갭"에 의해 (각각) 분리되는) 노드에 대해 저장된 단일의 버텍스 인덱스 범위가 있을 수도 있고, 또는 복수의 버텍스 인덱스 범위가 있을 수도 있다.
바람직한 실시예에 있어서는, 사용되는 버텍스 인덱스 범위의 개수는 버텍스 인덱스 범위를 생성하기 위한 상대적 비용 또는 오버헤드와, 버텍스 인덱스 범위 내에 포함되어 있지만 실제로는 노드가 표시하는 프리미티브들의 서브 세트 내의 프리미티브와 관련되어 있지 않은 버텍스들을 불필요하게 처리하는 상대적 비용에 근거하는 것이 바람직하다(이들 버텍스의 처리는 실제로는 필요하지 않을 것이고, 그래서 버텍스들을 그 영역에 대한 노드로부터 제외하는 것이 바람직할 것이다). 이것은 노드에 대한 더 많은 버텍스 인덱스 범위를 생성하여 저장하는 것은 비용이 많이 들 수도 있지만, 역으로 프리미티브들의 세트를 렌더링할 때 행해지는 불필요한 버텍스 처리량을 줄일 수도 있는 사실을 반영한다.
바람직한 실시예에 있어서는, (버텍스 인덱스 순서로) 프리미티브들의 서브 세트 내의 프리미티브에 대한 버텍스용 한 개의 버텍스 인덱스와 프리미티브들의 서브 세트 내의 프리미티브에 대한 다음 버텍스 인덱스 간의 간격(인덱스의 개수(인덱스 카운트))이 특정한, 바람직하게는 미리 결정된 임계값을 넘으면, 새로운 버텍스 인덱스 범위가 프리미티브들의 서브 세트에 대한 다음(사용된) 버텍스 인덱스에서 시작(저장)된다. 반대로, 프리미티브들의 서브 세트 내의 프리미티브에 대한 버텍스용 한 개의 버텍스 인덱스와 프리미티브들의 서브 세트 내의 프리미티브에 대한 다음 버텍스 인덱스 간의 간격(인덱스의 개수(인덱스 카운트))이 특정한, 바람직하게는 미리 결정된 임계값을 넘지 않으면, 양쪽 인덱스를 포함하는 단일 범위(스레숄드 간격을 넘지 않는 이들 인덱스의 양측에 어떤 다른 인덱스))가 사용된다.
즉, 2개의 별개의 버텍스 인덱스 범위를 사용하는 것에 의해 선택된 임계 개수의 버텍스(버텍스 인덱스)보다 적게 또는 그 보다 적거나 같게 스킵하면, 단일의 연속하는 버텍스 인덱스 범위는 2개의 별개의 버텍스 인덱스 범위 대신에 사용되는 것이 바람직하지만, 2개의 별개의 버텍스 인덱스 범위를 사용하는 것에 의해 선택된 임계 개수의 버텍스(버텍스 인덱스)보다 많이 스킵하면, 2개의 별개의 버텍스 인덱스 범위가 단일의 연속하는 버텍스 인덱스 범위 대신에 사용되는 것이 바람직하다.
이와 같이, 바람직한 실시예에 있어서는, 노드에 대해서 사용하기 위한 버텍스 인덱스 범위의 개수는 노드에 대해서 사용될 수 있는 각각의 버텍스 인덱스 범위 간의 간격으로 있는 버텍스의 개수(버텍스 인덱스의 개수)(즉, 좀더 작은 범위(버텍스 인덱스들 간의 간격(갭))을 포함하는 좀더 큰 버텍스 인덱스의 범위 대신에 (일정한 간격으로 떨어져 있는) 좀더 작은 버텍스 인덱스의 범위를 이용함으로써 스킵되는 버텍스의 개수)에 근거한다.
이 프로세스는 버텍스 인덱스 범위를 문제의 노드와 관련되어 있는 한 개 이상의 버텍스 인덱스 범위로 세분하도록(혹은 세분하지 않도록), 프리미티브들의 서브 세트 내의 프리미티브들과 관련된 버텍스들이 포괄(span)하는 버텍스 인덱스 범위 전체에 걸쳐 고려(반독)되는 것이 바람직하다.
바람직한 실시예에 있어서는, 새로운 범위(의 사용)의 시작을 촉발시키는 버텍스의 임계 개수(버텍스 인덱스 카운트)는 새로운 범위를 시작하는 하드웨어 비용에 근거한다.
물론 다른 방식도 가능할 것이다.
버텍스 인덱스 범위들이 노드와 관련되어 있는 경우, 노드에 대한 버텍스 인덱스 범위들을 나타내는 데이터는 어떤 원하는 적절한 형태를 취할 수 있다. 바람직한 실시 예에 있어서는, 버텍스 인덱스 범위들의 개수를 나타내는 데이터와, 각 범위에 대해서, 그 범위에 대한 시작 및 종료(최소 및 최대) 버텍스 인덱스 값들을 나타내는 데이터가 생성되어 저장된다.
노드에 대한 프리미티브들의 서브 세트가 내부에 있는 공간의 용적을 나타내는 데이터는 마찬가지로 어떤 원하는 적절한 형태를 취할 수 있다. 이 데이터는 노드에 대한 프리미티브들의 서브 세트가 내부에 있는, 오브젝트(object)를 정의하는 오브젝트 공간의 용적을 표시해야 하고, 바람직하게는 그 용적을 나타낸다.
바람직한 실시예에 있어서는, 용적을 나타내는 데이터는 프리미티브들의 서브 세트 내의 모든 프리미티브들을 포함하는 바운딩 볼륨(bounding volume)을 나타낸다. 바람직하게는, 축 정렬된(axis aligned) 바운딩 볼륨이 결정되어 저장된다. 가장 바람직하게는, 노드가 포함하는 모든 버텍스에 대한 각 축 방향(예를 들면, x, y, z)에 있어서의 최소 및 최대 값들은 노드가 관련되어 있는(포함하는) 공간의 영역을 표시하는 것으로서 결정되어 저장된다. 다른, 예를 들면 좀더 정교한 형태의 바운딩 볼륨이 원한다면 사용될 수 있다.
프리미티브들의 세트에 대한 트리 표시는 어떤 원하는 적절한 방식으로 (그것에 대한 데이터가 생성) 구축될 수 있다. 바람직한 실시예에 있어서는, 리프 노드들이 맨 먼저 문제의 리프 노드에 대한 프리미티브들의 각각의 서브 세트에 대한 데이터를 이용해서 구축되고, (각각의) 더 높은 레벨 노드(바람직하게는 루트 노드를 포함한다)는 그 각각의 자식 노드들로부터 (그 각각의 자식 노드들을 "병합"함으로써) 구축된다. 이렇게 함으로써, 바람직한 실시예에 있어서는, "부모" 노드에 대한 데이터가 (적절한 방식으로) 그 자식 노드들로부터 데이터 결합 또는 병합함으로써 결정된다. 그들 각각의 자식 노드들로부터 더 높은 레벨 노드들(부모 노드들)을 "구성"하는 것은 요구되는 "원시(raw)" 데이터 이상의 패스(passes)의 개수를 최소화하는 것을 돕는다.
2개(이상의) 자식 노드를 병합할 때, 그 병합은 더 높은 레벨 (부모) 노드에 대한 "병합된" 데이터의 세트를 제공하도록 어떤 적절한 원하는 방식으로 행해질 수 있다. 이렇게 함으로써, 예를 들면, 노드가 표시하는 프리미티브들의 서브 세트의 경우에는, 자식 노드들에 대한 프리미티브 서브 세트들(예를 들면, 인덱스 범위들)이 부모 노드에 대한 (좀더 큰) 프리미티브 서브 세트(예를 들면, 인덱스 범위)를 제공하도록 결합되는 것이 바람직하다.
부모 노드와 관련되는 버텍스들의 경우에, 자식 노드들이 자기들과 관련된 버텍스 인덱스 비트 맵들을 가지고 있으면, 자식 노드 비트 맵들은 부모 노드에 대한 버텍스 인덱스 비트 맵을 제공하도록 함께 OR될 수 있고, 바람직하게는 OR된다.
자식 노드들이 자기들과 관련된 버텍스 인덱스 범위들을 갖는 경우에는, 부모 노드가 간단히 자기와 관련된 자식 노드들의 버텍스 인덱스 범위들을 가질 수 있다. 그렇지만, 바람직한 실시예에 있어서는, 자식 노드들에 대한 버텍스 인덱스 범위들은 부모 노드에 대한 새로운 범위들로 (선택적으로) 병합되는 것이 바람직하다(그렇게 하는 것이 적절한 경우). 이 경우, 2개의 자식 노드 버텍스 인덱스 범위가 겹치거나, (상술한 바와 같이) 버텍스 인덱스의 임계 개수보다 적게 혹은 같게 분리되면, 2개의 자식 노드 버텍스 인덱스 범위는 부모 노드에 대한 단일의 결합된 버텍스 인덱스 범위로 병합(결합)되는 것이 바람직하다. 이것은 자식 노드들의 모든 버텍스 인덱스 범위 전체에 걸쳐서 반복되는 것이 바람직하다.
프리미티브들의 서브 세트가 내부에 있는 영역을 나타내는 데이터가 관련되어 있는 한, 더 높은 레벨 노드에 대한 영역이 문제의 자식 노드들에 대한 각각의 영역(예를 들면, 바운딩 볼륨)으로부터 결정되는 것이 바람직하다. 예를 들면, 자식 노드들의 모든 바운딩 볼륨을 전부 포함하는 부모 노드에 대한 바운딩 볼륨이 결정될 수 있다(하나의 바람직한 실시예에 있어서는 이것이 행해진다). 이 경우, 부모 노드에 대한 바운딩 볼륨이 모든 부모 노드들의 자식 노드들 전체에 걸쳐 각 축을 따라 최소 및 최대 버텍스 위치 값을 취함으로써 생성될 수 있고 바람직하게는 생성되고 있다.
좀더 정교한 방식, 예를 들면 좀더 정교한 형태의 바운딩 볼륨이 사용되거나 요망될 수 있다. 예를 들면, 부모 노드에 대한 자식 노드들의 별개의 바운딩 볼륨을 보유하거나, 원한다면, 부모 노드에 대한 자식 노드 바운딩 볼륨 전부가 아닌 일부만을 병합하는 것도 가능할 것이다. 이것은 예를 들면, 자식 노드들의 바운딩 볼륨이 전혀 겹치지 않는 경우에 적합할 수 있다.
본 발명은 처리되어야 하는 프리미티브들(예를 들면, 드로우 콜)의 각 세트 및 모든 세트에 대해서 사용될 수 있지만, 본 출원인은 보통의 방식으로 간단히 프리미티브들의 세트를 처리하는 것보다는, 본 발명의 프로세스를 수행하는 것이 덜 바람직한 상황이 있을 수도 있다는 것을 인식했다. 이것은 예를 들면, 트리 구조를 준비해서 이용하는 비용이, 그것에 의해 달성되는 버텍스 처리의 감소보다 더 중요하지 않을 수도 있는 상황의 경우일 수 있다.
이와 같이, 바람직한 실시 예에 있어서는, 본 발명은 선택된 프리미티브들의 세트에 대해서만 사용되고, 프리미티브들의 세트에 대하여 본 발명을 이용하기 전에 프리미티브들(예를 들면, 드로우콜)의 세트에 대하여 본 발명을 이용할지 여부를 결정하는 것이 바람직하다.
그러한 바람직한 실시 예에 있어서는, 본 발명의 프로세스를 이용할지 여부를 결정하는 기준은 프리미티브들의 세트의 공간적 코히런시(spatial coherency)이다. 이와 같이, 프리미티브들의 세트의 공간적 코히런시의 척도(measure)를 결정하는 것이 바람직하고, 공간적 코히런시가 스레숄드 공간적 코히런시 척도(threshold spatial coherency measure)보다 아래(혹은 같거나 아래)에 있다고 결정되면, 본 발명의 프로세스는 프리미티브들의 세트에 대해서 사용되지 않는다. 이것은 낮은 공간적 코히런시를 갖는 프리미티브들의 세트들에 대해 본 발명을 이용하는 것이 프리미티브들의 세트의 "정상" 처리를 통해서 많은 혜택을 제공하지 않을 수도 있다는 사실을 고려한다.
이 경우 프리미티브들의 세트의 어떤 원하는 공간적 코히런시의 측정치든 사용할 수 있다. 각 노드에 대한 참된 공간적 지역을 측정하는 예상되는 비용의 관점에서, 이 목적을 위해서 프리미티브들의 세트의 공간적 코히런시의 추정치를 사용하는 것이 바람직하다.
그러한 어떤 적절한 추정치든 사용할 수 있지만, 바람직한 실시예에 있어서는, 평균 버텍스 인덱스 간격(프리미티브들의 세트에 대한 계속되는 버텍스들 간의 버텍스 개수)이 프리미티브들의 세트의 공간적 코히런시의 측정치로서 결정되어 사용된다. 그러면, 이 평균 버텍스 인덱스 간격(거리)이 임계값을 넘으면(혹은 같거나 넘으면), 프리미티브들의 세트가 공간적으로 일관성이 없다고 여겨지므로, 본 발명의 프로세스가 사용되지 않는다. 본 출원인은 이 점에서 프리미티브들의 세트에 대해 사용된 버텍스들 간의 평균 인덱스 거리가 문제의 프리미티브들의 세트의 공간적 코히런시의 지표로서 사용될 수 있고(왜냐하면, 렌더링될 오브젝트가 그 다음에 가장 가까운 하나의 일반적인 순서로 인덱스될 가능성이 높기 때문이다), 또한, 프리미티브들의 세트의 공간적 코히런시를 추정하기 위한 비교적 빠른 저비용 메카니즘을 제공할 수 있다고 인식했다.
프리미티브들의 세트에 대해 본 발명의 프로세스를 사용하지 않는다고 결정된 경우에는, 프리미티브들의 세트가 간단히 문제의 그래픽 처리 시스템에 대한 통상적인 방식으로 처리되는 것이 바람직하다(즉, 본 발명의 프로세스는 생략 또는 우회된다).
상기는 렌더링될 프리미티브들의 세트에 대한 트리 표시를 생성하는 프로세스에 대해서 설명한다. 본 발명은 또한 트리 표시를 이용해서 프리미티브들의 세트를 렌더링하여 출력 프레임을 생성할 때 프리미티브들의 세트에 대해 처리될 프리미티브들 및 버텍스들을 결정(식별)하는 이용하는 것에도 확장된다.
이와 같이, 특히 바람직한 실시예에 있어서, 본 발명의 방법은 트리 표시(에 대한 데이터)를 이용해서 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 처리될 프리미티브들의 세트 및 버텍스들의 세트를 결정하는 것을 더 포함하고, 본 발명의 장치는 추가로 트리 표시(에 대한 데이터)를 이용해서 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 처리될 프리미티브들의 세트 및 버텍스들의 세트를 결정하도록 구성된다.
상대적으로, 본 발명의 또 다른 국면에 의하면, 그래픽 처리 시스템에서 출력 프레임에 대해 렌더링될 복수의 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하는 방법이 제공되고, 이 방법은,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 복수의 프리미티브들의 세트를 표시하는 트리 표시를 순회해서 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하는 단계 및
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 출력 프레임에 대해 상기 트리 표시를 순회해서 결정된 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 렌더링하는 단계를 포함하고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 출력 프레임에 대해 상기 트리 표시를 순회해서 결정된 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 렌더링하는 단계를 포함하고,
상기 트리 표시는, 프리미티브들의 세트가 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 분할된 프리미티브들의 복수의 서브 세트들 중 하나를 트리의 각 리프 노드가 나타내고, 트리의 각 부모 노드가 그 자식 노드들 모두의 프리미티브들의 서브 세트들의 결합에 대응하는 프리미티브들의 서브 세트를 표시하고, 상기 프리미티브들의 서브 세트들이 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 트리의 리프 노드들에 할당되도록 구성되며,
노드가 표시하는 프리미티브들의 서브 세트; 노드가 표시하는 프리미티브들의 서브 세트 내의 프리미티브들이 사용하는 버텍스들; 및 노드가 나타내는 프리미티브들의 서브 세트가 내부에 있는 공간의 용적을 나타내는 상기 트리 표시의 각 노드에 대하여 데이터가 저장된다.
본 발명의 추가 국면에 의하면, 그래픽 처리 시스템에서 출력용 프레임에 대해 렌더링될 복수의 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하는 장치가 제공되고, 상기 장치는,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 복수의 프리미티브들의 세트를 표시하는 트리 표시를 순회해서 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 출력 프레임에 대해 상기 트리 표시를 순회해서 결정된 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 렌더링하도록 구성된 처리회로를 구비하고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 출력 프레임에 대해 상기 트리 표시를 순회해서 결정된 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 렌더링하도록 구성된 처리회로를 구비하고,
상기 트리 표시는, 프리미티브들의 세트가 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 분할된 프리미티브들의 복수의 서브 세트들 중 하나를 트리의 각 리프 노드가 나타내고, 트리의 각 부모 노드가 그 자식 노드들 모두의 프리미티브들의 서브 세트들의 결합에 대응하는 프리미티브들의 서브 세트를 표시하고, 상기 프리미티브들의 서브 세트들이 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 트리의 리프 노드들에 할당되도록 구성되며,
노드가 표시하는 프리미티브들의 서브 세트; 노드가 표시하는 프리미티브들의 서브 세트 내의 프리미티브들이 사용하는 버텍스들; 및 노드가 나타내는 프리미티브들의 서브 세트가 내부에 있는 공간의 용적을 나타내는 상기 트리 표시의 각 노드에 대하여 데이터가 저장된다.
본 기술에 속하는 당업자가 알 수 있는 것처럼, 본 발명의 이들 국면 및 실시 예들은 여기서 기술된 본 발명의 바람직한 선택적 특징들의 한 개 이상 또는 모두를 적절히 포함할 수 있고, 바람직하게는 포함한다. 이렇게 함으로써, 예를 들면 트리 표시 및 트리의 노드들에 대해 저장된 데이터가 상기 설명한 형태를 갖는 것이 바람직하다.
트리 표시를 이용해서 어떤 원하는 적절한 방식으로 프리미티브들의 세트에 대해서 처리될 프리미티브들 및 버텍스들을 결정할 수 있다. 바람직하게는 루트 노드에서 시작해서 리프 노드들을 향해서 아래로 작동되는, 트리의 노드들을 고려해서 차례로 처리될 프리미티브들 및 버텍스들을 결정하기 위해서 트리 표시를 이용하는 것이 바람직하다.
트리의 노드가 고려될 경우에, 생성되고 있는 출력 프레임에 대한 뷰 프러스텀에 대해서 테스트되는 것이 바람직하다. 가장 바람직하게는, 노드에 대한 프리미티브들의 서브 세트가 내부에 있다고 표시되어 있는 공간의 볼륨(영역)은, 그 볼륨(영역)의 어느 것이든 뷰 프러스텀 내에 있는지 아닌지를 결정하기 위해서 뷰 프러스텀에 대해서 테스트된다. 이렇게 함으로써, 바람직한 실시 예에 있어서는, 노드에 대한 바운딩 볼륨은, 바운딩 볼륨의 어떤 부분이 뷰 프러스텀 내부에 있는지를 결정하기 위해서, 렌더링되고 있는 프레임에 대한 뷰 프러스텀에 대해서 테스트된다. 이 뷰 프러스텀 테스트는, 예를 들면, 바람직하게는 바운딩 볼륨-뷰 프러스텀 교차점 테스트 등을 이용해서, 뷰 프러스텀에 대해서, 예를 들면 바운딩 볼륨을 클립핑(clipping)함으로써, 어떤 원하는 적절한 방식으로든 수행될 수 있다.
필요한 경우에는, 노드에 대한 바운딩 볼륨은 뷰 프러스텀에 대해서 테스트되기 전에 적절한 스크린 공간 위치로 변환될 수도 있다. 이것은 예를 들면, 버텍스 쉐이딩 프로세스의 일부로서 제공된 변환 행렬을 이용할 수도 있다. 대신, 본 출원인은 어떤 경우에 있어서는 그러한 변환 행렬이 존재하는 경우 단지 본 발명의 프로세스를 이용하는 것이 적절할 수도 있다는 것을 인식했다.
이와 같이, 바람직한 실시 예로서 프리미티브들의 세트에 적용되는 버텍스 쉐이더(vertex shader)(버텍스 쉐이딩 프로그램)(만약 있다면)가 버텍스들에 대한 변환을 이용해서 버텍스들을 스크린 공간으로 변환하는 경우가 결정되고, 만약 그렇게 되지 않는다면, 본 발명의 방법은 프리미티브들의 세트에 대해서 사용되지 않는다. 이것은 트리 표시의 노드에 대한 바운딩 볼륨에 변환이 적용될 필요가 있을 수도 있다는 사실을 고려해서 노드에 대한 프리미티브들의 서브 세트를 뷰 프러스텀에 대해서 테스트할 수 있다.
그러한 바람직한 실시예에 있어서는, 이 결정은 벡터에 대한 행렬 곱셈이 스크린 위치로서 저장되는 곳의 패턴을 인식하고, 만약 그렇다면 예를 들어 유효 변환 행렬이 존재한다는 것을 나타내는 메타데이터를 생성함으로써, 신호를 보내는, 버텍스 쉐이더 컴플라이어(vertex shader complier)에 의해 수행된다.
바람직한 실시예에 있어서는, 버텍스 쉐이더 컴플라이어는 (변환이 버텍스 쉐이더 내에 존재하는 경우) 스크린 공간 변환(변환 행렬)을 추출하여 노드 바운딩 볼륨 테스팅 프로세스에 제공하도록 (변환 행렬에 대한 액세스를 제공하도록) 구성된다.
이와 같이, 바람직한 실시예에 있어서는, 버텍스 쉐이더 컴플라이어는 프리미티브들(예를 들면, 드로우 콜)의 세트에 대한 버텍스 쉐이더 프로그램을 분석하여 본 발명의 프로세스가 사용되어야 하는지를 결정하고, 본 발명의 프로세스가 사용되어야 한다는 것이 결정되면, 뷰 프러스텀에 대해서 트리 표시의 노드에 대한 바운딩 볼륨을 테스트할 때 사용하기 위한 버텍스 쉐이더 프로그램(및 바람직하게는 버텍스에 적용될 변환)으로부터 정보를 추출하도록 구성된다.
뷰 프러스텀 테스트의 결과를 이용해서 처리될 프리미티브들의 세트 및 버텍스들의 세트 내에 노드에 대한 프리미티브들의 서브 세트 및 버텍스들의 세트를 포함하는지 여부를 결정하는 것이 바람직하다. 그것은 또한 혹은 대신에 트리의 순회(traversal)를 계속할지 여부 및 계속하는 방법을 결정하는 데 이용되는 것이 바람직하다.
가장 바람직하게는 노드가 뷰 프러스텀 테스트를 완전히 통과하면(즉, 그 바운딩 볼륨이 완전히 뷰 프러스텀 내에 있으면), 노드에 대한 프리미티브들의 서브 세트 및 버텍스들의 세트가 처리될 프리미티브들의 세트 및 버텍스들의 세트 내에(에 부가) 포함된다. 이 경우, 트리의 순회는 일반적으로 인정된 노드의 부모 노드에서 계속하는 (이렇게 함으로써 (만약 있다면) 여전히 테스트되어야 하는 부모 노드의 다음 자식 노드로 이동하는) 것이 바람직하다.
상대적으로, 노드가 뷰 프러스텀 테스트를 완전히 실패하면(즉, 그 바운딩 볼륨이 완전히 뷰 프러스텀 밖에 있으면), 노드에 대한 프리미티브들의 서브 세트 및 버텍스들의 세트가 처리될 프리미티브들의 세트 및 버텍스들의 세트 내에 (에 부가)포함되지 않는 것이 바람직하다. 트리의 순회는 거절된 노드의 부모 노드에서 계속하는 (이렇게 함으로써 (만약 있다면) 여전히 테스트되어야 하는 거절된 노드의 부모 노드의 다음 자식 노드로 이동하는) 것이 바람직하다.
(트리 표시의 본질은 테스트된 더 높은 레벨 노드가 모든 이들 더 낮은 레벨 노드에 대한 결과를 제공한다는 것을 의미하기 때문에, 뷰 프러스텀 테스트를 완전히 통과하거나 완전히 실패하는 것으로 알려진 노드 아래의 어떤 노드든 테스트할 필요가 없다.)
리프 노드가 아닌 노드가 부분적으로 뷰 프러스텀 테스트를 통과하면(예를 들면, 그 바운딩 볼륨이 뷰 프러스텀 내에 (완전히는 아니지만) 부분적으로만 있으면), 바람직하게는 노드에 대한 버텍스들의 세트 및 프리미티브들의 서브 세트가 그 단계에서 처리될 프리미티브들의 세트 및 버텍스들의 세트 내에 포함되지 않지만, 대신 트리의 순회는 (그들 스스로 테스트되는) 문제의 노드의 자식 노드들로 계속되는 것이 바람직하다.
이와 같이, 루트 노드의 경우에, 그 노드가 완전히 뷰 프러스텀 테스트를 통과하면, 프리미티브들의 전체 세트 및 그 관련된 버텍스들의 세트가 간단히 그들 전부 렌더링되는 것이 바람직하고, 루트 노드가 뷰 프러스텀 테스트를 실패하면, 프리미티브들의 전체 세트가 거절되어 추가로 처리되지 않는 것이 바람직하지만, 루트 노드가 단지 부분적으로 뷰 프러스텀 테스트를 통과하면, 트리는 루트 노드의 지식 노드들을 테스트하도록 순회되는 것이 바람직하다.
여전히 테스트되어야 하는 부모 노드의 더 이상의 자식 노드가 없으면, 순회는 문제의 부모 노드의 부모 노드에서 계속하는(이렇게 해서 (만약 있다면) 여전히 테스트되어야 하는 더 높은 레벨 부모 노드의 다음 자식 노드로 이동하는) 것이 바람직하다.
리프 노드가 적어도 부분적으로 뷰 프러스텀 테스트를 통과하는 것으로 발견되면(즉, 그 바운딩 볼륨이 적어도 부분적으로 뷰 프러스텀 내에 있으면), 이 리프 노드에 대한 프리미티브들의 서브 세트 및 버텍스들의 세트가 처리될 프리미티브들의 세트 및 버텍스들의 세트 내에 포함되는 것이 바람직하다. 다시, 트리의 순회는 일반적으로 인정된 리프 노드의 부모 노드에서 계속하는 (이렇게 해서 (만약 있다면) 여전히 테스트되어야 하는 부모 노드의 다음 리프 노드로 이동하는) 것이 바람직하다.
이 프로세스는 트리가 완전히 순회될 때까지 (테스트될 필요가 있는 트리 내의 모든 노드가 테스트될 때까지) 반복된다.
상술한 바와 같이, 바람직한 실시 예에 있어서는, 트리는 루트 노드로부터 순회하여, (이 순회가 계속되면) 리프 노드들을 향해서 아래로 동작한다. 트리는 프리미티브들의 세트 내의 프리미티브들에 대한 원하는 렌더링 순서를 보존하는 순서로 (그래서, 예를 들면, 트리가 왼쪽-오른쪽 순으로 구성되었을 경우 왼쪽에서 오른쪽으로) 순회하는 것이 바람직하다. 상술한 바와 같이, 이것은 트리가 구성되는 순서에 의존할 것이고, 그래서 트리를 이용할 때의 트리 순회 순서는 트리가 구성되었던 순서에 근거해야 하고, 바람직하게는 근거한다.
트리의 순회는 처리될 프리미티브들의 세트 및 버텍스들의 세트를 구축(생성)하기 위해서 사용되어야 한다. 이것은 어떤 적절한 원하는 방식으로 행해질 수 있다. 바람직하게는, 프리미티브들의 러닝 마스터 리스트 및 버텍스들의 러닝 마스터 리스트가 유지되고, 노드가 뷰 프러스텀 테스트를 통과함에 따라, 각 새로운 "통과(passing)" 노드에 대한 프리미티브들 및 버텍스들이 프리미티브들 및 버텍스들의 현존하는 마스터 리스트에 부가(결합)되는 것이 바람직하다. 이렇게 해서, 바람직한 실시예에 있어서는, 루트 노드가 부분적으로 가시적이면, 트리가 순회하여, 처리되어야 하는, (예를 들면, 프리미티브 인덱스들의) 프리미티브들의 범위와, 버텍스 인덱스들의 범위 혹은 버텍스 인덱스들의 비트 필드(비트 맵) 표시를 구축한다.
노드에 대한 프리미티브들 및 버텍스들은 어떤 적절한 원하는 방식으로 마스터 리스트에 부가(병합)될 수 있다.
프리미티브들에 대해서는, (뷰 프러스텀 테스트를 통과하는 각 노드에 대한) 각 일반적으로 인정된 노드에 대한 프리미티브들(예를 들면, 프리미티브 인덱스 범위들)의 리스트가 간단히 마스터 프리미티브 리스트에 부가될 수 있다.
바람직한 실시 예에 있어서는, 처리될 프리미티브들의 "마스터" 리스트가 마스터 리스트 내의 프리미티브들의 세트에 대한 모든 프리미티브에서 시작하고, 그 다음 트리의 노드들이 뷰 프러스텀 테스트에 의해 추가 처리로부터 거절되면 마스터 리스트로부터 프리미티브들(예를 들면, 바람직하게는 프리미티브 인덱스들의 범위들)을 제거함으로써 구축된다.
버텍스들에 대해서는, 사용되는 실제의 프로세스가 버텍스 데이터가 트리 노드들에 대해 저장되는 방식에 의존하는 것이 바람직하다.
예를 들면, 노드들이 자기와 관련된 버텍스 인덱스 비트 맵들(비트 필드들)을 갖는 경우, 마스터 버텍스 리스트가 그에 따라 비트 맵(비트 필드)으로서 유지되는 것이 바람직하고, "마스터" 비트 맵은 뷰 프러스텀 테스트를 통과하는 노드에 대한 버텍스 비트 맵과 OR되어, 프리미티브들의 세트에 대한 병합 갱신된 마스터 버텍스 인덱스 비트 맵을 제공하는 것이 바람직하다.
상대적으로, 트리 노드들이 자기와 관련된 버텍스 인덱스 범위들을 갖는 경우에는, 마스터 버텍스 리스트가 모든 "통과" 노드들의 버텍스 인덱스 범위들의 결합을 포함하는 것이 바람직하다. 그러한 바람직한 실시예에 있어서는 (그렇게 하는 것이 적절한 경우) 트리 노드들에 대한 버텍스 인덱스 범위들은 마스터 버텍스 리스트에 대한 새로운 버텍스 인덱스 범위들로 (선택적으로) 병합되는 것이 바람직하다. 이것은 트리 표시를 구축하는 경우 자식 노드들을 병합할 때 상기 설명한 것에 대응하는 방식으로 행해지는 것이 바람직하다. 이렇게 해서, (상술한 것처럼) 2개의 노드 버텍스 인덱스 범위가 겹치거나, 버텍스 인덱스의 임계 개수보다 적거나 같게 분리되면, 2개의 노드 버텍스 인덱스 범위들이 마스터 버텍스 인덱스 리스트에 대한 단일의 결합된 버텍스 인덱스 범위로 병합(결합)되는 것이 바람직하다.
바람직한 실시예에 있어서는, 처리될 버텍스들의 "마스터" 리스트는 리스트("빈" 리스트")에서 어떤 버텍스도 없이 시작하고, 그 다음 트리의 노드들이 뷰 프러스텀 테스트를 통과하면 버텍스들(예를 들면, 바람직하게는 버텍스 인덱스들의 범위들)을 마스터 리스트에 부가함으로써 구축된다.
트리 순회의 출력은 처리될 프리미티브들의 세트 및 관련 버텍스들의 세트이어야 하고, 바람직하게는 이다. 이 출력은 어떤 원하는 적절한 형태를 취할 수 있지만, 프리미티브들의 세트에 대해서 처리되어야 하는 프리미티브들을 나타내는, 프리미티브들의 세트에 대한 프리미티브 스트림 내부의 프리미티브들의 리스트 또는 리스트들(예를 들면, 프리미티브 인덱스들의 범위 또는 범위들)과, 프리미티브들의 세트에 대해서 처리되어야 하는 버텍스들을 나타내는, 버텍스 인덱스들의 범위 또는 범위들, 혹은 버텍스 인덱스들의 비트 맵을 포함하는 것이 바람직하다.
이 프리미티브 및 버텍스 정보는, 문제의 프리미티브들의 세트(예를 들면, 드로우 콜)에 대해서 처리되어야 하는 프리미티브들 및 버텍스들을 지시하기 위해서, 예를 들면, 렌더링 프로세스(예를 들면, GPU(Graphics Processing Unit)(그래픽 프로세서))에 제공될 수도 있고, 바람직하게는 제공된다. 예를 들면, GPU는 문제의 그래픽 처리 시스템에 대한 통상적인 방식의 지시된 프리미티브들 및 버텍스들을 처리하여 원하는 렌더 출력을 제공하는 것이 바람직하다. 이 처리는 원하는 대로 예를 들면, 버텍스 쉐이딩, 래스터화, 렌더링(프래그먼트 쉐이딩) 등을 포함할 수 있다.
본 발명은 상술한 방식으로 렌더링되어야 하는 프리미티브들의 세트에 대하여 트리 표시를 작성해서 사용하는 방법 및 시스템에도 확장된다.
본 발명의 방법 및 장치는 예를 들면, 하드웨어 또는 소프트웨어(또는 양쪽)로 어떤 적절한 원하는 방식으로, 또 어떤 적절한 디바이스 또는 구성소자(에 포함될 수 있다)로 구현될 수 있다.
특히 바람직한 실시 예에 있어서는, 트리 구조를 작성 및 이용해서 렌더링 동작을 수행하는 그래픽 프로세서(GPU)용 드라이버에 의해 처리되어야 하는 프리미티브들 및 버텍스들의 세트들을 생성한다. 이렇게 해서, 특히 바람직한 실시예에 있어서, 본 발명의 장치는 렌더링 동작을 수행하는 그래픽 프로세서(GPU)용 드라이버를 구비한다.
상대적으로, 본 발명은 호스트 프로세서(CPU) 및 그래픽 프로세서(GPU)를 포함하는 그래픽 처리 시스템에서 구현 및 실행되는 것이 바람직하고, 이 호스트 프로세서는 그래픽 프로세서용 드라이버를 실행하고, 이 호스트 프로세서상의 드라이버는 본 발명의 트리 구조를 생성하며, 이 트리 구조를 이용하여 처리되어야 하는 프리미티브들 및 버텍스들의 세트를 결정하고, 그 다음 (바람직하게는 그렇게 식별된 프리미티브들 및 버텍스들의 세트들을 처리하는) 그래픽 프로세서에 처리되어야 하는 소위 프리미티브들 및 버텍스들의 세트들을 표시한다.
트리 구조는 그래픽 처리 동작 시에 어떤 원하는 적절한 지점에서 생성되어 이용될 수 있다. 바람직한 실시예에 있어서는, 이것은 드로우 콜 시간에서 행해진다.
프리미티브들의 비트를 나타내는 비트를 표시하는 데이터가 저장되는 메모리는, 어떤 적절한 그러한 메모리를 구비할 수도 있고, 어떤 적절한 원하는 방식으로 구성될 수도 있다. 예를 들면, 그것은 온 칩 버퍼일 수도 있고 또는 외부 메모리일 수도 있다(실제로는 외부 메모리일 가능성이 더 높다). 마찬가지로, 그것은 이 목적을 위한 전용 메모리일 수도 있고, 또는 다른 데이터에 대해서 사용되는 메모리의 일부일 수도 있다. 일 실시예에 있어서는, 이 데이터는 그래픽 프로세스를 내장하는 시스템의 메인 메모리 내에 저장된다.
프리미티브들의 세트를 표시하는 트리를 나타내는 모든 데이터는 필수적인 것은 아니지만, 같은 물리적 메모리 내에 저장되는 것이 바람직하다.
물론, 다른 메모리 방식도 가능할 것이다.
본 발명은 어떤 적절한 시스템, 예를 들면 적절히 구성된 마이크로 프로세서 기반의 시스템에서 구현될 수 있다. 바람직한 실시예에 있어서는, 본 발명은 컴퓨터 및/또는 마이크로 프로세서 기반 시스템에서 구현된다.
본 발명은 저전력 기기 및 휴대 기기에 사용하는 데에 특별하지만 배타적이지 않게 적합하다. 이와 같이, 바람직한 실시예에 있어서는, 본 발명은 휴대기기, 예를 들면 이동전화 또는 PDA에서 구현된다.
본 발명은, 어떤 적절한 형태 또는 구성의 그래픽 프로세서에 적용가능하다. 특히, 본 발명은 타일(tile) 기반의 그래픽 프로세서 및 그래픽 처리 시스템에 적용가능하다. 이와 같이, 바람직한 실시예에 있어서는, 그래픽 프로세서는 타일 기반의 프로세서이다.
본 발명의 다양한 기능은 어떤 원하는 적절한 방식으로 행해질 수 있다. 예를 들면, 본 발명의 기능은 원하는 대로 하드웨어 또는 소프트웨어로 구현될 수 있다. 이와 같이, 예를 들면 별도의 표시가 없으면, 본 발명의 다양한 기능 소자들 및 "수단"은 다양한 기능 등, 예를 들면 원하는 방식으로 동작하도록 프로그램될 수 있는 적절한 전용 하드웨어 소자들 및/또는 프로그래머블 하드웨어 소자들과 같은, 다양한 기능 등을 수행하도록 동작가능한, 적절한 프로세서 또는 프로세서들, 컨트롤러 또는 컨트롤러들, 기능유닛들, 회로, 처리 로직, 마이크로프로세서 구성 등을 구비할 수도 있다.
또한, 여기서는 본 기술의 당업자가 알 수 있는 것처럼, 본 발명의 다양한 기능 등이 특정한 프로세서상에서 복제 및/또는 병렬로 수행될 수도 있다는 것에 유념해야 한다. 마찬가지로, 다양한 처리 단계는 원한다면 처리 회로 등을 공유할 수도 있다.
상술한 특정 기능들을 수행하는 데에 필요한 어떤 하드웨어에 따라, 그래픽 처리 시스템 및 파이프라인은 그와 달리 그래픽 처리 파이프라인이 포함하는 어떤 한 개 이상의 보통의 기능유닛 또는 모든 보통의 기능유닛 등을 포함할 수 있다.
또한 본 기술의 당업자가 알 수 있는 것처럼 상술한 본 발명의 모든 국면 및 실시예는 여기에 설명한 어떤 한 개 이상의 바람직한 선택적 특징 또는 모든 바람직한 선택적 특징을 적절히 포함할 수 있고, 바람직하게는 포함한다.
본 발명에 따른 방법은 적어도 부분적으로 소프트웨어, 예를 들면 컴퓨터 프로그램을 이용해서 구현될 수도 있다. 이와 같이, 추가 국면에서 보면, 본 발명은 데이터 처리수단 상에 인스톨될 때 여기서 설명한 방법을 수행하는 데에 특히 적합한 컴퓨터 소프트웨어와, 프로그램 소자가 데이터 처리수단 상에서 작동할 때 여기서 설명한 방법을 수행하기 위한 컴퓨터 소프트웨어 코드부를 포함하는 컴퓨터 프로그램 소자와, 프로그램이 데이터 처리 시스템 상에서 작동할 때 여기서 설명한 방법 또는 방법들의 모든 스텝을 수행하는 데에 적합한 코드 수단을 포함하는 컴퓨터 프로그램을 제공한다는 것을 알 수 있을 것이다. 데이터 프로세서는 마이크로프로세서 시스템, 프로그래머블 FPGA(field programmable gate array) 등일 수도 있다.
본 발명은 또한 데이터 처리 수단을 구비하는 그래픽 프로세서, 렌더러, 또는 마이크로프로세서 시스템을 동작시키는 데에 사용될 때 상기 데이터 처리 수단과 함께, 렌더러 또는 시스템이 본 발명의 방법들의 스텝들을 수행하게 하는 소프트웨어를 구비하는 컴퓨터 소프트웨어 캐리어에도 확장된다. 그러한 컴퓨터 소프트웨어 캐리어는 ROM 칩, CD ROM, RAM, 플래시 메모리, 또는 디스크와 같은 물리적 저장매체일 수 있고, 또는 와이어를 통한 전기신호, 위성에 관한 광학 신호 또는 무선신호와 같은 신호일 수 있다.
추가로, 본 발명의 방법들의 모든 스텝들은 모두 컴퓨터 소프트웨어에 의해서 수행되어야 하는 것은 아니므로 더 넓은 국면에서 보면, 본 발명은 컴퓨터 소프트웨어를 제공하고, 그러한 소프트웨어는 여기서 설명한 방법들의 스텝들 중 적어도 하나를 수행하기 위한 컴퓨터 소프트웨어 캐리어 상에 인스톨된다는 것을 알 수 있을 것이다.
본 발명은 따라서 적절히 컴퓨터 시스템과 사용하기 위한 컴퓨터 프로그램 제품으로서 구현될 수도 있다. 그러한 구현(implementaion)은 컴퓨터 판독가능한 매체, 예를 들면, 디스켓, CD-ROM, ROM, RAM, 플래시 메모리, 또는 하드 디스크와 같은, 유형의 비일시 매체 상에 고정된 일련의 컴퓨터 판독가능한 명령들을 포함할 수도 있다. 그것은 또한 광학적 또는 아날로그 통신 라인을 포함하지만 그것에 한정하지 않는 유형의 매체 상에서, 또는 마이크로웨이브, 적외선 또는 다른 전송 기술을 포함하지만 그것에 한정하지 않는 무선 기술을 무형으로 이용하여, 모뎀 또는 다른 인터페이스 기기를 통해서, 컴퓨터 시스템에 전송가능한 일련의 컴퓨터 판독가능한 명령들을 포함할 수 있다. 이 일련의 컴퓨터 판독가능한 명령들은 여기서 이전에 설명한 기능(functionality)의 모두 또는 일부를 구현한다.
본 기술의 당업자들은 그러한 컴퓨터 판독가능한 명령들이 많은 컴퓨터 아키텍처 또는 작동 시스템과 사용하기 위한 다수의 프로그래밍 언어로 기록될 수 있다는 것을 알 수 있을 것이다. 또, 그러한 명령들은 반도체, 자성, 또는 광학을 포함하지만 그것에 한정되지 않는, 현재 또는 미래의 어떤 메모리 기술을 이용해서 저장될 수도 있고, 또는 광학, 적외선, 또는 마이크로파를 포함하지만, 그것에 한정하지 않는, 현재 또는 미래의, 어떤 통신 기술을 이용해서 전송될 수도 있다. 그러한 컴퓨터 프로그램 제품은 인쇄 또는 전자 문서, 예를 들면 컴퓨터 시스템에 프리 로드된 슈링크 랩 소프트웨어(shrink-wrapped software)를 동반하는 이동가능한 매체로서, 예를 들면 시스템 ROM 혹은 고정된 디스크 상에 분배될 수도 있고, 네트워크, 예를 들면, 인터넷 또는 World Wide Web 상에서 서버 또는 전자 게시판로부터 분배될 수도 있다.
이하, 본 발명의 다수의 바람직한 실시 예를 첨부도면을 참조하여 예로서 설명할 것이다.
본 발명에 의하면, 그래픽 처리 시스템에서 렌더링될 프리미티브들 및 버텍스들을 식별하기 위한 방법 및 장치를 개선할 수 있다.
도 1은 예시적인 컴퓨터 그래픽 처리 시스템을 나타낸다.
도 2, 3, 4 및 5는 본 발명에 따른 도 1의 그래픽 처리 시스템의 동작의 바람직한 실시예를 개략적으로 나타낸 것이다.
도 2, 3, 4 및 5는 본 발명에 따른 도 1의 그래픽 처리 시스템의 동작의 바람직한 실시예를 개략적으로 나타낸 것이다.
도면에서 적절한 곳의 같은 구성소자에 대해서는 같은 참조번호를 사용한다.
이하, 본 발명의 바람직한 실시 예에 대해서 설명한다.
도 1은 호스트 프로세서(CPU)(1), 그래픽 처리부(GPU)(3), 및 호스트 컴퓨터(1)와 GPU(3)에 의해 요구 및/또는 생성된 데이터를 저장하는 메모리(5)를 구비하는, 일반적인 컴퓨터 그래픽 처리 시스템을 나타낸다.
바람직한 실시예에 있어서의 그래픽 프로세서(3)는 타일(tile) 기반의 그래픽 프로세서이고, 다수의 스테이지, 즉 버텍스 쉐이더(vertex shader), 헐 쉐이더(hull shader), 테셀레이터(tesselator), 도메인 쉐이더, 지오메트리(geometry) 쉐이더, 래스터화 스테이지, 어얼리(early) Z(깊이) 및 스텐실(stencil) 테스트 단계, 렌더러(renderer)(프래그먼트(fragment) 쉐이딩 스테이지의 형태), 레이트(late) Z(깊이) 및 스텐실 테스트 스테이지, 블렌딩(blending) 스테이지, 타일 버퍼 및 다운샘플링(downsampling) 및 라이트아웃(writeout)(멀티샘플 리졸브(multisample resolve)) 스테이지를 포함한다. 그래픽 프로세서(3)에 대한 다른 구성도 물론 가능하다.
호스프 프로세서(1)상에서 실행되고 있는 어플리케이션(2)이 표시될 프레임 등, GPU(3)로부터 그래픽 처리를 요구할 때, 어플리케이션(2)은 호스트 프로세서(1)상에서 작동하고 있는 GPU(3)에 대한 드라이브(4)에 적절한 코멘드와 데이터를 전달할 것이다.
그 다음, 드라이버(4)는 적절한 코멘드를 그래픽 프로세서(3)에 전달함으로써 어플리케이션(2)이 요구한 그래픽 출력을 발생시킬 것이다.
드라이버(4)에 제공된 코멘드 및 데이터는 본 기술에서 알려진 것처럼, 그래픽 프로세서(3)에 의해 생성되는 출력 프레임에 대해서 렌더링되어야 하는 프리미티브 목록을, 출력 프레임에 대한 프리미티브들(primitives)에 사용될 버텍스들(vertices)을 포함하는 관련 버텍스 어레이와 함께, 나타낼 것이다.
그래픽 프로세서(3)에 의해 생성되는 출력 프레임은 본 기술에서 알려진 것처럼, 일반적으로 스크린 또는 프린터 등, 디스플레이 디바이스 상에 표시하기 위한 프레임일 수도 있지만, 예를 들면, ("텍스처 출력에 대한 렌더러"라고도 알려진) 나중 렌더링 패스(later rendering passes)시에 사용하기 위한 중간 데이터를 구비할 수도 있다.
출력 프레임에 대해서 처리될 프리미티브들은 통상적으로 렌더링되는 순서대로 리스트에 기록된다. 각 프리미티브는 관련 버텍스 어레이에서 그들의 인덱스가 나타내는 한 세트의 버텍스와 관련되어 있을 것이다.
렌더링 동작을 더 용이하게 하기 위해서, 출력 프레임에 대해서 처리될 프리미티브들은 통상적으로, 본 기술에서 알려진 것처럼, 분명한 드로우 콜(draw call)로 조직화될 것이다. 각 드로우 콜에 대해서는 처리될 프리미티브들의 세트가 있을 것인데, 이 세트 내의 각 프리미티브는 관련 버텍스 어레이에서 그들의 인덱스가 나타내는 한 세트의 버텍스와 관련되어 있다. 출력 프레임에 대한 드로우 콜이 출력 프레임을 생성하기 위해서 차례로 처리된다.
보통의 그래픽 처리에 있어서는, 드라이버(4)는 코멘드 및 데이터를 그래픽 프로세서(3)에 그냥 보내서 각 드로우 콜에 대한 모든 프리미티브들 및 버텍스들을 차례로 처리한다.
본 실시예에 있어서는, 이 동작이, 이하에 추가로 설명하는 것처럼, 출력 프레임에 대한 각 드로우 콜에 대해서 처리될 프리미티브들의 세트들의 트리 표시(tree representations)를 구성하고, 그 다음 이들 트리 표시를 이용하는 드라이버(4)에 의해 변경됨으로써, 문제의 드로우 콜에 대해서 그래픽 프로세서(3)에 의해 처리될 감소된 프리미티브들 및 버텍스들의 세트가 얻어진다.(이와 같이, 본 실시예에 있어서는, 본 발명은 드라이버(4) 및 GPU(3)에서 구현된다)
도 2 및 3은 본 실시예에서 사용되는 드로우 콜에 대한 프리미티브들의 세트에 대한 트리 표시를 생성하는 프로세스를 개략적으로 나타낸 것이다. 도 2는 이 프로세스의 스텝들을 나타내는 플로차트이고, 도 3은 트리 표시(30) 자체의 구성을 개략적으로 나타낸 것이다.
도 3에 나타낸 바와 같이, 드로우 콜은 그 중에서도 그 드로우 콜에 대해서 처리될 프리미티브들(31)의 세트를 나타낼 것이고, 그 프리미티브들은 자기들이 원하는 렌더링 순으로 리스트에 기록될 것이다. 본 실시예에 있어서는, 프리미티브들의 세트 내에 있는 프리미티브들이 프리미티브들의 원하는 렌더링 순서에 대응하는, 0에서 시작하는, 연속하는 순서대로 관련 인덱스를 가지고 있다고 가정한다. 그렇지만, 원한다면 다른 구성도 사용될 수 있다.
또한, 이 프리미티브들의 세트 내에 있는 프리미티브들은 도 3에 나타낸 것처럼 관련 인덱스 값에 관해서는 리스트에 기록될 필요가 없다. 예를 들면, 대신 버텍스의 그룹(예를 들면, 프리미티브가 삼각형의 형태인 경우에 3개의 버텍스의 그룹)으로 분리되는 버텍스의 리스트(버텍스 인덱스)를 제공함으로써, 프리미티브들의 세트 내에 있는 각 프리미티브를 식별해서 표시한다. 이 경우에, 프리미티브들의 세트 내에 있는 프리미티브들은 그들의 버텍스를 리스트에 기록함으로써 식별되어 표시될 것이다(연속적인 버텍스들의 세트가 리스트에 기록되어 있을 것이고, 각 버텍스들의 세트는 프리미티브들의 세트 내에 있는 프리미티브들에 대응한다).
몇 개의 프리미티브에 대해서만 도 3에 개략적으로 나타낸 것처럼, 프리미티브들의 세트 내에 있는 각 프리미티브도 버텍스들의 세트와 관련되어 있다. 본 실시 예에 있어서는, 각 프리미티브가 삼각형이므로, 각 프리미티브가 3개의 버텍스의 세트와 관련되어 있다. 이 버텍스들은 드로우 콜에 대해 사용되는 모든 버텍스를 표시하는 버텍스 어레이(32)로 버텍스 인덱스에 의해 참조된다. 도 3에 나타낸 것처럼, 프리미티브는 상이한 인덱스를 갖는 버텍스를 이용하거나 또는 버텍스를 공유할 수도 있고, 드로우 콜에 대한 프리미티브들의 세트에 대해 사용되는 버텍스 세트는 버텍스 어레이로부터의 연속하는 버텍스 세트일 필요는 없다.
도 2에 나타낸 것처럼, 트리 표시(30)를 생성하기 위해서 드라이버가 실행하는 프로세스에 있어서의 첫 번째 스텝은 드로우 콜에 대한 프리미티브들의 세트를 프리미티브들의 복수의 서브 세트들(33)로 분할하는 것이다(스텝 20).
본 실시예에 있어서는, 드로우 콜에 대한 프리미티브들의 세트는, 프리미티브들의 세트에 대한 인덱스 값의 범위를 인덱스 값의 복수의 동일한(및 연속하는) 서브 범위로 분할함으로써 프리미티브들의 서브 세트들(33)로 분할된다. 이것을 근거로 프리미티브들의 세트를 세분하는 것은, 프리미티브들을 서브 세트들에 할당할 경우 프리미티브들의 공간적 분포를 고려해야 하는 어떤 필요성이든 피할 수 있어, 비교적 빠르고 저렴한 방식으로 수행될 수 있다.
프리미티브들의 각 서브 세트가 선택된 프리미티브들의 임계 개수(threshold number)보다 많이, 이 경우에 128개의 프리미티브를 포함하지 않도록 세분이 행해진다.
그렇지만, 프리미티브 세트 세분 프로세스는, 또한 프리미티브들의 서브 세트들의 총 개수가 선택된 소정의 서브 세트의 임계 개수, 이 경우 256개의 서브 세트를 넘지 않는 제약을 받는다. 이 제약은 우선권을 얻어, 서브 세트들의 임계 개수가 초과하면, 서브 세트들의 임계 개수가 초과하지 않을 때까지 서브 세트당 허용된 프리미티브의 개수가 증가한다.
(이것과 관련하여 명확성을 위해서 도 3은 단지 프리미티브 인덱스, 서브 세트들, 버텍스들, 프리미티브 대 버텍스 연관성 등의 전부가 아니라 일부를 나타낸다는 것을 이해할 수 있을 것이다.)
일단 프리미티브들의 세트가 프리미티브들의 복수의 서브 세트들(33)로 분할되었으면, 드라이버는 프리미티브들의 세트의 트리 표시를 구성한다. 이 프로세스에 있어서의 첫 번째 스테이지는 프리미티브들의 세트가 분할되었던 프리미티브들의 각 서브 세트(33)에 대한 트리(30)의 리프 노드(leaf node)(34)를 생성하는 것이다(도 2에서의 스텝 21).
프리미티브 서브 세트들(33)은, 트리의 하나의 에지에 있는 리프 노드로부터 트리의 다른 에지에 있는 리프 노드로(왼쪽에서 오른쪽으로, 혹은 오른쪽에서 왼쪽으로), 프리미티브 서브 세트들을 프리미티브의 인덱스 순으로 리프 노드에 할당함으로써 트리에 대한 리프 노드(34)에 할당된다. 이것은 트리 표시가 사용될 때 원하는 렌더링 순서를 보존(재생)하는 것을 용이하게 한다.
그 다음 드라이버(4)는 리프 노드의 프리미티브가 커버하는 오브젝트 공간(object space)의 치수와, 리프 노드의 프리미티브가 사용하는 버텍스를 찾아냄으로써 리프 노드를 "만들고"(도 2에서 스텝 22), 이 정보를 표시하는 데이터를 저장한다.
이와 같이, 트리 표시(30)의 각 리프 노드(34)에 대해서, 드라이버(4)는 노드가 표시하는 프리미티브들의 서브 세트를 나타내는 데이터; 그 프리미티브들의 서브 세트의 프리미티브가 사용하는 버텍스들을 나타내는 데이터; 및 그 프리미티브들의 서브 세트가 그 내부에 있는 공간의 용적(volume)을 나타내는 데이터를 결정해서 저장한다.
리프 노드가 표시하는 프리미티브들의 서브 세트를 가리키는 데이터는, 노드에 대한 프리미티브 서브 세트에 대한 시작 인덱스와, 노드에 대한 프리미티브들의 서브 세트에 있는 프리미티브의 개수를 나타냄으로써, (서브 세트가 포함하는) 프리미티브 서브 세트에 대한 프리미티브 인덱스의 범위를 나타낸다.
리프 노드에 대한 프리미티브들의 서브 세트가 사용하는 버텍스를 결정하기 위해서, 드라이버는 먼저 리프 노드에 대한 프리미티브용 버텍스 인덱스를 스캔하고, 사용되는 각 버텍스에 대한 작동 비트 버퍼 내에서 비트를 설정한다.
하나의 바람직한 실시예에 있어서는, 이 버텍스 인덱스 스캔의 결과를 이용해서 프리미티브들의 세트에 대한 버텍스 어레이 내의 모든 버텍스를 표시하는 노드에 대한 비트 맵(비트 필드)을 구성하고, 버텍스 비트 맵 내의 비트를 설정해서 버텍스 중의 어느 것이 문제의 노드와 관련되는 프리미티브와 관련되어 있는지를 나타낸다.
다른 바람직한 실시예에 있어서는, (노드에 대한 프리미티브가 사용하는 버텍스를 나타내는) 리프 노드에 대한 프리미티브들의 서브 세트와 관련된 버텍스를 나타내는 데이터는, 노드와 관련되는 버텍스(의 인덱스)를 나타내는 한 개 이상의 연속하는 버텍스 인텍스 범위를 포함한다.
이 경우에, 드라이버는 작동 비트 버퍼로 나타낸 것처럼 프리미티브들의 서브 세트 내의 프리미티브와 관련된 버텍스가 걸치는 버텍스 인텍스 범위를 스캔함으로써, 그 버텍스 인덱스 범위를 문제의 노드와 관련되는 한 개 이상의 버텍스 인덱스 범위로 세분하다.
이 동작에 있어서, 드라이버가 프리미티브들의 서브 세트 내의 프리미티브에 대한 버텍스용 한 개의 버텍스 인덱스와 프리미티브들의 서브 세트 내의 프리미티브에 대한 다음 버텍스 인덱스 간의 버텍스 인덱스 카운트의 간격(갭)을 (버텍스 인덱스 순서로) 식별하고, 프리미티브들의 서브 세트 내의 프리미티브에 대한 버텍스용 하나의 버텍스 인덱스와 프리미티브들의 서브 세트 내의 프리미티브에 대한 다음 버텍스 인덱스 간의 간격(인덱스의 개수(인덱스 카운트))이 스레숄드 간격값을 초과하면, 새로운 버텍스 인덱스 범위가 프리미티브들의 서브 세트에 대한 다음 (사용된) 버텍스 인덱스에서 시작(및 저장)된다.
역으로, 프리미티브들의 서브 세트 내의 프리미티브드에 대한 버텍스용 한 개의 버텍스 인덱스와 프리미티브들의 서브 세트 내의 프리미티브에 대한 다음 버텍스 인덱스 간의 간격(인덱스의 개수(인덱스 카운트))이 임계값을 넘지 않으면, 양쪽 인덱스를 포함하는 단일 범위와 그들 간의 "갭"(스레숄드 간격을 초과하지 않는 이들 인덱스의 양쪽에 대한 어떤 다른 인덱스)이 사용된다.
즉, 선택된 버텍스(버텍스 인덱스)의 임계 개수보다 적거나 혹은 그 개수보다 같거나 적게 2개의 별개의 버텍스 인덱스 범위를 이용하는 것이 스킵하면, 단일의 연속하는 버텍스 인덱스 범위가 2개의 별개의 버텍스 인덱스 범위 대신에 사용되지만, 선택된 버텍스(버텍스 인덱스)의 임계 개수보다 많이 2개의 별개의 버텍스 인덱스 범위를 이용하는 것이 스킵하면, 2개의 별개의 버텍스 인덱스 범위가 단일의 연속하는 버텍스 인덱스 범위 대신에 사용된다.
버텍스 인덱스 범위가 노드와 관련되어 있는 경우, 버텍스 인덱스 범위의 개수를 나타내는 데이터와, 각 범위에 대해서, 그 범위에 대한 시작 및 종료(최소 및 최대) 버텍스 인덱스값을 나타내는 데이터가 생성되어 저장된다.
본 실시예에 있어서, 노드에 대한 프리미티브들의 서브 세트가 내부에 있는 공간의 용적을 나타내는 데이터는, 프리미티브들의 서브 세트 내의 프리미티브의 모두를 포함하는 바운딩 볼륨(bounding volume)을 나타낸다. 이것을 행하기 위해서, 노드가 사용하는 모든 버텍스에 대한 각 축 방향(예를 들면, x, y, z)의 최소 및 최대값은, 노드가 관련된(포함하는) 공간의 영역을 표시함에 따라 결정되어 저장된다. 다른, 예를 들면 좀더 정교한 바운딩 볼륨의 형태가, 원하면 사용될 수 있다.
일단 프리미티브들의 세트가 분할된 소정의 서브 세트를 각각 나타내는 리프 노드(34)가 결정되어 "구성"되었으면, 트리 표시에 대한 더 높은 레벨 노드 35, 36, 37이 결정되어 구성된다(도 2에서 스텝 23). 각 더 높은 레벨 노드를, 그 각각의 자식 노드(child nodes)를 병합함으로써, 그 각각의 자식 노드로부터 구축하는데, 그 목적은 트리 내의 각 더 높은 노드가 그 자식 노드의 각각이 표시하는 프리미티브들의 서브 세트의 결합을 나타내기 위해서다. 이와 같이, 예를 들면, 2개의 리프 노드(34)를 그 자식 노드로서 갖는 부모 노드(35)가 2개의 자식 리프 노드가 표시하는 프리미티브들의 2개의 서브 세트의 결합을 나타낼 것이다. 이것에 의해 문제의 프리미티브들의 전체 세트를 표시하는 루트(root) 노드(37)가 도달될 때까지 각 더 높은 노드에 대한 트리 표시가 반복된다.
본 실시예에 있어서는, 도 3에 나타낸 것처럼, 트리의 각 부모 노드가 2개의 자식 노드를 갖는다. 물론 다른 구성도 가능할 것이다.
자식 노드를 병합할 때, 부모 노드가 나타내는 프리미티브들의 서브 세트의 경우에는, 자식 노드에 대한 프리미티브 인덱스 범위를 결합해서 부모 노드에 대한(더 큰) 프리미티브 인덱스 범위를 제공한다.
부모 노드와 관련되는 버텍스의 경우에 있어서는, 자식 노드가 자신들과 관련된 버텍스 인덱스 비트 맵을 갖는 경우, 자식 노드 비트 맵을 함께 OR해서 부모 노드에 대한 버텍스 인덱스 비트 맵을 제공한다.
자식 노드가 자신들과 관련된 버텍스 인덱스 범위를 갖는 경우, 자식 노드에 대한 버텍스 인덱스 범위가 그렇게 하는 데에 적절한 부모 노드에 대한 새로운 범위로 선택적으로 병합된다. 특히, (상기 설명한 것처럼) 2개의 자식 노드 버텍스 인덱스 범위가 겹치거나, 버텍스 인덱스의 임계 개수와 같거나 적게 분리되면, 2개의 자식 노드 버텍스 인덱스 범위가 부모 노드에 대한 단일의 결합된 버텍스 인덱스 범위로 병합(결합)된다. 이것은 자식 노드의 모든 버텍스 인덱스 범위에 걸쳐서 반복된다.
프리미티브들의 서브 세트가 내부에 있는 영역을 나타내는 데이터가 관련되어 있는 한은, 부모 노드에 대한 바운딩 볼륨이, 부모 노드의 자식 노드의 모두에 걸쳐서 각 축을 따라 최소 및 최대 버텍스 위치를 취함으로써 생성된다.
일단 드로우 콜에 대한 프리미티브들의 세트의 트리 표시가 생성되었으면, 사용하기 위해서 메모리 내에 저장된다(도 2에서 스텝 24).
드라이버(4)는 트리 표시를 이용해서 드로우 콜에 대한 프리미티브들의 세트를 렌더링할 때 프리미티브들의 세트에 대해서 처리될 프리미티브들 및 버텍스들을 결정(식별)한다.
트리 표시를 이용해 드로우 콜에 대해서 처리될 프리미티브들 및 버텍스들을 결정하기 위해서, 드라이버는 트리의 노드를 순회(traverse)하여, 처리될 프리미티브 세트와 버텍스 세트를 구축한다. 트리는 루트 노드로부터 순회되어, (순회(traversal)가 계속되는 경우) 리프 노드를 향해서 아래로 작동한다. 트리는 드로우 콜에서의 프리미티브에 대한 원하는 렌더링 순서를 보존하는 순으로 (트리가 왼쪽-오른쪽 순서로 구성되었을 경우에 왼쪽에서 오른쪽으로) 순회된다.
순회 중에는, 드라이버는 렌더링되고 있는 프레임에 대한 뷰 프러스텀(view frustum)에 대해 고려해야 할 트리의 각 노드에 대한 바운딩 볼륨을 테스트하여, 바운딩 볼륨의 어느 부분이 뷰 프러스텀 내에 있는지를 판정한다. 이 뷰 프러스텀 테스트는 적절한 바운딩 볼륨-뷰 프러스텀 교차 테스트를 이용해서 행해진다.
필요한 경우에는, 노드에 대한 바운딩 볼륨이 뷰 프러스텀에 대해 테스트되기 전에 적절한 스크린 공간 위치로 변환된다. 이것은 예를 들면 버텍스 쉐이딩 프로세스의 일부분으로서 제공된 변환 행렬을 사용할 수도 있다.
이것을 용이하게 하기 위해서, 버텍스 쉐이더에 대한 컴플라이어(버텍스 쉐이딩 프로그램)는, 드로우 콜에 적용되는 버텍스 쉐이딩 프로그램이 버텍스에 대한 변환을 이용해서 버텍스를 스크린 공간으로 변환할지 판정하고, 그렇다면 스크린 공간 변환(변환 행렬)을 추출해서 노드 바운딩 볼륨-뷰 프러스텀 테스팅 프로세스에 제공하도록 구성된다.
노드에 대한 뷰 프러스텀 테스트의 결과를 이용해서 프리미티브들의 서브 세트와 프리미티브들의 세트 내의 노드에 대한 버텍스들의 세트 및 드로우 콜에 대해 처리될 버텍스들의 세트를 포함하는지 여부를 판정하고, 트리의 순회를 계속할지 여부와 계속하는 방법을 판정한다.
노드가 뷰 프러스텀 테스트를 완전히 통과하면(즉, 그것의 바운딩 볼륨이 완전히 뷰 프러스텀 내에 있으면), 노드에 대한 프리미티브들의 서브 세트 및 버텍스들의 세트는, 드로우 콜에 대해 처리될 프리미티브들의 세트 및 버텍스들의 세트 내에 포함(에 부가) 된다. 트리의 순회는 일반적으로 인정된 노드의 부모 노드에서 계속한다(이렇게 함으로써 (만약에 있다면) 여전히 테스트될 부모 노드의 다음 자식 노드로 이동한다).
상대적으로, 노드가 뷰 프러스텀 테스트를 완전히 실패하면(즉, 그것의 바운딩 볼륨이 완전히 뷰 프러스텀 밖에 있으면), 노드에 대한 버텍스 세트 및 프리미티브 서브 세트가 드로우 콜에 대해 처리될 버텍스 세트 및 프리미티브 세트 내에 포함(에 부가)되지 않는다. 트리의 순회는 거절된 노드의 부모 노드에서 다시 계속한다(이렇게 함으로써 (만약에 있다면) 여전히 테스트되어야 하는 거절된 노드의 부모 노드의 다음 자식 노드로 이동한다).
리프 노드가 아닌 노드가 부분적으로 뷰 프러스텀 테스트를 통과하면(예를 들면, 그것의 바운딩 볼륨이 부분적으로만(그렇지만 완전히는 아닌) 뷰 프러스텀 내에 있으면), 노드에 대한 버텍스 세트 및 프리미티브 서브 세트가 그 스테이지에서 드로우 콜에 대해 처리될 버텍스 세트 및 프리미티브 세트 내에 포함되지 않지만, 대신 트리의 순회는 (그들 자체적으로 테스트되는) 문제의 노드의 자식 노드로 계속된다).
여전히 테스트되어야 하는 부모 노드의 어떤 추가 자식 노드도 없는 경우에는, 순회가 문제의 부모 노드의 부모 노드에서 계속한다(이렇게 함으로써 (만약에 있다면) 여전히 테스트되어야 하는 더 높은 레벨의 부모 노드의 다음 자식 노드로 이동한다)((만약에 있다면) 다음에 테스트되어야 하는 더 높은 레벨의 노드에서 계속한다).
리프 노드가 뷰 프러스텀 테스트를 적어도 부분적으로 통과하는 것으로 발견되면(즉, 그것의 바운딩 볼륨이 적어도 부분적으로 뷰 프러스텀 내에 있으면), 리프 노드에 대한 프리미티브들의 서브 세트 및 버텍스들의 세트가 드로우 콜에 대해 처리될 프리미티브들의 세트 및 버텍스들의 세트 내에 포함된다. 트리의 순회는 일반적으로 인정된 리프 노드의 부모 노드에서 계속한다(이렇게 함으로써 (만약 있다면) 여전히 테스트되어야 하는 부모 노드의 다음 리프 노드로 이동한다).
이 프로세스는 트리가 완전히 순회될 때까지(테스트될 필요가 있는 트리 내의 모든 노드가 테스트되었을 때까지) 반복된다.
트리로서 처리될 버텍스 세트 및 프리미티브 세트를 생성하기 위해서, 프리미티브의 러닝 마스터 리스트(running master list) 및 버텍스의 러닝 마스터 리스트가 유지되고, 노드가 뷰 프러스텀을 통과함에 따라, 각 새로운 "패싱(passing)" 노드에 대한 프리미티브 및 버텍스가 프리미티브 및 버텍스의 현존하는 마스터 리스트와 결합된다.
본 실시예에 있어서는, 처리될 프리미티브의 "마스터" 리스트는, 마스터 리스트 내에 있는 드로우 콜에 대한 모든 프리미티브로 시작해서 트리의 노드가 뷰 프러스텀 테스트에 의해 추가 처리로부터 거절되면 프리미티브(예를 들면, 바람직하게는, 프리미티브 인덱스의 범위)를 마스터 리스트로부터 제거함으로써 구성된다.
버텍스에 대해서는, "마스터" 리스트를 구축하기 위해서 사용되는 프로세스는 트리 노드에 대해서 버벡스 데이터가 저장되는 방식에 의존한다.
노드가 자기와 관련된 버텍스 인덱스 맵(비트 필드)을 가지면, 마스터 버텍스 리스트는 상대적으로 비트 맵(비트 필드)으로서 유지되고, "마스터" 비트 맵은 뷰 프러스텀 테스트를 통과해서 드로우 콜에 대한 병합, 갱신된 마스터 버텍스 인덱스 비트 맵을 제공하는 노드에 대한 버텍스 비트 맵과 OR된다.
상대적으로, 트리 노드가 자기와 관련된 버텍스 인덱스 범위를 가지면, 뷰 프러스텀 테스트를 통과하는 트리 노드에 대한 버텍스 인덱스 범위가 마스터 버텍스 리스트에 대한 새로운 버텍스 인덱스 범위로 병합된다. 이것은 트리 표시를 구성할 때 자식 노드를 병합할 때 상기 설명한 것에 대응하는 방식으로 행해진다. 이와 같이 함으로써, (상기 설명한 것처럼) 2개의 노드 버텍스 인덱스 범위가 겹치거나, 버텍스 인덱스의 임계 개수보다 적거나 같게 분할되면, 2개의 노드 버텍스 인덱스 범위가 마스터 버텍스 인덱스 리스트에 대한 단일의 결합된 버텍스 인덱스 범위로 병합(결합)된다.
트리 순회의 출력은 드로우 콜에 대해 처리될 프리미티브들의 세트 및 관련된 버텍스들의 세트이다(드로우 콜에 대해 처리될 프리미티브들을 나타내는, 프리미티브들의 세트에 대한 프리미티브 인덱스 스트림 내의 프리미티브 인덱스의 범위 또는 범위들과, 드로우 콜에 대해 처리될 버텍스들을 나타내는, 버텍스 인덱스의 범위 또는 범위들, 또는 버텍스 인텍스의 비트 맵의 형태).
이 프리미티브 및 버텍스 정보는 드라이버(4)에 의해 그래픽 처리부(GPU)(3)에 제공되어 문제의 드로우 콜에 대해 처리될 프리미티브들 및 버텍스들을 표시한다. 그 다음 GPU(3)는 문제의 그래픽 처리 시스템에 대한 정상적인 방식의 표시된 프리미티브 및 버텍스를 처리(렌더)하여 드로우 콜에 대한 원하는 렌더 출력을 제공한다. 이 처리는 원한다면 예를 들어 버텍스 쉐이딩, 래스터화, 렌더링(프래그먼트 쉐이딩) 등을 포함할 수 있다.
이 점과 관련하여서는 트리 순회의 출력인 드로우 콜에 대해 처리될 프리미티브들의 세트 및 관련 버텍스들의 세트가 뷰 프러스텀 테스트에 의해 거절되었던 트리의 노드와 관련된 어떤 프리미티브 및 버텍스든 제외할 것이기 때문에, 그에 따라 본 실시예의 트리 표시를 생성하여 이용하는 프로세스는, 처리하기 위한 드로우 콜에 대한 모든 프리미티브 및 버텍스를 단지 그래픽 처리부(3)에 제공하는 것보다는, 드로우 콜에 대해 처리되어야 하는 감소된 프리미티브 세트 및 관련 버텍스 세트가 유도되도록 하게 한다는 것을 인식할 것이다. 이것은 특히 드로우 콜에 대해 처리하기 위한 감소된 또는 최소의 버텍스 세트를 유도하여 버텍스 처리 부담을 줄이는 것을 용이하게 한다.
도 4 및 도 5는 트리 표시의 사용을 나타낸 것이다.
도 4는 트리 표시를 이용하는 프로세스의 스텝을 나타내는 플로차트이다. 도 4에 나타낸 것처럼, 프로세스는 트리를 순회하는 드라이버에서 시작해서, 뷰 프러스텀에 대해 트리의 노드를 테스트하고 이들 테스트의 결과를 이용하여 프리미티브 및 버텍스의 리스트를 작성한다(스텝 40). 이렇게 결정된 프리미티브 및 버텍스의 리스트는 그래픽 프로세서(3)에 제공되고(스텝 41), 그래픽 프로세서는 드로우 콜에 대한 표시된 프리미티브 및 버텍스의 리스트를 처리한다(스텝 42).
도 5는 트리의 순회를 개략적으로 나타낸 것이다.
도 5에 나타낸 것처럼, 순회는 루트 노드 37에서 시작한다. 루트 노드(37)가 완전히 뷰 프러스텀 테스트를 통과하면, 드로우 콜에 대한 전체 프리미티브 세트 및 그와 관련된 버텍스 세트는 전부 렌더링될 것이고, 루트 노드가 뷰 프러스텀 테스트를 실패하면, 드로우 콜에 대한 전체 프리미티브 세트가 거절되어 추가로 처리되는 것이 아니며, 루트 노드만 부분적으로 뷰 프러스텀 테스트를 통과하면 트리가 루트 노드의 자식 노드를 테스트하기 위해서 순회된다.
도 5에 나타낸 예를 위해서, 테스트될 때 루트 노드(37)와 관련된 지오메트리(프리미티브)가 부분적으로 뷰 프러스텀 내에 있는 것으로 발견되었다고 가정한다. 이렇게 함으로써, 루트 노드의 제일 왼쪽의 자식 노드(50)가 (왼쪽에서 오른쪽 순으로 트리가 구성되었다라는 가정 하에, 원하는 렌더링 순서를 보존하기 하기 위해서 왼쪽에서 오른쪽 순으로 순회되어야 하도록) 테스트된다.
노드 50가 테스트될 때, 그 노드에 대한 지오메트리가 부분적으로 뷰 프러스텀 내에 있다고 다시 결정되면, 그것의 제일 왼쪽의 자식 노드(51)가 테스트된다. 도 5에 나타낸 예에 있어서는 노드 51에 대한 바운딩 볼륨이 완전히 뷰 프러스텀 내에 있고, 그래서 노드 51에 대한 프리미티브 세트 및 버텍스 세트가 처리될 프리미티브들 및 버텍스들의 마스터 리스트에 부가되는 것으로 가정한다.
그 다음 순회는 노드 51의 리프 노드를 테스트하지 않고 노드 51의 부모 노드(50)로 되돌아간다. 그 다음 노드 50의 다음 자식 노드(52)가 테스트된다. 이 경우에, 그 노드에 대한 바운딩 볼륨이 부분적으로만 뷰 프러스텀 내에 있고, 그래서 순회가 노드 52의 리프 노드 53, 54를 계속해서 테스트하는 것으로 가정한다. 리프 노드 53, 54에 대한 바운딩 볼륨이 전부 뷰 프러스텀 내에 (즉, 완전히 또는 부분적으로 뷰 프러스텀 내에) 있으면, 리프 노드에 대한 프리미티브 및 버텍스 세트가 처리될 프리미티브들 및 버텍스들의 마스터 리스트에 부가되지만, 그렇지 않으면 부가되지 않는다.
일단 리프 노드 53 및 54가 테스트되었다면, 순회는 루트 노드(37)의 다음 자식 노드(55)로 계속된다. 다시, 도 5에 나타낸 예에 있어서는 노드 55에 대한 바운딩 볼륨이 부분적으로 뷰 프러스텀 내에 있고, 그래서 그 다음 그것의 제일 왼쪽 자식 노드(56)가 테스트되는 것으로 가정한다. 이 경우, 자식 노드(56)에 대한 바운딩 볼륨이 완전히 뷰 프러스텀 밖에 있고, 그래서 노드 56에 대한 프리미티브 및 버텍스가 프리미티브 및 버텍스의 마스터 리스트에 부가되지 않는 것으로 가정하고, 순회는 그 다음 노드 55의 다음 자식 노드(57)로 계속된다.
이 경우에, 노드 57에 대한 바운딩 볼륨이 부분적으로 뷰 프러스텀 내에 있고, 그래서 노드 57의 리프 노드 58, 59가 테스트되는 것으로 가정한다. 리프 노드 58, 59에 대한 바운딩 볼륨이 모두 뷰 프러스텀 내에 (즉, 완전히 또는 부분적으로 뷰 프러스텀 내에) 있으면, 리프 노드에 대한 프리미티브들 및 버텍스들의 세트가 처리될 프리미티브들 및 버텍스들의 마스터 리스트에 부가되지만, 그렇지 않으면 부가되지 않는다.
트리의 순회가 완료됨에 따라, 드로우 콜에 대한 그렇게 유도된 프리미티브 및 버텍스의 마스터 리스트가 처리를 위해서 GPU(3)에 제공된다.
이 프로세스는 출력 프레임에 대한 모든 드로우 콜이 그래픽 프로세서(3)에 의해 렌더링될 때까지, 차례로 출력 프레임에 대해 처리될 각 드로우 콜에 대해서 반복된다. 그 다음 이 프로세스는 다음 출력 프레임 등으로 이동할 수 있다.
본 기술에 속하는 당업자가 알 수 있는 것처럼, 본 실시예의 다수의 변형 및/또는 변경도 원하면 가능하다.
예를 들면, 트리 표시가 처리되어야 하는 각 드로우 콜 및 모든 드로우 콜(프리미티브 세트)에 대해서 생성되어 사용될 수 있지만, 본 출원인은 그저 종래의 방식으로 프리미티브 세트를 처리하는 것이 더 바람직한 상황이 있을 수도 있다고 인식했다. 이것은 예를 들면, 트리 구조를 준비해서 이용하는 비용이 그것에 의해 달성되는 버텍스 처리의 감소보다 중요하지 않을 수도 있는 상황일 수 있다.
이와 같이, 바람직한 실시예에 있어서는, 처리될 각 프리미티브 세트의 공간적 코히런시(spatial coherency)의 척도(measure)가 결정되고, 이 공간적 코히런시가 스레숄드 공간적 코히런시 척도 아래에(또는 그와 같거나 그 아래) 있다고 결정되면, 트리 표시가 프리미티브 세트에 대해 구성되지 않고 사용된다.
이 경우, 평균 버텍스 인덱스 간격(프리미티브 세트에 대한 다음의 버텍스 간의 버텍스 개수)이 프리미티브 세트의 공간적 코히런시의 척도로서 결정되어 사용된다. 그 다음, 이 평균 버텍스 인덱스 간격(거리)이 임계값을 초과(혹은 같거나 초과)하면, 프리미티브 세트는 공간적으로 일관성이 없다고 간주되어서 트리 표시가 프리미티브 세트에 대해 구성되지 않고 사용되고, 프리미티브 세트는 문제의 그래픽 처리 시스템에 대하여 보통의 방식으로 간단히 처리된다(즉, 트리 표시를 구성하여 사용하는 프로세스는 생략(우회)된다).
상기로부터 알 수 있는 것처럼, 본 발명은, 적어도 그 바람직한 실시예에 있어서는, 드로우 콜에 대한 프리미티브 및 버텍스의 일부 또는 모두가 실제로 뷰 프러스텀 밖에 있을 수도 있는 상황에서는, 감소된 최소의 프리미티브 세트의 결정 및 특히 드로우 콜에 대해 처리될 버텍스의 결정을 용이하게 한다. 그러면 이것은 드로우 콜이 렌더링될 때 프리미티브 및 버텍스 처리 부담을 줄이는 것을 용이하게 한다.
이것은 적어도 본 발명의 바람직한 실시예에 있어서는, 드로우 콜에 대한 프리미티브 세트의 트리 표시를 구성하고 그 후에 그 트리 표시를 이용해서 드로우 콜에 대해 처리될 프리미티브 및 버텍스를 결정함으로써 달성된다.
Claims (27)
- 그래픽 처리 시스템에서 출력 프레임에 대해 렌더링될 복수의 프리미티브들의 세트를 처리하는 방법으로서, 상기 프리미티브들의 세트 내의 각 프리미티브는 한 개 이상의 버텍스와 관련되어 있으며, 상기 방법은,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 상기 프리미티브들의 세트를 프리미티브들의 복수의 서브 세트들로 분할하는 단계와,
상기 프리미티브들의 서브 세트들이 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 트리의 리프 노드들(leaf nodes)에 할당되고, 상기 프리미티브들의 세트가 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 분할된 서브 세트들 중 하나를 트리(tree)의 각 리프 노드(leaf node)가 표시하고, 트리의 각 부모 노드가 그 자식 노드들 모두의 프리미티브들의 서브 세트들의 결합에 대응하는 프리미티브들의 서브 세트를 표시하도록 구성되는, 프리미티브들의 세트를 표시하기 위한 트리 표시를 생성하는 단계와,
상기 트리 표시의 각 노드에 대하여, 노드가 표시하는 프리미티브들의 서브 세트를 나타내는 데이터, 노드가 표시하는 프리미티브들의 서브 세트의 프리미티브들이 사용하는 버텍스들을 나타내는 데이터, 및 노드가 표시하는 프리미티브들의 서브 세트가 내부에 있는 공간의 용적을 나타내는 데이터를 생성하여 저장하는 단계와.
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 생성된 트리 표시를 순회해서 상기 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하는 단계 및
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 출력 프레임에 대해 상기 생성된 트리 표시를 순회해서 결정된 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 렌더링하는 단계를 포함하는 것을 특징으로 하는, 방법.
- 제 1 항에 있어서,
프리미티브들의 세트는 상기 출력 프레임의 드로우 콜(draw call)에 대한 프리미브들의 세트를 포함하는 것을 특징으로 하는, 방법.
- 제 1 항 또는 제 2 항에 있어서,
상기 프리미티브들의 세트 내의 각 프리미티브는 상기 프리미티브를 식별하고 상기 프리미티브들의 세트의 렌더링 순서로 상기 프리미티브의 위치를 나타내는 관련 인덱스 값을 갖고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 상기 프리미티브들의 세트를 상기 프리미티브들의 복수의 서브 세트들로 분할하는 단계는 상기 프리미티브들의 세트에 대한 인덱스 값들의 범위를 인덱스 값들의 복수의 서브 범위들로 분할하는 단계를 포함하고, 그것에 의해 프리미티브들의 복수의 서브 세트를 제공하고, 프리미티브들의 각 서브 세트는 상기 인덱스 값들의 서브 범위에 대응하는, 방법.
- 제 1 항 또는 제 2 항에 있어서,
노드에 대한 프리미티브들이 사용하는 버텍스들을 나타내는 상기 데이터는, 노드와 관련되는 프리미티브들이 사용하는 버텍스들을 나타내는 비트 맵을 포함하는 것을 특징으로 하는, 방법.
- 제 1 항 또는 제 2 항에 있어서,
노드에 대한 프리미티브들이 사용하는 버텍스들을 나타내는 상기 데이터는 노드와 관련되는 프리미티브들이 사용하는 버텍스들을 나타내는 한 개 이상의 버텍스 인덱스 범위를 포함하는 것을 특징으로 하는, 방법.
- 제 1 항 또는 제 2 항에 있어서,
프리미티브들의 세트에 대한 상기 트리 표시는, 맨 먼저 리프 노드들을 구성하고, 그 다음 그 각각의 자식 노드들을 병합해서 각 더 높은 레벨 노드를 구성함으로써 구성되는 것을 특징으로 하는, 방법.
- 제 6 항에 있어서,
상기 자식 노드들은 자기들과 관련된 버텍스 인덱스 범위들을 갖고,
부모 노드에 대한 자식 노드들의 버텍스 인덱스 범위들을 병합할 때,
2개의 자식 노드 버텍스 인덱스 범위가 겹치거나, 버텍스 인덱스들의 임계 개수보다 적거나 같게 분할되면, 상기 2개의 자식 노드 버텍스 인덱스 범위를 부모 노드에 대한 단일의 결합된 버텍스 인덱스 범위로 결합하는 것을 포함하는 것을 특징으로 하는, 방법.
- 제 1 항 또는 제 2 항에 있어서,
프레임에 대해 렌더링될 프리미티브들의 세트의 공간적 코히런시(spatial coherency)의 척도(measure)를 결정하고, 상기 공간적 코히런시가 스레숄드 공간적 코히런시 척도(threshold spatial coherency measure)보다 아래에 있다고 결정되면, 프리미티브들의 세트에 대한 트리 표시를 생성하지 않고, 상기 공간적 코히런시가 상기 스레숄드 공간적 코히런시 척도보다 위에 있다고 결정되면, 상기 프리미티브들의 세트에 대한 트리 표시를 생성하는 것을 포함하는 것을 특징으로 하는, 방법.
- 삭제
- 그래픽 처리 시스템에서 출력 프레임에 대해 렌더링될 복수의 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하는 방법으로서, 상기 방법은
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 복수의 프리미티브들의 세트를 표시하는 트리 표시를 순회해서 상기 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하는 단계 및
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 출력 프레임에 대해 상기 트리 표시를 순회해서 결정된 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 렌더링하는 단계를 포함하고,
상기 트리 표시는, 프리미티브들의 세트가 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 분할된 프리미티브들의 복수의 서브 세트들 중 하나를 트리의 각 리프 노드가 표시하고, 트리의 각 부모 노드가 그 자식 노드들 모두의 프리미티브들의 서브 세트들의 결합에 대응하는 프리미티브들의 서브 세트를 표시하고, 상기 프리미티브들의 서브 세트들이 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 트리의 리프 노드들에 할당되도록 구성되며,
노드가 표시하는 프리미티브들의 서브 세트; 노드가 표시하는 프리미티브들의 서브 세트 내의 프리미티브들이 사용하는 버텍스들; 및 노드가 표시하는 프리미티브들의 서브 세트가 내부에 있는 공간의 용적을 나타내는 상기 트리 표시의 각 노드에 대하여 데이터가 저장되는 것을 특징으로 하는, 방법.
- 제 10 항에 있어서,
트리의 한 개 이상의 노드에 대하여, 노드에 대한 프리미티브들의 서브 세트가 프레임에 대한 뷰 프러스텀(view frustum)에 맞서 내부에 있다고 표시되는 공간의 용적을 차례로 테스트하여 상기 표시된 공간의 용적 중의 어느 것이 상기 뷰 프러스텀 내에 있는지 아닌지를 결정하는 것과,
뷰 프러스텀 테스트의 결과를 이용해서 상기 렌더링될 프리미티브들의 세트 및 버텍스들의 세트 내에 노드에 대한 프리미티브들의 서브 세트 및 버텍스들의 세트를 포함하는지 여부를 결정하는 것을 포함하는 것을 특징으로 하는, 방법.
- 제 11 항에 있어서,
상기 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 리스트를, 그 리스트 내의 프리미티브들의 세트에 대한 모든 프리미티브들로 시작하고, 그 다음 트리의 노드들이 상기 뷰 프러스텀 테스트에 의해 추가로 처리되는 것이 거절되면 프리미티브들을 그 리스트로부터 제거함으로써, 구성하는 것을 포함하는 것을 특징으로 하는, 방법.
- 제 11 항에 있어서,
트리의 노드들이 상기 뷰 프러스텀 테스트를 통과하면 버텍스들의 마스터 리스트에 버텍스들을 부가해서 상기 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 렌더링될 버텍스들의 리스트를 구성하는 것을 포함하는 것을 특징으로 하는, 방법.
- 제 13 항에 있어서,
트리 노드들이 자기들과 관련된 버텍스 인덱스 범위들을 갖고, 2개의 노드 버텍스 인덱스 범위가 겹치거나, 버텍스 인덱스들의 임계 개수보다 적거나 같게 분할되면, 상기 2개의 노드 버텍스 인덱스 범위가 마스터 버텍스 인덱스 리스트에 대한 단일의 결합된 버텍스 인덱스 범위로 병합되는 것을 특징으로 하는, 방법.
- 제 10 항에 있어서,
프리미티브들의 세트에 대한 버텍스 쉐이더(vertex shader) 프로그램을 분석해서, 프리미티브들의 세트에 적용되는 버텍스 쉐이딩 프로그램이 버텍스들에 대한 변환을 이용해 버텍스들을 스크린 공간으로 변환할지를 결정하고, 만약 그렇다면 뷰 프러스텀에 맞서 상기 트리 표시의 노드를 테스트할 때 사용하기 위한 상기 버텍스 쉐이더 프로그램으로부터 스크린 공간 변환에 관한 정보를 추출하는 버텍스 쉐이더 컴플라이어를 더 구비하는 것을 특징으로 하는, 방법.
- 제 1 항, 제 2 항 또는 제 10 항 중 어느 한 항에 있어서,
상기 그래픽 처리 시스템은 호스트 프로세서 및 그래픽 프로세서를 구비하고, 상기 호스트 프로세서는 상기 그래픽 프로세서에 대한 드라이버를 실행하고, 상기 방법은,
프리미티브들의 세트에 대한 트리 표시를 생성하고, 그 트리 표시를 이용해서 렌더링될 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 결정하며, 그 다음 상기 그래픽 프로세서에 렌더링될 그렇게 식별된 프리미티브들의 세트 및 버텍스들의 세트를 표시하는 상기 호스트 프로세서에 대한 드라이버와,
그렇게 표시된 프리미티브들의 세트 및 버텍스들의 세트를 렌더링하는 상기 그래픽 프로세서를 구비하는 것을 특징으로 하는, 방법.
- 그래픽 처리 시스템에서 출력 프레임에 대해 렌더링될 복수의 프리미티브들의 세트를 처리하는 장치로서, 프리미티브들의 세트 내의 각 프리미티브는 한 개 이상의 버텍스와 관련되어 있으며, 상기 장치는,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 상기 프리미티브들의 세트를 프리미티브들의 복수의 서브 세트들로 분할하고,
상기 프리미티브들의 서브 세트가 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 트리의 리프 노드들에 할당되고, 상기 프리미티브들의 세트가 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 분할된 서브 세트들 중 하나를 트리의 각 리프 노드가 표시하고, 트리의 각 부모 노드가 그 자식 노드들 모두의 프리미티브들의 서브 세트들의 결합에 대응하는 프리미티브들의 서브 세트를 표시하도록 구성되는, 프리미티브들의 세트를 표시하기 위한 트리 표시를 생성하며,
상기 트리 표시의 각 노드에 대하여, 노드가 표시하는 프리미티브들의 서브 세트를 나타내는 데이터, 노드가 표시하는 프리미티브들의 서브 세트의 프리미티브들이 사용하는 버텍스들을 나타내는 데이터, 및 노드가 표시하는 프리미티브들의 서브 세트가 내부에 있는 공간의 용적을 나타내는 데이터를 생성하여 저장하고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 생성된 트리 표시를 순회해서 상기 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 출력 프레임에 대해 상기 생성된 트리 표시를 순회해서 결정된 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 렌더링하도록
구성된 처리 회로를 구비하는 것을 특징으로 하는, 장치.
- 제 17 항에 있어서,
노드에 대한 프리미티브들이 사용하는 버텍스들을 나타내는 상기 데이터는 노드와 관련되는 프리미티브들이 사용하는 버텍스들을 나타내는 비트 맵을 포함하는 것을 특징으로 하는, 장치.
- 제 17 항에 있어서,
노드에 대한 프리미티브들이 사용하는 버텍스들을 나타내는 상기 데이터는, 노드와 관련되는 프리미티브들이 사용하는 버텍스들을 나타내는 한 개 이상의 버텍스 인덱스 범위를 포함하는 것을 특징으로 하는, 장치.
- 제 17 항, 제 18 항, 또는 제 19 항 중 어느 한 항에 있어서,
상기 처리 회로는,
프레임에 대해 렌더링될 프리미티브들의 세트의 공간적 코히런시의 척도를 결정하고, 이 공간적 코히런시가 스레숄드 공간적 코히런시 척도보다 아래에 있다고 결정되면, 프리미티브들의 세트에 대한 트리 표시를 생성하지 않고, 상기 공간적 코히런시가 상기 스레숄드 공간적 코히런시 척도보다 위에 있다고 결정되면, 상기 프리미티브들의 세트에 대한 트리 표시를 생성하도록 더 구성되는 것을 특징으로 하는, 장치.
- 제 17 항, 제 18 항, 또는 제 19 항 중 어느 한 항에 있어서,
상기 프리미티브들의 세트 내의 각 프리미티브는 상기 프리미티브를 식별하고 상기 프리미티브들의 세트의 렌더링 순서로 상기 프리미티브의 위치를 나타내는 관련 인덱스 값을 갖고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 상기 프리미티브들의 세트를 상기 프리미티브들의 복수의 서브 세트들로의 분할은 상기 프리미티브들의 세트에 대한 인덱스 값들의 범위를 인덱스 값들의 복수의 서브 범위들로의 분할을 포함하고, 그것에 의해 프리미티브들의 복수의 서브 세트를 제공하고, 프리미티브들의 각 서브 세트는 상기 인덱스 값들의 서브 범위에 대응하는 것을 특징으로 하는, 장치.
- 그래픽 처리 시스템에서 출력 프레임에 대해 렌더링될 복수의 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하는 장치로서,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 복수의 프리미티브들의 세트를 표시하는 트리 표시를 순회해서 상기 출력 프레임에 대한 프리미티브들의 세트를 처리할 때 렌더링될 프리미티브들의 세트 및 버텍스들의 세트를 결정하고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 상기 출력 프레임에 대해 상기 트리 표시를 순회해서 결정된 상기 프리미티브들의 세트 및 상기 버텍스들의 세트를 렌더링하도록 구성된 처리회로를 구비하고,
상기 트리 표시는, 프리미티브들의 세트가 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 분할된 프리미티브들의 복수의 서브 세트들 중 하나를 트리의 각 리프 노드가 표시하고, 트리의 각 부모 노드가 그 자식 노드들 모두의 프리미티브들의 서브 세트들의 결합에 대응하는 프리미티브들의 서브 세트를 표시하고, 상기 프리미티브들의 서브 세트들이 상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거한 순서로 트리의 리프 노드들에 할당되도록 구성되며,
노드가 표시하는 프리미티브들의 서브 세트; 노드가 표시하는 프리미티브들의 서브 세트 내의 프리미티브들이 사용하는 버텍스들; 및 노드가 표시하는 프리미티브들의 서브 세트가 내부에 있는 공간의 용적을 나타내는 상기 트리 표시의 각 노드에 대하여 데이터가 저장되는 것을 특징으로 하는, 장치.
- 제 21 항에 있어서,
상기 처리회로는
트리의 한 개 이상의 노드에 대하여, 노드에 대한 프리미티브들의 서브 세트가 프레임에 대한 뷰 프러스텀에 맞서 내부에 있다고 표시되는 공간의 용적을 차례로 테스트하여 상기 표시된 공간의 용적 중의 어느 것이 상기 뷰 프러스텀 내에 있는지 아닌지를 결정하고,
뷰 프러스텀 테스트의 결과를 이용해서 상기 렌더링될 프리미티브들의 세트 및 버텍스들의 세트 내에 노드에 대한 프리미티브들의 서브 세트 및 버텍스들의 세트를 포함하는지 여부를 결정하도록 구성되는 것을 특징으로 하는, 장치.
- 제 17 항, 제 18 항, 제 19 항 또는 제 22 항 중 어느 한 항에 있어서,
프리미티브들의 세트에 대한 버텍스 쉐이더 프로그램을 분석해서, 프리미티브들의 세트에 적용되는 버텍스 쉐이딩 프로그램이 버텍스들에 대한 변환을 이용해 버텍스들을 스크린 공간으로 변환할지를 결정하고, 프리미티브들의 세트에 적용되는 상기 버텍스 쉐이딩 프로그램이 버텍스들에 대한 변환을 이용해 버텍스들을 스크린 공간으로 변환하면, 뷰 프러스텀에 맞서 상기 트리 표시의 노드를 테스트할 때 사용하기 위한 상기 버텍스 쉐이더 프로그램으로부터 스크린 공간 변환에 관한 정보를 추출하는 버텍스 쉐이더 컴플라이어를 더 구비하는 것을 특징으로 하는, 장치.
- 프로그램이 데이터 처리 수단 상에서 작동할 때 청구항 1, 2 또는 10 중 어느 한 항의 방법을 수행하기 위한 컴퓨터 소프트웨어 코드를 구비하는, 매체에 기억된 컴퓨터 프로그램.
- 제 10 항에 있어서,
상기 프리미티브들의 세트 내의 각 프리미티브는 상기 프리미티브를 식별하고 상기 프리미티브들의 세트의 렌더링 순서로 상기 프리미티브의 위치를 나타내는 관련 인덱스 값을 갖고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 상기 프리미티브들의 세트를 상기 프리미티브들의 복수의 서브 세트들로의 분할은 상기 프리미티브들의 세트에 대한 인덱스 값들의 범위를 인덱스 값들의 복수의 서브 범위들로의 분할을 포함하고, 그것에 의해 프리미티브들의 복수의 서브 세트를 제공하고, 프리미티브들의 각 서브 세트는 상기 인덱스 값들의 서브 범위에 대응하는, 방법.
- 제 22 항에 있어서,
상기 프리미티브들의 세트 내의 각 프리미티브는 상기 프리미티브를 식별하고 상기 프리미티브들의 세트의 렌더링 순서로 상기 프리미티브의 위치를 나타내는 관련 인덱스 값을 갖고,
상기 프리미티브들의 세트 내의 상기 프리미티브들의 렌더링 순서에 근거해 상기 프리미티브들의 세트를 상기 프리미티브들의 복수의 서브 세트들로의 분할은 상기 프리미티브들의 세트에 대한 인덱스 값들의 범위를 인덱스 값들의 복수의 서브 범위들로의 분할을 포함하고, 그것에 의해 프리미티브들의 복수의 서브 세트를 제공하고, 프리미티브들의 각 서브 세트는 상기 인덱스 값들의 서브 범위에 대응하는, 장치.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1404924.1A GB2524287B (en) | 2014-03-19 | 2014-03-19 | Graphics processing systems |
GB1404924.1 | 2014-03-19 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150109276A KR20150109276A (ko) | 2015-10-01 |
KR102393665B1 true KR102393665B1 (ko) | 2022-05-03 |
Family
ID=50635045
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020150036445A KR102393665B1 (ko) | 2014-03-19 | 2015-03-17 | 그래픽 처리 시스템 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10176627B2 (ko) |
KR (1) | KR102393665B1 (ko) |
CN (1) | CN104966265B (ko) |
GB (1) | GB2524287B (ko) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2526598B (en) | 2014-05-29 | 2018-11-28 | Imagination Tech Ltd | Allocation of primitives to primitive blocks |
JP6290443B2 (ja) * | 2014-10-31 | 2018-03-07 | 株式会社東芝 | 通信制御装置、通信制御方法およびプログラム |
KR102570584B1 (ko) * | 2015-12-02 | 2023-08-24 | 삼성전자 주식회사 | Bvh 트리를 구성하기 위한 방법 및 시스템 |
CN105511995B (zh) * | 2015-12-11 | 2018-04-17 | 中国航空工业集团公司西安航空计算技术研究所 | 一种图形处理器验证方法 |
GB2547250B (en) | 2016-02-12 | 2020-02-19 | Geomerics Ltd | Graphics processing systems |
CN105843603B (zh) * | 2016-03-17 | 2019-08-16 | 广州爱九游信息技术有限公司 | 图形处理的方法及装置 |
KR102651125B1 (ko) | 2016-04-06 | 2024-03-26 | 삼성전자주식회사 | 경로 렌더링을 수행하는 방법 및 장치 |
DE112016007098T5 (de) * | 2016-07-26 | 2019-04-18 | Hewlett-Packard Development Company, L.P. | Indexierung von voxeln für das 3d-drucken |
GB2561557B (en) * | 2017-04-13 | 2020-08-12 | Advanced Risc Mach Ltd | Graphics processing method and apparatus in which modified edge positions are used in rasterisation |
CN107729094B (zh) * | 2017-08-29 | 2020-12-29 | 口碑(上海)信息技术有限公司 | 一种用户界面渲染的方法及装置 |
CN107621951B (zh) * | 2017-08-29 | 2020-12-29 | 口碑(上海)信息技术有限公司 | 一种视图层级优化的方法及装置 |
CN111798558A (zh) * | 2020-06-02 | 2020-10-20 | 完美世界(北京)软件科技发展有限公司 | 数据处理方法及装置 |
US11288850B1 (en) * | 2021-03-02 | 2022-03-29 | Arm Limited | Identifying primitives and vertices to be rendered when rendering an output in a graphics processing system |
CN114398121B (zh) * | 2021-12-21 | 2024-02-27 | 北京五八信息技术有限公司 | 一种视图显示方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090167763A1 (en) * | 2000-06-19 | 2009-07-02 | Carsten Waechter | Quasi-monte carlo light transport simulation by efficient ray tracing |
US20100239186A1 (en) * | 2009-03-19 | 2010-09-23 | International Business Machines Corporation | Accelerated Data Structure Positioning Based Upon View Orientation |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5977977A (en) * | 1995-08-04 | 1999-11-02 | Microsoft Corporation | Method and system for multi-pass rendering |
US7230618B2 (en) * | 2000-06-19 | 2007-06-12 | Mental Images Gmbh | Generating images using multiple photon maps |
US8704837B2 (en) * | 2004-04-16 | 2014-04-22 | Apple Inc. | High-level program interface for graphics operations |
CN100527169C (zh) * | 2005-11-23 | 2009-08-12 | 北京航空航天大学 | 一种三维场景实时绘制系统 |
CN101196818A (zh) * | 2006-12-08 | 2008-06-11 | 上海全景数字技术有限公司 | 快速图形化开发系统 |
CN101067827B (zh) * | 2007-06-14 | 2010-06-09 | 上海创图网络科技发展有限公司 | 一种基于浏览器的三维网页实现方法 |
US8072460B2 (en) * | 2007-10-17 | 2011-12-06 | Nvidia Corporation | System, method, and computer program product for generating a ray tracing data structure utilizing a parallel processor architecture |
US8963918B2 (en) * | 2008-09-30 | 2015-02-24 | Microsoft Corporation | Ray tracing on graphics hardware using kd-trees |
US8902228B2 (en) * | 2011-09-19 | 2014-12-02 | Qualcomm Incorporated | Optimizing resolve performance with tiling graphics architectures |
KR101136737B1 (ko) * | 2011-10-07 | 2012-04-19 | (주)넥셀 | 그래픽 처리방법 및 그 장치 |
US8941676B2 (en) * | 2012-10-26 | 2015-01-27 | Nvidia Corporation | On-chip anti-alias resolve in a cache tiling architecture |
-
2014
- 2014-03-19 GB GB1404924.1A patent/GB2524287B/en active Active
-
2015
- 2015-03-05 US US14/639,867 patent/US10176627B2/en active Active
- 2015-03-17 KR KR1020150036445A patent/KR102393665B1/ko active IP Right Grant
- 2015-03-19 CN CN201510121433.7A patent/CN104966265B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090167763A1 (en) * | 2000-06-19 | 2009-07-02 | Carsten Waechter | Quasi-monte carlo light transport simulation by efficient ray tracing |
US20100239186A1 (en) * | 2009-03-19 | 2010-09-23 | International Business Machines Corporation | Accelerated Data Structure Positioning Based Upon View Orientation |
Also Published As
Publication number | Publication date |
---|---|
CN104966265A (zh) | 2015-10-07 |
US10176627B2 (en) | 2019-01-08 |
GB2524287B (en) | 2020-07-01 |
GB201404924D0 (en) | 2014-04-30 |
KR20150109276A (ko) | 2015-10-01 |
US20150269773A1 (en) | 2015-09-24 |
CN104966265B (zh) | 2020-03-13 |
GB2524287A (en) | 2015-09-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102393665B1 (ko) | 그래픽 처리 시스템 | |
CN105321199B (zh) | 图形处理流水线及其操作方法与介质 | |
CN110990516B (zh) | 地图数据的处理方法、装置和服务器 | |
JP5336067B2 (ja) | グラフィックスを処理する方法および装置 | |
US9619937B2 (en) | Methods and apparatus for processing computer graphics primitives in tile-based graphics rendering system | |
JP5600410B2 (ja) | グラフィックス処理システム | |
KR101824665B1 (ko) | 안티-앨리어싱된 샘플들의 분할 저장 | |
EP3504685B1 (en) | Method and apparatus for rendering object using mipmap including plurality of textures | |
KR20070026521A (ko) | 그래픽 시스템, 버텍스 데이터의 타일 기반 변환 방법 및컴퓨터 프로그램 제품 | |
US9519982B2 (en) | Rasterisation in graphics processing systems | |
KR20210066727A (ko) | 그래픽 처리 시스템 | |
KR20150119803A (ko) | 그래픽 처리 시스템 | |
US8345064B2 (en) | Method and system for tile binning using half-plane edge function | |
DE102013020807A1 (de) | Handhabung von nachgeordneten Z-Abdeckungsdaten in Rasteroperationen | |
US9342891B2 (en) | Stencil then cover path rendering with shared edges | |
US8723884B2 (en) | Scan converting a set of vector edges to a set of pixel aligned edges | |
WO2014087572A1 (ja) | 領域分割描画装置及び領域分割描画方法 | |
US20150178881A1 (en) | Parallel rendering of region-based graphics representations | |
DE102013017981A1 (de) | Optimierung einer Dreieck-Topologie für Pfad-Bilderzeugung | |
KR101953133B1 (ko) | 렌더링 장치 및 그 방법 | |
US20180165869A1 (en) | Method and apparatus for rendering object using mipmap including plurality of textures | |
US20150242988A1 (en) | Methods of eliminating redundant rendering of frames | |
JP7100624B2 (ja) | 優先プリミティブバッチのビニング及びソートを用いたハイブリッドレンダリング | |
KR101491896B1 (ko) | 이중모드 정점 분할기법을 이용한 지형 렌더링 가속화 방법 | |
US20030122850A1 (en) | Method and apparatus for determining bins to be updated for polygons, including triangles |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E90F | Notification of reason for final refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |