KR20150048228A - 대칭적 에지 스플릿팅에 의한 표면 테셀레이션 - Google Patents

대칭적 에지 스플릿팅에 의한 표면 테셀레이션 Download PDF

Info

Publication number
KR20150048228A
KR20150048228A KR1020157007984A KR20157007984A KR20150048228A KR 20150048228 A KR20150048228 A KR 20150048228A KR 1020157007984 A KR1020157007984 A KR 1020157007984A KR 20157007984 A KR20157007984 A KR 20157007984A KR 20150048228 A KR20150048228 A KR 20150048228A
Authority
KR
South Korea
Prior art keywords
coordinates
points
edge
ring
domain
Prior art date
Application number
KR1020157007984A
Other languages
English (en)
Other versions
KR101635334B1 (ko
Inventor
마다니 나리만 모엣지
지안 마오
비니트 고엘
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20150048228A publication Critical patent/KR20150048228A/ko
Application granted granted Critical
Publication of KR101635334B1 publication Critical patent/KR101635334B1/ko

Links

Images

Classifications

    • 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/20Finite element generation, e.g. wire-frame surface description, tesselation

Landscapes

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

Abstract

컴퓨터 그래픽에서의 렌더링을 위한 표면의 테셀레이션을 위한 시스템들 및 방법들. 테셀레이션의 경우, 상기 표면의 패치의 파라미터 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 세트가 포인트들의 상기 세트의 제 1 부분 (반절) 에 대한 좌표들의 제 1 세트와 함께 결정된다. 상기 제 1 에지를 따라 상주하는 포인트들의 상기 세트의 나머지, 즉 제 2의 부분 (반절) 에 대응하는 좌표들의 제 2 세트는 공식 1-x 를 사용하여 대칭적인 방식으로 좌표들의 제 1 세트로부터 컴퓨팅되며, x 는 상기 에지를 따른 제 1 부분의 포인트의 각 좌표를 나타내고, 1-x 는 그 길이가 1 로 정규화되는 동일한 에지를 따른 제 2 부분의 대응하는 포인트의 좌표이다. 테셀레이션은 또한 도메인을 패치에 맵핑되는 복수의 프리미티브들 (예를 들어, 삼각형들, 사각형들) 로 분할하기 위해, 제 1 링의 제 1 에지를 따라 상주하는 포인트들을 제 2 링의 제 2 에지를 따라 상주하는 포인트들과 스티치 (stitch) 하도록 구성된다.

Description

대칭적 에지 스플릿팅에 의한 표면 테셀레이션{SURFACE TESSELATION BY SYMMETRIC EDGE SPLITTING}
본 개시는 컴퓨터 그래픽을 렌더링하는 것의 일부로서 테셀레이션을 위한 기법들에 관한 것이다.
그래픽 프로세싱 유닛 (GPU) 은 테셀레이션 스테이지를 포함하는 그래픽 프로세싱 파이프라인을 구현할 수도 있다. 테셀레이션 스테이지는 GPU 상에서 표면을 복수의 프리미티브 (primitive) 들로 변환하여, 더욱 상세한 표면을 야기한다. 예를 들어, GPU 는 고해상도 표면에 대한 정보를 수신하기 보다는, 코어스한 (coarse) 표면에 대한 정보를 수신하고, 고해상도 표면을 생성할 수 있다. 코어스한 표면보다 오히려 고해상도 표면에 대한 정보를 수신하는 것은, 고해상도 표면을 정의하는데 필요한 정보의 양이 코어스한 해상도 표면을 정의하는데 필요한 정보의 양보다 훨씬 더 클 수도 있기 때문에, 대역폭 비효율적일 수도 있다.
일반적으로, 본 개시에 기술된 기법들은 테셀레이팅을 위해 사용되는 도메인 내에서 링의 에지의 제 1 및 제 2 부분들을 따라 포인트들에 대한 좌표들을 결정하는 것으로 지향된다. 일 예에서, 그래픽 프로세싱을 위한 테셀레이션 유닛은 에지의 제 1 부분을 따라 포인트들에 대한 좌표들을 결정할 수도 있다. 테셀레이션 유닛은 에지의 제 1 부분을 따른 포인트들에 대한 좌표들에 기초하여 에지의 제 2 부분에 따른 포인트들에 대한 좌표들을 결정할 수도 있다.
에지를 따른 포인트들은 그 도메인 내의 프리미티브들의 정점들 (vertices) 을 형성할 수도 있다. 제 1 부분의 포인트들의 좌표들로 제 2 부분의 포인트들의 좌표들을 결정함으로써, 예시의 테셀레이션 유닛은 도메인 내의 프리미티브들의 정점들 내의 대칭성을 활용할 수도 있다.
하나의 예에서, 본 개시는 그래픽 프로세싱을 위한 테셀레이션 유닛을 기술한다. 테셀레이션 유닛은 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하고, 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하며, 제 1 부분에 대한 좌표들의 제 1 세트에 기초하여 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하도록 구성된 제 1 유닛을 포함한다. 테셀레이션 유닛은 또한 도메인을 패치의 해상도를 증가시키기 위해 그 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해 제 2 링의 제 2 에지를 따라 상주하는 포인트들로, 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트에 기초하여, 제 1 링의 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 스티치 (stitch) 하도록 구성된 제 2 유닛을 포함하며, 여기서 제 2 링은 도메인 내의 제 1 링보다 내측에 있다.
다른 예에서, 본 개시는 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하는 단계, 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하는 단계, 제 1 부분에 대한 좌표들의 제 1 세트에 기초하여 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하는 단계, 및 도메인을 패치의 해상도를 증가시키기 위해 그 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해 제 2 링의 제 2 에지를 따라 상주하는 포인트들로, 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트에 기초하여, 제 1 링의 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 스티치 (stitch) 하는 단계를 포함하며, 여기서 제 2 링은 도메인 내의 제 1 링보다 내측에 있는, 테셀레이션의 방법을 기술한다.
다른 예에서, 본 개시는 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하는 수단, 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하는 수단, 제 1 부분에 대한 좌표들의 제 1 세트에 기초하여 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하는 수단, 및 도메인을 패치의 해상도를 증가시키기 위해 그 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해 제 2 링의 제 2 에지를 따라 상주하는 포인트들로, 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트에 기초하여, 제 1 링의 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 스티치 (stitch) 하는 수단을 포함하며, 여기서 제 2 링은 도메인 내의 제 1 링보다 내측에 있는, 테셀레이션 유닛을 기술한다.
다른 예에서, 본 개시는 중앙 프로세싱 유닛 (CPU), 그래픽 프로세싱 유닛 (GPU) 을 포함하는 디바이스를 기술한다. GPU 는 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하고, 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하며, 제 1 부분에 대한 좌표들의 제 1 세트에 기초하여 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하고, 도메인을 패치의 해상도를 증가시키기 위해 그 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해 제 2 링의 제 2 에지를 따라 상주하는 포인트들로, 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트에 기초하여, 제 1 링의 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 스티치 (stitch) 하도록 구성되고, 여기서 제 2 링은 도메인 내의 제 1 링보다 내측에 있는, 테셀레이션 유닛을 포함한다.
다른 예에서, 본 개시는, 싱크 (sink) 디바이스에서 실행될 때 프로그램가능 프로세서로 하여금, 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하게 하고, 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하게 하며, 제 1 부분에 대한 좌표들의 제 1 세트에 기초하여 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하게 하고, 도메인을 패치의 해상도를 증가시키기 위해 그 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해 제 2 링의 제 2 에지를 따라 상주하는 포인트들로, 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트에 기초하여, 제 1 링의 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 스티치 (stitch) 하게 하는 명령들을 포함하고, 여기서 제 2 링은 도메인 내의 제 1 링보다 내측에 있는, 비일시적 컴퓨터 판독가능 매체를 기술한다.
하나 이상의 예들의 상세들은 첨부하는 도면들 및 아래의 상세한 설명에서 기술된다. 다른 특징들, 목적들, 및 이점들은 상세한 설명 및 도면으로부터, 그리고 청구범위로부터 명백할 것이다.
도 1 은 본 개시에서 기술된 하나 이상의 예들에 따라 그래픽 프로세싱 파이프라인의 예를 구현할 수도 있는 그래픽 프로세싱 유닛 (GPU) 의 예를 도시하는 블록도이다.
도 2 는 본 개시에서 기술된 하나 이상의 예들에 따라 그래픽 프로세싱 파이프라인의 다른 예를 구현할 수도 있는 그래픽 프로세싱 유닛 (GPU) 의 다른 예를 도시하는 블록도이다.
도 3a 및 도 3b 는 본 개시에서 기술된 하나 이상의 예들에 따라 스티칭하기 위해 복수의 내측 링들을 포함하는 도메인 타입들의 예들을 도시하는 그래픽 도면들이다.
도 4a 및 도 4b 는 본 개시에서 기술된 하나 이상의 예들에 따라 복수의 프리미티브들로 분할된 도메인을 도시하는 그래픽 도면들이다.
도 5 는 본 개시에서 기술된 하나 이상의 예들에 따라 테셀레이션 유닛의 예를 더욱 상세하게 도시한 블록도이다.
도 6 은 본 개시에서 기술된 하나 이상의 예들에 따라 테셀레이션을 위한 포인트들을 결정하는 예시의 방법을 도시하는 플로우 챠트이다.
랩톱 컴퓨터, 태블릿 컴퓨터들, 스마트폰들, 및 디지털 미디어 플레이어들과 같은 현대의 모바일 디바이스들은 CPU (중앙 프로세싱 유닛), 그래픽 프로세싱 유닛 (GPU) 및 시스템 메모리를 포함할 수도 있다. 애플리케이션을 실행하는 것의 일부로서 그래픽을 렌더링하는 경우, CPU 는 GPU 로 명령들 및 그래픽 데이터를 송신한다. 일부 예들에서, 그래픽 데이터는 2D 또는 3D 공간 내의 포인트를 기술하는 하나 이상의 데이터 구조들을 포함할 수도 있는 정점들의 형태일 수도 있다.
CPU 상에서 실행하는 애플리케이션은 애플리케이션 프로그래밍 인터페이스 (API) 에 따라 GPU 와 통신할 수도 있다. 예를 들어, 애플리케이션은, 2 개의 예들로서, Microsoft® 에 의해 개발된 DirectX® API 또는 Khronos Group 에 의해 개발된 OpenGL® API 에 따라 GPU 와 통신할 수도 있다. 설명의 목적으로 그리고 이해를 용이하게 하기 위해, 본 개시에 기술된 기법들은 일반적으로 DirectX 및 OpenGL API 들의 콘텍스트에서 기술된다. 그러나, 본 개시의 양태들은 DirectX 및 OpenGL API 들에 제한되는 것으로 고려되지 않아야 하며, 본 개시에 기술된 기법들은 또한 마찬가지로 다른 API 들로 확장될 수도 있다.
DirectX 및 OpenGL 은 각각 GPU 에 의해 구현되는 그래픽 프로세싱 파이프라인들을 정의한다. 이들 그래픽 프로세싱 파이프라인들은 고정 함수 스테이지들 뿐아니라 프로그램가능 스테이지들의 조합을 포함할 수도 있다. Direct3D 11 API 및 OpenGL 4.x API 와 같은 API 들의 일부 최근 버전들은 GPU 에 의해 수행되는 테셀레이션 프로세스를 포함한다.
테셀레이션 프로세스는 객체의 표면의 (패치 (patch) 로서 지칭되는) 일부를 복수의 더 작은 부분들로 분할하는 것, 및 더 작은 부분들을 함께 상호 연결하는 것을 지칭한다. 이것은 테셀레이션 이전의 표면에 비해 더 고도로 상세화된 표면을 야기한다. 테셀레이션은 CPU 상에서 실행 중는 애플리케이션이 소수의 포인트들을 요구할 수도 있는 낮은 해상도를 갖는 표면을 정의하는 것을 허용하며, GPU 가 더 높은 해상도 표면을 생성하는 것을 허용한다.
테셀레이션에 의하면, CPU 상에서 실행 중인 애플리케이션이 더 높은 해상도 표면을 생성할 필요가 없을 수도 있고, 대신에 GPU 로 더 높은 해상도 표면의 생성을 오프로드 (offload) 할 수도 있기 때문에 계산 효율이 실현될 수도 있다. 또한, 낮은 해상도 표면이 더 높은 해상도 표면에 비해 더 적은 수의 포인트들을 포함하기 때문에 CPU 가 표면의 더 적은 수의 포인트들에 대한 정보를 송신할 필요가 있을 수도 있고, GPU 가 표면의 더 적은 수의 포인트들을 취출할 필요가 있을 수도 있기 때문에 대역폭 효율이 또한 실현될 수도 있다.
상술된 바와 같이, GPU 는 패치에 테셀레이션 프로세스를 적용한다. 패치는 프리미티브의 특수화된 타입으로서 고려될 수도 있다. 패치는 표면의 일부를 함께 형성하는 하나 이상의 제어 포인트들에 의해 정의된다. 예를 들어, 구와 같은 객체는 복수의 표며들로 분할될 수도 있다. 이러한 예에서, 표면들은 결합될 때 구를 형성하는 만곡된 표면들일 수도 있다. 그 표면들의 각각의 표면은 하나 이상의 패치들로 분할될 수도 있고, 여기서 그 패치들 각각은 하나 이상의 제어 포인트들에 의해 정의된다.
에지를 하나 이상의 더 작은 에지들로 분할 할 때, 각 에지는 제로 대 일 (zero-to-one) 좌표 시스템으로 정규화될 수도 있다. 예를 들어, 사각형 도메인에서, 4 개의 에지들 각각은 "0" 내지 "1" 로부터 정규화될 수도 있다. 이에 따라, 정규화된 사각형 도메인은 (0,0), (1,0), (0,1), (1,1) 의 직교 좌표들 (u, v) 를 포함할 수도 있다. 유사하게, 삼각형 도메인의 예에서, 3 개의 에지들의 각각은 "0" 내지 "1" 로부터 정규화될 수도 있다. 이에 따라, 정규화된 삼각형 도메인은 (0,0,1), (0,1,0), (1,0,0) 의 무게중심 좌표들 (u, v, w) 를 가질 수도 있다. 또, 삼각형 도메인 내의 정규화된 무게중심 좌표들을 사용하는 경우, 각각의 좌표 세트의 합은 항상 1 이며, 예를 들어 (0,0,1) 의 경우에 0 + 0 + 1 = 1; (0,1,0) 의 경우에 0 + 1 + 0 = 1; 그리고 (1,0,0) 의 경우에 1 + 0 + 0 = 1 이다. 일단 에지가 정규화되었다면, 테셀레이션 유닛은 테셀레이션 팩터에 기초하여 에지의 각 포인트의 좌표들을 결정할 수도 있다.
제어 포인트들은 좌표들 (예를 들어, 2 차원 패치들의 경우 x 및 y 좌표들, 및 3차원 패치들의 경우 x, y, 및 z 좌표들) 에 의해 정의될 수도 있고, 제어 포인트들은 패치의 정점들로서 고려될 수도 있다. 패치 내에는 임의의 수의 제어 포인트들이 존재할 수도 있다. 예를 들어, 일부 예들에서, 패치 내의 제어 포인트들의 수는 1 개의 제어 포인트와 최대 32 개의 제어 포인트들 사이일 수도 있다. 패치 내의 제어 포인트들의 수는 고정되거나 사용자 정의될 수도 있다.
다른 프리미티브 타입들과 달리, 패치들 내의 제어 포인트들은 임의의 방식으로 서로에 연결될 수도 있다. 즉, 패치들의 제어 포인트들이 연결되는 미리 정의된 방식이 존재하지 않는다. 예를 들어, 표준 삼각형 프리미티브는 3 개의 정점들을 포함하고, 그 프리미티브는 3 개의 정점들이 서로와 연결되어 삼각형을 형성하는 특정의 방식으로 정의된다. 제어 포인트들은, 한편, 형상을 형성하는 임의의 특정의 방식으로 연결될 필요가 없을 수도 있다. 오히려, 하나의 예로서, 패치 내의 일부 제어 포인트들은 서로 연결되어 삼각형을 형성할 수도 있고, 동일한 패치 내의 다른 제어 포인트들은 서로 연결되어 직사각형을 형성할 수도 있으며, 동일한 패치 내의 또 다른 제어 포인트들은 서로 연결되어 8 각형을 형성할 수도 있다. 다른 예로서, 제어 포인트들은 마찬가지로 동일한 타입의 형상들을 형성하기 위해 서로 연결되는 (예를 들어, 복수의 삼각형들만을 형성하기 위해 연결되는) 것이 가능할 수도 있다.
표면의 패치를 정의하는 제어 포인트들은 낮은 해상도 표면을 정의할 수도 있다. 테셀레이션 프로세스에 의해, 추가의 디테일이 더 높은 해상도 표면을 생성하기 위해 추가된다. 예를 들어, 구의 예를 다시 참조하면, 제어 포인트들만이 구를 형성하기 위해 사용된다면, 구는 평활한 만곡된 표면이라기 보다는 포인트들과 같은 계단 단차를 가져 둘쭉날쭉하게 보일 것이다. 테셀레이션 후에, 추가의 포인트들이 추가되어 이들 포인트들이 연견될 때 구는 그것이 평활한 구인 것처럼 보인다.
테셀레이션 프로세스는, DirectX API 및 OpenGL 4.x API 양자 모두에 따라, 2 개의 셰이더들 및 고정 함수 유닛을 포함한다. 셰이더는 GPU 의 프로그램가능 셰이더 코어 상에서 실행하는 소프트웨어 애플리케이션이며, 실질적인 기능적 유연성을 제공한다. 고정 함수 유닛은 고정 함수들을 수행하는 하드와이어드 로직 유닛이며, 기능적 유연성을 제공하지 않을 수도 있다. 그러나, 추가의 기능적 유연성을 제공하기 위해 프로그램가능 셰이더 코더를 사용하여 고정 함수 유닛의 기능들을 구현하는 것이 가능할 수도 있다. 설명의 목적으로만, 고정 함수 유닛에 대해 본 개시에서 기술된 함수들은 제한된 기능적 유연성을 제공하는 고정 함수로 기술된다.
DirectX API 에서, 테셀레이션 프로세스를 구현하도록 구성되는 그래픽 프로세싱 파이프라인은 도메인 셰이더 스테이지에 커플링되는 테셀레이션 스테이지에 커플링된 헐 셰이더 스테이를 포함한다. DirectX API 내의 헐 셰이더 스테이지 및 도메인 셰이더 스테이지는 테셀레이션 프로세스의 2 개의 셰이더들을 형성할 수도 있고, 테셀레이션 스테이지는 테셀레이션 프로세스의 고정 함수 유닛을 형성할 수도 있다. 그래픽 프로세싱 파이프라인 내의 다른 스테이지들은 테셀레이션 프로세스를 구현하지 않는 DirectX API 들 내의 스테이지들과 유사하다.
OpenGL 4.x API 에서, 테셀레이션 프로세스를 구현하도록 구성되는 그래픽 프로세싱 파이프라인은 테셀레이션 평가 셰이더에 커플링되는 프리미티브 생성기에 커플링된 테셀레이션 제어 셰이더를 포함한다. OpenGL 4.x 에서의 테셀레이션 제어 셰이더 및 테셀레이션 평가 셰이더는 테셀레이션 프로세스의 그 2 개의 셰이더들을 형성할 수도 있고, 프리미티브 생성기는 테셀레이션 프로세스의 고정 함수 유닛을 형성할 수도 있다. 그래픽 프로세싱 파이프라인 내의 다른 스테이지들은 테셀레이션 프로세스를 구현하지 않는 OpenGL API 들에서의 스테이지들과 유사할 수도 있다.
본 개시에 기술된 기법들은 일반적으로 테셀레이션 프로세스의 고정 함수 유닛 (예를 들어, DirectX 그래픽 프로세싱 파이프라인의 테셀레이션 스테이지 및 OpenGL 4.x 그래픽 프로세싱 파이프라인의 프리미티브 생성기) 과 관련된다. 간결함의 목적으로, 테셀레이션 프로세스의 고정 함수 유닛은 테셀레이션 유닛으로서 지칭된다. 예를 들어, 테셀레이션 유닛의 예들은 DirectX 그래픽 프로세싱 파이프라인의 테셀레이션 스테이지, OpenGL 4.x 그래픽 프로세싱 파이프라인의 프리미티브 생성기, 또는 그래픽 프로세싱 파이프라인들의 다른 타입들에 대한 임의의 다른 유사한 유닛을 포함한다.
더욱 상세히 설명되는 바와 같이, 테셀레이션 유닛에 선행하는 셰이더 (예를 들어, DirectX 에서의 헐 셰이더 스테이지 또는 OpenGL 4.x 에서의 테셀레이션 제어 셰이더) 는 패치의 해상도를 증가시키기 위해 (즉, 디테일 (detail) 을 증가시키기 위해) 그 패치에 대해 얼마나 많은 프리미티브들이 생성되어야 하는지를 나타내는 값들을 테셀레이션 유닛으로 송신한다. 테셀레이션 유닛에 선행하는 셰이더는 또한 테셀레이션 유닛으로 도메인 타입을 송신한다. 테셀레이션 유닛은 도메인을 프리미티브들로 분할하고, 도메인 내의 프리미티브들이 연결되는 방식 (즉, 도메인 내의 프리미티브들이 스티치되는 방식) 을 나타낸다.
도메인은 테셀레이션 유닛이 복수의 프리미티브들로 분할하는 템플릿 (template) 형상이다. 그 후 패치의 해상도를 증가시키기 위해 패치에 추가되는 것은 바로 이들 프리미티브들이다. 예를 들어, 도메인 내에서 생성되는 추가적인 프리미티브들은 그 후 패치상에 메시 (mesh) 를 형성하기 위해 사용되어, 패치에 디테일을 추가한다.
테셀레이션 유닛에 후속하는 셰이더 (예를 들어, DirectX 에서의 도메인 셰이더 또는 OpenGL 4.x 에서의 테셀레이션 평가 셰이더) 는 테셀레이션 유닛으로부터 테셀레이션 유닛에 의해 생성된 프리미티브들의 정점들, 및 정점들에 대한 연결성 정보를 수신한다. 테셀레이션 유닛에 후속하는 셰이더는 그 후 패치에 테셀레이션 유닛에 의해 생성된 바와 같은 프리미티브들을 추가하여 표면에 더 많은 해상도를 추가한다.
본 개시에 기술된 기법들에 따르면, 그래픽 프로세싱을 위한 테셀레이션 유닛은 도메인 내의 링의 에지를 따른 포인트들의 좌표들을, 동일한 에지를 따른 다른 포인트들에 기초하여 결정하도록 구성될 수도 있다. 이러한 방식으로, 좌표들이 컴퓨팅될 필요가 있는 더 소수의 포인트들이 존재할 수도 있기 때문에 계산 효율이 달성될 수도 있다.
예를 들어, 테셀레이션 유닛은 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정할 수도 있다. 테셀레이션 유닛은 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하고, 제 1 부분에 대한 좌표들의 제 1 세트에 기초하여 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정할 수도 있다.
테셀레이션 유닛은 또한 도메인을 패치의 해상도를 증가시키기 위해 그 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해 제 2 링의 제 2 에지를 따라 상주하는 포인트들로, 좌표들의 제 1 세트 및 좌표들의 제 2 세트에 기초하여, 제 1 링의 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 스티치하도록 구성될 수도 있다. 이러한 예에서, 제 2 링은 도메인 내에서 제 1 링보다 내측에 있다.
여러 예들에서, 제 1 부분을 따라 상주하는 포인트들 및 제 2 부분을 따라 상주하는 포인트들은 서로에 대칭적일 수도 있다. 예를 들어, 에지의 제 2 반절은 제 1 반절에 대해 대칭적이다. 이에 따라, 포인트들의 제 1 부분에서의 각 포인트는 포인트들의 제 2 부분에서의 대응하는 포인트와 대칭이다.
에지 상의 마지막 포인트에 대한 좌표는 이하에 더욱 상세히 기술된 이유들로, 고정 포인트 1 과 동일할 수도 있다. 따라서, 제 1 부분에 대한 좌표들이 생성되고 세트 (X) 에 의해 표현되는 경우, 제 2 부분 상의 포인트들에 대한 좌표는 세트 (1-X) 와 동일하다.
예시의 시스템에서, 테셀레이션 유닛은 제 1 부분의 포인트에 대한 좌표를 결정하고, 그 좌표를 버퍼에 저장할 수도 있다. 동시에 (예를 들어, 병렬로), 테셀레이션 유닛은 그 버퍼에 또는 다른 버퍼에 1 마이너스 제 1 부분의 포인트에 대한 좌표의 값을 저장할 수도 있다. 1 마이너스 제 1 부분의 포인트에 대한 좌표의 값은 제 2 부분에서의 포인트에 대한 좌표일 수도 있다. 이러한 예에서, 제 2 부분에서의 포인트는 제 1 부분에서의 포인트와 대칭일 수도 있다.
이러한 방식으로, 테셀레이션 유닛은 세트 (X) 에 의해 표현되는, 에지의 제 1 부분에 대한 포인트들을 생성할 때 1-X 값들 (예를 들어, 에지의 제 2 부분의 포인트들에 대한 좌표들) 을 저장하는 버퍼를 사용할 수도 있다. 세트 (1-X) 가 필요로되는 경우, 그 값들은 에지의 제 2 부분을 따른 포인트들에 대한 좌표들을 재계산 (re-calculating) 하기 보다는 후속하는 클록 사이클들에서 버퍼로부터 판독될 수 있다.
이러한 경우, 테셀레이션 유닛 내의 여러 회로는 이러한 회로가 에지의 제 2 부분을 따른 포인트들에 대한 좌표들을 결정하지 않도록 이러한 기간 동안 클록 게이팅될 (clock gated) 수도 있다. 이것은 에지의 제 2 부분을 따른 포인트들에 대한 좌표들을 결정하는데 사용되었을 회로가 클록 게이팅으로 인해 본질적으로 턴 오프되기 때문에 상당한 전력을 절약하는 것을 초래한다.
또, 에지의 모든 좌표들이 스루풋을 배가시키도록 결정될 때까지 최후까지 기다리는 대신에, 생성된 포인트들을 즉시 사용함으로써 스루풋이 증가될 수도 있다. 예를 들어, 이러한 경우에, 테셀레이션 유닛은 제 1 부분 및 제 2 부분을 따른 포인트들에 대한 좌표들을 동시에 결정할 수도 있다. 이러한 예에서, 테셀레이션 유닛이 제 1 부분 내의 마지막 포인트에 대한 좌표를 결정하는 것을 완료한 경우, 에지의 제 1 부분 및 제 2 부분을 따른 포인트들에 대한 좌표들이 프로세싱에 이용가능하다. 이러한 방식으로, 그래픽 프로세싱 파이프라인에서 더 아래에 있는 유닛들은, 테셀레이션 유닛이 한 번에 하나씩 제 1 부분 및 제 2 부분 양자 모두에서의 포인트들 각각에 대한 좌표들을 결정했던 경우에 비해 절반의 시간으로 에지를 따른 모든 포인트들에 대한 좌표들을 취출할 수 있을 수도 있다.
도 1 은 본 개시에서 기술된 하나 이상의 예들에 따라 그래픽 프로세싱 파이프라인의 예를 구현할 수도 있는 그래픽 프로세싱 유닛 (GPU) 의 예를 도시하는 블록도이다. 도 1 은 그래픽 프로세싱 유닛 (GPU) (12), 시스템 메모리 (14), 및 중앙 프로세싱 유닛 (CPU) (16) 을 포함하는 디바이스 (10) 를 도시한다. 디바이스 (10) 의 예들은 모바일 무선 전화들, 비디오 디스플레이들을 포함하는 비디오 게이밍 콘솔들, 모바일 화상 회의 유닛들, 랩톱 컴퓨터들, 데스크톱 컴퓨터들, 테레비젼 셋톱 박스들 등을 포함하지만, 이들에 제한되지 않는다.
CPU (16) 는 여러 타입들의 애플리케이션들을 실행할 수도 있다. 그 애플리케이션들의 예들은 웹 브라우저들, 이메일 애플리케이션들, 스프레드시트들, 비디오 게임들, 또는 디스플레이를 위한 관람가능한 객체들을 생성하는 다른 애플리케이션들을 포함한다. 하나 이상의 애플리케이션들의 실행을 위한 명령들은 시스템 메모리 (14) 내에 저장될 수도 있다. CPU (16) 는 추가의 프로세싱을 위해 GPU (12) 로 생성된 관람가능 객체들의 그래픽 데이터를 송신할 수도 있다.
예를 들어, GPU (12) 는 그래픽 데이터를 프로세싱하기 위해 잘 기능하는, 대량 병렬 프로세싱을 허용하는 특수화된 하드웨어일 수도 있다. 이러한 식으로, CPU (16) 는 GPU (12) 에 의해 더 양호하게 핸들링되는 그래픽 프로세싱을 오프로드한다. CPU (16) 는 특정의 애플리케이션 프로세싱 인터페이스 (API) 에 따라 GPU (12) 와 통신할 수도 있다. 그러한 API 들의 예들은 Microsoft® 에 의한 DirectX® API 및 Khronos Group 에 의한 OpenGL® API 를 포함한다; 그러나 본 개시의 양태들은 DirectX 및 OpenGL API 들에 제한되지 않고, 개발되어 왔고, 현재 개발되고 있으며, 또는 미래에 개발될 API 들의 다른 타입들에 확장될 수도 있다.
GPU (12) 가 CPU (16) 로부터 그래픽 데이터를 수신하는 방식을 정의하는 것에 더하여, API 들은 GPU (12) 가 구현할 특정의 그래픽 프로세싱 파이프라인을 정의할 수도 있다. 도 1 에서 GPU (12) 는 Direct3D 11 API 에 의해 정의된 그래픽 프로세싱 파이프라인을 도시한다. 더욱 상세히 기술되는 바와 같이, 도 2 는 OpenGL 4.x API 의 그래픽 프로세싱 파이프라인을 도시한다.
CPU (16) 및 GPU (12) 의 예들은 디지털 신호 프로세서 (DSP), 범용 마이크로프로세서, 주문자 반도체 (ASIC), 필드 프로그램가능 로직 어레이 (FPGA), 또는 다른 등가의 집적되거나 이산의 로직 회로를 포함하지만, 이들에 제한되지 않는다. 일부 예들에서, GPU (12) 는 GPU (12) 에 그래픽 프로세싱에 적합한 대량 병렬 프로세싱 성능들을 제공하는 집적되고 및/또는 이산의 로직 회로를 포함하는 특수화된 하드웨어일 수도 있다. 일부 예들에서, GPU (12) 는 또한 범용 프로세싱을 포함할 수도 있고, 범용 GPU (GPGPU) 로서 지칭될 수도 있다. 본 개시에 기술된 기법들은 또한 GPU (12) 가 GPGPU 인 예들에 적용가능할 수도 있다.
시스템 메모리 (14) 는 하나 이상의 컴퓨터 판독가능 저장 매체를 포함할 수도 있다. 시스템 메모리 (14) 의 예들은 램덤 액세스 메모리 (RAM), 리드 온리 메모리 (ROM), 전기적으로 소거가능한 프로그램가능 리드 온리 메모리 (EEPROM), 플래시 메모리, 또는 명령들 및/또는 데이터 구조들의 형태로 원하는 프로그램 코드를 반송하거나 저장하는 데 사용될 수 있고 컴퓨터 또는 프로세서에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이들에 제한되지 않는다.
일부 양태들에서, 시스템 메모리 (14) 는 CPU (16) 및/또는 GPU (12) 로 하여금 본 개시에서 CPU (16) 및 GPU (12) 에 할당된 기능들을 수행하게 하는 명령들을 포함할 수도 있다. 이에 따라, 시스템 메모리 (14) 는 하나 이상의 프로세서들, 예를 들어 CPU (16) 및 GPU (12) 로 하여금 여러 기능들을 수행하게 하는 명령들을 포함하는 컴퓨터 판독가능 저장 매체일 수도 있다.
시스템 메모리 (14) 는, 일부 예들에서, 비일시적 저장 매체로서 고려될 수도 있다. 용어 "비일시적" 은 저장 매체가 반송파 또는 전파된 신호로 구현되지 않는 것을 나타낼 수도 있다. 그러나, 용어 "비일시적" 은 시스템 메모리 (14) 가 이동불가능하다는 것을 의미하도록 해석되지 않아야 한다. 하나의 예로서, 시스템 메모리 (14) 는 디바이스 (10) 로부터 제거되고, 다른 디바이스로 이동될 수도 있다. 다른 예로서, 시스템 메모리 (14) 와 실질적으로 유사한 시스템 메모리가 디바이스 (10) 내로 삽입될 수도 있다. 소정의 예들에서, 비일시적 저장 매체는 (예를 들어, RAM 에서) 시간의 경과에 따라 변할 수 있는 데이터를 저장할 수도 있다.
CPU (16) 상의 애플리케이션들의 실행은 CPU (16) 로 하여금 관람가능 콘텐츠를 형성하기 위해 함께 연결되는 복수의 프리미티브들을 생성하게 한다. 그 프리미티브들의 예들은 포인트들, 라인들, 삼각형들, 사각형들 또는 임의의 다른 타입의 다각형을 포함한다. CPU (16) 는 그들의 각각의 정점들에 의해 이들 프리미티브들을 정의할 수도 있다. 예를 들어, CPU (16) 는 그 정점들에 대한 좌표들 및 칼라 값들을 정의할 수도 있다. 좌표 값들은 3 차원 (3D) 좌표들 또는 2D 좌표들일 수도 있다.
본 개시에 기술된 기법들에 따르면, 일부 경우들에서, CPU (16) 는 또한 패치로서 지칭되는 프리미티브의 특수한 타입을 생성할 수도 있다. 다른 프리미티브 타입들과 유사하게, 패치는 패치의 제어 포인트들로서 지칭된 복수의 정점들에 의해 정의될 수도 있다. 다른 프리미티브 타입들과 달리, 패치는 임의의 특정의 형상이 아닐 수도 있다. 예를 들어, CPU (16) 는 상호연결된 제어 포인트들이 임의의 원하는 형상을 형성하도록 임의의 방식으로 패치의 제어 포인트들을 상호 연결할 수도 있다. 삼각형들과 같은 다른 프리미티브 타입들의 경우, CPU (16) 는 (예를 들어, 정점들의 상호 연결이 삼각형을 야기하도록) 정점들이 상호 연결되는 특정의 방식을 정의할 수도 있다.
또한, 다른 프리미티브 타입들과 달리, 패치에서의 제어 포인트들의 수는 변화가능할 수도 있다. 예를 들어, CPU (16) 상에서 실행하는 애플리케이션은 패치에 대해 허용되는 제어 포인트들의 최대 수를 정의할 수도 있고, 또는 제어 포인트들의 최대 수는 사용자 정의될 수도 있다. 일부 예들에서, 패치 내의 제어 포인트들의 수는 1 내지 32 개의 제어 포인트들일 수도 있다; 그러나 본 개시에 기술된 기법들은 그렇게 제한되지 않는다.
CPU (16) 는 테셀레이션의 목적으로 제어 패치를 이용할 수도 있다. 상술된 바와 같이, 테셀레이션 프로세스는 CPU (16) 가 낮은 해상도로 관람가능한 객체의 표면의 일부를 정의하고, 그 표면의 더 높은 해상도 버전을 생성하기 위해 그 일부를 테셀레이팅하는 것을 지칭한다. 예를 들어, CPU (16) 는 제어 포인트들이 상호 연결될 때 패치가 관람가능한 객체의 표면의 일부를 형성하도록 패치의 제어 포인트들을 정의할 수도 있다. 표면이 패치의 제어 포인트들로부터만 형성되는 경우, 그 표면은 높은 해상도로 보이지 않을 수도 있고, 들쭉날쭉하게 보일 수도 있다. 테셀레이션에 의해, 추가의 프리미티브들이 패치에 추가되어, 프리미티브들이 상호 연결될 때 그들이 패치에 디테일을 추가하도록 하며, 이것은 패치의 해상도를 증가시키고 더 높은 품질의 관람가능한 콘텐츠를 초래한다.
GPU (12) 는 테셀레이션을 구현하도록 구성될 수도 있다. 이러한 방식으로, CPU (16) 는 더 높은 해상도 패치를 생성하기 위해 필요한 모든 추가의 프리미티브들에 대한 정점들을 정의할 필요가 없을 수도 있고, 이것은 CPU (16) 에 의해 수행되는 계산들을 절약한다. 또한, CPU (16) 는 더 적은 수의 정점들 (예를 들어, 제어 포인트들의 정점들, 그리고 추가될 프리미티브들의 정점들은 아님) 을 송신할 필요가 있을 수도 있고, GPU (12) 는 대응적으로 더 적은 수의 정점들을 수신할 팔요가 있을 수도 있으며, 이는 시스템 메모리 (14) 에의 더 적은 수의 액세스들로 인해 대역폭 효율을 증진시킨다.
그래픽 동작들을 수행하기 위해, GPU (12) 는 그래픽 프로세싱 파이프라인을 구현할 수도 있다. 그래픽 프로세싱 파이프라인은 GPU (12) 상에서 실행하는 소프트웨어 또는 펌웨어에 의해 정의된 바와 같은 기능들을 수행하는 것 및 매우 특정된 기능들을 수행하기 위해 하드와이어드되는 고정 함수 유닛들에 의한 기능들을 수행하는 것을 포함한다. GPU (12) 상에서 실행하는 소프트웨어 또는 펌웨어는 셰이더들로서 지칭될 수도 있고, 셰이더들은 GPU (12) 의 하나 이상의 셰이더 코어들 상에서 실행할 수도 있다. 셰이더들은 사용자가 임의의 생각가능한 방식으로 원하는 태스크들을 수행하도록 셰이더들을 설계할 수 있기 때문에 사용자들에게 기능적 유연성을 제공한다. 그러나, 고정 함수 유닛들은 고정 함수 유닛들이 태스크들을 수행하는 방식을 위해 하드와이어드된다. 이에 따라, 고정 함수 유닛들은 많은 기능정 유연성을 제공하지 않을 수도 있다.
상술된 바와 같이, 도 1 에 도시된 그래픽 프로세싱 파이프라인은 실질적으로 Direct3D 11 에 의해 정의된 바와 같은 그래픽 프로세싱 파이프라인이다. 이러한 예에서, GPU (12) 는 입력 어셈블러 스테이지 (18), 정점 셰이더 스테이지 (20), 헐 셰이더 스테이지 (22), 테셀레이션 스테이지 (24), 도메인 셰이더 스테이지 (26), 지오메트리 셰이더 스테이지 (28), 래스터라이저 스테이지 (30), 픽셀 셰이더 스테이지 (32), 및 출력 병합 스테이지 (34) 중 하나 이상을 포함할 수도 있다. GPU (12) 는 도시된 것들보다 더 많은 스테이지들을 포함할 수도 있고, GPU (12) 는 도시된 스테이지들의 모두를 반드시 포함하지는 않을 수도 있다. 또한, 스테이지들의 특정의 순서가 예시의 목적으로 제공되지만, 제한하는 것으로 고려되지 않아야 한다.
본 개시에 기술된 기법들에서, CPU (16) 는 시스템 메모리 (14) 로 패치의 제어 포인트들을 출력할 수도 있다. GPU (12) 는 그 후 시스템 메모리 (14) 로부터 제어 포인트들을 취출할 수도 있다. 이러한 방식으로, CPU (16) 는 GPU (12) 로 제어 포인트들을 송신할 수도 있다. 본 개시에서 사용되는 바와 같이, CPU (16) 가 GPU (12) 로 송신하는 것, 또는 GPU (12) 가 CPU (16) 로부터 수신하는 것은 일반적으로 CPU (16) 가 GPU (12) 가 그로부터 수신하는 시스템 메모리 (14) 로 기입하는 것을 포함할 수도 있다. 대안적으로, CPU (16) 가 직접 GPU (12) 로 송신하는 것, 그리고 GPU (12) 가 직접 CPU (16) 로부터 수신하는 것이 가능할 수도 있다.
입력 어셈블러 스테이지 (18) 는 CPU (16) 에 의해 정의된 바와 같은 시스템 메모리 (14) 로부터의 제어 포인트들을 판독하고, 패치를 형성하기 위해 그 제어 포인트들을 어셈블할 수도 있다. 예를 들어, 입력 어셈블러 스테이지 (18) 는 제어 포인트들의 좌표들, 칼라 값들, 및 다른 그러한 정보를 판독할 수도 있다. 그 좌표들, 칼라 값들, 및 다른 그러한 정보는 공통으로 제어 포인트들의 속성들로서 지칭될 수도 있다. 제어 포인트들의 속성들에 기초하여, 입력 어셈블러 스테이지 (18) 는 패치의 일반적인 레이아웃을 결정할 수도 있다. 이러한 방식으로, 입력 어셈블러 스테이지 (18) 는 패치를 형성하기 위해 제어 포인트들을 어셈블할 수도 있다. 입력 어셈블러 스테이지 (18) 는 고정 함수 유닛일 수도 있다.
정점 셰이더 스테이지 (20) 는 입력 어셈블러 스테이지 (18) 로부터 정점들 (예를 들어, 패치의 제어 포인트들) 을 프로세싱할 수도 있다. 예를 들어, 정점 셰이더 스테이지 (20) 는 변환들, 스키닝 (skinning), 모르핑 (morphing), 및 정점 라이팅 (per-vertex lighting) 과 같은 정점 동작들을 수행할 수도 있다. 정점 셰이더 스테이지 (20) 는 셰이더일 수도 있다.
헐 셰이더 스테이지 (22) 는 정점 셰이더 스테이지 (20) 에 의해 프로세싱된, 패치의 제어 포인트들을 수신하고, 그 제어 포인트들을 프로세싱하며, 프로세싱된 패치에 대한 제어 포인트들을 출력한다. 즉, 헐 셰이더 스테이지 (22) 는 정점 셰이더 스테이지 (20) 에 의해 프로세싱된 바와 같은 입력 패치를 수신하고, 그 입력 패치를 프로세싱하며, 출력 패치를 출력한다. 헐 셰이더 스테이지 (22) 는 입력 패치를 프로세싱하기 위한 여러 기능들을 수행할 수도 있다. 예를 들어, 헐 셰이더 스테이지 (22) 는 제어 포인트들의 로케이션들을 변경하기 위해 제어 포인트들의 좌표들을 변경할 수도 있고, 또는 심지어 제어 포인트들을 추가하거나 삭제할 수도 있다.
또, 헐 셰이더 스테이지 (22) 는 헐 셰이더 스테이지 (22) 에 의해 생성된 패치 (즉, 출력 패치) 에 얼마나 많은 프리미티브들이 추가되어야하는지를 나타내는 값들을 결정할 수도 있다. 헐 셰이더 스테이지 (22) 는 패치에 얼마나 많은 프리미티브들이 추가되어야 하는지를 결정할 여러 기준들을 이용할 수도 있다. 헐 셰이더 스테이지 (22) 가 얼마나 많은 프리미티브들이 패치에 추가되어야 하는지를 결정하기 위해 이용할 수도 있는 2 가지 예시의 기준들이 이하에 기술된다. 그러나, 본 개시의 양태들은 그렇게 제한되지 않고, 헐 셰이더 스테이지 (22) 는 얼마나 많은 프리미티브들이 패치에 추가되어야 하는지를 결정하기 위한 임의의 기준을 이용할 수도 있다.
일 예로서, 헐 셰이더 스테이지 (22) 는 얼마나 많은 프리미티브들이 추가되어야 하는지를 결정하기 위해 패치의 깊이를 나타내는 정보를 이용할 수도 있다. 예를 들어, 관람자의 관점으로부터 더 멀리 떨어져 있는 패치는, 더 떨어져 있는 객체들이 실생활에서 흐리하게 보이기 때문에, 높은 해상도를 필요로하지 않을 수도 있다. 그러나, 관람자의 관점으로부터 더 가까운 패치는, 더 가까운 거리에 있 객체들이 실생활에서 더 선명하게 보이기 때문에, 더 높은 해상도를 필요로 할 수도 있다. 이러한 예에서, 헐 셰이더 스테이지 (22) 는 서로에 대해 더 떨어져 있는 패치에는 더 적은 수의 프리미티브들을 추가해야하고, 더 가까운 패치에는 더 많은 프리미티브들이 추가되어야 한다고 결정할 수도 있다.
다른 예로서, 헐 셰이더 스테이지 (22) 는 패치의 사이즈에 기초하여 얼마나 많은 프리미티브들이 추가되어야 하는지를 결정할 수도 있다. 더 적은 사이즈의 패치의 경우, 헐 셰이더 스테이지 (22) 는 패치가 더 작은 영역을 포함하기 때문에 더 적은 수의 프리미티브들이 추가되어야 한다고 결정할 수도 있다. 더 큰 사이즈의 패치의 경우, 헐 셰이더 스테이지 (22) 는 패치가 더 큰 영역을 포함하기 때문에 더 많은 프리미티브들이 추가되어야 한다고 결정할 수도 있다.
얼마나 많은 프리미티브들이 추가되어야 하는지의 결정에 기초하여, 헐 셰이더 스테이지 (22) 는 테셀레이션 스테이지 (24) 로 도메인 타입 및 얼마나 많은 프리미티브들이 패치에 추가되어야 하는지를 나타내는 값들을 출력할 수도 있다. Direct3D 11 API 에서 패치에 얼마나 많은 프리미티브들이 추가되어야 하는지를 나타내는 값들은 테스팩터 (tessfactor) 들로서 지칭된다.
도메인은 테셀레이션 스테이지 (24) 가 테셀레이션 목적을 위해 사용하는 템플릿 형상으로서 고려될 수도 있다. 도메인 타입의 예들은 라인, 삼각형, 사각형 (예를 들어, 4 개의 변을 가진 다각형), 또는 임의의 다른 타입의 다각형을 포함한다. 패치들이 3차원 (3D) 표면 또는 2D 표면을 정의할지라도, 도메인은 2차원 (2D) 형상일 수도 있다. 도메인이 라인인 경우, 패치들이 3D 표면, 2D 표면, 또는 1D 표면을 정의할지라도, 도메인은 1차원 (1D) 형상 (즉, 라인) 일 수도 있다. 예시의 목적으로, 본 개시에 기술된 기법들은 2D 표면인 도메인에 대해 기술된다. 예를 들어, 기법들은 삼각형 또는 사각형인 도메인 형상들을 사용하여 기술된다.
일부 예들에서, 헐 셰이더 스테이지 (22) 는 도메인 타입을 명시적으로 나타내지 않을 수도 있다. 오히려, 테셀레이션 스테이지 (24) 가 송신된 테스팩터들의 수에 기초하여 도메인 타입을 결정할 수도 있다. 예를 들어, 4 개의 테스팩터들의 존재는 도메인 타입이 삼각형 도메인 타입이라는 것을 나타낼 수도 있고, 6 개의 테스팩터들의 존재는 도메인 타입이 사각형 도메인 타입이라는 것을 나타낼 수도 있다.
일부 예들에서, 사각형 도메인은 2D 직교 좌표들 (u, v) 에 의해 정의될 수도 있다. 일부 예들에서, 삼각형 도메인은 무게중심 좌표들에 의해 정의될 수도 있다. 무게중심 좌표들은 삼각형 내의 임의의 포인트를 식별하기 위해 3 개의 좌표들을 이용한다. 예를 들어, 삼각형 도메인의 정점들은 아래에 더욱 상세히 기술되는 바와 같이 (u, v, w) 로서 정의될 수도 있다. 삼각형 내의 임의의 포인트의 로케이션은 그의 정점에의 근접성을 나타내는 정점 가중화 (weighting) 에 의해 정의된다. 예를 들어, 포인트가 정점에 더 가까울 수록, 그의 정점 가중화는 더 높고, 포인트가 정점으로부터 더 멀리 떨어질 수록, 그의 정점 가중화는 더 낮다.
예로서, 삼각형의 정점들이 다음과같이 무게중심 좌표들 (u, v, w) 로 정의된다고 가정하라: (1, 0, 0), (0, 1, 0), 및 (0, 0, 1). 이러한 예에서, 중심 포인트는 정점들의 각각으로부터 동일한 거리이기 때문에 중심 포인트는 (1/3, 1/3, 1/3) 에 위치된다. 또한, 정점 좌표들의 주어진 정의에 의해, 이러한 예에서, 삼각형 도메인 내의 임의의 포인트에 대한 u, v, 및 w 좌표들의 합은 1 과 동일해야 한다.
직교 및 무게중심 좌표들은 설명의 목적으로만 기술되고, 제한하는 것으로 고려되지 않아야 한다. 다른 예들에서, 무게중심 좌표들 또는 직교 좌표들로 사각형 도메인을, 및 직교 좌표들 또는 무게중심 좌표들로 삼각형 도메인을 정의하는 것이 가능할 수도 있다. 일반적으로, 임의의 타입의 도메인은 임의의 좌표 시스템을 사용하여 정의될 수도 있다.
테셀레이션 스테이지 (24) 는 도메인을 복수의 프리미티브들로 테셀레이트 (예를 들어, 분할) 할 수도 있다. 이러한 예에서, 테셀레이션 스테이지 (24) 는 헐 셰이더 스테이지 (22) 에 의해 출력된 패치를 분할하는 것이 아니고, 도메인을 프리미티브들로 분할하는 것이다. 일부 예들에서, 테셀레이션 스테이지 (24) 는 심지어 헐 셰이더 스테이지 (22) 에 의해 출력된 패치에 액세스하지 않을 수도 있다. 테셀레이션 스테이지 (24) 는 고정 함수 유닛일 수도 있지만, 본 개시의 양태들은 그렇게 제한될 필요가 없다.
테셀레이션 스테이지 (24) 는 복수의 프리미티브들로 도메인을 테셀레이트 (예를 들어, 분할) 하기 위해 헐 셰이더 스테이지 (22) 에 의해 출력된 테스팩터들을 이용할 수도 있다. 예를 들어, 도메인 타입 (예를 들어, 삼각형 또는 사각형) 을 정의하는 것에 더하여, 테스팩터들은 얼마나 많은 링들이 도메인 내에 포함되어야 하는지를 정의할 수도 있다.
링은 도메인 내의 동심 형상들의 시리즈일 수도 있고, 여기서 동심 형상들은 도메인 형상과 동일한 형상이다. 예를 들어, 도메인 형상이 사각형인 경우, 그 사각형의 외주는 외측 링으로서 고려될 수도 있다. 헐 셰이더 스테이지 (22) 는 사각형 도메인 내에 상주하는 더 작은 사이즈의 사각형들의 시리즈일 수도 있는 내측 링들의 수를 정의할 수도 있다. 유사하게, 도메인 형상이 삼각형인 경우, 그 삼각형의 외주는 외측 링으로서 고려될 수도 있고, 내측 링들은 삼각형 도메인 내에 상주하는 더 작은 사이즈의 삼각형들의 시리즈일 수도 있다.
도메인 내의 링들의 수를 정의하는 것에 더하여, 테스팩터들은 링들을 따라 상주하는 포인트들을 정의한다. 링들을 따라 상주하는 포인트들은 제어 포인트들과 혼동되지 않아야 한다. 제어 포인트들은 패치를 정의한다. 링들을 따라 상주하는 포인트들은 테스팩터들에 기초하여 테셀레이션 스테이지 (24) 에 의해 생성되는 포인트들이다. 이들 포인트들은 패치 내가 아니라 도메인 내에 생성된다.
또한, 테셀레이션 스테이지 (24) 가 복수의 프리미티브들로 도메인을 분할하기 위해 함께 연결하는 것은 바로 이들 포인트들이다. 예를 들어, 테셀레이션 스테이지 (24) 가 도메인을 분할할 프리미티브들이 삼각형들이라고 가정하라. 이러한 예에서, 테셀레이션 스테이지 (24) 는 외측 링을 따라 상주하는 하나의 포인트를 내측 링을 따라 상주하는 2 개의 포인트들과 연결하여, 삼각형 프리미티브를 형성할 수도 있다. 대안적으로, 테셀레이션 스테이지 (24) 는 외측 링을 따라 상주하는 2 개의 포인트들을 내측 링을 따라 상주하는 하나의 포인트와 연결하여, 삼각형 프리미티브를 형성할 수도 있다. 이러한 방식으로, 도메인 타입, 도메인 내의 링들의 수, 및 외측 및 내측 링들을 따른 포인트들의 수를 정의함으로써, 헐 셰이더 스테이지 (22) 는 테셀레이션 스테이지 (24) 가 도메인을 분할해야 하는 프리미티브들의 수를 정의할 수도 있다.
일부 예들에서, 링의 에지를 따라 상주할 수 있는 포인트들의 수는 1 개의 포인트 내지 65 개의 포인트들일 수도 있다. 예를 들어, 도메인 타입이 삼각형인 경우, 삼각형 도메인의 에지 당 최대 65 개의 포인트들이 존재할 수도 있다. 유사하게, 도메인 형상이 사각형인 경우, 사각형의 에지 당 최대 65 개의 포인트들이 존재할 수도 있다. 그러나, 본 개시에서 기술된 기법들은 최대 65 개의 포인트들을 갖는 에지에 제한되지 않는다.
또한, 링을 따라 상주하는 포인트들의 수는 외측 및 내측 링들에 대해 상이할 수도 있다. 예를 들어, 외측 링의 에지를 따라 상주하는 포인트들의 수는 내측 링의 에지를 따라 상주하는 포인트들의 수보다 많거나 적을 수도 있다. 회측 링 및 내측 링의 에지를 따라 상주하는 포인트들의 수는 포인트들의 동일한 수인 것도 가능할 수도 있다.
또한, 동일한 링의 에지를 따른 포인트들의 수는 상이할 수도 있다. 예를 들어, 삼각형 도메인의 경우, 에지들 중 하나를 따라 상주하는 포인트들의 수는 하나의 다른 에지, 또는 양 에지들을 따라 상주하는 포인트들의 수와 상이할 수도 있다. 유사하게, 사각형 도메인의 경우, 에지들 중 하나를 따라 상주하는 포인트들의 수는 하나, 둘, 또는 모든 세개의 다른 나머지 에지들을 따라 상주하는 포인트들의 수와 상이할 수도 있다. 링들의 에지들 각각이 동일한 수의 포인트들을 갖는 것도 가능할 수도 있다.
상술된 바와 같이, 일부 예들에서, 테셀레이션 스테이지 (24) 는 패치를 복수의 프리미티브들로 분할하지 않을 수도 있다. 이에 따라, 일부 예들에서는, 테셀레이션 스테이지 (24) 는 제어 포인트들의 수, 제어 포인트들의 로케이션들, 또는 패치의 사이즈와 같은 임의의 정보를 수신하지 않을 수도 있다. 패치의 사이즈 및 제어 포인트들의 로케이션들에 관한 임의의 정보 없이, 테셀레이션 스테이지 (24) 는 사용되는 도메인의 사이즈 또는 그 도메인의 정점들에 대한 특정의 좌표들을 정의할 수 없을 수도 있다.
이것을 다루기 위해, 테셀레이션 스테이지 (24) 는 도메인 내의 상호 연결된 포인트들의 로케이션들을 결정할 뿐아니라 도메인의 정점들을 정의하는 정규화된 좌표 시스템에 의존할 수도 있다. 사각형 도메인에서, 4 개의 에지들 각각은 "0" 내지 "1" 로부터 정규화될 수도 있다. 정규화된 좌표들의 하나의 예로서, 테셀레이션 스테이지 (24) 는 사각형 도메인의 정점들을, u, v 좌표들로, (0, 0), (1, 0), (0, 1), 및 (1, 1) 로서 정의할 수도 있으며, 이것은 단위 정사각형이다. 유사하게, 삼각형 도메인에서, 3 개의 에지들 각각은 "0" 내지 "1" 로부터 정규화될 수도 있다. 이에 따라, 테셀레이션 스테이지 (24) 는 삼각형 도메인의 정점들을, u, v, w 좌표들로, (0, 0, 1), (0, 1, 0), 및 (1, 0, 0) 로서 정의할 수도 있으며, 이것은 정삼각형이다. 테셀레이션 스테이지 (24) 는 이러한 정규화된 좌표 시스템에서 복수의 프리미티브들의 상호 연결된 정점들에 대한 좌표들을 결정할 수도 있다. 또, 삼각형 도메인 내의 정규화된 무게중심 좌표들을 사용하는 경우, 각 좌표의 합은 항상 1 이다.
테셀레이션 스테이지 (24) 는 정규화된 좌표 시스템 (예를 들어, 적용가능한 대로, u, v 좌표들 또는 u, v, w 좌표들) 에서 도메인 셰이더 스테이지 (26) 로 도메인의 복수의 프리미티브들의 정점들을 출력할 수도 있다. 도메인 셰이더 스테이지 (26) 의 기능은 테셀레이션 스테이지 (24) 로부터 수신된 바와 같은 정점 좌표들을 패치 상으로 맵핑하는 것일 수도 있다. 예를 들어, 테셀레이션 스테이지 (24) 는 헐 셰이더 스테이지 (22) 에 의해 정의된 패치의 정보를 수신하지 않을 수도 있는 반면, 도메인 셰이더 스테이지 (26) 는 헐 셰이더 스테이지 (22) 로부터 그러한 정보를 수신할 수도 있다.
도메인 셰이더 스테이지 (26) 는 테셀레이션 스테이지 (24) 에 의해 출력된 각 정점 좌표에 대해 실행할 수도 있다. 헐 셰이더 스테이지 (22) 로부터의 패치의 제어 포인트들의 좌표들을 사용하여, 도메인 셰이더 스테이지 (26) 는 패치 상에서 테셀레이션 스테이지 (24) 에 의해 출력된 바와 같은 정점의 로케이션을 결정할 수도 있다. 테셀레이션 스테이지 (24) 가 테셀레이션 스테이지 (24) 에 의해 생성된 복수의 프리미티브들의 정점들을 출력하고, 도메인 셰이더 스테이지 (26) 가 패치에 이들 프리미티브들을 추가하기 때문에, 헐 셰이더 스테이지 (22), 테셀레이션 스테이지 (24), 및 도메인 셰이더 스테이지 (26) 의 조합은 함께 패치에 추가적인 프리미티브들을 추가한다. 이것은 패치에 추가되는 프리미티브들의 메시를 야기하여, CPU (16) 에 의해 정의된 패치에 비해, 더 높은 해상도, 더 디테일한 패치를 생성한다. 이러한 방식으로, 헐 셰이더 스테이지 (22), 테셀레이션 스테이지 (24), 및 도메인 셰이더 스테이지 (26) 는 테셀레이션 프로세스를 구현한다.
테셀레이션 스테이지 (24) 는 동시에 2개의 x-y 좌표 쌍들을 출력할 수 있는 포인트 생성기를 포함하도록 구성될 수도 있다. 포인트 생성기는 병렬로 연결성 생성기로 양 포인트들에 대한 x-y 좌표 쌍들을 송신할 수도 있다. 일부 예들에서, 연결성 생성기는 한번에 2 개의 x-y 좌표 포인트들을 수신하도록 구성될 수도 있다. 연결성 생성기가 동시에 2 개의 x-y 좌표 쌍들을 수신할 수 있는 경우, 테셀레이션 유닛은 2 개의 4-딥 (4-deep) 선입선출 (FIFO) 큐들 (즉, 4 개의 x-y 좌표 쌍들을 유지할 수 있는 2 개의 FIFO 들) 을 포함할 수도 있다. 예를 들어, 테셀레이션 유닛, GPU (12) 의 로컬 메모리, 또는 시스템 메모리 (14) 는 2 개의 버퍼들 (88) 을 포함할 수도 있고, 여기서 2 개의 버퍼들 (88) 의 각각은 4-딥 FIFO 큐이다.
지오메트리 셰이더 스테이지 (28) 는 도메인 셰이더 스테이지 (26) 에 의해 패치에 추가된 프리미티브들의 정점들을 수신하고 훨씬 더 많은 해상도를 추가하기 위해 프리미티브들에 대한 추가적인 정점들을 추가로 생성할 수도 있다. 래스터라이저 스테이지 (30) 는 지오메트리 셰이더 스테이지 (28) 로부터 프리미티브들을 수신하고 그 프리미티브들을 디스플레이를 위한 픽셀들로 변환한다. 예를 들어, 프리미티브들은 그 프리미티브들의 상호 연결을 나타내는 벡터들로서 정의될 수도 있고, 이미지가 디스플레이되는 디스플레이와는 독립적인 좌표 공간에서 정의될 수도 있다. 래스터라이저 스테이지 (30) 는 이들 벡터들을 디스플레이 좌표들로 변환하고, 가려지는 프리미티브들 내의 포인트들을 제거하는 것과 같은 임의의 추가의 기능들을 수행한다.
픽셀 셰이더 스테이지 (32) 는 래스터라이저 스테이지 (30) 에 의해 출력된 바와 같은 픽셀들을 수신하고 디스플레이되어야 하는 픽셀들 각각에 칼라 값들을 할당하기 위해 포스트 프로세싱을 수행한다. 예를 들어, 픽셀 셰이더 스테이지 (32) 는 시스템 메모리 (14) 에 저장된 상수 값들, 시스템 메모리 (14)에 저장된 텍스쳐 데이터, 및 임의의 다른 데이터를 수신하여 칼라 값들과 같은 픽셀당 (per-pixel) 출력들을 생성할 수도 있다. 픽셀 셰이더 스테이지 (32) 는 또한 픽셀들의 불투명도를 나타내는 불투명도 값들을 출력할 수도 있다.
출력 병합 스테이지 (34) 는 임의의 최종 픽셀 프로세싱을 수행할 수도 있다. 예를 들어, 출력 병합 스테이지 (34) 는 픽셀들 중 임의의 픽셀이 디스플레이되는 것으로부터 제거되어야 하는지 여부를 추가로 결정하기 위해 깊이 정보를 이용할 수도 있다. 출력 병합 스테이지 (34) 는 또한 최종 픽셀 값들을 생성하기 위해 블렌딩 (blending) 동작들을 수행할 수도 있다.
출력 병합 스테이지 (34) 는 일반적으로 시스템 메모리 (14) 내에 위치되는, 그러나 GPU (12) 내에 위치될 수도 있는 프레임 버퍼로 최종 픽셀 값들을 출력할 수도 있다. 디스플레이 프로세서 (도시하지 않음) 는 그 프레임 버퍼로부터 픽셀 값들을 취출하고 디바이스 (10) 의 디스플레이 (도시하지 않음) 의 픽셀들로 하여금 픽셀 값들에 따라 조명하게 하여, 디스플레이가 이미지를 디스플레이하게 한다.
상술된 바와 같이, 테셀레이션 스테이지 (24) 는 도메인 내의 복수의 프리미티브들을 생성하기 위해 도메인 내의 외측 및 내측 링들의 포인트들을 상호 연결한다. 하나의 예에서, 테셀레이션 스테이지 (24) 는 그래픽 프로세싱을 위한 테셀레이션 유닛일 수도 있다. 테셀레이션 유닛은 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하도록 구성될 수도 있다. 또, 테셀레이션 유닛은 또한 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하도록 구성될 수도 있다. 테셀레이션 유닛은 또한 제 1 부분에 대한 좌표들의 제 1 세트에 기초하여 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하도록 구성될 수도 있다. 일 예에서, 테셀레이션 유닛은 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트만에 기초하여 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하도록 구성될 수도 있다.
일 예에서, 테셀레이션 유닛은 제 1 링의 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 제 2 링의 제 2 에지를 따라 상주하는 포인트들과 스티치하도록 구성될 수도 있다. 이것은 패치로 매핑되는 복수의 프리미티브들로 도메인을 분할하여 패치의 해상도를 증가시키기 위해 행해질 수도 있다. 이러한 분할은 에지의 좌표들의 제 1 세트 및 좌표들의 제 2 세트에 기초할 수도 있다. 이러한 예에서, 제 2 링은 도메인 내에서 제 1 링보다 내측에 있다. 예를 들어, 에지를 따른 포인트들 (즉, 제 1 부분의 포인트들 및 제 2 부분의 포인트들) 은 프리미티브들의 정점들을 형성할 수도 있다. 테셀레이션 유닛은 에지의 이들 포인트들을 내측 링의 에지를 따른 포인트들과 스티치할 수도 있다. 이들 포인트들의 스티칭은 패치의 해상도를 증가시키기 위해 패치에 매핑되는 프리미티브들을 야기할 수도 있다.
상술된 바와 같은, 본 개시에 기술된 기법들에 따르면, 제 1 유닛은 제 1 부분을 따른 포인트들에 대한 결정된 좌표들에 기초하여, 그리고 일부 예들에서는, 제 1 부분을 따른 포인트들에만 기초하여 제 2 부분을 따른 포인트들에 대한 좌표들을 결정할 수도 있다. 본 개시에 기술된 기법들은 제 1 및 제 2 부분들의 포인트들 사이의 대칭성에 기인하여 에지의 제 2 부분의 좌표들의 그러한 결정을 허용할 수도 있다.
본 개시에서 사용되는 바와 같은 대칭성은 제 1 부분을 따른 포인트들이 제 2 부분을 따른 포인트들에 대해 미러 (mirror) 포인트들로서 보이는 조건을 지칭할 수도 있다. 즉, 제 1 부분의 포인트에 대해, 제 2 부분에 미러 포인트가 존재한다. 제 2 부분의 이러한 미러 포인트는 제 1 부분의 포인트에 대해 대칭적인 것으로서 고려될 수도 있다.
예를 들어, 제 1 부분 및 제 2 부분이 에지의 각 반절이라고 가정하라. 이러한 예에서, 제 1 부분은 에지의 제 1 반절로서 지칭될 수도 있고, 제 2 부분은 에지의 제 2 반절로서 지칭될 수도 있다. 예를 들어, 에지의 제 1 반절은 에지의 제 1 단부로부터 시작하고 에지의 중간에서 종료한다. 에지의 제 2 반절은 에지의 중간에서 시작하고 에지의 제 2 단부에서 종료한다.
이러한 경우에, 에지의 길이가 1 유닛이고, 제 1 단부로부터 거리 (D) 인 제 1 반절에서의 포인트가 존재한다고 가정하라. 이러한 예에서, 대칭성으로 인해, 제 2 단부로부터 거리 (D) 인 제 2 반절에서의 포인트가 존재한다. 제 1 단부로부터 거리 (D) 인 제 1 반절의 포인트는 제 2 단부로부터 거리 (D) 인 포인트의 미러로 고려된다. 즉, 제 1 부분 및 제 2 부분의 이들 포인트들 각각은 에지의 중간 포인트로부터 등거리에 있다.
테셀레이션 유닛은 에지의 좌표들을 결정할 목적으로 이러한 대칭성을 활용할 수도 있다. 예를 들어, 에지를 따른 포인트들의 좌표들은 에지의 길이가 1 이 되도록 할당되는 정규화된 좌표 시스템에 기초할 수도 있다. 이러한 경우에, 에지의 제 1 단부는 0 의 좌표값으로 표현될 수도 있고, 에지의 제 2 단부는 1 의 좌표값으로 표현될 수도 있다.
이에 따라, 이전의 예로 계속하면, 제 1 단부로부터 거리 (D) 떨어진 포인트는 제 2 단부로부터 거리 (D) 떨어진 대칭 포인트를 갖는다. 제 1 단부로부터 거리 (D) 떨어진 포인트의 좌표가 "D" 로서 정의되는 경우, 에지의 단부들이 0 및 1 에 있기 때문에 그의 대칭 포인트의 좌표는 1-D 이다. 이러한 대칭성은 테셀레이션 유닛이 제 1 부분의 포인트들 중 하나에 대한 좌표를 결정하고, 제 1 부분의 그 포인트에 대한 결정된 좌표들에 기초하여 제 2 부분의 그의 대칭 포인트에 대한 좌표를 결정하는 것을 허용할 수도 있다. 예를 들어, 테셀레이션 유닛은 제 1 반절에서의 하나의 포인트에 대한 좌표를 D 가 되도록 결정하고, 제 2 반절에서의 그의 대칭 포인트에 대한 좌표를 1-D 가 되도록결정할 수도 있다.
이러한 개념을 확장하기 위해, 좌표들의 제 1 세트가 X 에 의해 표현되고, 여기서 X 는 에지의 반절일 수도 있는 제 1 부분 에지에서의 포인트들에 대한 좌표들을 나타낸다는 것을 고려하라. 이러한 예에서, 테셀레이션 유닛은 제 2 부분의 포인트들에 대한 좌표들을 1-X 인 것으로 결정할 수도 있고, 여기서 1-X 는 에지의 제 2 부분의 포인트들에 대한 좌표들을 나타낸다.
이러한 대칭적 관계로 인해, 테셀레이션 유닛은 제 1 부분의 포인트의 좌표들 및 제 2 부분의 포인트의 좌표들을 동시에 (예를 들어, 병렬로) 결정할 수 있을 수도 있다. 예를 들어, 제 1 부분의 포인트의 좌표들을 결정하자마자, 테셀레이션 유닛은 버퍼에 그 좌표들을 저장할 수도 있다. 동시에, 또는 바로 후에, 테셀레이션 유닛은 또한 제 2 부분의 포인트의 좌표들을 결정하기 위해 1 로부터 제 1 부분의 포인트의 좌표들을 감산함으로써 제 2 부분의 포인트에 대한 좌표들을 저장할 수 있을 수도 있다. 테셀레이션 유닛은 동일한 버퍼 또는 상이한 버퍼에 제 2 부분의 포인트에 대한 좌표들을 저장할 수도 있다.
이러한 방식으로, 테셀레이션 유닛은 에지를 따른 포인트들 각각의 좌표들을 결정하기 위해 복잡한 산술을 사용하는데 컴퓨팅 사이클들을 낭비할 필요가 없을 수도 있다. 오히려, 테셀레이션 유닛은 에지의 제 1 부분을 따른 포인트들에 대한 좌표의 제 1 세트를 결정하고, 에지의 제 2 부분에 따른 포인트들에 대한 좌표들의 제 2 세트를 결정하기 위해 1 로부터 좌표들의 제 1 세트를 감산하는 간단한 산술을 적용할 수도 있다. 또한, 이러한 간단한 산술로 인해, 테셀레이션 유닛은 테셀레이션 유닛이 좌표들의 제 1 세트를 결정한 시간과 실질적으로 동일한 시간에 좌표들의 제 2 세트를 결정할 수 있을 수도 있다. 이것은 테셀레이션 유닛이 한번에 하나씩 에지를 따른 포인트들의 좌표들 각각을 출력하기 보다는, 실질적으로 동시에 좌표들의 제 1 및 제 2 세트를 출력하는 것을 허용할 수도 있다.
도 2 는 본 개시에서 기술된 하나 이상의 예들에 따라 그래픽 프로세싱 파이프라인의 다른 예를 구현할 수도 있는 그래픽 프로세싱 유닛 (GPU) 의 다른 예를 도시하는 블록도이다. 예를 들어, 도 1 은 실질적으로 Direct3D 11 API 에 따라 공식화된 그래픽 프로세싱 파이프라인을 도시했다. 도 2 는 실질적으로 OpenGL 4.x API 에 따라 그래픽 프로세싱 파이프라인을 도시한다.
OpenGL 4.x 그래픽 프로세싱 파이프라인은 Direct3D 11 그래픽 프로세싱 파이프라인과 실질적으로 유사한 양식으로 기능할 수도 있다. 이에 따라, 간결성의 목적으로, Direct3D 11 그래픽 프로세싱 파이프라인 및 OpenGL 4.x 그래픽 프로세싱 파이프라인 양자와 유사한 컴포넌트들을 기술하기 위해 도 1 에 대한 참조가 행해진다.
도 2 의 예에서 도시된 바와 같이, GPU (12) 는 입력 어셈블러 (36), 정점 셰이더 (38), 테셀레이션 제어 셰이더 (40), 프리미티브 생성기 (42), 테셀레이션 평가 셰이더 (44), 지오메트리 셰이더 (46), 클립핑 유닛 (48), 래스터라이저 (50), 프래그먼트 셰이더 (52), 및 포스트 프로세서 (54) 를 포함한다. 도 1 과 유사하게, 도 2 에 도시된 예에서, GPU (12) 는 도 2 에 도시된 것들보다 더 많거나 더 적은 수의 컴포넌트들을 포함할 수도 있다. 또한, 유닛의 특정의 순서는 설명의 목적으로 제공되며 제한하는 것으로 고려되지 않아야 한다.
일부 방식들에서, OpenGL 4.x 그래픽 프로세싱 파이프라인을 갖는 테셀레이션 프로세스는 Direct3D 11 그래픽 프로세싱 파이프라인을 갖는 테셀레이션 프로세스와 실질적으로 유사할 수도 있다. 예를 들어, OpenGL 4.x 테셀레이션 프로세스는 도 1 에 대해 상술된 것과 유사한 방식으로 패치들 및 제어 포인트들에 의존할 수도 있다. 예를 들어, 도 2 의 입력 어셈블러 (36) 및 정점 셰이더 (38) 는 각각 도 1 의 입력 어셈블러 스테이지 (18) 및 정점 셰이더 스테이지 (20) 과 실질적으로 유사하게 기능할 수도 있다.
예를 들어, 도 2에서, 프리미티브 생성기 (42) 는 테셀레이션 유닛과 동등하거나 비견할만할 수도 있다. 테셀레이션 유닛은 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정할 수도 있다. 또, 테셀레이션 유닛은 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정할 수도 있다. 테셀레이션 유닛은 또한 제 1 부분에 대한 좌표들의 제 1 세트에 기초하여 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정할 수도 있다. 테셀레이션 유닛은 또한 패치에 매핑되는 복수의 프리미티브들로 도메인을 분할하기 위해 제 2 링의 제 2 에지를 따라 상주하는 포인트들과 제 1 링의 제 1 에지를 따라 상주하는 포인트들을 스티치하도록 구성될 수도 있다.
더 많은 예들로서, 테셀레이션을 위해, 도 2 의 테셀레이션 제어 셰이더 (40) 는 도 1 의 헐 셰이더 스테이지 (22) 와 실질적으로 유사하게 기능할 수도 있다. 그러나, 테셀레이션 제어 셰이더 (40) 는 Direct3D 11 의 테스팩터들과 유사할 수도 있는 테셀레이션 레벨들을 출력한다. 예를 들어, OpenGL 4.x 의 테셀레이션 레벨들은 도메인 타입, 도메인 내의 링들의 수, 및 링 에지 당 포인트들의 수를 정의할 수도 있다.
프리미티브 생성기 (42) 는 테셀레이션 스테이지 (24) 와 실질적으로 유사한 방식으로 기능할 수도 있다. 예를 들어, 프리미티브 생성기 (42) 는 도메인을 복수의 프리미티브들로 분할하기 위해 테셀레이션 레벨들 및 도메인 타입을 이용할 수도 있다.
도 2 의 테셀레이션 평가 셰이더 (44) 는 도 1 의 도메인 셰이더 스테이지 (26) 와 실질적으로 유사하게 기능할 수도 있다. 예를 들어, 테셀레이션 평가 셰이더 (44) 는 프리미티브 생성기 (42) 로부터 생성된 프리미티브들의 정점들을 수신하고, 테셀레이션 제어 셰이더 (40) 에 의해 출력된 패치에 그 프리미티브를 추가할 수도 있다. 이러한 방식으로, OpenGL 4.x API 의 그래픽 프로세싱 파이프라인은 패치의 해상도를 증가시키기 위해 패치에 대해 테셀레애션을 수행할 수도 있다.
지오메트리 셰이더 (46) 는 지오메트리 셰이더 스테이지 (28) 과 실질적으로 유사하게 기능할 수도 있다. 도 2 에서 클립핑 유닛 (48) 및 래스터라이저 (50) 의 조합은 도 1 의 래스터라이저 스테이지 (30) 과 실질적으로유사하게 기능할 수도 있다. 도 2 의 프래그먼트 셰이더 (52) 및 포스트 프로세서 (54) 는 각각 도 1 의 픽셀 셰이더 스테이지 (32) 및 출력 병합 스테이지 (34) 와 실질적으로 유사하게 기능할 수도 있다. 포스트 프로세서 (54) 는 프레임 버퍼로 최종 픽셀 값들을 출력할 수도 있고, 디스플레이 프로세서는 프레임 버퍼로부터 픽셀 값들을 취출하고 디스플레이로 하여금 픽셀 값들에 따라 조명하여 이미지를 디스플레이하게 할 수도 있다.
상술된 바와 같이, 도 2 의 테셀레이션 제어 셰이더 (40), 프리미티브 생성기 (42), 및 테셀레이션 평가 셰이더 (44) 는 테셀레이션 프로세스를 구현하기 위해 각각 도 1 의 헐 셰이더 스테이지 (22), 테셀레이션 스테이지 (24), 및 도메인 셰이더 스테이지 (26) 와 실질적으로 유사하게 기능한다. 이에 따라, Direct3D 11 및 OpenGL 4.x API 들 양자 모두는 테셀레이션 프로세스를 구현하기 위해 2 개의 프로그램가능 셰이더 유닛들 및 하나의 고정 함수 유닛에 의존한다.
일반성의 목적으로, 본 개시에 기술된 기법들은 제 1 테셀레이션 셰이더 유닛, 테셀레이션 유닛, 및 제 2 테셀레이션 셰이더 유닛을 사용하여 기술될 수도 있다. 제 1 테셀레이션 셰이더 유닛의 예들은 헐 셰이더 스테이지 (22) 및 테셀레이션 제어 셰이더 (40) 를 포함한다. 테셀레이션 유닛의 예들은 테셀레이션 스테이지 (24) 및 프리미티브 생성기 (42) 를 포함한다. 제 2 테셀레이션 셰이더 유닛의 예들은 도메인 셰이더 스테이지 (26) 및 테셀레이션 평가 셰이더 (44) 를 포함한다.
또한, Direct3D 11 은 용어 "테스팩터들" 을 사용하고, OpenGL 4.x 는 유사한 용어들로 고려될 수도 있는 용어 "테셀레이션 레벨들" 을 사용한다. 일반성의 목적으로, 본 개시는 용어 "테셀레이션 팩터" 를 사용하고, 그의 예들은 테스팩터들 및 테셀레이션 레벨들을 포함한다. 이러한 식으로, 제 1 셰이더 유닛은 테셀레이션 유닛으로 테셀레이션 팩터들을 출력하는 것으로 고려될 수도 있고, 테셀레이션 유닛은 테셀레이션 팩터들에 응답하여 제 2 셰이더 유닛으로 정점들을 출력할 수도 있다.
Direct3D 11 및 OpenGL 4.x 는 2 개의 셰이더 유닛들 및 하나의 고정 함수 유닛을 이용하는 반면, 본 개시에 기술된 기법들은 그렇게 제한되지 않는다는 것이 주의되어야 한다. 예를 들어, 다른 시스템들에서 제 1 및 제 2 셰이더 유닛들이 고정 함수 유닛들이고, 테셀레이션 유닛이 셰이더 유닛인 것이 가능할 수도 있다. 다른 예로서, 모두가 고정 함수 유닛들일 수도 있고, 또는 모두가 셰이더 유닛들일 수도 있으며, 또는 이들의 임의의 조합일 수도 있다.
따라서, 일부 예들에서, 제 1 유닛은 제 1 셰이더 유닛과 유사한 기능들을 수행하지만, 셰이더 유닛 또는 고정 함수 유닛일 수도 있고, 제 2 유닛은 테셀레이션 유닛과 유사한 기능들을 수행하지만, 셰이더 유닛 또는 고정 함수 유닛일 수도 있으며, 제 3 유닛은 제 2 셰이더 유닛과 유사한 기능들을 수행하지만, 셰이더 유닛 또는 고정 함수 유닛일 수도 있다. 또, 제 1 셰이더 유닛, 테셀레이션 유닛, 및 제 2 셰이더 유닛이 도 1 및 도 2 에서 별개의 유닛들로서 도시되지만, 본 개시의 양태들은 그렇게 제한되지 않는다. 이들 유닛들, 및 가능하게는 도 1 및 도 2 에 도시된 그래픽 프로세싱 파이프라인들의 임의의 유닛은 함께 공통 유닛으로 결합될 수도 있다. 이에 따라, 이들 유닛들의 기능성이 설명의 편리를 위해 별개로 기술되지만, 이들 유닛들은 공유된 하드웨어에서 또는 별개의 컴포넌트들로서 구현될 수도 있다.
도 3a 및 도 3b 는 본 개시에서 기술된 하나 이상의 예들에 따라 복수의 내측 링들을 포함하는 도메인 타입들의 예들을 도시하는 그래픽 도면들이다. 예를 들어, 도 3a 는 삼각형 도메인 (56) 을 도시하고, 도 3b 는 사각형 도메인 (66) 을 도시한다. 도시된 바와 같이, 삼각형 도메인 (56) 및 사각형 도메인 (66) 각각은 각각 동심 삼각형들 및 정사각형들을 포함한다.
도 3a 에서, 삼각형 도메인 (56) 은 외측 링 (58) 및 내측 링 (60) 을 포함한다. 외측 링 (58) 은 외측 링 에지 (62) 를 포함하고, 내측 링 (60) 은 내측 링 에지 (64) 를 포함한다. 외측 링 에지 (62) 및 내측 링 에지 (64) 는 설로 평행하다. 본 개시에 기술된 양태들에서, 테셀레이션 유닛은 좌표득을 계산하는데 사용되는 계산 자원들을 잠재적으로 감소시키기 위해 좌표들의 제 1 및 제 2 세트 사이의 대칭성을 사용할 수도 있다. 예를 들어, 테셀레이션 팩터들은 외측 링 에지 (62) 를 따라 상주하는 포인트들의 수 및 내측 링 에지 (64) 를 따라 상주하는 포인트들의 수를 정의할 수도 있다. 도 3a 에 도시된 바와 같이, 내측 링 에지 (64) 내측에 있는 추가 내측 링이 존재한다. 테셀레이션 유닛은 특정의 에지 (예를 들어, 외측 링 에지 (62)) 의 제 1 부분에 대한 좌표들의 제 1 세트를 값들 (X) 의 세트이도록 결정할 수도 있다. 테셀레이션 유닛은 좌표들의 제 1 및 제 2 세트 사이의 대칭성에 기초하여 동일한 에지 (예를 들어, 외측 링 에지 (62)) 의 제 2 부분에 대한 좌표들의 제 2 세트를 1-X 이도록 결정할 수도 있다.
정규화된 좌표들을 사용하는 예에서, 도 1 로부터의 테셀레이션 스테이지 (24) 또는 도 2 로부터의 프리미티브 생성기 (42) 와 같은 테셀레이션 유닛은 에지의 부분에 대한 좌표들을 결정하고, 다른 부분을 결정하기 위해 대칭성을 사용할 수도 있다. 좌표들은 정규화될 수도 있다. 정규화된 좌표들에 의해, 단부들은 0 및 1 에 있는 것으로 가정된다. 예를 들어, 정규화된 사각형 도메인에서 4 개의 에지들 각각은 "0" 으로부터 "1" 까지 정규화될 수도 있고, 직교 좌표들 (0,0), (1,0), (0,1), (1,1) 을 포함할 수도 있으며, 정규화된 삼각형 도메인에서 3 개의 에지들 각각은 "0" 으로부터 "1" 까지 정규화될 수도 있고, 무게중심 좌표들 (0,0,1), (0,1,0), (1,0,0) 을 가질 수도 있다. 또, 상술된 바와 같이, 삼각형 도메인에서 정규화된 무게중심 좌표들을 사용하는 경우, 각 좌표 세트의 합은 항상 1 이다.
특히, 테셀레이션 유닛은 공식:
1-X(n)
을 이용하여, 다른 부분에 대한 좌표들을 결정할 수도 있다. 이러한 예에서, X(n) 은 좌표들 중 하나를 나타내고, "n" 은 에지의 부분을 따른 포인트들의 수를 나타내는 정수 값이다.
단지 예시의 목적으로 사용되는 하나의 특정의 예에서, 테셀레이션 팩터들이 에지를 따라 10 개의 포인트들이 존재한다고 정의하는 것이 가정될 수도 있다. 에지의 제 1 부분 및 제 2 부분 각각은 포인트들의 반절을 포함한다는 것이 또한 가정될 수도 있다. 따라서, 부분 당 5 개의 포인트들이 존재한다.
이러한 예에서, 테셀레이션 유닛은 5 개의 포인트들 (즉, n = 1 내지 5) 에 대해 좌표들을 결정할 수도 있고, 다른 나머지 포인트들 (즉, 나머지 5 개의 포인트들) 에 대해, 테셀레이션 유닛은 제 1 부분에 대한 5 개의 포인트들을 재사용할 수도 있다. 예를 들어, 테셀레이션 유닛은 식 1-X(n) 을 구현할 수도 있고, 여기서 n = 1 내지 5 이다. 이러한 식에서, 1-X(n) 은 에지 상의 포인트들 (6 내지 10) 에 대한 좌표들을 나타낸다.
상기 식들은 X(N-n) = 1-X(n) 으로 일반화될 수도 있고, 여기서 N 은 에지 상의 포인트들의 총 수이고, "n" 은 1 부터 제 1 부분에서의 포인트들의 수까지의 범위이다. 이에 따라, 이러한 경우에, X(N-n) 은 제 2 부분의 포인트들에 대한 좌표들을 나타내고, X(n) 은 제 1 부분의 포인트들에 대한 좌표들을 나타낸다. 이러한 방식으로, 테셀레이션 유닛은 좌표들의 결정된 제 1 세트에 기초하여 좌표들의 제 2 세트를 결정할 수 있을 수도 있다.
이것은 테셀레이션 유닛이 포인트들의 좌표들을 결정하기 위해 더 적은 수의 태스크들을 수행하는 것을 허용한다. 그러나, 에지를 따른 포인트들의 다른 수들 (예를 들어, 10 개 이외의 포인트들) 이 사용될 수도 있다. 일반적으로, 사용되는 포인트들이 더 많을 수록, 디테일은 더 크게 제공될 수도 있다.
도 3b 는 사각형 도메인을 사용하는 것외에는 도 3a 와 유사하다. 도 3a 에 도시된 삼각형 도메인과 유사하게, 테셀레이션 유닛은 상술된 X(N-n) = 1-X(n) 기법들을 이용하여 사각형 도메인의 에지를 따른 포인트들을 결정할 수도 있다. 예를 들어, 도 3b 는 사각형 도메인 (66) 을 도시한다. 사각형 도메인 (66) 은 외측 링 (68) 및 내측 링 (70) 을 포함한다. 외측 링 (68) 은 외측 링 에지 (72) 를 포함하고, 내측 링 (70) 은 내측 링 에지 (74) 를 포함한다. 테셀레이션 유닛은 상술된 것과 유사한 방식으로 외측 링 에지 (72) 의 포인트들과 같은 에지들을 따른 포인트들을 결정할 수도 있다. 예를 들어, 테셀레이션 유닛은 외측 링 에지 (72) 의 제 1 부분을 따라 상주하는 포인트들에 대한 좌표들을 결정하고, 제 1 부분에 따라 상주하는 포인트들에 대한 좌표들에 기초하여 외측 링 에지 (72) 의 제 2 부분에 따라 상주하는 포인트들에 대한 좌표득을 결정할 수도 있다.
도 4a 및 도 4b 는 본 개시에서 기술된 하나 이상의 예들에 따라 복수의 프리미티브들로 분할된 도메인을 도시하는 그래픽 도면들이다. 예를 들어, 도 4a 는 복수의 프리미티브들로 분할된 (즉, 테셀레이트된) 삼각형 도메인 (76) 을 도시하고, 도 4b 는 복수의 프리미티브들로 분할된 사각형 도메인 (78) 을 도시한다.
도 4a 및 도 4b 에서, 삼각형을 형성하는 포인트들의 상호연결은 테셀레이션 팩터들에 기초할 수도 있다. 예를 들어, 상술된 테셀레이션 유닛들은 도 4a 의 삼각형 도메인 (76) 및 도 4b 에 도시된 분할된 사각형 도메인 (78) 의 에지들과 같은 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하는 제 1 유닛을 포함할 수도 있다. 도 4a 및 도 4b 에 도시된 바와 같이, 도메인들은 복수의 프리미티브들로 분할 (즉, 테셀레이트) 될 수도 있다.
상술된 테셀레이션 유닛들은 또한 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하고, 제 1 부분에 대한 좌표들의 제 1 세트에 기초하여 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정할 수도 있다. 도 4a 및 도 4b 에 도시된 바와 같이, 상이한 링들은 좌표들의 상이한 수들로 분할될 수도 있다. 또, 포인트들의 제 1 부분의 좌표들 (각 포인트) 의 각 세트는 포인트들의 제 2 부분의 좌표들 (포인트) 의 대응하는 세트와 대칭적일 수도 있다.
테셀레이션 유닛은 또한 패치에 매핑되는 복수의 프리미티브들로 도메인을 분할하기 위해 제 1 링의 제 1 에지를 따라 상주하는 포인트들을 제 2 링의 제 2 에지를 따라 상주하는 포인트들과 스티치하도록 구성될 수도 있다. 일 예에서, 좌표들의 제 1 세트는 포인트들의 제 1 부분의 제 1 포인트에 대한 제 1 좌표를 포함할 수도 있고, 좌표들의 제 2 세트는 포인트들의 제 2 부분의 제 2 포인트에 대한 제 2 좌표를 포함한다. 제 1 포인트 및 제 2 포인트는 제 1 에지의 중간 로케이션으로부터 반대 방향들로 등거리에 있다.
도 5 는 본 개시에서 기술된 하나 이상의 예들에 따라 테셀레이션 유닛의 예를 더욱 상세하게 도시한 블록도이다. 예를 들어, 도 5 는 테셀레이션 유닛 (80) 을 도시한다. 테셀레이션 유닛 (80) 의 예들은 도 1 의 테셀레이션 스테이지 (24) 및 도 2 의 프리미티브 생성기 (42) 를 포함한다.
테셀레이션 유닛 (80) 은 셋업 유닛 (82), 포인트 생성기 (84), 및 연결성 생성기 (86) 를 포함할 수도 있으며, 이들은 테셀레이션 유닛 (80) 의 고정 함수 하드웨어 유닛들일 수도 있다. 셋업 유닛 (82), 포인트 생성기 (84), 및 연결성 생성기 (86) 는 설명의 편리를 위해 별개의 컴포넌트들로서 도시된다. 셋업 유닛 (82), 포인트 생성기 (84), 및 연결성 생성기 (86) 는 단일의 유닛으로서, 별개의 유닛들로서, 또는 이들의 조합으로 형성될 수도 있다.
셋업 유닛 (82) 은 도 1 의 헐 셰이더 스테이지 (22) 및 테셀레이션 제어 셰이더 (40) 와 같은 제 1 셰이더 유닛으로부터 입력으로서 테셀레이션 팩터들을 수신할 수도 있고, 그 테셀레이션 팩터들로부터 도메인 타입을 결정할 수도 있다. 예를 들어, 4 개의 테셀레이션 팩터들이 존재하는 경우, 셋업 유닛 (82) 은 도메인 타입이 삼각형이라고 결정할 수도 있고, 6 개의 테셀레이션 팩터들이 존재하는 경우, 셋업 유닛 (82) 은 도메인 타입이 사각형이라고 결정할 수도 있다. 셋업 유닛 (82) 은 라운딩 문제들을 정정하는 것, 천정 및 바닥 함수들, 하프 (half) 테셀레이션 팩터들을 결정하는 것, 및 테셀레이션 팩터들을 감소시키고 결합하는 것과 같은 다른 셋업 기능들을 수행할 수도 있다. 일반적으로 셋업 유닛 (82)은 테셀레이션 유닛 (80) 의 다른 컴포넌트들이 각각의 기능들을 수행할 수 있는 것을 보장하기 위해 테셀레이션 팩터들을 프로세싱할 수도 있다.
포인트 생성기 (84) 는 테셀레이션 팩터들, 및 포인트들의 로케이션들 (예를 들어, 포인트들의 u, v 좌표들 또는 u, v, w 좌표들) 로부터 얼마나 많은 포인트들이 도메인의 각 링의 각 에지를 따라 상주하는 지를 결정할 수도 있다. 연결성 생성기 (86) 는 도 4a 및 도 4b 에 도시된 것들과 같은, 도메인 내의 복수의 프리미티브들을 형성하기 위해 포인트들을 연결 (즉, 스티치) 할 수도 있다.
이에 따라, 테셀레이션 유닛 (80) 은 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정한다. 이것은 포인트 생성기 (84) 를 사용하여 달성될 수도 있다. 포인트 생성기 (84) 는 또한 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하고, 제 1 부분에 대한 좌표들의 제 1 세트에 기초하여 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정할 수도 있다.
예를 들어, 포인트 생성기 (84) 는 각각 도 3a 및 도 3b 의 외측 링 에지 (62) 및 외측 링 에지 (72) 와 같은 외측 링 에지를 따른 포인트들의 좌표들을 결정할 수도 있다. 일부 예들에서, 포인트 생성기 (84) 는 도 5 의 포인트 생성기 (84) 내의 버퍼 (88) 와 같은 버퍼에 결정된 좌표들을 저장할 수도 있다. 일 예에서, 포인트 생성기 (84) 는 버퍼 (88) 에 외측 링 에지 (62 또는 72) 의 제 1 부분에 대한 좌표들의 제 1 세트를 저장하는 한편, 다른 버퍼에 외측 링 에지 (62 또는 72) 의 제 2 부분에 대한 좌표득의 제 2 세트를 저장할 수도 있다. 포인트 생성기 (84) 는 좌표들의 제 1 세트에 대한 결정된 좌표들에 기초하여 외측 링 에지 (62) 또는 외측 링 에지 (72) 의 제 2 부분의 포인트들에 대한 좌표들의 제 2 세트를 결정할 수도 있다. 이것은 좌표들의 제 1 및 제 2 세트 사이의 대칭성에 기초하여 달성될 수도 있다. 다른 예에서, 포인트 생성기 (84) 는 버퍼 (88) 에 좌표들의 제 1 및 제 2 세트 양자 모두를 저장할 수도 있다.
그러나, 버퍼 (88) 가 설명의 편의 상 포인트 생성기 (84) 내에 도시되는 것이 이해될 것이다. 버퍼 (88) 는 테셀레이션 유닛 (80) 내에 위치될 수도 있고, 포인트 생성기 (84) 및 연결성 생성기 (86) 양자 모두에 커플링될 수도 있다. 대안적으로, 버퍼 (88) 는 GPU (12) 의, 캐시 메모리와 같은 로컬 메모리 내에 위치될 수도 있다. 일부 예들에서, 버퍼 (88) 는 시스템 메모리 (14) 내에 위치될 수도 있다.
상술된 것들과 유사한 하나 이상의 예들에 따르면, 포인트 생성기 (84) 가 에지를 포인트들로 분할하는 경우, 포인트들의 각각은 임의의 좌측 또는 우측 이웃 포인트들로부터 동일 거리 이격된다. 일 예로서, 테셀레이션 팩터가 포인트 생성기 (84) 에게 에지를 5 개의 포인트들로 분할하도록 지시하는 경우 (홀수 테셀레이션 팩터), 포인트 생성기 (84) 는 에지를 x 좌표들: 0, 0.25, 0.5, 0.75, 및 1 에서 분할할 수도 있다. 일 예로서, 테셀레이션 팩터가 포인트 생성기 (84) 에게 에지를 4 개의 포인트들로 분할하도록 지시하는 경우 (짝수 테셀레이션 팩터), 포인트 생성기 (84) 는 에지를 x 좌표들: 0, 0.33, 0.66, 및 1 에 위치된 포인트들로 분할할 수도 있다. 상기의 예들의 양자 모두에서, 포인트들의 대부분 사이에 대칭성이 존재한다. 예를 들어, 하나의 포인트는 공식:
x(Pi) = 1-x(Pn-i)
을 사용하여 다른 포인트로부터 계산될 수도 있고, 여기서 i 는 포인트의 0 으로부터 (포인트들의 # - 1) 까지의 인덱스이고, 'n' 은 포인트들의 # - 1 이며, x() 는 포인트의 x 좌표를 리턴하는 함수이다. 식 x(Pi) = 1-x(Pn-i) 은 상기 식 X(N-n) = 1-X(n) 의 재진술일 수도 있고, 추가적으로 이해를 돕기 위해 제공된다. 일 예로서, 각각 0 내지 4 로 넘버링된 (P0...P4 로서 표시된) 5 개의 포인트들이 존재하는 경우, 포지션 3 에서의 포인트는:
x(P3) = 1-x(P4-3) =
x(P3) = 1-x(P1) (P1 의 값 = 0.25 를 대입) =
x(P3) = 1-0.25 =
x(P3) = 0.75
따라서, 포지션 3 에서의 포인트의 x 좌표 값은 0.75 이다. 이러한 대칭성에 기초하여, 각 포인트의 x 좌표를 결정하는데 요구되는 계산들의 수는 에지 상의 각 포인트에 대한 x 좌표를 개별적으로 결정하는 것에 의하는 것보다 상기 계산을 사용함으로써 감소될 수도 있다. 예를 들어, 상술한 예에서, 포인트 생성기 (84) 는 P1 에 대한 좌표를 결정하고, P1 의 값으로부터 P3 의 값을 결정할 수도 있다. 이러한 방식으로, 본 개시의 기법들은 그러한 대칭적인 포인트들에 대한 좌표들을 결정하기 위해 정규화된 에지 상에 상주하는 포인트들 사이의 대칭성을 활용할 수도 있다.
내측 링의 에지와 평행한 외측 링의 각 에지의 경우, 연결성 생성기 (86) 는 프리미티브들을 형성하기 위해 외측 링 에지의 포인트들이 내측 링 에지의 포인트들과 어떻게 연결되어야 하는지를 결정할 수도 있다. 예를 들어, 외측 링 에지를 따른 포인트들 및 내측 링 에지를 따른 포인트들이 삼각형들을 형성할 수 있는 적어도 2 개의 상이한 방법들이 존재할 수도 있다. 하나의 예로서, 연결성 생성기 (86) 는 외측 링 에지로부터의 2 개의 포인트들 및 내측 링 에지로부터 하나의 포인트를 사용하여 삼각형을 형성하고, 그들을 함께 연결하여 삼각형을 형성할 수도 있다. 다른 예로서, 연결성 생성기 (86) 는 삼각형을 형성하기 위해 내측 링 에지로부터의 2 개의 포인트들 및 외측 링 에지로부터의 하나의 포인트를 사용하여 삼각형을 형성할 수도 있다. 이에 따라, 연결성 생성기 (86) 는 패치에 매핑되는 복수의 프리미티브들로 도메인을 분할하기 위해 제 1 링의 제 1 에지를 따라 상주하는 포인트들을 제 2 링의 제 2 에지를 따라 상주하는 포인트들과 스티치할 수도 있다.
도 6 은 본 개시에서 기술된 하나 이상의 예들에 따른 테셀레이션을 위한 예시의 방법을 도시하는 플로우 챠트이다. 단지 설명의 목적으로, 도 5 를 참조한다. 상술된 바와 같이 도 5 는 테셀레이션 유닛의 예를 제공한다. 테셀레이션 유닛의 예들은 도 1 의 테셀레이션 스테이지 (24) 및 도 2 의 프리미티브 생성기 (42) 를 포함한다.
예시의 시스템에서, 테셀레이션 유닛은 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정할 수도 있다 (90). 이것은, 예를 들어, 도 5 의 포인트 생성기 (84) 에서 발생할 수도 있다. 예를 들어, 테셀레이션 유닛 (80) 은 링의 에지에 대한 테셀레이션 팩터를 수신할 수도 있다. 테셀레이션 유닛 (80) 은 또한 입력으로서 테셀레이션 팩터의 하나의 예인 깊이 레벨 값을 수신할 수도 있다.
테셀레이션 유닛은 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정할 수도 있다 (92). 이것은, 예를 들어, 도 5 의 포인트 생성기 (84) 에서 발생할 수도 있다. 좌표들은 예를 들어 단위 사각형 도메인 또는 단위 삼각형 도메인에 대해 생성될 수도 있다. 그러한 도메인들은 정규화될 수도 있다. 예를 들어, 정규화된 사각형 도메인은 "0" 으로부터 "1" 까지 정규화된 4 개의 에지들 각각을 가지고, 좌표들 (0,0), (1,0), (0,1), (1,1) 을 가질 수도 있고, 정규화된 삼각형 도메인은 "0" 으로부터 "1" 까지 정규화된 3 개의 에지들 각각을 가지며, 좌표들 (0,0,1), (0,1,0), (1,0,0) 을 가질 수도 있다. 또, 상술된 바와 같이, 삼각형 도메인 내의 정규화된 무게중심 좌표득을 사용하는 경우, 각각의 좌표 세트의 합은 항상 1 이며, 예를 들어, (0,0,1) 의 경우에 0 + 0 + 1 = 1; (0,1,0) 의 경우에 0 + 1 + 0 = 1; 및 (1,0,0) 의 경우에 1 + 0 + 0 = 1 이다.
링의 각 에지에 대해, 포인트 생성기 (84) 는 해당 에지에 대한 테셀레이션 팩터에 의해 특정된 포인트들의 수로 에지를 분할할 수도 있다. 테셀레이션 팩터에 기초하여, 포인트 생성기 (84) 는 각각의 깊이 레벨에 대해 한 번 에지들을 포인트들로 서브 분할하는 프로세스를 반복할 수도 있다. 각각의 깊이 레벨에 대해, 포인트 생성기 (84) 는 도메인의 중심을 향해 수렴하고 오리지날 에지가 아니라 동심 에지를 서브 분할한다. 따라서, 각각의 깊이 레벨에 대해, 도메인과 동일한 동심 형상은 해당 에지에 대한 테셀레이션 팩터에 의해 특정된 포인트들의 수로 서브 분할된다. 깊이 레벨이 짝수인 경우, 포인트 생성기 (84) 는 패치의 동심 버전으로서라기 보다 단일 포인트로서 최종 깊이 레벨을 생성할 수도 있다.
테셀레이션 유닛은 제 1부분에 대한 좌표들의 제 1 세트에 기초하여 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정할 수도 있다 (94). 이것은, 예를 들어, 도 5 의 포인트 생성기 (84) 에서 발생할 수도 있다. 예를 들어, 테셀레이션 유닛은 스루풋을 증가시키기 위해 에지의 2 개의 대칭적 포인트들의 좌표들을 병렬로 결정하도록 설계될 수도 있다. 이러한 예에서, 테셀레이션 유닛은 2 개의 x-y 좌표 쌍들을 동시에 출력할 수 있는 포인트 생성기 (84) 를 포함하도록 구성될 수도 있다. 포인트 생성기 (84) 는 연결성 생성기로 양 포인트들에 대한 x-y 좌표 쌍들을 병렬로 송신할 수도 있다. 일부 예들에서, 연결성 생성기 (86) 는 한 번에 2 개의 x-y 좌표 포인트들을 수신하도록 구성될 수도 있다. 연결성 생성기 (86) 가 2 개의 x-y 좌표 쌍들을 동시에 수신할 수 있는 경우에, 테셀레이션 유닛은 2 개의 4-딥 선입선출 (FIFO) 큐들 (즉, 4 개의 x-y 좌표 쌍들을 유지할 수 있는 2 개의 FIFO 들) 을 포함할 수도 있다. 예를 들어, 테셀레이션 유닛, GPU (12) 의 로컬 메모리, 또는 시스템 메모리 (14) 는 2 개의 버퍼 (88) 를 포함할 수도 있고, 여기서 2 개의 버퍼 (88) 의 각각은 4-딥 FIFO 큐이다.
테셀레이션 유닛은 제 1 링의 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 스티치할 수도 있다. 이것은, 예를 들어, 도 5 의 연결성 생성기 (86) 에서 발생할 수도 있다. 스티칭은 좌표들의 제 1 세트 및 좌표들의 제 2 세트에 기초할 수도 있다. 제 2 링의 제 2 에지를 따라 상주하는 포인트들은 패치의 해상도를 증가시키기 위해 도메인을 패치에 매핑될 수도 있는 복수의 프리미티브들로 분할할 수도 있다. 제 2 링은 도메인 내의 제 1 링의 내측에 있을 수도 있다.
예에 따라, 여기에 기술된 기법들 중 임의의 것의 소정의 액션들 또는 이벤트들이 상이한 시퀀스로 수행될 수 있고, 추가되거나, 병합되거나 완전히 배체될 수도 있다 (예를 들어, 모든 기술된 액션들 또는 이벤트들이 기법들의 실시를 위해 필요한 것은 아니다). 또한, 소정의 예들에서, 액션들 또는 이벤트들은 순차적이라기보다는 예를 들어, 다중 스레드 프로세싱, 인터럽트 프로세싱, 또는 다중 프로세서들을 통해 동시적으로 수행될 수도 있다.
하나 이상의 예들에서, 기술된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되는 경우, 그 기능들은 컴퓨터 판독가능 매체 상의 하나 이상의 명령들 또는 코드로서 저장될 수도 있다. 컴퓨터 판독가능 매체는 컴퓨터 데이터 저장 매체를 포함할 수도 있다. 데이터 저장 매체는 본 개시에 기술된 기법들의 구현을 위해 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능한 매체일 수도 있다. 제한이 아닌 예시로써, 그러한 컴퓨터 판독가능 매체는 랜덤 액세스 메모리 (RAM), 리드 온리 메모리 (ROM), EEPROM, CD-ROM, 또는 다른 광디스크 기억장치, 자기 디스크 기억장치, 또는 다른 자기 저장 디바이스, 또는 명령들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 저장하는데 사용될 수 있고, 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 여기에서 사용되는 디스크 (disk) 및 디스크 (disc) 는 컴팩트 디스크 (CD), 레이저 디스크, 광디스크, DVD (digital versatile disc), 플로피 디스크, 및 블루레이 디스크를 포함하며, 여기서, 디스크 (disk) 는 보통 자기적으로 데이터를 재생하는 반면, 디스크 (disc) 는 보통 레이저를 사용하여 광학적으로 데이터를 재생한다. 상기한 것의 조합들은 또한 컴퓨터 판독가능 매체의 범위 내에 포함되어야 한다.
코드는 하나 이상의 디지털 신호 프로세서들 (DSPs), 범용 마이크로프로세서들, 주문자 반도체들 (ASICs), 필드 프로그램가능 로직 어레이들 (FPGAs), 또는 다른 등가의 집적되거나 이산의 로직 회로와 같은 하나 이상의 프로세서들에 의해 실행될 수도 있다. 이에 따라, 여기서 사용된 용어 "프로세서" 는 여기에 기술된 기법들의 구현에 적합한 상술된 구조 또는 임의의 다른 구조 중 임의의 것을 지칭할 수도 있다. 또한, 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들에서 완전히 구현될 수 있을 것이다.
본 개시의 기법들은 무선 핸드셋, 집적 회로 (IC) 또는 IC 들의 세트 (즉, 칩셋) 을 포함하여 광범위한 디바이스들 또는 장치들에서 구현될 수도 있다. 여러 컴포넌트들, 모듈들 또는 유닛들이 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양태들을 강조하기 위해 본 개시에서 기술되지만, 상이한 하드웨어 유닛들에 의한 실현을 반드시 요구하지는 않는다. 오히려, 상술된 바와 같이, 여러 유닛들은 하드웨어 유닛 내에서 결합되거나 적합한 소프트웨어 및/또는 펌웨어와 결합하여, 상술된 하나 이상의 프로세서들을 포함하여, 상호 동작가능한 하드웨어 유닛들의 집합으로서 제공될 수도 있다.
여러 예들이 기술되었다. 이들 및 다른 예들은 다음의 청구범위의 범위 내에 있다.

Claims (41)

  1. 그래픽 프로세싱을 위한 테셀레이션 유닛으로서,
    도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하고,
    상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하며,
    상기 제 1 부분에 대한 좌표들의 상기 제 1 세트에 기초하여 상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하도록 구성된 제 1 유닛; 및
    좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트에 기초하여, 패치의 해상도를 증가시키기 위해 상기 도메인을 상기 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해, 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 제 2 링의 제 2 에지를 따라 상주하는 포인트들과 스티치 (stitch) 하도록 구성된 제 2 유닛을 포함하며,
    상기 제 2 링은 상기 도메인 내의 상기 제 1 링보다 내측에 있는, 그래픽 프로세싱을 위한 테셀레이션 유닛.
  2. 제 1 항에 있어서,
    상기 제 1 유닛은 포인트 생성기를 포함하고,
    상기 제 2 유닛은 연결성 생성기를 포함하는, 그래픽 프로세싱을 위한 테셀레이션 유닛.
  3. 제 1 항에 있어서,
    상기 제 1 유닛은 포인트들의 상기 제 1 부분에 대한 좌표들의 상기 제 1 세트에만 기초하여 포인트들의 상기 제 2 부분에 대한 좌표들의 상기 제 2 세트를 결정하도록 구성되는, 그래픽 프로세싱을 위한 테셀레이션 유닛.
  4. 제 1 항에 있어서,
    포인트들의 상기 제 1 부분은 상기 제 1 에지를 따라 상주하는 포인트들의 제 1 반절 (half) 을 포함하고,
    포인트들의 상기 제 2 부분은 상기 제 1 에지를 따라 상주하는 포인트들의 제 2 반절을 포함하는, 그래픽 프로세싱을 위한 테셀레이션 유닛.
  5. 제 1 항에 있어서,
    포인트들의 상기 제 1 부분에서의 각 포인트는 포인트들의 상기 제 2 부분에서의 대응하는 포인트와 대칭적인, 그래픽 프로세싱을 위한 테셀레이션 유닛.
  6. 제 1 항에 있어서,
    상기 제 2 유닛은 1 로부터 좌표들의 상기 제 1 세트의 각 좌표를 감산하여, 좌표들의 상기 제 2 세트의 대응하는 좌표들을 결정하도록 구성되는, 그래픽 프로세싱을 위한 테셀레이션 유닛.
  7. 제 1 항에 있어서,
    좌표들의 상기 제 1 세트는 포인트들의 상기 제 1 부분에서의 제 1 포인트에 대한 제 1 좌표를 포함하고, 좌표들의 상기 제 2 세트는 포인트들의 상기 제 2 부분에서의 제 2 포인트에 대한 제 2 좌표를 포함하며,
    상기 제 1 포인트 및 상기 제 2 포인트는 상기 제 1 에지의 중간 로케이션으로부터, 반대 방향으로 등거리에 있고,
    상기 제 2 유닛은 1 로부터 상기 제 1 포인트에 대한 상기 제 1 좌표를 감산하여 상기 제 2 포인트에 대한 상기 제 2 좌표를 결정하도록 구성되는, 그래픽 프로세싱을 위한 테셀레이션 유닛.
  8. 제 1 항에 있어서,
    상기 제 2 유닛은 버퍼에 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트 중 적어도 하나를 저장하도록 구성되는, 그래픽 프로세싱을 위한 테셀레이션 유닛.
  9. 제 1 항에 있어서,
    좌표들의 상기 제 1 세트는 값들의 세트 (X) 이도록 결정되고, 좌표들의 상기 제 2 세트는 1-X 이도록 결정되며,
    상기 결정은 값들의 상기 세트 (X), 및 좌표들의 상기 제 1 및 제 2 세트 사이의 대칭성을 사용하는, 그래픽 프로세싱을 위한 테셀레이션 유닛.
  10. 제 1 항에 있어서,
    상기 제 1 유닛은 상기 제 1 유닛이 좌표들의 상기 제 1 세트를 결정하는 것과 동시에 상기 제 2 부분에 대한 좌표들의 상기 제 2 세트를 결정하도록 구성되고,
    상기 제 1 유닛은 버퍼에 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트를 동시에 저장하도록 구성되는, 그래픽 프로세싱을 위한 테셀레이션 유닛.
  11. 테셀레이션 방법으로서,
    도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하는 단계;
    상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하는 단계;
    상기 제 1 부분에 대한 좌표들의 상기 제 1 세트에 기초하여 상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하는 단계; 및
    좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트에 기초하여, 패치의 해상도를 증가시키기 위해 상기 도메인을 상기 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해, 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 제 2 링의 제 2 에지를 따라 상주하는 포인트들과 스티치 (stitch) 하는 단계를 포함하고,
    상기 제 2 링은 상기 도메인 내의 상기 제 1 링보다 내측에 있는, 테셀레이션 방법.
  12. 제 11 항에 있어서,
    (1) 도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하고, (2) 상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하며, (3) 상기 제 1 부분에 대한 좌표들의 상기 제 1 세트에 기초하여 상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하기 위한 포인트 생성기; 및
    좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트에 기초하여, 패치의 해상도를 증가시키기 위해 상기 도메인을 상기 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해, 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 제 2 링의 제 2 에지를 따라 상주하는 포인트들과 스티치 (stitch) 하기 위한 연결성 생성기
    를 사용하는 단계를 더 포함하고,
    상기 제 2 링은 상기 도메인 내의 상기 제 1 링보다 내측에 있는, 테셀레이션 방법.
  13. 제 11 항에 있어서,
    포인트들의 상기 제 1 부분에 대한 좌표들의 상기 제 1 세트에만 기초하여 포인트들의 상기 제 2 부분에 대한 좌표들의 상기 제 2 세트를 결정하는 단계를 더포함하는, 테셀레이션 방법.
  14. 제 11 항에 있어서,
    포인트들의 상기 제 1 부분은 상기 제 1 에지를 따라 상주하는 포인트들의 제 1 반절 (half) 을 포함하고,
    포인트들의 상기 제 2 부분은 상기 제 1 에지를 따라 상주하는 포인트들의 제 2 반절을 포함하는, 테셀레이션 방법.
  15. 제 11 항에 있어서,
    포인트들의 상기 제 1 부분에서의 각 포인트는 포인트들의 상기 제 2 부분에서의 대응하는 포인트와 대칭적인, 테셀레이션 방법.
  16. 제 11 항에 있어서,
    1 로부터 좌표들의 상기 제 1 세트의 각 좌표를 감산하여, 좌표들의 상기 제 2 세트의 대응하는 좌표들을 결정하는 단계를 더 포함하는, 테셀레이션 방법.
  17. 제 11 항에 있어서,
    좌표들의 상기 제 1 세트는 포인트들의 상기 제 1 부분에서의 제 1 포인트에 대한 제 1 좌표를 포함하고, 좌표들의 상기 제 2 세트는 포인트들의 상기 제 2 부분에서의 제 2 포인트에 대한 제 2 좌표를 포함하며,
    상기 제 1 포인트 및 상기 제 2 포인트는 상기 제 1 에지의 중간 로케이션으로부터, 반대 방향으로 등거리에 있고,
    1 로부터 상기 제 1 포인트에 대한 상기 제 1 좌표를 감산하여 상기 제 2 포인트에 대한 상기 제 2 좌표를 결정하는 단계를 더 포함하는, 테셀레이션 방법.
  18. 제 11 항에 있어서,
    버퍼에 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트 중 적어도 하나를 저장하는 단계를 더 포함하는, 테셀레이션 방법.
  19. 제 11 항에 있어서,
    좌표들의 상기 제 1 세트는 값들의 세트 (X) 이도록 결정되고, 좌표들의 상기 제 2 세트는 1-X 이도록 결정되며,
    상기 결정은 값들의 상기 세트 (X), 및 좌표들의 상기 제 1 및 제 2 세트 사이의 대칭성을 사용하는, 테셀레이션 방법.
  20. 제 11 항에 있어서,
    좌표들의 상기 제 2 세트를 결정하는 단계는 좌표들의 상기 제 1 세트를 결정하는 것과 동시에 상기 제 2 부분에 대한 좌표들의 상기 제 2 세트를 결정하는 단계를 포함하고,
    상기 방법은 버퍼에 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트를 동시에 저장하는 단계를 더 포함하는, 테셀레이션 방법.
  21. 테셀레이션 유닛으로서,
    도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하는 수단;
    상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하는 수단;
    상기 제 1 부분에 대한 좌표들의 상기 제 1 세트에 기초하여 상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하는 수단; 및
    좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트에 기초하여, 패치의 해상도를 증가시키기 위해 상기 도메인을 상기 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해, 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 제 2 링의 제 2 에지를 따라 상주하는 포인트들과 스티치 (stitch) 하는 수단을 포함하고,
    상기 제 2 링은 상기 도메인 내의 상기 제 1 링보다 내측에 있는, 테셀레이션 유닛.
  22. 제 21 항에 있어서,
    포인트들의 상기 제 1 부분에 대한 좌표들의 상기 제 1 세트에만 기초하여 포인트들의 상기 제 2 부분에 대한 좌표들의 상기 제 2 세트를 결정하는 수단을 더포함하는, 테셀레이션 유닛.
  23. 제 21 항에 있어서,
    포인트들의 상기 제 1 부분은 상기 제 1 에지를 따라 상주하는 포인트들의 제 1 반절 (half) 을 포함하고,
    포인트들의 상기 제 2 부분은 상기 제 1 에지를 따라 상주하는 포인트들의 제 2 반절을 포함하는, 테셀레이션 유닛.
  24. 제 21 항에 있어서,
    포인트들의 상기 제 1 부분에서의 각 포인트는 포인트들의 상기 제 2 부분에서의 대응하는 포인트와 대칭적인, 테셀레이션 유닛.
  25. 제 21 항에 있어서,
    1 로부터 좌표들의 상기 제 1 세트의 각 좌표를 감산하여 좌표들의 상기 제 2 세트의 대응하는 좌표들을 결정하는 수단을 더 포함하는, 테셀레이션 유닛.
  26. 제 21 항에 있어서,
    좌표들의 상기 제 1 세트는 포인트들의 상기 제 1 부분에서의 제 1 포인트에 대한 제 1 좌표를 포함하고, 좌표들의 상기 제 2 세트는 포인트들의 상기 제 2 부분에서의 제 2 포인트에 대한 제 2 좌표를 포함하며,
    상기 제 1 포인트 및 상기 제 2 포인트는 상기 제 1 에지의 중간 로케이션으로부터, 반대 방향으로 등거리에 있고,
    1 로부터 상기 제 1 포인트에 대한 상기 제 1 좌표를 감산하여 상기 제 2 포인트에 대한 상기 제 2 좌표를 결정하는 수단을 더 포함하는, 테셀레이션 유닛.
  27. 제 21 항에 있어서,
    버퍼에 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트 중 적어도 하나를 저장하는 수단을 더 포함하는, 테셀레이션 유닛.
  28. 제 21 항에 있어서,
    좌표들의 상기 제 1 세트는 값들의 세트 (X) 이도록 결정되고, 좌표들의 상기 제 2 세트는 1-X 이도록 결정되며,
    상기 결정은 값들의 상기 세트 (X), 및 좌표들의 상기 제 1 및 제 2 세트 사이의 대칭성을 사용하는, 테셀레이션 유닛.
  29. 제 21 항에 있어서,
    좌표들의 상기 제 2 세트를 결정하는 수단은 좌표들의 상기 제 1 세트를 결정하는 것과 동시에 상기 제 2 부분에 대한 좌표들의 상기 제 2 세트를 결정하는 수단을 포함하고,
    상기 테셀레이션 유닛은 버퍼에 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트를 동시에 저장하는 수단을 더 포함하는, 테셀레이션 유닛.
  30. 디바이스로서,
    중앙 프로세싱 유닛 (CPU); 및
    그래픽 프로세싱 유닛 (GPU) 를 포함하며,
    상기 그래픽 프로세싱 유닛 (GPU) 은,
    도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하고,
    상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하며,
    상기 제 1 부분에 대한 좌표들의 상기 제 1 세트에 기초하여 상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하고,
    좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트에 기초하여, 패치의 해상도를 증가시키기 위해 상기 도메인을 상기 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해, 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 제 2 링의 제 2 에지를 따라 상주하는 포인트들과 스티치 (stitch) 하도록 구성된 테셀레이션 유닛을 포함하며,
    상기 제 2 링은 상기 도메인 내의 상기 제 1 링보다 내측에 있는, 디바이스.
  31. 제 30 항에 있어서,
    상기 테셀레이션 유닛은 제 1 유닛 및 제 2 유닛을 포함하고,
    상기 제 1 유닛은,
    상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 상기 다수의 포인트들을 결정하고,
    상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 상기 제 1 부분에 대한 좌표들의 상기 제 1 세트를 결정하며,
    상기 제 1 부분에 대한 좌표들의 상기 제 1 세트에 기초하여 상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 상기 제 2 부분에 대한 좌표들의 상기 제 2 세트를 결정하도록 구성되고;
    상기 제 2 유닛은,
    좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트에 기초하여, 패치의 해상도를 증가시키기 위해 상기 도메인을 상기 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해, 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 상기 제 2 링의 제 상기 2 에지를 따라 상주하는 포인트들과 스티치 (stitch) 하도록 구성되며,
    상기 제 2 링은 상기 도메인 내의 상기 제 1 링보다 내측에 있는, 디바이스.
  32. 제 31 항에 있어서,
    상기 제 1 유닛은 포인트 생성기를 포함하고,
    상기 제 2 유닛은 연결성 생성기를 포함하는, 디바이스.
  33. 제 31 항에 있어서,
    상기 제 1 유닛은 포인트들의 상기 제 1 부분에 대한 좌표들의 상기 제 1 세트에만 기초하여 포인트들의 상기 제 2 부분에 대한 좌표들의 상기 제 2 세트를 결정하도록 구성되는, 디바이스.
  34. 제 31 항에 있어서,
    상기 제 2 유닛은 1 로부터 좌표들의 상기 제 1 세트의 각 좌표를 감산하여, 좌표들의 상기 제 2 세트의 대응하는 좌표들을 결정하도록 구성되는, 디바이스.
  35. 제 31 항에 있어서,
    좌표들의 상기 제 1 세트는 포인트들의 상기 제 1 부분에서의 제 1 포인트에 대한 제 1 좌표를 포함하고, 좌표들의 상기 제 2 세트는 포인트들의 상기 제 2 부분에서의 제 2 포인트에 대한 제 2 좌표를 포함하며,
    상기 제 1 포인트 및 상기 제 2 포인트는 상기 제 1 에지의 중간 로케이션으로부터, 반대 방향으로 등거리에 있고,
    상기 제 2 유닛은 1 로부터 상기 제 1 포인트에 대한 상기 제 1 좌표를 감산하여 상기 제 2 포인트에 대한 상기 제 2 좌표를 결정하도록 구성되는, 디바이스.
  36. 제 31 항에 있어서,
    상기 제 2 유닛은 버퍼에 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트 중 적어도 하나를 저장하도록 구성되는, 디바이스.
  37. 제 30 항에 있어서,
    포인트들의 상기 제 1 부분은 상기 제 1 에지를 따라 상주하는 포인트들의 제 1 반절 (half) 을 포함하고,
    포인트들의 상기 제 2 부분은 상기 제 1 에지를 따라 상주하는 포인트들의 제 2 반절을 포함하는, 디바이스.
  38. 제 30 항에 있어서,
    포인트들의 상기 제 1 부분에서의 각 포인트는 포인트들의 상기 제 2 부분에서의 대응하는 포인트와 대칭적인, 디바이스.
  39. 제 30 항에 있어서,
    좌표들의 상기 제 1 세트는 값들의 세트 (X) 이도록 결정되고, 좌표들의 상기 제 2 세트는 1-X 이도록 결정되며,
    상기 결정은 값들의 상기 세트 (X), 및 좌표들의 상기 제 1 및 제 2 세트 사이의 대칭성을 사용하는, 디바이스.
  40. 제 30 항에 있어서,
    버퍼를 더 포함하고,
    상기 테셀레이션 유닛은, 상기 테셀레이션 유닛이 좌표들의 상기 제 1 세트를 결정하는 것과 동시에 상기 제 2 부분에 대한 좌표들의 상기 제 2 세트를 결정하도록 구성되고,
    상기 테셀레이션 유닛은 버퍼에 좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트를 동시에 저장하도록 구성되는, 디바이스.
  41. 명령들을 포함하는 비일시적 컴퓨터 판독가능 매체로서,
    상기 명령들은, 싱크 디바이스에서 실행될 때, 프로그램가능 프로세서로 하여금,
    도메인 내의 제 1 링의 제 1 에지를 따라 상주하는 다수의 포인트들을 결정하게 하고,
    상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 제 1 부분에 대한 좌표들의 제 1 세트를 결정하게 하며,
    상기 제 1 부분에 대한 좌표들의 상기 제 1 세트에 기초하여 상기 도메인 내의 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 포인트들의 제 2 부분에 대한 좌표들의 제 2 세트를 결정하게 하고,
    좌표들의 상기 제 1 세트 및 좌표들의 상기 제 2 세트에 기초하여, 패치의 해상도를 증가시키기 위해 상기 도메인을 상기 패치에 맵핑되는 복수의 프리미티브들로 분할하기 위해, 상기 제 1 링의 상기 제 1 에지를 따라 상주하는 하나 이상의 포인트들을 제 2 링의 제 2 에지를 따라 상주하는 포인트들과 스티치 (stitch) 하게 하며,
    상기 제 2 링은 상기 도메인 내의 상기 제 1 링보다 내측에 있는, 비일시적 컴퓨터 판독가능 매체.
KR1020157007984A 2012-08-30 2013-08-15 대칭적 에지 스플릿팅에 의한 표면 테셀레이션 KR101635334B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/599,218 US9142060B2 (en) 2012-08-30 2012-08-30 Computation reduced tessellation
US13/599,218 2012-08-30
PCT/US2013/055185 WO2014035682A1 (en) 2012-08-30 2013-08-15 Surface tessselation by symmetric edge splitting

Publications (2)

Publication Number Publication Date
KR20150048228A true KR20150048228A (ko) 2015-05-06
KR101635334B1 KR101635334B1 (ko) 2016-06-30

Family

ID=49035946

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157007984A KR101635334B1 (ko) 2012-08-30 2013-08-15 대칭적 에지 스플릿팅에 의한 표면 테셀레이션

Country Status (4)

Country Link
US (1) US9142060B2 (ko)
KR (1) KR101635334B1 (ko)
CN (1) CN104584083B (ko)
WO (1) WO2014035682A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9082204B2 (en) 2012-08-30 2015-07-14 Qualcomm Incorporated Storage structures for stitching primitives in graphics processing
US9076260B2 (en) 2012-08-30 2015-07-07 Qualcomm Incorporated Stitching for primitives in graphics processing
KR101555426B1 (ko) * 2014-02-07 2015-09-25 고려대학교 산학협력단 지형 렌더링 방법 및 장치
US9721376B2 (en) 2014-06-27 2017-08-01 Samsung Electronics Co., Ltd. Elimination of minimal use threads via quad merging
US9972124B2 (en) 2014-06-27 2018-05-15 Samsung Electronics Co., Ltd. Elimination of minimal use threads via quad merging
US20160093102A1 (en) * 2014-09-25 2016-03-31 Peter L. Doyle Efficient tessellation cache
GB2540981B (en) * 2015-08-03 2017-11-15 Advanced Risc Mach Ltd Graphics processing
US10242496B2 (en) * 2017-04-24 2019-03-26 Intel Corporation Adaptive sub-patches system, apparatus and method
US10521877B2 (en) 2017-05-23 2019-12-31 Samsung Electronics Co., Ltd Apparatus and method for speculative buffer reservations with cancellation mechanism
GB2572617B (en) * 2018-04-05 2021-06-16 Imagination Tech Ltd Blending hardware
CN115170600B (zh) * 2022-09-05 2022-11-22 南京砺算科技有限公司 用于曲面细分的缝合方法及装置、存储介质、终端设备
CN115861512B (zh) * 2023-01-31 2023-07-25 南京砺算科技有限公司 用于曲面细分的输出点序列确定方法及装置、存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110310102A1 (en) * 2010-06-17 2011-12-22 Via Technologies, Inc. Systems and methods for subdividing and storing vertex data
US8120607B1 (en) * 2008-05-30 2012-02-21 Nvidia Corporation Boundary transition region stitching for tessellation

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0488563A3 (en) 1990-11-30 1993-11-03 Ibm Method and apparatus for rendering trimmed parametric surfaces
US6747644B1 (en) 1995-08-04 2004-06-08 Sun Microsystems, Inc. Decompression of surface normals in three-dimensional graphics data
US5995109A (en) 1997-04-08 1999-11-30 Lsi Logic Corporation Method for rendering high order rational surface patches
US6028607A (en) 1998-01-15 2000-02-22 Sun Microsystems, Inc. Method of producing a sequence of triangles from a vertex raster with and without half resolution edges while decompressing a compressed geometry stream
US6438266B1 (en) 1998-08-27 2002-08-20 Lucent Technologies Inc. Encoding images of 3-D objects with improved rendering time and transmission processes
US6445389B1 (en) 1998-10-06 2002-09-03 International Business Machines Corp. Compression of polygonal models with low latency decompression
US6462738B1 (en) 1999-04-26 2002-10-08 Spatial Technology, Inc. Curved surface reconstruction
US6504537B1 (en) * 2000-09-05 2003-01-07 Nvidia Corporation System, method and article of manufacture for fractional tessellation during graphics processing
US6597356B1 (en) 2000-08-31 2003-07-22 Nvidia Corporation Integrated tessellator in a graphics processing unit
US6940505B1 (en) 2002-05-20 2005-09-06 Matrox Electronic Systems Ltd. Dynamic tessellation of a base mesh
US7109987B2 (en) 2004-03-02 2006-09-19 Ati Technologies Inc. Method and apparatus for dual pass adaptive tessellation
US7928993B2 (en) 2006-07-28 2011-04-19 Intel Corporation Real-time multi-resolution 3D collision detection using cube-maps
US8643644B2 (en) 2008-03-20 2014-02-04 Qualcomm Incorporated Multi-stage tessellation for graphics rendering
US8599202B1 (en) * 2008-09-29 2013-12-03 Nvidia Corporation Computing tessellation coordinates using dedicated hardware
US8482560B2 (en) 2008-12-31 2013-07-09 Intel Corporation Image forming techniques
US20100214294A1 (en) 2009-02-20 2010-08-26 Microsoft Corporation Method for tessellation on graphics hardware
US8884957B2 (en) * 2009-09-09 2014-11-11 Advanced Micro Devices, Inc. Tessellation engine and applications thereof
US9245371B2 (en) 2009-09-11 2016-01-26 Nvidia Corporation Global stores and atomic operations
US8537158B2 (en) 2009-12-02 2013-09-17 Microsoft Corporation Parallel triangle tessellation
GB201007348D0 (en) 2010-04-30 2010-06-16 Imagination Tech Ltd Programmable tessellation in a tile based rendering system
US9082204B2 (en) 2012-08-30 2015-07-14 Qualcomm Incorporated Storage structures for stitching primitives in graphics processing
US9076260B2 (en) 2012-08-30 2015-07-07 Qualcomm Incorporated Stitching for primitives in graphics processing

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8120607B1 (en) * 2008-05-30 2012-02-21 Nvidia Corporation Boundary transition region stitching for tessellation
US20110310102A1 (en) * 2010-06-17 2011-12-22 Via Technologies, Inc. Systems and methods for subdividing and storing vertex data

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Botsch, Mario, et al. "Geometric modeling based on polygonal meshes." (2007) *
Moreton, Henry. "Watertight tessellation using forward differencing." Proceedings of the ACM SIGGRAPH/EUROGRAPHICS workshop on Graphics hardware(2001) *

Also Published As

Publication number Publication date
WO2014035682A1 (en) 2014-03-06
KR101635334B1 (ko) 2016-06-30
US9142060B2 (en) 2015-09-22
CN104584083B (zh) 2016-10-26
US20140063012A1 (en) 2014-03-06
CN104584083A (zh) 2015-04-29

Similar Documents

Publication Publication Date Title
KR101635334B1 (ko) 대칭적 에지 스플릿팅에 의한 표면 테셀레이션
US9076260B2 (en) Stitching for primitives in graphics processing
JP5837221B2 (ja) タイルベースのレンダリングにおけるテッセレーション
US9082204B2 (en) Storage structures for stitching primitives in graphics processing
US9305397B2 (en) Vertex order in a tessellation unit
US9123168B2 (en) Output ordering of domain coordinates for tessellation
US8482560B2 (en) Image forming techniques
US9299123B2 (en) Indexed streamout buffers for graphics processing
US10049486B2 (en) Sparse rasterization
KR20190100194A (ko) 타일식 아키텍처들에서의 포비티드 렌더링
JP2016524242A (ja) 頂点シェーダのフロント・エンドとしてコンピュート・シェーダを使用すること
US9305370B2 (en) Graphical rendering with implicit surfaces
US20150084952A1 (en) System, method, and computer program product for rendering a screen-aligned rectangle primitive
US10580209B2 (en) Removal of degenerated sub-primitives in tessellation
US20130328884A1 (en) Direct opencl graphics rendering

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant