[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

KR102465969B1 - 그래픽스 파이프라인을 수행하는 방법 및 장치 - Google Patents

그래픽스 파이프라인을 수행하는 방법 및 장치 Download PDF

Info

Publication number
KR102465969B1
KR102465969B1 KR1020150089092A KR20150089092A KR102465969B1 KR 102465969 B1 KR102465969 B1 KR 102465969B1 KR 1020150089092 A KR1020150089092 A KR 1020150089092A KR 20150089092 A KR20150089092 A KR 20150089092A KR 102465969 B1 KR102465969 B1 KR 102465969B1
Authority
KR
South Korea
Prior art keywords
sampling
sampling points
location
shader
pattern
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
KR1020150089092A
Other languages
English (en)
Other versions
KR20170000190A (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 KR1020150089092A priority Critical patent/KR102465969B1/ko
Priority to US15/003,320 priority patent/US10223761B2/en
Priority to EP16166072.5A priority patent/EP3121786B1/en
Priority to JP2016123357A priority patent/JP6749151B2/ja
Priority to CN201610465090.0A priority patent/CN106296565B/zh
Publication of KR20170000190A publication Critical patent/KR20170000190A/ko
Application granted granted Critical
Publication of KR102465969B1 publication Critical patent/KR102465969B1/ko
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/80Geometric correction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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/50Lighting effects
    • G06T15/80Shading

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)
  • Computer Graphics (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Processing Or Creating Images (AREA)
  • Image Processing (AREA)
  • Geometry (AREA)

Abstract

그래픽스 파이프라인을 수행하는 방법 및 장치는, 스크린 픽셀들 각각마다 렌더링될 이미지를 표현하기 위한 패턴에 기초한 샘플링 포인트들의 위치를 결정하고, 샘플링 포인트의 위치에서 프리미티브에 대응되는 픽셀을 생성하고, 생성된 픽셀을 이용하여 이미지를 렌더링한다.

Description

그래픽스 파이프라인을 수행하는 방법 및 장치 {Apparatus and method for performing graphics pipeline}
그래픽스 파이프라인을 수행하는 방법 및 장치에 관한다.
GPU(Graphic Processing Unit)와 같은 그래픽 프로세싱 장치는 컴퓨팅 장치에서 그래픽스 데이터를 렌더링하는 역할을 담당한다. 일반적으로, 그래픽 프로세싱 장치는 2차원 또는 3차원 객체들에 해당되는 그래픽스 데이터를 2차원 픽셀 표현으로 변환하여 디스플레이를 위한 프레임을 생성한다. GPU를 구동시키기 위한 API(Application Programming Interface)를 개발하는 다양한 개발사들은 API 상에 자신들 고유의 그래픽스 파이프라인을 정의하고, 정의된 그래픽스 파이프라인을 이용하여 GPU의 처리 성능 및 처리 효율을 높이기 위한 많은 연구들을 진행하고 있다.
그래픽스 파이프라인을 수행하는 방법 및 장치를 제공하는데 있다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 측면에 따르면, 그래픽스 파이프라인을 수행하는 방법은, 디스플레이의 스크린 픽셀들에 대한 정보를 획득하는 단계; 상기 스크린 픽셀들 각각마다, 렌더링될 이미지를 표현하기 위한 패턴에 기초한 하나 이상의 샘플링 포인트들의 위치를 결정하는 단계; 및 상기 샘플링 포인트들 중 래스터라이징될 프리미티브에 오버랩되는 샘플링 포인트의 위치에서 상기 프리미티브에 대응되는 픽셀을 생성하는 단계를 포함하고, 상기 그래픽스 파이프라인은, 상기 생성된 픽셀을 이용하여 상기 이미지를 렌더링한다.
또한, 상기 패턴은 원본 이미지를 변형하기 위한 왜곡 패턴을 포함하고, 상기 렌더링될 이미지는 상기 원본 이미지가 상기 왜곡 패턴에 의해 변형된 왜곡 이미지를 포함한다.
또한, 상기 결정하는 단계는 격자 패턴의 상기 스크린 픽셀들이 상기 왜곡 패턴에 의해 변형되었을 경우 상기 변형된 스크린 픽셀들 각각의 중심(center) 위치에 기초하여, 상기 하나 이상의 샘플링 포인트들의 위치를 결정한다.
또한, 상기 획득된 정보는 상기 디스플레이의 상기 스크린 픽셀들의 해상도를 포함하고, 상기 결정하는 단계는 상기 패턴에 기초하여 상기 해상도에 의해 정의된 스크린 픽셀의 위치를 샘플링 포인트의 위치로 변환하는 단계; 및 상기 렌더링될 이미지의 픽셀의 위치 및 상기 변환된 샘플링 포인트의 위치를 매핑하는 단계를 포함한다.
또한, 상기 결정하는 단계는 사용자 설정에 따라 상기 패턴의 종류 및 상기 샘플링 포인트들의 위치를 변경하여 정의하는 것이 가능한 쉐이더 소스 코드(shader source code)를 처리하는 프로그래머블 스테이지(programmable stage)이다.
또한, 상기 결정하는 단계는 멀티샘플링(multisampling)이 인에이블된(enabled) 경우 하나의 스크린 픽셀에 대해 둘 이상의 샘플링 포인트들의 위치들을 결정하고, 상기 멀티샘플링이 디스에이블된(disabled) 경우 상기 하나의 스크린 픽셀에 대해 하나의 샘플링 포인트의 위치를 결정하고, 상기 멀티샘플링이 인에이블되었을 때 상기 스크린 픽셀들 각각에 대해 결정된 상기 둘 이상의 샘플링 포인트들의 배치는, 상기 패턴에 의해 상기 스크린 픽셀들 각각이 왜곡된 정도에 비례한다.
또한, 상기 결정하는 단계는 상기 그래픽스 파이프라인 내에서, 래스터라이징(rasterizing) 스테이지 이전에, 버텍스 쉐이딩(vertex shading) 스테이지, 클리핑(clipping) 스테이지 및 프로젝션(projection) 스테이지가 수행되는 동안 병렬적으로 수행된다.
또한, 상기 생성하는 단계는 상기 샘플링 포인트들이 속하는 영역들을 구분하는 쿼드트리(quadtree) 알고리즘을 이용하여 상기 프리미티브에 오버랩되는 상기 샘플링 포인트의 위치를 탐색하는 단계를 포함한다.
또한, 상기 결정하는 단계는 컬러 성분마다 샘플링 포인트의 위치에 서로 다른 오프셋을 적용시켜 상기 샘플링 포인트들의 위치를 결정한다.
또한, 상기 결정하는 단계는 상기 그래픽스 파이프라인이 타일 기반 렌더링을 위한 그래픽스 파이프라인인 경우, 타일 비닝을 위한 패스(pass)에서 수행된다.
다른 일 측면에 따르면, 상기 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
또 다른 일 측면에 따르면, 그래픽스 파이프라인을 수행하는 장치는, 디스플레이의 스크린 픽셀들에 대한 정보를 획득하고, 상기 스크린 픽셀들 각각마다, 렌더링될 이미지를 표현하기 위한 패턴에 기초한 하나 이상의 샘플링 포인트들의 위치를 결정하는 쉐이더(shader); 및 상기 샘플링 포인트들 중 래스터라이징될 프리미티브에 오버랩되는 샘플링 포인트의 위치에서 상기 프리미티브에 대응되는 픽셀을 생성하는 래스터라이저(rasterizer)를 포함하고, 상기 그래픽스 파이프라인은, 상기 생성된 픽셀을 이용하여 상기 이미지를 렌더링한다.
또한, 상기 패턴은 원본 이미지를 변형하기 위한 왜곡 패턴을 포함하고, 상기 렌더링될 이미지는 상기 원본 이미지가 상기 왜곡 패턴에 의해 변형된 왜곡 이미지를 포함한다.
또한, 상기 쉐이더는 격자 패턴의 상기 스크린 픽셀들이 상기 왜곡 패턴에 의해 변형되었을 경우 상기 변형된 스크린 픽셀들 각각의 중심(center) 위치에 기초하여, 상기 하나 이상의 샘플링 포인트들의 위치를 결정한다.
또한, 상기 획득된 정보는 상기 디스플레이의 상기 스크린 픽셀들의 해상도를 포함하고, 상기 쉐이더는 상기 패턴에 기초하여 상기 해상도에 의해 정의된 스크린 픽셀의 위치를 샘플링 포인트의 위치로 변환하고, 상기 렌더링될 이미지의 픽셀의 위치 및 상기 변환된 샘플링 포인트의 위치를 매핑한다.
또한, 상기 쉐이더는 사용자 설정에 따라 상기 왜곡 패턴의 종류 및 상기 샘플링 포인트들의 위치를 변경하여 정의하는 것이 가능한 쉐이더 소스 코드(shader source code)를 처리하는 프로그래머블 쉐이더(programmable shader)를 포함한다.
또한, 상기 쉐이더는 멀티샘플링(multisampling)이 인에이블된(enabled) 경우 하나의 스크린 픽셀에 대해 둘 이상의 샘플링 포인트들의 위치들을 결정하고, 상기 멀티샘플링이 디스에이블된(disabled) 경우 상기 하나의 스크린 픽셀에 대해 하나의 샘플링 포인트의 위치를 결정하고, 상기 멀티샘플링이 인에이블되었을 때 상기 스크린 픽셀들 각각에 대해 결정된 상기 둘 이상의 샘플링 포인트들의 배치는, 상기 패턴에 의해 상기 스크린 픽셀들 각각이 왜곡된 정도에 비례한다.
또한, 상기 쉐이더는 상기 그래픽스 파이프라인 내에서, 상기 래스터라이저에 의해 수행되는 래스터라이징 스테이지 이전에 상기 결정을 수행한다.
또한, 상기 래스터라이저는 상기 샘플링 포인트들이 속하는 영역들을 구분하는 쿼드트리(quadtree) 알고리즘을 이용하여 상기 프리미티브에 오버랩되는 상기 샘플링 포인트의 위치를 탐색하고, 상기 탐색 결과에 기초하여 상기 픽셀을 생성한다.
또한, 상기 쉐이더는 컬러 성분마다 샘플링 포인트의 위치에 서로 다른 오프셋을 적용시켜 상기 샘플링 포인트들의 위치를 결정한다.
상기된 바에 따르면, 왜곡 이미지의 렌더링을 위하여 그래픽스 파이프라인에 샘플링 포인트에 관한 추가적인(extra) 프로그래머블 쉐이딩 스테이지가 부가되는 것일 뿐이므로, 이미 알려진 다양한 그래픽스 파이프라인들을 그대로 지원하면서 보다 효율적인 왜곡 이미지의 렌더링이 가능하다.
도 1은 일 실시예에 따른 컴퓨팅 장치를 설명하기 위한 도면이다.
도 2a 내지 도 2d는 일 실시예들에 따른 왜곡 이미지들의 종류를 설명하기 위한 도면들이다.
도 3은 일 실시예에 따른 왜곡 이미지의 활용에 관한 예를 설명하기 위한 도면이다.
도 4a는 일반적인 그래픽스 파이프라인에서 샘플링 포인트를 이용하여 이미지의 픽셀을 결정하는 방법을 설명하기 위한 도면이다.
도 4b는 일 실시예에 따른 그래픽스 파이프라인에서 샘플링 포인트를 이용하여 이미지의 픽셀을 결정하는 방법을 설명하기 위한 도면이다.
도 5는 일 실시예에 따른 도 1의 GPU의 상세 하드웨어 구조를 도시한 블록도이다.
도 6은 일 실시예에 따른 왜곡 이미지의 렌더링을 위한 그래픽스 파이프라인의 흐름도이다.
도 7은 일 실시예에 따른 왜곡 이미지의 왜곡 패턴에 기초한 스크린 픽셀에 대응되는 샘플링 포인트의 위치를 설명하기 위한 도면이다.
도 8a는 왜곡이 없는 경우, 스크린 픽셀에 대응되는 샘플링 포인트를 결정하는 방법을 설명하기 위한 도면이다.
도 8b는 일 실시예에 따라 왜곡 패턴에 기초하여 스크린 픽셀에 대응되는 샘플링 포인트를 결정하는 방법을 설명하기 위한 도면이다.
도 9는 일 실시예에 따른 왜곡 없는 경우의 샘플링 포인트의 위치와 왜곡이 있는 경우의 샘플링 포인트의 위치를 비교하여 설명하기 위한 도면이다.
도 10은 일 실시예에 따라 샘플링 쉐이더에 의해 결정된 샘플링 포인트들을 이용하여 픽셀 생성을 위한 래스터라이징을 수행하는 방법을 설명하기 위한 도면이다.
도 11은 일 실시예에 따라 배럴 왜곡 패턴에 기초한 샘플링 포인트를 결정하기 위한 쉐이더 소스 코드(shader source code)의 예시를 설명하기 위한 도면이다.
도 12는 일 실시예에 따라 래스터라이저에서 뷰포트 상의 프리미티브에 오버랩된 샘플링 포인트를 탐색하는 방법을 설명하기 위한 도면이다.
도 13은 다른 일 실시예에 따라 래스터라이저에서 뷰포트 상의 프리미티브에 오버랩된 샘플링 포인트를 탐색하는 방법을 설명하기 위한 도면이다.
도 14는 일 실시예에 따라 핀쿠션 왜곡 패턴에 기초한 샘플링 포인트를 이용하여 렌더링된 왜곡 이미지가 HMD 디바이스에서 표시된 경우를 설명하기 위한 도면이다.
도 15a 및 도 15b는 일 실시예들에 따른 싱글샘플링 및 멀티샘플링을 설명하기 위한 도면들이다.
도 16은 다른 실시예에 따라 한 스크린 픽셀에 대하여 컬러 성분마다 서로 다른 샘플링 포인트들의 위치들을 결정하는 것을 설명하기 위한 도면이다.
도 17은 일 실시예에 따른 왜곡 패턴에 따라 미사용 영역(unused region)이 존재하는 경우의 왜곡 이미지의 렌더링을 설명하기 위한 도면이다.
도 18은 일 실시예에 따른 샘플링 쉐이더에서 디더링(dithering)을 위한 샘플링 포인트들을 결정하는 것을 설명하기 위한 도면이다.
도 19는 다른 실시예에 따라 타일 기반 렌더링을 위한 그래픽스 파이프라인의 경우 샘플링 쉐이딩이 활용되는 예를 설명하기 위한 도면이다.
도 20은 일 실시예에 따른 왜곡 이미지의 렌더링을 위한 그래픽스 파이프라인을 수행하는 장치의 블록도이다.
도 21은 일 실시예에 따른 왜곡 이미지의 렌더링을 위한 그래픽스 파이프라인을 수행하는 방법의 흐름도이다.
본 실시예들에서 사용되는 용어는 본 실시예들에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 실시예들의 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 본 실시예들에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 실시예들의 전반에 걸친 내용을 토대로 정의되어야 한다.
명세서 전체에서, 어떤 부분이 다른 부분과 연결되어 있다고 할 때, 이는 직접적으로 연결되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 전기적으로 연결되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 포함한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 명세서에 기재된 “...부”, “모듈” 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어 또는 소프트웨어로 구현되거나 하드웨어와 소프트웨어의 결합으로 구현될 수 있다.
본 명세서에서 사용되는 “구성된다” 또는 “포함한다” 등의 용어는 명세서 상에 기재된 여러 구성 요소들, 도는 여러 단계들을 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
또한, 본 명세서에서 사용되는 “제 1” 또는 “제 2” 등과 같이 서수를 포함하는 용어는 다양한 구성 요소들을 설명하는데 사용할 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만 사용된다.
이하 첨부된 도면을 참조하면서 오로지 예시를 위한 실시예들을 상세히 설명하기로 한다. 하기 실시예들의 설명은 권리 범위를 제한하거나 한정하는 것이 아님은 물론이다. 상세한 설명 및 실시예로부터 당해 기술분야의 전문가가 용이하게 유추할 수 있는 것은 권리범위에 속하는 것으로 해석된다.
도 1은 일 실시예에 따른 컴퓨팅 장치를 설명하기 위한 도면이다.
도 1을 참고하면, 컴퓨팅 장치(1)는 GPU(Graphic Processing Unit)(10), CPU(Central Processing Unit)(20), 메모리(30), 디스플레이(40) 및 Bus(50)를 포함한다. 도 1에 도시된 컴퓨팅 장치(1)에는 실시예들과 관련된 구성요소들만이 도시되어 있다. 따라서, 도 1에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
컴퓨팅 장치(1)는 데스크탑 컴퓨터, 노트북 컴퓨터, 스마트폰, PDA (personal digital assistants), 휴대형 미디어 플레이어, 비디오 게임용 콘솔, 텔레비젼 셋탑 박스, 태블릿 디바이스, 이북 리더, 웨어러블 디바이스, HMD(Head Mounted Display) 디바이스 등을 예로 들 수 있지만, 이에 제한되지 않는다. 즉, 컴퓨팅 장치(1)는 컨텐츠의 디스플레이를 위한 그래픽스 프로세싱 기능을 갖는 장치로서, 컴퓨팅 장치(1)의 범주에는 다양한 장치들이 포함될 수 있다.
CPU(20)는 컴퓨팅 장치(1)의 전반적인 동작들 및 기능들을 제어하는 하드웨어이다. 예를 들어, CPU(20)는 운영체제(Operating System, OS)를 구동하고, GPU(10)를 위한 그래픽스 API(Application Programming Interface)를 호출하고, GPU(10)의 드라이버를 실행시킬 수 있다. 또한, CPU(20)는 메모리(30)에 저장된 다양한 애플리케이션들, 예를 들어 웹 브라우징 애플리케이션, 게임 애플리케이션, 비디오 애플리케이션 등을 실행할 수 있다.
GPU(10)는 그래픽스 파이프라인(graphics pipeline)(100)을 수행하는 장치로서, 그래픽 전용 프로세서에 해당될 수 있다. 즉, GPU(10)는 3차원 이미지 상의 3차원 객체들을 디스플레이용의 2차원 이미지로 렌더링하기 위해 3차원 그래픽스 파이프라인을 실행하도록 구현된 하드웨어일 수 있다. 예를 들면, GPU(10)는 쉐이딩, 블렌딩, 일루미네이팅과 같은 다양한 기능들 및 디스플레이될 픽셀들에 대한 픽셀 값들을 생성하기 위한 다양한 기능들을 수행할 수도 있다. 한편, GPU(10)는 타일 기반 렌더링(tile-based rendering, TBR)을 위한 타일 기반(tile-based) 그래픽스 파이프라인도 수행할 수 있다.
도 1을 참고하면, GPU(10)에 의해 처리되는 그래픽스 파이프라인(100)은, 다양한 버전들의 DirectX, OpenGL API 등과 같은 그래픽스 API에 의해 정의된 그래픽스 파이프라인에 해당될 수 있다. 즉, 본 실시예에 따른 그래픽스 파이프라인(100)은 어느 하나의 버전 또는 어느 하나의 API 종류에 의해 제한되지 않고 다양한 API들에 적용될 수 있다.
메모리(30)는 컴퓨팅 장치(1) 내에서 처리되는 각종 데이터들을 저장하는 하드웨어로서, 예를 들어, 메모리(30)는 GPU(10) 및 CPU(20)에서 처리된 데이터들 및 처리될 데이터들을 저장할 수 있다. 또한, 메모리(30)는 GPU(10) 및 CPU(20)에 의해 구동될 애플리케이션들, 드라이버들 등을 저장할 수 있다. 메모리(30)는 DRAM(dynamic random access memory), SRAM(static random access memory) 등과 같은 RAM(random access memory), ROM(read-only memory), EEPROM(electrically erasable programmable read-only memory), CD-ROM, 블루레이 또는 다른 광학 디스크 스토리지, HDD(hard disk drive), SSD(solid state drive), 또는 플래시 메모리를 포함하며, 나아가서, 컴퓨팅 장치(1)에 액세스될 수 있는 외부의 다른 스토리지 디바이스를 포함할 수 있다.
디스플레이(40)는 GPU(10)에 의해 처리된 이미지를 표시하는 하드웨어이다. 예를 들어, 디스플레이(40)는 GPU(10)에 의해 렌더링된 왜곡 이미지를 표시할 수 있다. 디스플레이(40)는 소정의 해상도의 스크린 픽셀들을 구비하고 있고, GPU(10)는 이 해상도에 맞는 이미지를 렌더링한다. 디스플레이(40)는 LCD, OLED 등과 같은 다양한 종류의 디스플레이 패널로 구현될 수 있다.
Bus(50)는 컴퓨팅 장치(1) 내의 하드웨어들 간에 데이터를 송수신할 수 있도록 하드웨어들을 연결시켜 주는 하드웨어로서, Bus(50)는 예를 들어 PCI bus, PCI Express bus 등과 같은 다양한 종류들을 포함할 수 있다.
컴퓨팅 장치(1), 특히 GPU(10)는 원본(original) 이미지를 변형하여(modify) 왜곡(distorted) 이미지를 렌더링하기 위한 그래픽스 파이프라인(100)을 수행할 수 있다. 왜곡 이미지들의 종류에 대해서는, 도 2a 내지 도 2d를 참고하여 설명하도록 한다.
도 2a 내지 도 2d는 일 실시예들에 따른 왜곡 이미지들의 종류를 설명하기 위한 도면들이다.
도 2a를 참고하면, 왜곡 이미지(215)는 원본 이미지(210)의 중심 픽셀을 기준으로, 중심 픽셀과 나머지 픽셀들 간의 거리가 점차 증가하도록 퍼지는 모양의 배럴 왜곡(barrel distortion)에 의한 것일 수 있다. 배럴 왜곡은 어안 렌즈(Fisheye lens)에 의해 촬영된 왜곡 효과일 수 있다. 도 2b를 참고하면, 배럴 왜곡과 반대로, 왜곡 이미지(215)는 원본 이미지(210)의 중심 픽셀을 기준으로, 중심 픽셀과 나머지 픽셀들 간의 거리가 점차 감소하도록 모이는 모양의 핀쿠션 왜곡(pincushion distortion)에 의한 것일 수 있다. 한편, 이 밖에도 배럴 왜곡과 핀쿠션 왜곡이 혼합된 머스타쉬 왜곡(mustache distortion)도 있을 수 있으나, 별도로 도시되지는 않았다.
도 2c를 참고하면, 사용자의 조작에 의한 왜곡 이미지(235)가 도시되어 있다. 왜곡 이미지(235)는 원본 이미지(230) 상에서 사용자가 변형하고(modify) 싶어하는 지점들의 위치를 임의로 조작함에 따라 왜곡된 것일 수 있다. 즉, 앞서 도 2a 및 도 2b와는 달리, 왜곡 이미지(235)는 사용자의 기호에 따라 다양한 모습들로 비선형적으로 왜곡된 것일 수 있다. 도 2d를 참고하면, 16:9 해상도의 원본 이미지(240)가 4:3 해상도의 왜곡 이미지(245)로 변경되는 것이 도시되어 있다. 이때, 해상도 변경의 왜곡은 원본 이미지(240)의 픽셀 격자(243)가 비선형적인 왜곡 패턴에 의해 왜곡 격자(247)로 변화됨에 따른 것일 수 있다. 도 2d의 왜곡 이미지(245) 또한 도 2c와 유사하게, 사용자가 변형하고 싶어하는 영역을 임의로 지정함에 따라 왜곡된 것일 수 있다.
본 실시예들에서 설명될 왜곡 이미지들의 종류는 선형적인 왜곡 패턴에 의한 것뿐만 아니라, 사용자의 임의적인 조작에 따른 비선형적인 왜곡 패턴에 의한 것도 포함될 수 있다. 즉, 본 실시예들에서 설명되는 왜곡 이미지는 어느 하나에 의해 제한되지 않는다. 도 1의 컴퓨팅 장치(1), 특히 GPU(10)는 원본 이미지가 위와 같은 다양한 왜곡 패턴에 의해 변형된 왜곡 이미지를 렌더링할 수 있다.
도 3은 일 실시예에 따른 왜곡 이미지의 활용에 관한 예를 설명하기 위한 도면이다.
도 3을 참고하면, 앞서 도 2a에서 설명된 배럴 왜곡에 의한 왜곡 이미지(215)는 HMD(Head Mounted Display) 디바이스(300)를 위하여 활용될 수 있다. HMD 디바이스(300)는 사용자가 안경처럼 머리에 착용하고 눈 앞에서 바로 이미지를 시청할 수 있는 이미지 디스플레이 디바이스의 일종이다. HMD 디바이스(300)의 내부에는 한 쌍의 렌즈들(320)과 디스플레이 패널(330)이 구비되어 있다. 사용자는 렌즈들(320)을 통해 디스플레이 패널(330)에 표시된 화면을 시청할 수 있다. 이때, 디스플레이 패널(330) 상에는 배럴 왜곡에 의하여 변형된 한 쌍의 왜곡 이미지들(340)이 표시될 수 있다. 비록, 디스플레이 패널(330) 상에는 왜곡 이미지들(340)이 표시되었다 할지라도, 사용자의 눈에는 렌즈들(320)을 투과한 왜곡 이미지들(310)이 왜곡 없는(no disortion) 이미지들(310)로 보이게 된다.
도 1의 컴퓨팅 장치(1)(특히, GPU(10))에서 처리되는 그래픽스 파이프라인(100)을 통해 렌더링된 왜곡 이미지는, 예를 들어 위와 같은 HMD 디바이스(300)를 위해 이용될 수 있으나, 이에 제한되지 않는다.
도 4a는 일반적인 그래픽스 파이프라인에서 샘플링 포인트를 이용하여 이미지의 픽셀을 결정하는 방법을 설명하기 위한 도면이다.
도 4a를 참고하면, 삼각형 객체(401)를 이미지의 픽셀들로 그리기 위하여 뷰포트(viewport) 상의 샘플링 포인트(402)의 위치(location)가 이용될 수 있다. 뷰포트 상의 샘플링 포인트(402)의 위치는 그래픽스 파이프라인의 고정된 매핑(fixed mapping) 알고리즘에 의하여 디스플레이 화면 상에 렌더링될 이미지의 어느 한 픽셀(404)에 1:1로 매핑될 수 있다. 그리고, 그래픽스 파이프라인의 고정된 기능의 래스터라이징(fixed mapping) 알고리즘에 의하여, 뷰포트 상의 샘플링 포인트(402)의 위치에서의 객체 정보(또는 프리미티브 정보)로, 대응되는 픽셀(404)이 어떻게 래스터라이징될 것인지 결정될 수 있다. 이와 같은 방법은, 왜곡 없는 이미지를 렌더링하기 위한 일반적인 그래픽스 파이프라인에서 수행되는 방법일 수 있다. 또는, 왜곡 이미지를 렌더링하는 일반적인 그래픽스 파이프라인이라 할지라도, 샘플링 포인트(402)의 위치에 대해서는 전혀 변경을 가하고 있지 않으므로, 이와 같은 방법은 왜곡 이미지를 렌더링하는 일반적인 그래픽스 파이프라인에서 수행되는 방법일 수도 있다. 즉, 일반적인 그래픽스 파이프라인에서는 샘플링 포인트(402)의 위치와 디스플레이 화면 상에 렌더링될 이미지의 픽셀(403) 간의 매핑은 고정된 매핑 알고리즘에 의해 처리될 뿐이다.
도 4b는 일 실시예에 따른 그래픽스 파이프라인에서 샘플링 포인트를 이용하여 이미지의 픽셀을 결정하는 방법을 설명하기 위한 도면이다.
도 4b를 참고하면, 도 4a의 샘플링 포인트(402)와 달리, 뷰포트 상의 샘플링 포인트(412)는 삼각형 객체(411) 내에 위치하게 된다. 하지만, 최종적으로 렌더링된, 샘플링 포인트(412)에 대응되는 픽셀(413)의 위치는, 도 4a의 픽셀(403)의 위치와 동일하게 될 수 있다. 삼각형 객체(411)가 임의의 왜곡 패턴에 의해 왜곡된 삼각형 객체(414)로 변형되는 경우, 삼각형 객체(411) 내에 위치하는 샘플링 포인트(412)의 위치는 왜곡된 삼각형 객체(414) 내의 어느 한 픽셀(413)의 위치에 대응되어야 한다. 이와 같은 샘플링 포인트(412)와 픽셀(413) 간의 매핑은 도 1의 그래픽스 파이프라인(100) 내의 샘플링 쉐이더(410)에 의해 수행될 수 있다. 도 4a에서 설명되었던 고정된 매핑(fixed mapping) 알고리즘에 의해서는 샘플링 포인트(402)의 위치와 픽셀(403)의 위치 간의 매핑 관계가 고정되었기 때문에, 삼각형 객체(401)가 왜곡된다 할지라도, 픽셀(413)의 위치는 변경되기 어렵다. 따라서, 도 4a에서 설명되었던 일반적인 그래픽스 파이프라인은 샘플링 포인트(402)와 픽셀(403) 간의 매핑 관계를 변경하지 않고 그래픽스 파이프라인 내의 다른 스테이지들(stages)에서 왜곡을 처리한다. 이와 달리, 본 실시예에 따른 그래픽스 파이프라인(100)은, 고정된 매핑 알고리즘을 대신하는 샘플링 쉐이더(410)에 의한 스테이지를 추가하여 왜곡 이미지를 렌더링할 수 있다. 이하에서는, 샘플링 쉐이더(410)가 포함된 그래픽스 파이프라인(100)에 대해 보다 상세하게 설명하도록 한다.
도 5는 일 실시예에 따른 도 1의 GPU의 상세 하드웨어 구조를 도시한 블록도이다.
도 5를 참고하면, GPU(10)는 그래픽스 파이프라인(100)을 수행하는 버텍스 쉐이더(vertex shader)(110), 테셀레이션 컨트롤 쉐이더(tessellation control shader)(121), 테셀레이션 프리미티브 제네레이터(tessellation primitive generator)(123), 테셀레이션 이밸류에이션 쉐이더(tessellation evaluation shader)(125), 지오메트리 쉐이더(geometry shader)(127), 클리퍼(clipper)(130), 프로젝터(projector)(140), 샘플링 쉐이더(sampling shader)(150), 래스터라이저(rasterizer)(160), 픽셀 쉐이더(pixel shader)(170) 및 래스터 오퍼레이터(raster operator)(180)를 포함할 수 있다. 또한, GPU(10)는 컨트롤러(191) 및 버퍼들(192)을 더 포함할 수 있다. 한편, GPU(10) 내에서 그래픽스 파이프라인(100)을 수행하는 위의 구성들은, 아래 설명될 기능들에 기초하여 분류된 것들일 수 있다. 따라서, 그래픽스 파이프라인(100)을 수행하는 위의 구성들 각각은, 아래 설명될 기능들 각각을 실행시키는 프로그램 로직들 또는 소프트웨어 모듈들로 구현될 수 있다. 또한, 그래픽스 파이프라인(100)을 수행하는 위의 구성들은, GPU(10) 내에 구비된 서브(sub) 프로세싱 유닛들(또는 프로세서 코어들) 각각 또는 하나의 프로세싱 유닛으로도 구현될 수도 있다. 즉, 그래픽스 파이프라인(100)을 수행하는 위의 구성들의 구현 형태는, 어느 하나에 의해 제한되지 않는다. 나아가서, 그래픽스 파이프라인(100)을 수행하는 위의 구성들의 명칭들은 아래 설명될 기능들에 기초하여 부여된 것일 수 있으나, 이와 같은 명칭들은 다양하게 변경될 수도 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
한편, 본 명세서에 따르면, GPU(10)에서 그래픽스 파이프라인(100)을 수행하는 구성들의 명칭들은 설명의 편의를 위하여, OpenGL(Open Graphics Library) 4.5에 정의된 명칭들을 일부 사용하였으나, 이 구성들의 명칭들은 이에 제한되지 않는다. 즉, GPU(10)에서 그래픽스 파이프라인(100)을 수행하는 구성들은, 다른 버전의 OpenGL, 또는 Microsoft 사의 DirectX (DX), CUDA(Compute Unified Device Architecture) 등과 같은 다른 종류의 API들에서 정의된 유사한 구성들에 대응될 수 있다. 예를 들어, 테셀레이션 이벨류에이션 쉐이더(tessellation evaluation shader)(125)는 DX에서 사용되는 도메인 쉐이더(domain shader)에 대응될 수 있고, GPU(10) 내의 다른 구성들도 마찬가지로, DX, CUDA 등의 다른 API들에서 사용되는 구성들에 대응될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다. 한편, 도 5에서 점선으로 표시된 구성들, 테셀레이션 컨트롤 쉐이더(121), 테셀레이션 프리미티브 제네레이터(123), 테셀레이션 이밸류에이션 쉐이더(125), 지오메트리 쉐이더(127)는 옵션적인(optional) 구성들일 수 있다.
도 6은 일 실시예에 따른 왜곡 이미지의 렌더링을 위한 그래픽스 파이프라인의 흐름도이다. 이하에서는 도 5 및 도 6을 연계하여 GPU(10)에서 수행되는 그래픽스 파이프라인(100)을 설명하도록 한다.
610 단계에서, GPU(10)는 메모리(도 1의 30)에 저장된 디스플레이(도 1의 40)의 스크린 픽셀들(screen pixels)에 대한 장면 정보(scene description)를 획득한다. 스크린 픽셀들에 대한 장면 정보는, 디스플레이(40)의 스크린 해상도, 각 스크린 픽셀들의 행렬 위치 등에 정보를 포함할 수 있다. 또한, GPU(10)는 메모리(도 1의 30)에 저장된, 객체들을 구성하는 버텍스들(vertices)에 관한 장면 정보도 획득할 수 있다.
620 단계에서, 버텍스 쉐이더(110)는 장면 정보에 포함된 버텍스들의 위치 버텍스들의 속성(attribute) 등에 관한 정보를 이용하여 각 버텍스에 대한 3차원 공간 상의 좌표를 결정한다.
630 단계에서, 클리퍼(130)는 버텍스 쉐이더(110)로부터 출력된 버텍스들로 구성된 프리미티브들 중에서, 카메라의 시야(즉, 뷰포트)에 포함된 프리미티브들을 제외한 나머지 프리미티브들을 클리핑(clipping) 및 컬링(culling)한다. 카메라의 시야에 속하는 프리미티브들의 위치는 NDC(Normalized Device Coordinate) 좌표계 상의 좌표들로 지정될 수 있다.
640 단계에서, 프로젝터(140)는 NDC 좌표계 상에 위치한 프리미티브들의 좌표들을 스크린 공간(screen space) 상의 스크린 좌표들로 변환한다. 640 단계가 완료된 경우, 프로젝터(140)는 뷰포트 상에서 스크린 좌표들을 갖는 프리미티브들에 관한 정보를 래스터라이저(160)로 출력한다.
651 단계에서, 샘플링 쉐이더(150)는 디스플레이의 스크린 픽셀들에 대한 정보를 획득한다. 즉, 샘플링 쉐이더(150)는 스크린 해상도, 각 스크린 픽셀들의 행렬 위치 등에 관한 스크린 픽셀들의 장면 정보를 획득한다. 그리고 나서, 샘플링 쉐이더(150)는 스크린 픽셀들 각각마다, 렌더링될 이미지를 표현하기 위한 패턴에 기초한 하나 이상의 샘플링 포인트들의 위치를 결정한다. 다시 말하면, 샘플링 쉐이더(150)는 스크린 픽셀들 각각마다, 원본 이미지의 왜곡 패턴에 기초한 하나 이상의 샘플링 포인트들의 위치를 결정한다. 즉, 샘플링 쉐이더(150)는 스크린 해상도에 의해 정의된 개수의 스크린 픽셀들 각각에 대하여 샘플링 포인트를 결정한다. 여기서, 왜곡 패턴은 앞서 도 2a 내지 도 2d에서 설명된 왜곡 이미지의 패턴일 수 있으나, 이에 제한되지 않는다.
샘플링 쉐이더(150)는 격자 패턴의 상기 스크린 픽셀들이 상기 왜곡 패턴에 의해 변형되었을 때의 상기 변형된 스크린 픽셀들 각각의 중심(center) 위치에 기초하여 하나 이상의 샘플링 포인트들의 위치를 결정한다. 샘플링 쉐이더(150)는 왜곡 패턴에 기초하여 해상도에 의해 정의된 스크린 픽셀의 위치를 샘플링 포인트의 위치로 변환한다. 예를 들어, 샘플링 쉐이더(150)의 입력은 어느 스크린 픽셀의 위치 좌표인 “pixelPosition.x, pixelPosition.y”의 값일 수 있고, 샘플링 쉐이더(150)의 출력은 어느 샘플링 포인트의 위치 좌표인 “samplePosition.x, samplePosition.y”의 값일 수 있다. 즉, 샘플링 쉐이더(150)는 왜곡 패턴을 정의하는 알고리즘을 통해 “pixelPosition.x, pixelPosition.y”의 값을 “samplePosition.x, samplePosition.y”의 값으로 변환하는 연산을 수행할 수 있다. 왜곡 패턴을 정의하는 알고리즘은 앞서 설명된 배럴 왜곡, 핀쿠션 왜곡 등과 같은 선형적인 연산을 수행하는 알고리즘이거나, 또는 사용자 임의에 따른 비선형적 연산을 수행하는 알고리즘일 수 있다.
즉, 그래픽스 파이프라인(100) 내의 스테이지들 중에서, 샘플링 쉐이더(150)는 사용자 설정에 따라 왜곡 패턴의 종류 및 샘플링 포인트들의 위치를 자유롭게 변경하여 정의하는 것이 가능한 쉐이더 소스 코드(shader source code)를 처리하는 프로그래머블 쉐이더(programmable shader)일 수 있다. 따라서, 651 단계의 샘플링 쉐이딩은 프로그래머블 스테이지(programmable stage)일 수 있다.
652 단계에서, 샘플링 쉐이더(150)는, 렌더링될 왜곡 이미지의 픽셀의 위치 및 샘플링 포인트의 위치를 매핑한다. 렌더링될 왜곡 이미지의 픽셀의 위치 및 샘플링 포인트의 위치 간의 매핑 관계는, 룩업(lookup) 테이블의 형태로 버퍼들(192)에 저장될 수 있다.
한편, 샘플링 쉐이더(150)에 의해 수행되는 651 단계 및 652 단계는, 620 단계 내지 640 단계(버텍스 쉐이딩 스테이지, 클리핑 스테이지 및 프로젝션 스테이지)가 수행되는 동안, 병렬적으로 수행될 수 있다. 즉, 샘플링 쉐이더(150)에 의해 수행되는 651 단계 및 652 단계는 661 단계의 래스터라이징 스테이지 이전에 수행된다.
661 단계에서, 래스터라이저(160)는 샘플링 쉐이더(150)에 의해 결정된 샘플링 포인트들 중, 래스터라이징될 프리미티브에 오버랩되는 샘플링 포인트의 위치에서 프리미티브에 대응되는 픽셀을 결정한다. 먼저, 래스터라이저(160)는 샘플링 포인트들의 좌표들 중에서, 프리미티브를 구성하는 버텍스들의 좌표들 내에 존재하는 샘플링 포인트를 탐색한다. 그리고 나서, 래스터라이저(160)는 버퍼들(192)에 저장된 룩업 테이블을 참조하여, 프리미티브에 오버랩되는 것으로 탐색된 샘플링 포인트에 대응되는, 렌더링될 왜곡 이미지의 픽셀을 결정한다.
662 단계에서, 래스터라이저(160)는 결정된 픽셀에 대한 속성 값(attribute value)을 결정한다. 이로써, 래스터라이저(160)는 샘플링 포인트 각각에 대한 이미지 픽셀을 생성할 수 있다.
670 단계에서, 픽셀 쉐이더(170)는 생성된 이미지 픽셀들에 대한 픽셀 컬러 값들을 결정함으로써, 왜곡 이미지의 픽셀들을 쉐이딩한다.
680 단계에서, 래스터 오퍼레이터(180)는 픽셀마다, 스텐실(stencil), z 테스트, 블렌딩(blending) 등과 같은 추가적인, 미리 정의된(pre-defined) 픽셀 오퍼레이션들을 수행한다.
690 단계에서, GPU(10)는 래스터 오퍼레이션 스테이지(680 단계)가 완료된 경우, 왜곡 이미지의 렌더링을 완료하고, 렌더링된 왜곡 이미지를 디스플레이(40)로 출력한다.
이상에서 설명된 바와 같이, 본 실시예에 따른 왜곡 이미지의 렌더링은, 1 패스(1-pass)의 그래픽스 파이프라인(100) 내에서 수행될 수 있다. 따라서, 단지 샘플링 포인트의 결정을 위한 샘플링 쉐이딩 스테이지만이 추가될 뿐, 왜곡 이미지의 렌더링만을 위한 별도의 추가적인 패스(pass)가 요구되지 않으므로, 왜곡 이미지의 렌더링을 위한 추가적인 패스(pass)로 인한 GPU(10)의 연산량 및 성능 부담을 경감시킬 수 있다.
한편, 컨트롤러(191)는 그래픽스 파이프라인(100)의 각 구성요소들(110 내지 180)과 버퍼들(192)의 전반적인 기능들 및 동작들을 제어한다.
버퍼들(192)은 GPU(10) 내에서 처리되는 정보, 예를 들어 샘플링 포인트에 관한 정보 등을 저장할 수 있다. 또한, 버퍼들(192)은 메모리(도 1의 30)로부터 GPU(10)에 의해 처리되어야 하는 정보, 예를 들어 장면 정보, 버텍스 정보 등을 수신하여 임시적으로 저장할 수 있다.
테셀레이션 컨트롤 쉐이더(121), 테셀레이션 프리미티브 제네레이터(123) 및 테셀레이션 이밸류에이션 쉐이더(125)는 프리미티브의 테셀레이션을 위한 옵션적인 구성들에 해당된다. 지오메트리 쉐이더(127)는 하나의(single) 프리미티브에 대해 하나 이상의 추가적인 출력 프리미티브들을 생성하기 위해 사용될 수도 있는 옵션적인 구성이다.
도 7은 일 실시예에 따른 왜곡 이미지의 왜곡 패턴에 기초한 스크린 픽셀에 대응되는 샘플링 포인트의 위치를 설명하기 위한 도면이다.
도 7을 참고하면, 왜곡 패턴은 핀쿠션 왜곡인 것을 가정하여 설명하도록 한다. 핀쿠션 왜곡은 중심으로 갈수록 이미지가 점점 축소되는 경향을 나타내는 왜곡 패턴을 의미한다. 따라서, 샘플링 포인트들의 그리드는 격자 패턴의 스크린 픽셀들(710)에 대응되는 규칙적인(regular) 형태의 그리드가 아닌, 중심을 향해 모이는 핀쿠션 왜곡 패턴에 대응되는 변형된(modified) 모양의 그리드일 수 있다. 그러므로, 어느 픽셀(715)에 대응되는 샘플링 포인트(725)의 위치는 뷰포트(720) 상에서 중심 방향으로 모여진 어느 위치로 결정될 수 있다. 샘플링 쉐이더(도 5의 150)는 핀쿠션 왜곡 패턴에 기초하여 스크린 픽셀들(710) 각각에 대응되는 샘플링 포인트들의 위치들을 각각 결정한다.
도 8a는 왜곡이 없는 경우, 스크린 픽셀에 대응되는 샘플링 포인트를 결정하는 방법을 설명하기 위한 도면이다.
도 8a를 참고하면, 왜곡이 없는 경우, 스크린 픽셀에 대응되는 샘플링 포인트의 위치는, 뷰포트 상에서 스크린 픽셀의 중심 위치에 대응되는 위치로 결정될 수 있다. 예를 들어, 스크린 픽셀 2에 대응되는 샘플링 포인트 (SP2)의 위치는, 뷰포트 상에서 스크린 픽셀 2의 영역에 대응되는 영역의 중심 위치에서 결정될 수 있다. 다만, 대응되는 샘플링 포인트의 위치는, 그래픽스 파이프라인(100)의 설정에 따라, 스크린 픽셀의 중심 위치 대신에, 중심 위치로부터 일정 오프셋만큼 떨어진 위치로 결정될 수도 있다. 또는, 대응되는 샘플링 포인트의 위치는, 사용자가 임의로 설정한 위치로 결정될 수 있다. 즉, 본 실시예에서는 설명의 편의를 위하여, 대응되는 샘플링 포인트의 위치는, 스크린 픽셀의 중심 위치에 대응되는 것으로 설명하겠으나, 본 실시예는 이에 제한되지 않는다.
도 8b는 일 실시예에 따라 왜곡 패턴에 기초하여 스크린 픽셀에 대응되는 샘플링 포인트를 결정하는 방법을 설명하기 위한 도면이다.
도 8b를 참고하면, 왜곡 패턴은 핀쿠션 왜곡인 것을 가정하여 설명하도록 한다. 격자 패턴(810)의 스크린 픽셀들은 왜곡 패턴(핀쿠션 왜곡 패턴)(820)에 의해 변형된 것으로 가정할 수 있다. 따라서, 스크린 픽셀 2에 대응되는 샘플링 포인트 (SP2)의 위치는, 뷰포트 상에서 스크린 픽셀 2의 영역에 대응되는 영역의 중심 위치에서 좌상단 방향으로 약간 떨어진 위치로 결정될 수 있다. 또한, 스크린 픽셀 4에 대응되는 샘플링 포인트 (SP14)의 위치도, 뷰포트 상에서 스크린 픽셀 4의 영역에 대응되는 영역의 중심 위치에서 좌상단 방향으로 약간 떨어진 위치로 결정될 수 있다.
즉, 쉐이딩 쉐이더(150)는 그래픽스 파이프라인(100) 내의 샘플링 쉐이딩 스테이지(도 6의 651 단계)를 통해, 왜곡 패턴에 기초하여 스크린 픽셀에 대응되는 샘플링 포인트(또는 샘플링 포인트의 위치)를 결정한다. 따라서, 쉐이딩 쉐이더(150)는 왜곡 이미지의 렌더링을 위하여 샘플링 포인트의 위치를, 왜곡 없는 경우와 비교하여, 왜곡 패턴이 반영된 위치로 다르게 결정할 수 있다.
도 9는 일 실시예에 따른 왜곡 없는 경우의 샘플링 포인트의 위치와 왜곡이 있는 경우의 샘플링 포인트의 위치를 비교하여 설명하기 위한 도면이다.
도 9를 참고하면, 샘플링 포인트들 (SP1), (SP2), (SP3) 및 (SP4)의 위치들은 왜곡이 없는 경우에 결정된 위치들일 수 있다. 샘플링 포인트들 (SP1), (SP2), (SP3) 및 (SP4)의 위치들은 도 8a에서 설명된 바와 같이, 모두 스크린 픽셀들 각각에 대응되는 뷰포트 상의 영역들의 중심 위치들에 해당된다. 이와 달리, 샘플링 포인트들 (SP11), (SP12), (SP13) 및 (SP14)의 위치들은 왜곡이 있는 경우에 샘플링 쉐이더(150)에 의해 결정된 위치들일 수 있다. 즉, 샘플링 포인트들 (SP11), (SP12), (SP13) 및 (SP14)의 위치들은 왜곡 패턴(핀쿠션 왜곡 패턴)에 기초하여 결정되었기 때문에, 샘플링 포인트들 (SP1), (SP2), (SP3) 및 (SP4)의 위치들과 비교하여, 스크린 픽셀들 각각에 대응되는 뷰포트 상의 영역들의 중심 위치들로부터 약간씩 떨어진 곳에서 결정된다. 도 8b 및 도 9에서는 핀쿠션 왜곡 패턴을 예로 들어 샘플링 포인트의 위치가 설명되었으나, 본 실시예는 이에 제한되지 않고 다른 다양한 왜곡 패턴일 경우에도 유사한 방식으로 샘플링 포인트의 위치가 결정될 수 있다.
도 10은 일 실시예에 따라 샘플링 쉐이더에 의해 결정된 샘플링 포인트들을 이용하여 픽셀 생성을 위한 래스터라이징을 수행하는 방법을 설명하기 위한 도면이다.
도 10을 참고하면, 왜곡 패턴으로 인하여 뷰포트(1010) 상에서 모든 샘플링 포인트들의 샘플링 그리드는 규칙적인 그리드의 형태가 아닌, 변형된 그리드의 형태일 수 있다. 뷰포트(1010) 상에 삼각형 형태의 프리미티브(1011)가 포함된 경우, 래스터라이저(도 5의 160)는 모든 샘플링 포인트들 중에서 프리미티브(1011)에 오버랩된 일부 샘플링 포인트들(1015)만이 픽셀 생성에 필요한 것으로 결정한다. 그리고 나서, 래스터라이저(160)는 버퍼들(도 5의 192)에 저장된 샘플링 포인트와 픽셀 간의 매핑 관계에 관한 정보에 기초하여, 일부 샘플링 포인트들(1015)에 대응되는 픽셀들(1025)의 위치를 결정하여 픽셀 생성을 수행할 수 있다. 전체 이미지 픽셀들(1020) 중 일부 픽셀들(1025)의 위치에서 객체(1021)는 프리미티브(1011)의 삼각형 형태와는 다르게, 왜곡 패턴에 의해 변형된 형태를 가지도록 그려질(렌더링될) 수 있다.
즉, 본 실시예에 따른 왜곡 이미지를 렌더링하기 위한 그래픽스 파이프라인(도 5의 100)은 샘플링 쉐이더(도 5의 150)를 이용하여, 도 7 및 도 10에서 설명된 바와 같이, 왜곡 패턴에 기초한 샘플링 포인트의 위치를 결정하고, 그 샘플링 포인트의 위치에 기초한 픽셀 위치에서 객체를 렌더링함으로써 왜곡 이미지를 렌더링할 수 있다.
도 11은 일 실시예에 따라 배럴 왜곡 패턴에 기초한 샘플링 포인트를 결정하기 위한 쉐이더 소스 코드(shader source code)의 예시를 설명하기 위한 도면이다.
도 11에 도시된 쉐이더 소스 코드(1120)을 참고하면, “in vec2 pix_pos; // NDC coordinate [-1, 1]”는 샘플링 쉐이더(도 5의 150)의 입력을 나타내는 코드로서, NDC 좌표계 상의 스크린 픽셀들의 위치들(pix_pos)이 샘플링 쉐이더(150)의 입력에 해당된다는 점을 의미한다. “out vec2 sampling_pos; // NDC coordinate [-1, 1]”는 샘플링 쉐이더(150)의 출력을 나타내는 코드로서, NDC 좌표계 상의 샘플링 포인트들의 위치들(sampling_pos)이 샘플링 쉐이더(150)의 출력에 해당된다는 점을 의미한다.
“uniform float BarrelPower; vec2 Distort(vec2 p) {float theta = atan(p.y, p.x); float radius = length(p); radius = pow(radius, BarrelPower); p.x = radius * cos(theta); p.y = radius * sin(theta); return p;}”의 코드는, 배럴 왜곡을 정의하기 위한 함수를 의미한다.
“void main() {float d = length(pix_pos, xy); if (d < 1.0) {sampling_pos = Distort(pix_pos);} else {discard();}”의 코드는, 뷰포트 상의 중심으로부터 거리 1 미만의 샘플링 포인트들만 픽셀들로 생성되고, 뷰포트 상의 중심으로부터 거리 1 이상의 샘플링 포인트들은 버려지는 것을 정의한 함수를 의미한다.
배럴 왜곡 패턴에 기초한 샘플링 그리드(1110)는 규칙적인 격자 패턴이 아니다. 즉, 배럴 왜곡 패턴에 기초한 샘플링 그리드(1110)는 중심 방향으로 모여지는 형태를 갖는다. 샘플링 포인트들의 위치들은 각각의 격자의 중심 위치에서 결정될 수 있다. 결국, 샘플링 쉐이더(도 5의 150)를 위한 쉐이더 소스 코드(1120)가 실행된 경우, 어안 렌즈(Fisheye lens)로 촬영된 이미지와 같은 왜곡 이미지(1130)가 렌더링될 수 있다.
한편, 앞서 설명된 바와 같이 샘플링 쉐이더(150)는 프로그래머블 쉐이더이므로, 도 11의 쉐이더 소스 코드(1120)외에도, 사용자는 다양한 왜곡 패턴 또는 다양한 샘플링 포인트의 위치를 정의하는 다양한 종류의 쉐이더 소스 코드를 프로그래밍하여 샘플링 쉐이더(150)를 동작시킬 수 있다.
도 12는 일 실시예에 따라 래스터라이저에서 뷰포트 상의 프리미티브에 오버랩된 샘플링 포인트를 탐색하는 방법을 설명하기 위한 도면이다.
도 12를 참고하면, 샘플링 쉐이더(도 5의 150)에 의해 결정된 샘플링 포인트들 (SP1)~(SP11)의 위치 정보는, 버퍼들(도 5의 192) 또는 메모리(도 1의 30)에 저장된다. 래스터라이저(도 5의 160)는 뷰포트(1200) 상의 프리미티브(1210)에 오버랩된 샘플링 포인트를 탐색하기 위하여 버퍼들(192) 또는 메모리(30)로부터 모든 샘플링 포인트들 (SP1)~(SP11)의 위치 정보를 리드할 수 있다. 그리고 나서, 래스터라이저(160)는 프리미티브(1210)의 위치 정보와 샘플링 포인트들 (SP1)~(SP11)의 위치 정보를 비교함으로써, 프리미티브(1210)에 오버랩된 샘플링 포인트들 (SP8), (SP9) 및 (SP10)를 결정할 수 있다.
도 13은 다른 일 실시예에 따라 래스터라이저에서 뷰포트 상의 프리미티브에 오버랩된 샘플링 포인트를 탐색하는 방법을 설명하기 위한 도면이다.
도 13을 참고하면, 래스터라이저(160)는 쿼드트리(quadtree) 알고리즘을 이용하여 뷰포트(1300) 상의 프리미티브에 오버랩된 샘플링 포인트를 탐색할 수 있다. 도 12에서 설명된 바와 같이, 샘플링 쉐이더(도 5의 150)에 의해 결정된 샘플링 포인트들 (SP1)~(SP11)의 위치 정보는, 버퍼들(도 5의 192) 또는 메모리(도 1의 30)에 저장된다. 다만, 도 12와 달리, GPU(도 5의 10)는 쿼드트리 알고리즘을 이용하여, 샘플링 포인트들 (SP1)~(SP11)의 위치들이 속한 영역들 Area 1 내지 Area 4에 대한 정보도 함께 버퍼들(192) 또는 메모리(30)에 저장할 수 있다.
보다 상세하게 설명하면, GPU(10)는 소정의 최대 개수(예를 들어, 2개)를 설정하고, 각 영역에 속한 샘플링 포인트들의 개수가 2개 이하로 될 때까지 영역을 계속적으로 4등분한다. 즉, 뷰포트(1300)의 전체 영역에는 총 11개의 샘플링 포인트들 (SP1)~(SP11)이 존재하므로, GPU(10)는 뷰포트(1300)의 전체 영역을 Area 1, Area 2, Area 3 및 Area 4로 4등분한다. Area 1에는 총 2개의 샘플링 포인트들 (SP1) 및 (SP3)만이 존재하므로, GPU(10)는 Area 1에 대해서는 더 이상 영역을 나누지 않는다. Area 2에는 총 4개의 샘플링 포인트들 (SP2), (SP4), (SP5) 및 (SP6)이 존재하므로, GPU(10)는 Area 2를 Area 2-1, Area 2-2, Area 2-3 및 Area 2-4로 4등분한다. Area 2-1에는 1개의 샘플링 포인트 (SP2)만이 존재하므로, GPU(10)는 Area 2-1에 대해서는 더 이상 영역을 나누지 않는다. 또한, 나머지 Area 2-2 내지 Area 2-4에도 2개 이하의 샘플링 포인트들이 존재하므로, GPU(10)는 Area 2-2 내지 Area 2-4에 대해서도 더 이상 영역을 나누지 않는다. 마찬가지의 방식으로, GPU(10)는 Area 3-1, Area 3-2-1, Area 3-2-2, Area 3-2-3, Area 3-2-4, Area 3-3 및 Area 3-4를 나눈다.
GPU(10)는 쿼드트리 알고리즘에 의해 구분된 영역들 Area 1 내지 Area 4 각각에 속한 샘플링 포인트들에 대한 정보, Area 1 내지 Area 4 각각의 위치 정보를 버퍼들(192) 또는 메모리(30)에 저장한다.
래스터라이저(160)는 프리미티브에 오버랩된 샘플링 포인트를 탐색하기 위하여, 버퍼들(192) 또는 메모리(30)로부터 구분된 영역들 Area 1 내지 Area 4와 관련된 정보를 리드한다. 즉, 도 12와 달리, 도 13의 실시예에 따르면, 래스터라이저(160)는 모든 샘플링 포인트들에 대한 위치 정보를 리드할 필요가 없다. 래스터라이저(160)는 프리미티브(1310)의 위치 정보와 Area 1 내지 Area 4의 위치 정보를 비교함으로써, 프리미티브(1210)에 오버랩된 영역들 Area 1, Area 3-2-1, Area 3-2-2, Area 3-2-3, Area 3-2-4, Area 4를 결정할 수 있다. 그리고 나서, 래스터라이저(160)는 오버랩된 영역들 Area 1, Area 3-2-1, Area 3-2-2, Area 3-2-3, Area 3-2-4, Area 4에 속한 샘플링 포인트들 (SP1), (SP3), (SP7), (SP8), (SP9), (SP10)의 위치 정보와 프리미티브(1310)의 위치 정보를 비교함으로써, 프리미티브(1310)에 오버랩된 샘플링 포인트들 (SP8), (SP9) 및 (SP10)를 결정할 수 있다.
도 13의 실시예에 따르면, 래스터라이저(160)는 쿼드트리 알고리즘을 통해, 불필요한 샘플링 포인트들 (SP2), (SP4), (SP5), (SP6) 및 (SP11)의 위치 정보를 리드하지 않을 수 있다.
다만, 본 실시예에 따른 래스터라이저(160)의 탐색 방식은 어느 하나에 의해 제한되지 않는다.
도 14는 일 실시예에 따라 핀쿠션 왜곡 패턴에 기초한 샘플링 포인트를 이용하여 렌더링된 왜곡 이미지가 HMD 디바이스에서 표시된 경우를 설명하기 위한 도면이다.
도 14를 참고하면, HMD 디바이스(도 3의 300)의 렌즈(320)가 볼록 렌즈인 경우, 디스플레이 패널(330)에는 핀쿠션 왜곡 패턴에 의한 왜곡 이미지가 표시될 수 있다. HMD 디바이스(300)를 위한 GPU(도 1의 10)는 핀쿠션 왜곡 패턴에 기초하여 샘플링 포인트들의 샘플링 그리드(1400)를 결정하고, 이를 이용하여 왜곡 이미지(1410)를 렌더링한다. 핀쿠션 왜곡 패턴에 기초한 왜곡 이미지(1410)가 HMD 디바이스(300)의 디스플레이 패널(330)에 표시될 경우, 사용자는 HMD 디바이스(300)의 렌즈(320)를 통해 왜곡이 없는 이미지(1420)를 시청할 수 있다. 즉, 왜곡 이미지(1415) 상에서 샘플링 포인트들(1415)의 위치들의 왜곡된 픽셀들은, 렌즈(320)를 통과함에 따라 규칙적인 격자 패턴의 스크린 픽셀들(1425)에 대응되는 것으로 보일 수 있다.
도 15a 및 도 15b는 일 실시예들에 따른 싱글샘플링 및 멀티샘플링을 설명하기 위한 도면들이다.
GPU(도 5의 10)는 그래픽스 파이프라인(100)에서 처리될 샘플링 포인트를 위한 멀티샘플링(multisampling)을 인에이블(enable)하거나 또는 디스에이블(disable)할 수 있다.
도 15a를 참고하면, 멀티샘플링이 디스에이블된(disabled)(즉, 싱글샘플링) 경우, 샘플링 쉐이더(도 5의 150)는 한 스크린 픽셀(1510)에 대하여 하나의(single) 샘플링 포인트(1515)만을 결정한다. 하지만, 도 15b를 참고하면, 멀티샘플링이 인에이블된(enabled)(즉, 멀티샘플링) 경우, 샘플링 쉐이더(150)는 한 스크린 픽셀(1520)에 대하여 둘 이상의 멀티 샘플링 포인트들(1525)을 결정할 수 있다. 멀티샘플링이 인에이블되었을 때 스크린 픽셀들 각각에 대해 결정된 둘 이상의 샘플링 포인트들의 배치는, 왜곡 패턴에 의해 스크린 픽셀들 각각이 왜곡된 정도에 비례할 수 있다.
도 16은 다른 실시예에 따라 한 스크린 픽셀에 대하여 컬러 성분마다 서로 다른 샘플링 포인트들의 위치들을 결정하는 것을 설명하기 위한 도면이다.
앞서, 샘플링 쉐이더(도 5의 150)는 컬러 성분에 의한 영향을 고려하지 않고 샘플링 포인트의 위치를 결정하는 것(1610)으로 설명되었다. 하지만, 다른 실시예로서, 샘플링 쉐이더(도 5의 150)는 컬러 성분을 고려하여 샘플링 포인트의 위치를 결정할 수도 있다.
컬러 성분마다 파장이 다르기 때문에, 렌즈를 통과한 각 컬러 성분에 대응되는 빛의 굴절은 서로 다를 수 있다. 컬러 성분들이 R(red), G(green) 및 B(blue)인 경우(1600)를 예로 들면, R의 굴절도, G의 굴절도 및 B의 굴절도는 서로 다르다. 이와 같은 자연적인 현상을 고려하여, 샘플링 쉐이더(150)는 각 컬러 성분마다 서로 다른 오프셋을 보상하여 샘플링 포인트의 위치를 결정할 수 있다. 즉, 각 컬러 성분을 위한 샘플링 그리드(1620)를 참고하면, 샘플링 쉐이더(150)는 컬러 성분 B에 대응되는 샘플링 포인트들 간의 간격은 컬러 성분 G에 대응되는 샘플링 포인트들 간의 간격보다 좁고, 컬러 성분 G에 대응되는 샘플링 포인트들 간의 간격은 컬러 성분 R에 대응되는 샘플링 포인트들 간의 간격보다 좁은 것으로 결정할 수 있다. 샘플링 쉐이더(150)는 한 스크린 픽셀에 대하여, 컬러 성분 B에 대응되는 샘플링 포인트의 위치, 컬러 성분 G에 대응되는 샘플링 포인트의 위치 및 컬러 성분 R에 대응되는 샘플링 포인트의 위치를 별도로 결정할 수 있다. 이에 따라, 픽셀 쉐이더(도 5의 170)는 어느 픽셀에 쉐이딩될 컬러 성분들의 분포에 적합한 컬러 성분별 샘플링 포인트를 선택하여, 해당 픽셀에 대한 픽셀 쉐이딩을 수행할 수 있다.
도 17은 일 실시예에 따른 왜곡 패턴에 따라 미사용 영역(unused region)이 존재하는 경우의 왜곡 이미지의 렌더링을 설명하기 위한 도면이다.
도 17을 참고하면, 디스플레이가 원본 이미지가 아닌, 왜곡 이미지(1700)를 표시할 경우, 미사용 영역(1710)이 존재할 수 있다. GPU(도 5의 10)는, 도 11에서 설명된 바와 같이, 미사용 영역(1710)에 대해서는 래스터라이징, 픽셀 쉐이딩 등과 같은 처리를 스킵함으로써, 연산량을 줄이면서 연산 속도를 증가시킬 수 있다.
도 18은 일 실시예에 따른 샘플링 쉐이더에서 디더링(dithering)을 위한 샘플링 포인트들을 결정하는 것을 설명하기 위한 도면이다.
도 18을 참고하면, 왜곡 이미지(1800)의 렌더링을 위하여 디더링 알고리즘이 이용될 수 있다. 왜곡 이미지(1800)의 일부 영역(1805)을 확대하면, 디더링 알고리즘에 의해 디더링된 픽셀들이 랜덤하게 분포될 수 있다. 샘플링 쉐이더(도 5의 150)는 일부 영역(1805)에 대한 디더링 알고리즘의 적용을 위하여, 일부 영역(1805)에 대해서는 샘플링 그리드(1820)와 같이, 샘플링 포인트들의 위치를 랜덤하게 결정할 수 있다.
도 19는 다른 실시예에 따라 타일 기반 렌더링을 위한 그래픽스 파이프라인의 경우 샘플링 쉐이딩이 활용되는 예를 설명하기 위한 도면이다.
도 19를 참고하면, 그래픽스 파이프라인(100)이 타일 기반 렌더링을 위한 경우, 그래픽스 파이프라인(100)은 타일 비닝(tile binning)을 위한 비닝 파이프라인(100-1) 및 렌더링을 위한 렌더링 파이프라인(100-2)의 2 패스(2-pass)를 포함할 수 있다.
비닝 파이프라인(100-1)은 장면 정보(scene description)를 획득하는 스테이지(1911), 입력 어셈블링(input assembling)(1912), 버텍스 쉐이딩(1913), CCV(culling, cliping, viewport transform)(1914), 비닝(binning)(1917), 비닝(1917)에 의해 결정된 각 타일에 속한 프리미티브에 대한 정보를 타일 비트스트림에 저장하는 스테이지(1918)을 포함한다.
렌더링 파이프라인(100-2)은 장면 정보를 획득하는 스테이지(1921), 입력 어셈블링(1922), 버텍스 쉐이딩(1923), CCV(1924), 래스터라이징(1925), 픽셀 쉐이딩(1926), 래스터 오퍼레이팅(1927) 및 렌더링 이미지를 출력하는 스테이지(1928)을 포함한다.
샘플링 쉐이더(도 5의 150)에 의해 샘플링 포인트(또는 샘플링 포인트의 위치)가 결정되는 샘플링 쉐이딩(1915) 및 왜곡 이미지의 픽셀과 샘플링 포인트를 매핑하는 스테이지(1916)는 비닝 파이프라인(100-1)에서만 수행될 수 있다. 보다 상세하게는, 도 6에 도시된 바와 유사하게, 샘플링 쉐이딩(1915) 및 스테이지(1916)는 비닝(1917)이 수행되기 이전에, 입력 어셈블링(1912), 버텍스 쉐이딩(1913), CCV(1914)와 병렬적으로 수행될 수 있다.
도 20은 일 실시예에 따른 왜곡 이미지의 렌더링을 위한 그래픽스 파이프라인을 수행하는 장치의 블록도이다. 도 20을 참고하면, 그래픽스 파이프라인을 수행하는 장치는 앞서 설명된 GPU(2000)이다. GPU(2000)는 쉐이더(2010) 및 래스터라이저(2020)를 포함한다. GPU(2000)의 쉐이더(2010)는 도 5에서 설명된 GPU(10)의 샘플링 쉐이더(150)에 대응되고, GPU(2000)의 래스터라이저(2020)는 도 5의 GPU(10)의 래스터라이저(160)에 대응된다. 즉, GPU(2000)는 도 5의 GPU(10)의 구성들 중 일부 구성들만을 포함할 수 있는 것으로 도시되었으나, 이에 제한되지 않고 GPU(2000)는 도 5의 GPU(10)의 다른 구성들도 포함할 수 있다.
쉐이더(2010)는 디스플레이(도 1의 40)의 스크린 픽셀들에 대한 정보를 획득한다. 그리고 나서, 쉐이더(2010)는 스크린 픽셀들 각각마다, 렌더링될 이미지를 표현하기 위한 패턴(즉, 왜곡 이미지의 왜곡 패턴)에 기초한 하나 이상의 샘플링 포인트들의 위치를 결정한다.
래스터라이저(2020)는 결정된 샘플링 포인트들 중 래스터라이징될 프리미티브에 오버랩되는 샘플링 포인트의 위치에서 프리미티브에 대응되는 픽셀을 생성한다.
결국, GPU(2000)에 의해 수행될 그래픽스 파이프라인은, 위와 같이 래스터라이저(2020)에 의해 생성된 픽셀을 이용하여 이미지(왜곡 이미지)를 렌더링한다.
도 21은 일 실시예에 따른 왜곡 이미지의 렌더링을 위한 그래픽스 파이프라인을 수행하는 방법의 흐름도이다. 도 21을 참고하면, 그래픽스 파이프라인의 수행 방법은 앞서 설명된 컴퓨팅 장치(1)(GPU(10) 또는 GPU(2000)) 내에서 시계열적으로 처리되는 과정들이므로, 이하 생략된 내용이라 하더라도 앞서 설명된 컴퓨팅 장치(1)(GPU(10) 또는 GPU(2000))에 대해서 설명되었던 내용은 도 21의 그래픽스 파이프라인의 수행 방법에도 적용될 수 있다.
2101 단계에서, 쉐이더(2010)(또는 샘플링 쉐이더(150))는 디스플레이의 스크린 픽셀들에 대한 정보를 획득한다.
2102 단계에서, 쉐이더(2010)(또는 샘플링 쉐이더(150))는 스크린 픽셀들 각각마다, 렌더링될 이미지를 표현하기 위한 패턴에 기초한 하나 이상의 샘플링 포인트들의 위치를 결정한다.
2103 단계에서, 래스터라이저(2020)(또는 래스터라이저(160))는 샘플링 포인트들 중 래스터라이징될 프리미티브에 오버랩되는 샘플링 포인트의 위치에서 프리미티브에 대응되는 픽셀을 생성한다.
2104 단계에서, GPU(2000)(또는 GPU(10))는 생성된 픽셀을 이용하여 이미지(왜곡 이미지)를 렌더링한다.
한편, 상술한 본 발명의 실시예들은 컴퓨터에서 실행될 수 있는 프로그램으로 작성 가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 또한, 상술한 본 발명의 실시예에서 사용된 데이터의 구조는 컴퓨터로 읽을 수 있는 기록매체에 여러 수단을 통하여 기록될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등)와 같은 저장매체를 포함한다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
1: 컴퓨팅 장치 10: GPU
20: CPU 30: 메모리
40: 디스플레이 50: BUS
100: 그래픽스 파이프라인

Claims (20)

  1. 그래픽스 파이프라인을 수행하는 방법에 있어서,
    디스플레이의 스크린 픽셀들에 대한 정보를 획득하는 단계;
    상기 스크린 픽셀들 각각마다, 렌더링될 이미지를 표현하기 위한 패턴에 기초한 하나 이상의 샘플링 포인트들의 위치를 결정하는 단계; 및
    상기 샘플링 포인트들 중 래스터라이징될 프리미티브에 오버랩되는 샘플링 포인트의 위치에서 상기 프리미티브에 대응되는 픽셀을 생성하는 단계를 포함하고,
    상기 그래픽스 파이프라인은, 상기 생성된 픽셀을 이용하여 상기 이미지를 렌더링하고,
    상기 하나 이상의 샘플링 포인트들의 위치를 결정하는 단계를 포함하는 샘플링 쉐이딩 스테이지(sampling shading stage)는 상기 그래픽스 파이프라인 내에서, 래스터라이징(rasterizing) 스테이지 이전에, 버텍스 쉐이딩(vertex shading) 스테이지, 클리핑(clipping) 스테이지 및 프로젝션(projection) 스테이지가 수행되는 동안 병렬적으로 수행되는,
    방법.
  2. 제 1 항에 있어서,
    상기 패턴은
    원본 이미지를 변형하기 위한 왜곡 패턴을 포함하고,
    상기 렌더링될 이미지는
    상기 원본 이미지가 상기 왜곡 패턴에 의해 변형된 왜곡 이미지를 포함하는, 방법.
  3. 제 2 항에 있어서,
    상기 결정하는 단계는
    격자 패턴의 상기 스크린 픽셀들이 상기 왜곡 패턴에 의해 변형되었을 경우 상기 변형된 스크린 픽셀들 각각의 중심(center) 위치에 기초하여, 상기 하나 이상의 샘플링 포인트들의 위치를 결정하는, 방법.
  4. 제 1 항에 있어서,
    상기 획득된 정보는
    상기 디스플레이의 상기 스크린 픽셀들의 해상도를 포함하고,
    상기 결정하는 단계는
    상기 패턴에 기초하여 상기 해상도에 의해 정의된 스크린 픽셀의 위치를 샘플링 포인트의 위치로 변환하는 단계; 및
    상기 렌더링될 이미지의 픽셀의 위치 및 상기 변환된 샘플링 포인트의 위치를 매핑하는 단계를 포함하는, 방법.
  5. 제 1 항에 있어서,
    상기 결정하는 단계는
    사용자 설정에 따라 상기 패턴의 종류 및 상기 샘플링 포인트들의 위치를 변경하여 정의하는 것이 가능한 쉐이더 소스 코드(shader source code)를 처리하는 프로그래머블 스테이지(programmable stage)인, 방법.
  6. 제 1 항에 있어서,
    상기 결정하는 단계는
    멀티샘플링(multisampling)이 인에이블된(enabled) 경우 하나의 스크린 픽셀에 대해 둘 이상의 샘플링 포인트들의 위치들을 결정하고, 상기 멀티샘플링이 디스에이블된(disabled) 경우 상기 하나의 스크린 픽셀에 대해 하나의 샘플링 포인트의 위치를 결정하고,
    상기 멀티샘플링이 인에이블되었을 때 상기 스크린 픽셀들 각각에 대해 결정된 상기 둘 이상의 샘플링 포인트들의 배치는, 상기 패턴에 의해 상기 스크린 픽셀들 각각이 왜곡된 정도에 비례하는, 방법.
  7. 삭제
  8. 제 1 항에 있어서,
    상기 생성하는 단계는
    상기 샘플링 포인트들이 속하는 영역들을 구분하는 쿼드트리(quadtree) 알고리즘을 이용하여 상기 프리미티브에 오버랩되는 상기 샘플링 포인트의 위치를 탐색하는 단계를 포함하는, 방법.
  9. 제 1 항에 있어서,
    상기 결정하는 단계는
    컬러 성분마다 샘플링 포인트의 위치에 서로 다른 오프셋을 적용시켜 상기 샘플링 포인트들의 위치를 결정하는, 방법.
  10. 제 1 항에 있어서,
    상기 결정하는 단계는
    상기 그래픽스 파이프라인이 타일 기반 렌더링을 위한 그래픽스 파이프라인인 경우, 타일 비닝을 위한 패스(pass)에서 수행되는, 방법.
  11. 제 1 항 내지 제 6 항 및 제 8 항 내지 제 10 항 중 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 방법을 기록한 컴퓨터로 읽을 수 있는 기록매체.
  12. 그래픽스 파이프라인을 수행하는 장치에 있어서,
    디스플레이의 스크린 픽셀들에 대한 정보를 획득하고, 상기 스크린 픽셀들 각각마다, 렌더링될 이미지를 표현하기 위한 패턴에 기초한 하나 이상의 샘플링 포인트들의 위치를 결정하는 쉐이더(shader); 및
    상기 샘플링 포인트들 중 래스터라이징될 프리미티브에 오버랩되는 샘플링 포인트의 위치에서 상기 프리미티브에 대응되는 픽셀을 생성하는 래스터라이저(rasterizer)를 포함하고,
    상기 그래픽스 파이프라인은, 상기 생성된 픽셀을 이용하여 상기 이미지를 렌더링하고,
    상기 쉐이더에 의해 수행되는 상기 하나 이상의 샘플링 포인트들의 위치를 결정하기 위한 샘플링 쉐이딩 스테이지(sampling shading stage)는 상기 그래픽스 파이프라인 내에서, 래스터라이징(rasterizing) 스테이지 이전에, 버텍스 쉐이딩(vertex shading) 스테이지, 클리핑(clipping) 스테이지 및 프로젝션(projection) 스테이지가 수행되는 동안 병렬적으로 수행되는, 장치.
  13. 제 12 항에 있어서,
    상기 패턴은
    원본 이미지를 변형하기 위한 왜곡 패턴을 포함하고,
    상기 렌더링될 이미지는
    상기 원본 이미지가 상기 왜곡 패턴에 의해 변형된 왜곡 이미지를 포함하는, 장치.
  14. 제 13 항에 있어서,
    상기 쉐이더는
    격자 패턴의 상기 스크린 픽셀들이 상기 왜곡 패턴에 의해 변형되었을 경우 상기 변형된 스크린 픽셀들 각각의 중심(center) 위치에 기초하여, 상기 하나 이상의 샘플링 포인트들의 위치를 결정하는, 장치.
  15. 제 12 항에 있어서,
    상기 획득된 정보는
    상기 디스플레이의 상기 스크린 픽셀들의 해상도를 포함하고,
    상기 쉐이더는
    상기 패턴에 기초하여 상기 해상도에 의해 정의된 스크린 픽셀의 위치를 샘플링 포인트의 위치로 변환하고, 상기 렌더링될 이미지의 픽셀의 위치 및 상기 변환된 샘플링 포인트의 위치를 매핑하는, 장치.
  16. 제 12 항에 있어서,
    상기 쉐이더는
    사용자 설정에 따라 상기 패턴의 종류 및 상기 샘플링 포인트들의 위치를 변경하여 정의하는 것이 가능한 쉐이더 소스 코드(shader source code)를 처리하는 프로그래머블 쉐이더(programmable shader)를 포함하는, 장치.
  17. 제 12 항에 있어서,
    상기 쉐이더는
    멀티샘플링(multisampling)이 인에이블된(enabled) 경우 하나의 스크린 픽셀에 대해 둘 이상의 샘플링 포인트들의 위치들을 결정하고, 상기 멀티샘플링이 디스에이블된(disabled) 경우 상기 하나의 스크린 픽셀에 대해 하나의 샘플링 포인트의 위치를 결정하고,
    상기 멀티샘플링이 인에이블되었을 때 상기 스크린 픽셀들 각각에 대해 결정된 상기 둘 이상의 샘플링 포인트들의 배치는, 상기 패턴에 의해 상기 스크린 픽셀들 각각이 왜곡된 정도에 비례하는, 장치.
  18. 삭제
  19. 제 12 항에 있어서,
    상기 래스터라이저는
    상기 샘플링 포인트들이 속하는 영역들을 구분하는 쿼드트리(quadtree) 알고리즘을 이용하여 상기 프리미티브에 오버랩되는 상기 샘플링 포인트의 위치를 탐색하고, 상기 탐색 결과에 기초하여 상기 픽셀을 생성하는, 장치.
  20. 제 12 항에 있어서,
    상기 쉐이더는
    컬러 성분마다 샘플링 포인트의 위치에 서로 다른 오프셋을 적용시켜 상기 샘플링 포인트들의 위치를 결정하는, 장치.
KR1020150089092A 2015-06-23 2015-06-23 그래픽스 파이프라인을 수행하는 방법 및 장치 Active KR102465969B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020150089092A KR102465969B1 (ko) 2015-06-23 2015-06-23 그래픽스 파이프라인을 수행하는 방법 및 장치
US15/003,320 US10223761B2 (en) 2015-06-23 2016-01-21 Graphics pipeline method and apparatus
EP16166072.5A EP3121786B1 (en) 2015-06-23 2016-04-19 Graphics pipeline method and apparatus
JP2016123357A JP6749151B2 (ja) 2015-06-23 2016-06-22 グラフィックスパイプラインを遂行する方法及びその装置
CN201610465090.0A CN106296565B (zh) 2015-06-23 2016-06-23 图形管线方法和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150089092A KR102465969B1 (ko) 2015-06-23 2015-06-23 그래픽스 파이프라인을 수행하는 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20170000190A KR20170000190A (ko) 2017-01-02
KR102465969B1 true KR102465969B1 (ko) 2022-11-10

Family

ID=55967013

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150089092A Active KR102465969B1 (ko) 2015-06-23 2015-06-23 그래픽스 파이프라인을 수행하는 방법 및 장치

Country Status (5)

Country Link
US (1) US10223761B2 (ko)
EP (1) EP3121786B1 (ko)
JP (1) JP6749151B2 (ko)
KR (1) KR102465969B1 (ko)
CN (1) CN106296565B (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10102610B2 (en) 2016-04-05 2018-10-16 Qualcomm Incorporated Dual fisheye images stitching for spherical video
US10275928B2 (en) * 2016-04-05 2019-04-30 Qualcomm Incorporated Dual fisheye image stitching for spherical image content
US20180165799A1 (en) * 2016-12-12 2018-06-14 Daniel Pohl Screen matrix rendering in head mounted displays
US10546365B2 (en) * 2017-03-27 2020-01-28 Advanced Micro Devices, Inc. Single pass flexible screen/scale rasterization
US10499042B2 (en) * 2017-04-01 2019-12-03 Intel Corporation Barreling and compositing of images
CN107220925B (zh) * 2017-05-05 2018-10-30 珠海全志科技股份有限公司 一种实时虚拟现实加速方法及装置
CN110335200B (zh) * 2018-03-29 2024-12-10 腾讯科技(深圳)有限公司 一种虚拟现实反畸变方法、装置以及相关设备
CN108769636B (zh) * 2018-03-30 2022-07-01 京东方科技集团股份有限公司 投影方法及装置、电子设备
JP7297412B2 (ja) * 2018-06-13 2023-06-26 キヤノン株式会社 画像処理装置、画像処理方法、およびレンズ装置
US11300385B2 (en) * 2019-01-18 2022-04-12 Zachary Burton Camouflage patterns, arrangements and objects utilizing the same
US11175423B2 (en) * 2019-08-22 2021-11-16 Schlumberger Technology Corporation Real time deformation of seismic slices using programmable shaders
CN111798372B (zh) * 2020-06-10 2021-07-13 完美世界(北京)软件科技发展有限公司 图像渲染方法、装置、设备和可读介质
CN111862343B (zh) * 2020-07-17 2024-02-02 歌尔科技有限公司 一种三维重建方法、装置、设备及计算机可读存储介质
CN112233159B (zh) * 2020-09-23 2021-07-16 华夏芯(北京)通用处理器技术有限公司 纹理处理方法及装置
US12182980B2 (en) * 2021-03-01 2024-12-31 Kyndryl, Inc. Cognitive filtering of content from shared screen display
US11989854B2 (en) 2021-06-23 2024-05-21 Apple Inc. Point-of-view image warp systems and methods
US12026858B2 (en) * 2021-06-23 2024-07-02 Apple Inc. Stacked image warp operations systems and methods
US12106444B2 (en) 2021-06-23 2024-10-01 Apple Inc. Hierarchical grid interpolation systems and methods

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020140706A1 (en) * 2001-03-30 2002-10-03 Peterson James R. Multi-sample method and system for rendering antialiased images
US20070040838A1 (en) * 2005-08-19 2007-02-22 Eric Jeffrey Efficient scaling of image data in graphics display systems
US20150022537A1 (en) * 2013-07-19 2015-01-22 Nvidia Corporation Variable fragment shading with surface recasting

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5809219A (en) 1996-04-15 1998-09-15 Silicon Graphics, Inc. Analytic motion blur coverage in the generation of computer graphics imagery
US6414680B1 (en) * 1999-04-21 2002-07-02 International Business Machines Corp. System, program product and method of rendering a three dimensional image on a display
GB9921777D0 (en) 1999-09-16 1999-11-17 Koninkl Philips Electronics Nv Method and apparatus for handling translucency in 3d graphics
US7194134B2 (en) * 2001-01-02 2007-03-20 Microsoft Corporation Hierarchical, probabilistic, localized, semantic image classifier
WO2005106798A1 (en) * 2004-05-03 2005-11-10 Koninklijke Philips Electronics N.V. Graphics pipeline for rendering graphics
US7532222B2 (en) * 2005-05-09 2009-05-12 Microsoft Corporation Anti-aliasing content using opacity blending
US7456846B1 (en) * 2005-06-03 2008-11-25 Nvidia Corporation Graphical processing system, graphical pipeline and method for implementing subpixel shifting to anti-alias texture
JPWO2007049610A1 (ja) * 2005-10-25 2009-04-30 三菱電機株式会社 画像処理装置
US20090080803A1 (en) * 2007-09-20 2009-03-26 Mitsugu Hara Image processing program, computer-readable recording medium recording the program, image processing apparatus and image processing method
US9177368B2 (en) 2007-12-17 2015-11-03 Nvidia Corporation Image distortion correction
WO2010024919A1 (en) * 2008-08-29 2010-03-04 Thomson Licensing View synthesis with boundary-splatting
US8446433B1 (en) * 2009-06-12 2013-05-21 Lucasfilm Entertainment Company Ltd. Interactive visual distortion processing
KR101331047B1 (ko) 2009-09-01 2013-11-19 한국전자통신연구원 모발 이미지 렌더링 시스템 및 렌더링 방법
KR101681056B1 (ko) * 2010-10-01 2016-12-01 삼성전자주식회사 정점 처리 방법 및 장치
US8605082B2 (en) 2011-04-18 2013-12-10 Brian K. Buchheit Rendering adjustments to autocompensate for users with ocular abnormalities
US8884963B2 (en) * 2011-05-04 2014-11-11 Qualcomm Incorporated Low resolution buffer based pixel culling
KR101524085B1 (ko) 2013-01-04 2015-05-29 삼성메디슨 주식회사 의료 영상 제공 장치 및 방법
KR102327144B1 (ko) * 2014-11-26 2021-11-16 삼성전자주식회사 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020140706A1 (en) * 2001-03-30 2002-10-03 Peterson James R. Multi-sample method and system for rendering antialiased images
US20070040838A1 (en) * 2005-08-19 2007-02-22 Eric Jeffrey Efficient scaling of image data in graphics display systems
US20150022537A1 (en) * 2013-07-19 2015-01-22 Nvidia Corporation Variable fragment shading with surface recasting

Also Published As

Publication number Publication date
JP6749151B2 (ja) 2020-09-02
US10223761B2 (en) 2019-03-05
CN106296565B (zh) 2021-04-27
US20160379335A1 (en) 2016-12-29
KR20170000190A (ko) 2017-01-02
EP3121786A1 (en) 2017-01-25
CN106296565A (zh) 2017-01-04
JP2017010559A (ja) 2017-01-12
EP3121786B1 (en) 2019-10-23

Similar Documents

Publication Publication Date Title
KR102465969B1 (ko) 그래픽스 파이프라인을 수행하는 방법 및 장치
JP6903183B2 (ja) 曲面ビューポート上に頂点の投影を近似することによる、グラフィックス処理における画面位置に基づく有効解像度の変化
US10719912B2 (en) Scaling and feature retention in graphical elements defined based on functions
JP6652257B2 (ja) 複数のレンダーターゲット内でアクティブカラーサンプルカウントを変更することによりスクリーンの位置によって有効解像度を変動させること
US9569811B2 (en) Rendering graphics to overlapping bins
US8035641B1 (en) Fast depth of field simulation
CN106204712B (zh) 分段线性不规则光栅化
US10628995B2 (en) Anti-aliasing of graphical elements defined based on functions
EP2946364B1 (en) Rendering graphics data using visibility information
KR102651126B1 (ko) 그래픽 프로세싱 장치 및 그래픽스 파이프라인에서 텍스처를 처리하는 방법
CN110383337A (zh) 可变速率着色
CN102096907B (zh) 图像处理技术
US20130127858A1 (en) Interception of Graphics API Calls for Optimization of Rendering
US10049486B2 (en) Sparse rasterization
KR20200040883A (ko) 구성가능한 변환 파라미터들을 갖는 다중 공간 렌더링
KR20180056316A (ko) 타일-기반 렌더링을 수행하는 방법 및 장치
US10650579B2 (en) Systems and methods of distance-based shaders for procedurally generated graphics
CN107038740A (zh) 图形处理设备和执行图形管线的方法
US10825238B2 (en) Visual edge rendering using geometry shader clipping
JP2003168130A (ja) リアルタイムで合成シーンのフォトリアルなレンダリングをプレビューするための方法
KR102085701B1 (ko) 이미지를 렌더링하는 방법
WO2022131949A1 (en) A device for performing a recursive rasterization
Chen Rendering in computer graphics

Legal Events

Date Code Title Description
PA0109 Patent application

Patent event code: PA01091R01D

Comment text: Patent Application

Patent event date: 20150623

PG1501 Laying open of application
A201 Request for examination
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20200608

Comment text: Request for Examination of Application

Patent event code: PA02011R01I

Patent event date: 20150623

Comment text: Patent Application

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

Comment text: Notification of reason for refusal

Patent event date: 20210917

Patent event code: PE09021S01D

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

Comment text: Notification of reason for refusal

Patent event date: 20220223

Patent event code: PE09021S01D

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

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20220805

GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20221107

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20221108

End annual number: 3

Start annual number: 1

PG1601 Publication of registration