KR102423767B1 - 타일 기반 경로 렌더링을 수행하는 방법 및 장치. - Google Patents

타일 기반 경로 렌더링을 수행하는 방법 및 장치. Download PDF

Info

Publication number
KR102423767B1
KR102423767B1 KR1020150099232A KR20150099232A KR102423767B1 KR 102423767 B1 KR102423767 B1 KR 102423767B1 KR 1020150099232 A KR1020150099232 A KR 1020150099232A KR 20150099232 A KR20150099232 A KR 20150099232A KR 102423767 B1 KR102423767 B1 KR 102423767B1
Authority
KR
South Korea
Prior art keywords
path
tiles
tile
winding number
area
Prior art date
Application number
KR1020150099232A
Other languages
English (en)
Other versions
KR20160019357A (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 삼성전자주식회사
Priority to EP15180225.3A priority Critical patent/EP2985735B1/en
Priority to JP2015158277A priority patent/JP2016038917A/ja
Priority to US14/823,554 priority patent/US9984497B2/en
Priority to CN201510489741.5A priority patent/CN105335994B/zh
Publication of KR20160019357A publication Critical patent/KR20160019357A/ko
Priority to US15/972,735 priority patent/US10672184B2/en
Priority to US16/857,942 priority patent/US11074744B2/en
Priority to US17/351,855 priority patent/US11694393B2/en
Application granted granted Critical
Publication of KR102423767B1 publication Critical patent/KR102423767B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)
  • Computer Graphics (AREA)
  • Ultra Sonic Daignosis Equipment (AREA)

Abstract

일 측면에 따른 적어도 하나의 경로를 포함하는 객체를 렌더링하는 방법은, 경로 데이터에 기초하여 프레임에 포함된 타일들 각각의 주회 횟수를 연산하고, 타일의 주회 횟수에 기초하여 쉐이딩의 수행 여부를 결정한다.

Description

타일 기반 경로 렌더링을 수행하는 방법 및 장치. {Method and apparatus for performing tile-based path rendering}
타일 기반 경로 렌더링을 수행하는 방법 및 장치에 관한다.
근래에 벡터 그래픽스(vector graphics) 또는 경로 렌더링(path rendering)을 수행하는 경우 그래픽 처리 장치(Graphics Processing Unit, 이하 GPU 라고 함)의 가속 성능을 향상시키기 위한 방법이 연구되고 있다. 다만, 3차원 그래픽을 가속시키기 위해 모든 입력 데이터가 삼각형(triangle)으로 구성된다는 가정 하에 GPU의 하드웨어 구조가 설계되나, 경로 렌더링의 경우 입력 데이터가 삼각형들로 구성되지 않고 커맨드(command)와 정점(vertex) 들의 조합으로 구성되어 있다. 따라서, 경로 렌더링을 수행할 때에 GPU의 가속 성능을 향상시키기 어렵다.
예를 들어, GPU를 이용하여 하나의 곡선(curve)을 그리기 위해서는, 먼저 CPU가 곡선의 시작점을 중심으로 하여 곡선을 다수의 삼각형들로 분할하고, OpenGL API를 이용하여 GPU에게 분할된 삼각형들을 곡선으로 재구성하도록 지시한다. 따라서, CPU가 곡선을 다수의 삼각형들로 분할하는데에 많은 시간이 소요되며, 많은 수의 OpenGL API를 호출할 때마다 GPU와의 통신이 필요하며, GPU 상에서 많은 상태 변화가 발생된다.
따라서, GPU 내에 존재하는 스텐실 버퍼(Stencil Buffer)를 이용하는 스텐실 기반 경로 렌더링(Stencil-based Path Rendering) 방법이 제안되었다. 그러나, 스텐실 기반 경로 렌더링 방법은 렌더링 수행 중에 메모리 입출력(Memory I/O)이 과도하게 발생되고, 스텐실 버퍼는 병렬 처리가 불가능한바, GPU의 가속 성능을 향상시키는 데에 한계가 존재한다.
타일 기반 경로 렌더링을 수행하는 방법 및 장치를 제공하는 데 있다. 또한, 상기 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체를 제공하는데 있다.
본 실시 예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제로 한정되지 않으며, 이하의 실시 예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 측면에 따른 경로를 포함하는 객체를 렌더링하는 방법은, 상기 경로에 포함된 정점(vertex)들에 대한 정보 및 상기 경로에 대응하는 커맨드를 포함하는 경로 데이터를 획득하는 단계; 상기 경로 데이터에 기초하여 프레임에 포함된 타일들 각각의 주회 횟수를 연산하는 단계; 및 상기 타일의 주회 횟수에 기초하여 쉐이딩(shading)의 수행 여부를 결정하는 단계;를 포함한다.
다른 측면에 따른 픽셀의 주회 횟수를 연산하는 방법은, 그래픽 처리 장치(Graphics Processing Unit)로부터, 적어도 하나의 경로에 대한 정보 및 프레임에 포함된 타일들 각각에 설정된 제 1 주회 횟수에 대한 정보를 수신하는 단계; 상기 수신된 정보를 이용하여 상기 프레임에 포함된 픽셀들 각각에 대응하는 주회 횟수를 연산하는 단계; 및 상기 연산된 주회 횟수를 상기 그래픽 처리 장치로 출력하는 단계;를 포함한다.
또 다른 측면에 따른 객체를 랜더링 하는 방법은 경로를 포함하는 영상을 각각 복수의 픽셀들을 포함하는 타일들로 분할하는 단계; 및 상기 복수의 타일들 중, 경로가 존재하지 않는 타일들에 속하는 픽셀들과 경로가 존재하는 타일들에 속하는 픽셀들에게 다른 방식으로 주회 횟수를 할당하는 단계;를 포함한다.
또 다른 측면에 따른 컴퓨터로 읽을 수 있는 기록매체는 상술한 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 기록매체를 포함한다.
또 다른 측면에 따른 경로를 포함하는 객체를 렌더링하는 장치는, 상기 경로에 포함된 정점(vertex)들에 대한 정보 및 상기 경로에 대응하는 커맨드를 포함하는 경로 데이터를 획득하고, 상기 경로 데이터에 기초하여 프레임에 포함된 타일들 각각의 주회 횟수를 연산하는 연산부; 및 상기 타일의 주회 횟수에 기초하여 쉐이딩(shading)의 수행 여부를 결정하는 결정부;를 포함한다.
또 다른 측면에 따른 객체를 구성하는 적어도 하나의 경로를 렌더링하는 그래픽 처리 장치(Graphics Processing Unit)에 연결되고, 프레임에 포함된 픽셀들 각각의 주회 횟수를 생성하는 장치는, 상기 그래픽 처리 장치로부터, 상기 적어도 하나의 경로에 대한 정보 및 상기 프레임에 포함된 타일들 각각에 설정된 제 1 주회 횟수에 대한 정보를 수신하고, 상기 수신된 정보를 이용하여 상기 프레임에 포함된 픽셀들 각각에 대응하는 주회 횟수를 연산하고, 상기 연산된 주회 횟수를 상기 그래픽 처리 장치로 출력한다.
도 1은 일 실시예에 따른 렌더링 장치의 일 예를 도시한 구성도이다.
도 2는 일 실시예에 따른 경로 렌더링을 수행하는 방법의 일 예를 나타내는 흐름도이다.
도 3은 일 실시예에 따른 주회 횟수를 설명하기 위한 도면들이다.
도 4는 일 실시예에 따른 연산부가 타일의 주회 횟수를 연산하는 일 예를 설명하기 위한 도면이다.
도 5는 일 실시예에 따른 연산부가 제 1 주회 횟수를 설정하는데 이용되는 경로들의 일 예를 도시한 도면이다.
도 6a 및 도 6b는 일 실시예에 따른 연산부가 프레임에 포함된 타일들 중 제 1 경로가 통과하는 타일을 선택하는 일 예를 설명하기 위한 도면들이다.
도 7a 내지 도 7e는 일 실시예에 따른 연산부가 프레임에 포함된 타일들 중 경로가 통과하는 타일들을 선택하는 일 예를 설명하는 도면들이다.
도 8은 일 실시예에 따른 연산부가 타일들의 제 1 초기 값을 획득하는 일 예를 설명하기 위한 도면이다.
도 9a 내지 도 9c는 일 실시예에 따른 연산부가 하나의 경로에 대하여 제 1 초기 값을 부여하는 규칙의 일 예를 나타내는 도면들이다.
도 10a 내지 도 10b는 일 실시예에 따른 연산부가 프레임에 포함된 타일들 중 제 2 경로가 통과하는 타일을 선택하고, 타일들의 제 2 초기 값을 획득하는 일 예를 설명하기 위한 도면들이다.
도 11a 내지 도 11c는 일 실시예에 따른 연산부가 2개 이상의 경로들의 진행 방향을 고려하여 초기 값을 부여하는 규칙의 일 예를 나타내는 도면들이다.
도 12는 일 실시예에 따른 경로가 세 개인 경우에 설정부가 타일의 초기 값을 설정하는 일 예를 설명하기 위한 도면이다.
도 13a 내지 도 13b는 일 실시예에 따른 설정부가 프레임에 포함된 타일들 중 제 3 경로가 통과하는 타일을 선택하고, 타일들의 제 3 초기 값을 획득하는 일 예를 설명하기 위한 도면들이다.
도 14는 일 실시예에 따른 연산부가 제 1 주회 횟수를 설정하는데 이용되는 경로들의 다른 예를 도시한 도면이다.
도 15는 일 실시예에 따른 연산부가 제 1 주회 횟수를 설정하는 다른 예를 설명하기 위한 도면이다.
도 16a 내지 도 16c는 일 실시예에 따른 연산부가 경로가 통과하는 타일들의 제 2 주회 횟수를 연산하는 일 예를 설명하기 위한 도면들이다.
도 17a 내지 도 17c는 일 실시예에 따른 결정부가 프레임에 포함된 픽셀들 각각의 주회 횟수에 기초하여 쉐이딩의 수행 여부를 결정하는 일 예를 설명하기 위한 도면들이다.
도 18은 일 실시예에 따른 렌더링 장치의 다른 예를 도시한 구성도이다.
도 19a 및 도 19b는 일 실시예에 따른 분할부가 동작하는 일 예를 설명하기 위한 도면들이다.
도 20은 일 실시예에 따른 경로 데이터에 포함된 비단조 곡선의 일 예를 도시한 도면이다.
도 21a 및 도 21b는 일 실시예에 따른 연산부가 도 20에 도시된 제 1 단조 곡선을 이용하여 소정의 타일들의 초기 주회 횟수를 제 1 초기 값으로 갱신하는 일 예를 설명하기 위한 도면들이다.
도 22a 및 도 22b는 일 실시예에 따른 연산부가 도 20에 도시된 제 2 단조 곡선을 이용하여 소정의 타일들의 제 1 초기 값을 제 2 초기 값으로 갱신하는 일 예를 설명하기 위한 도면들이다.
도 23a 및 도 23b는 일 실시예에 따른 연산부가 도 20에 도시된 정점(P2)으로부터 정점(P0)까지 경로를 이용하여 소정의 타일들의 제 2 초기 값을 제 3 초기 값으로 갱신하는 일 예를 설명하기 위한 도면들이다.
도 24a 및 도 24b는 일 실시예에 따른 분할부가 원형 경로를 큐빅(cubic) 곡선으로 변환하는 일 예를 설명하기 위한 도면들이다.
도 25는 일 실시예에 따른 렌더링 장치의 또 다른 예를 도시한 구성도이다.
도 26은 일 실시예에 따른 주회 횟수 생성 장치의 일 예를 설명하기 위한 구성도이다.
도 27a 및 도 27b는 일 실시예에 따른 경로를 렌더링하는 방법이 GPU(Graphics Processing Unit)에서 구현되는 예들을 설명하기 위한 도면들이다.
도 28은 일 실시예에 따른 버텍스 쉐이더가 동작하는 일 예를 설명하기 위한 도면이다.
도 29는 일 실시예에 따른 버텍스 쉐이더가 타일 비닝을 수행하는 일 예를 설명하기 위한 도면이다.
도 30은 일 실시예에 따른 버텍스 쉐이더가 픽셀들의 주회 횟수를 연산하고, 픽셀의 쉐이딩을 수행할지 여부를 결정하는 일 예를 설명하기 위한 도면이다.
도 31은 일 실시예에 따른 픽셀의 주회 횟수를 연산하는 방법의 일 예를 나타내는 흐름도이다.
이하에서는 도면을 참조하여 실시예들을 상세히 설명한다.
도 1은 일 실시예에 따른 렌더링 장치의 일 예를 도시한 구성도이다.
도 1을 참조하면, 렌더링 장치(100)는 연산부(110) 및 결정부(120)를 포함한다. 도 1에 도시된 렌더링 장치(100)에는 본 실시예와 관련된 구성요소들만이 도시되어 있다. 따라서, 도 1에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있다.
또한, 도 1에 도시된 렌더링 장치(100)의 연산부(110) 및 결정부(120)는 하나 또는 복수 개의 프로세서에 해당할 수 있다. 프로세서는 다수의 논리 게이트들의 어레이로 구현될 수도 있고, 범용적인 마이크로 프로세서와 이 마이크로 프로세서에서 실행될 수 있는 프로그램이 저장된 메모리의 조합으로 구현될 수도 있다. 또한, 다른 형태의 하드웨어로 구현될 수도 있음을 본 실시예가 속하는 기술분야에서 통상의 지식을 가진 자라면 이해할 수 있다.
연산부(110)는 경로에 포함된 정점(vertex)들에 대한 정보 및 경로에 대응하는 커맨드를 포함하는 경로 데이터를 획득한다. 그리고, 연산부(110)는 경로 데이터에 기초하여 프레임에 포함된 타일들 각각의 주회 횟수를 연산한다.
예를 들어, 연산부(110)는 렌더링 장치(100)의 외부 장치로부터 경로 데이터(path data)를 수신하고, 경로 데이터에 포함된 경로의 위치 및 진행 방향에 대한 정보에 기초하여 타일들 각각에 제 1 주회 횟수를 설정할 수 있다. 여기에서, 외부 장치는 렌더링 장치(100)에 포함된 메모리일 수도 있고, 렌더링 장치(100)의 외부에 존재하는 메모리 또는 CPU(Central Processing Unit)일 수도 있다. 그리고, 연산부(110)는 제 1 주회 횟수에 기초하여 프레임에 포함된 타일들 중 경로가 통과하는 타일들 각각의 제 2 주회 횟수를 연산할 수 있다.
그리고, 결정부(120)는 타일의 주회 횟수에 기초하여 쉐이딩(shading)의 수행 여부를 결정한다.
렌더링 장치(100)는 타일 단위로 주회 횟수를 연산하고, 연산된 주회 횟수에 기초하여 쉐이딩의 수행 여부를 결정한다. 구체적으로, 연산부(110)는 프레임에 포함된 타일들 중에서 경로가 통과하지 않는 타일들에 대해서는 제 1 주회 횟수를 결정하고, 경로가 통과하는 타일들에 대해서는 제 2 주회 횟수를 결정한다. 따라서, 프레임에 포함된 타일들 중에서 경로가 통과하는 타일들에 대해서만 정밀하게 주회 횟수가 연산되는바, 렌더링 장치(100)의 성능이 향상될 수 있다.
이하, 도 2를 참조하여 렌더링 장치(100)가 동작하는 일 예를 구체적으로 설명한다.
도 2는 일 실시예에 따른 경로 렌더링을 수행하는 방법의 일 예를 나타내는 흐름도이다.
도 2를 참조하면, 경로 렌더링을 수행하는 방법은 도 1에 도시된 렌더링 장치(100)에서 시계열적으로 처리되는 단계들로 구성된다.
210 단계에서, 연산부(110)는 경로에 포함된 정점들에 대한 정보 및 경로에 대응하는 커맨드를 포함하는 경로 데이터를 획득한다.
경로는 렌더링 장치(100)가 렌더링을 수행하는 대상(예를 들어, 객체)을 구성하는 요소일 수 있다. 예를 들어, 경로는 일 지점에서 다른 지점까지 이어진 직선 또는 곡선일 수 있으며, 객체는 하나 이상의 경로가 연결되어 형성된 폐다각형(closed polygon) 또는 폐경로(closed path)를 포함할 수 있다. 렌더링 장치(100)는 영상 또는 영상의 일부분을 연속된 작은 크기의 타일들로 나누어 렌더링을 수행할 수 있다. 예를 들어, 렌더링 장치(100)는 동영상 또는 정지 영상을 나타내는 프레임, 화면 전체 혹은 일부분을 연속된 작은 크기의 타일들로 나누어 렌더링을 수행할 수 있다. 예를 들어, 하나의 타일에는 32*32 개의 픽셀들이 포함될 수 있으나, 상술한 개수에 한정되지 않는다.
경로 데이터에는 경로에 포함된 복수의 정점들 각각의 좌표에 대한 정보 및 정점들을 조합하여 경로를 구성하기 위한 커맨드(command)들이 포함된다. 여기에서, 정점은 경로의 시작 위치에 대응하는 정점 또는 경로의 종료 위치에 대응하는 정점을 포함할 수 있다.
예를 들어, 프레임에 포함된 픽셀들 중 제 1 픽셀로부터 제 2 픽셀까지의 직선을 경로라고 가정하면, 정점들은 제 1 픽셀 및 제 2 픽셀 각각에 대응하는 지점을 의미한다. 따라서, 경로 데이터는 제 1 픽셀에 대응하는 제 1 정점의 좌표, 제 2 픽셀에 대응하는 제 2 픽셀의 좌표 및 제 1 정점에서 제 2 정점까지 직선을 구성하라는 커맨드를 포함한다. 따라서, 경로 데이터를 참조하면, 경로를 구성하는 정점들 각각의 좌표에 대한 정보뿐 만 아니라, 경로의 위치 및 진향 방향에 대한 정보도 파악될 수 있다. 또한, 경로 데이터에는 각각의 픽셀에 설정될 컬러 값에 대한 정보도 포함될 수 있다.
220 단계에서, 연산부(110)는 경로 데이터에 기초하여 프레임에 포함된 타일들 각각의 주회 횟수를 연산한다.
연산부(110)는 경로 데이터에 포함된 경로의 위치 및 진행 방향에 대한 정보에 기초하여 타일들 각각에 제 1 주회 횟수를 설정한다. 그리고, 연산부(110)는 제 1 주회 횟수에 기초하여 프레임에 포함된 타일들 중 경로가 통과하는 타일들 각각의 제 2 주회 횟수를 연산한다.
타일의 주회 횟수는 그 타일에 포함된 픽셀들 각각의 주회 횟수를 의미하며, 경로의 통과 여부에 따라 타일의 모든 픽셀들은 동일한 주회 횟수를 가질 수도 있고 각각 다른 주회 횟수를 가질 수도 있다.
여기에서, 주회 횟수는, 특정 픽셀의 일 측면에 대하여, 경로가 그려지는 동안 경로가 몇 바퀴 회전되는가를 나타내는 미리 결정된 값일 수 있다. 주회 횟수는 경로가 시계 방향으로 회전하는 경우에는 미리 결정된 값을 증산하고, 경로가 반시계 방향으로 회전하는 경우에는 미리 결정된 값을 감산함으로써 연산될 수 있으나, 반대의 방식으로 연산될 수도 있다. 다시 말해, 주회 횟수는 경로가 시계 방향으로 회전하는 경우에는 미리 결정된 값을 감산하고, 경로가 반시계 방향으로 회전하는 경우에는 미리 결정된 값을 증산함으로써 연산될 수도 있다.
일 예로, 경로가 시계 방향으로 한 바퀴 회전한다면, 픽셀의 주회 횟수는 +1이 될 수 있고, 경로가 반시계 방향으로 한 바퀴 회전한다면, 픽셀의 주회 횟수는 -1이 될 수 있다. 다른 예로, 경로가 시계 방향으로 한 바퀴 회전한다면, 픽셀의 주회 횟수는 -1이 될 수 있고, 경로가 반시계 방향으로 한 바퀴 회전한다면, 픽셀의 주회 횟수는 +1이 될 수 있다. 또한, 미리 결정된 값은 정수가 될 수 있으나, 이에 한정되지 않는다. 다시 말해, 주회 횟수는 특정 픽셀의 위치에서 일 측면을 바라볼 때, 경로가 그려지는 동안의 회전 수에 매핑된 수라면 제한 없이 해당될 수 있다.
이하에서는 설명의 편의를 위하여, 경로가 시계 방향으로 한 바퀴 회전하는 경우의 주회 횟수가 +1, 경로가 반시계 방향으로 한 바퀴 회전하는 경우의 주회 횟수가 -1이 되는 것으로 가정하여 설명한다. 이하, 도 3a 및 도 3b를 참조하여 주회 횟수에 대하여 상세하게 설명한다.
도 3은 일 실시예에 따른 주회 횟수를 설명하기 위한 도면들이다.
도 3에는 프레임(310)에 포함된 픽셀들 중 어느 하나의 픽셀(P)에 대응하는 주회 횟수를 설명하기 위한 일 예가 도시되어 있다. 도 3에서는 설명의 편의를 위하여, 픽셀(P)을 일 방향을 주시하고 있는 사람의 형상으로 도시하였다.
도 3을 참조하면, 픽셀(P)의 주변을 따라 경로(330)가 도시되어 있고, 경로(330)는 폐경로인 것으로 도시되어 있다. 픽셀(P)에서 우측 수평 방향으로 가상의 선(320)을 도시하면, 가상의 반직선(320)과 경로(330)는 총 4개의 점들(331, 332, 333, 334)에서 교차된다. 따라서, 픽셀(P)의 주회 횟수는 4개의 점들(331, 332, 333, 334) 각각에서의 경로가 그려지는 방향에 기초하여 결정될 수 있다.
구체적으로, 제 1 점(331)에서 경로(330)가 그려지는 방향은 반시계 방향(아래에서 위로 그려짐)에 해당된다. 따라서, 1차적으로 픽셀(P)의 주회 횟수는 -1이 된다. 그리고, 제 2 점(332)에서 경로(330)가 그려지는 방향은 시계 방향(위에서 아래로 그려짐)에 해당된다. 따라서, 2차적으로 픽셀(P)의 주회 횟수는 -1 + 1 = 0으로 연산된다. 그리고, 제 3 점(333)에서 경로(330)가 그려지는 방향은 반시계 방향에 해당된다. 따라서, 3차적으로 픽셀(P)의 주회 횟수는 -1 + 1 - 1 = -1로 연산된다. 그리고, 제 4 점(334)에서 경로(330)가 그려지는 방향은 반시계 방향에 해당된다. 따라서, 최종적으로 픽셀(P)의 주회 횟수는 -1 + 1 - 1 - 1 = -2로 연산된다.
도 3을 참조하여 상술한 바에 따르면, 픽셀(P)의 주회 횟수는 픽셀(P)의 우측에 위치한 경로를 고려하여 연산되는 것으로 기재하였으나, 이에 한정되지 않는다. 다시 말해, 연산부(110)는 픽셀(P)의 위치를 중심으로 좌측, 우측, 상측 및 하측 중 어느 하나에 위치한 경로를 고려하여 픽셀(P)의 주회 횟수를 연산할 수 있다.
연산부(110)는 스텐실 버퍼를 이용하지 않고, 타일들 각각의 주회 횟수를 연산할 수 있다. 다시 말해, 연산부(110)는 객체를 포함하는 삼각형들을 스텐실 버퍼에 그리지 않고, 타일들 각각의 주회 횟수를 병렬로 연산할 수 있다. 따라서, 스텐실 버퍼에 기반한 렌더링에서 나타나는 데이터 입출력 횟수가 증가되는 문제 및 렌더링에 소요되는 시간이 증가되는 문제를 해소할 수 있다.
또한, 연산부(110)는 복수의 스레드(thread)들을 이용하여 주회 횟수를 연산할 수 있다. 단일 스레드는 단일 픽셀의 주회 횟수가 연산되는데 이용될 수 있다. 이때, 복수의 스레드들은 병렬적으로 처리가 가능하므로, 연산부(110)는 복수의 스레드들을 이용하여 복수의 픽셀들 각각에 대한 주회 횟수를 동시에 연산할 수 있다. 따라서, 렌더링 장치(100)는 고속으로 경로 렌더링을 수행할 수 있다.
다시 도 2를 참조하면, 연산부(110)는 경로가 통과하는 타일들에 대해서만 세부적으로 주회 횟수를 연산한다. 다시 말해, 연산부(110)는 프레임에 포함된 모든 타일들에 대하여 제 1 주회 횟수를 설정하고, 연산부(110)는 프레임에 포함된 모든 타일들 중 경로가 통과하는 타일들에 대해서만 제 1 주회 횟수에 기초하여 제 2 주회 횟수를 연산한다. 경로가 통과하지 않는 타일들에 포함된 픽셀들의 주회 횟수가 제 1 주회 횟수로 결정되기에, 경로가 통과하지 않는 타일들에 포함된 모든 픽셀들은 동일한 주회 횟수를 갖는다. 따라서, 렌더링 장치(100)는 빠른 속도로 경로에 대한 렌더링을 수행할 수 있다.
이하, 도 4를 참조하여, 연산부(110)가 경로가 통과하는 타일들에 대해서만 제 2 주회 횟수를 연산하는 일 예를 설명한다.
도 4는 일 실시예에 따른 연산부가 타일의 주회 횟수를 연산하는 일 예를 설명하기 위한 도면이다.
도 4에는 복수의 타일들로 구성된 프레임(410)과 별 형상의 객체(420)를 구성하는 복수의 경로들(e0, e1, e2, e3, e4)이 도시되어 있다. 도 4를 참조하면, 타일(A)에는 객체(420)를 구성하는 경로들(e0, e1, e2, e3, e4)이 통과하지 않는다. 그러나, 타일(B)에는 객체(420)를 구성하는 경로들 중 경로 (e0) 및 경로(e2)가 통과한다.
일반적인 주회 횟수 연산의 경우, 프레임(410)에 포함된 각각의 픽셀의 주회 횟수가 독립적으로 연산된다. 예를 들어, 픽셀(P1)의 주회 횟수는 픽셀(P1)의 일 측면에 존재하는 모든 경로들(e0, e1)의 위치 및 진행 방향을 고려하여 연산될 수 있다. 또한, 픽셀(P2)의 주회 횟수는 픽셀(P2)의 일 측면에 존재하는 모든 경로들(e0, e2, e4, e1)의 위치 및 진행 방향을 고려하여 연산될 수 있다. 만약, 픽셀(P1, P2)의 우측에 위치한 경로에 기초하여 주회 횟수가 연산된다고 가정하면, 타일(A)에는 경로가 통과하지 않음에도 불구하고, 픽셀(P1)의 주회 횟수는 타일을 통과하지 않는 경로들(e0, e1)에 기초하여 연산된다. 또한, 픽셀(P2)의 주회 횟수도 타일을 통과하는 경로들(e0, e2)뿐 만 아니라 타일을 통과하지 않는 경로들(e4, e1)도 고려하여 연산된다. 따라서, 일반적인 렌더링 장치가 픽셀(P1, P2)의 주회 횟수를 연산하기 위해서는 타일(A, B)을 통과하지 않는 경로들까지 고려해야 하므로, 많은 연산을 수행해야 한다.
그러나, 렌더링 장치(100)는 타일을 통과하지 않는 경로를 고려하지 않으면서, 픽셀의 주회 횟수를 연산할 수 있다. 구체적으로, 연산부(110)는 경로의 위치 및 진행 방향에 기초하여 프레임(410)에 포함된 타일들 각각에 제 1 주회 횟수를 설정하고, 연산부(110)는 프레임(410)에 포함된 타일들 중 경로가 통과하는 타일들에 대해서 제 2 주회 횟수를 연산한다. 따라서, 렌더링 장치(100)는 경로가 통과하지 않는 타일의 경우는 포함된 픽셀들의 주회 횟수를 독립적으로 연산하지 않고서도 모든 픽셀들의 주회 횟수를 결정할 수 있다. 이에 따라, 렌더링 장치(100)는 고속으로 경로 렌더링을 수행할 수 있다.
다시 도 2를 참조하면, 230 단계에서, 결정부(120)는 타일의 주회 횟수에 기초하여 쉐이딩의 수행 여부를 결정한다.
이때, 쉐이딩은 프래그먼트 쉐이더(fragment shader)(2731)에 의하여 수행될 수 있다. 따라서, 결정부(120)는 프래그먼트 쉐이더(2731)에게 픽셀의 쉐이딩을 수행하라는 지시를 내릴지 여부를 결정할 수 있다. 여기에서, 쉐이딩은 픽셀들 각각에 컬러를 설정하는 과정일 수 있으나, 이에 한정되지 않는다. 예를 들어, 쉐이딩은 픽셀들 각각에 명암을 설정하는 과정이 될 수도 있고, 픽셀들 각각에 질감을 나타내는 과정이 될 수도 있다. 또한, 프래그먼트 쉐이더(2731)는 텍스쳐(texture)에 기초하여 픽셀의 쉐이딩을 수행할 수 있다.
예를 들어, 결정부(120)는, 경로가 통과하지 않는 타일에 속한 픽셀들에 대해서는, 연산부(110)가 설정한 제 1 주회 횟수에 기초하여 쉐이딩의 수행 여부를 결정하고, 경로가 통과하는 타일에 속한 픽셀들에 대해서는, 연산부(110)가 연산한 제 2 주회 횟수에 기초하여 쉐이딩의 수행 여부를 결정할 수 있다. 이때, 결정부(120)는 기 설정된 규칙에 기초하여 쉐이딩의 수행 여부를 결정할 수 있다.
이하, 도 5 내지 도 15를 참조하여, 연산부(110)가 타일들 각각에 제 1 주회 횟수를 설정하는 일 예를 설명한다.
도 5는 일 실시예에 따른 연산부가 제 1 주회 횟수를 설정하는데 이용되는 경로들의 일 예를 도시한 도면이다.
도 5를 참조하면, 프레임(510)은 6*6 개의 타일들을 포함하고, 삼각형 형상의 객체(520)는 3개의 경로들(e0, e1, e2)을 포함하도록 도시되어 있다. 이때, 경로(e0)는 정점(P0)에서 정점(P1)까지의 직선 경로이고, 경로(e1)는 정점(P1)에서 정점(P2)까지의 직선 경로이며, 경로(e2)는 정점(P2)에서 정점(P0)까지의 직선 경로인 것으로 도시되어 있다.
도 6 내지 도 13을 참조하여 후술할 연산부(110)의 동작은 도 5에 도시된 경로들(e0, e1, e2)에 기초하여 수행되는 것으로 가정한다. 다시 말해, 연산부(110)가 수신하는 경로 데이터에는 경로들(e0, e1, e2) 각각의 위치 및 진행 방향에 대한 정보가 포함된 것으로 가정한다. 구체적으로, 경로 데이터에는 복수의 정점들(P0, P1, P2) 각각의 좌표에 대한 정보 및 정점들을 조합하여 경로들(e0, e1, e2)을 형성하기 위한 커맨드(예를 들어, 정점(P0)에서 정점(P1)까지의 직선 경로를 그리라는 커맨드, 정점(P1)에서 정점(P2)까지의 직선 경로를 그리라는 커맨드 및 정점(P2)에서 정점(P0)까지의 직선 경로를 그리라는 커맨드)들이 포함된 것으로 가정한다.
연산부(110)는 프레임에 포함된 타일들 각각에 제 1 주회 횟수를 설정한다. 구체적으로, 연산부(110)는 프레임에 포함된 타일들 각각에 초기 주회 횟수를 할당한다. 예를 들어, 초기 주회 횟수는 0이 될 수 있다. 다시 말해, 프레임에 포함된 타일들 각각에는 0이 디폴트(default) 값으로 할당될 수 있다.
그리고, 연산부(110)는, 프레임에 포함된 타일들 중 적어도 하나의 경로가 통과하는 타일들을 선택한다. 그리고, 연산부(110)는, 선택된 타일들 각각에서 경로가 통과하는 형태에 따라, 선택된 타일들의 일 측면에 위치하는 타일들 각각의 초기 주회 횟수를 갱신한다. 여기에서, 타일의 일 측면은 타일의 좌측, 우측, 상측 및 하측 중 어느 하나를 의미한다. 구체적으로, 연산부(110)가 프레임에 포함된 타일들 중 적어도 하나의 경로가 통과하는 타일들을 선택하고, 선택된 타일들의 일 측면에 위치하는 타일들 각각의 초기 주회 횟수를 갱신하는 일 예는 아래와 같다.
먼저, 연산부(110)는 외부 장치로부터 경로 데이터를 수신한다. 이때, 경로 데이터에는 도 5에 도시된 객체의 총 3개의 경로들(e0, e1, e2)에 대한 정보가 포함되어 있다. 연산부(110)는 프레임에 포함된 모든 타일들에 0을 초기 주회 횟수로 할당하고, 복수의 경로들(e0, e1, e2)을 순차적으로 고려하여 타일에 할당된 0을 갱신함으로써 제 1 주회 횟수를 설정한다.
구체적으로, 연산부(110)는 제 1 경로(e0)의 위치 및 진행 방향에 기초하여 타일에 할당된 초기 주회 횟수(예를 들어, 0)에 소정의 값을 증산 또는 감산함으로써, 제 1 초기 값(WNinit _1)을 획득한다. 이때, 프레임에 포함된 타일들 중에서 일부는 초기 주회 횟수가 그대로 제 1 초기 값(WNinit _1)으로 결정될 수 있다.
그 이후에, 연산부(110)는 제 2 경로(e1)의 위치 및 진행 방향에 기초하여 제 1 초기 값(WNinit _1)에 소정의 값을 증산 또는 감산함으로써, 제 2 초기 값(WNinit _2)을 획득한다. 이때, 프레임에 포함된 타일들 중에서 일부는 제 1 초기 값(WNinit _1)이 그대로 제 2 초기 값(WNinit _2)으로 결정될 수 있다.
그 이후에, 연산부(110)는 제 3 경로(e2)의 위치 및 진행 방향에 기초하여 제 2 초기 값(WNinit _2)에 소정의 값을 증산 또는 감산 함으로써, 제 3 초기 값(WNinit _3)을 획득한다. 이때, 프레임에 포함된 타일들 중에서 일부는 제 2 초기 값(WNinit _2)이 그대로 제 3 초기 값(WNinit _3)으로 결정될 수 있다.
최종적으로, 연산부(110)는 제 3 초기 값(WNinit _3)을 제 1 주회 횟수(WNinit)로 결정한다.
이하에서는, 도 6a 내지 도 9c를 참조하여, 연산부(110)가 제 1 경로(e0)의 위치 및 진행 방향에 기초하여 제 1 초기 값(WNinit _1)을 획득하는 일 예를 설명한다. 그리고, 도 10a 내지 도 11c를 참조하여, 연산부(110)가 제 2 경로(e1)의 위치 및 진행 방향에 기초하여 제 2 초기 값(WNinit _2)을 획득하는 일 예를 설명한다. 그리고, 도 12 내지 도 13b를 참조하여, 연산부(110)가 제 3 경로(e2)의 위치 및 진행 방향에 기초하여 제 3 초기 값(WNinit _3)을 획득하고, 최종적으로 제 3 초기 값(WNinit _3)을 제 1 주회 횟수(WNinit)로 결정하는 일 예를 설명한다.
도 6a 및 도 6b는 일 실시예에 따른 연산부가 프레임에 포함된 타일들 중 제 1 경로가 통과하는 타일을 선택하는 일 예를 설명하기 위한 도면들이다.
도 6a에는 제 1 경로(e0)가 도시되어 있다. 여기에서, 제 1 경로(e0)는 정점(P0)으로부터 정점(P1)까지 연결된 직선 경로이다. 제 1 경로(e0)의 좌측에서 제 1 경로(e0)를 본다고 가정하면, 제 1 경로(e0)는 반 시계 방향으로 회전하는 경로임을 알 수 있다.
도 6b에는 프레임에 포함된 타일들 중 제 1 경로(e0)가 통과하는 타일들(620)이 도시되어 있다. 연산부(110)는 프레임에 포함된 타일들 중 제 1 경로(e0)가 통과하는 타일들(620)을 선택한다. 그리고, 연산부(110)는, 선택된 타일들(620) 별로, 타일에 제 1 경로(e0)가 통과한다는 정보를 'Edge_List'로 생성하고, 이를 로컬 메모리(도 25의 150)에 저장한다. 예를 들어, Edge_List는 로컬 메모리(150)에 각각의 타일 별로 비트 스트림(Bitstream)의 형태로 저장될 수 있다. 도 6b에 도시된 타일들(620)마다 표시된 'e0'는 타일들(620) 각각의 Edge_List에 포함된 정보(타일에 제 1 경로(e0)가 통과한다는 정보)를 의미한다.
연산부(110)가 프레임에 포함된 타일들 중 제 1 경로(e0)가 통과하는 타일들(620)을 선택하는 일 예는 도 7a 내지 도 7e를 참조하여 설명한다.
도 7a 내지 도 7e는 일 실시예에 따른 연산부가 프레임에 포함된 타일들 중 경로가 통과하는 타일들을 선택하는 일 예를 설명하는 도면들이다.
연산부(110)는 프레임에 포함된 타일들의 일 측 외곽선과 경로가 만나는 지점을 결정한다. 타일들의 일 측 외곽선은 타일들의 좌측, 우측, 상측 및 하측 중 어느 하나의 외곽선일 수 있다. 도 7a를 참조하면, 정점(P0)으로부터 정점(P1)까지 연결된 제 1 경로(e0)가 도시되어 있고, 연산부(110)는 제 1 경로(e0)가 타일들의 우측 외곽선(710)과 만나는 지점(721)을 결정한다.
그리고, 연산부(110)는 결정된 지점(721)을 기준으로 경로를 가상으로 분할한다. 여기에서, 연산부(110)가 경로를 가상으로 분할한다는 것은, 경로를 실제로 분할하는 것이 아니라, 연산부(110)가 프레임에 포함된 타일들 중에서 경로가 통과하는 타일들을 정확하게 선택하기 위하여 경로의 중간 지점들을 계산하는 과정을 의미한다.
도 7b를 참조하면, 연산부(110)는 제 1 경로(e0)를 제 1 경로(e0)의 시작 정점(P1)으로부터 결정된 지점(721)까지의 제 1 서브 경로(e01)와 결정된 지점(721)으로부터 제 1 경로(e0)의 종료 정점(P1)까지의 제 2 서브 경로(e02)로 가상 분할한다.
그리고, 연산부(110)는 분할된 경로를 대각선으로 하는 사각형을 구성한다. 그리고, 연산부(110)는 구성된 사각형을 포함하는 타일들을 선택한다. 도 7b를 참조하면, 연산부(110)는 제 1 서브 경로(e01)를 대각선으로 하는 사각형을 구성한다. 그리고, 연산부(110)는 구성된 사각형을 포함하는 타일들(731)을 선택한다.
만약, 프레임에 포함된 타일들의 일 측면과 경로가 복수의 지점들에서 만나는 경우, 연산부(110)는 도 7a 내지 도 7b를 참조하여 상술한 과정을 반복한다. 도 7c를 참조하면, 연산부(110)는 제 1 경로(e0)가 우측 외곽선(710)과 만나는 지점(722)을 결정한다.
그리고, 연산부(110)는 결정된 지점(722)을 기준으로 경로를 가상 분할한다. 도 7d를 참조하면, 연산부(110)는 제 2 서브 경로(e02)를 지점(721)으로부터 결정된 지점(722)까지의 제 3 서브 경로(e03)와 결정된 지점(722)으로부터 제 2 서브 경로(e02)의 종료 정점(P1)까지의 제 4 서브 경로(e04)로 분할한다.
그리고, 연산부(110)는 분할된 경로를 대각선으로 하는 사각형을 구성한다. 그리고, 연산부(110)는 구성된 사각형을 포함하는 타일들을 선택한다. 도 7d를 참조하면, 연산부(110)는 제 3 서브 경로(e03)를 대각선으로 하는 사각형을 구성한다. 그리고, 연산부(110)는 구성된 사각형을 포함하는 타일들(732)을 선택한다.
프레임에 포함된 타일들의 일 측면과 경로가 만나는 지점이 더 이상 없는 경우, 연산부(110)는 제 1 경로(e0)가 분할된 나머지 서브 경로를 대각선으로 하는 사각형을 구성하고, 사각형에 포함된 타일들을 선택한다. 도 7e를 참조하면, 연산부(110)는 제 4 서브 경로(e04)를 대각선으로 하는 사각형을 구성한다. 그리고, 연산부(110)는 구성된 사각형을 포함하는 타일들(733)을 선택한다.
최종적으로, 연산부(110)는 선택한 타일들(731, 732, 733)을 조합함으로써, 프레임에 포함된 타일들 중에서 제 1 경로(e0)가 통과하는 타일들(731, 732, 733)을 결정할 수 있다.
도 7a 내지 도 7e를 참조하여 상술한 바와 같이, 연산부(110)는 경로를 서브 경로들로 분할하고, 서브 경로를 대각선으로 하는 사각형을 포함하는 타일들을 선택함으로써, 프레임에 포함된 타일들 중에서 제 1 경로(e0)가 통과하는 타일들(731, 732, 733)을 선택할 수 있다.
제 1 경로(e0)가 통과하는 타일들(731, 732, 733)이 선택되면, 연산부(110)는 선택된 타일들(731, 732, 733) 각각에서 제 1 경로(e0)가 통과하는 형태에 따라 선택된 타일들(731, 732, 733)의 일 측면에 위치하는 타일들의 초기 주회 횟수를 갱신함으로써 제 1 초기 값(WNinit _1)을 획득한다. 여기에서, 일 측면은 타일의 좌측, 우측, 상측 및 하측 중 어느 하나를 의미한다. 이하, 도 8 내지 도 9를 참조하여, 연산부(110)가 타일들의 제 1 초기 값(WNinit _1)을 획득하는 일 예를 설명한다.
도 8은 일 실시예에 따른 연산부가 타일들의 제 1 초기 값을 획득하는 일 예를 설명하기 위한 도면이다.
설명의 편의를 위하여, 도 8에는 선택된 타일들(810)의 일 측면에 위치하는 타일들을 선택된 타일들(810)의 좌측 방향에 위치한 타일들(821, 822, 823)로 도시하였으나, 이에 한정되지 않는다. 다시 말해, 제 1 경로가 통과하는 타일들(810)의 우측 방향, 상측 방향 및 하측 방향 중 어느 한 방향에 위치하는 타일들의 제 1 초기 값(WNinit _1)이 획득될 수도 있다. 여기에서, 선택된 타일들(810)은, 도 7a 내지 도 7e를 참조하여 상술한 바와 같이, 제 1 경로(e0)가 통과하는 타일들(731, 732, 733)을 의미한다.
또한, 도 8에는 도시되지 않았으나, 프레임에 포함된 모든 타일들 각각에는 초기 주회 횟수가 할당되어 있다. 예를 들어, 프레임에 포함된 모든 타일들에는 0이 디폴트 값으로 할당될 수 있다.
도 8을 참조하면, 연산부(110)가 선택된 타일들(810)의 좌측 방향에 위치하는 타일들(821, 822, 823) 중 일부(821)에 대하여 제 1 초기 값(WNinit _1)을 획득한 결과가 도시되어 있다. 다시 말해, 연산부(110)는 제 1 경로(e0)의 시작 정점(P0)을 포함하는 타일의 좌측 방향 타일들(823) 및 종료 정점(P1)을 포함하는 타일의 좌측 방향 타일들(822)에 대하여 제 1 초기 값(WNinit _1)의 연산을 보류한다.
도 5를 참조하여 상술한 바와 같이, 정점(P0)는 제 1 경로(e0) 및 제 3 경로(e2)가 만나는 지점이고, 정점(P1)는 제 1 경로(e0) 및 제 2 경로(e1)가 만나는 지점이다. 정점(P0) 및 정점(P1)과 같이 두 개 이상의 경로들이 만나는 타일의 좌측 방향 타일들(822, 823)에 대해서, 연산부(110)는 제 1 초기 값(WNinit _1)의 연산을 보류한다. 그리고, 연산부(110)는 두 개 이상의 경로들이 타일을 통과하는 형태를 고려하여, 타일들(822, 823)에 대하여 제 2 초기 값(WNinit _2)을 획득한다. 이에 대한 구체적인 설명은 도 11을 참조하여 후술한다.
연산부(110)는 미리 정해진 규칙에 따라 타일들(821)에 할당된 초기 주회 횟수에 소정의 값을 증산 또는 감산함으로써 제 1 초기 값(WNinit _1)을 획득할 수 있다. 일 예로서, 연산부(110)는 제 1 경로(e0)가 타일들(810)의 마주보는 두 경계선을 시계 방향으로 통과하는 경우에는 초기 주회 횟수에 소정의 값을 증산하고, 제 1 경로(e0)가 타일들(810)의 마주보는 두 경계선을 반시계 방향으로 통과하는 경우에는 초기 주회 횟수에 소정의 값을 감산함으로써, 타일들(821)의 제 1 초기 값(WNinit _1)을 획득할 수 있다. 다른 예로서, 제 1 경로(e0)가 타일들(810)의 마주보는 두 경계선을 시계 방향으로 통과하는 경우에는 초기 주회 횟수에 소정의 값을 감산하고, 제 1 경로(e0)가 타일들(810)의 마주보는 두 경계선을 반시계 방향으로 통과하는 경우에는 초기 주회 횟수에 소정의 값을 증산함으로써, 타일들(821)의 제 1 초기 값(WNinit _1)을 획득할 수 있다. 여기에서, 소정의 값은 1이 될 수 있으나, 이에 제한되지 않는다. 다시 말해, 소정의 값은, 경로의 진행 방향에 따라 미리 정해진 수라면, 제한 없이 해당될 수 있다.
이하, 도 9a 내지 도 9c를 참조하여, 연산부(110)가 제 1 초기 값(WNinit _1)을 획득하는 규칙의 일 예를 설명한다.
도 9a 내지 도 9c는 일 실시예에 따른 연산부가 하나의 경로에 대하여 제 1 초기 값을 부여하는 규칙의 일 예를 나타내는 도면들이다.
도 9a는 경로(911)가 타일(921)의 마주보는 두 경계선을 시계 방향으로(위에서 아래로) 통과하는 경우를 나타내고, 도 9b는 경로(912)가 타일(922)의 마주보는 두 경계선을 반시계 방향으로(아래에서 위로) 통과하는 경우를 나타낸다. 도 9c는 경로(913)가 타일(923)의 하나의 경계선으로 입장하였다가 퇴장하는 경우를 나타낸다.
도 9a 내지 도 9c에 도시된 타일(921, 922, 923)은 두 개 이상의 타일들이 결합된 타일이 될 수도 있다. 예를 들어, 경로가 통과하는 타일들이 수평 방향으로 두 개 이상 연속되는 경우, 도 9a 내지 도 9c에 도시된 하나의 타일(921, 922, 923)로 간주될 수 있다. 도 8을 참조하면, 프레임의 2번째 행 및 5번째 행에는 2개의 인접한 타일들(811, 812)에 제 1 경로(e0)가 통과한다. 이 경우, 제 1 경로(e0)가 통과하는 인접한 2개의 타일들(811, 812)은 도 9a 내지 도 9c에 도시된 하나의 타일(921, 922, 923)로 간주될 수 있다.
도 9a를 참조하면, 경로(911)가 타일(921)의 마주보는 두 경계선을 시계 방향으로(위에서 아래로) 통과하는 경우, 연산부(110)는 타일(921)의 좌측에 위치하는 모든 타일(931)의 초기 주회 횟수에 1을 증산함으로써, 제 1 초기 값(WNinit _1)을 획득한다.
도 9b를 참조하면, 경로(912)가 타일(922)의 마주보는 두 경계선을 반시계 방향으로(아래에서 위로) 통과하는 경우, 연산부(110)는 타일(922)의 좌측에 위치하는 모든 타일(932)의 초기 주회 횟수에 1을 감산함으로써, 제 1 초기 값(WNinit _1)을 획득한다.
도 9c를 참조하면, 경로(913)가 타일(923)의 일 경계선으로 입장하였다가 퇴장하는 경우, 연산부(110)는 타일(923)의 좌측에 위치하는 모든 타일(933)의 초기 주회 횟수에 0을 더하거나 초기 주회 횟수를 그대로 간주함으로써 제 1 초기 값(WNinit _1)을 획득한다.
도 9a 내지 도 9c는 경로가 타일을 시계 방향으로 통과하는 경우에 연산부(110)가 초기 주회 횟수에 1을 증산하고, 반시계 방향으로 통과하는 경우에 연산부(110)가 초기 주회 횟수에 1을 감산하는 것으로 설명하였으나, 이에 한정되지 않는다. 일 예로서, 경로가 타일을 시계 방향으로 통과하는 경우에 연산부(110)가 1을 감산하고, 반시계 방향으로 통과하는 경우에 연산부(110)가 1을 증산할 수도 있다.
다시 도 8을 참조하면, 제 1 경로(e0)는 정점(P0)로부터 정점(P1)까지 연결되는 직선 경로이므로, 타일들(810)의 마주보는 두 경계선을 반시계 방향으로 통과한다. 따라서, 연산부(110)는 타일들(821) 각각의 초기 주회 횟수에 1을 감산함으로써 제 1 초기 값(WNinit _1)을 획득한다. 한편, 프레임에 포함된 타일들 중에서 타일들(821)을 제외한 타일들은 초기 주회 횟수가 그대로 제 1 초기 값(WNinit _1)으로 결정된다. 그리고, 연산부(110)는 제 1 초기 값(WNinit _1)을 각각의 타일 별로 로컬 메모리(150)에 저장할 수 있다.
도 5를 참조하여 상술한 바와 같이, 경로 데이터에 복수의 경로들에 대한 정보가 포함되어 있는 경우, 연산부(110)는 복수의 경로들을 순차적으로 고려하여 타일의 초기 값을 설정한다. 도 8 내지 도 9c를 참조하여 상술한 바와 같이, 연산부(110)가 제 1 경로(e0)의 위치 및 진행 방향에 기초하여 제 1 초기 값(WNinit _1)을 획득하였으므로, 이후에 연산부(110)는 제 2 경로(e1)의 위치 및 진행 방향에 기초하여 제 1 초기 값(WNinit _1)을 갱신함으로써 제 2 초기 값(WNinit _2)을 획득한다.
이하, 도 10a 내지 도 11c를 참조하여, 연산부(110)가 프레임에 포함된 타일들 중 제 2 경로가 통과하는 타일들을 선택하고, 타일들의 제 2 초기 값(WNinit _2)을 획득하는 일 예를 설명한다.
도 10a 내지 도 10b는 일 실시예에 따른 연산부가 프레임에 포함된 타일들 중 제 2 경로가 통과하는 타일을 선택하고, 타일들의 제 2 초기 값을 획득하는 일 예를 설명하기 위한 도면들이다.
도 10a에는 제 2 경로(e1)가 도시되어 있다. 여기에서, 제 2 경로(e1)는 정점(P1)으로부터 정점(P2)까지 연결된 직선 경로이다. 따라서, 제 2 경로(e1)는 시계 방향으로 진행하는 경로임을 알 수 있다.
연산부(110)는 프레임에 포함된 타일들 중에서 제 2 경로(e1)가 통과하는 타일들(1020)을 선택한다. 이때, 연산부(110)가 타일들(1020)을 선택하는 방법은 도 7a 내지 도 7e를 참조하여 상술한 바와 같다. 그리고, 연산부(110)는, 선택된 타일들(1020) 별로, 타일에 제 2 경로(e1)가 통과한다는 정보를 'Edge_List'로 생성하고, 이를 로컬 메모리(150)에 저장한다. 만약, 도 6을 참조하여 상술한 바와 같이 Edge_List가 이미 생성된 타일의 경우에는, 기 생성된 Edge_List에 제 2 경로(e1)가 통과한다는 정보를 추가하여 저장한다. 도 10b에 도시된 타일들(1020)에 표시된 'e0, e1' 또는 'e1'은 타일들(1020) 각각의 Edge_List에 포함된 정보를 의미한다. 다시 말해, 'e0, e1'이 표시된 타일은 제 1 경로(e0)가 지나가는 타일이면서, 제 2 경로(e1)가 지나가는 타일을 의미한다. 또한, 'e1'가 표시된 타일은 제 2 경로(e1)가 지나가는 타일을 의미한다.
그리고, 연산부(110)는 선택된 타일들(1020)의 일 측면에 위치하는 타일들(1031) 각각의 제 2 초기 값(WNinit _2)을 획득한다. 이때, 연산부(110)가 타일들(1031) 각각에 제 2 초기 값(WNinit _2)을 획득하는 방법은 도 8 내지 도 9c를 참조하여 상술한 바와 같다.
제 2 경로(e1)가 시계 방향으로 타일들(1020)을 통과하므로, 연산부(110)는 타일들(1031) 각각의 제 1 초기 값(WNinit _1)에 1을 증산함으로써 제 2 초기 값(WNinit _2)을 획득한다. 제 2 경로(e1)의 시작 정점(P1)을 포함하는 타일의 좌측 방향에 위치한 타일들(1033)의 경우, 연산부(110)는 제 1 경로(e0) 및 제 2 경로(e1)가 타일을 통과하는 형태를 고려하여, 제 2 초기 값(WNinit _2)을 획득한다. 이하, 도 11a 내지 도 12를 참조하여, 연산부(110)가 타일들(1033) 각각의 제 2 초기 값(WNinit _2)을 획득하는 일 예를 설명한다. 한편, 프레임에 포함된 타일들 중에서 타일들(1031, 1033)을 제외한 타일들은 제 1 초기 값(WNinit _1)이 그대로 제 2 초기 값(WNinit _2)으로 결정된다. 그리고, 연산부(110)는 제 2 초기 값(WNinit _2)을 각각의 타일 별로 로컬 메모리(150)에 저장할 수 있다.
또한, 도 8을 참조하여 상술한 바와 같이, 연산부(110)는 제 2 경로(e1)의 종료 정점(P2)을 포함하는 타일의 좌측 방향에 위치한 타일들(1032)에 대해서는 제 2 초기 값(WNinit _2)의 연산을 보류한다. 연산부(110)는 제 2 경로(e1) 및 제 3 경로(e2)가 타일을 통과하는 형태를 고려하여, 타일들(1032)의 제 3 초기 값(WNinit _3)을 획득한다.
도 11a 내지 도 11c는 일 실시예에 따른 연산부가 2개 이상의 경로들의 진행 방향을 고려하여 초기 값을 부여하는 규칙의 일 예를 나타내는 도면들이다.
도 11a는 두 개 이상의 경로(1111)가 타일(1121)의 마주보는 두 경계선을 시계 방향으로(위에서 아래로) 통과하는 경우를 나타낸다. 도 11b는 두 개 이상의 경로(1112)가 타일(1122)의 마주보는 두 경계선을 반시계 방향으로(아래에서 위로) 통과하는 경우를 나타낸다. 도 11c는 두 개 이상의 경로(1113)가 타일(1123)의 일 경계선으로 입장하였다가 퇴장하는 경우를 나타낸다. 예를 들어, 도 8 및 도 10을 참조하면, 제 1 경로(e0)의 종료 정점과 제 2 경로(e1)의 시작 정점이 모두 정점(P1)인 경우는 도 11c에 해당된다.
또한, 도 11a 내지 도 11c에 도시된 타일(1121, 1122, 1123)은 두 개 이상의 타일들이 결합된 타일이 될 수도 있다. 예를 들어, 경로가 통과하는 타일들이 수평 방향으로 두 개 이상 연속되는 경우, 도 11a 내지 도 11c에 도시된 하나의 타일(1121, 1122, 1123)로 간주될 수 있다.
이하, 도 12를 참조하여, 세 개의 경로들이 통과하는 타일들의 예를 설명한다.
도 12는 일 실시예에 따른 경로가 세 개인 경우에 연산부가 타일의 초기 값을 설정하는 일 예를 설명하기 위한 도면이다.
도 12를 참조하면, 8*8 개의 타일들로 구성된 프레임(1210) 및 별 형상의 객체(1220)가 도시되어 있다. 그리고, 객체(1220)는 5개의 경로들(e0, e1, e2, e3, e4, e5)로 구성되어 있다. 이때, 경로(e2)와 경로(e3)는 프레임에 포함된 일부 타일들(1230)에 진입하여 수평 방향으로 통과한다. 경로(e2)와 경로(e3)가 타일들(1230)의 마주보는 경계선들을 관통하거나, 하나의 경계선으로 입장하였다가 퇴장하지 않기 때문에, 도 11a 내지 도11c의 규칙에 해당되지 않는다. 따라서, 타일들(1230)의 일 측면(예를 들어, 좌측 면)에 위치한 타일들(1240)의 초기 값(WNinit)은 설정될 수 없고 보류된다.
연산부(110)는 객체(1220)에 포함된 일 경로가 타일들(1230)에 진입하면, 객체(1220)에 포함된 다른 경로가 타일들(1230)로부터 퇴장할 때까지 타일들(1230)의 일 측면에 위치한 타일들의 초기 값(WNinit) 설정을 보류한다. 예를 들어, 경로(e2)가 타일들(1230)에 진입하면, 다음 경로(e3)가 프레임에 포함된 일부 타일들(1230)을 수평 방향으로 통과하더라도, 연산부(110)는 타일들(1230)의 일 측면에 위치한 타일들의 초기 값(WNinit) 설정을 보류한다. 그리고, 경로(e4)가 타일들(1230)로부터 퇴장하면, 연산부(110)는 타일들(1230)의 일 측면에 위치한 타일들의 초기 값(WNinit)을 설정한다.
다시 말해, 연산부(110)는 경로(e2), 경로(e3) 및 경로(e4)의 세 개 경로들이 타일들(1230)을 통과하는 형태에 따라 타일들(1230)의 일 측면에 위치한 타일들의 초기 값(WNinit)을 설정한다. 이때, 연산부(110)는 도 11a 내지 도11c에 도시된 규칙에 따라 타일들의 초기 값(WNinit)을 설정할 수 있다.
도 11a를 참조하면, 두 개 이상의 경로들(1111)이 타일(1121)의 마주보는 두 경계선을 시계 방향으로(위에서 아래로) 통과하는 경우, 연산부(110)는 타일(1121)의 좌측에 위치하는 모든 타일(1131)의 초기 값(또는 초기 주회 횟수)에 1을 증산한다.
도 11b를 참조하면, 두 개 이상의 경로들(1112)이 타일(1122)의 마주보는 두 경계선을 반시계 방향으로(아래에서 위로) 통과하는 경우, 연산부(110)는 타일(1122)의 좌측에 위치하는 모든 타일(1132)의 초기 값(또는 초기 주회 횟수)에 1을 감산한다.
도 11c를 참조하면, 두 개 이상의 경로들(1113)이 타일(1123)의 일 경계선으로 입장하였다가 같은 방향으로 퇴장하는 경우, 연산부(110)는 타일(1123)의 좌측에 위치하는 모든 타일(1133)의 초기 값(또는 초기 주회 횟수)에 0을 더하거나 그대로 유지한다.
도 11a 내지 도 11c는 경로들이 타일을 시계 방향으로 통과하는 경우에 연산부(110)가 초기 값(또는 초기 주회 횟수)에 1을 증산하고, 반시계 방향으로 통과하는 경우에 연산부(110)가 초기 값(또는 초기 주회 횟수)에 1을 감산하는 것으로 설명하였으나, 이에 한정되지 않는다. 일 예로서, 경로가 타일을 시계 방향으로 통과하는 경우에 연산부(110)가 초기 값(또는 초기 주회 횟수)에 1을 감산하고, 반시계 방향으로 통과하는 경우에 연산부(110)가 초기 값(또는 초기 주회 횟수)에 1을 증산할 수도 있다.
다시 도 8 및 도 10a를 참조하면, 제 1 경로(e0)와 제 2 경로(e1)는 정점(P1)을 포함하는 타일의 하측 면에서 입장하였다가, 하측 면으로 퇴장한다. 따라서, 연산부(110)는 타일들(1033) 각각의 제 2 초기 값(WNinit _2)을 제 1 초기 값(WNinit _1)과 동일한 0으로 유지한다.
도 10b에는 제 1 경로(e0)와 제 2 경로(e1)에 기초하여 획득된 제 2 초기 값(WNinit _2)이 도시되어 있다. 도 10b에 도시된 타일들(1041, 1042, 1043)마다 표시된 '0', '-1' 또는 '1'은 타일들(1041, 1042, 1043) 각각의 제 2 초기 값(WNinit _2)을 의미한다. 또한, 도 10b에는 도시되지 않았으나, 프레임에 포함된 타일들 중에서 타일들(1041, 1042, 1043)을 제외한 타일들의 제 2 초기 값(WNinit _2)은 초기 주회 횟수와 동일한 '0'이다.
도 10a 내지 도 11c를 참조하여 상술한 바와 같이, 연산부(110)가 제 2 경로(e1)의 위치 및 진행 방향에 기초하여 제 2 초기 값(WNinit _2)을 획득하였으므로, 이후에 연산부(110)는 제 3 경로(e2)의 위치 및 진행 방향에 기초하여 제 2 초기 값(WNinit _2)을 갱신함에 따라 제 3 초기 값(WNinit _3)을 설정한다.
이하, 도 13a 내지 도 13b를 참조하여, 연산부(110)가 프레임에 포함된 타일들 중 제 3 경로가 통과하는 타일들을 선택하고, 선택된 타일들의 일 측면 방향에 위치한 타일들의 제 3 초기 값(WNinit _3)을 획득하는 일 예를 설명한다.
도 13a 내지 도 13b는 일 실시예에 따른 연산부가 프레임에 포함된 타일들 중 제 3 경로가 통과하는 타일을 선택하고, 타일들의 제 3 초기 값을 획득하는 일 예를 설명하기 위한 도면들이다.
도 13a에는 제 3 경로(e2)가 도시되어 있다. 여기에서, 제 3 경로(e2)는 정점(P2)으로부터 정점(P0)까지 연결된 직선 경로이다. 따라서, 제 3 경로(e2)는 시계 방향으로 회전하는 경로임을 알 수 있다.
연산부(110)는 프레임에 포함된 타일들 중에서 제 2 경로(e1)가 통과하는 타일들(1320)을 선택한다. 이때, 연산부(110)가 타일들(1320)을 선택하는 방법은 도 7을 참조하여 상술한 바와 같다. 그리고, 연산부(110)는, 선택된 타일들(1320) 별로, 타일에 제 3 경로(e2)가 통과한다는 정보를 'Edge_List'로 생성하고, 이를 로컬 메모리(150)에 저장한다. 만약, 도 6을 참조하여 상술한 바와 같이 Edge_List가 이미 생성된 타일의 경우에는, 기 생성된 Edge_List에 제 3 경로(e2)가 통과한다는 정보를 추가하여 저장한다. 도 13b에 도시된 타일들에 표시된 'e0, e2', 'e1, e2' 또는 'e2'는 타일들 각각의 Edge_List에 포함된 정보를 의미한다. 'e0, e2'가 표시된 타일은 제 1 경로(e0)가 지나가는 타일이면서, 제 3 경로(e2)가 지나가는 타일을 의미한다. 또한, 'e1, e2'가 표시된 타일은 제 2 경로(e1)가 지나가는 타일이면서, 제 3 경로(e2)가 지나가는 타일을 의미한다. 또한, 'e2'가 표시된 타일은 제 3 경로(e2)가 지나가는 타일을 의미한다.
그리고, 연산부(110)는 선택된 타일들(1320)의 일 측면에 위치하는 타일들(1331) 각각의 제 2 초기 값(WNinit _2)을 갱신함으로써 제 3 초기 값(WNinit _3)을 획득한다. 예를 들어, 연산부(110)는 선택된 타일들(1320)의 좌측 방향의 타일들(1331) 각각의 제 3 초기 값(WNinit _3)을 획득할 수 있다. 이때, 연산부(110)가 타일들(1331) 각각의 제 3 초기 값(WNinit _3)을 획득하는 방법은 도 8 및 도 9a 내지 도 9c를 참조하여 상술한 바와 같다. 구체적으로, 제 3 경로(e2)가 시계 방향으로 타일들(1320)을 통과하므로, 연산부(110)는 도 9a의 규칙에 따라 좌측에 위치하는 타일들(1331) 각각의 제 2 초기 값(WNinit _2)에 1을 증산함으로써 제 3 초기 값(WNinit _3)을 획득한다.
한편, 제 3 경로(e2)의 시작 정점(P2)을 포함하는 타일의 좌측 방향에 위치한 타일들(1332)의 경우, 연산부(110)는 제 2 경로(e1) 및 제 3 경로(e2)가 타일을 통과하는 형태를 고려하여, 제 3 초기 값(WNinit _3)을 결정한다. 이때, 연산부(110)가 타일들(1132) 각각에 제 3 초기 값(WNinit _3)을 결정하는 방법은 도 11a 내지 도 11c를 참조하여 상술한 바와 같다. 구체적으로, 제 2 경로(e1)와 제 3 경로(e2)는 타일(1321)의 마주보는 두 경계선을 시계 방향으로(위에서 아래로) 통과하므로 도 11a의 경우에 해당한다. 따라서, 연산부(110)는 타일들(1332) 각각의 제 2 초기 값(WNinit _2)에 1을 증산 함으로써 제 3 초기 값(WNinit _3)을 획득한다.
또한, 제 3 경로(e2)의 종료 정점(P0)을 포함하는 타일의 좌측 방향에 위치한 타일(1333)의 경우, 연산부(110)는 제 3 경로(e2) 및 제 1 경로(e0)가 타일을 통과하는 형태를 고려하여, 제 3 초기 값(WNinit _3)을 결정한다. 구체적으로, 제 3 경로(e2)와 제 1 경로(e0)는 타일(1322)의 단일 면(상측 면)으로 입장하였다가 같은 방향으로 퇴장하므로 도 11c의 경우에 해당한다. 따라서, 연산부(110)는 타일(1333)의 제 2 초기 값(WNinit _2)을 그대로 제 3 초기 값(WNinit _3)으로 결정한다.
한편, 프레임에 포함된 타일들 중에서 타일들(1331, 1332, 1333)을 제외한 타일들은 제 2 초기 값(WNinit _2)이 그대로 제 3 초기 값(WNinit _3)으로 결정된다. 그리고, 연산부(110)는 제 3 초기 값(WNinit _3)을 각각의 타일 별로 로컬 메모리(150)에 저장할 수 있다.
도 13b에는 제 1 경로(e0), 제 2 경로(e1) 및 제 3 경로(e2)에 기초하여 획득된 제 3 초기 값(WNinit _3)이 도시되어 있다. 도 13b에 도시된 타일들(1341, 1342, 1343, 1344)마다 표시된 '0' 또는 '1'은 타일들(1341, 1342, 1343, 1344) 각각의 제 3 초기 값(WNinit _3)을 의미한다. 또한, 도 13b에는 도시되지 않았으나, 프레임에 포함된 타일들 중에서 타일들(1341, 1342, 1343, 1344)을 제외한 타일들의 제 3 초기 값(WNinit _3)은 초기 주회 횟수와 동일한 '0'이다.
연산부(110)는 제 3 초기 값(WNinit _3)을 제 1 주회 횟수(WNinit)로 결정한다. 도 6a 내지 도 13b를 참조하여 상술한 바와 같이, 연산부(110)는 초기 주회 횟수(예를 들어, 0)가 갱신된 제 3 초기 값(WNinit _3)을 제 1 주회 횟수(WNinit)로 결정한다.
도 5 내지 도 13b를 참조하여 상술한 바에 따르면, 연산부(110)는, 프레임에 포함된 모든 타일들에 대하여, 동일한 측면을 고려하여 제 1 주회 횟수(WNinit)를 설정하였다. 예를 들어, 연산부(110)는, 하나의 타일에서 경로가 어떤 방향으로 통과하는지에 따라, 그 타일의 왼쪽에 존재하는 타일들의 초기 주회 횟수에 소정의 값을 증산 또는 감산함으로써 제 1 주회 횟수(WNinit)를 설정할 수 있다.
한편, 객체가 프레임의 한쪽에 편중되어 있는 경우, 연산부(110)는 프레임에 포함된 타일들 별로 다른 측면을 고려하여 제 1 주회 횟수(WNinit)를 설정할 수 있다. 다시 말해, 연산부(110)는 프레임에 포함된 타일들 각각의 위치와 프레임 내에서의 경로의 위치를 고려하여 제 1 주회 횟수(WNinit)를 설정할 수 있다. 이하, 도 14 내지 도 15를 참조하여 상세하게 설명한다.
도 14는 일 실시예에 따른 연산부가 제 1 주회 횟수를 설정하는데 이용되는 경로들의 다른 예를 도시한 도면이다.
도 14를 참조하면, 프레임(1410)은 6*6 개의 타일들을 포함하고, 삼각형 형상의 객체(1420)는 3개의 경로들(e0, e1, e2)을 포함하도록 도시되어 있다. 이때, 객체(1420)는 프레임(1410)의 우측에 편중되어 위치한다.
도 15는 일 실시예에 따른 연산부가 제 1 주회 횟수를 설정하는 다른 예를 설명하기 위한 도면이다.
도 15에는 도 14의 경로들이 연산부(110)에 의하여 처리되는 예가 도시되어 있다. 도 15를 참조하면, 프레임에는 경로(e0), 경로(e1) 및 경로(e2)가 순차적으로 그려진다. 다만, 경로(e0), 경로(e1) 및 경로(e2)로 구성된 객체는 프레임의 우측에 편중되어 위치한다.
연산부(110)는 프레임에 포함된 타일들 각각의 위치와 프레임 내에서의 경로의 위치를 고려하여 제 1 주회 횟수(WNinit)를 설정할 수 있다. 구체적으로, 경로 데이터에 포함된 경로들(e0, e1, e2)에 대한 정보를 이용하여, 객체가 프레임의 일 측면에 편중되어 위치하는지를 파악한다. 만약, 객체가 프레임의 일 측면에 편중된 경우, 연산부(110)는 프레임에서 객체가 포함되지 않은 제 1 영역(1511)과 객체가 포함된 제 2 영역(1512)을 나눈다. 그리고, 연산부(110)는 영역들(1511, 1512) 별로 경로를 체크하는 방향을 달리하여 제 1 주회 횟수(WNinit)를 설정한다. 도 15에는 연산부(110)가 프레임을 2개의 영역들(1511, 1512)로 나누는 것으로 도시되어 있으나, 연산부(110)가 프레임을 나누는 영역의 개수는 2개로 한정되지 않는다.
먼저, 연산부(110)는 프레임에 포함된 모든 타일들에 초기 주회 횟수를 할당한다. 예를 들어, 연산부(110)는 프레임에 포함된 모든 타일들 각각의 초기 주회 횟수를 0으로 할당할 수 있다. 그 다음, 연산부(110)는 제 1 영역(1511)과 제 2 영역(1512)의 타일들의 제 1 주회 횟수(WNinit)를 획득하는데 있어서 서로 다른 측면을 이용할 수 있다. 구체적으로, 제 1 영역(1511)의 타일들을 도 3 내지 도 13의 설명들과는 반대로, 왼쪽 방향으로 바라보는 제 1 주회 횟수(WNinit)를 획득할 수 있다. 이 경우, 제 1 영역(1511)에는 경로가 존재하지 않기 때문에, 연산부(110)는 제 1 영역(1511)에 포함된 어느 타일들에 대해서도 초기 주회 횟수에 소정의 값(예를 들어, 1)을 증산하거나 감산하지 않는다. 다시 말해, 연산부(110)는 제 1 영역(1511)에 포함된 타일들의 제 1 주회 횟수(WNinit)를 초기 주회 횟수(예를 들어, 0)으로 확정한다.
제 2 영역(1512)의 타일들은 제 1 영역(1511)의 타일들과는 반대로, 오른쪽 방향을 바라보는 제 1 주회 횟수(WNinit)가 획득될 수 있다. 따라서, 도 3 내지 도 13의 설명이 동일하게 적용될 수 있다. 구체적으로, 경로(e0)가 통과하는 타일들(1520)의 좌측에 존재하는 타일은 제 2 영역(1512)에 없기 때문에 제 1 초기 값(WNinit _1)은 초기 주회 횟수와 동일하다.
경로(e1)가 통과하는 타일들(1530)의 좌측에 존재하는 제 2 영역(1512)에 포함된 타일(1550)은 정점으로써 경로(e2)가 고려될 때까지 타일들의 제 2 초기 값(WNinit _2)의 획득이 보류된다. 따라서, 제 2 영역(1512)의 타일들의 제 2 초기 값(WNinit _2)은 제 1 초기 값(WNinit _1)과 동일하다.
경로(e2)가 통과하는 타일들(1540)의 좌측에 존재하는 제 2 영역(1512)에 포함된 타일들은 타일(1550)이 유일하다. 이 경우, 도 11a의 규칙에 따라 제 3 초기 값(WNinit _3)이 획득된다. 다시 말해, 연산부(110)는 제 2 초기 값(WNinit _2)에 +1을 합산함으로써, 타일(!550)의 제 3 초기 값(WNinit _3)을 획득한다.
최종적으로, 연산부(110)는 제 3 초기 값(WNinit _3)을 제 2 영역(1512) 타일들의 제 1 주회 횟수(WNinit)로 결정한다.
이상의 설명을 요약하면, 전체 영상 또는 부분 영상은 타일들로 분할되어, 각 타일에 포함되는 모든 픽셀들의 제 1 주회 횟수가 결정된다. 경로가 존재하지 않는 타일의 경우에는 이렇게 결정된 제 1 주회 횟수가 픽셀들의 최종 주회 횟수가 되고, 경로가 존재하는 타일의 경우에는 후술하는 방식으로 픽셀들의 최종 주회 횟수가 결정된다. 구체적으로, 경로가 존재하는 타일의 픽셀들은 제 1 주회 횟수(WNinit)에 기초하여 제 2 주회 횟수(WN)가 연산되고, 제 2 주회 횟수(WN)가 픽셀의 최종 주회 횟수로 결정된다. 제 2 주회 횟수(WN)가 연산되는데 있어서, 각 타일 별로 존재하는 경로의 위치와 진행 방향 그리고 픽셀의 위치가 고려된다.
이하, 도 16을 참조하여, 연산부(110)가 경로가 통과하는 타일들의 제 2 주회 횟수(WN)를 연산하는 일 예를 설명한다.
도 16a 내지 도 16c는 일 실시예에 따른 연산부가 경로가 통과하는 타일들의 제 2 주회 횟수를 연산하는 일 예를 설명하기 위한 도면들이다.
도 16a에는 6*6 개의 타일들로 구성된 프레임 및 도 5에 도시된 객체(520)와 동일한 삼각형 형상의 객체(1620)가 도시되어 있다. 따라서, 도 16a 내지 도 16c에서는, 도 6a 내지 도 13b를 참조하여 상술한 바에 따라 연산부(110)가 경로들(e0, e1, e2)이 통과하는 타일들(1630)을 선택하고, 프레임에 포함된 타일들 각각에 제 1 주회 횟수(WNinit)를 설정한 결과에 기초하여 설명한다.
하나의 타일에는 복수 개의 픽셀들이 포함되어 있다. 따라서, 연산부(110)가 설정하는 픽셀들의 주회 횟수는 하나의 타일에 포함된 픽셀들 간에도 서로 다를 수 있다. 특히, 경로들(e0, e1, e2)이 통과하는 타일들(1630)의 경우에는 타일들(1630)에 포함된 픽셀들의 주회 횟수는 서로 다를 수 있다. 따라서, 연산부(110)는, 경로를 포함하는 타일들(1630) 각각의 픽셀들에 대하여, 제 1 주회 횟수(WNinit)에 기초하여 제 2 주회 횟수(WN)을 연산한다. 한편, 타일들(1630)을 제외한 경로를 포함하지 않는 타일들에 포함된 모든 픽셀들의 주회 횟수는 그 타일의 제 1 주회 횟수(WNinit)로 결정된다. 이하, 도 16b 내지 도 16c를 참조하여 제 2 주회 횟수(WN)가 연산되는 일 예를 구체적으로 설명한다.
도 16b에는 도 16a에 도시된 경로들(e0, e1, e2)이 통과하는 타일들(1630) 중 하나의 타일(1631)이 도시되어 있다. 타일(1631)의 내부 영역은 제 1 경로(e0) 및 제 2 경로(e1)에 의하여 2 개의 영역들로 구분될 수 있다. 이하에서는, 제 1 경로(e0) 및 제 2 경로(e1)에 의하여 둘러 쌓인 영역을 제 1 영역(1641)이라고 하고, 제 1 영역(1641)을 제외한 영역을 제 2 영역(1642)이라고 한다.
연산부(110)는 타일(1631)의 제 1 주회 횟수(WNinit)에 기초하여 제 2 주회 횟수(WN)을 연산한다. 구체적으로, 연산부(110)는 로컬 메모리(150)에 저장된 타일(1631)의 Edge_List를 이용하여 타일(1631)의 제 2 주회 횟수(WN)을 연산할 수 있다. 타일(1631)의 Edge_List에는 타일(1631)을 통과하는 경로들(e0, e1)의 정보가 포함되어 있다. 따라서, 연산부(110)는 타일(1631)을 통과하는 경로들(e0, e1)의 위치 및 진행 방향에 기초하여 제 2 주회 횟수(WN)를 연산할 수 있다.
예를 들어, 연산부(110)는 아래의 수학식 1에 따라 타일(1631)의 제 2 주회 횟수(WN)(타일(1631)에 포함된 픽셀의 주회 횟수(WN))를 연산할 수 있다.
Figure 112015067603710-pat00001
수학식 1에서, WN은 픽셀의 주회 횟수를 의미하며, WNinit은 픽셀을 포함하는 타일의 제 1 주회 횟수를 의미한다. 그리고, NCW는 픽셀의 일 측면에 위치하고, 시계 방향으로 진행하는(위에서 아래로 진행하는) 경로에 기초하여 결정된 값을 의미한다. 그리고, NCCW는 픽셀의 일 측면에 위치하고, 반시계 방향으로 진행하는(아래에서 위로 진행하는) 경로에 기초하여 결정된 값을 의미한다. 여기에서, 픽셀의 일 측면은 픽셀의 위치를 중심으로 좌측, 우측, 상측 및 하측 중 어느 하나를 의미하고, 제 1 주회 횟수를 계산하는데 이용된 방향과 동일한 방향을 의미한다. 예를 들어, 도 6 내지 도 13b에서 우측 방향을 이용하여 제 1 주회 횟수가 계산되었으면, 픽셀의 주회 횟수(WN)가 계산되는데 있어서도 동일한 우측 방향이 이용된다.
연산부(110)는 제 1 영역(1641)에 포함된 픽셀(1651)의 주회 횟수(WN)를 +1로 연산할 수 있다. 구체적으로, 타일(1631)의 제 1 주회 횟수(WNinit)는 0이고, 픽셀(1651)의 우측 면에 위치한 제 2 경로(e1)가 시계 방향으로 진행하므로 NCW는 1이다. 또한, 픽셀(1651)의 우측 면에 반시계 방향으로 진행하는 경로가 없으므로 NCCW는 0이다. 따라서, 연산부(110)는 수학식 1에 따라 픽셀(1651)의 주회 횟수(WN)를 +1로 연산할 수 있다.
또한, 연산부(110)는 제 2 영역(1642)에 포함된 픽셀(1652)의 주회 횟수(WN)를 0으로 연산할 수 있다. 구체적으로, 타일(1631)의 제 1 주회 횟수(WNinit)는 0이고, 픽셀(1652)의 우측 면에 위치한 제 1 경로(e0)가 반시계 방향으로 진행하므로 NCCW는 1이다. 또한, 픽셀(1652)의 우측 면에 위치한 제 2 경로(e1)가 시계 방향으로 진행하므로 NCW는 1이다. 따라서, 연산부(110)는 수학식 1에 따라 픽셀(1652)의 주회 횟수(WN)를 0으로 연산할 수 있다.
또한, 연산부(110)는 제 2 영역(1642)에 포함된 픽셀(1653)의 주회 횟수(WN)를 0으로 연산할 수 있다. 구체적으로, 타일(1631)의 제 1 주회 횟수(WNinit)는 0이고, 픽셀(1653)의 우측 면에 위치한 경로가 없으므로 NCW 및 NCCW는 0이다. 따라서, 연산부(110)는 수학식 1에 따라 픽셀(1653)의 주회 횟수(WN)를 0으로 연산할 수 있다.
종합하면, 도 16b에 도시된 제 1 영역(1641)에 포함된 픽셀들 각각의 주회 횟수(WN)는 모두 1로 연산될 수 있고, 제 2 영역(1642)에 포함된 픽셀들 각각의 주회 횟수(WN)는 모두 0으로 연산될 수 있다. 따라서, 동일한 타일(1631)에 포함된 픽셀들이라도, 경로에 의하여 구분된 영역에 따라 픽셀들의 주회 횟수(WN)가 서로 다를 수 있다.
도 16c에는 도 16a에 도시된 경로들(e0, e1, e2)이 통과하는 타일들(1630) 중 다른 하나의 타일(1632)이 도시되어 있다. 타일(1632)의 내부 영역은 제 1 경로(e0) 에 의하여 2 개의 영역들로 구분될 수 있다. 제 1 경로(e0) 및 타일(1632)의 우측 및 하측 경계선들에 의하여 둘러 쌓인 영역을 제 3 영역(1643)이라고 하면, 제 3 영역(1643)의 픽셀(1654)의 주회 횟수는 1이 된다. 구체적으로, 타일(1632)의 제 1 주회 횟수는 1이고, 픽셀(1654)의 우측 면에 경로가 없으므로, NCW및 NCCW는 0이다. 따라서, 연산부(110)는 수학식 1에 따라 픽셀(1654)의 주회 횟수(WN)를 1로 연산할 수 있다.
또한, 타일(1632)에서 제 3 영역(1643)을 제외한 영역을 제 4 영역(1644)이라고 하면, 제 4 영역(1644)의 픽셀(1655, 1656)의 주회 횟수는 1이 된다. 구체적으로, 픽셀(1655)의 우측 면에 제 1 경로(e0)가 위치하므로, NCW는 0이고 NCCW는 1이다. 따라서, 연산부(110)는 수학식 1에 따라 픽셀(1655)의 주회 횟수(WN)를 0으로 연산할 수 있다. 한편, 픽셀(1656)의 경우에도 픽셀(1655)와 동일하게 NCW는 0이고 NCCW는 1이다. 타일(1632)의 Edge_List에는 타일(1632)을 통과하는 경로(e0)의 위치와 진행 방향에 대한 정보가 포함된다. 도 16c에는 타일(1632) 내부에서 픽셀(1656)의 우측 면에 경로가 없는 것처럼 도시되어 있으나, 연산부(110)는 Edge_List를 이용하여 픽셀의 주회 횟수를 연산하기에, 연산부(110)는 픽셀(1656)의 우측 면에 제 1 경로(e0)가 위치하는 것으로 간주한다. 따라서, 픽셀(1656)의 NCW는 0이고 NCCW는 1이므로, 연산부(110)는 수학식 1에 따라 픽셀(1655)의 주회 횟수(WN)를 0으로 연산할 수 있다.
결론적으로, 연산부(110)는 도 16c에 도시된 제 3 영역(1643)에 포함된 픽셀들 각각의 주회 횟수(WN)를 모두 1로 연산할 수 있고, 제 4 영역(1644)에 포함된 픽셀들 각각의 주회 횟수(WN)를 모두 0으로 연산할 수 있다.
상술한 바에 따르면, 경로가 존재하지 않는 타일들과는 달리, 경로가 존재하는 타일들 각각에 포함되는 픽셀들의 주회 횟수는 타일에서의 픽셀의 위치와 타일을 통과하는 경로의 위치와 진행 방향이 고려되어 결정된다.
도 1 및 도 2를 참조하여 상술한 바와 같이, 결정부(120)는, 타일의 주회 횟수에 기초하여, 쉐이딩의 수행 여부를 결정할 수 있다. 다시 말해, 결정부(120)는, 제 1 주회 횟수(WNinit) 또는 제 2 주회 횟수(WN)에 기초하여, 프래그먼트 쉐이더(2731)에게 픽셀의 쉐이딩을 수행하라는 지시를 내릴지 여부를 결정할 수 있다.
도 5 내지 도 16c를 참조하여 상술한 바에 따르면, 연산부(110)는 프레임에 포함된 타일들 각각에 제 1 주회 횟수를 설정하고, 제 1 주회 횟수에 기초하여 적어도 하나의 경로가 통과하는 타일들 각각의 제 2 주회 횟수를 연산한다. 결론적으로, 연산부(110)가 프레임에 포함된 모든 픽셀들에 대하여 주회 횟수를 연산하는 것과 동일한 결과가 도출된다. 따라서, 결정부(120)는 프레임에 포함된 픽셀들 각각의 주회 횟수에 기초하여 쉐이딩의 수행 여부를 결정할 수 있다. 여기에서, 쉐이딩은 픽셀들 각각에 컬러를 설정하는 과정을 의미할 수 있으나, 이에 한정되지 않는다.
예를 들어, 결정부(120)는 프레임에 포함된 픽셀들 각각의 주회 횟수를 이용하여 픽셀들 각각에 컬러를 설정할지 여부를 결정할 수 있다. 이때, 결정부(120)는 기 설정된 규칙에 기초하여 픽셀들 각각에 컬러를 설정할지 여부를 결정할 수 있다. 여기에서, 기 설정된 규칙은 주회 횟수가 0이 아닌 값을 갖는 픽셀들에 컬러 값을 할당하는 제 1 규칙 또는 주회 횟수가 홀수인 값을 갖는 픽셀들에 컬러 값을 할당하는 제 2 규칙 중 어느 하나를 의미할 수 있다. 이하, 도 17a 내지 도 17c를 참조하여, 결정부(120)가 쉐이딩의 수행 여부를 결정하는 일 예를 설명한다.
도 17a 내지 도 17c는 일 실시예에 따른 결정부가 프레임에 포함된 픽셀들 각각의 주회 횟수에 기초하여 쉐이딩의 수행 여부를 결정하는 일 예를 설명하기 위한 도면들이다.
도 17a는 프레임(1710)에 포함된 픽셀들 각각의 주회 횟수를 도시한 도면이고, 도 17b는 제 1 규칙에 따라 픽셀들 각각에 컬러 값이 할당된 결과를 도시한 도면이다. 또한, 도 17c는 제 2 규칙에 따라 픽셀들 각각에 컬러 값이 할당된 결과를 도시한 도면이다.
도 17a를 참조하면, 영역(1711)에 포함된 픽셀들은 각각 주회 횟수가 0으로 연산되어 있으며, 영역(1712)에 포함된 픽셀들은 각각 주회 횟수가 +1로 연산되어 있으며, 영역(1713)에 포함된 픽셀들은 각각 주회 횟수가 +2로 연산되어 있다.
일 예로서, 결정부(120)는 제 1 규칙에 기초하여 픽셀들 각각에 컬러를 설정할지 여부를 결정할 수 있다. 여기에서, 제 1 규칙은 주회 횟수가 0이 아닌 값을 갖는 픽셀들에 컬러 값을 할당하는 것을 의미한다. 도 17b를 참조하면, 결정부(120)는, 제 1 규칙에 따라, 도 17a에 도시된 영역(1712) 및 영역(1713)에 포함된 픽셀들에는 컬러를 설정하고, 영역(1711)에 포함된 픽셀들에는 컬러를 설정하지 않는 것으로 결정한다.
다른 예로서, 결정부(120)는 제 2 규칙에 기초하여 픽셀들 각각에 컬러를 설정할지 여부를 결정할 수 있다. 여기에서, 제 2 규칙은 주회 횟수가 홀수인 값을 갖는 픽셀들에 컬러 값을 할당하는 것을 의미한다. 여기에서, 홀수는 픽셀의 주회 횟수의 절대값이 홀수인 경우를 의미한다. 예를 들어, 주회 횟수가 +3인 경우도 홀수로 판단되고, 주회 횟수가 -3인 경우도 홀수로 판단된다. 또한, 주회 횟수가 0인 경우는 짝수로 판단된다. 도 17c를 참조하면, 결정부(120)는, 제 2 규칙에 따라, 도 17a에 도시된 영역(1712)에 포함된 픽셀들에는 컬러를 설정하고, 영역(1711) 및 영역(1713)에 포함된 픽셀들에는 컬러를 설정하지 않는 것으로 결정한다.
결정부(120)는 컬러를 설정하기로 결정한 픽셀들에 대한 정보를 프래그먼트 쉐이더(2731)로 전송하고, 프래그먼트 쉐이더(2731)는 결정부(120)가 컬러를 설정하기로 결정한 픽셀들에 컬러 값을 할당한다.
상술한 바에 따르면, 렌더링 장치(100)는 프레임에 포함된 픽셀들 중에서 경로가 통과하는 타일들에 대해서만 제 2 주회 횟수를 연산함으로써, 렌더링 장치(100)의 연산 속도가 향상될 수 있다.
또한, 렌더링 장치(100)는 스텐실 버퍼의 사용 없이 픽셀들 각각의 주회 횟수를 연산할 수 있는바, 스텐실 버퍼를 사용함으로써 메모리 입출력이 과도하게 발생되는 문제와 중복된 메모리 입출력이 발생되는 문제가 해소된다.
또한, 렌더링 장치(100)는 프레임에 포함된 픽셀들 각각에 대하여 병렬적으로 주회 횟수를 생성함으로써, 고속으로 경로 렌더링을 수행할 수 있으며, 빠른 시간 내에 고해상도의 렌더링을 수행할 수 있다.
도 18은 일 실시예에 따른 렌더링 장치의 다른 예를 도시한 구성도이다.
도 18을 참조하면, 렌더링 장치(100)는 연산부(110) 및 결정부(120)뿐 만 아니라 분할부(130)를 더 포함한다.
연산부(110) 및 결정부(120)의 동작하는 일 예는 도 1 내지 도 17을 참조하여 상술한 바와 같다. 따라서, 이하에서는 구체적인 설명을 생략한다.
분할부(130)는 경로가 비단조 곡선(non-monotonic curve)인 경우에 비단조 곡선을 복수의 단조 곡선들(monotonic curves)로 분할한다. 예를 들어, 분할부(130)는 드 카스텔죠(de casteljau) 알고리즘에 기초하여 비단조 곡선을 단조 곡선들로 분할할 수 있다. 경로 데이터에 비단조 곡선에 대한 정보가 포함되어 있는 경우, 분할부(130)는 비단조 곡선에 대한 정보를 복수의 단조 곡선들에 대한 정보로 변경한다. 그리고, 분할부(130)는 복수의 단조 곡선들에 대한 정보를 연산부(110)로 전송하고, 연산부(110)는 프레임에 포함된 타일들 중에서 단조 곡선들이 통과하는 타일을 선택하고, 프레임에 포함된 타일들 각각의 제 1 주회 횟수(WNinit)를 설정한다.
이하, 도 19a 및 도 19b를 참조하여, 분할부(130)가 비단조 곡선을 복수의 단조 곡선들로 분할하는 일 예를 설명한다.
도 19a 및 도 19b는 일 실시예에 따른 분할부가 동작하는 일 예를 설명하기 위한 도면들이다.
도 19a에는 비단조 곡선(1910)이 도시되어 있다. 도 5 내지 도 17c를 참조하여 상술된 직선 경로는 양의 기울기 값 또는 음의 기울기 값을 갖는다. 만약, 도 5 내지 도 17c를 참조하여 상술된 경로가 2차원 좌표 평면 위에 존재한다고 가정하면, 경로의 x 좌표 성분이 증가할때 경로의 y 좌표 성분이 항상 증가하거나 항상 감소한다. 그러나, 도 19a에 도시된 비단조 곡선(1910)은 비단조 곡선(1910)의 x 좌표 성분이 증가할 때 비단조 곡선(1910)의 y 좌표 성분이 항상 증가하거나 항상 감소하지 않을 수 있다. 따라서, 경로 데이터에 비단조 곡선(1910)에 대한 정보가 포함되어 있는 경우, 연산부(110)는 프레임에 포함된 타일들 각각의 제 1 주회 횟수(WNinit) 또는 제 2 주회 횟수(WN)를 정확하게 연산할 수 없다.
도 19b에는 2개의 단조 곡선들(1911, 1912)이 도시되어 있다. 도 19b에 도시된 단조 곡선들(1911, 1912)은 도 19a에 도시된 비단조 곡선(1910)이 분할된 곡선들이다. 단조 곡선들(1911, 1912)이 2차원 좌표 평면 위에 존재한다고 가정하면, 단조 곡선(1911)의 x 좌표 성분이 증가할 때 단조 곡선(1911)의 y 좌표 성분이 항상 증가한다. 또한, 단조 곡선(1912)의 x 좌표 성분이 증가할 때 단조 곡선(1912)의 y 좌표 성분이 항상 감소한다. 다시 말해, 단조 곡선(1911 또는 1912)은 x 좌표 성분이 증가할 때 경로의 y 좌표 성분이 항상 증가하거나 항상 감소한다. 따라서, 경로 데이터에 단조 곡선(1911 또는 1912)에 대한 정보가 포함되어 있는 경우, 연산부(110)는 프레임에 포함된 타일들 각각의 제 1 주회 횟수(WNinit) 또는 제 2 주회 횟수(WN)를 정확하게 연산할 수 있다.
분할부(130)는 경로 데이터에 비단조 곡선(1910)에 대한 정보가 포함되어 있는 경우, 비단조 곡선(1910)을 두 개 이상의 단조 곡선들(1911, 1912)로 분할한다. 다시 말해, 분할부(130)는 경로 데이터에 포함된 비단조 곡선(1910)에 대한 정보를 두 개 이상의 단조 곡선들(1911, 1912)에 대한 정보로 변환한다. 따라서, 연산부(110) 및 결정부(120)는 경로 데이터에 비단조 곡선(1910)에 대한 정보가 포함되어 있는 경우에도, 도 5 내지 도 17c를 참조하여 상술한 동작을 수행할 수 있다.
예를 들어, 분할부(130)는 드 카스텔죠(de casteljau) 알고리즘에 기초하여 비단조 곡선(1910)을 단조 곡선들(1911, 1912)로 분할할 수 있다. 여기에서, 드 카스텔죠 알고리즘은 하나의 베지어 곡선(Bezier curve)을 두 개 이상의 베지어 곡선들로 분할하는데 이용되는 알고리즘을 의미한다. 드 카스텔죠 알고리즘은 당해 기술 분야에서의 일반적인 지식을 가진 자에게 자명하므로, 이에 대한 구체적인 설명은 생략한다.
이하, 도 20 내지 도 23b를 참조하여, 경로 데이터에 비단조 곡선에 대한 정보가 포함되어 있는 경우, 렌더링 장치(100)가 동작하는 일 예를 설명한다.
도 20은 일 실시예에 따른 경로 데이터에 포함된 비단조 곡선의 일 예를 도시한 도면이다.
도 20을 참조하면, 프레임(2010)은 6*6 개의 타일들을 포함하고, 비단조 곡선(2020)은 3개의 정점들(P0, Pex, P2)을 포함하도록 도시되어 있다. 이때, 비단조 곡선(2020)은 정점(P0)을 시작 정점으로 하여 정점(Pex)을 지나가고 정점(P2)을 종료 정점으로 하는 곡선으로 가정한다. 분할부(130)는 비단조 곡선(2020)을 복수의 단조 곡선들로 분할한다. 예를 들어, 분할부(130)는 비단조 곡선(2020)을 정점(P0)으로부터 정점(Pex)까지의 제 1 단조 곡선(2031)과 정점(Pex)으로부터 정점(P2)까지의 제 2 단조 곡선(2032)으로 분할 할 수 있다. 이때, 정점(Pex)은 비단조 곡선(2020)의 기울기가 양(+)에서 음(-)으로 변하는 지점을 의미한다.
분할부(130)는 비단조 곡선에 포함된 정점들 중에서 비단조 곡선의 기울기가 양(+)에서 음(-)으로 또는 음(-)에서 양(+)으로 변경되는 정점을 선택하고, 선택된 정점을 기준으로 비단조 곡선을 분할할 수 있다. 이에 따라, 비단조 곡선은 두 개 이상의 단조 곡선들로 분할될 수 있다.
한편, 경로 데이터에는 비단조 곡선(2020)의 시작 정점(P0)과 종료 정점(P2)에 대한 정보 및 시작 정점(P0)으로부터 종료 정점(P2)까지 곡선을 그릴 것을 의미하는 커맨드가 포함될 수 있다. 그러나, 경로 데이터에 정점(P2)으로부터 정점(P0)까지 경로(예를 들어, 직선)(2040)를 그릴 것을 의미하는 커맨드가 명시적으로 포함되어 있지 않더라도, 정점(P2)으로부터 정점(P0)까지 경로(2040)가 자동으로 추가될 수 있다. 따라서, 경로 데이터에 비단조 곡선(2020)을 나타내는 정보가 포함된 경우, 프레임(2010)에는 비단조 곡선(2020)과 정점(P2)으로부터 정점(P0)까지 경로(2040)로 구성되는 객체가 그려질 수 있다.
따라서, 연산부(110)는, 도 6a 내지 도 13을 참조하여 상술한 방법에 따라, 프레임(2010)에 포함된 타일들 각각에 제 1 주회 횟수(WNinit)를 설정할 수 있다. 그리고, 연산부(110)는, 도 16a 내지 도 16c를 참조하여 상술한 방법에 따라, 단조 곡선들(2031, 2032) 및 경로(2040) 중 적어도 하나가 통과하는 타일들 각각의 제 2 주회 횟수(WN)를 연산할 수 있다. 그리고, 결정부(120)는, 도 17a 내지 도 17c를 참조하여 상술한 방법에 따라, 프레임에 포함된 픽셀들 각각에 대하여 쉐이딩의 수행 여부를 결정할 수 있다.
이하, 도 21a 내지 도 23b를 참조하여, 연산부(110)가 도 20에 도시된 경로들(제 1 단조 곡선(2031), 제 2 단조 곡선(2032) 및 정점(P2)으로부터 정점(P0)까지 경로(2040))를 이용하여 프레임에 포함된 타일들 각각에 제 1 주회 횟수(WNinit)를 설정하는 일 예를 설명한다. 구체적으로, 도 21a 및 도 21b에서는 연산부(110)가 제 1 단조 곡선(2031)을 이용하여 소정의 타일들의 초기 주회 횟수를 제 1 초기 값(WNinit _1)으로 갱신하는 일 예를 설명한다. 도 22a 및 도 22b에서는 연산부(110)가 제 2 단조 곡선(2032)을 이용하여 소정의 타일들의 제 1 초기 값(WNinit _1)을 제 2 초기 값(WNinit _2)으로 갱신하는 일 예를 설명한다. 도 23a 및 도 23b에서는 연산부(110)가 정점(P2)으로부터 정점(P0)까지 경로(2040)를 이용하여 소정의 타일들의 제 2 초기 값(WNinit _2)을 제 3 초기 값(WNinit _3)으로 갱신하는 일 예를 설명한다.
연산부(110)는 제 3 초기 값(WNinit _3)을 프레임에 포함된 타일들의 제 1 주회 횟수(WNinit)로 결정한다. 한편, 프레임에 포함된 모든 타일들에는 초기 주회 횟수(예를 들어, 0)가 할당되어 있음은 도 5를 참조하여 상술한 바와 같다.
도 21a에는 제 1 단조 곡선(2031)이 도시되어 있다. 여기에서, 제 1 단조 곡선(2031)은 정점(P0)으로부터 정점(Pex)까지 연결된 곡선 경로이다. 따라서, 제 1 단조 곡선(2031)은 반시계 방향으로 진행하는 경로임을 알 수 있다.
연산부(110)는 프레임에 포함된 타일들 중에서 제 1 단조 곡선(2031)이 통과하는 타일들(2130)을 선택한다. 이때, 연산부(110)가 타일들(2130)을 선택하는 방법은 도 7a 내지 도 7e를 참조하여 상술한 바와 같다. 그리고, 연산부(110)는, 선택된 타일들(2130) 별로, 타일에 제 1 단조 곡선(2031)이 통과한다는 정보를 'Edge_List'로 생성하고, 이를 로컬 메모리(150)에 저장한다. 도 21b에 도시된 타일들(2130)에 표시된 'c0'는 타일들(2130) 각각의 Edge_List에 포함된 정보를 의미한다. 다시 말해, 'c0'가 표시된 타일은 제 1 단조 곡선(2031)이 지나가는 타일을 의미한다.
그리고, 연산부(110)는 선택된 타일들(2130)의 일 측면에 위치하는 타일들(2141)의 초기 주회 횟수를 제 1 초기 값(WNinit _1)으로 갱신한다. 예를 들어, 연산부(110)는 선택된 타일들(2130)의 좌측 방향의 타일들(2141) 각각의 초기 주회 횟수를 제 1 초기 값(WNinit _1)으로 갱신할 수 있다. 이때, 연산부(110)가 타일들(2141) 각각의 초기 주회 횟수를 제 1 초기 값(WNinit _1)으로 갱신하는 방법은 도 9a 내지 도 9c를 참조하여 상술한 바와 같다. 구체적으로, 제 1 단조 곡선(2031)이 반시계 방향으로 타일들(2130)을 통과하므로, 연산부(110)는 타일들(2141) 각각의 초기 주회 횟수에 1을 감산함으로써 제 1 초기 값(WNinit _1)을 획득한다. 한편, 정점(P0) 및 정점(P2)의 좌측에 존재하는 타일들(2142, 2143)의 제 1 초기 값(WNinit _1) 갱신은 앞에서 설명한 바와 같이 보류된다. 따라서, 프레임에 포함된 타일들 중에서 타일들(2141)을 제외한 타일들은 초기 주회 횟수가 그대로 제 1 초기 값(WNinit _1)으로 결정된다. 그리고, 연산부(110)는 제 1 초기 값(WNinit _1)을 각각의 타일 별로 로컬 메모리(150)에 저장할 수 있다.
도 22a에는 제 2 단조 곡선(2032)이 도시되어 있다. 여기에서, 제 2 단조 곡선(2032)은 정점(Pex)으로부터 정점(P2)까지 연결된 곡선 경로이다. 따라서, 제 2 단조 곡선(2032)은 시계 방향으로 진행하는 경로임을 알 수 있다.
연산부(110)는 프레임에 포함된 타일들 중에서 제 2 단조 곡선(2032)이 통과하는 타일들(2230)을 선택한다. 이때, 연산부(110)가 타일들(2230)을 선택하는 방법은 도 7a 내지 도 7e를 참조하여 상술한 바와 같다. 그리고, 연산부(110)는, 선택된 타일들(2230) 별로, 타일에 제 2 단조 곡선(2032)이 통과한다는 정보를 'Edge_List'로 생성하고, 이를 로컬 메모리(150)에 저장한다. 만약, 도 21a를 참조하여 상술한 바와 같이 Edge_List가 이미 생성된 타일의 경우에는, 기 생성된 Edge_List에 제 2 단조 곡선(2032)이 통과한다는 정보를 추가하여 저장한다. 도 22b에서 'c0, c1'이 표시된 타일은 제 1 단조 곡선(2031)이 지나가는 타일이면서, 제 2 단조 곡선(2032)이 지나가는 타일을 의미한다. 또한, 'c0'가 표시된 타일은 제 1 단조 곡선(2031)이 지나가는 타일을 의미한다. 또한, 'c1'이 표시된 타일은 제 2 단조 곡선(2032)이 지나가는 타일을 의미한다.
그리고, 연산부(110)는 선택된 타일들(2230)의 일 측면에 위치하는 타일들(2240) 각각의 제 1 초기 값(WNinit _1)을 제 2 초기 값(WNinit _2)으로 갱신한다. 다만, 제 2 단조 곡선(2032)은 타일들(2230)을 수평으로 통과한다. 따라서, 도 12를 참조하여 상술한 바와 같이, 연산부(110)는 타일들(2240)의 제 2 초기 값(WNinit _2) 설정을 보류하고, 제 2 단조 곡선(2032) 및 정점(P2)으로부터 정점(P0)까지의 경로가 연결된 단일 경로가 타일들(2230)을 통과하는 형태에 따라 타일들(2240) 각각에 제 3 초기 값(WNinit _3)을 부여한다.
도 23a에는 정점(P2)으로부터 정점(P0)까지의 경로(2040)가 도시되어 있다. 여기에서, 정점(P2)으로부터 정점(P0)까지의 경로(2040)는 시계 방향으로 진행하는 경로임을 알 수 있다.
연산부(110)는 프레임에 포함된 타일들 중에서 경로(2040)가 통과하는 타일들(2330)을 선택한다. 이때, 연산부(110)가 타일들(2230)을 선택하는 방법은 도 7a 내지 도 7e를 참조하여 상술한 바와 같다. 그리고, 연산부(110)는, 선택된 타일들(2330) 별로, 타일에 경로(2040)가 통과한다는 정보를 'Edge_List'로 생성하고, 이를 로컬 메모리(150)에 저장한다. 만약, 도 22a를 참조하여 상술한 바와 같이 Edge_List가 이미 생성된 타일의 경우에는, 기 생성된 Edge_List에 경로(2320)가 통과한다는 정보를 추가하여 저장한다. 도 23b에서 'c0, e2'가 표시된 타일은 제 1 단조 곡선(2031)이 지나가는 타일이면서, 경로(2040)가 지나가는 타일을 의미한다. 또한, 'c0'가 표시된 타일은 제 1 단조 곡선(2031)이 지나가는 타일을 의미한다. 또한, 'c1, e2'가 표시된 타일은 제 2 단조 곡선(2032)이 지나가는 타일이면서, 경로(2040)가 지나가는 타일을 의미한다. 또한, 'c0, c1, e2'가 표시된 타일은 제 1 단조 곡선(2031)이 지나가는 타일이면서, 제 2 단조 곡선(2032)이 지나가는 타일이면서, 경로(2040)가 지나가는 타일을 의미한다.
그리고, 연산부(110)는 선택된 타일들(2330)의 일 측면에 위치하는 타일들(2341) 각각의 제 2 초기 값(WNinit _2)을 제 3 초기 값(WNinit _3)으로 갱신한다. 예를 들어, 연산부(110)는 선택된 타일들(2330)의 좌측 방향의 타일들(2341) 각각의 제 2 초기 값(WNinit _2)을 제 3 초기 값(WNinit _3)으로 갱신할 수 있다. 이때, 연산부(110)가 타일들(2341) 각각에 제 3 초기 값(WNinit _3)을 부여하는 방법은 도 13a 내지 도 13b를 참조하여 상술한 바와 같다. 다시 말해, 경로(2040)가 시계 방향으로 타일들(2330)을 통과하므로, 연산부(110)는 타일들(2341) 각각의 제 2 초기 값(WNinit _2)에 1을 증산함으로써 제 3 초기 값(WNinit _3)을 획득한다.
한편, 경로(2040)의 시작 정점(P2)을 포함하는 타일의 좌측 방향에 위치한 타일들(2342)의 경우, 연산부(110)는 제 2 단조 곡선(2032) 및 경로(2040)가 타일을 통과하는 형태를 고려하여, 제 3 초기 값(WNinit _3)을 부여한다. 이때, 연산부(110)가 타일들(2342) 각각에 제 3 초기 값(WNinit _3)을 부여하는 방법은 도 11a 내지 도 11c를 참조하여 상술한 바와 같다. 구체적으로, 도 21a, 도 22a 및 도 23a를 참조하면, 제 1 단조 곡선(2031), 제 2 단조 곡선(2032) 및 경로(2040)는 타일(2333)과 타일(2331)이 합쳐진 타일의 일 경계선으로 입장하였다가 퇴장하므로, 연산부(110)는 타일들(2342) 각각의 초기 주회 횟수를 유지함으로써 제 3 초기 값(WNinit _3)을 결정한다. 그리고, 연산부(110)는 제 3 초기 값(WNinit _3)을 각각의 타일 별로 로컬 메모리(150)에 저장할 수 있다.
또한, 경로(2040)의 종료 정점(P0)을 포함하는 타일의 좌측 방향에 위치한 타일(2343)의 경우, 연산부(110)는 경로(2040) 및 제 1 단조 곡선(2031)이 타일을 통과하는 형태를 고려하여, 제 3 초기 값(WNinit _3)을 부여한다. 이때, 연산부(110)가 타일(2343)에 제 3 초기 값(WNinit _3)을 부여하는 방법은 도 11a 내지 도 11c를 참조하여 상술한 바와 같다. 구체적으로, 경로(2040)와 제 1 단조 곡선(2031)가 결합된 단일 경로가 타일(2332)의 단일 면으로 입장하였다가 퇴장하므로, 연산부(110)는 타일(2343)에 0을 제 3 초기 값(WNinit _3)으로 부여한다. 그리고, 연산부(110)는 타일(2343)의 제 3 초기 값(WNinit _3)을 로컬 메모리(150)에 저장할 수 있다.
한편, 프레임에 포함된 타일들 중에서 타일들(2341, 2342, 2343)을 제외한 타일들은 제 2 초기 값(WNinit _2)이 그대로 제 3 초기 값(WNinit _3)으로 결정된다. 그리고, 연산부(110)는 제 3 초기 값(WNinit _3)을 각각의 타일 별로 로컬 메모리(150)에 저장할 수 있다.
도 23b에는 제 3 초기 값(WNinit _3)이 도시되어 있다. 도 23b에 도시된 타일들(2351, 2352)마다 표시된 '0' 또는 '1'은 타일들(2351, 2352) 각각의 제 3 초기 값(WNinit _3)을 의미한다. 또한, 도 23b에는 도시되지 않았으나, 프레임에 포함된 타일들 중에서 타일들(2351, 2352)을 제외한 타일들의 제 3 초기 값(WNinit _3)은 초기 주회 횟수와 동일한 '0'이다.
연산부(110)는 제 3 초기 값(WNinit _3)을 제 1 주회 횟수(WNinit)로 결정한다. 도 21a 내지 도 23b를 참조하여 상술한 바와 같이, 연산부(110)는 초기 주회 횟수(예를 들어, 0)가 갱신된 제 3 초기 값(WNinit _3)을 제 1 주회 횟수(WNinit)로 결정한다.
도 19a 내지 도 23b를 참조하여 상술한 바에 따르면, 연산부(110)는 경로 데이터에 비단조 곡선에 대한 정보가 포함되어 있더라도 모든 타일들의 제 1 주회 횟수를 설정할 수 있다. 또한, 도 16을 참조하여 상술한 바와 같이, 경로가 통과하는 타일의 픽셀들에 해당되는 주회 횟수는 제 1 주회 횟수에 기초하여 연산될 수 있다. 이렇게 연산된 픽셀들의 주회 횟수를 이용하여, 결정부(120)는 프레임에 포함된 픽셀들 각각에 대한 쉐이딩의 수행 여부를 결정할 수 있다. 따라서, 렌더링 장치(100)는 비단조 곡선의 경우에도 정확하게 경로 렌더링을 수행할 수 있다.
도 24a 및 도 24b는 일 실시예에 따른 분할부가 원형 경로를 큐빅(cubic) 곡선으로 변환하는 일 예를 설명하기 위한 도면들이다.
도 24a에는 타원형 경로(2410)가 도시되어 있고, 도 24b에는 큐빅 곡선(또는, 큐빅 베지어 곡선(cubic bezier curve))(2420)이 도시되어 있다. 렌더링 장치(100)가 수신하는 경로 데이터에 타원형 경로(2410)에 대한 정보가 포함되어 있는 경우, 분할부(130)는 타원형 경로(2410)를 큐빅 곡선(2420)으로 변환할 수 있다. 그리고, 분할부(130)는 큐빅 곡선(2420)을 복수의 단조 곡선으로 분할할 수 있다. 따라서, 렌더링 장치(100)는 타원형 경로(2410)의 경우에도 정확하게 경로 렌더링을 수행할 수 있다.
이상에서는 설명의 편의를 위하여, 타원형 경로(2410)를 일 예로서 설명하였으나, 분할부(130)는 원형 경로를 큐빅 곡선으로 변환할 수 있다.
도 25는 일 실시예에 따른 렌더링 장치의 또 다른 예를 도시한 구성도이다.
도 25를 참조하면, 렌더링 장치(100)는 연산부(110) 및 결정부(120)뿐 만 아니라 생성부(140) 및 로컬 메모리(150)를 더 포함한다.
연산부(110) 및 결정부(120)의 동작하는 일 예는 도 1 내지 도 17을 참조하여 상술한 바와 같다. 따라서, 이하에서는 구체적인 설명을 생략한다. 또한, 도 25에 도시된 렌더링 장치(100)에 분할부(130)가 더 포함될 수 있음은 도 18 내지 도 24b를 참조하여 상술한 바와 같다.
도 1 내지 도 24b를 참조하여 상술한 바에 따르면, 픽셀의 주회 횟수는 연산부(110)에 의하여 연산된다. 그러나, 도 25에 도시된 렌더링 장치(100)에 따르면, 픽셀의 주회 횟수는 생성부(140)에 의하여 연산되고, 연산된 주회 횟수는 결정부(120)로 전송된다. 구체적으로, 결정부(120)가 생성부(140)에게 제 1 픽셀의 주회 횟수를 연산해줄 것을 요청하면, 생성부(140)는 로컬 메모리(150)로부터 제 1 픽셀이 포함된 제 1 타일의 제 1 주회 횟수 (WNinit) 및 제 1 타일을 통과하는 경로에 대한 정보(경로의 위치 및 진행 방향에 대한 정보)를 독출한다. 그리고, 생성부(140)는 독출된 정보를 이용하여 제 1 픽셀의 주회 횟수(WN)를 연산한다. 이때, 생성부(140)가 제 1 픽셀의 주회 횟수(WN)를 연산하는 방법은 도 16a 내지 도 16c를 참조하여 상술한 방법과 동일하다.
그리고, 생성부(140)는 제 1 픽셀의 주회 횟수(WN)를 결정부(120)로 전송한다. 결정부(120)는 연산부(110)로부터 전송된 타일의 제 1 주회 횟수(WNinit) 및 생성부(140)로부터 전송된 픽셀의 주회 횟수(WN)에 기초하여 픽셀에 쉐이딩을 수행할지 여부를 결정한다.
도 26은 일 실시예에 따른 주회 횟수 생성 장치의 일 예를 설명하기 위한 구성도이다.
도 26을 참조하면, 렌더링 장치(100)는 연산부(110), 로컬 메모리(150) 및 결정부(120)를 포함한다. 그리고, 렌더링 장치(100)의 외부에는 주회 횟수 생성 장치(2600)가 위치한다.
렌더링 장치(100)에 포함된 연산부(110), 로컬 메모리(150) 및 결정부(120)가 동작하는 일 예는 도 1 내지 도 25를 참조하여 상술한 바와 같다. 따라서, 이하에서는 구체적인 설명을 생략한다. 또한, 도 26에 도시된 렌더링 장치(100)에 분할부(130)가 더 포함될 수 있음은 도 18 내지 도 25를 참조하여 상술한 바와 같다.
주회 횟수 생성 장치(2600)는 렌더링 장치(100)와는 별도의 독립된 장치로 존재한다. 여기에서, 주회 횟수 생성 장치(2600)가 동작하는 일 예는 도 25의 생성부(140)가 동작하는 일 예와 동일하다.
도 27a 및 도 27b는 일 실시예에 따른 경로를 렌더링하는 방법이 GPU(Graphics Processing Unit)에서 구현되는 예들을 설명하기 위한 도면들이다.
도 27a를 참조하면, GPU(2700)에서 실행되는 경로를 렌더링하는 방법은 도 1, 도 18 및 도 25에 도시된 렌더링 장치(100)에서 시계열적으로 처리되는 단계들을 포함한다. 따라서, 이하에서 생략된 내용이라 하더라도 도 1, 도 18 및 도 25에 도시된 렌더링 장치(100)에 관하여 이상에서 기술된 내용은 도 27a를 참조하여 후술할 내용에도 적용됨을 알 수 있다.
도 27a를 참조하면, GPU(2700)는 글로벌 메모리(2710), 버텍스 쉐이더(2720), 픽셀 쉐이더(2730) 및 프레임 버퍼(2740)를 포함한다. 여기에서, 버텍스 쉐이더(2720)는 도 1, 도 18 및 도 25에 도시된 렌더링 장치(100)와 동일한 기능을 수행한다.
도 27b를 참조하면, GPU(2701)와는 별도의 독립된 장치로서 주회 횟수 생성 장치(2750)가 도시되어 있다. 다시 말해, 주회 횟수 생성 장치(2750)는 GPU(2700)의 내부에 포함될 수도 있고, GPU(2701)의 외부에 독립적으로 위치할 수도 있다.
도 27a 및 도 27b에 도시된 픽셀 쉐이더(2730)는 프레임에 포함된 픽셀들 각각에 대하여 쉐이딩을 수행한다. 먼저, 픽셀 쉐이더(2730)(또는, 픽셀 쉐이더(2730)에 포함된 프래그먼트 쉐이더(2731))는 픽셀들 각각에 컬러 값을 설정한다. 이때, 프래그먼트 쉐이더(2731)는 기 저장된 텍스쳐(2732)를 이용하여 픽셀들 각각에 컬러 값을 설정할 수 있다. 그 후에, 픽셀 쉐이더(2730)는 픽셀들 각각에 후처리 작업을 수행한다. 여기에서, 후처리 작업은 블렌딩(blending) 작업 또는 안티에일리어싱 (antialiasing) 작업을 포함한다. 그 후에, 픽셀 쉐이더(2730)는 픽셀 처리가 수행된 결과를 프레임 버퍼(2740)에 전송하고, 프레임 버퍼(2740)는 픽셀 쉐이더(2730)로부터 전송된 정보를 저장한다.
이하, 도 28 내지 도 31을 참조하여 버텍스 쉐이더(2720)가 동작하는 일 예를 설명한다.
도 28은 일 실시예에 따른 버텍스 쉐이더가 동작하는 일 예를 설명하기 위한 도면이다.
버텍스 쉐이더(2720)는 글로벌 메모리(2710)로부터 경로 데이터(2810)를 수신한다. 그리고, 버텍스 쉐이더(2720)는 경로 데이터(2810)에 포함된 각각의 커맨드에 대하여 타일 비닝을 수행한다(2820). 여기에서, 타일 비닝은 프레임에 포함된 타일들 각각에 대하여 제 1 주회 횟수를 설정하는 과정을 의미한다. 다시 말해, 도 6a 내지 도 13b를 참조하여 상술한 바와 같이, 버텍스 쉐이더(2720)는 프레임에 포함된 모든 타일들 각각에 대하여 제 1 주회 횟수를 설정한다. 버텍스 쉐이더(2720)에 의하여 타일 비닝이 수행됨에 따라 생성된 정보(예를 들어, 제 1 주회 횟수, 타일을 통과하는 경로의 위치 및 방향)를 의미하는 타일 빈(2840)은 로컬 메모리(2723)에 저장된다.
이하, 도 29를 참조하여 버텍스 쉐이더(2720)가 타일 비닝을 수행하는 일 예를 설명한다.
도 29는 일 실시예에 따른 버텍스 쉐이더가 타일 비닝을 수행하는 일 예를 설명하기 위한 도면이다.
버텍스 쉐이더(2720)는 경로 데이터(2810)로부터 커맨드를 획득한다(2910). 그리고, 버텍스 쉐이더(2720)는 프레임에 포함된 타일들 중에서 커맨드에 의하여 통과되는 타일들을 찾는다(2920). 다시 말해, 버텍스 쉐이더(2720)는 프레임에 포함된 타일들 중에서 경로가 통과하는 타일들(이하, '회색 타일들(2930)'이라고 함)을 선택한다. 버텍스 쉐이더(2720)는 회색 타일들(2930) 각각의 'Edge_List'를 업데이트한다(2940). 이때, 회색 타일들(2930) 각각의 'Edge_List'는 로컬 메모리(2723)에 저장될 수 있다(2960).
버텍스 쉐이더(2720)는 프레임에 포함된 타일들 중에서 회색 타일들(2930)의 일 측면에 위치한 타일들(이하, '백색 타일들'이라고 함) 각각에 제 1 주회 횟수(WNinit)를 설정한다(2950).
그 후에, 버텍스 쉐이더(2720)는 경로 데이터에 타일 비닝에 이용되지 않은 커맨드가 존재하는지를 판단한다(2970). 타일 비닝에 이용되지 않은 커맨드가 존재하면 2910 단계로 진행하고, 그렇지 않다면 도 28의 2830 단계로 진행한다.
다시 도 28을 참조하면, 버텍스 쉐이더(2720)는 프레임에 포함된 타일들 중 어느 하나를 획득하고(2830), 획득된 타일에 포함된 픽셀들 각각의 주회 횟수를 연산한다(2850). 이때, 버텍스 쉐이더(2720)는 로컬 메모리(2723)에 저장된 타일 빈(2840)을 이용하여 픽셀의 주회 횟수를 연산할 수 있다.
그 후에, 버텍스 쉐이더(2720)는 주회 횟수의 연산 결과에 기초하여 픽셀의 쉐이딩을 수행할지 여부를 결정한다. 예를 들어, 버텍스 쉐이더(2720)는 주회 횟수의 연산 결과에 기초하여 픽셀의 컬러링을 수행할지 여부를 결정할 수 있다(2860).
이하, 도 30을 참조하여, 도 28에 도시된 2830 단계 내지 2860 단계를 상세하게 설명한다.
도 30은 일 실시예에 따른 버텍스 쉐이더가 픽셀들의 주회 횟수를 연산하고, 픽셀의 쉐이딩을 수행할지 여부를 결정하는 일 예를 설명하기 위한 도면이다.
버텍스 쉐이더(2720)는 프레임에 포함된 타일들 중 어느 하나를 획득하고(3010), 획득된 타일이 백색 타일인지 여부를 판단한다(3020). 만약, 획득된 타일이 백색 타일이면 3030 단계로 진행하고, 그렇지 않다면 3040 단계로 진행한다.
버텍스 쉐이더(2720)는 획득된 타일이 백색 타일인 경우, 설정된 제 1 주회 횟수(WNinit)를 백색 타일에 포함된 픽셀들 각각의 주회 횟수(WN)로 결정한다(3030).
회색 타일의 경우, 버텍스 쉐이더(2720)는 획득된 타일에 포함된 픽셀들 각각의 주회 횟수를 연산한다. 이때, 버텍스 쉐이더(2720)는 주회 횟수 생성 장치(2750)에게 픽셀의 주회 횟수를 연산할 것을 요청할 수 있다. 주회 횟수 생성 장치(2750)는 로컬 메모리(2723)에 저장된 'Edge_List'를 이용하여 타일에 포함된 픽셀들 각각의 주회 횟수를 연산할 수 있다. 여기에서, 주회 횟수 생성 장치(2750)가 픽셀의 주회 횟수를 연산하는 일 예는 도 16a 내지 도 16c를 참조하여 상술한 바와 같다.
버텍스 쉐이더(2720)는 제 1 규칙에 기초하여 픽셀들 각각에 대하여 쉐이딩을 수행할지 여부를 결정한다(3060). 여기에서, 제 1 규칙은 주회 횟수가 0이 아닌 값을 갖는 픽셀들에 컬러 값을 할당하는 규칙(non-zero rule)을 의미한다. 버텍스 쉐이더(2720)가 제 1 규칙에 기초하여 픽셀에 컬러를 설정할지 여부를 결정하는 경우에는 3080 단계로 진행하고, 그렇지 않은 경우에는 3070 단계로 진행한다.
버텍스 쉐이더(2720)는 픽셀들 각각의 주회 횟수가 0이 아닌지 판단한다(3080). 버텍스 쉐이더(2720)는 0이 아닌 주회 횟수를 갖는 픽셀에 대해서는 픽셀 쉐이더(2730)에게 픽셀의 쉐이딩을 수행할 것을 지시한다(3095).
버텍스 쉐이더(2720)는 제 2 규칙에 기초하여 픽셀들 각각에 대하여 컬러를 쉐이딩을 수행할지 여부를 결정한다(3070). 여기에서, 제 2 규칙은 주회 횟수가 홀수인 값을 갖는 픽셀들에 컬러 값을 할당하는 규칙(even-odd rule)을 의미한다. 버텍스 쉐이더(2720)가 제 2 규칙에 기초하여 픽셀에 컬러를 설정할지 여부를 결정하는 경우에는 3090 단계로 진행하고, 그렇지 않은 경우에는 작업을 종료한다.
3060 단계 및 3070 단계를 참조하여 상술한 바와 같이, 버텍스 쉐이더(2720)은 제 1 규칙 또는 제 2 규칙에 기초하여 픽셀들에 컬러 값을 할당할 수 있으나, 이에 제한되지 않는다. 예를 들어, 버텍스 쉐이더(2720)는 제 1 규칙의 역 규칙(Inverse non-zero rule) 또는 제 2 규칙의 역 규칙(Inverse even-odd rule)에 기초하여 픽셀들에 컬러 값을 할당할 수도 있다.
버텍스 쉐이더(2720)는 픽셀들 각각의 주회 횟수가 홀수인지 판단한다(3090). 여기에서, 홀수는 픽셀의 주회 횟수의 절대값이 홀수인 경우를 의미한다. 예를 들어, 주회 횟수가 +3인 경우도 홀수로 판단되고, 주회 횟수가 -3인 경우도 홀수로 판단된다. 버텍스 쉐이더(2720)는 홀수인 주회 횟수를 갖는 픽셀에 대해서는 픽셀 쉐이더(2730)에게 픽셀의 쉐이딩을 수행할 것을 지시한다(3095).
다시 도 28을 참조하면, 버텍스 쉐이더(2720)는, 픽셀 쉐이더(2730)에게 픽셀의 쉐이딩을 수행할 것을 지시하기 이전에, 프레임에 포함된 타일들 중 픽셀들의 주회 횟수가 연산되지 않은 타일이 존재하는지를 판단한다(2870). 픽셀들의 주회 횟수가 연산되지 않은 타일이 존재하면 2830 단계로 진행하고, 그렇지 않다면 픽셀 쉐이더(2730)에게 픽셀의 쉐이딩을 수행할 것을 지시한다.
도 31은 일 실시예에 따른 픽셀의 주회 횟수를 연산하는 방법의 일 예를 나타내는 흐름도이다.
도 31을 참조하면, 픽셀의 주회 횟수를 연산하는 방법은 도 26 및 도 27b에 도시된 주회 횟수 생성 장치(2600, 2750)에서 시계열적으로 처리되는 단계들로 구성된다. 따라서, 이하에서 생략된 내용이라 하더라도 방법은 도 26 및 도 27b에 도시된 주회 횟수 생성 장치(2600, 2750)에 관하여 이상에서 기술된 내용은 도 31의 픽셀의 주회 횟수를 연산하는 방법에도 적용됨을 알 수 있다.
3110 단계에서, 주회 횟수 생성 장치(2600, 2750)는 그래픽 처리 장치로부터 경로에 대한 정보 및 프레임에 포함된 타일들 각각에 설정된 제 1 주회 횟수에 대한 정보를 수신한다.
3120 단계에서, 주회 횟수 생성 장치(2600, 2750)는 수신된 정보를 이용하여 프레임에 포함된 픽셀들 각각에 대응하는 주회 횟수를 연산한다.
3130 단계에서, 주회 횟수 생성 장치(2600, 2750)는 연산된 주회 횟수를 그래픽 처리 장치로 출력한다.
한편, 상술한 방법은 컴퓨터에서 실행될 수 있는 프로그램으로 작성 가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 또한, 상술한 방법에서 사용된 데이터의 구조는 컴퓨터로 읽을 수 있는 기록매체에 여러 수단을 통하여 기록될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 램, USB, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등)와 같은 저장매체를 포함한다.
도 1 내지 도 31을 참조하여 상술한 바에 따르면, 렌더링 장치는 프레임에 포함된 픽셀들 중에서, 경로가 통과하지 않는 각각의 타일에 속하는 모든 픽셀들에는 동일한 주회 횟수를 할당하고, 경로가 통과하는 타일들에 포함된 픽셀들에 대해서만 픽셀 별로 주회 횟수(winding number)를 연산함으로써, 렌더링 장치의 성능이 향상될 수 있다.
또한, 스텐실 버퍼의 사용 없이 경로 렌더링이 수행될 수 있는바, 스텐실 버퍼를 사용함으로써 메모리 입출력이 과도하게 발생되는 문제와 중복된 메모리 입출력이 발생되는 문제가 해소된다.
또한, 렌더링 장치는 프레임에 포함된 픽셀들 각각에 대하여 병렬적으로 주회 횟수를 생성함으로써, 고속으로 경로 렌더링이 수행될 수 있으며, 빠른 시간 내에 고해상도의 렌더링이 수행될 수 있다.
본 실시예와 관련된 기술 분야에서 통상의 지식을 가진 자는 상기된 기재의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 방법들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 전술한 설명이 아니라 청구항에 발명의 범위가 나타나 있으며, 청구항과 동등한 범위 내에 있는 모든 차이점은 발명의 범위에 포함된 것으로 해석되어야 할 것이다.
100: 렌더링 장치
110: 연산부
120: 결정부

Claims (38)

  1. 경로를 포함하는 객체를 렌더링하는 방법에 있어서,
    상기 경로에 포함된 정점(vertex)들에 대한 정보 및 상기 경로에 대응하는 커맨드를 포함하는 경로 데이터를 획득하는 단계;
    상기 경로 데이터에 기초하여 상기 객체가 프레임의 일 측에 편중되어 있는지 여부를 결정하는 단계;
    상기 객체가 상기 프레임의 일 측에 편중되어 있다고 판단되는 경우, 상기 프레임을 상기 객체가 포함되지 않은 제1 영역 및 상기 객체가 포함된 제2 영역으로 분할하는 단계;
    상기 제1 영역에 대응되는 타일들에 포함되는 픽셀들, 및 상기 제2 영역에 대응되는 타일들에 포함되는 픽셀들에 대해 다른 방식으로 최종 주회 횟수를 할당하는 단계;
    각 타일에 대해, 상기 할당된 최종 주회 횟수에 기초하여 쉐이딩(shading)의 수행 여부를 결정하는 단계; 및
    상기 결정의 결과에 기초하여 상기 프레임에 포함되는 픽셀들 각각에 대한 쉐이딩을 수행하는 단계를 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 제1 영역에 대응되는 타일들 각각에 포함되는 모든 픽셀들에 대해 동일한 최종 주회 횟수를 할당하는 단계를 더 포함하는 방법.
  3. 제 1 항에 있어서,
    상기 제2 영역에 대응되는 타일들 각각에 포함되는 픽셀들에 대해서는 각 픽셀의 위치 및 각 타일에 존재하는 경로의 진행 방향에 기초하여 상기 최종 주회 횟수를 할당하는 단계를 더 포함하는 방법.
  4. 제 1 항에 있어서,
    상기 경로 데이터에 기초하여 상기 제2 영역에 대응되는 타일들 각각의 제 1 주회 횟수를 설정하는 단계; 및
    상기 제 1 주회 횟수에 기초하여 상기 제2 영역에 대응되는 타일들 중 상기 경로가 통과하는 타일들 각각의 제 2 주회 횟수를 연산하는 단계를 더 포함하는 방법.
  5. 제 4 항에 있어서,
    상기 제2 영역에 대응되는 타일들 중 상기 경로가 통과하지 않는 타일들 각각의 최종 주회 횟수는 상기 제 1 주회 횟수에 대응하고, 상기 제2 영역에 대응되는 타일들 중 상기 경로가 통과하는 타일들 각각의 최종 주회 횟수는 상기 제 2 주회 횟수에 대응하는 방법.
  6. 제 4 항에 있어서,
    상기 제 1 주회 횟수를 설정하는 단계는
    상기 제2 영역에 대응되는 타일들 각각에 초기 주회 횟수를 할당하는 단계;
    상기 제2 영역에 대응되는 타일들 중에서 상기 경로가 통과하는 타일들을 선택하는 단계; 및
    상기 선택된 타일들에서 상기 경로가 통과하는 형태에 따라 상기 선택된 타일들의 일 측면에 위치하는 타일들의 상기 초기 주회 횟수를 갱신하는 단계;를 포함하는 방법.
  7. 제 6 항에 있어서,
    상기 선택된 타일들의 일 측면은 상기 선택된 타일들 각각의 위치와 상기 제2 영역 내에서의 상기 경로의 위치를 고려하여 결정되는 방법.
  8. 제 6 항에 있어서,
    상기 선택하는 단계는
    상기 제2 영역에 대응되는 타일들의 일 측면과 만나는 상기 경로 상의 적어도 하나의 지점을 결정하는 단계;
    상기 결정된 적어도 하나의 지점을 기준으로 상기 경로를 분할하는 단계; 및
    상기 제2 영역에 대응되는 타일들 중 상기 분할된 경로를 대각선으로 하는 사각형을 포함하는 타일들을 선택하는 단계;를 포함하는 방법.
  9. 제 6 항에 있어서,
    상기 갱신하는 단계는
    상기 경로가 상기 선택된 타일들 중 적어도 하나의 마주보는 두 경계선을 시계 방향으로 통과하는 경우에 상기 초기 주회 횟수에 소정의 값을 증산 또는 감산하고, 상기 경로가 상기 선택된 타일들 중 적어도 하나의 마주보는 두 경계선을 반시계 방향으로 통과하는 경우에 상기 초기 주회 횟수에 상기 소정의 값을 감산 또는 증산하는 방법.
  10. 제 4 항에 있어서,
    상기 제 2 주회 횟수를 연산하는 단계는
    상기 경로의 진행 방향을 고려하여 상기 경로가 통과하는 타일에 포함된 픽셀들 각각의 상기 제 2 주회 횟수를 연산하는 방법.
  11. 제 10 항에 있어서,
    상기 제 2 주회 횟수를 연산하는 단계는
    상기 경로가 통과하는 타일에 포함된 픽셀들 각각의 일 측면에 상기 경로가 위치하는지 여부를 확인하는 단계; 및
    상기 경로의 진행 방향이 시계 방향인 경우에 상기 제 1 주회 횟수에 소정의 값을 증산 또는 감산하고 상기 결정된 진행 방향이 반시계 방향인 경우에 상기 제 1 주회 횟수에 상기 소정의 값을 감산 또는 증산함으로써, 상기 최종 주회 횟수를 연산하는 단계;를 포함하는 방법.
  12. 제 1 항 내지 제 11 항 중 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
  13. 경로를 포함하는 객체를 렌더링하는 장치에 있어서,
    상기 경로에 포함된 정점(vertex)들에 대한 정보 및 상기 경로에 대응하는 커맨드를 포함하는 경로 데이터를 획득하고, 상기 경로 데이터에 기초하여 상기 객체가 프레임의 일 측에 편중되어 있는지 여부를 결정하며, 상기 객체가 상기 프레임의 일 측에 편중되어 있다고 판단되는 경우, 상기 프레임을 상기 객체가 포함되지 않은 제1 영역 및 상기 객체가 포함된 제2 영역으로 분할하며, 상기 제1 영역에 대응되는 타일들에 포함되는 픽셀들, 및 상기 제2 영역에 대응되는 타일들에 포함되는 픽셀들에 대해 다른 방식으로 최종 주회 횟수를 할당하는 연산부; 및
    각 타일에 대해, 상기 타일의 최종 주회 횟수에 기초하여 쉐이딩(shading)의 수행 여부를 결정하는 결정부;를 포함하는 장치.
  14. 제 13항에 있어서,
    상기 연산부는
    상기 제1 영역에 대응되는 타일들 각각에 포함되는 모든 픽셀들에 대해 동일한 최종 주회 횟수를 할당하는 장치.
  15. 제 13항에 있어서,
    상기 연산부는
    상기 제2 영역에 대응되는 타일들 각각에 포함되는 픽셀들에 대해서는 각 픽셀의 위치 및 각 타일에 존재하는 경로의 진행 방향에 기초하여 상기 최종 주회 횟수를 할당하는 장치.
  16. 제 13항에 있어서,
    상기 연산부는
    상기 경로 데이터에 기초하여 상기 제2 영역에 대응되는 타일들 각각의 제 1 주회 횟수를 설정하고,
    상기 제 1 주회 횟수에 기초하여 상기 제2 영역에 대응되는 타일들 중 상기 경로가 통과하는 타일들 각각의 제 2 주회 횟수를 연산하는 장치.
  17. 제 16 항에 있어서,
    상기 제2 영역에 대응되는 타일들 중 상기 경로가 통과하지 않는 타일들 각각의 최종 주회 횟수는 상기 제 1 주회 횟수에 대응하고, 상기 제2 영역에 대응되는 타일들 중 상기 경로가 통과하는 타일들 각각의 최종 주회 횟수는 상기 제 2 주회 횟수에 대응하는 장치.
  18. 제 16 항에 있어서,
    상기 연산부는
    상기 제2 영역에 대응되는 타일들 각각에 초기 주회 횟수를 할당하고,
    상기 제2 영역에 대응되는 타일들 중에서 상기 경로가 통과하는 타일들을 선택하고,
    상기 선택된 타일들에서 상기 경로가 통과하는 형태에 따라 상기 선택된 타일들의 일 측면에 위치하는 타일들의 상기 초기 주회 횟수를 갱신하는 장치.
  19. 제 18 항에 있어서,
    상기 선택된 타일들의 일 측면은 상기 선택된 타일들 각각의 위치와 상기 제2 영역 내에서의 상기 경로의 위치를 고려하여 결정되는 장치.
  20. 제 16 항에 있어서,
    상기 연산부는
    상기 경로의 진행 방향을 고려하여 상기 경로가 통과하는 타일에 포함된 픽셀들 각각의 상기 제 2 주회 횟수를 연산하는 장치.
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
KR1020150099232A 2014-08-11 2015-07-13 타일 기반 경로 렌더링을 수행하는 방법 및 장치. KR102423767B1 (ko)

Priority Applications (7)

Application Number Priority Date Filing Date Title
EP15180225.3A EP2985735B1 (en) 2014-08-11 2015-08-07 Method and apparatus for performing tile-based path rendering
JP2015158277A JP2016038917A (ja) 2014-08-11 2015-08-10 タイルに基づく経路レンダリングを行う方法及びその装置
US14/823,554 US9984497B2 (en) 2014-08-11 2015-08-11 Method and apparatus for performing tile-based path rendering
CN201510489741.5A CN105335994B (zh) 2014-08-11 2015-08-11 执行基于图块的路径渲染的方法和设备
US15/972,735 US10672184B2 (en) 2014-08-11 2018-05-07 Method and apparatus for performing tile-based path rendering
US16/857,942 US11074744B2 (en) 2014-08-11 2020-04-24 Method and apparatus for performing tile-based path rendering
US17/351,855 US11694393B2 (en) 2014-08-11 2021-06-18 Method and apparatus for performing tile-based path rendering

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020140103626 2014-08-11
KR20140103626 2014-08-11

Publications (2)

Publication Number Publication Date
KR20160019357A KR20160019357A (ko) 2016-02-19
KR102423767B1 true KR102423767B1 (ko) 2022-07-22

Family

ID=55448781

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150099232A KR102423767B1 (ko) 2014-08-11 2015-07-13 타일 기반 경로 렌더링을 수행하는 방법 및 장치.

Country Status (2)

Country Link
JP (1) JP2016038917A (ko)
KR (1) KR102423767B1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102618560B1 (ko) 2016-06-15 2023-12-27 삼성전자주식회사 경로 렌더링을 수행하는 방법 및 장치
KR102446865B1 (ko) * 2017-09-12 2022-09-23 삼성전자주식회사 경로 렌더링을 수행하는 그래픽 처리 장치 및 그래픽 처리 방법

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7408553B1 (en) 2005-12-15 2008-08-05 Nvidia Corporation Inside testing for paths
JP2010146255A (ja) * 2008-12-18 2010-07-01 Mitsubishi Electric Corp ベクトル図形描画装置
US20100265254A1 (en) 2009-04-17 2010-10-21 Arm Limited Graphics filled shape drawing
US20140043342A1 (en) 2012-08-09 2014-02-13 Qualcomm Incorporated Extending dx11 gpu for programmable vector graphics

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7408553B1 (en) 2005-12-15 2008-08-05 Nvidia Corporation Inside testing for paths
JP2010146255A (ja) * 2008-12-18 2010-07-01 Mitsubishi Electric Corp ベクトル図形描画装置
US20100265254A1 (en) 2009-04-17 2010-10-21 Arm Limited Graphics filled shape drawing
US20140043342A1 (en) 2012-08-09 2014-02-13 Qualcomm Incorporated Extending dx11 gpu for programmable vector graphics

Also Published As

Publication number Publication date
JP2016038917A (ja) 2016-03-22
KR20160019357A (ko) 2016-02-19

Similar Documents

Publication Publication Date Title
CN105335994B (zh) 执行基于图块的路径渲染的方法和设备
KR102238651B1 (ko) 경로 렌더링을 수행하는 방법 및 장치.
KR102443697B1 (ko) 경로 스트로크를 수행하는 방법 및 장치
KR102399686B1 (ko) 3d 렌더링 방법 및 장치
KR102354989B1 (ko) 경로 렌더링을 위한 타일 비닝을 수행하는 방법 및 장치.
KR102423767B1 (ko) 타일 기반 경로 렌더링을 수행하는 방법 및 장치.
KR102426669B1 (ko) 경로 렌더링을 수행하는 방법 및 장치.
KR102618560B1 (ko) 경로 렌더링을 수행하는 방법 및 장치
KR102426667B1 (ko) 경로 렌더링에서 에일리어싱을 방지하는 방법 및 장치.
KR101654865B1 (ko) 스트로크 기반의 이미지 렌더링 장치, 방법 및 컴퓨터 프로그램
KR20160131457A (ko) 커브 렌더링을 수행하는 방법 및 장치.

Legal Events

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