KR20210087052A - 사후-렌더링 프로세스를 위한 디스플레이 엔진 - Google Patents

사후-렌더링 프로세스를 위한 디스플레이 엔진 Download PDF

Info

Publication number
KR20210087052A
KR20210087052A KR1020217016020A KR20217016020A KR20210087052A KR 20210087052 A KR20210087052 A KR 20210087052A KR 1020217016020 A KR1020217016020 A KR 1020217016020A KR 20217016020 A KR20217016020 A KR 20217016020A KR 20210087052 A KR20210087052 A KR 20210087052A
Authority
KR
South Korea
Prior art keywords
display
color values
pixel
artificial reality
reality scene
Prior art date
Application number
KR1020217016020A
Other languages
English (en)
Inventor
래리 세일러
알렉산더 난커비스
워런 앤드루 헌트
Original Assignee
페이스북 테크놀로지스, 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 페이스북 테크놀로지스, 엘엘씨 filed Critical 페이스북 테크놀로지스, 엘엘씨
Publication of KR20210087052A publication Critical patent/KR20210087052A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • G06T15/205Image-based rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/011Arrangements for interaction with the human body, e.g. for user immersion in virtual reality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/011Arrangements for interaction with the human body, e.g. for user immersion in virtual reality
    • G06F3/013Eye tracking input arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/02Non-photorealistic rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • G06T19/006Mixed reality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/14Transformations for image registration, e.g. adjusting or mapping for alignment of images

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Human Computer Interaction (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Processing Or Creating Images (AREA)
  • Pharmaceuticals Containing Other Organic And Inorganic Compounds (AREA)

Abstract

일 실시예에서, 방법은 인공 현실 장면의 하나 이상의 표면들을 액세스하는 것을 포함한다. 하나 이상의 표면들은 제 1 레이트로 렌더링된 인공 현실 장면의 하나 이상의 이미지들에 기초하여 및 제 1 뷰잉 위치에 기초하여 생성된다. 방법은 제 1 레이트보다 높은 제 2 레이트로 서브프레임들을 생성하는 것을 포함한다. 서브프레임들의 각각은 제 2 뷰잉 위치를 결정하고, 제 2 뷰잉 위치로부터 인공 현실 장면의 하나 이상의 표면들의 가시성을 결정하고, 결정된 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하며, 디스플레이를 위한 서브프레임의 컬러 값들을 제공함으로써 생성된다.

Description

사후-렌더링 프로세스를 위한 디스플레이 엔진
본 개시는 일반적으로 인공 현실 장면을 위한 그래픽들을 생성하는 것에 관한 것이다.
인공 현실은 몰입형 방식으로 사용자에 대한 컴퓨터-생성된 그래픽들의 디스플레이를 수반한다. 목적은 사용자로 하여금 마치 그들이 그들 앞에 세상에 존재했던 것처럼 컴퓨터-생성된 그래픽들을 경험하게 하는 것이다. 인공 현실을 위한 컴퓨터-생성된 그래픽들을 렌더링하는 것은 계산-집약적 태스크이며, 종종 값비싸고 특수화된 하드웨어를 요구한다. 이것은 사용자에게 디스플레이된 그래픽들이 매우 높은 품질이어야 한다는 요건에 적어도 부분적으로 기인한다. 사용자가, 그래픽들이 그들 주위의 세상을 나타내거나, 또는 그것의 일부라고 믿기 위해, 그래픽들은 그럴듯하게 높은 품질이어야 한다. 그래픽들 또는 그래픽들을 투영하기 위해 사용된 디스플레이가 사용자로 하여금 픽셀들 간의 라인들을 보도록 허용하는, 스크린-도어 효과는 임의의 몰입감을 망칠 수 있다. 더욱이, 인공 현실 장면들에 대한 그래픽들은 종종 상호 작용적이다 - 사용자가 가상 공간에서 "이동할" 때, 공간은 그것들과 함께 또는 그것들에 응답하여 이동한다. 사용자의 움직임, 또는 움직임 명령, 및 상기 움직임의 효과들을 디스플레이하는 것 간의 대기시간은 가상-현실 메스꺼움과 같은, 사용자에 대한 큰 불편함을 야기할 수 있다. 사용자의 움직임들이 통상적으로 예측 가능하지 않기 때문에, 인공 현실 장면의 대부분의 구성요소들을 사전-렌더링하는 것은 비현실적이다.
본 발명은 인공 현실 장면을 위한 그래픽들을 생성하는 것에 관한 것이다.
헤드-마운트 디스플레이를 착용한 사용자에 대한 인공 현실 장면을 생성하기 위한 시스템 및 방법이 설명된다. 시스템은 다수의 렌더링 구성요소들을 포함할 수 있어서, 렌더링 책임들이 적어도 1차 렌더링 구성요소와 헤드-마운트 디스플레이의 디스플레이 엔진 사이에서 나뉘도록 한다. 1차 렌더링 구성요소는 통상적인 상호 작용적 그래픽 렌더링의 범위에서의 예상된 출력을 갖고, 프리미티브 해석 및 음영과 같은 계산이 많은 그래픽 렌더링 스테이지들을 핸들링할 수 있다. 1차 렌더링 구성요소는 하나 이상의 특수화된 오브젝트 프리미티브들(또한, 본 출원에서 "표면들"로 불리움)을 출력하거나, 또는 디스플레이 엔진에 의해, 인공 현실 장면에서 하나 이상의 오브젝트 프리미티브들에 대한 위치 및 텍스처 데이터를 포함한 이러한 표면들로 만들어진 이미지들을 출력할 수 있다. 디스플레이 엔진은 오브젝트 프리미티브들을 수신하고, 뷰어 관점에서 변화들을 반영하며 및/또는 디스플레이-디바이스 특성들을 수용하기 위해 그것들의 외형들을 업데이트하며 개선하고, 렌더링을 마무리지으며 사용자에 대한 디스플레이를 위한 결과를 준비할 수 있다.
디스플레이 엔진은 디스플레이될 이미지를 렌더링할 때 특정 단계들을 다루기 위해 다수의 하드웨어 블록들을 가진, 다수의 스테이지들을 포함할 수 있다. 디스플레이 엔진은 오브젝트 프리미티브들 및 임의의 수반된 렌더링 지시들을 수신하는 제어 블록을 포함할 수 있다. 제어 블록은 디스플레이 엔진의 다른 블록들에 의해 사용될 하나 이상의 공유 메모리들을 준비할 수 있다. 제어 블록은 하나 이상의 메모리들로의 텍스처 데이터의 로딩을 가능하게 할 수 있다. 제어 블록은 그래픽 렌더링 파이프라인을 초기화하기 위한 지시를 포함한, 지시들을 디스플레이 엔진의 다른 블록들로 제공할 수 있다.
디스플레이 엔진은 인공 현실 장면에서 오브젝트 프리미티브들에 대한 초기 가시성을 결정하는 변환 블록을 포함할 수 있다. 변환 블록은 오브젝트 프리미티브들을 재-샘플링하기 위해 인공 현실을 보는 사용자의 관점으로부터 광선투사를 수행할 수 있다. 변환 블록은 디스플레이에 의해 야기된 하나 이상의 효과들을 근사하거나 또는 정정하기 위해 광선투사에서 사용된 광선들을 워핑할(warp) 수 있다. 이들 효과들은 디스플레이에서 사용된 하나 이상의 렌즈들 상에서 워핑 효과에서 기인한 하나 이상의 기하학적 왜곡들을 포함할 수 있다. 변환 블록은 임의의 광선들이 장면에서 오브젝트 프리미티브에 교차하는지를 결정하며 오브젝트 프리미티브의 뷰 좌표 공간에서 텍스처 좌표 공간으로 임의의 광선-오브젝트-프리미티브 교차들에 대한 위치 정보를 변환할 수 있다.
디스플레이 엔진은 디스플레이의 하나 이상의 픽셀들에 대한 픽셀 컬러 값을 효율적으로 결정하는 픽셀 블록을 포함할 수 있다. 픽셀 블록은 변환 블록으로부터 교차 정보(예컨대, 투사된 광선들 및 오브젝트 프리미티브들 간의 교차들)를 수신할 수 있다. 픽셀 블록은 픽셀 컬러 값들 중 하나 이상에 대한 이중선형 보간을 수행하기 위해 오브젝트 프리미티브와 연관된 텍스처 데이터를 참조할 수 있다.
디스플레이 엔진은 픽셀 컬러 값들을 수신하며 디스플레이로의 출력을 위한 픽셀 컬러 값들을 마무리 짓는 디스플레이 블록을 포함할 수 있다. 디스플레이 블록은 디스플레이에 의해 요구된 포맷 또는 정렬로 픽셀 컬러 값들을 변환할 수 있다. 디스플레이 블록은 하나 이상의 밝기 정정 효과들을 적용할 수 있다. 밝기 정정 효과들은 지각 인코딩 또는 디더링과 같은 이미지의 품질을 개선하기 위한 기술들을 포함할 수 있다. 밝기 정정 효과들은 디스플레이 및 그것의 구성요소들이 어떻게 제조되는지, 또는 이미지들이 어떻게 사용자에게 디스플레이되는지에 의해 야기된, 디스플레이에서의 불규칙성들을 처리하고 정정할 수 있다.
본 발명의 실시예들은 인공 현실 시스템을 포함하거나, 또는 그것과 함께 구현될 수 있다. 인공 현실은 사용자에 대한 프리젠테이션 전에 몇몇 방식으로 조정되어 온 현실의 형태이며, 이것은 예컨대, 가상 현실(VR), 증강 현실(AR), 혼합 현실(MR), 하이브리드 현실, 또는 그것의 몇몇 조합 및/또는 파생물들을 포함할 수 있다. 인공 현실 콘텐트는 완전히 생성된 콘텐트 또는 캡처된 콘텐트(예컨대, 실-세계 사진들)와 조합된 생성된 콘텐트를 포함할 수 있다. 인공 현실 콘텐트는 비디오, 오디오, 햅틱 피드백, 또는 그것의 몇몇 조합을 포함할 수 있으며, 그 중 임의의 것은 단일 채널에 또는 다수의 채널들(뷰어에게 3-차원 효과를 생성하는 스테레오 비디오와 같은)에서 제공될 수 있다. 부가적으로, 몇몇 실시예들에서, 인공 현실은 예컨대, 인공 현실에서 콘텐트를 생성하기 위해 사용되며 및/또는 인공 현실에서 사용되는(예컨대, 그것에서 활동들을 수행하는) 애플리케이션들, 제품들, 액세서리들, 서비스들, 또는 그것의 몇몇 조합과 연관될 수 있다. 인공 현실 콘텐트를 제공하는 인공 현실 시스템은 호스트 컴퓨터 시스템에 연결된 헤드-마운트 디스플레이(HMD), 독립형 HMD, 이동 디바이스 또는 컴퓨팅 시스템, 또는 하나 이상의 뷰어들에게 인공 현실 콘텐트를 제공할 수 있는 임의의 다른 하드웨어 플랫폼을 포함한, 다양한 플랫폼들 상에서 구현될 수 있다.
여기에서 개시된 실시예들은 단지 예들이며, 본 개시의 범위는 그것들에 제한되지 않는다. 특정한 실시예들은 여기에서 개시된 실시예들의 구성요소들, 요소들, 특징들, 기능들, 동작들, 또는 단계들의 모두, 또는 일부를 포함하거나, 또는 포함하지 않을 수 있다. 본 발명에 따른 실시예들은 방법, 저장 매체, 시스템 및 컴퓨터 프로그램 제품에 관한 첨부된 청구항들에서 특히 개시되며, 여기에서 하나의 청구항 카테고리, 예컨대 방법에서 언급된 임의의 특징은 또 다른 청구항 카테고리, 예컨대 시스템에서 또한 주장될 수 있다. 첨부된 청구항들에서 종속성들 또는 역 참조는 단지 형식적인 이유들로 택하여진다. 그러나, 임의의 이전 청구항들(특히 다수의 종속성들)에 대한 의도적인 역 참조에서 기인한 임의의 주제가 또한 주장될 수 있으며, 따라서 청구항들의 임의의 조합 및 그것의 특징들이 개시되며 첨부된 청구항들에서 택해진 종속성들에 관계없이 주장될 수 있다. 주장될 수 있는 주제는 첨부된 청구항들에 제시된 바와 같은 특징들의 조합들뿐만 아니라 또한 청구항들에서의 특징들의 임의의 다른 조합을 포함하며, 여기에서 청구항들에서 언급된 각각의 특징은 청구항들에서의 임의의 다른 특징 또는 다른 특징들의 조합과 조합될 수 있다. 더욱이, 여기에서 설명되거나 또는 묘사된 실시예들 및 특징들 중 임의의 것은 별개의 청구항에서 및/또는 여기에서 설명되거나 또는 묘사된 임의의 실시예 또는 특징과 또는 첨부된 청구항들의 특징들 중 임의의 것과 임의로 조합하여 주장될 수 있다.
본 발명의 양상에 따르면, 방법이 제공되고 있으며, 상기 방법은, 컴퓨팅 시스템에 의해: 인공 현실 장면의 하나 이상의 표면들을 액세스하는 것으로서, 상기 하나 이상의 표면들은 제 1 레이트로 렌더링된 인공 현실 장면의 하나 이상의 이미지들에 기초하여 및 제 1 뷰잉 위치(first viewing position)에 기초하여 생성되는, 상기 인공 현실 장면의 하나 이상의 표면들을 액세스하는 것; 상기 제 1 레이트보다 높은 제 2 레이트로 서브프레임들을 생성하는 것으로서, 상기 서브프레임들의 각각은: 제 2 뷰잉 위치를 결정하고; 상기 제 2 뷰잉 위치로부터 인공 현실 장면의 하나 이상의 표면들의 가시성을 결정하고, 상기 결정된 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들(output positions)에 대응하는 서브프레임의 컬러 값들을 생성하며; 디스플레이를 위해 서브프레임의 컬러 값들을 제공함으로써 생성되는, 상기 서브프레임들을 생성하는 것을 포함한다.
제 2 뷰잉 위치로부터 인공 현실 장면의 하나 이상의 표면들의 가시성을 결정하는 것은 바람직하게는: 제 2 뷰잉 위치에 기초하여 인공 현실 장면으로의 투사를 위한 광선들을 생성하는 것; 인공 현실 장면으로의 광선 각각의 궤적을 수정하기 위해 광선들에 기하학적 변환을 적용하는 것; 및 수정된 광선들의 궤적들에 기초하여, 인공 현실 장면에서 하나 이상의 표면들과 광선들의 교차점들을 결정하는 것을 포함한다.
결정된 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하는 것은 바람직하게는: 교차된 표면들의 표면 텍스처의 표면 좌표들에 상기 교차점들에 대한 좌표들을 매핑하는 것; 표면 좌표들에서 교차된 표면들의 표면 텍스처 데이터로부터 컬러 값들을 액세스하는 것; 및 교차점들에 기초하여 액세스된 컬러 값들을 보간하는 것을 포함한다.
결정된 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하는 것은, 몇몇 실시예들에서, 컬러 값들에 하나 이상의 그래픽 조정들을 적용하는 것을 포함할 수 있으며, 상기 그래픽 조정들은: 밝기 조정; 디더링; 포비티드(foveated) 렌더링; 또는 지각 압축 렌더링을 포함한다.
몇몇 실시예들에서, 광선들은 디스플레이 시스템의 픽셀들에 대응할 수 있다.
광선들은 디스플레이 시스템의 픽셀들의 컬러 채널들에 대응할 수 있다.
바람직하게는, 하나 이상의 표면들은 인공 현실 장면에서 표면에 대한 텍스처 데이터 및 표면의 위치(a position of the surface)에 대한 장소 데이터(location data)를 포함한다.
인공 현실 장면의 하나 이상의 이미지들은 바람직하게는 컴퓨팅 시스템과는 별개인 또 다른 컴퓨팅 시스템에 의해 렌더링된다.
바람직하게는, 컴퓨팅 시스템은 다른 컴퓨팅 시스템과 무선 통신한다.
컴퓨팅 시스템은 바람직하게는 헤드-마운트 디스플레이 유닛으로 통합된다.
컴퓨팅 시스템은 바람직하게는 서브프레임들을 생성하기 위한 디스플레이 엔진을 포함하며, 디스플레이 엔진은: 제 2 뷰잉 위치로부터 하나 이상의 표면들의 가시성을 결정하기 위한 변환 블록; 컬러 값들의 보간을 수행하기 위한 픽셀 블록; 및 컬러 값들에 그래픽 조정들을 적용하기 위한 디스플레이 블록을 포함한다.
제 2 뷰잉 위치는 바람직하게는: 아이-트래킹(eye-tracking) 구성요소; 또는 모션 트래킹(motion tracking) 구성요소로부터 수신된 데이터에 기초하여 결정된다.
본 발명의 추가 양상에 따르면, 소프트웨어를 구체화한 하나 이상의 컴퓨터-판독 가능한 비-일시적 저장 매체가 제공되고 있으며, 상기 소프트웨어는 실행될 때: 인공 현실 장면의 하나 이상의 표면들을 액세스하는 것으로서, 상기 하나 이상의 표면들은 제 1 레이트로 렌더링된 인공 현실 장면의 하나 이상의 이미지들에 기초하여 및 제 1 뷰잉 위치에 기초하여 생성되는, 상기 하나 이상의 표면들을 액세스하고; 제 1 레이트보다 높은 제 2 레이트로 서브프레임들을 생성하는 것으로서, 상기 서브프레임들의 각각은: 제 2 뷰잉 위치를 결정하고; 상기 제 2 뷰잉 위치로부터 인공 현실 장면의 하나 이상의 표면들의 가시성을 결정하고; 상기 결정된 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하며; 디스플레이를 위해 서브프레임의 컬러 값들을 제공함으로써 생성되는, 상기 서브프레임들을 생성하도록 동작 가능하다.
소프트웨어는 바람직하게는 제 1 뷰잉 위치로부터 인공 현실 장면의 하나 이상의 표면들의 가시성을 결정하도록 동작 가능할 수 있으며 또한: 제 2 뷰잉 위치에 기초하여 인공 현실 장면으로 투사하기 위한 광선들을 생성하고; 인공 현실 장면으로의 광선 각각의 궤적을 수정하기 위해 광선들에 기하학적 변환을 적용하며; 수정된 광선들의 궤적들에 기초하여, 인공 현실 장면에서 하나 이상의 표면들과 광선들의 교차점들을 결정하도록 동작 가능하다.
소프트웨어는 몇몇 실시예들에서, 결정된 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하도록 동작 가능할 수 있으며, 또한: 교차점들에 대한 좌표들을 교차된 표면들의 표면 텍스처의 표면 좌표들에 매핑하고; 표면 좌표들에서 교차된 표면들의 표면 텍스처 데이터로부터 컬러 값들을 액세스하며; 교차점들에 기초하여 액세스된 컬러 값들을 보간하도록 동작 가능하다.
바람직하게는, 소프트웨어는 결정된 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하도록 동작 가능하며, 또한 컬러 값들에 하나 이상의 그래픽 조정들을 적용하도록 동작 가능하고, 상기 그래픽 조정들은: 밝기 조정; 디더링; 포비티드 렌더링; 또는 지각 압축 렌더링을 포함한다.
본 발명의 추가 양상에 따르면, 시스템이 제공되고 있으며, 상기 시스템은: 하나 이상의 프로세서들; 및 상기 프로세서들 중 하나 이상에 결합되며 지시들을 포함한 하나 이상의 컴퓨터-판독 가능한 비-일시적 저장 매체로서, 상기 지시들은 상기 프로세서들 중 하나 이상에 의해 실행될 때, 상기 시스템으로 하여금: 인공 현실 장면의 하나 이상의 표면들을 액세스하게 하는 것으로서, 상기 하나 이상의 표면들은 제 1 레이트로 렌더링된 인공 현실 장면의 하나 이상의 이미지들에 기초하여 및 제 1 뷰잉 위치에 기초하여 생성되는, 상기 하나 이상의 표면들을 액세스하게 하고; 제 1 레이트보다 높은 제 2 레이트로 서브프레임들을 생성하게 하는 것으로서, 상기 서브프레임들의 각각은: 제 2 뷰잉 위치를 결정하고; 상기 제 2 뷰잉 위치로부터 인공 현실 장면의 하나 이상의 표면들의 가시성을 결정하고; 상기 결정된 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하며; 디스플레이를 위해 상기 서브프레임의 컬러 값들을 제공함으로써 생성되는, 상기 서브프레임들을 생성하게 하도록 동작 가능한, 상기 하나 이상의 컴퓨터-판독 가능한 비-일시적 저장 매체를 포함한다.
바람직하게는, 상기 지시들은 상기 시스템으로 하여금 제 2 뷰잉 위치로부터 인공 현실 장면의 하나 이상의 가시성을 결정하게 하도록 동작 가능하며, 또한 프로세서들 중 하나 이상에 의해 실행될 때, 상기 시스템으로 하여금: 제 2 뷰잉 위치에 기초하여 인공 현실 장면으로 투사하기 위한 광선들을 생성하게 하고; 인공 현실 장면으로의 광선 각각의 궤적을 수정하기 위해 광선들에 기하학적 변환을 적용하게 하며; 수정된 광선들의 궤적에 기초하여, 인공 현실 장면에서 하나 이상의 표면들과 광선들의 교차점들을 결정하게 하도록 동작 가능하다.
몇몇 실시예들에서, 지시들은 시스템으로 하여금 결정된 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하게 하도록 동작 가능할 수 있으며, 또한 프로세서들 중 하나 이상에 의해 실행될 때 시스템으로 하여금: 교차점들에 대한 좌표들을 교차된 표면들의 표면 텍스처의 표면 좌표들에 매핑하게 하고; 표면 좌표들에서 교차된 표면들의 표면 텍스처 데이터로부터 컬러 값들을 액세스하게 하며; 교차점들에 기초하여 액세스된 컬러 값들을 보간하게 하도록 동작 가능하다.
몇몇 실시예들에서, 지시들은 시스템으로 하여금, 결정된 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하게 하도록 동작 가능할 수 있으며, 또한 프로세서들 중 하나 이상에 의해 실행될 때 시스템으로 하여금 컬러 값들에 하나 이상의 그래픽 조정들을 적용하게 하도록 동작 가능하며, 상기 그래픽 조정들은: 밝기 조정; 디더링; 포비티드 렌더링; 또는 지각 압축 렌더링을 포함한다.
본 발명의 임의의 양상의 특징들은, 적절한 경우, 다른 양상들 중 임의의 것 중 하나 이상과 조합 가능할 수 있다는 것이 이해될 것이다.
본 발명에 따르면, 컴퓨터 생성된 그래픽들의 매끄럽고 끊김 없는 움직임을 가진 고 품질 인공 현실 경험을 사용자를 위해 생성할 수 있다.
도 1은 인공 현실 렌더링 및 디스플레이 시스템에 대한 예시적인 고-레벨 아키텍처를 예시한다.
도 2는 디스플레이 엔진에 대한 예시적인 고-레벨 아키텍처를 예시한다.
도 3은 예시적인 제어 블록을 예시한다.
도 4는 예시적인 변환 블록을 예시한다.
도 5는 예시적인 픽셀 블록을 예시한다.
도 6은 예시적인 디스플레이 블록을 예시한다.
도 7은 예시적인 광선투사 구성을 예시한다.
도 8은 예시적인 광선투사 구성을 예시한다.
도 9는 인공 현실 시스템의 디스플레이 엔진을 갖고 그래픽들을 생성하기 위한 예시적인 방법을 예시한다.
도 10은 표면 가시성을 결정하기 위한 예시적인 방법을 예시한다.
도 11은 출력을 위한 픽셀 컬러 값들을 준비하기 위한 예시적인 방법을 예시한다.
도 12는 예시적인 컴퓨터 시스템을 예시한다.
인공 현실 디바이스들이 실 세계의 뷰로 디지털 장면들 또는 겹쳐진 컴퓨터-생성 화상을 생성하는 것을 수반하기 때문에, 그것들은 새로운 형태들의 정보, 엔터테인먼트, 또는 공동 작업의 방법들을 제공하기 위해 설계자들 및 엔지니어들을 위한 플랫폼을 제공한다. 예를 들어, 인공 현실 디바이스들은 사용자들로 하여금 장거리에 걸쳐, 겉보기에는 직접 통신하거나, 또는 눈에 띄지 않은 방식으로 그것들 주위에 있는 환경에 대해 알림으로써 사용자들을 돕도록 허용할 수 있다. 인공 현실 경험들이 종종 맞춤화될 수 있기 때문에, 인공 현실을 이용한 사용자의 경험은 충분한 명확도 및 편리함을 제공받는다면 크게 개인적이며 매우 매력적일 수 있다.
인공 현실 경험이 인간 능력을 증대시킬 수 있는 하나의 방식은 증강 또는 혼합 현실에서처럼 실세계에 부가된 컴퓨터-생성된 이미지들 및/또는 텍스트를 갖는 것이다. 이러한 단순한 원리로부터, 다양한 강력한 사용 경우들이 고려될 수 있다. 실-세계 오브젝트를 기술하는 라벨들(예컨대, 텍스트들, 글리프들(glyphs) 등) 또는 이미지들은 세계 공간에서 고정될 수 있거나(예컨대, 위치-인식 라벨들은 거리 게시판들로서 동작하거나 또는 바이크 경로의 라이브 맵을 제공한다), 또는 이미지들은 그것이 공간을 통해 이동함에 따라 실-세계 오브젝트에 고정된다(예컨대, 라벨은 그것이 그것의 루트 또는 용량에 대한 상세한 정보를 제공하는 그것의 루트에 들어갈 때 버스에 부가된다). 라벨들은 또한 친근하지 않은 도시를 통해 사용자가 내비게이팅하는 것을 돕거나(예컨대, 가장 가까운 화장실에 대한 지상점을 생성하는), 또는 군중 속에서 친구를 찾도록 돕기 위해(예컨대, 또 다른 사용자에게 고정된 사회적-인식 지상점) 사용될 수 있다. 고려할 가치가 있는 다른 경험들은 실-세계 오브젝트들과의 상호작용들에 기초할 수 있다. 예를 들어, 사용자는 비디오가 단지 그녀 스스로에게만 또는 공유된 증강 공간으로의 액세스를 가진 다른 사람들에게 플레이되고 가시적이도록 허용하는 벽 또는 스크린으로 비디오를 "투영"할 수 있다. 또 다른 예로서, 사용자는 증강-현실 서적 또는 잡지로서 동작하도록 컴퓨터-생성 텍스트를 물리적 오브젝트에 고정시킬 수 있다. 콘텐트는 오브젝트에 대해 디스플레이될 수 있거나(증강-현실에 따로 물적 자산에 대해 사용자를 허용하는) 또는 사용자들에 대해 고정된 관계로 디스플레이될 수 있다(예컨대, 뷰의 코너에서 항상 플레이하는 튜토리얼 비디오). 제공된 매체는 사용자에게 맞춤화될 수 있으며, 따라서 동일한 콘텐트 디스플레이 공간은 동일한 물리적 공간을 보는 각각의 사람에 콘텐트 관련될 수 있다. 또 다른 예로서, 사용자는 아이콘을 "터치"하거나, 또는 컴퓨터-생성된 이미지들을 수동으로 "조작"함으로써 컴퓨터-생성된 그래픽들과 상호작용할 수 있다. 이들 그래픽들은 다수의 사용자들이 프로젝트 상에서 작업하여, 팀 공동 작업(예컨대, 다수의 건축가들이 실시간으로 함께 빌딩에서의 3-차원 디지털 프로토타입에 대해 작업하는)에 대한 기회들을 가능화하는 것으로 도시될 수 있다.
사용을 가능하게 하기 위해, 컴퓨터-생성된 그래픽들을 출력하는 디스플레이는 직관적이고, 항상 액세스 가능하며, 두드러지지 않아야 한다. 고 화질 인공 현실 그래픽들을 사용자에게 디스플레이하는 것에 대한 하나의 접근법은 헤드-마운트 디스플레이이다. 사용자는, 컴퓨터 그래픽 디스플레이를 디스플레이할 수 있는 바이저(visor), 헤드셋, 또는 안경과 같은, 장치를 착용한다. 증강 또는 혼합 현실 경험들에서, 컴퓨터 그래픽들은 물리적 세계와 함께, 또는 그것의 최상부 상에 보여질 수 있다. 그러나, 이들 컴퓨터 그래픽들을 렌더링하는 것은 계산 집약적이다. 그러므로, 대부분의 경우들에서, 렌더링은 헤드-마운트 디스플레이에 통신적으로 접속된(예컨대, 케이블 또는 블루투스와 같은, 무선 통신 프로토콜을 통해) 강력한 컴퓨터들에 의해 수행된다. 이러한 구성에서, 헤드-마운트 디스플레이는 부피가 큰 코드들, 대역폭 및 전력 제한들, 열 제한들, 및 다른 관련된 제약들에 의해 제한된다. 그러나, 이들 제약들의 한계들은 넘어서게 된다. 하루 종일의 착용에 충분히 편안하고 효율적이지만, 정교한 그래픽들을 디스플레이하기에 충분히 강력한 헤드-마운트 디스플레이들이 현재 개발되고 있다.
겉보기 디스플레이 크기에 영향을 주지 않고 실제 디스플레이 크기를 감소시키기 위해 사용된 하나의 기술은 스캐닝 디스플레이로서 알려져 있다. 스캐닝 디스플레이에서, 다수의 더 작은 이미지들은 더 큰 합성 이미지를 형성하기 위해 조합된다. 스캐닝 디스플레이는 이미지를 생성하고 출력하기 위해 소스 광, 반사기들을 포함한 하나 이상의 스캐닝 요소들, 및 광학 시스템을 사용한다. 출력 이미지 광은 사용자의 눈으로 출력될 수 있다. 소스 광은 발광 다이오드들(LED들)과 같은, 이미터들에 의해 제공될 수 있다. 예를 들어, 광원은 2560x1440 LED들의 어레이일 수 있다. 반사기들은 스캐닝 요소에 부착된 임의의 적절한 반사성 표면일 수 있다. 특정한 실시예들에서, 스캐닝 요소는 하나 이상의 미세전자기계 시스템들(MEMS) 구성요소들을 사용하여 구동되는 스캐닝 미러일 수 있다. 광학 시스템은 광을 집중시키고, 재지향시키며, 그 외 증대시키기 위해 사용된 렌즈들을 포함할 수 있다. 스캐닝 요소는 광 유도 구성요소들에 의해 처리된, 소스 광이 디스플레이 드로(draw) 게이트를 최적화하기 위해 이미터들에 의해 사용된 생성 패턴에 대응하는 특정 패턴으로 사용자의 눈에 출력되게 할 수 있다. 예를 들어, 모든 이미터들이 즉시 활성일 필요는 없기 때문에, 및 다양한 다른 인자들 외에, 스캐닝 디스플레이들은 동일한 이미터들로 구성된 종래의 디스플레이보다, 구동하는데 적은 전력을 요구할 수 있으며 더 적은 열을 발생시킬 수 있다. 그것들은 부분적으로 스캐닝 요소 및 광학 시스템에서 사용된 재료들의 품질 때문에, 또한 더 적은 중량을 가질 수 있다. 스캐닝 디스플레이를 사용한 하나의 결과는 예컨대, 전력, 중량, 및 열 효율 대신에, 스캐닝 디스플레이들이 그것들에 제공된 것처럼 이미지들, 예컨대 종래의 디스플레이들을 위해 의도된 이미지들을 완벽하게 디스플레이하지 않을 수 있다는 점이다. 이미지들의 기하학적 워핑 및 컬러들 및 구체적으로 밝기의 왜곡과 같은 균일하지 않은 왜곡들이 있을 수 있다. 여기에서 추가로 설명되는 바와 같이, 이들 왜곡들은 그것들이 디스플레이로 전달되기 전에 왜곡에 대응하기 위해 디스플레이될 그래픽들을 사후-프로세싱함으로써 정정되어, 왜곡이 없는 효과를 생성할 수 있다. 본 개시는 특정한 방식으로 디스플레이들을 설명하지만, 본 개시는 임의의 적절한 디스플레이들을 고려한다.
그 존재 이래, 인공 현실(예컨대, AR, VR, MR) 기술은 AR/VR/MR 장면의 사용자 관점에서의 갑작스러운 변화들에 응답하여 AR/VR/MR 오브젝트들을 렌더링할 때 대기시간의 문제로 괴로움을 겪었다. 몰입형 환경을 생성하기 위해, 사용자들은 장면을 볼 때 그들의 머리들을 움직일 수 있을 필요가 있으며 환경은 사용자에게 제공된 뷰를 조정함으로써 즉시 응답할 필요가 있을 수 있다. 각각의 머리 움직임은 장면의 사용자 관점을 약간 변경할 수 있다. 이들 머리 움직임들은 작지만 산발적이고 예측하기 어려울 수 있다(불가능하지 않지만). 해결될 문제는 머리 움직임들이 빨리 발생할 수 있어서, 장면의 뷰가 머리 움직임들과 함께 발생한 관점에서의 변화들을 감안하도록 빠르게 수정되는 것을 요구한다는 것이다. 이것이 충분히 빠르게 행해지지 않는다면, 결과적인 대기시간은 사용자로 하여금 가상 현실 메스꺼움 또는 불편함을 야기할 수 있는 감각 부조화, 또는 적어도 경험의 몰입적 특징에 대한 방해를 경험하게 할 수 있다. 관점에서의 이들 변화들을 감안하기 위해 전체적으로 뷰를 재-렌더링하는 것은 리소스 집약적일 수 있으며, 단지 비교적 낮은 프레임 레이트(예컨대, 60Hz, 또는 1/60초마다 한 번)로 그렇게 하는 것이 가능할 수 있다. 그 결과, 사용자가 대기시간을 지각하는 것을 방지하며 그에 의해 감각 부조화를 피하거나 또는 충분히 감소시키기 위해 충분히 빠른(예컨대, 200Hz, 또는 1/200초마다 한 번) 페이스로 관점에서의 변화들을 감안하기 위해 전체 장면을 재-렌더링함으로써 장면을 수정하는 것은 실현 가능하지 않을 수 있다. 하나의 솔루션은 "표면들", 즉 장면 내에서 오브젝트의 특정한 뷰를 나타내는 특수하게 구성된 오브젝트 프리미티브들을 갖고 생성하고 작동하는 것을 수반하며, 여기에서 표면은 관점에서의 변화의 결과로서, 하나의 단위로서, 이동/이전하고, 스큐잉하고, 스케일링하고, 왜곡하거나, 또는 그 외 외형에서 변하는 것으로 예상되는 하나 이상의 오브젝트들에 대응한다. 전체 뷰를 재-렌더링하는 대신에, 컴퓨팅 시스템은 간단히 대응하는 오브젝트가 어떻게 변경된 관점에서 볼 것인지를 근사하기 위해 변경된 관점으로부터 이들 표면들을 재샘플링할 수 있다. 이러한 방법은 근본적으로 효율적인 숏컷일 수 있으며, 요구되는 프로세싱을 상당히 감소시키며, 따라서 뷰가 대기시간을 충분히 감소시키기 위해 충분히 빠르게 업데이트된다는 것을 보장할 수 있다. 전체 뷰들을 재-렌더링하는 것과 달리, 표면들을 재샘플링하는 것은 HMD의 컴퓨팅 시스템의 비교적 제한된 프로세싱 전력을 갖고 할당된 시간 내에서 - 예컨대, 1/200초에서 - 뷰들을 수정하기 위해 사용될 수 있도록 충분히 효율적일 수 있다. 이러한 수정에 수반된 시간 스케일들은 너무 작아서, HMD가 HMD의 현재 위치 및 방향(current position and orientation)에 대한 정보를 송신하고, 새로운 뷰를 렌더링하기 위해 별개의 시스템을 기다리며, 그 후 별개의 시스템으로부터 새로운 뷰를 수신해야 하기 때문에, HMD로부터 물리적으로 분리되는 더 강력한 시스템(예컨대, 별개의 랩탑 또는 착용 가능한 디바이스)이 수정을 수행하는 것은 실현 가능하지 않을 수 있다. 표면들을 간단히 재샘플링함으로써, 수정은 HMD 상에서 전체적으로 수행되고, 따라서 프로세스의 속도를 높일 수 있다.
도 1은 인공 현실 그래픽 렌더링 및 디스플레이 시스템(100)을 예시한다. 특정한 실시예들에서, 렌더링 및 디스플레이 시스템(100)은 예약 렌더링 구성요소(110)를 포함할 수 있다. 예약 렌더링 구성요소(110)는 상보적 렌더링을 수행하기 위해 사용된 원격 렌더링 구성요소, 또는 더 적은 상호작용성의 요건을 갖고 준비될 수 있는 사전-렌더 요소들일 수 있다. 예를 들어, 예약 렌더링 구성요소(110)는 스트리밍 비디오 또는 다른 비-상호 작용적 구성요소들의 사전-렌더링을 핸들링하는 클라우드 컴퓨팅 네트워크 또는 근거리 네트워크를 통해 제공된 렌더링 서버일 수 있다. 사용자는 그녀 자신의 예약 렌더링 구성요소(110)를 제공할 수 있거나 또는 가입 계획의 부분으로서 예약 렌더링 구성요소(110)로 액세스할 수 있다. 예약 렌더링 구성요소는 무선으로 또는 1차 렌더링 구성요소(120)로의 하나 이상의 유선 연결들을 통해 통신할 수 있다. 1차 렌더링 구성요소(120)는 랩탑 또는 데스크탑 컴퓨터, 비디오 게임 콘솔, 또는 임의의 다른 적절한 로컬 그래픽 렌더링 시스템과 같은 독립형 디바이스, 또는 휴대전화, 태블릿, 또는 임의의 다른 적절한 소형 그래픽 렌더링 시스템과 같은, 사용자의 몸에 쉽게-착용되는 디바이스일 수 있다. 예약 렌더링 구성요소(110) 및/또는 1차 렌더링 구성요소(120)는 통상적인 렌더링 파이프라인의 여러 프로세스들을 수행할 수 있다. 특정한 실시예들에서, 1차 렌더링 구성요소(120)는 복수의 다각형들에 의해 정의된 3-차원("3D") 모델들 및 초당 60프레임까지 또는 이를 뛰어넘는 프레임 리프레쉬 레이트를 지원하기에 충분한 렌더링 지시들에 기초하여 상호 작용적 그래픽들을 렌더링할 수 있다.
1차 렌더링 구성요소(120)는 렌더링 요청을 위한 1차 렌더링 데이터를 수신할 수 있다. 1차 렌더링 데이터는 2- 또는 3-차원 모델들, 텍스처들, 및 컴퓨터-생성된 이미지들을 위한 지시들, 및 다른 적절한 정보를 포함할 수 있다. 1차 렌더링 구성요소(120)는 수신된 1차 렌더링 데이터에 기초하여 인공 현실 장면의 양상들을 렌더링하기 위해 초기 단계들을 수행할 수 있다. 예를 들어, 1차 렌더링 구성요소(120)는 가상 장면에서 가상 오브젝트들 중 어떤 3D 모델들의 어떤 다각형들이 디스플레이의 어떤 픽셀들을 통해 가시적인지를 결정하기 위해 광선 투사, 래스터화, 또는 다른 적절한 기술들을 사용하여 가시성 계산들을 수행할 수 있다. 가시성 결정들에 기초하여, 1차 렌더링 구성요소(120)는 각각의 픽셀에 대한 적절한 컬러를 결정하기 위해 음영 계산들을 수행할 수 있다. 특정한 실시예들에서, 1차 렌더링 구성요소(120)는 초당 30프레임의 레이트로, 또는 그와 유사하게 예약 렌더링 구성요소(110)로부터 압축된 또는 압축 해제된 스트리밍 비디오 데이터를 수신할 수 있다. 1차 렌더링 구성요소(120)는 초기 렌더링 단계들에 의해 생성된 데이터와 예약 렌더링 구성요소(110)로부터 수신된 데이터를 조합할 수 있다.
특정한 실시예들에서, 디스플레이 엔진(150)에 의한 사용을 위한, 하나 이상의 특수화된 오브젝트 프리미티브들, 예컨대, "표면들"이 생성될 수 있다. 예로서, 1차 렌더링 구성요소(120)는 통상적인 렌더링 파이프라인에서처럼, 3D 모델들로부터 2D 이미지들을 우선 렌더링함으로써 표면들을 생성할 수 있다. 1차 렌더링 구성요소(120)는 그 후 부가적인 사후-프로세싱 방법을 사용하여 2D 이미지들로부터 표면들을 생성할 수 있다. 또 다른 예로서, 1차 렌더링 구성요소(120)는 3D 모델들로부터 표면들을 직접 출력하여, 단지 2D 이미지들을 렌더링하는 것에 관한 추가 단계들을 제거할 수 있다. 또 다른 예로서, 1차 렌더링 구성요소(120)는 3D 모델들로부터 디스플레이 엔진(150)으로 2D 이미지들을 출력할 수 있다. 디스플레이 엔진(150)은 2D 이미지들에 기초하여 부가적인 사후-프로세싱 방법을 사용하여 표면들을 생성할 수 있다.
표면들은 인공 현실 장면의 하나 이상의 가상 오브젝트들을 렌더링하는데 유용한 정보를 포함할 수 있다. 정보는 가상 카메라/뷰어에 대한 뷰 공간의 좌표 시스템에서 특정된, 장면에서 표면에 대한 장소 및/또는 위치 데이터를 포함할 수 있다(대안적으로, 표면의 장소는 또한 세계 공간 좌표 시스템과 같은, 임의의 다른 적절한 좌표 시스템에서 특정될 수 있다). 표면은 하나 이상의 텍셀 어레이들에 의해 표현된, 텍스처 데이터를 추가로 포함할 수 있다. 따라서, 특정한 실시예들에서, "표면"은 장면 내에서 그것의 위치를 특정하기 위해 변환 매트릭스를 갖고 직사각형 텍스처로서 고려될 수 있다. 텍셀 어레이에서의 각각의 텍셀은 컬러 정보 및 텍셀 어레이 내에서의 2D 좌표(예컨대, (u, v) 좌표들로 특정됨)를 가질 수 있다. 특정한 실시예들에서, 각각의 텍셀의 컬러 정보는 여러 컬러 채널들(예컨대, 적색, 녹색, 및 청색)의 강도 및 텍셀의 투명 레벨(예컨대, 완전히 투명한, 완전히 불투명한, 또는 그 사이에서의 어딘가)을 나타내는 알파 정보를 나타낼 수 있다. 다른 실시예들에서, 텍셀의 컬러 정보는 투명 레벨을 별도로 특정하지 않고 적색, 녹색, 및 청색의 강도를 나타낼 수 있다. 이 경우에, 각각의 컬러에 대한 값은 텍셀의 연관된 투명 레벨로 사전-곱셈될 수 있다(예컨대, 텍셀이 0의 알파 레벨을 갖고 완전히 투명하다면, 상기 텍셀에 대한 적색, 녹색 및 청색 값들은 모두 0 알파 레벨로 곱하여짐으로써 제로-아웃될 것이다).
표면의 텍스처 데이터는 3-차원 장면에서 뷰어의 관점에 기초하여 이미지 또는 디스플레이의 픽셀들에 의해 디스플레이되어야 하는 컬러들을 선택적으로 결정하기 위한 기술들을 구체화한, 표준 그래픽 렌더링 파이프라인의 결과에 기초하여 생성될 수 있다. 특정한 실시예들에서, 디스플레이 엔진(150)은 성능 수요들이 충족될 수 있도록(예컨대, 200 내지 300헤르츠로 프레임들을 출력하기 위해) 장면에서 충분한 단순성을 보장하기 위해 그것이 프로세싱할 표면들의 수(예컨대, 최대 16개 표면들 또는 임의의 다른 적절한 수의 표면들)를 제한할 수 있다. 그러므로, 인공 현실 장면에서 특정한 가상 오브젝트들은 임의의 적절한 규칙에 따라 그룹핑될 수 있다. 각각의 표면은 장면의 사용자의 관점에서의 변화의 결과로서(예컨대, 사용자의 머리 상에서의 HMD가 상이한 위치 및/또는 방향으로 이동하는 것에서 기인한), 하나의 단위로서, 이동/이전하고, 스큐잉하고, 스케일링하고, 왜곡하거나, 또는 그 외 외형이 함께 변하는 것으로 예상되는 장면 내에서의 하나 이상의 오브젝트들의 표현일 수 있다. 제한으로서가 아닌 예로서, 개인의 아바타 및 아바타에 의해 착용된 모자는 하나의 단위로서, 사람 및 모자가 이동/이전하고, 스큐잉하고, 스케일링하고, 왜곡하거나, 또는 그 외 외형이 함께 변한다고 결정된다면 하나의 표면에 대응할 수 있다. 특정한 실시예들에서, 표면은 장면의 사용자의 관점이 변할 때 단일 단위로서 이동/이전하고, 스큐잉하고, 스케일링하고, 왜곡하거나, 또는 그 외 외형이 변하는 것으로 예상되는 포인트들(예컨대, 오브젝트를 구성하는 포인트들)의 세트들에 대응할 수 있다.
1차 렌더링 구성요소(120)는 하나 이상의 유선 또는 무선 연결들을 통해 헤드-마운트 디스플레이 유닛(130)과 통신할 수 있다. 특정한 실시예들에서, 사용자는 1차 렌더링 구성요소(120) 및 헤드-마운트 디스플레이 유닛(130)이 어떻게 사용자의 요구들에 기초하여 통신하는지를 선택할 수 있을 것이다. 헤드-마운트 디스플레이 유닛(130)은 1차 렌더링 구성요소(120)로부터, 표면들 및 다른 렌더링 지시들과 같은, 데이터를 수신하도록 구성될 수 있다. 헤드-마운트 디스플레이 유닛(130)은 수신된 데이터에 기초하여 사용자로 인공 현실 장면을 디스플레이할 준비를 할 수 있다. 특정한 실시예들에서, 헤드-마운트 디스플레이 유닛(130)은 디스플레이 엔진(150) 및 하나 이상의 디스플레이들(170)을 포함할 수 있다. 특정한 실시예들에서, 디스플레이들(170)은 모든 필요한 이미터들, 스캐닝 요소들, 및 광학 시스템들을 포함한, 스캐닝 디스플레이들일 수 있다. 헤드-마운트 디스플레이 유닛(130)은 인공 장면의 렌더링 및 디스플레이를 가능하게 하는 도시되지 않은 부가적인 구성요소들을 추가로 포함할 수 있다. 이것들은 부가적인 이미지 프로세싱 구성요소들, 아이-트래킹 구성요소들, 열 검출 구성요소들, 임의의 다른 적절한 구성요소들, 또는 그것의 임의의 조합을 포함할 수 있다. 본 개시는 특정한 방식으로 렌더링 구성요소들을 설명하지만, 본 출원은 임의의 적절한 렌더링 구성요소들을 고려한다.
특정한 실시예들에서, 헤드-마운트 디스플레이의 디스플레이 엔진(150) 및 디스플레이들(170)은 구체적으로 고속 프레임 디스플레이 또는 리프레시 레이트를 가능화하도록 구성될 수 있다. 통상적인 상호 작용적 그래픽 렌더링 시스템들에서, 타겟 프레임 레이트는 초당 50프레임이거나 또는 대략 그것일 수 있다. 이것은 이미지들이 종래의 시스템들에서, 선명하고, 매끄럽게 이동하는 비디오처럼 보이는데 충분하지만, 인공 현실을 위해서는 충분하지 않을 수 있다. 인공 현실 경험의, 및 디스플레이의 헤드-마운트 특징 및 그것의 사용자의 눈들로의 근접성에 의해 추가로 악화되는 몰입적 특징 때문에, 인공 현실 렌더링 및 디스플레이 시스템(100)은, 사용자의 뷰포인트 및/또는 움직임(예컨대, 머리 및/또는 눈 움직임)에서의 변화들에 응답하여 이미지들을 디스플레이하기 위해, 훨장면 더 높은 프레임 디스플레이 레이트들, 예컨대 초당 200 내지 300프레임들 위로 타겟팅할 수 있다. 이것이 충분히 빠르게 행해지지 않는다면, 결과적인 대기시간은 사용자로 하여금 가상 현실 메스꺼움 또는 불편함을 야기할 수 있는 감각 부조화를 경험하게 할 수 있다. 특정한 실시예들에서, 인공 현실 렌더링 및 디스플레이 시스템(100)은 사용자의 눈 움직임들을 추적하고 그것에 반응할 수 있을 것이다. 눈 움직임에 반응할 때 매끄러운 비디오를 제공하기 위해, 시스템(100)은 특히 집중적인 기간들 동안 훨장면 더 높은 디스플레이 레이트들, 예컨대 초당 800 프레임까지의 버스트들을 타겟팅할 수 있다.
전체 시스템은 이들 고속 디스플레이 레이트 벤치마크들을 염두에 두고 구성될 수 있다. 초당 200프레임들의 타겟 프레임 레이트는 5 밀리초 당 1프레임과 대략 동일하다. 상당한 시간이 무선, 또는 심지어 유선 연결들을 통해 강력한 그래픽 프로세서로 움직임 데이터를 송신하고, 그로부터 렌더링 데이터를 업데이트함으로써 손실된다. 그러므로, 적어도 몇몇 양의 그래픽 준비가 헤드-마운트 유닛에서 발생하여, 송신 시 손실된 시간을 감소시켜야 한다. 그러나, 헤드-마운트 디스플레이 유닛(130)은 사용자의 편안함을 위해 고수되어야 하는 중량, 전력, 및 공간 제약들을 갖는다. 이들 중량, 전력, 및 공간 제약들은 헤드-마운트 디스플레이 유닛(130)을 위해 이용 가능한 구성요소들 및 계산 전력을 제한한다. 사실상, 종래의 접근법들을 사용하여, 장기 착용에 적합한 헤드-마운트 디스플레이 유닛(130)을 위해 이용 가능한 구성요소들은 몰입형 경험을 위해 필요한 200개 이상은 고사하고, 초당 60프레임들로 적절한 조명을 가진 다각형들을 포함한 3D 모델들로부터 인공 현실 장면들을 렌더링하는 것이 불가능하다.
이러한 문제를 해결하기 위해, 강력한 1차 렌더링 구성요소(120)가 초당 약 60 프레임들로 표면들을 생성하기 위해 요구된 복잡한 그래픽 생성 작업을 수행할 수 있다. 헤드-마운트 디스플레이 유닛(130)의 디스플레이 엔진(150)은 1차 렌더링 구성요소(120)로부터의 업데이트들 간의 사용자의 움직임들에 기초하여 1차 렌더링 구성요소(120)가 생성하는 것을 조정하거나 또는 재-샘플링하기에 충분히 강력한 하드웨어 구성요소들을 포함할 수 있다. 디스플레이 엔진(150)은 1차 렌더링 구성요소(120)의 출력을 재프로세싱하기 위해 사용자의 움직임에 의해 생성된 관점 변화들에 빠르게 반응하여, 1차 렌더링 구성요소(120)가 디스플레이를 위한 또 다른 프레임을 준비할 때까지 1차 렌더링 구성요소(120)의 출력을 워핑하거나 또는 그 외 조정할 수 있다. 예를 들어, 설명된 바와 같이, 1차 렌더링 구성요소(120)는 통상적이 레이트들, 예컨대 초당 약 60프레임들로 3D 장면에서 가상 오브젝트들의 2D 이미지들을 렌더링할 수 있다. 2D 이미지들은 표면들을 생성하기 위해 사용될 수 있다. 각각의 표면은 뷰어에 대한 표면의 3D 위치를 나타내는 위치 정보 및 복잡한 조명 효과들, 폐색 결정, 및 1차 렌더링 구성요소(120)에 의해 수행된 다른 렌더링 기술들의 구현의 결과들을 포함하여, 그것들이 나타내는 가상 오브젝트들에 대한 텍스트 정보를 포함할 수 있다. 1차 렌더링 구성요소(120)는 표면들을 디스플레이 엔진(150)으로 전송할 수 있다. 디스플레이 엔진(150)은 그 후 현재 사용자 관점으로부터 표면들을 재-샘플링하고 디스플레이의 특성들을 수용하기 위해 표면을 비틀리게 하기 위해 예컨대, 사용자의 위치 및/또는 방향에 대한 업데이트된 정보를 사용할 수 있다. 다른 최적화 기술들과 함께, 장면의 단순화된 기하학적 구조들(표면들의 사용으로 인한)은, 디스플레이 엔진(150)이 원하는 타겟 레이트들로(예컨대, 초당 200프레임들 이상으로) 인공 장면을 개선하고 렌더링하는 태스크를 수행할 수 있게 한다. 따라서, 1차 렌더링 구성요소(120)가 1/60초마다 한 번 사용자의 움직임들에 정확한 표면들을 준비하지만, 디스플레이 엔진(150)은 1/200초마다 그래픽의 위치를 개선하기 위해 출력을 재-샘플링하여, 1차 렌더링 구성요소(120)의 프레임 레이트에 의해 생성된 갭들을 채울 수 있다. 이것은 여전히 편안한 장비를 제공하면서, 컴퓨터 생성된 그래픽들의 매끄럽고 끊김 없는 움직임을 가진 고 품질 인공 현실 경험을 사용자를 위해 생성할 수 있다.
도 2는 디스플레이 엔진(150)에 대한 시스템 다이어그램을 예시한다. 디스플레이 엔진(150)은 4개의 유형들의 최상위 레벨 블록들을 포함할 수 있다. 도 2에 도시된 바와 같이, 이들 블록들은 제어 블록(200), 변환 블록들(300), 픽셀 블록들(400), 및 디스플레이 블록들(500)을 포함할 수 있다. 디스플레이 엔진(150)의 구성요소들 중 하나 이상은 하나 이상의 고속 버스, 공유 메모리, 또는 임의의 다른 적절한 방법을 통해 통신하도록 구성될 수 있다. 도 2에 도시된 바와 같이, 디스플레이 엔진(150)의 제어 블록(200)은 두 개의 미러링된 파이프라인들의, 변환 블록들(300), 픽셀 블록들(400), 및 디스플레이 블록들(500)과 통신하도록 구성될 수 있다. 특정한 실시예들에서, 디스플레이 엔진(150)의 각각의 파이프라인은 디스플레이할 별개의 디스플레이(170)에 대한 이미지들을 준비하는데 전용될 수 있다. 각각의 디스플레이(170)는 각각 사용자의 좌측 및 우측 눈으로 이미지들을 디스플레이하도록 구성될 수 있다. 여기에서 추가로 상세하게 설명되는 바와 같이, 이러한 통신은 데이터뿐만 아니라 제어 신호들, 인터럽트들 및 다른 지시들을 포함할 수 있다. 두 개의 파이프라인들은 다른 것에 독립적으로 동작할 수 있을 것이다.
특정한 실시예들에서, 제어 블록(200)은 1차 렌더링 구성요소(120)로부터 입력 데이터 스트림(205)을 수신하며 디스플레이를 위한 렌더링을 마무리하기 위해 디스플레이 엔진(150)에서 파이프라인을 초기화할 수 있다. 특정한 실시예들에서, 입력 데이터 스트림(205)은 1차 렌더링 구성요소(120)로부터의 데이터 및 제어 패킷들을 포함할 수 있다. 데이터 및 제어 패킷들은 텍스처 데이터 및 위치 데이터를 포함한 하나 이상의 표면들 및 부가적인 렌더링 지시들과 같은 정보를 포함할 수 있다. 제어 블록(200)은 요구된 대로 데이터를 디스플레이 엔진(150)의 하나 이상의 다른 블록들로 분배할 수 있다. 제어 블록(200)은 디스플레이될 하나 이상의 프레임들에 대한 파이프라인 프로세싱을 개시할 수 있다. 특정한 실시예들에서, 헤드-마운트 디스플레이 유닛(130)은 다수의 디스플레이 엔진들(150)을 포함할 수 있으며 각각은 그 자신의 제어 블록(200)을 포함할 수 있다.
특정한 실시예들에서, 변환 블록들(300)은 인공 현실 장면에서 디스플레이될 표면들에 대한 초기 가시성 정보를 결정할 수 있다. 일반적으로, 변환 블록들(300)은 디스플레이 상에서 픽셀 위치들로부터 광선들을 투사하며 픽셀 블록들(400)로 전소할 필터 명령들(예컨대, 이중선형 또는 다른 유형들의 보간 기술들에 기초한 필터링)을 생성할 수 있다. 변환 블록들(300)은 사용자의 현재 뷰포인트로부터(예컨대, 관성 측정 유닛들, 아이 트래커들(eye trackers), 및/또는 동시적 로컬화 및 매핑(simultaneous localization and mapping)(SLAM)과 같은 임의의 적절한 트래핑/로컬화 알고리즘들을 사용하여 결정된) 표면들이 위치되는 인공 장면으로 광선투사를 수행할 수 있으며 픽셀 블록(400)으로 전송할 결과들을 생성할 수 있다.
일반적으로, 변환 블록들(300)은 특정한 실시예들에 따라, 각각 4-스테이지 파이프라인을 포함할 수 있다. 변환 블록(300)의 스테이지들은 다음과 같이 진행될 수 있다. 광선 투사기는 타일들(예컨대, 각각의 타일은 16x16 정렬된 픽셀들을 포함할 수 있다)로서 불리우는, 하나 이상의 정렬된 픽셀들의 어레이들에 대응하는 광선 번들들을 발행할 수 있다. 광선 번들들은, 하나 이상의 왜곡 메시들에 따라, 인공 현실 장면에 들어가기 전에, 워핑될 수 있다. 왜곡 메시들은 적어도, 헤드-마운트 디스플레이(130)의 디스플레이들(170)에 기인한 기하학적 왜곡 효과들을 정정하도록 구성될 수 있다. 변환 블록들(300)은 각각의 표면에 대한 경계 박스들에 각각의 타일의 경계 박스를 비교함으로써 각각의 광선 번들이 장면에서의 표면들과 교차하는지를 결정할 수 있다. 광선 번들이 표면과 교차하지 않는다면, 그것은 폐기될 수 있다. 타일-표면 교차들이 검출되며, 대응하는 타일-표면 쌍들(395)은 픽셀 블록들(400)로 전달된다.
일반적으로, 픽셀 블록들(400)은 특정한 실시예들에 따라, 픽셀 컬러 값들을 생성하기 위해 타일-표면 쌍들(395)로부터 컬러 값들을 결정한다. 각각의 픽셀에 대한 컬러 값들은 제어 블록(200)에 의해 수신되고 저장된 표면들의 텍스처 데이터로부터 샘플링된다(예컨대, 입력 데이터 스트림(205)의 부분으로서). 픽셀 블록들(400)은 변환 블록들(300)로부터 타일-표면 쌍들(395)을 수신하며 이중선형 필터링을 스케줄링한다. 각각의 타일-표면 쌍(395)에 대해, 픽셀 블록들(400)은 투사된 타일이 표면과 교차하는 곳에 대응하는 컬러 값들을 사용하여 타일 내에서 픽셀들에 대한 컬러 정보를 샘플링할 수 있다. 특정한 실시예들에서, 픽셀 블록들(400)은 각각의 픽셀에 대해 개별적으로 적색, 녹색, 및 청색 컬러 구성요소들을 프로세싱할 수 있다. 픽셀 블록들(400)은 그 후 픽셀 컬러 값들(495)을 디스플레이 블록들(500)로 출력할 수 있다.
일반적으로, 디스플레이 블록들(500)은 픽셀 블록들(400)로부터 픽셀 컬러 값들(495)을 수신하고, 디스플레이의 스캔라인 출력에 더 적합하도록 데이터의 포맷을 변환하고, 픽셀 컬러 값들(495)에 하나 이상의 밝기 정정들을 적용하며, 디스플레이들(170)로의 출력을 위해 픽셀 컬러 값들(495)을 준비할 수 있다. 디스플레이 블록들(500)은 픽셀 블록들(400)에 의해 생성된 타일-순서 픽셀 컬러 값들(495)을 디스플레이들(170)에 의해 요구될 수 있는, 스캔라인- 또는 로우-순 데이터로 변환할 수 있다. 밝기 정정들은 임의의 요구된 밝기 정정, 감마 매핑, 및 디더링을 포함할 수 있다. 디스플레이 블록들(500)은 정정된 픽셀 컬러 값들과 같은, 픽셀 출력(595)을 직접 디스플레이들(170)로 제공할 수 있거나 또는 다양한 포맷들로 디스플레이 엔진(105)의 외부에 있는 블록으로 픽셀 출력(595)을 제공할 수 있다. 예를 들어, 헤드-마운트 디스플레이 유닛(130)은 백엔드 컬러 프로세싱을 추가로 맞춤화하기 위해, 디스플레이로의 더 넓은 인터페이스를 지원하기 위해, 또는 디스플레이 속도 또는 충실도를 최적화하기 위해 부가적인 하드웨어 또는 소프트웨어를 포함할 수 있다.
제어 블록(200), 변환 블록들(300), 픽셀 블록들(400), 및 디스플레이 블록들(500)에 대한 추가 세부사항들이 이제 설명될 것이며, 제어 블록(200)으로 시작한다. 특정한 실시예들에서, 제어 블록(200)은 1차 렌더링 구성요소(120)로부터 입력 데이터 스트림(205)을 수신하며 사용자의 현재 뷰포인트에 기초하여 인공 현실 표면들을 재-샘플링하거나 또는 정정하기 위해 디스플레이 엔진(150)에서 파이프라인을 초기화할 수 있다. 특정한 실시예들에서, 제어 블록(200)은 1차 렌더링 구성요소(120)로부터 제어 패킷들을 수신할 수 있다. 제어 패킷들은 인공 현실 장면에서 렌더링될 텍스처 데이터 및 위치 데이터(예컨대, 변환 매트릭스들에 의해 정의된 바와 같이)를 가진 하나 이상의 표면들을 포함할 수 있다.
도 3은 특정한 실시예들에 따른, 예시적인 제어 블록(200)의 아키텍처를 예시한다. 특정한 실시예들에서, 제어 블록(200)은 로컬 메모리(235)를 가진 마이크로제어기(230)를 포함할 수 있다. 로컬 메모리(235)는 제어 블록(200)에 의해 1차 렌더링 구성요소(120)로부터 수신된 데이터에 대한 버퍼로서 동작할 수 있다. 제어 블록(200)은 디스플레이 엔진(150)의 하나 이상의 다른 블록들에 의해 액세스 가능한 공유 메모리(240)를 포함할 수 있다. 공유 메모리(240)는 각각의 프레임에 대한 픽셀 컬러 값들을 준비하면서 다른 블록들에 의해 사용된 데이터를 저장하기 위해 사용될 수 있다. 예로서, 변환 블록(300)은 그것의 파이프라인 동작들의 부분으로서 사전 계산된 값들(예컨대, 변환 블록(300)이 활성이 아닌 동안 계산된 값들)에 의존할 수 있다. 유사하게, 디스플레이 블록(500)은 디스플레이 블록(500)이 활성이 아닌 동안 계산된 값들에 의존할 수 있다. 이들 값들은 공유 메모리(240)에 저장될 수 있다. 특정한 실시예들에서, 마이크로제어기(230)는 프레임이 프로세싱되고 디스플레이(170)로 출력된 후, 또는 적용 가능한 경우, 프레임의 특정한 부분에 대한 데이터가 다음 블록으로 전송된 후와 같은, 다른 블록들이 활성이 아닌 동안에만 공유 메모리(240)로 기록할 수 있다. 이러한 배열은 동일한 프레임 내에서 일치하지 않는 결과들을 방지할 수 있다. 유사하게, 상태 및 성능 업데이트들은 단지 다른 블록들이 활성이 아닌 동안, 예를 들어, 프레임-간 시간 동안 또는 마이크로제어기(230)가 파이프라인을 정지시키기 위한 명령을 발행한 후 수행될 수 있다. 특정한 실시예들에서, 공유 메모리(240)는 특정한 블록에 의한 사용을 위해 확보되는 섹션들을 포함할 수 있다. 마이크로제어기(230)는 단지 디스플레이 엔진(150)의 특정한 블록이 활성이 아닐 때에만 공유 메모리(240)의 상기 섹션으로 기록할 수 있다. 본 개시는 특정한 방식으로 마이크로제어기 및 공유 메모리를 설명하지만, 본 개시는 임의의 적절한 방식으로 마이크로제어기 및 공유 메모리를 고려한다.
제어 블록(200)은 픽셀 블록들(400)에 이한 사용을 위해 텍스처 데이터를 저장하는 텍셀 메모리(220)를 추가로 포함할 수 있다. 텍셀 메모리(220)는 전용 메모리 제어기(210)를 가질 수 있다. 특정한 실시예들에서, 표면들과 연관된 텍스처 어레이들은 메모리 제어기(210)를 통해 텍셀 메모리(220)로 직접 기록될 수 있다. 예를 들어, 마이크로제어기(230) 및 메모리 제어기(210) 둘 모두는 헤드-마운트 디스플레이 유닛(130)의 네트워크 패브릭에 연결될 수 있으며, 결과적으로 1차 렌더링 구성요소(120)에 통신적으로 결합될 수 있다. 이와 같이, 마이크로제어기(230)가 텍셀 어레이의 전송기(예컨대, 1차 렌더링 구성요소(120))와 전달을 셋업한 후, 전송기는 입력 데이터 스트림(205)을 통해 메모리 제어기(210)를 경유하여 텍셀 메모리(220)로 텍셀 어레이를 기록할 수 있다. 마이크로제어기(230)는 또한 텍스처 데이터의 입력을 제어할 수 있다. 특정한 실시예들에서, 메모리 제어기(210)는 단지 프레임-간 기간 동안에만 텍셀 메모리(220)에 저장된 데이터를 업데이트할 수 있거나 또는 단지 픽셀 블록(400)이 활성이 아닌 동안에만 텍셀 메모리(220)에 저장된 데이터를 업데이트할 수 있다.
특정한 실시예들에서, 텍셀 메모리(220)는 다수의 판독 요청들에 동시에 응답하도록 구성될 수 있다. 텍셀 메모리(220) 및 메모리 제어기(210)는 픽셀 블록(400)으로부터 메모리 판독 요청들을 일시 중단시키며 요청된 데이터를 포함한 메모리의 서브세트만을 판독하도록 구성될 수 있다. 예로서, 텍셀 메모리(220)에서의 데이터는 256비트 폭 논리 뱅크들에 저장될 수 있으며, 이것은 64-비트 워드들로 분할된다. 메모리 판독 요청을 수신할 때, 메모리 제어기(210)는 이들 64-비트 워드들 중 어떤 것이 요구되는지를 결정하며 전체 256-비트 논리 뱅크를 검색하기보다는, 이들 워드들만을 검색할 수 있다. 이러한 방식으로 판독들을 수행하는 것은 판독 요청을 전송하고 뒤이은 데이터를 수신하기 위해 사용된 버스 상에서 트래픽을 감소시킬 수 있다. 그것은 또한 전체적으로 수행된 판독들의 수를 감소시킴으로써 전력 사용을 감소시킬 수 있다.
특정한 실시예들에서, 메모리 제어기는 하나 이상의 우선순위 기법들에 따라 텍셀 메모리(220)로의 액세스를 우선순위화할 수 있다. 예를 들어, 메모리 제어기(210)는 가장 높은 우선순위를 가진 메모리로의 기록들을 처리할 수 있다(예컨대, 1차 렌더링 구성요소(120)로부터). 메모리 제어기(210)는 다음으로 가장 높은 우선순위를 가진 픽셀 블록(400)으로부터의 판독 요청들을 처리할 수 있으며 가장 낮은 우선순위를 가진 다른 액세스 요청들(예컨대, 고속 통신 버스(250)를 통한 요청들)을 처리할 수 있다. 특정한 실시예들에서, 텍셀 메모리(220)에 저장된 텍셀 데이터는 특히 판독 시간, 뒤이은 프로세싱 시간, 전력 사용, 및 열 발생을 감소시키도록 구성된 패턴에 따라 저장될 수 있다. 특정한 실시예들에서, 텍셀 메모리(220) 및 메모리 제어기(210)는 다수의 적절한 컬러 포맷들을 지원할 수 있으며, 크기들은 가까이에 있는 애플리케이션에 기초하여 달라진다. 예를 들어, 컬러 포맷은 RGB, 또는 RGBA 특정 컬러들을 포함할 수 있으며, 임의의 적절한 크기를 포함할 수 있다. 본 개시는 특정한 방식을 텍셀 메모리를 설명하지만, 본 개시는 임의의 적절한 텍셀 메모리를 고려한다.
특정한 실시예들에서, 제어 블록(200) 전체에 걸친 통신은 다수의 구성요소들이 통신할 수 있는 고속 버스(250) 상에서 실행될 수 있다. 마이크로제어기(230), 메모리 제어기(210) 및 공유 메모리(240)는 고속 버스(250)에 연결할 수 있다. 변환 블록들(300), 픽셀 블록들(400) 및 디스플레이 블록들(500)의 구성요소들은 또한 이들 블록들의 구성요소들이 마이크로제어기(230) 및 공유 메모리(240)와 통신하도록 허용하기 위해 고속 버스(250)에 연결할 수 있다. 고속 버스는 또한 다른 구성요소들에 연결할 수 있다. 특정한 실시예들에서, 마이크로제어기(230)는 디스플레이 엔진(150)의 하나 이상의 구성요소들과 통신하기 위해 하나 이상의 전용 버스들을 가질 수 있다.
특정한 실시예들에서, 제어 블록(200)은 1차 렌더링 구성요소, 헤드-마운트 디스플레이 유닛(130)의 하나 이상의 다른 구성요소들, 디스플레이 엔진(150)의 하나 이상의 다른 구성요소들, 또는 인공 현실 그래픽 렌더링 및 디스플레이 시스템(100)의 임의의 다른 적절한 구성요소로부터 인터럽트들을 수신하고 프로세싱하도록 구성될 수 있다. 인터럽트는 일반적으로 디스플레이 엔진(150)의 특정 블록으로 또는 디스플레이 엔진(150)으로 고-우선순위 명령을 제공하기 위해 발행될 수 있다. 제한으로서가 아닌 단지 예로서, 제어 블록(200)의 마이크로제어기(210)는 각성 인터럽트를 수신하도록 구성될 수 있다. 각성 인터럽트는 마이크로제어기(210)가 디스플레이 엔진(150)의 각각의 블록에 의해 수행될 부트 시퀀스를 개시하게 할 수 있다. 또 다른 예로서, 마이크로제어기(210)는 디스플레이 엔진(150)의 블록으로부터 에러 인터럽트를 수신하도록 구성될 수 있다. 에러 인터럽트는 디스플레이 엔진(150)에 의해 마주하게 되는 결함을 나타낼 수 있다. 제어 블록의 마이크로제어기(210)는 요구된 대로 개선책(예컨대, 로그 또는 디스플레이로 디버깅 정보를 출력하고, 실패 상태 루트에 들어가거나, 또는 임의의 다른 적절한 개선책)을 취하도록 구성될 수 있다. 또 다른 예로서, 마이크로제어기(210)는 정지 인터럽트를 수신하도록 구성될 수 있다. 정지 인터럽트를 수신할 때, 마이크로제어기(210)는 렌더링 파이프라인의 실행을 중단시키고 셧다운 또는 일시정지 루틴에 들어가기 위한 명령들을 발행할 수 있다. 본 개시는 특정한 인터럽트들 및 명령들을 설명하지만, 본 개시는 임의의 적절한 인터럽트들 및 명령들을 고려한다.
도 4는 예시적인 변환 블록(300)의 아키텍처를 예시한다. 변환 블록(300)은 광선 투사기(310), 메시 워프 블록(320)과 워프 메모리(325), 한도 비교 블록(330)과 한도 메모리(335), 및 변환 엔진(340)과 변환 메모리(345)를 포함한다. 몇몇 실시예들에서, 워프 메모리(325), 한도 메모리(335), 및 변환 메모리(345) 중 일부 또는 모두는 이들 메모리들에 의한 사용을 위해 할당된 제어 블록(200)의 공유 메모리(240)의 섹션들일 수 있다. 몇몇 실시예들에서, 워프 메모리(325), 한도 메모리(335), 및 변환 메모리(345)의 각각은 변환 블록(300)의 그것들의 관련된 블록들에 의해 사용된 데이터를 저장하는 것에 전용된 별개의 메모리일 수 있다. 이들 메모리들에 저장된 데이터는, 이하에서 데이터의 설명에 의해 명백해질 바와 같이, 제어 블록(200)의 마이크로제어기(230)에 의해 수신될 수 있고, 제어 블록(200)의 마이크로제어기(240)에 의해 생성될 수 있거나, 또는 임의의 다른 적절한 방식으로 소싱될 수 있다. 특정한 실시예들에서, 변환 블록(300)은 부가적인 스테이지들, 및 수반된 구조들을 포함할 수 있다.
특정한 실시예들에서, 변환 블록(300)은 디스플레이에 의해 디스플레이될 표면들에 대한 초기 가시성 정보를 결정할 수 있다. 변환 블록(300)은 인공 현실 장면을 보는 사용자의 뷰포인트(예컨대, 모션 센서 데이터, 아이-트래킹 데이터, 및/또는 트래킹/로컬화 알고리즘들을 사용하여 결정된 바와 같이)로부터 광선투사를 수행할 수 있다. 변환 블록(300)의 결과들은 픽셀 블록(400)으로 전송될 수 있다. 특정한 실시예들에서, 디스플레이 엔진(150)은 복수의 변환 블록들(300)을 포함할 수 있다. 제 1 변환 블록(300)의 블록들은 제 2 변환 블록(300)에서 블록들의 상태에 관계없이 전진할 수 있을 것이다.
변환 블록 파이프라인은 하나 이상의 표면들과 연관된 위치 데이터에 기초하여 인공 현실 장면으로 광선 투사를 수행하는 광선 투사기(310)를 포함할 수 있다. 일반적으로, 광선투사는 인공 현실 장면에서 가상 오브젝트들의 1차 가시성을 결정하기 위한 기술이다. 컴퓨팅 디바이스는 장면에서 광 입자들의 거동을 시뮬레이션할 목적으로 뷰포인트에서 기인한 광선들을 가상 장면으로 전송한다. 광선이 내려앉는 가상 오브젝트의 컬러는 디스플레이될 픽셀의 컬러에 기인한다. 광선투사는, 이러한 방식으로, 광선추적이 종종 하나 이상의 반사들을 통해 광선을 따르는 것을 수반하지만, 광선투사는 아니라는 하나의 차이를 갖고 광선추적으로서 알려진 기술과 관련된다. 대신에, 광선투사에서, "이어지는" 광선과 연관된 계산은 광선이 제 1 가상 오브젝트와 교차한다는 것을 검출한 후 종료된다.
도 7은 장면의 뷰 내에서 디스플레이될 가상 오브젝트들(예컨대, 다각형들로 구성된 3D 모델들에 의해 정의된)의 시각 정보 및 위치 정보를 결정하기 위한 제 1 광선투사 프로세스를 예시한다. 장면의 "뷰"는 장면의 사용자 관점을 나타낼 수 있으며, 이것은 예를 들어, 헤드-마운트 디스플레이 유닛(130)의 현재 위치 및 방향에 기초하여 결정될 수 있다. 오브젝트가 어떻게 뷰 내에서 디스플레이되는지를 더 잘 이해하기 위해, 스크린상에서의 픽셀들에 대한 뷰포인트(예컨대, 장면을 보는 사용자의 뷰포인트를 나타낼 수 있는 "가상 카메라")에서 나온 다수의 가상적인 광선들을 상상하는데 도움이 된다. 제한으로서가 아닌 예로서, 도 7을 참조하면, 가상의 광선(730)은 뷰포인트(720)에서 나오며 스크린(710)의 픽셀(715)과 교차할 수 있다. 제한으로서가 아닌 또 다른 예로서, 가상의 광선(760)은 픽셀(770)과 교차할 수 있다. 하나 이상의 가상의 광선들은, 각각의 픽셀이 디스플레이해야 하는 것(예컨대, 픽셀의 컬러 및 투명도)을 결정하기 위해 스크린의 픽셀들의 모두(또는 서브세트)에 대해, 여기에서 "광선-투사 프로세스"로 불리울 수 있는 것을 사용하여, 반복적으로 투사될 수 있다. 컴퓨팅 시스템은 광선투사 프로세스를 수행하며 가상의 광선들의 각각이 가상 오브젝트와 교차하는지를 결정할 수 있고 가상 오브젝트 상에서 가상의 광선이 교차하는 곳을 추가로 결정할 수 있다. 제한으로서가 아닌 예로서, 가상의 광선(730)은 교차점(755)에서 오브젝트(750)(예컨대, AR 클록)와 교차할 수 있다. 이 예에서, 컴퓨팅 시스템은, 광선(730)이 또한 픽셀(715)에서 스크린(710)에 교차하기 때문에, 픽셀(715)이 교차 점(755)가 연관되는지를 결정할 수 있다. 제한으로서가 아닌 또 다른 예로서, 가상의 광선(760)은 오브젝트(750)와 교차하지 않을 수 있다. 이 예에서, 컴퓨팅 시스템은 픽셀(715)이 오브젝트(750)와 연관되지 않아야 함을 결정할 수 있다. 광선투사 프로세스의 이러한 사용은, 그것이 주어진 뷰 내에서 가시적인 오브젝트(또는 그것의 부분들)를 결정하기 위해 사용될 수 있기 때문에, 역에서 "가시성 테스트"로서 불리울 수 있다. 광선-투사 프로세스는 궁극적으로 장면의 뷰에 대해 가시적일 임의의 오브젝트들 상에서 교차점들과 스크린의 픽셀들을 연관시키기 위해 사용될 수 있다.
도 4의 논의로 돌아가면, 변환 블록(300)의 광선 투사기(310)는 인공 현실 장면으로 전송될 광선들을 준비할 책임이 있을 것이다. 여기에서 설명된 바와 같이, 디스플레이 엔진(150)과 함께 사용될 때, 렌더링 태스크들의 벌크가 대부분의 오브젝트 폐색 및 음영 세부사항들을 포함한, 1차 렌더링 구성요소(120)에 의해 성취되었다. 1차 렌더링 구성요소(120)에 의해 수행된 렌더링 태스크들의 결과들은 각각의 표면의 위치 데이터 및 텍스처 데이터에서 캡처된다. 그 후, 광선 투사기(310)(예컨대, 표면들의 모음에 대해 광선투사를 수행하는)에 의해 수행된 광선투사는 디스플레이 엔진(150)에 의해 달성될 수 있는 충실도를 제한하지 않는다. 특정한 광선투사 구성들에서, 많은 광선들이 사용될 수 있다 - 예를 들어, 하나의 광선은 디스플레이될 각각의 픽셀, 또는 심지어 서브-픽셀들에 대응한다. 광선들의 경로는 그것들이 가상 오브젝트를 접촉하거나, 또는 몇몇 임계 거리가 초과될 때까지 따르게 된다. 예를 들어, 임계치는 광선이 이동한 거리, 산출에 소비된 시간의 양, 또는 임의의 다른 적절한 메트릭에 기초할 수 있다. 임계치가 초과된다면, 광선은 가상 오브젝트에 부딪치지 않았으며 디폴트 값이 상기 광선에 기인해야 한다고 결정된다. 광선이 가상 오브젝트를 치면, 가상 오브젝트의 값, 종종 컬러는 광선에 기인한다. 몇몇 실시예들에서, 광선에 대응하는 픽셀에 대한 컬러는 광선에 기인한 값에 기초하여 결정된다.
상기 설명된 바와 같이, 가시성을 결정하기 위해, 광선들은 디스플레이에서 각각의 픽셀에 대해 투사될 수 있다. 그러나, 이것은, 드문 표면들을 가진 장면이 많은 광선들이 어떤 것에 교차하지 않는 것을 야기할 수 있으므로, 계산적으로 효율적이지 않을 수 있다. 따라서, 특정한 실시예들에서, 광선 투사기(310)는 대신에 더 큰 샘플링 풋프린트들이 즉시 조사될 수 있도록 픽셀들의 모음으로부터 장면으로 광선 번들들 또는 빔들을 투사할 수 있다. 개념적으로, 광선 번들이 임의의 표면에 교차하지 않는다면, 번들 내에서의 임의의 광선은 임의의 표면에 교차하지 않을 것이다. 이러한 관찰에 기초하여, 일단 광선 번들이 표면에 교차하지 않는다고 결정되면, 어떤 추가 프로세싱도 광선 번들이 투사되는 픽셀들에 대한 상기 표면에 대해 수행될 필요가 없다. 다른 한편으로, 광선 번들이 표면에 교차하면, 광선 투사기(310)는 광선 번들과 연관된 각각의 픽셀에 대한 더 정교한 샘플링을 수행할 수 있다. 특정한 실시예들에서, 광선 번들들은 픽셀 모음들의 단위들로부터 투사될 수 있다. 예를 들어, 광선 번들이 투사되는 정렬된 픽셀들의 단위는 여기에서 "타일"로서 불리울 수 있다. 예를 들어, 각각의 타일은 디스플레이의 16x16 픽셀들의 정렬된 블록일 수 있다. 타일의 위치는 타일의 4개의 코너들, 중심 포인트 및 에지들로의 거리, 수학식, 임의의 다른 적절한 방법, 또는 그것의 임의의 조합을 특정하는 것에 의해서와 같은, 임의의 적절한 기법에 기초하여 특정될 수 있다. 특정한 실시예들에서, 타일로부터 투사되는 광선 번들은 타일의 4개의 코너들로부터 투사되는 4개의 광선들에 의해 정의될 수 있다. 따라서, 광선의 위치는 디스플레이의 픽셀 좌표 공간(예컨대, 변환 블록(300)과 연관된, 좌측-눈 디스플레이(170) 또는 우측-눈 디스플레이(170)와 같은, 도 4에서 "디스플레이 공간"으로 불리우는, 특정한 디스플레이의 뷰 공간 내에서의 (x, y) 픽셀 위치)에서 특정될 수 있다.
특정한 실시예들에서, 디스플레이의 픽셀들은 정렬된 타일들의 로우들로 분할될 수 있다. 광선 투사기(310)는 디스플레이에서 타일들의 각각에 대해 광선 번들들을 투사할 수 있다. 특정한 실시예들에서, 광선 투사기는 다음 로우로 이동하기 전에 타일들의 수평 로우 내에서 모든 타일에 대한 개개의 광선 번들들을 투사할 수 있다(대안적으로, 시퀀스는 스캔라인 순서가 수직인 경우 타일들의 수직 컬럼들에 기초할 수 있다).
특정한 실시예들에서, 광선 투사기(310)는 광선 번들들을 우선순위화할 수 있다. 예로서, 광선 투사기(310)는 개개의 타일들을 프로세싱하기 위해 예상된 시간의 양에 기초한 순서로 타일들에 대한 광선 번들들을 준비할 수 있다. 예를 들어, 스캐닝 디스플레이에 의해 디스플레이된 이미지들은 색 수차로서 알려진 효과를 보일 수 있으며, 여기에서 디스플레이의 에지들에 가까운 컬러들의 적색, 녹색, 및 청색 구성요소들은 디스플레이의 중심에 가까운 컬러들에 대해 동시에 이뤄지지 않는다. 이러한 효과는 이하에서 더 상세하게 설명된다. 이러한 효과를 정정하기 위한 노력들로 인해, 디스플레이의 에지에 가까운 타일들을 프로세싱하는 것은 더 많은 판독 대역폭(예컨대, 메모리로부터 텍셀 어레이들을 판독하기 위한)을 요구할 수 있으며 및/또는 디스플레이의 중심에 가까운 타일들보다 프로세싱하는데 더 오래 걸릴 수 있다. 예를 들어, 별개의 광선 번들들이 색 수차를 감안하기 위해 각각의 컬러 구성요소(예컨대, 적색, 녹색, 또는 청색)에 대해 투사되는 실시예들에서, 각각의 컬러링된 광선 번들의 교차 위치들은 상이할 수 있으며, 이것은 별개의 텍스처 영역들이 메모리로부터 검색될 필요가 있음을(예컨대, 3개의 별개의 메모리 판독들을 요구하는) 의미한다. 색 수차가 덜 두드러질 수 있는, 디스플레이의 중심에 더 가까운 타일들에 대해, 동일한 텍스처 영역이 모두 4개의 적색, 녹색, 및 청색 광선 번들들에 대한 컬러를 계산하기 위해 사용될 수 있다(예컨대, 단지 하나의 메모리 판독만을 요구하는). 이러한 정보에 기초하여, 광선 투사기(310)는 더 빠른 타일들(예컨대, 중심에 가까운 것들)을 위한 광선 번들들과 함께 더 느린 타일들(예컨대, 에지들에 가까운 것들)을 위한 광선 번들들을 준비하는 것 사이에서 교번할 수 있다. 예로서, 로우에 160개 타일들이 있다면, 이어지는 타일 순서는 요구된 평균 텍셀 판독 대역폭을 균등하게 나눌 것이다: 0, 80, 1, 81, 2, 82(각각의 수는 160개 타일들의 로우에서 타일의 순서에 대응한다).
변환 블록(300)의 다음 블록에서, 메시 워프(320)는 그것들 개개의 궤적들을 특정하기 위해 광선들에 하나 이상의 "워프" 또는 "왜곡" 메시들을 적용할 수 있다. 왜곡 메시들은, 예를 들어, 카메라 또는 디스플레이의 렌즈의 효과들을 시뮬레이션하거나, 또는 정정하기 위해 택하여질 수 있다. 상기 설명된, 스캐닝 디스플레이 디바이스에 대한 다수의 이점들이 있지만, 또한 몇몇 단점들이 있다. 이들 단점들 중 일부는 종래의 또는 이상적인 디스플레이상에서의 이미지와 비교할 때 이미지에 대한 왜곡들의 형태로 온다. 렌즈를 통해 장면을 가만히 들여다보는 카메라의 메타포어를 사용하여, 이들 왜곡들 중 많은 것은 카메라 렌즈에 의해 구부려진 광에 야기된 워핑 또는 기하학적 왜곡들의 형태를 취한다.
도 8은 장면의 뷰포인트로부터 디스플레이를 위한 표면을 사후-워핑하거나 또는 재-샘플링하기 위한 제 2 광선투사 프로세스의 예시적인 개념화를 예시한다. 특정한 실시예들에서, 하나 이상의 표면들은 장면과 연관된 3D 가상 공간 내에서의 특정된 위치들에 그것들을 두는 위치 정보를 포함할 수 있다. 제한으로서가 아닌 예로서, 도 8을 참조하면, 표면(850)은 연관된 위치 정보에 기초하여 그것의 예시된 위치에 위치될 수 있다. 이 예에서, 표면은 뷰어에 대하여 가변 깊이들을 가진 3D 클록을 묘사하는 것으로 보일 수 있지만(예컨대, 9시 정각 영역은 3시 정각 영역보다 뷰어로부터 더 멀리 떨어져 보일 수 있다), 표면은, 특정한 실시예들에서, 뷰어를 향한 편평한 표면일 수 있다(예컨대, 그것의 수직 벡터는, 적어도 처음에 뷰포인트가 변하기 전에, 뷰어를 향해 가리킨다). 오브젝트(들)의 임의의 시각적 표현들은 표면의 텍스처 데이터의 부분으로서 저장될 수 있다.
특정한 실시예들에서, 표면의 각각의 텍셀은 그것이 위치될 곳을 특정하는 연관된 위치 정보를 가질 수 있다. 광선투사 프로세스는 광선투사기(310)에 의해 수행될 수 있다. 제한으로서가 아닌 예로서, 도 8을 참조하여, 가상의 광선(830)은 뷰포인트(820)에서 나오며 스크린(810)(예컨대, 헤드-마운트 디스플레이 유닛(130)의 두 개의 아이피스들 중 하나의 디스플레이(170))의 픽셀(815)과 교차할 수 있다. 제한으로서가 아닌 또 다른 예로서, 가상의 광선(860)은 픽셀(870)과 교차할 수 있다. 특정한 실시예들에서, 변환 블록(300)의 메시 워프 블록(320)은 헤드-마운트 디스플레이 유닛(130)의 광학 구조들)(예컨대, 헤드-마운트 디스플레이 유닛(130)의 렌즈들의 광학 효과들)에 의해 도입된 왜곡 및/또는 다른 수차들(예컨대, 색 수차들)을 감안할 수 있다. 왜곡들/수차들은 수학적으로 정정될 수 있다. 이러한 정정은 개념적으로 도 8에 도시된 바와 같이, 왜곡들/수차들을 감안하기 위해 가상의 광선들(예컨대, 가상의 광선(830), 가상의 광선(860))을 수학적으로 궤도-수정하는 왜곡 메시(840)를 통해 가상의 광선들이 이동하는 프로세스로서 표현될 수 있다. 제한으로서가 아닌 예로서, 가상의 광선(830)(왜곡/수차를 감안하기 위해 궤도 정정을 따르는)은 교차점(855)에서 표면(850)과 교차할 수 있다. 제한으로서가 아닌 또 다른 예로서, 가상의 광선(860)(왜곡/수차를 감안하기 위해 궤도 정정을 따르는)은 표면(850) 또는 임의의 다른 표면과 교차하지 않을 수 있다.
특정한 실시예들에서, 변환 블록(300)의 메시 워프(320)는 이들 기하학적 왜곡들에 대응하기 위해, 예컨대 이를 정정하기 위해 광선들에 하나 이상의 왜곡 메시들을 적용할 수 있다. 일 유형의 왜곡은 색 수차로서 알려져 있다. 색 수차는 렌즈를 빠져나간 광이 분산되어, 렌즈가 상이한 초점 포인트들에서 상이한 파장들(예컨대, 컬러들)의 광을 집중시키게 하는 광학에서의 효과를 나타낸다. 광선의 적색 구성요소는 녹색 또는 청색 구성요소와 상이한 회절 각을 가질 수 있다. 효과는 컬러 프린지들을 가진 흐릿한 이미지를 생성한다 효과는 비교적 저렴한 재료들이 이들 렌즈들의 물리적 속성들로 인해 렌즈들에서 사용될 때 발생할 수 있다. 스캐닝 요소 및 스캐닝 디스플레이 디바이스의 광학 시스템들이 덜 비싸고 더 가벼운 중량 재료들을 사용할 수 있기 때문에, 스캐닝 디스플레이는 이 효과를 보여줄 수 있다. 상이한 하드웨어 구성요소들을 사용하기보다는, 색 수차의 효과들은 왜곡 메시의 적용에 의해 정정될 수 있다. 상이한 컬러들의 광선들이 상이하게 거동하므로, 특정한 실시예들은 상이한 컬러들에 대해 별도로 광선들을 투사할 수 있으며(예컨대, 적색, 녹색, 및 청색에 대한 3개의 광선들이 각각의 픽셀로부터 투사될 수 있다) 상이한 파장들의 상이한 굴절 특성들을 감안하기 위해 별도로-정의된 왜곡 메시들을 적용할 수 있다. 특정한 실시예들에서, 상이한 컬러들에 대한 별개의 왜곡 메시들을 정의하기보다는, 적색 및 청색 구성요소들에 대한 색 수차를 정정하기 위한 왜곡 메시가 녹색 구성요소로부터의 오프셋으로서 특정될 수 있다.
색 수차를 처리하기 위해 정의된 왜곡 메시는 디스플레이(170)의 예상된 색 수차 특성들 및/또는 사용자의 눈의 상대적인 응시 방향(예컨대, 아이 트래커(eye tracker)에 의해 결정된 바와 같이)을 반전시키도록 구성될 수 있다. 왜곡 메시가 광선 투사기(310)에 의해 인공 현실 장면으로 전송된 광선들에 적용될 때, 적색, 녹색, 및 청색 광선들 간의 변화의 정도는 그 자체가 디스플레이에서 광선의 위치에 기초하여 달라질 수 있다. 디스플레이의 중심에 가까운 변화의 정도는 존재하지 않을 수 있지만, 하나 이상의 에지들에 가까운 변화의 정도는 비교적 크며 검출하기에 용이할 수 있다. 변화는 보간이 왜곡 메시에 대한 모든 값들을 산출하기에 효율적인 방식일 수 있도록 매끄럽게 변할 수 있다. 몇몇 실시예들에서, 변화는 직접 교정이 요구될 수 있도록 할 수 있다. 값들은 1-회 교정 이벤트의 부분으로서 사전 계산되고, 공유 메모리(240), 또는 워프 메모리(325)에 저장되며, 디바이스가 사용 중인 동안 적용될 수 있다. 그러나, 렌즈 및 디스플레이 속성들은 열에 따라 변할 수 있으며, 왜곡 메시의 값들은 상당한 열이 검출되는 경우 조정을 요구할 수 있다.
또 다른 유형의 왜곡은 렌즈 또는 스캐닝 왜곡으로서 알려져 있다. 이러한 왜곡은 렌즈들이 완전하게 균일하지 않기 때문에 도입될 수 있다. 그것이 렌즈 뒤에 있는 표면에 걸쳐 그들의 눈을 스캐닝함에 따라, 하나의 위치에서 다음 것으로 광의 굴절 각에서 약간의 변화가 있을 수 있다. 종종, 광선 투사를 위해 사용된 것과 같은, 렌즈의 시뮬레이션은 균일한 것으로 가정된다. 이러한 왜곡을 감안하는데 실패하는 것은 스캐닝 디스플레이에서 사용된 광에 대한 이상한 거동을 야기할 수 있으며, 이것은 스캐닝 디스플레이의 부분으로서 비교적 저렴한 재료들을 사용하는 효과를 증가시킬 수 있다. 특정한 실시예들에서, 광선 투사기(310)로부터의 광선들은 렌즈 왜곡의 효과들을 반전시키기 위해 왜곡될 수 있어서, 사용자가 볼 때 완벽하게 균일한 렌즈의 피상 효과를 생성할 수 있다. 몇몇 실시예들에서, 이러한 효과는, 렌즈들이 용도에 따라 상당히 달라지지 않는다고 가정될 수 있을 때, 제조 동안 교정될 수 있다. 몇몇 실시예들에서, 렌즈는 손상될 수 있고, 그것의 장착 시 약간 시프트할 수 있으며, 열, 또는 많은 다른 종류들의 영구적 수정이 발생할 수 있기 때문에 소성 변형이 발생할 수 있다. 렌즈 왜곡을 정정하기 위한 왜곡 메시는 그에 따라 수정될 수 있다. 더욱이, 렌즈 왜곡의 효과는 열과 같은 효과들로 인한 사용 동안 악화될 수 있으며, 이것은 렌즈를 워핑할 수 있다. 왜곡 메시는 이러한 효과를 정정하기 위해 빈번한 재교정을 요구할 수 있다.
또 다른 유형의 왜곡은 이미지들이 스캐닝 디스플레이 디바이스 상에서 어떻게 디스플레이되는지에 관한 것이며 롤링 셔터로서 불리운다. 스캐닝 디스플레이 디바이스의 픽셀들은 한 번에 모두 디스플레이되지 않는다. 대신에, 그것들은 스캐닝 패턴을 따라 디스플레이로 "기록"된다. 예를 들어, 디스플레이의 전체 로우의 모든 픽셀들은 다음 로우 아래로 이동하기 전에 기록될 수 있다. 이를 가능하게 하기 위해, 디스플레이 엔진(150)은 또한 또 다른 로우 아래로 이동하기 전에 설정된 픽셀들의 로우들에 대한 픽셀 컬러 값들을 결정할 수 있다. 디스플레이 엔진(150)이 빠른 프레임 리프레시 레이트를 제공하도록 설계되지만, 전체 프레임이 출력될 수 있기 전에 인공 현실 장면이 변할 수 있다는 것이 여전히 가능하다. 이것은 롤링 셔터 효과와 같은 효과를 생성할 수 있다. 왜곡 메시는 이러한 효과에 대응하기 위한 산출될 수 있다. 왜곡 메시는 다음 인입 로우를 준비하기 위해 프레임의 각각의 로우가 변환 엔진에 의해 프로세싱된 후 업데이트될 수 있다.
다른 왜곡은 디스플레이들이 어떻게 제조되는지에 관한 것이다. 하나의 왜곡은 다이 오정렬로서 불리운다. 스캐닝 디스플레이에서 사용된 이미터를 포함한, 디스플레이들은 LED들의 정렬된 패널들을 포함한다. 밀집한 LED 패널들을 제조할 때의 어려움들로 인해, 패널들은 단지 특정된 허용 오차 내에서 정렬된다. LED들의 두 개의 패널들의 정렬은 그것들이 두 개의 픽셀들을 초과할 수 있는 상기 허용 오차 내에서 수직으로 오정렬될 지라도 수용 가능한 것으로 고려될 수 있다. 이것은 각각의 이미터 디스플레이가 여러 개의 오정렬된 패널들을 포함하게 할 수 있다. 그러므로, 픽셀들의 간격 및 오정렬은 이상적인 디스플레이에 따라 고르게 또는 정확하게 분포되지 않을 수 있으며, 그 모델 상에서 인공 현실이 구성된다. 다이 오정렬을 정정하기 위해, 왜곡 메시는 디스플레이에서 픽셀들의 외형을 균일하게 하기 위해 생성될 수 있다. 예로서, 각각의 컬러 채널(예컨대, 적색, 녹색, 및 청색)에 대한 LED들은 단일 패널로 합성될 때, 또는 결과적인 이미지가 디스플레이를 위해 조합될 때 정렬되지 않을 수 있다. 오정렬은 두 개의 중첩하는 픽셀들이 동일한 좌표 번호에 의해 식별되지 않도록 할 수 있다. 예를 들어, 디스플레이될 동일한 픽셀에 대해, 적색 컬러 패널에서의 LED는 좌표 위치(10, 10)에 의해 참조될 수 있지만, 청색 컬러 패널에서 동일한 물리적 위치에서의 LED는 좌표 위치(11, 12)에 의해 참조될 수 있다. 디스플레이 엔진에 의해 적용된 것으로서 왜곡 메시는 이들 정렬 에러들을 정정할 수 있다. 또 다른 예로서, 오정렬은 LED 패널들의 방향(orientation)에서 기인할 수 있다. 예를 들어, 제 1 LED 패널은 동일한 합성 패널(또는 합성 이미지)에서 제 2 LED 패널에 비교할 때 회전을 보일 수 있다. 이러한 효과는 "클로킹(clocking)"으로서 불리울 수 있다. 디스플레이 엔진에 의해 적용된 바와 같이 왜곡 메시는 회전 오정렬에서 기인한 위치결정 에러들을 정정할 수 있다. 이러한 접근법은 상당한 하드웨어 오정렬 에러들을 정정하여, 제조 비용들 및 허용 오차들에 대한 요건들을 크게 단순화할 수 있다. 왜곡 메시는, 그러므로, 광선 투사기(310)에 의해 전송된 광선들의 각이 원인이 무엇이든, 다이 오정렬 효과에 대응하기에 충분히 재지향하게 한다. 특정한 실시예들에서, 이러한 효과는, 오정렬이 용도에 따라 상당히 달라지지 않을 것이라고 가정될 수 있으므로, 제조 동안 교정될 수 있다.
또 다른 왜곡은 디스플레이(170)에서 LED들의 위치와 관련된다. 요구된 수의 LED들을 통합하기 위해서 및 품질을 최대화하기 위해, LED들의 홀수- 및 짝수-넘버링된 컬럼들은 디스플레이의 수직 축을 따라 약간 상이한 위치들에 배치될 수 있다. 이러한 왜곡은 "홀수/짝수 컬럼 왜곡"으로서 불리운다. 다이 오정렬과 유사하게, 이러한 특정한 왜곡은 효과에 대응하기 위해 왜곡 메시를 갖고 정정될 수 있다. 왜곡 메시는, LED들의 홀수 및 짝수 컬럼들의 수직 정렬이 용도에 따라 달라질 가능성이 없으므로, 교정 절차 동안 생성될 수 있다.
왜곡들은 또한 가변초점 렌즈들에 대응하기 위해 시뮬레이션된 렌즈의 초점 포인트를 조정함으로써 도입될 수 있다. 특정한 실시예들에서, 헤드-마운트 디스플레이 유닛(170)의 디스플레이(170)는 이동 가능한 플랫폼상에 장착될 수 있다. 이것은 디스플레이(170)가 사용자의 초점 평면이 시프트함에 따라 조정하도록 허용하여, 디스플레이 충실도 및 사용자를 위한 편안함을 개선할 수 있다. 그러나, 디스플레이를 이동시키는 것은 이전 계산된 왜곡 메시들에 의해 정정된 효과들을 시프트하게 할 수 있다. 그러므로, 디스플레이가 이동될 때마다, 왜곡 메시들은 조정을 요구할 수 있다. 유사하게, 스캐닝 디스플레이에서 광학 시스템은 동일한 효과를 생성하도록 변경되어, 유사한 솔루션을 요구할 수 있다. 더욱이, 초점 평면을 변경하는 것은 왜곡 메시에 의해 정정될 수 있는, 발생할 그 자신의 왜곡들을 도입할 수 있다.
또 다른 유형의 왜곡은 디스플레이를 보는 동안 눈의 움직임에 의해 도입될 수 있다. 눈은 빠르게 이동하여, 장면에 대한 사용자의 뷰를 시프트하게 할 수 있다. 이것은 급속한 눈 움직임이 눈에서 검출된 이미지들을 전단하게 할 수 있기 때문에 왜곡들을 도입할 수 있다. 이러한 효과는 적어도 눈 움직임-기반 왜곡들이 보는 눈 자체에서의 효과들에 기초하며, 단지 디스플레이에서는 아니라는 점에서 롤링 셔터 효과와 상이하다. 상기 논의된 바와 같이, 헤드-마운트 디스플레이 유닛(130)은 아이-트래킹 카메라 및 수반된 소프트웨어를 포함한 아이-트래킹 구성요소를 포함할 수 있다. 아이 트래킹 정보(eye tracking information)는 제어 블록(200) 또는 변환 블록(300)으로 전달될 수 있다. 아이 트래킹 정보는, 예를 들어, 눈의 가속을 검출함으로써 눈 움직임을 예측하고, 사용자가 경험할 수 있는 왜곡의 정도를 결정하기 위해 사용될 수 있다. 급속한 눈 움직임의, 기하학적 왜곡 효과들에 대응하는 왜곡 메시가 산출될 수 있다.
상기 설명된 기하학적 왜곡들, 및 임의의 다른 기하학적 왜곡들을 정정하기 위해, 변환 블록(300)의 메시 워프 블록(320)은 인공-현실 장면으로의 그것들의 궤적을 정의하기 위해 광선들에 하나 이상의 왜곡 메시들을 적용할 수 있다. 특정한 실시예들에서, 왜곡 메시들은 사전 계산되며 변환 블록(300)의 워프 메모리(325)에 저장된다. 왜곡 메시들은 메시 워프 블록(320)이 그것들이 적용될 때마다 왜곡 메시들을 생성하지 않는다는 의미에서 사전 계산된다. 대신에 그것들은 다양한 입력들에 기초하여 하나 이상의 다른 구성요소들에 의해 생성될 수 있다. 몇몇 왜곡 메시들은, 그것들이 단지 교정 절차 동안과 같은, 한 번 또는 적어도 빈번하지 않게 계산될 필요가 있다는 의미에서, 정적일 수 있다. 예를 들어, 다이 오정렬 또는 홀수/짝수 컬럼 왜곡들을 정정하도록 왜곡 메시를 생성하기 위해, 정확한 왜곡의 정도는, 왜곡이 디바이스가 사용될 때 상당히 변할 가능성이 없으므로, 단지 한 번 결정될 필요가 있다. 다른 왜곡들은 메시들의 모음을 사용하여 정정되고 사전 계산되며 용도에 기초하여 적용될 수 있다. 예를 들어, 렌즈 또는 스캐닝 왜곡, 또는 롤링 셔터에 의해 도입된 왜곡을 정정하기 위한 왜곡 메시들은 미리 산출될 수 있으며, 메시 워프 블록(320) 또는 변환 블록(300)의 또 다른 적절한 구성요소가 사용할 적절한 왜곡 메시를 선택할 수 있다.
다른 왜곡 메시들은, 그것들이 빈번하게, 프레임이 1차 렌더링 구성요소(120)에 의해 렌더링될 때마다, 디스플레이 엔진(150)에 의해 렌더링된 프레임당 한 번, 또는 아마도 훨장면 더 빈번하게 업데이트될 필요가 있다는 점에서, 동적일 수 있다. 예를 들어, 가변초점 렌즈들의 렌즈 움직임을 정정하기 위해 도입된 왜곡들은 가변초점 렌즈들이 조정할 때마다 업데이트될 필요가 있을 수 있다. 특정한 실시예들에서, 왜곡 메시들은 특정한 렌즈 구성들을 위해 사전 계산될 수 있다(예컨대, 하나는 가장 가까운-가능 위치를 위한 것이며 또 다른 것은 가장 먼 위치를 위한 것이다). 렌즈의 실제 위치(가변초점 렌즈의 렌즈-조정 제어기로부터 이용 가능할 수 있는 데이터)에 기초하여, 픽셀 당 왜곡 값은 사전 계산된 가장 가까운-위치 및 가장 먼-위치 왜곡 메시들에 의해 특정된 바와 같이 상기 픽셀에 대한 사전 계산된 왜곡 값들을 보간함으로써 계산될 수 있다. 보간된 왜곡 값들은 그 후 그것들이 투사될 때 광선들을 왜곡시키기 위해 사용될 수 있다. 동적 왜곡 메시의 또 다른 예는 눈 움직임에 의해 야기된 왜곡들을 정정하기 위해 사용된다. 사용자의 눈들이 디스플레이들(예컨대, 좌측-눈 디스플레이(170) 및 우측-눈 디스플레이(170))에 대해 이동함에 따라, 각각의 디스플레이에 대한 왜곡 메시는 눈 움직임 또는 초점 시프트가 검출될 때마다 업데이트될 필요가 있을 것이다. 각각의 왜곡 메시에 대한 조정은 디스플레이에 대한 사용자의 눈의 응시에 기초하여 계산될 수 있다.
특정한 실시예들에서, 이들 왜곡 메시들의 각각은 산출되며 워프 메모리(325)에 저장될 수 있다. 그것들은 또한 단일 왜곡 메시로 통합되며 워프 메모리(325)에 저장될 수 있다. 특정한 실시예들에서, 왜곡 메시는 제어 블록(200)의 마이크로제어기(230)에 의해 워프 메모리(325)로 로딩된 하나 이상의 룩업 테이블들로 구성될 수 있다. 룩업 테이블은 타일의 개개의 픽셀들에 대응하는 광선들에 대한 왜곡의 정도를 특정하는 하나 이상의 엔트리들을 포함할 수 있다. 예를 들어, 룩업 테이블의 값들은 타일의 코너 픽셀들에 대응하는 광선들에 대한 왜곡의 정도를 특정할 수 있다. 워프 블록(320)은 이들 코너 값들로부터, 내부 광선들에, 또는 전체 광선 번들에 적용될 왜곡 값들을 보간할 수 있다. 또 다른 예로서, 룩업 테이블의 값들은 타일에서의 모든 픽셀들에 대응하는 광선들에 대한 왜곡의 정도를 특정할 수 있다. 워프 블록(320)은 그 후 워프 메모리(325)로부터 판독된 광선들에 대한 왜곡 값들을 적용할 수 있다. 특정한 실시예들에서, 룩업 테이블은 단일 컬러 채널에 대응하는 광선 번들들에 대한 왜곡 값들을 특정할 수 있으며 다른 컬러들에 대응하는 광선 번들들에 대한 상기 왜곡 값들로부터의 컬러 오프셋들을 특정할 수 있다. 예를 들어, 룩업 테이블은 녹색 컬러 채널에 대한 광선 번들들에 대한 왜곡 값들을 특정할 수 있다. 녹색 왜곡 값으로부터의 오프셋들은 또한 적색 및 청색 컬러 채널에 대해 특정될 수 있다. 따라서, 왜곡 메시 값들은 워프 메모리(325)로부터 한 번 검색되며 3개의 광선 번들들로 적용될 수 있다. 몇몇 실시예들에서, 메시 워프 블록(320)은 적용될 왜곡 메시 또는 메시들을 직접 산출할 수 있다. 본 개시는 특정한 방식으로 왜곡 메시들을 설명하지만, 본 개시는 왜곡 메시들의 임의의 적절한 방식을 고려한다.
변환 블록(300)의 한도 비교 블록(330)에서, 사후-워프 광선 번들들은 장면으로 투사되며 광선 번들들에 대응하는 타일들이 장면에서의 표면과 교차하는지가 결정된다. 특정한 실시예들에서, 제어 블록(200)에 의해 1차 렌더링 구성요소(120)로부터 수신된 표면들은 서술된 경계 또는 경계 함수를 사용하여 표면들의 치수들 및 위치들을 특정할 수 있다(예컨대, 표면의 일 코너에 대한 뷰 공간에서의 최소 x 및 y 좌표들, 반대 코너에 대한 뷰 공간에서의 최대 x 및 y 좌표들). 각각의 표면에 대한 경계 정보는 제어기 블록(200)에 의해 사전 계산될 수 있으며 변환 블록(300)의 경계 메모리(335)에 저장될 수 있다. 타일이 표면과 교차하는지를 결정하기 위해, 광선 번들은 표면들이 배치되는 뷰 공간을 통해 가로지를 수 있다. 특정한 실시예들에서, 각각의 광선 번들은 그것들 각각의 경계들이 교차하는지를 결정하기 위해, 1 대 1로, 각각의 표면에 대해 테스트될 수 있다. 특정한 실시예들에서, 장면의 표면들은 깊이-별 방식으로 저장될 수 있으며, 여기에서 뷰포인트에 더 가까운 표면들은 더 가까운 표면들과의 교차들이 먼저 테스트될 수 있도록 데이터 구조에서 먼저 설정된다. 광선 번들이 장면을 통과함에 따라, 각각의 표면의 경계들은 투영된 광선 번들의 경계에 비교될 수 있다. 이러한 경계 비교를 수행할 때 다른 효율들이 사용될 수 있다. 광선 번들이 임의의 표면과 교차되지 않는다고 결정되면, 광선 번들은 폐기될 수 있으며 대응하는 타일은 디폴트 값 또는 그것과 동일한 것을 나타내는 플래그와 연관될 수 있다. 디폴트 값은 특정된 배경 텍스처, 단색, 무색, 임의의 다른 적절한 디폴트 값, 또는 그것의 임의의 조합일 수 있다. 타일이 표면과 교차하는 것으로 결정되면, 타일-표면 쌍(예컨대, 타일에 대한 식별자 및 표면에 대한 식별자)은 변환 엔진(340)으로 전달된다. 타일-표면 쌍 및 교차 포인트의 좌표들은 뷰 공간 좌표 시스템에서 특정될 수 있다.
변환 블록(300)의 변환 엔진(340)은 타일-표면 쌍에서의 타일의 좌표들을 뷰 좌표 공간(예컨대, 뷰어에 대한 3D 좌표 공간)에서 표면의 텍스처 좌표 공간(예컨대, 텍스처 내에서의 2D 좌표 공간)으로 변환한다. 렌더링 파이프라인에서 좌표들의 일반적인 이해에 있어, 변환 엔진(340)은, 변환 메모리(345)에 저장된 좌표 공간 정보를 사용하여, 타일이 표면과 교차하는 좌표들을 뷰 공간(예컨대, (x, y) 좌표들)에서 표면의 텍스처의 (u, v) 좌표들로 변환한다. 예를 들어, 변환 엔진(340)은 타일의 4개의 코너들을 표면 좌표 공간으로 변환할 수 있다. 몇몇 실시예들에서, 변환 엔진(340)은 변환을 직접 계산할 수 있다. 타일-표면 쌍들(395)과 연관된 데이터는 그 후 각각의 픽셀 블록(400)으로 전달된다. 타일-표면 쌍들을 픽셀 블록(400)으로 전달할 때, 변환 블록(300)은 또한, (x, y) 좌표들에서 (u, v) 좌표들로의 변환 값들(차이 값들을 포함한), 다른 컬러들의 광선 번들들의 교차 위치들에 대한 텍스처 공간에서의 오프셋 값들(예컨대, 특정된 절대 (u, v) 좌표가 녹색 구성요소에 대한 것이면, 녹색에 대해 정의된, 적색에 대한 u 및 v 오프셋들 및/또는 청색에 대한 u 및 v 오프셋들에 대한 부가적인 정보가 또한 전송될 수 있다), 로우에 대한 모든 타일들이 프로세싱되었음을 나타내는 로우의 끝(End of Row) 플래그, 임의의 다른 적절한 파라미터들, 또는 그것의 임의의 조합을 포함한, 부가적인 파라미터들을 전달할 수 있다. 본 개시는 특정한 방식으로 좌표 변환을 설명하지만, 본 개시는 좌표 변환의 임의의 적절한 방식을 고려한다.
픽셀 블록(400)은 변환 블록(300)으로부터 타일-표면 쌍들(395)을 수신하며 타일에서 각각의 픽셀에 대한 픽셀 컬러 값을 결정하기 위해 각각의 타일 내에서의 동일한 위치들에서 이중선형 보간을 수행할 수 있다. 예시적인 픽셀 블록(400)의 아키텍처는 도 5에서 도시된다. 픽셀 블록(400)은 데이터를 수신하며 이중선형 보간을 스케줄링하는 버퍼 관리기(410)를 포함할 수 있다. 픽셀 블록은 컬러 값의 각각의 구성요소에 대한 컬러 필터 블록, 예컨대 적색 필터 블록(420), 녹색 필터 블록(430), 및 청색 필터 블록(440)을 추가로 포함할 수 있다. 3개의 컬러 구성요소들은, 적어도 색 수차의 가능성으로 인해 별도로 프로세싱될 수 있다. 도 5에 도시된 예시적인 픽셀 블록에서, 버퍼 관리기(410)는 특정한 메모리 어드레스들을 참조함으로써 판독 요청들(415)을 텍셀 메모리(220)로 발행할 수 있다. 텍셀 메모리(220)는 대응하는 데이터(예컨대, 각각 크기가 16-비트인 16 텍셀들에 대응하는, 클록 사이클 당 256-비트들의 단위로)를 각각, 필터 블록들(420, 430, 440)의 텍셀 버퍼들(422, 432, 442)로 로딩할 수 있다. 특정한 실시예들에서, 필터 블록들은 선택적으로 텍셀 메모리(220), 또는 도 5에 도시되지 않은 픽셀 블록(400)의 다른 구성요소들로부터 판독될 수 있다.
도 5의 픽셀 블록에서, 버퍼 관리기(410)는 변환 블록(300)으로부터, 타일이 교차하는 표면을 나타내는, 타일-표면 쌍들(395)을 수신할 수 있다. 보간을 위한 샘플들을 스케줄링하기 전에, 버퍼 관리기(410)는 관련 있는 표면 데이터(즉, 텍셀 메모리(220)로부터의 텍셀 어레이의 관련 부분 및 컬러 채널)를 적색 필터 블록(420), 녹색 필터 블록(430), 및 청색 필터 블록(440)의 각각 내에서의 버퍼들로 로딩할 수 있다. 버퍼 관리기(410)는 각각의 컬러 구성요소에 대해, 변환 블록(300)에 의해 결정된 바와 같이, 투영된 타일 및 표면 사이에서의 교차를 포함하는 텍스처 공간에서 보존 경계 박스를 계산함으로써 어떤 텍셀 어레이가 관련 있는지를 결정할 수 있다. 이들 경계 박스들은 그 후 표면의 텍셀 어레이의 어떤 부분이 3개의 필터 블록들(420, 430, 440) 중 임의의 것에 의해 요구될지를 결정하기 위해 사용될 수 있다. 버퍼 관리기(410)는 적절한 메모리 어드레스(415)를 참조함으로써 텍셀 메모리(220)로부터 표면의 텍셀 어레이의 요구된 부분들을 요청한다. 텍셀 메모리(220)는 요구된 부분들을 관련 있는 필터 블록들의 텍셀 버퍼들(422, 432, 442)로 로딩한다. 특정한 실시예들에서, 텍셀 버퍼들(422, 432 442)로 로딩된 데이터의 요구된 부분들은 타일 내에서의 각각의 샘플 위치에 대한 컬러를 결정하기에 충분할 것이다(예컨대, 이중선형 보간을 통해). 예를 들어, 32x32 텍셀들과 연관된 적절한 컬러 데이터는 대응하는 컬러 필터 블록(420, 430, 440)으로 로딩될 것이다.
색 수차를 포함한, 특정한 왜곡들에 의존하여, 버퍼 관리기(410)는 필터 블록들(420, 430, 440)의 요구들을 만족시키기 위해 텍셀 메모리(220)로부터 하나 이상의 별개의 요청들을 할 필요가 있을 것이다. 최소 색 수차를 가진 경우에, 텍셀 메모리(220)(예컨대, 16 텍셀들의 16-비트 컬러 정보에 대응하는 25-비트 워드의)로부터의 단일 판독 요청은 3개의 필터 블록들(420, 430, 440) 모두에 의해 사용될 수 있다(예컨대, 판독 데이터는 그것들 각각의 버퍼들로 동시에 로딩될 수 있다). 큰 색 수차(예컨대, 16 픽셀들보다 많은)를 가진 경우들에서, 버퍼 관리기(410)는 그것들의 요구들에 의존하여, 필터 블록들(420, 430, 440)에 대한 별개의 세트들의 텍셀 어레이들을 요청할 필요가 있을 수 있다(버퍼 관리기(410)는 각각 3개의 필터 블록들에 대한 3개의 별개의 판독 요청들을 수행할 필요가 있을 것이다). 따라서, 색 수차는 텍셀 메모리(220)로부터 요구된 판독 대역폭에서 최대 3회 변화를 야기할 수 있다. 변환 블록(300)의 광선 투사기(310)가 예측된 낮은 색 수차를 가진 타일들(예컨대, 스크린의 중심에 가까운 타일들)과 예측된 높은 색 수차(예컨대, 스크린의 에지를 따르는)를 가진 타일들을 인터리빙하기 때문에, 이러한 변화는 제어되며, 텍셀 메모리(220) 및 픽셀 블록(400)의 대역폭 요구들은 안정되거나 또는 로드-균형화된다. 이것은 결과적으로 픽셀 블록(400)을 바쁘게 유지하기 위해 요구된 메모리 대역폭을 감소시킨다. 본 개시는 특정한 방식으로 버퍼 관리기를 설명하지만, 본 개시는 임의의 적절한 버퍼 관리기를 고려한다.
특정한 실시예들에서, 주어진 타일-표면 쌍에 대해, 버퍼 관리기(410)는 필터링을 시작하도록 허용하기 전에 타일에서의 각각의 샘플 위치에 대해 필요한 표면 데이터의 부분들을 로딩할 수 있다. 특정한 실시예들에서, 이것은 상기 타일-표면 쌍에서 샘플들을 프로세싱하기 전에 타일에 대한 요구된 텍셀들 모두를 로딩함으로써 행해질 수 있다. 그렇게 하기 위한 예시적인 프로세스는 다음과 같을 수 있다. 타일-표면 쌍과 연관된 데이터를 고려해볼 때, 픽셀 블록(400)은 각각의 컬러 구성요소에 대한 투영된 타일이 텍스처 공간에서의 표면과 교차하는 곳에 대한 보수적 경계 박스들을 계산할 수 있다. 일단 공간이 3개의 텍셀 버퍼들(422, 432, 442) 모두에서 이용 가능하다면, 버퍼 관리기(410)는 타일(예컨대, 16x16 샘플들) 내에서의 샘플 위치들의 컬러 값들을 결정하기 위해 요구된 텍셀 데이터를 얻기 위해 텍셀 메모리(220)로부터 판독 요청을 발행할 수 있다. 특정한 실시예들에서, 경계 박스 내에서 요구된 데이터(예컨대, 32x32 텍셀들)는 4x4 텍셀들의 세트들의 순차적인 판독들을 통해 획득될 수 있다. 4x4 텍셀들의 각각의 검색된 세트는 그 후 컬러 샘플링을 위해 상기 특정한 세트의 4x4 텍셀들을 요구하는 각각의 필터 블록의 텍셀 버퍼로 로딩될 수 있다.
각각의 타일에 대한 컬러 샘플링은 샘플 스텝퍼 블록에 의해 관리될 수 있다. 변환 블록(300)으로부터의 타일-표면 데이터(395)에 기초하여, 샘플 스텝퍼 블록은 특정한 컬러(예컨대, 녹색)에 대한 투영된 타일의 코너들이 표면에 교차하는 곳의 (u, v) 텍스처 좌표들을 결정할 수 있다. 투영된 타일의 풋프린트 내에서(그 코너들의 (u, v) 좌표들에 의해 정의된 바와 같이), 샘플 스텝퍼는 코너 좌표들 상에서 보간(예컨대, 텍스처 좌표 공간에서의 워핑된 투영 타일이 평행 사변형일 필요가 없도록, 증분적 이중선형 보간)을 적용함으로써 타일 내에서 다수의(예컨대, 16x16) 샘플 위치들((u, v) 텍스처 공간에서 특정된)을 결정할 수 있다. 샘플 스텝퍼는 그 후 16x16 샘플들을 통해 설명하여, 2x2 블록들의 샘플들(스크린 공간에서 2x2 블록들의 픽셀들에 대응하는)에 대한 필터 명령들을 발행할 수 있다. 샘플들의 쿼드가 동시에 필터링될 수 있다. 각각의 샘플에 대한 필터링은 이중선형 보간 또는 포인트 샘플링을 사용하여 수행될 수 있다.
특정한 실시예들에서, 적색 필터 블록(420)은 내부 버퍼들에 저장된 타일 데이터 및 표면을 갖고 이중선형 보간을 수행할 수 있다. 표면에 대응하는 텍셀 어레이들은 텍셀 메모리로부터 수신되며 하나 이상의 텍셀 버퍼들(422)에 저장될 수 있다. 텍셀 버퍼들(422)은 연관된 (u, v) 좌표들의 값들을 시프트함으로써 텍셀 어레이들에서의 텍셀들을 나눌 수 있다. 텍셀 데이터는, 텍셀 메모리(220)로부터의 판독이, 텍셀 버퍼(422)로 기록될 때, 텍셀 데이터로 하여금 텍셀들의 정렬된 블록들로 나누게 하도록 텍셀 메모리(220)에 저장될 수 있다. 텍셀 데이터는 결과적으로 보간을 위한 정렬된 텍셀들의 임의의 블록들을 제공하기 위해 각각의 텍셀 버퍼(422)에 저장된다. 4개의 정렬된 픽셀 위치들은 하나 이상의 픽셀 버퍼들(424)로부터의 샘플링에 의해 동시에 샘플링될 수 있다. 픽셀 버퍼들(424)은 텍스처 공간(예컨대, (u, v) 좌표들)에서의 타일로부터 2x2 블록의 샘플 위치들을 생성한다. 텍셀 버퍼(422) 및 픽셀 버퍼(424)는 이중선형 보간을 수행하기 위해 사용된다. 이중선형 보간은 2x2 블록의 적색 픽셀 컬러 값들(427)을 야기할 수 있으며, 이것은 픽셀 출력(595)의 부분으로서 디스플레이 블록(500)으로 제공된다.
특정한 실시예들에서, 부가적인 전략들이 품질에 대한 속도 또는 감소된 전력 소비를 최적화하기 위해 이용될 수 있다(예컨대, 이중선형 보간 대신에 단일 포인트 샘플링을 사용하여). 이중선형 보간을 위한 다른 최적화들이 또한 고려된다. 예를 들어, 버퍼 관리기(410)는 타일 위치가 표면과 교차하지 않는다고 결정하기 위해 서브-타일들(변환 블록(300)에 의해 공급된)을 사용할 수 있으며, 따라서 어떤 이중선형 보간도 상기 위치에서 요구되지 않는다. 적색 필터 블록(420)은 결과적인 픽셀 컬러 값들(427)을 디스플레이 블록(500)에 대한 지정된 메모리 위치로 출력한다. 적색 필터 블록(430) 및 청색 필터 블록(440)은 각각의 픽셀 버퍼들(434 및 444)에 저장된 동일한 픽셀 값들을 가진 그것들 각각의 컬러 채널들에 대해 각각의 텍셀 버퍼들(432 및 442)에 저장된 텍셀 값들에 따라 도작함으로써 근본적으로 동일한 방식으로 작동한다. 녹색 필터 블록(430)은 녹색 픽셀 컬러 값들(437)을 디스플레이 블록(500)으로 출력할 수 있다. 청색 필터 블록(440)은 청색 픽셀 컬러 값들(447)을 디스플레이 블록(500)으로 출력할 수 있다. 버퍼 관리기(410)는 텍셀 메모리(220)로부터의 판독들을 감소시키기 위해 필터 블록들 사이에서 정보(알파 컬러 채널 값들과 같은)의 공유를 지원할 수 있다. 본 개시는 특정한 방식으로 이중선형 보간을 설명하지만, 본 개시는 이중선형 보간의 임의의 적절한 방식을 고려한다.
특정한 실시예들에서, 아이-트래킹기는 사용자의 초점, 또는 고정 포인트를 제어 블록(200)을 통해 디스플레이 엔진(150)으로 보고할 수 있다. 픽셀 블록(400)은 사용자의 초점 포인트로부터 멀리 떨어진 픽셀 컬러 값들보다 높은 충실도로 사용자의 초점 포인트에 대응하는 픽셀 컬러 값들을 생성하기 위해 이 정보를 사용할 수 있다. 이러한 기술은 포비티드 렌더링으로서 알려져 있다. 포비티드 렌더링은 디스플레이 엔진(150)으로 하여금, 사용자가 알 가능성이 더 높은 픽셀 위치들을 우선화하도록 허용하여, 동일한 정도의 충실도에서 모든 픽셀 컬러 값을 렌더링하는 것에 대해, 다른 인자들 중에서 렌더링 시간, 에너지 비용, 및 열 발생을 감소시킨다. 픽셀 블록(400)은 수행되고 있는 포비티드 렌더링의 유형에 기초하여 다수의 종류들의 포비션 패턴들을 생성할 수 있다. 예를 들어, 하나의 이러한 패턴은 포비티드 링으로 불리울 수 있으며, 여기에서 초점 포인트로부터 더 멀리 이동하는 픽셀 위치에서의 별개의 품질 전이 포인트들이 있다. 픽셀 블록은 이들 링들 사이에서 요구된 품질 레벨을 보간할 수 있다. 픽셀 블록은 8-비트 포비션 패턴(450)으로서 결과적인 패턴을 디스플레이 블록으로 출력할 수 있으며 패턴을 포비션 패턴 메모리(525)에 저장할 수 있다. 본 개시는 특정한 방식으로 포비티드 렌더링을 설명하지만, 본 개시는 임의의 적절한 방식으로 포비티드 렌더링을 고려한다.
특정한 실시예들에서, 디스플레이 블록(500)은 픽셀 블록(400)으로부터 픽셀 컬러 값들(495)(예컨대, 타일 버퍼에 축적된)을 수신하고, 픽셀 컬러 값들(495)에 하나 이상의 밝기 정정들을 적용하며, 디스플레이(170)로의 출력을 위해 픽셀 컬러 값들(495)을 준비할 수 있다. 픽셀 컬러 값들(495)이 디스플레이 블록(500)에 의해 수신될 때, 그것들, 예컨대 2x2 블록들의 정렬된 적색, 녹색, 및 청색 컬러 값들은 타일-순으로 수신될 수 있다. 이것은 픽셀 블록(400)이 다음 타일로 이동하기 전에 하나의 타일에서(16x16 픽셀들을 포함할 수 있는) 2x2 픽셀들에 대한 픽셀 컬러들을 순차적으로 출력할 수 있기 때문이다. 디스플레이(170)(스캐닝 디스플레이일 수 있는)에 의해 사용될 픽셀 컬러 값들(495)을 출력하기 위해, 픽셀 컬러 값들(495)은 스캔라인-순으로 독출될 수 있다. 디스플레이 블록(500)은 또한 디스플레이 품질을 추가로 개선하기 위해 픽셀 컬러 값들(495)에 하나 이상의 밝기 정정들을 적용할 수 있다. 예시적인 디스플레이 블록(500)의 아키텍처가 도 6에 도시된다.
디스플레이를 위한 픽셀 컬러 값들(495)을 준비할 때 제 1 단계는 픽셀 블록(400)으로부터 수신된 픽셀 컬러 데이터(495)를 일련의 로우 버퍼들(500)에 저장하는 것이다. 로우 버퍼들(500)은 픽셀 버퍼 메모리(510), 워드 및 타일 메타데이터 메모리(515) 및 포비션 패턴 메모리(525)를 포함한다. 픽셀 버퍼 메모리(510)는 디스플레이(170)의 전체 폭에 대한 두 개의 로우들의 타일들을 유지한다. 예를 들어, 각각의 타일이 16x16 픽셀들이며, 디스플레이가 2560 픽셀 폭인 구성에서, 픽셀 버퍼 메모리(510)는 32x2560 픽셀들을 유지할 것이다. 픽셀 버퍼 메모리(510)의 구성은 디스플레이(170)의 특정한 스캔라인 방향에 의존하여 변할 수 있으며, 예컨대 스캔라인 방향이 수직이며 1440 픽셀 높이라면, 픽셀 버퍼 메모리는 1440x32 픽셀들을 유지할 수 있다. 픽셀 버퍼 메모리(510)에서의 각각의 픽셀은 36-비트 컬러 값들(예컨대, 적색, 녹색, 및 청색 컬러 채널들에 대해 12-비트 값들)로 표현될 수 있다. 특정한 실시예들에서, 픽셀 버퍼 메모리(510)는 픽셀 블록(400)에 의해 계산된 전체 컬러 정밀도를 저장할 수 있다. 특정한 실시예들에서, 픽셀 버퍼 메모리(510)는 픽셀 버퍼 메모리(510)의 메모리 요건들을 감소시키기 위해 지각적 인코딩과 같은 압축을 사용할 수 있다. 로우 버퍼들(505)은 워드 및 타일 메타데이터 메모리(515)를 포함할 수 있다. 메타데이터 메모리(515)는 픽셀 블록(400)으로부터 수신된 메타데이터를, 픽셀 컬러 값들(495)에, 또는 별개의 출력으로서 저장할 수 있다. 메타데이터는 픽셀 블록(400)에 의해 기록되지 않은 픽셀들의 블록들, 또는 컬러 값들을 포함하지 않는 타일들(예컨대, 타일들로부터 투사된 광선 번들이 임의의 표면에 교차하지 않았기 때문에)을 나타낼 수 있으며, 이것은 어떤 픽셀 컬러 값들도 생성되지 않았기 때문에 디스플레이될 필요가 없는 픽셀들에 대한 낭비된 대역폭 및/또는 계산을 감소시킬 수 있다. 로우 버퍼들(505)은 또한 픽셀 블록(400)에 의해 생성되며 픽셀 버퍼 메모리(510)에서의 타일과 연관된 8-비트 포비션 패턴(450)을 저장하는 포비티드 패턴 메모리(525)를 포함할 수 있다.
특정한 실시예들에서, 로우 버퍼들(505)은 각각 두 개의 로우들의 타일들(예컨대, 각각의 타일은 16x16 픽셀들을 나타낸다), 연관된 메타데이터, 및 포비션 패턴들을 저장하도록 구성된 이중-버퍼를 포함할 수 있다. 픽셀 블록(400)은 다른 버퍼에서의 픽셀들이 디스플레이(170)로 출력되는 동안 하나의 버퍼로 기록할 수 있다. 출력이 완료될 때(예컨대, 현재 출력 버퍼에서의 모든 픽셀들이 출력되었다), 디스플레이 블록(500)은 두 개의 버퍼들의 역할을 스와핑할 수 있다. 예를 들어, 픽셀들을 출력하기 위해 이전에 사용된 버퍼가 이제 기록될 것이며, 새로운 픽셀 데이터를 수신하기 위해 이전에 사용된 다른 버퍼는 이들 픽셀들을 디스플레이로 출력할 것이다.
특정한 실시예들에서, 픽셀 컬러 값들(495)은 2x2 블록들의 정렬된 픽셀들에서 픽셀 블록(400)(예컨대, 타일 버퍼에 축적된)으로부터 수신된다. 디스플레이 블록(500)은 2x2 블록들의 정렬된 쌍들을 픽셀 버퍼 메모리(510)로의 단일 4x4 기록으로 통합한다. 픽셀 블록(400)으로부터 2x2 쿼드들의 높은 스루풋이 있을 때, 그것들은 통상적으로 정렬된 쌍들에 있다. 이것은 단일 메모리 액세스 포트가 판독들 및 기록들 둘 모두를 위해 사용되도록 허용한다.
픽셀 버퍼 메모리(510)에서의 메모리는 데이터가 타일 순서로 기록되며 로우 순서로 독출될 수 있도록 배열될 수 있다. 픽셀 컬러 데이터는 8 대 1 픽셀들로 픽셀 버퍼 메모리로부터 밝기 정정 블록(540)으로 판독된다. 픽셀 버퍼 메모리(510)는 두 개의 뱅크들로 조직될 수 있다: 뱅크 A 및 뱅크 B. 짝수 로우들 상에서, 뱅크 A는 첫 4개의 픽셀들을 저장하며, 이어서 4개의 픽셀들을 뱅크 B에 저장한다. 홀수 로우들 상에서, 첫 4개의 픽셀들이 뱅크 B에 저장되며, 이어서 4개의 픽셀들이 뱅크 A에 저장된다. 결과는 각각의 정렬된 4x2 기록 및 각각의 정렬된 8x1 판독이 뱅크 A로부터 4x1 픽셀들을 및 뱅크 B로부터 4x1 픽셀들을 액세스한다는 것이다. 이러한 메모리 기록 및 판독 패턴은 픽셀 버퍼 메모리(510)가 타일-순 기록들을 로우-순 판독들로 변환하게 한다. 본 개시는 특정한 방식으로 픽셀 순서를 변환하는 것을 설명하지만, 본 개시는 임의의 적절한 방식으로 픽셀 컬러 순서를 변환하는 것을 고려한다.
픽셀 시퀀서(530)는 메타데이터 메모리(515)로부터 타일-유효성 데이터를 판독할 수 있다. 픽셀 시퀀서(530)는 픽셀 컬러 값들이 픽셀 버퍼 메모리(510)로부터 판독되는 순서를 결정할 수 있다. 특정한 실시예들에서, 픽셀 시퀀서(530)는 8x1 픽셀들이 프로세싱을 위해 밝기 정정 블록(540)으로 판독되게 할 수 있다. 8x1 픽셀들은 클록 사이클 당 2개의 픽셀들을 판독할 수 있으며(예컨대, 각각의 픽셀이 3개의 12-비트 컬러-채널 데이터를 갖는다면, 72-비트가 클록 사이클마다 판독될 것이다), 이것은 총 4개의 클록 사이클들이 밝기 정정 블록(540)으로 판독될 8x1 픽셀들을 위해 사용될 수 있음을 의미한다.
특정한 실시예들에서, 픽셀 시퀀서(530)는 픽셀-지향 모드로 동작할 수 있다. 이러한 모드에서, 모든 픽셀들은 픽셀 버퍼 메모리(510)로부터 판독되며 밝기 정정 블록(540)으로 전송된다. 이러한 픽셀-지향 모드에서, 픽셀 시퀀서(530)는 16개 픽셀 컬러 값들의 블록들이 픽셀 버퍼 메모리(510)에서의 두 개의 상이한 위치들로부터 교번하여 판독되게 한다. 처음에, 픽셀 시퀀서(530)는 16개 픽셀 컬러 값들이 로우의 시작에서의 타일로부터 밝기 정정 블록(540)으로 판독되게 한다. 다음으로, 그것은 로우의 중간에서 시작하는 타일로부터의 16개 픽셀 컬러 값들이 판독되게 한다. 그것은 전체 로우가 판독될 때까지 이들 두 개의 시작 위치들로부터 순차적으로 교번한다. 픽셀-지향 모드는 스캐닝 디스플레이 디바이스를 위한 디스플레이(170)에 의해 사용된 픽셀 컬러 값 로드 패턴을 수용하기 위해 이러한 순서를 사용할 수 있다.
특정한 실시예들에서, 픽셀 시퀀서(530)는 타일-지향 모드로 동작할 수 있다. 이러한 모드에서, 픽셀 시퀀서는 픽셀 버퍼 메모리(510)로부터의 픽셀 컬러 값들에 대응하는 워드 및 타일 메타데이터 메모리(515)로부터 타일-유효성 메타데이터를 판독하며 단지 메타데이터에 따라 유효하다고 표시된 타일들에 대응하는 픽셀 컬러 값들만이 밝기 정정 블록(540)으로 판독되게 한다. 특정한 실시예들에서, 워드 및 타일 메타데이터 메모리(515)는 로우 내에 타일들에 대한 타일-유효성 비트들을 저장하기 위해 특정한 메모리 어드레스들을 지정할 수 있다. 예를 들어, 각각의 타일이 16x16 픽셀들이며, 디스플레이가 2560 픽셀 폭인 구성에서, 로우에 160개 타일들이 있을 것이다. 이와 같이, 메타데이터 메모리(515)는 그것들의 대응하는 타일들이 유효한지를 나타내기 위해 160비트들을 지정할 수 있다. 160 타일-유효성 비트들은 그 안에 저장된 비트들이 독출될 때 삭제될 수 있다(예컨대, "거짓" 또는 "0"의 이진 값을 갖고). 각각의 타일-유효성 비트는 그 후 임의의 픽셀 데이터가 상기 타일-유효성 비트와 연관된 타일에 대응하는 픽셀 버퍼 메모리(510)로 기록될 때 "유효"로서(예컨대, "참" 또는 "1"의 이진 값) 설정될 수 있다. 예를 들어, 2x2 픽셀 블록이 160 타일들의 로우에서 10번째 타일과 연관되면, 대응하는 타일-유효성 비트는 상기 2x2 픽셀 블록이 픽셀 버퍼 메모리(510)로 기록될 때 "참"으로 설정될 것이다. 타일에 대한 어떤 픽셀 데이터도 픽셀 버퍼 메모리(510)로 로딩되지 않는다면, 상기 타일에 대한 타일-유효성 비트는 "거짓" 값을 유지할 것이다.
특정한 실시예들에서, 픽셀 시퀀서(530)는 한 번에 하나의 로우씩 픽셀 데이터를 프로세싱할 수 있다. 타일들의 로우(예컨대, 160 타일들)가 픽셀 버퍼 메모리(510)로 로딩된 후, 픽셀 시퀀서(530)는, 타일들의 로우의 시작에서 끝의 순서로, 각각 워드 및 타일 메타데이터 메모리(515) 및 포비션 패턴 메모리(525)에 저장된 타일-유효성 및 포비션 패턴 데이터와 같은, 모든 메타데이터를 판독할 수 있다. 이들 값들은 어셈블리되며 픽셀 출력 블록(550)으로 전송되어, 다운스트림 디바이스(예컨대, 디스플레이(170) 및/또는 필드-프로그램 가능한 게이트 어레이)가 어떤 타일들이 유효한지 또는 유효하지 않은지를 알고 그에 따라 인입하는 픽셀 값들을 조직하도록 할 것이다. 예를 들어, 픽셀 출력 블록(550)이 클록 당 72-비트들을 전송하도록 구성된다면(예컨대, 2-픽셀 가치의 데이터가 클록마다 전송될 수 있도록), 픽셀 시퀀서(530)는 8개 타일들에 대한 메타데이터(예컨대, 타일 유효성에 대한 1비트 및 8비트 포비션 패턴을 포함한, 타일당 9-비트 메타데이터를 가진)를 어셈블리하며 어셈블리된 데이터를 디스플레이(170) 또는 다른 다운스트림 디바이스들로 전송하도록 픽셀 출력 블록(550)에 지시할 수 있다. 픽셀 시퀀서(530)는 160개 타일들 중 어떤 것이 유효한지 및 유효하지 않은지를 알도록 160개 타일들 모두에 대한 메타데이터가 전송될 때까지 프로세스를 반복할 수 있다. 픽셀 시퀀서(530)는 그 후 픽셀 컬러 값들(예컨대, 한 번에 2개 픽셀들 또는 72-비트)이 픽셀 버퍼 메모리(510)로부터 밝기 정정 블록(540)으로 판독되게 한다(예컨대, 픽셀 시퀀서(530)는 어떤 픽셀들이 픽셀 버퍼 메모리(510)로부터 판독되는지를 밝기 정정 블록(540)에 알릴 수 있다). 그러나, 그것은 단지 유효하다고 표시된 타일들에 대응하는 픽셀 컬러 값들에 대해서만 이를 행한다. 프로세싱된 후, 픽셀 데이터는 다운스트림 디바이스로 출력될 것이다. 다운스트림 디바이스가 어떤 타일들이 유효한지 또는 유효하지 않은지를 알고 있으므로, 그것은 그에 따라 인입하는 픽셀 데이터를 조직할 수 있다. 예를 들어, 타일-유효성 데이터가 제 1 타일(각각은 16x16 타일들을 나타낸다)이 유효하지 않으며 동일한 로우에서의 다음 타일이 유효하다고 나타낸다면, 다운스트림 디바이스는 그것이 수신하는 제 1 세트의 16 픽셀들이 제 1(유효하지 않은 타일)보다는 제 2 타일(유효한 타일)에 속한다는 것을 알 것이다. 본 개시는 특정한 방식으로 픽셀 시퀀서를 설명하지만, 본 개시는 임의의 적절한 픽셀 시퀀서를 고려한다.
밝기 정정 블록(540)은 그것들이 픽셀 출력 블록(550)으로 전송되기 전에 하나 이상의 밝기 정정들 및 디스플레이 조정들을 픽셀 컬러 값들에 적용한다. 이들 디스플레이 조정들은 왜곡들을 정정하기 위해 디더링, 포비션, 지각적 인코딩, 또는 하나 이상의 밝기 정정 메시들을 포함할 수 있다. 특정한 실시예들에서, 밝기 정정 메시들은 전체 프레임, 로우 또는 정렬된 블록의 픽셀들(예컨대, 타일들)과 같은 프레임의 서브섹션, 각각의 개개의 픽셀 컬러 값, 또는 그것의 임의의 조합에 기초하여 최적의 컬러 값을 생성하도록 선택되는 각각의 픽셀 컬러 값에 대한 스칼라 값을 포함할 수 있다.
일 유형의 밝기 왜곡은 도파관 정정으로서 알려져 있다. 특정한 실시예들에서, 디스플레이(170)를 위해 사용된 렌즈들, 예컨대 스캐닝 디스플레이의 광학 시스템들에서의 렌즈들은 렌즈의 면(들)에 걸친 평활한 변화를 보일 수 있다. 이러한 효과는 또한 스캐닝 디스플레이를 위한 이미터로서 사용될 수 있는 LED 패널들에서 발견될 수 있다. 그러므로, 사용자가 디스플레이의 상이한 섹션들을 볼 때, 렌즈의 변화는, 심지어 눈 움직임에 의해 도입된 다른 왜곡들을 감안하여, 밝기에서의 약간의 변화들을 야기할 수 있다. 이러한 유형의 왜곡은, 렌즈의 면에 걸친 평활한 변화가 용도에 따라 변할 가능성이 없으므로, 미리 측정되고 교정될 수 있다. 그러나, 스캐닝 디스플레이 디바이스를 포함한, 특정한 디스플레이들에서, 열은 소성 변형을 야기하는 상당한 열을 갖고, 렌즈들로 부가적인 워핑을 도입할 수 있다. 도파관 정정을 적용하기 위한 밝기 정정 메시가 미리 (예컨대, 교정 절차 동안) 산출될 수 있거나 또는 임의의 다른 효과들이 검출될 때, 동적으로 산출될 수 있다.
또 다른 유형의 밝기 왜곡은 LED 컬럼 정정으로서 알려져 있다. 특정한 실시예들에서, 디스플레이에서의 LED들, 또는 스캐닝 디스플레이의 이미터에서의 LED들의 각각의 컬럼의 밝기는 약간 달라질 수 있다. 다시 말해서, 밝기(적어도 이러한 효과에서 측정된 바와 같은)는 당신이 디스플레이를 통해 수직으로 가로지름에 따라 일정하지만 당신이 디스플레이를 통해 수평으로 가로지를 때 컬럼마다 달라질 수 있다. 통상적으로, 이러한 변화는, 많은 LED 패널이 이러한 효과를 보일 수 있지만, LED들이 상당히 충분한 밀도를 갖고 패킹되며 상당히 충분한 거리에서 보여지기 때문에, 눈이 밝기 레벨들을 자연스럽게 함께 블렌딩하는 것을 검출하는 것이 어려울 수 있다. 헤드-마운트 디스플레이가 사용자에게 매우 근접해 있기 때문에, 이러한 변화는 검출하기 더 용이할 수 있다. 그러므로, LED들의 각각의 컬럼은 사용자에게 보여진 이미지가 가변적인 컬럼 밝기 레벨들을 마스킹하도록 정정을 요구할 수 있다. 취해질 수 있는 정정들에 대한 하나의 접근법은 각각의 컬럼을 최대 또는 최소 표현 값으로 스케일링하는 것이며, 즉 가장 밝은 또는 가장 어두운 컬럼으로 스케일링하는 것이다. 이러한 정정은, LED 패널들에 대한 손상을 제외하고, 밝기 변화가 시간에 걸쳐 상당히 변할 가능성이 없으므로, 교정 절차 동안 결정될 수 있다.
또 다른 유형의 밝기 왜곡은 전력 및 컬러 지시가 공급될 때 LED들이 어떻게 광을 방출하는지에 관한 것이다. 디스플레이 엔진이 높은 프레임 리프레시 레이트들로 가능화되도록 구성되기 때문에, LED의 펄스 오프셋에 의해 도입된 지연들에 신중한 주의가 기울여져야 한다. LED의 펄스 오프셋은 LED가 동력을 공급받을 때의 시간 양 및 LED가 전체 밝기에 있을 때의 포인트를 나타낸다. 유사한 고려사항은 LED가 완전한 밝기에서 완전히 파워 오프되는데 걸리는 시간의 양이다. 몇몇 LED들에서, 이것은 오프에서 완전한 밝기까지 정현 곡선을 따르지만, 다른 패턴들이 고려된다. 특정한 실시예들에서, 밝기 정정 메시들을 교정할 때의 어려움을 감소시키기 위해, 각각의 LED가 대략 유사한 펄스 오프셋 시간을 갖는다고 가정될 수 있다. 그러나, 몇몇 실시예들에서, 펄스 오프셋은, 예를 들어, 디스플레이될 특정 컬러, 제조 차들(허용 오차들 내에서도), 디스플레이에서 LED의 위치, 및 많은 다른 인자들에 기초하여 상이할 수 있다. 그러나, 이러한 밝기 정정은, 효과가 용도에 따라 상당히 변하지 않을 수 있으므로, 정적으로 계산될 가능성이 있을 것이다.
일어날 수 있는 또 다른 밝기 왜곡은 픽셀 컬러 값들에 관한 정보가 어떻게 표현되는지, 및 구체적으로 밝기 값들이 어떻게 저장되는지와 관련된다. 특정한 실시예들에서, 개개의 LED들(또는 그것들의 구동기들)은 컬러 밝기에서 넓은 범위의 표현도를 허용하는, 8비트까지의 컬러 밝기 정보를 수용할 수 있다. 디스플레이 엔진(150)이 디스플레이를 위해 프레임들의 빠르고 효율적인 프로세싱을 지향하기 대문에, 몇몇 실시예들에서, 픽셀 컬러 값들은 전체 8비트의 컬러 밝기 정보(예컨대, 256개까지의 상이한 밝기 값들)를 포함하는데 실패할 수 있다. 예를 들어, 생성된 픽셀 컬러 값들은 가능한 밝기 값들에서 87.5% 감소인, 단지 6비트의 컬러 밝기 정보(예컨대, 32개까지의 상이한 밝기 값들)만을 포함할 수 있다. 그러므로, 왜곡 메시는 가능한 값들의 더 미묘한 표현으로 밝기 값들을 시프트하도록 요구될 수 있다. 이러한 메시는 사전 계산될 수 있지만 픽셀 컬러 값 표현 포맷에 기초하여 달라질 수 있다. 디스플레이 엔진이 넓은 범위의 표현들을 가진 호환성을 고려함에 따라, 다수의 밝기 정정 메시들이, 동일한 프레임 또는 로우의 픽셀들에 대해서도, 결정될 필요가 있을 것이다.
밝기 정정 메시가 적용할 수 있는 다른 효과들은 부가적인 이미지 사후-프로세싱 기술들과 관련된다. 하나의 이러한 기술은 디더링이다. 디더링은 신호의 값들을 평활화할 의도를 갖고 신호로의 랜덤화된 필터의 적용을 수반한다. 이미지 프로세싱에서, 디더링은 밝기 및 컬러 포화 값들을 평활화하기 위해 사용될 수 있다. 형식적으로, 디더링은 작은 양의 정보에서 컬러를 나타내려는 시도에 의해 야기된 밝기 컬러들의 양자화를 평활화한다. 이것은 특정한 유형들의 패턴들이, 컬러 또는 밝기 밴딩과 같은, 이미지에서 발생하는 것을 방지한다. 디더링은 또한 컬러 분포의 평활도를 개선할 수 있다. 많은 디더링 알고리즘들이 고안되었으며 밝기 정정 메시에서 구체화될 수 있다. 밝기 정정 메시는 디스플레이를 위해 준비되고 있는 프레임(또는 프레임의 부분)에 기초하여 결정될 수 있다. 예를 들어, 상이한 정도들의 디더링은 서로에 대해 상당한 양들의 하나의 컬러를 가진 프레임들에 대해, 또는 많은 상이한 컬러들을 가진 것보다 상당한 양들의 유사한 컬러들을 가진 프레임에 대해 요구될 수 있다.
또 다른 사후-프로세싱 정정은 sRGB 또는 지각 압축으로서 알려져 있다. 인간 눈은 선형 물질에서의 밝기를 경험하지 않으며, 즉 두 개의 밝기 레벨들 사이에서 밝기의 지각된 변화가 항상 밝기에서의 실제 변화와 동일한 것은 아니다. 특히, 인간 눈은 밝은 컬러들보다 어두운 컬러들을 구별하기 위해 더 양호하게 구비된다. 관련하여, 밝기에서의 원하는 지각된 변화를 야기하기 위해, 인간 눈은 초기 밝기 값에 의존하여 실제 밝기에서의 상이한 변화에 노출될 필요가 있을 것이다. sRGB로 불리우는, 컬러 표준은 동일한 지각 스텝들 및 동일한 선형 광 스텝들 사이를 매핑하는 전달 함수들을 특정한다. 이러한 인코딩은 동일한 양의 정보에 저장될 수 있는 지각적으로 별개의 강도들의 최대화를 허용한다. 선형 광 값들 및 sRGB 값들 간의 변환은 이산 함수로서 표현될 수 있으며, 이것은 밝기 정정 메시에서 인코딩되며 이미 sRGB 압축으로 표현되지 않은 픽셀 컬러 값들 모두에 적용될 수 있다. 본 개시는 특정한 방식으로 밝기 정정들을 설명하지만, 본 개시는 임의의 적절한 방식으로 밝기 정정들을 고려한다.
또 다른 효과는 포비티드 렌더링으로서 알려져 있다. 포비티드 렌더링에서, 디스플레이 엔진(150)은 사용자의 초점 또는 고정 포인트에 있거나 또는 그 가까이에 있을 때 눈이 특징들을 상세하게 알아낼 수 있는 동안, 초점 포인트로부터의 거리가 감소함에 따라 세부사항들이 알아내기에 더 어려울 수 있다는 사실을 이용할 수 있다. 상기 논의된 바와 같이, 아이-트래킹기는 제어 블록(200)을 통해 사용자의 초점 포인트를 디스플레이 엔진(150)으로 보고할 수 있다. 차례로 픽셀 블록(400)은 픽셀 컬러 값들이 사용자의 초점 포인트로부터 멀어지는 더 큰 충실도에서 사용자의 초점 포인트에 대응하는 픽셀 컬러 값들을 렌더링하기 위해 이러한 정보를 사용할 수 있다. 결과적인 패턴은 디스플레이 블록(500)에 의해 수신될 수 있으며 포비션 패턴으로서 포비션 패턴 메모리(525)에 저장될 수 있다. 포비션 패턴은 픽셀 블록(400)에 의해 직접 디스플레이 블록으로 전달될 수 있고, 제어 블록(200)의 공유 메모리(240)를 지나 통과될 수 있고, 마이크로제어기(230) 또는 몇몇 다른 구성요소에 의해 산출될 수 있거나, 또는 임의의 다른 적절한 방식으로 생성될 수 있다. 디스플레이 블록(500)은 그것들이 디스플레이를 위해 준비 중일 때 픽셀 컬러 값들을 위해 사용된 충실도의 정도를 추가로 제어하기 위해 포비션 패턴을 사용할 수 있다. 포비티드 렌더링은 사용자의 초점 포인트로부터 더 먼 픽셀 위치들에 대응하는 픽셀 컬러 값들에 적용된 밝기 정정의 정도를 감소시키기 위해 사용될 수 있다. 이것은 연속적인 방식으로, 예컨대, 포비션 링들 사이에서의 품질의 정도를 보간함으로써, 또는 임계 기반으로 특정될 수 있으며, 예컨대 픽셀이 특정한 거리를 초과하면, 특정한 정도의 렌더링 품질을 고른다.
밝기 정정 블록(540)은 밝기 메시 메모리(545)로부터 하나 이상의 밝기 정정 메시들을 검색할 수 있다. 밝기 메시 메모리는 제어 블록(200)의 제어기(210)에 의해 로딩된 하나 이상의 밝기 정정 메시들을 포함할 수 있다. 밝기 정정 메시들은 16x16 타일의 각각의 코너 픽셀에 대해 저장된 스칼라 밝기 정정 값을 포함할 수 있다. 밝기 정정 블록(540)은 이들 코너 값들을 사용하여 내부 픽셀들에 대한 값들을 보간할 수 있다. 특정한 실시예들에서, 밝기 정정 메시는 전체 디스플레이 또는 타일의 각각의 픽셀에 대한 스칼라 밝기 정정 값을 특정할 수 있다. 밝기 정정 블록(540)은 픽셀 버퍼 메모리(510)로부터 수신된 픽셀 컬러 값들과 밝기 정정 메시로부터의 적절한 값을 곱함으로써 픽셀 컬러 값들의 최종 강도를 결정할 수 있다. 이러한 프로세스는 픽셀 컬러 값의 각각의 컬러 채널에 대해 별도로 수행될 수 있다(예컨대, 적색 컬러 채널에 대해 한 번, 녹색 컬러 채널에 대해 한 번, 및 청색 컬러 채널에 대해 한 번). 예를 들어, 픽셀의 적색, 녹색, 및 청색 컬러 채널들(Pr, Pg, Pb)에 대한 밝기 정정 값들(Br, Bg, Bb)을 특정한 밝기 정정 메시를 고려해볼 때, 적색 채널에 대한 최종 픽셀 컬러 값(Pr')은 식 Pr' = Pr x Br에 의해 발견될 수 있다. 녹색 및 청색 컬러 채널들은 유사한 방법에 의해 발견될 수 있다. 본 개시는 밝기 정정 메시 및 픽셀 컬러 값을 고려하여 최종 픽셀 컬러 값들을 결정하기 위한 임의의 적절한 방법을 고려한다.
밝기 정정 메시들이 적용된 후, 결과적인 픽셀 컬러 값들은 픽셀 출력 블록(550)으로 전송된다. 픽셀 출력 블록(550)은 디스플레이 모드에 따라 요구된 대로, 픽셀 컬러 값들을 디스플레이(170), 디스플레이를 위한 구동기들, 또는 부가적인 구성요소들로 전송할 수 있다. 예로서, 픽셀 출력 블록(550)은 스캐닝 디스플레이 디바이스의 동작을 가능하게 하기 위해 특정한 순서로 픽셀 컬러 값들을 전송할 수 있다. 이 모드에서, 픽셀 출력 블록(550)은 먼저 디스플레이의 중심을 통해 디스플레이의 좌측 에지에 대응하는 픽셀 컬러 값들, 이어서 디스플레이의 우측 에지에 대응하는 픽셀 컬러 값들을 중심으로 전송할 수 있으며, 각각의 로우로서 최상부에서 최하부로 이동하는 것이 완료된다. 임의의 다른 적절한 디스플레이 패턴들이 또한 고려된다. 또 다른 예로서, 픽셀 출력 블록(550)은 부가적인 구성요소들의 동작들을 가능하게 하기 위해 특정한 포맷으로 픽셀 컬러 값들을 전송할 수 있다. 픽셀 출력 블록(550)은 이어지는 픽셀 컬러 값들에 대응하는 타일들을 기술한 정보와 함께 헤더를 전송할 수 있다. 픽셀 출력 블록(550)은 디스플레이(170) 또는 다른 구성요소들의 요건들이 서술한 바와 같이 다양한 핏셀 컬러 값 포맷팅 옵션들을 지워할 수 있다. 부가적인 구성요소들은 백엔드 컬러 프로세싱을 맞춤화하기 위해 또는 디스플레이 속도 또는 충실도를 최적화하도록 디스플레이로의 더 넓은 인터페이스를 지원하기 위해 사용된 별개의 칩을 포함할 수 있다. 본 개시는 특정한 방식으로 픽셀들을 출력하는 것을 설명하지만, 본 개시는 임의의 적절한 방식으로 픽셀들을 출력하는 것을 고려한다.
도 9는 인공 현실 시스템(100)의 디스플레이 엔진(150)을 사용하여 그래픽들을 생성하기 위한 예시적인 방법(900)을 예시한다. 방법은 단계 910에서 시작할 수 있으며, 여기에서 디스플레이 엔진(150)의 제어 블록(200)은 1차 렌더링 구성요소(120)로부터 하나 이상의 표면들을 수신할 수 있다. 표면들은 3D 모델들을 사용하여(예컨대, 다각형-기반 렌더링 기술들을 사용하여) 렌더링된 2D 이미지들로부터 및 특정한 뷰포인트(예컨대, 시간 t0에서의 사용자의 뷰포인트)로부터 생성된, 인공 현실 장면에서의 표면에 대한 위치 데이터 및 텍스처 데이터를 특정하는, 오브젝트 프리미티브들일 수 있다. 제어 블록(200)은 표면 텍스처 데이터(예컨대, 하나 이상의 텍셀 어레이들)를 메모리 제어기를 통해 텍셀 메모리(220)로 로딩할 수 있다. 제어 블록(200)은 다른 그래픽-생성 제어 데이터를 수신하며 상기 데이터를 공유 메모리(240)에 저장할 수 있다. 제어 블록(200)은 디스플레이 엔진(150)에 의한 그래픽 생성을 개시할 수 있다. 단계 930에서, 디스플레이 엔진(150)의 변환 블록(300)은 디스플레이(170)의 하나 이상의 픽셀들 및 표면에 대응하는 광선(또는 광선 번들)의 교차들에 대응하는 타일-표면 쌍들을 결정할 수 있다. 변환 블록(200)은 정렬된 픽셀들의 어레이("타일")에 대해 생성된 광선 번들들을 사용하여 광선투과를 수행할 수 있다. 광선들은 사용자의 업데이트된, 현재 뷰포인트(예컨대, 상기 언급된 시간 t0 후 시간 t1에서)로부터 투과될 수 있다. 변환 블록(300)은 인공 현실 장면으로 광선 번들들을 투과하며 광선 번들이 표면과 교차하는지를 결정함으로써 표면들의 가시성을 결정할 수 있다. 변환 블록(300)은 픽셀 블록(400)에 의한 사용을 위해 타일-표면 쌍들을 준비할 수 있다. 단계 940에서, 디스플레이 엔진(150)의 픽셀 블록(400)은 타일-표면 쌍들에서 표면들의 표면 텍스처 데이터를 사용하여 디스플레이(170)의 픽셀들에 대한 픽셀 컬러 값들을 생성할 수 있다. 픽셀 블록(400)은 표면들과 연관된 타일 어레이들의 정렬된 텍셀들을 검색할 수 있다. 픽셀 블록(400)은 특정 픽셀 값들과 이들 텍셀들을 연관시키며 픽셀 컬러 값들을 결정하기 위해 텍셀 컬러 값들에 대한 이중선형 보간을 수행할 수 있다. 단계 950에서, 디스플레이 엔진(150)의 디스플레이 블록(500)은 디스플레이(170)의 각각의 픽셀에 대한 픽셀 출력 값들을 생성할 수 있다. 디스플레이 블록(500)은 디스플레이(170)에 의해 요구된 대로 픽셀 컬러 값들을 재-순서화할 수 있다. 단계 960에서, 디스플레이 엔진(150)은 디스플레이(170)(스캐닝 디스플레이와 같은)를 통해 사용자에게 디스플레이를 위한 출력 픽셀 값들을 제공할 수 있다. 단계 970에서, 디스플레이 엔진(150)의 제어 블록(200)은 그것이 1차 렌더링 구성요소(120)로부터 업데이트된 표면들을 수신하였는지를 결정할 수 있다. 아니라면, 제어 블록(200)은 디스플레이 엔진(150)이 단계 930d로 돌아가게 하며 오래된 표며 데이터(예컨대, 시간 t0과 연관된)를 사용하지만 현재 사용자 뷰포인트를 사용하여 그래픽 생성을 반복하게 할 수 있다. 예를 들어, 제어 블록(200)은 타일-표면 쌍들, 픽셀 컬러 값들, 및 픽셀 출력의 재산출을 필요하게 하는 사용자 뷰포인트 또는 위치 정보를 수신할 수 있다. 이러한 프로세스는 새로운 표면이 수신될 때까지(예컨대, 시간 tn에서, 여러 프레임들이 시간 t0과 연관된 표면으로부터 생성된 후) 반복될 수 있다. 새로운 표면이 수신된 후, 제어 블록(200)은 디스플레이 엔진(150)을 단계 910으로 돌아가게 하며 업데이트된 표면 데이터를 사용하여 그래픽 생성 프로세스를 다시 하게 할 수 있다. 특정한 실시예들은, 적절한 경우, 도 9의 방법의 하나 이상의 단계들을 반복할 수 있다. 본 개시는 특정한 순서로 발생한 것으로서 도 9의 방법의 특정한 단계들을 설명하고 예시하지만, 본 개시는 임의의 적절한 순서로 발생하는 도 9의 방법의 임의의 적절한 단계들을 고려한다. 더욱이, 본 개시는 도 9의 방법의 특정한 단계들을 실행하는 특정한 구성요소들, 디바이스들, 또는 시스템들을 설명하고 예시하지만, 본 개시는 도 9의 방법의 임의의 적절한 단계들을 실행하는 임의의 적절한 구성요소들, 디바이스들, 또는 시스템들의 임의의 적절한 조합을 고려한다.
도 10은 디스플레이 엔진(150)을 사용하여 가상 장면에서 표면들의 가시성을 결정하기 위한 예시적인 방법(1000)을 예시한다. 방법은 단계 1010에서 시작할 수 있으며, 여기에서 디스플레이 엔진(150)의 변환 블록(300)의 광선투사기(310)는 디스플레이(170)의 정렬된 픽셀들의 어레이들("타일들")에 대응하는 하나 이상의 광선들을 준비할 수 있다. 예를 들어, 광선투사기(310)는 타일의 하나 이상의 픽셀들 또는 타일의 4개의 코너들에 대응하는 광선 번들들, 또는 전체 타일에 대응하는 단일 광선을 준비할 수 있다. 단계 1020에서, 광선투사기(310)는 하나 이상의 표면들을 포함하는 인공 현실 장면으로 광선들을 투사할 수 있다. 광선투사기(310)는 사용자의 뷰 포인트에서 시작하여 디스플레이(170)에 대응하는 스크린을 통해 광선들을 투사할 수 있다. 단계 1030에서, 변환 블록(300)의 워프 블록(320)은 가상 장면으로 개개의 광선의 궤적을 특정하기 위해 각각의 투사 광선에 하나 이상의 왜곡 메시들을 적용할 수 있다. 왜곡 메시들은 디스플레이(170)의 제조 또는 설계의 결과로서 발생할 수 있는 하나 이상의 기하학적 왜곡들을 정정하도록 구성될 수 있다. 왜곡 메시들은 워프 메모리(325) 또는 공유 메모리(240)에 저장된, 광선이 경험해야 하는 왜곡의 정도를 나타내는 룩업 테이블들을 포함할 수 있다. 왜곡 메시들은 광선 번들의 코너 광선들에 대한 왜곡의 정도를 특정할 수 있다. 왜곡 메시들은 특정한 컬러 채널과 연관된 광선들에 대한 왜곡의 정보 및 다른 컬러 채널들에 대한 오프셋을 특정할 수 있다. 단계 1040에서, 변환 블록(300)의 한도 비교 블록(330)은 각각의 투사된 광선 번들이 인공 현실 장면에서의 표면과 교차하는지를 결정할 수 있다. 한도 비교 블록(300)은 광선 번들에 의해 표현된 타일에 대한 경계 박스를 표면에 대한 경계 박스에 비교할 수 있다. 광선 번들이 표면과 교차하지 않는다면(예컨대, 그것들의 경계 박스들이 교차하지 않는다면), 단계 1050에서, 변환 블록(300)은 광선 번들과 연관된 타일을 폐기할 수 있다(예컨대, 폐기된 타일에 대한 픽셀 값들을 프로세싱하지 않는다). 광선 번들이 표면과 교차한다면, 단계 1060에서, 한도 비교 블록(330)은 광선 번들에 의해 표현된 타일과 교차된 표면을 연관시킬 수 있다. 한도 비교 블록(330)은 교차의 위치를 결정할 수 있다. 단계 1070에서, 변환 블록(300)의 변환 엔진(340)은 교차의 위치를 뷰 공간 좌표 시스템에서 타일-표며 쌍의 표면의 텍스처의 좌표 시스템으로 변환할 수 있다. 특정한 실시예들은, 적절한 경우, 도 10의 방법의 하나 이상의 단계들을 반복할 수 있다. 본 개시는 특정한 순서로 발생하는 것으로서 도 10의 방법의 특정한 단계들을 설명하고 예시하지만, 본 개시는 임의의 적절한 순서로 발생하는 도 10의 방법의 임의의 적절한 단계들을 고려한다. 게다가, 본 개시는 도 10의 방법의 특정한 단계들을 포함한 가상 장면에서 표면의 가시성을 결정하기 위한 예시적인 방법을 설명하고 예시하지만, 본 개시는 적절한 경우, 도 10의 방법의 단계들의 모두, 일부를 포함하거나, 또는 포함하지 않을 수 있는, 임의의 적절한 단계들을 포함한 가상 장면에서 표면들의 가시성을 결정하기 위한 임의의 적절한 방법을 고려한다. 더욱이, 본 개시는 도 10의 방법의 특정한 단계들을 실행하는 특정한 구성요소들, 디바이스들, 또는 시스템들을 설명하고 예시하지만, 본 개시는 도 10의 방법의 임의의 적절한 단계들을 실행하는 임의의 적절한 구성요소들, 디바이스들, 또는 시스템들의 임의의 적절한 조합을 고려한다.
도 11은 디스플레이 엔진(150)에 의한 출력을 위한 픽셀 컬러 값들을 준비하기 위한 예시적인 방법(1100)을 예시한다. 방법은 단계 1110에서 시작할 수 있으며, 여기에서 디스플레이 엔진(150)의 디스플레이 블록(500)은 픽셀 컬러 값들을 수신할 수 있다. 예를 들어, 디스플레이 블록(500)은 디스플레이 엔진(150)의 픽셀 블록(400)으로부터 픽셀 컬러 값들을 수신할 수 있다. 단계 1120에서, 디스플레이 블록(500)은 하나 이상의 로우 버퍼(505)로 픽셀 컬러 값들을 로딩할 수 있다. 특정한 실시예들에서, 디스플레이 블록(500)은 픽셀 컬러 값들을 이중-로우 픽셀 버퍼 메모리(510)로 로딩할 수 있다. 디스플레이 블록(500)은 픽셀 컬러 값들과 연관된 부가적인 데이터를, 워드 및 타일 메타데이터 메모리(515) 및 포비션 패턴 메모리(525)와 같은, 관련된 이중-로우 버퍼들로 기록할 수 있다. 값들이 로우 버퍼(505)로 로딩됨에 따라, 그것들은 타일 순일 수 있다(예컨대, 값들은 여전히 픽셀들의 16x16 정렬을 반영한다). 단계 1130에서, 픽셀 컬러 값들(및, 선택적으로 다른 연관된 데이터)은 스캔라인-지향 순으로 로우 버퍼(505)로부터 판독될 수 있다. 디스플레이(170)는 단일 프레임으로서 모두 함께보다는, 픽셀 컬러 값들이 특정한 패턴으로(예컨대, 픽셀 로우마다) 제공되도록 요구하는 스캐닝 디스플레이일 수 있다. 픽셀 컬러 값들은 이러한 패턴을 반영하는 방식으로 판독될 수 있다(예컨대, 다음으로 전진하기 전에 로우 상에서의 모든 픽셀 컬러 값들을 판독하는). 단계 1140에서, 픽셀 시퀀서(530)는 어떤 픽셀 시퀀싱 모드가 사용되는지를 결정할 수 있다. 픽셀 시퀀싱 모드는 픽셀 컬러 값들이 어떻게 디스플레이(170)로 제공되어야 하는지에 대한 부가적인 세부사항들을 결정할 수 있다. 픽셀 시퀀싱 모드가 픽셀-지향 모드이면, 단계 1150에서, 픽셀 시퀀서(530)는 유효한 연관된 픽셀 컬러 값이 있는지에 관계없이, 디스플레이의 모든 픽셀들에 대한 값들이 밝기 정정 블록(540)으로 판독되게 할 수 있다. 픽셀 시퀀싱 모드가 타일-지향 모드이면, 단계 1160에서, 픽셀 시퀀서는 타일 메타데이터 메모리(515)로부터 타일 메타데이터를 판독하며 로우 버퍼(505)로 로딩된 각각의 타일이 유효한 픽셀 컬러 값들을 포함하는지를 결정할 수 있다. 주어진 타일이 유효한 픽셀 컬러 값들이 없다면, 픽셀 시퀀서(530)는 픽셀 메모리(510)로부터 픽셀들을 판독할 때 상기 타일의 픽셀들을 바이패스할 수 있다.
단계 1170에서, 픽셀 시퀀서(530)는 디스플레이 블록(500)에 의해 출력될 픽셀들(예컨대, 유효한 타일들과 연관된 픽셀들)에 대한 픽셀 컬러 값들이 디스플레이 블록(500)의 밝기 정정 블록(540)으로 판독되게 할 수 있다. 밝기 정정 블록(540)은 픽셀 컬러 값들에 하나 이상의 밝기 정정 메시들을 적용할 수 있다. 밝기 정정 메시들은 밝기 메시 메모리(545)에 저장된, 상기 픽셀을 최적의 밝기로 조정하기 위해 택한 타일(또는 디스플레이)의 하나 이상의 픽셀들에 대한 스칼라 값을 포함하는 어레이들 또는 룩업 테이블들일 수 있다. 예를 들어, 밝기 정정 메시는 타일의 코너 픽셀들에 대한 밝기 정정 값들을 특정할 수 있다. 밝기 정정 블록(540)은 그 후, 그것들이 밝기 정정 블록(540)으로 판독됨에 따라, 타일의 내부 픽셀들에 적용될 밝기 정정 값들을 보간할 수 있다. 밝기 정정 메시들은 컬러-채널 기반으로 값들을 특정할 수 있다(예컨대, 픽셀 컬러 값의 적색 채널에 대한 하나의 값, 녹색 채널에 대한 하나의 값, 및 청색 채널에 대한 하나의 값). 밝기 정정 블록(540)은 각각의 채널에 대한 밝기 정정 값을 적요할 수 있다. 픽셀에 대한 밝기 정정 값을 적용하기 위해, 밝기 정정 블록(540)은 밝기 정정 값들과 픽셀 컬러 값을 곱할 수 있다. 결과적인 픽셀 컬러는 픽셀 출력 값이다. 밝기 정정 블록(540)은 픽셀 출력 값들을 픽셀 출력 블록(550)으로 전송할 수 있다. 단계 1180에서, 픽셀 출력 블록(550)은 픽셀 출력 값들을 마무리하며 픽셀 컬러 값들을 디스플레이(170)로 제공할 수 있다. 특정한 실시예들은 적절한 경우, 도 11의 방법의 하나 이상의 단계들을 반복할 수 있다. 본 개시는 특정한 순서로 발생한 것으로 도 11의 방법의 특정한 단계들을 설명하고 예시하지만, 본 개시는 임의의 적절한 순서로 발생하는 도 11의 방법의 임의의 적절한 단계들을 고려한다. 게다가, 본 개시는 도 11의 방법의 특정한 단계들을 포함한 출력을 위한 픽셀 컬러 값들을 준비하기 위한 예시적인 방법을 설명하고 예시하지만, 본 개시는 적절한 경우, 도 11의 방법의 단계들 모두, 일부를 포함하거나, 또는 포함하지 않을 수 있는, 임의의 적절한 단계들을 포함한 출력을 위한 픽셀 컬러 값들을 준비하기 위한 임의의 적절한 방법법을 고려한다. 더욱이, 본 개시는 도 11의 방법의 특정한 단계들을 실행하는 특정한 구성요소들, 디바이스들, 또는 시스템들을 설명하고 예시하지만, 본 개시는 도 11의 방법의 임의의 적절한 단계들을 실행하는 임의의 적절한 구성요소들, 디바이스들, 또는 시스템들의 임의의 적절한 조합을 고려한다.
도 12는 예시적인 컴퓨터 시스템(1200)을 예시한다. 특정한 실시예들에서, 하나 이상의 컴퓨터 시스템들(1200)은 여기에서 설명되거나 또는 예시된 하나 이상의 방법들의 하나 이상의 단계들을 수행한다. 특정한 실시예들에서, 하나 이상의 컴퓨터 시스템들(1200)은 여기에서 설명되거나 또는 예시된 기능을 제공한다. 특정한 실시예들에서, 하나 이상의 컴퓨터 시스템들(1200) 상에서 구동하는 소프트웨어는 여기에서 설명되거나 또는 예시된 하나 이상의 방법들의 하나 이상의 단계들을 수행하거나 또는 여기에서 설명되거나 또는 예시된 기능을 제공한다. 특정한 실시예들은 하나 이상의 컴퓨터 시스템들(1200)의 하나 이상의 부분들을 포함한다. 여기에서, 컴퓨터 시스템에 대한 참조는 컴퓨팅 디바이스를 포괄할 수 있으며, 적절한 경우, 그 반대 또한 마찬가지이다. 게다가, 컴퓨터 시스템에 대한 참조는 적절한 경우, 하나 이상의 컴퓨터 시스템들을 포괄할 수 있다.
본 개시는 임의의 적절한 수의 컴퓨터 시스템들(1200)을 고려하나. 본 개시는 임의의 적절한 물리적 형태를 취하는 컴퓨터 시스템(1200)을 고려한다. 제한으로서가 아닌 예로서, 컴퓨터 시스템(1200)은 내장형 컴퓨터 시스템, 시스템-온-칩(SOC), 단일-보드 컴퓨터 시스템(SBC)(예를 들어, 컴퓨터-온-모듈(COM) 또는 시스템-온-모듈(SOM)과 같은), 데스크탑 컴퓨터 시스템, 랩탑 또는 노트북 컴퓨터 시스템, 대화형 키오스크, 메인프레임, 컴퓨터 시스템들의 메시, 이동 전화, 개인용 디지털 보조기(PDA), 서버, 태블릿 컴퓨터 시스템, 증강/가상 현실 디바이스, 또는 이들 중 둘 이상의 조합일 수 있다. 적절한 경우, 컴퓨터 시스템(1200)은 하나 이상의 컴퓨터 시스템들(1200)을 포함하고; 통합형 또는 분산형이고; 다수의 위치들을 포괄하고; 다수의 기계들을 포괄하고; 다수의 데이터 센터들을 포괄하거나; 또는 하나 이상의 네트워크들에서 하나 이상의 클라우드 구성요소들을 포함할 수 있는, 클라우드에 존재할 수 있다. 적절한 경우, 하나 이상의 컴퓨터 시스템들(1200)은 여기에서 설명되거나 또는 예시된 하나 이상의 방법들의 하나 이상의 단계들을 실질적인 공간적 또는 시간적 제한 없이 수행할 수 있다. 제한으로서가 아닌 예로서, 하나 이상의 컴퓨터 시스템들(1200)은 실시간으로 또는 배치 모드로 여기에서 설명되거나 또는 예시된 하나 이상의 방법들의 하나 이상의 단계들을 수행할 수 있다. 하나 이상의 컴퓨터 시스템들(1200)은 상이한 시간들에서 또는 상이한 위치들에서, 적절한 경우, 여기에서 설명되거나 또는 예시된 하나 이상의 방법들의 하나 이상의 단계들을 수행할 수 있다.
특정한 실시예들에서, 컴퓨터 시스템(1200)은 프로세서(1202), 메모리(1204), 저장장치(1206), 입력/출력(I/O) 인터페이스(1208), 통신 인터페이스(1210), 및 버스(1212)를 포함한다. 본 개시는 특정한 배열로 특정한 수의 특정한 구성요소들을 가진 특정한 컴퓨터 시스템을 설명하고 예시하지만, 본 개시는 임의의 적절한 배열로 임의의 적절한 수의 임의의 적절한 구성요소들을 가진 임의의 적절한 컴퓨터 시스템을 고려한다.
특정한 실시예들에서, 프로세서(1202)는 컴퓨터 프로그램을 구성하는 것들과 같은, 지시들을 실행하기 위한 하드웨어를 포함한다. 제한으로서가 아닌 예로서, 지시들을 실행하기 위해, 프로세서(1202)는 내부 레지스터, 내부 캐시, 메모리(1204), 또는 저장장치(1206)로부터 지시들을 검색(또는 인출)하고; 그것들을 디코딩하고 실행하며; 그 후 하나 이상의 결과들을 내부 레지스터, 내부 캐시, 메모리(1204), 또는 저장장치(1206)로 기록할 수 있다. 특정한 실시예들에서, 프로세서(1202)는 데이터, 지시들, 또는 어드레스들을 위한 하나 이상의 내부 캐시들을 포함할 수 있다. 본 개시는 적절한 경우, 임의의 적절한 수의 임의의 적절한 내부 캐시들을 포함한 프로세서(1202)를 고려한다. 제한으로서가 아닌 예로서, 프로세서(1202)는 하나 이상의 지시 캐시들, 하나 이상의 데이터 캐시들, 및 하나 이상의 변환 색인 버퍼들(TLB들)을 포함할 수 있다. 지시 캐시들에서의 지시들은 메모리(1204) 또는 저장장치(1206)에서의 지시들의 사본들일 수 있으며, 지시 캐시들은 프로세서(1202)에 의한 이들 지시들의 검색의 속도를 높일 수 있다. 데이터 캐시들에서의 데이터는 동작하기 위해 프로세서(1202)에서 동작하기 위해 프로세서(1202)에서 실행한 지시들에 대한 메모리(1204) 또는 저장장치(1206)에서의 데이터의 사본들; 프로세서(1202)에서 실행하는 뒤이은 지시들에 의한 액세스를 위한 또는 메모리(1204) 또는 저장장치(1206)로의 기록을 위한 프로세서(1202)에서 실행된 이전 지시들의 결과들; 또는 다른 적절한 데이터일 수 있다. 데이터 캐시들은 프로세서(1202)에 의한 판독 또는 기록 동작들의 속도를 높일 수 있다. TLB들은 프로세서(1202)에 대한 가상-어드레스 변환의 속도를 높일 수 있다. 특정한 실시예들에서, 프로세서(1202)는 데이터, 지시들, 또는 어드레스들에 대한 하나 이상의 내부 레지스터들을 포함할 수 있다. 본 개시는 적절한 경우, 임의의 적절한 수의 임의의 적절한 내부 레지스터들을 포함한 프로세서(1202)를 고려한다. 적절하다면, 프로세서(1202)는 하나 이상의 연산 논리 유닛들(ALU들)을 포함하고; 다중-코어 프로세서이거나; 또는 하나 이상의 프로세서들(1202)을 포함할 수 있다. 본 개시는 특정한 프로세서를 설명하고 예시하지만, 본 개시는 임의의 적절한 프로세서를 고려한다.
특정한 실시예들에서, 메모리(1204)는 프로세서(1202)가 실행할 지시들 또는 프로세서(1202)가 동작할 데이터를 저장하기 위한 메인 메모리를 포함한다. 제한으로서가 아닌 예로서, 컴퓨터 시스템(1200)은 저장장치(1206) 또는 또 다른 소스(예를 들어, 또 다른 컴퓨터 시스템(1200)과 같은)로부터의 지시들을 메모리(1204)로 로딩할 수 있다. 프로세서(1202)는 그 후 지시들을 메모리(1204)로부터 내부 레지스터 또는 내부 캐시로 로딩할 수 있다. 지시들을 실행하기 위해, 프로세서(1202)는 내부 레지스터 또는 내부 캐시로부터 지시들을 검색하며 그것들을 디코딩할 수 있다. 지시들의 실행 동안 또는 그 후, 프로세서(1202)는 하나 이상의 결과들(중간 또는 최종 결과들일 수 있는)을 내부 레지스터 또는 내부 캐시로 기록할 수 있다. 프로세서(1202)는 그 후 이들 결과들 중 하나 이상을 메모리(1204)로 기록할 수 있다. 특정한 실시예들에서, 프로세서(1202)는 하나 이상의 내부 레지스터들 또는 내부 캐시들에서 또는 메모리(1204)(저장장치(1206) 또는 다른 것과 대조적으로)에서 단지 지시들만을 실행하며 하나 이상의 내부 레지스터들 또는 내부 캐시들에서 또는 메모리(1204)에서(저장장치(1206) 또는 다른 곳과 대조적으로) 데이터에 대해서만 동작한다. 하나 이상의 메모리 버스들(각각은 어드레스 버스 및 데이터 버스를 포함할 수 있다)은 메모리(1204)에 프로세서(1202)를 결합할 수 있다. 버스(1212)는 이하에서 설명되는 바와 같이, 하나 이상의 메모리 버스들을 포함할 수 있다. 특정한 실시예들에서, 하나 이상의 메모리 관리 유닛들(MMU들)은 프로세서(1202)와 메모리(1204) 사이에 존재하며 프로세서(1202)에 의해 요청된 메모리(1204)로의 액세스들을 가능하게 한다. 특정한 실시예들에서, 메모리(1204)는 랜덤 액세스 메모리(RAM)를 포함한다. 이러한 RAM은 적절하다면, 휘발성 메모리일 수 있다. 적절하다면, 이러한 RAM은 동적 RAM(DRAM) 또는 정적 RAM(SRAM)일 수 있다. 게다가, 적절하다면, 이러한 RAM은 단일-포트 또는 다중-포트 RAM일 수 있다. 본 개시는 임의의 적절한 RAM을 고려한다. 메모리(1204)는 적절하다면, 하나 이상의 메모리들(1204)을 포함할 수 있다. 본 개시는 특정한 메모리를 설명하고 예시하지만, 본 개시는 임의의 적절한 메모리를 고려한다.
특정한 실시예들에서, 저장장치(1206)는 데이터 또는 지시들을 위한 대용량 저장장치를 포함한다. 제한으로서가 아닌 예로서, 저장장치(1206)는 하드 디스크 드라이브(HDD), 플로피 디스크 드라이브, 플래시 메모리, 광학 디스크, 자기-광학 디스크, 자기 테이프, 또는 범용 직렬 버스(USB) 드라이브 또는 이들 중 둘 이상의 조합을 포함할 수 있다. 저장장치(1206)는 적절하다면, 착탈 가능한 또는 착탈 가능하지 않은(또는 고정된) 매체를 포함할 수 있다. 저장장치(1206)는 적절하다면, 컴퓨터 시스템(1200)의 내부에 있거나 또는 외부에 있을 수 있다. 특정한 실시예들에서, 저장장치(1206)는 비-휘발성, 고체-상태 메모리이다. 특정한 실시예들에서, 저장장치(1206)는 판독-전용 메모리(ROM)를 포함한다. 적절하다면, 이러한 ROM은 마스크-프로그램된 ROM, 프로그램 가능한 ROM(PROM), 삭제 가능한 PROM(EPROM), 전기적으로 삭제 가능한 PROM(EEPROM), 전기적으로 변경 가능한 ROM(EAROM), 또는 플래시 메모리 또는 이들 중 둘 이상의 조합일 수 있다. 본 개시는 임의의 적절한 물리적 형태를 취한 대용량 저장장치(1206)를 고려한다. 저장장치(1206)는 적절하다면, 프로세서(1202)와 저장장치(1206) 사이에서 통신을 가능하게 하는 하나 이상의 저장 제어 유닛들을 포함할 수 있다. 적절하다면, 저장장치(1206)는 하나 이상의 저장장치들(1206)을 포함할 수 있다. 본 개시는 특정한 저장장치를 설명하고 예시하지만, 본 개시는 임의의 적절한 저장장치를 고려한다.
특정한 실시예들에서, I/O 인터페이스(1208)는 컴퓨터 시스템(1200) 및 하나 이상의 I/O 디바이스들 사이에서 통신을 위한 하나 이상의 인터페이스들을 제공하는, 하드웨어, 소프트웨어, 또는 둘 모두를 포함한다. 컴퓨터 시스템(1200)은 적절하다면, 이들 I/O 디바이스들 중 하나 이상을 포함할 수 있다. 이들 I/O 디바이스들 중 하나 이상은 사람과 컴퓨터 시스템(1200) 간의 통신을 가능화할 수 있다. 제한으로서가 아닌 예로서, I/O 디바이스는 키보드, 키패드, 마이크로폰, 모니터, 마우스, 프린터, 스캐너, 스피커, 스틸 카메라, 스타일러스, 태블릿, 터치 스크린, 트랙볼, 비디오 카메라, 또 다른 적절한 I/O 디바이스 또는 이들 중 둘 이상의 조합을 포함할 수 있다. I/O 디바이스는 하나 이상의 센서들을 포함할 수 있다. 본 개시는 임의의 적절한 I/O 디바이스들 및 그것들을 위한 임의의 적절한 I/O 인터페이스들(1208)을 고려한다. 적절하다면, I/O 인터페이스(1208)는 이들 I/O 디바이스들 중 하나 이상을 구동하기 위해 하나 이상의 디바이스 또는 소프트웨어 구동기 가능 프로세서(1202)를 포함할 수 있다. I/O 인터페이스(1208)는 적절하다면, 하나 이상의 I/O 인터페이스들(1208)을 포함할 수 있다. 본 개시는 특정한 I/O 인터페이스를 설명하고 예시하지만, 본 개시는 임의의 적절한 I/O 인터페이스를 고려한다.
특정한 실시예들에서, 통신 인터페이스(1210)는 컴퓨터 시스템(120) 및 하나 이상의 다른 컴퓨터 시스템들(1200) 또는 하나 이상의 네트워크들 사이에서의 통신(예를 들어, 패킷-기반 통신과 같은)을 위한 하나 이상의 인터페이스들을 제공하는 하드웨어, 소프트웨어, 또는 둘 모두를 포함한다. 제한으로서가 아닌 예로서, 통신 인터페이스(1210)는 이더넷 또는 다른 유선-기반 네트워크 또는 무선 NIC(WNIC)와 통신하기 위한 네트워크 인터페이스 제어기(NIC) 또는 네트워크 어댑터 또는 WI-FI 네트워크와 같은, 무선 네트워크와 통신하기 위한 무선 어댑터를 포함할 수 있다. 본 개시는 임의의 적절한 네트워크 및 그것을 위한 임의의 적절한 통신 인터페이스(1210)를 고려한다. 제한으로서가 아닌 예로서, 컴퓨터 시스템(1200)은 애드 혹 네트워크, 개인 영역 네트워크(PAN), 근거리 네트워크(LAN), 광역 네트워크(WAN), 대도시 영역 네트워크(MAN), 또는 인터넷의 하나 이상의 부분들 또는 이들 중 둘 이상의 조합과 통신할 수 있다. 이들 네트워크들 중 하나 이상의 하나 이상의 부분들은 유선 또는 무선일 수 있다. 예로서, 컴퓨터 시스템(1200)은 무선 PAN(WPAN)(예를 들어, BLUETOOTH WPAN과 같은), WI-FI 네트워크, WI-MAX 네트워크, 휴대 전화 네트워크(예를 들어, 이동 통신을 위한 전역적 시스템(GSM) 네트워크와 같은), 또는 다른 적절한 무선 네트워크 또는 이들 중 둘 이상의 조합과 통신할 수 있다. 컴퓨터 시스템(1200)은 적절하다면, 이들 네트워크들 중 임의의 것에 대한 임의의 적절한 통신 인터페이스(1210)를 포함할 수 있다. 통신 인터페이스(1210)는 적절하다면, 하나 이상의 통신 인터페이스들(1210)을 포함할 수 있다. 본 개시는 특정한 통신 인터페이스를 설명하고 예시하지만, 본 개시는 임의의 적절한 통신 인터페이스를 고려한다.
특정한 실시예들에서, 버스(1212)는 서로 컴퓨터 시스템(1200)의 구성요소들을 결합하는 하드웨어, 소프트웨어, 또는 둘 모두를 포함한다. 제한으로서가 아닌 예로서, 버스(1212)는 가속화 그래픽 포트(AGP) 또는 다른 그래픽 버스 강화된 산업 표준 아키텍처(EISA) 버스, 프론트-사이드 버스(FSB), HYPERTRANSPORT(HT) 상호접속, 산업 표준 아키텍처(ISA) 버스, INFINIBAND 상호접속, 로우-핀-카운트(LPC) 버스, 메모리 버스, 마이크로 채널 아키텍처(MCA) 버스, 주변 구성요소 상호접속(PCI) 버스, PCI-고속(PCIe) 버스, 직렬 고급 기술 접속(SATA) 버스, 비디오 전자공학 표준 협회 로컬(VLB) 버스 또는 또 다른 적절한 버스 또는 이들 중 둘 이상의 조합을 포함할 수 있다. 버스(1212)는 적절하다면, 하나 이상의 버스들(1212)을 포함할 수 있다. 본 개시는 특정한 버스를 설명하고 예시하지만, 본 개시는 임의의 적절한 버스 또는 상호접속을 고려한다.
여기에서, 컴퓨터-판독 가능한 비-일시적 저장 매체 또는 매체들은, 적절하다면, 하나 이상의 반도체-기반 또는 다른 집적 회로들(IC들)(예를 들어, 필드-프로그램 가능한 게이트 어레이들(FPGA들) 또는 애플리케이션-특정 IC들(ASIC들)과 같은), 하드 디스크 드라이브들(HDD들), 하이브리드 하드 드라이브들(HHD들), 광학 디스크들, 광학 디스크 드라이브들(ODD들), 자기-광학 디스크들, 자기-광학 드라이브들, 플로피 디스켓들, 플로피 디스크 드라이브들(FDD들), 자기 테이프들, 고체-상태 드라이브들(SSD들), RAM-드라이브들, SECURE DIGITAL 카드들 또는 드라이브들, 임의의 다른 적절한 컴퓨터-판독 가능한 비-일시적 저장 매체, 또는 이들 중 둘 이상의 임의의 적절한 조합을 포함할 수 있다. 컴퓨터-판독 가능한 비-일시적 저장 매체는 적절하다면, 휘발성, 비-휘발성, 또는 휘발성 및 비-휘발성의 조합일 수 있다.
여기에서, "또는"은 달리 명확하게 표시되거나 또는 맥락에 의해 달리 표시되지 않는다면, 포괄적이며 배타적이지 않다. 그러므로, 여기에서, "A 또는 B"는 달리 명확하게 표시되거나 또는 문맥에 의해 달리 표시되지 않는다면, "A, B, 또는 둘 모두"를 의미한다. 게다가, "및"은 달리 명확하게 표시되거나 또는 달리 맥락에 의해 표시되지 않는다면, 공동 및 여러 개 둘 모두이다. 그러므로, 여기에서, "A 및 B"는 달리 명확하게 표시되거나 또는 달리 맥락에 의해 표시되지 않는다면, "A 및 B를 공동으로 또는 각기"를 의미한다.
본 개시의 범위는 이 기술분야에서의 통상의 기술자가 이해할 본 출원에서 설명되거나 또는 예시된 예시적인 실시예들에 대한 모든 변화들, 대체들, 변형들, 변경들, 및 수정들을 포함한다. 본 개시의 범위는 여기에서 설명되거나 또는 예시된 예시적인 실시예들에 제한되지 않는다. 게다가, 본 개시는 특정한 구성요소들, 요소들, 특징, 기능들, 동작들, 또는 단계들을 포함하는 것으로서 여기에서 각각의 실시예들을 설명하고 예시하지만, 이들 실시예들 중 임의의 것은 이 기술분야에서의 통상의 기술자가 이해할 여기에서의 다른 곳에서 설명되거나 또는 예시된 구성요소들, 요소들, 특징들, 기능들, 동작들, 또는 단계들 중 임의의 것의 임의의 조합 또는 순열을 포함할 수 있다. 더욱이, 특정한 기능을 수행하도록 적응되고, 배열되고, 가능하고, 구성되고, 가능화되고, 동작 가능하거나, 또는 동작적인 장치 또는 시스템 또는 장치 또는 시스템의 구성요소에 대한 첨부된 청구항들에서의 참조는, 상기 장치, 시스템, 또는 구성요소가 그렇게 적응되고, 배열되고, 가능하고, 구성되고, 가능화되고, 동작 가능하거나, 또는 동작적인 한, 그것 또는 상기 특정한 기능이 활성화되고, 턴 온되거나, 또는 잠금 해제되는지에 관계없이, 상기 장치, 시스템, 구성요소를 포함한다. 부가적으로, 본 개시는 특정한 이점들을 제공하는 것으로서 특정한 실시예들을 설명하거나 또는 예시하지만, 특정한 실시예들은 이들 이점들 중 일부 또는 모두를 제공하거나 또는 제공하지 않을 수 있다.

Claims (15)

  1. 컴퓨팅 시스템에 의한 방법에 있어서:
    인공 현실 장면의 하나 이상의 표면들을 액세스하는 단계로서, 상기 하나 이상의 표면들은 제 1 레이트로 렌더링된 상기 인공 현실 장면의 하나 이상의 이미지들에 기초하여 및 제 1 뷰잉 위치에 기초하여 생성되는, 상기 액세스 단계; 및
    상기 제 1 레이트보다 높은 제 2 레이트로 서브프레임들을 생성하는 단계를 포함하며,
    상기 서브프레임들의 각각은:
    제 2 뷰잉 위치를 결정하는 것;
    상기 제 2 뷰잉 위치로부터 상기 인공 현실 장면의 하나 이상의 표면들의 가시성을 결정하는 것;
    상기 결정된 상기 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하는 것; 및
    디스플레이를 위해 상기 서브프레임의 컬러 값들을 제공하는 것에 의해 생성되는, 컴퓨팅 시스템에 의한 방법.
  2. 제 1 항에 있어서,
    상기 제 2 뷰잉 위치로부터 상기 인공 현실 장면의 하나 이상의 표면들의 가시성을 결정하는 것은:
    상기 제 2 뷰잉 위치에 기초하여 상기 인공 현실 장면으로 투사하기 위한 광선들을 생성하는 것;
    상기 인공 현실 장면으로의 광선 각각의 궤적을 수정하기 위해 상기 광선들에 기하학적 변환을 적용하는 것; 및
    상기 수정된 광선들의 궤적들에 기초하여, 상기 인공 현실 장면에서 하나 이상의 표면들과 상기 광선들의 교차점들을 결정하는 것을 포함하고,
    바람직하게는, 상기 결정된 하나 이상의 표면들의 가시성에 기초하여, 상기 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하는 것은:
    교차된 표면들의 표면 텍스처의 표면 좌표들에 상기 교차점들에 대한 좌표들을 매핑하는 것, 상기 표면 좌표들에서 상기 교차된 표면들의 표면 텍스처 데이터로부터 컬러 값들을 액세스하는 것, 및 상기 교차점들에 기초하여 상기 액세스된 컬러 값들을 보간하는 것으로부터 선택된 하나 이상을 포함하고,
    상기 컬러 값들에 하나 이상의 그래픽 조정들을 적용하는 것으로서, 상기 그래픽 조정들은: 밝기 조정, 디더링, 포비티드 렌더링, 또는 지각 압축 렌더링을 포함하는, 상기 하나 이상의 그래픽 조정들을 적용하는 것을 포함하는, 컴퓨팅 시스템에 의한 방법.
  3. 제 2 항에 있어서,
    상기 광선들은: 디스플레이 시스템의 픽셀들; 디스플레이 시스템의 픽셀들의 컬러 채널들로부터 선택된 하나 이상에 대응하는, 컴퓨팅 시스템에 의한 방법.
  4. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 하나 이상의 표면들은 상기 인공 현실 장면에서 상기 표면에 대한 텍스처 데이터 및 상기 표면의 위치(position)에 대한 장소 데이터를 포함하는, 컴퓨팅 시스템에 의한 방법.
  5. 제 1 항 내지 제 4 항 중 어느 한 항에 있어서,
    상기 인공 현실 장면의 하나 이상의 이미지들은 상기 컴퓨팅 시스템과는 별개인 또 다른 컴퓨팅 시스템에 의해 렌더링되며, 선택적으로 상기 컴퓨팅 시스템은 상기 다른 컴퓨팅 시스템과 무선 통신하는, 컴퓨팅 시스템에 의한 방법.
  6. 제 1 항 내지 제 5 항 중 어느 한 항에 있어서,
    상기 컴퓨팅 시스템은 헤드-마운트 디스플레이 유닛으로 통합되며; 및/또는 상기 컴퓨팅 시스템은 상기 서브프레임들을 생성하기 위한 디스플레이 엔진을 포함하고, 상기 디스플레이 엔진은:
    상기 제 2 뷰잉 위치로부터 상기 하나 이상의 표면들의 가시성을 결정하기 위한 변환 블록;
    컬러 값들의 보간을 수행하기 위한 픽셀 블록; 및
    컬러 값들에 그래픽 조정들을 적용하기 위한 디스플레이 블록을 포함하는, 컴퓨팅 시스템에 의한 방법.
  7. 제 1 항 내지 제 6 항 중 어느 한 항에 있어서,
    상기 제 2 뷰잉 위치는:
    아이-트래킹 구성요소; 또는
    모션 트래킹 구성요소로부터 수신된 데이터에 기초하여 결정되는, 컴퓨팅 시스템에 의한 방법.
  8. 소프트웨어를 포함하는 하나 이상의 컴퓨터-판독 가능한 비-일시적 저장 매체에 있어서,
    상기 소프트웨어는 실행될 때:
    인공 현실 장면의 하나 이상의 표면들을 액세스하는 것으로서, 상기 하나 이상의 표면들은 제 1 레이트로 렌더링된 상기 인공 현실 장면의 하나 이상의 이미지들에 기초하여 및 제 1 뷰잉 위치에 기초하여 생성되는, 상기 하나 이상의 표면들을 액세스하는 것; 및
    상기 제 1 레이트보다 높은 제 2 레이트로 서브프레임들을 생성하는 것을 실행하도록 동작 가능하고,
    상기 서브프레임들의 각각은:
    제 2 뷰잉 위치를 결정하는 것;
    상기 제 2 뷰잉 위치로부터 상기 인공 현실 장면의 하나 이상의 표면들의 가시성을 결정하는 것;
    상기 결정된 상기 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들에 대응하는 상기 서브프레임의 컬러 값들을 생성하는 것; 및
    디스플레이를 위해 상기 서브프레임의 컬러 값들을 제공하는 것에 의해 생성되는, 하나 이상의 컴퓨터-판독 가능한 비-일시적 저장 매체.
  9. 제 8 항에 있어서,
    상기 제 2 뷰잉 위치로부터 상기 인공 현실 장면의 하나 이상의 표면들의 가시성을 결정하도록 동작 가능한 상기 소프트웨어는 또한:
    상기 제 2 뷰잉 위치에 기초하여 상기 인공 현실 장면으로 투사하기 위한 광선들을 생성하고;
    상기 인공 현실 장면으로 광선 각각의 궤적을 수정하기 위해 상기 광선들에 기하학적 변환을 적용하고;
    상기 수정된 상기 광선들의 궤적들에 기초하여, 상기 인공 현실 장면에서 하나 이상의 표면들과 상기 광선들의 교차점들을 결정하도록 동작 가능한, 하나 이상의 컴퓨터-판독 가능한 비-일시적 저장 매체.
  10. 제 9 항에 있어서,
    상기 결정된 상기 하나 이상의 표면들의 가시성에 기초하여, 상기 디스플레이의 출력 위치들에 대응하는 상기 서브프레임의 컬러 값들을 생성하도록 동작 가능한 상기 소프트웨어는 또한:
    교차된 표면들의 표면 텍스처의 표면 좌표들에 상기 교차점들에 대한 좌표들을 매핑하고;
    상기 표면 좌표들에서 상기 교차된 표면들의 표면 텍스처 데이터로부터 컬러 값들을 액세스하고;
    상기 교차점들에 기초하여 상기 액세스된 컬러 값들을 보간하도록 동작 가능한, 하나 이상의 컴퓨터-판독 가능한 비-일시적 저장 매체.
  11. 제 9 항 또는 제 10 항에 있어서,
    상기 결정된 상기 하나 이상의 표면들의 가시성에 기초하여, 상기 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하도록 동작 가능한 상기 소프트웨어는 또한 상기 컬러 값들에 하나 이상의 그래픽 조정들을 적용하도록 동작 가능하며,
    상기 그래픽 조정들은:
    밝기 조정;
    디더링;
    포비티드 렌더링; 또는
    지각 압축 렌더링을 포함하는, 하나 이상의 컴퓨터-판독 가능한 비-일시적 저장 매체.
  12. 시스템에 있어서,
    하나 이상의 프로세서들; 및
    상기 프로세서들 중 하나 이상에 결합되고 지시들을 포함하는 하나 이상의 컴퓨터-판독 가능한 비-일시적 저장 매체로서, 상기 지시들은 상기 프로세서들 중 하나 이상에 의해 실행될 때 상기 시스템으로 하여금:
    인공 현실 장면의 하나 이상의 표면들을 액세스하는 것으로서, 상기 하나 이상의 표면들은 제 1 레이트로 렌더링된 상기 인공 현실 장면의 하나 이상의 이미지들에 기초하여 및 제 1 뷰잉 위치에 기초하여 생성되는, 상기 하나 이상의 표면들을 액세스하는 것;
    상기 제 1 레이트보다 높은 제 2 레이트로 서브프레임들을 생성하는 것을 실행하게 하도록 동작 가능한, 상기 하나 이상의 컴퓨터-판독 가능한 비-일시적 저장 매체를 포함하며,
    상기 서브프레임들의 각각은:
    제 2 뷰잉 위치를 결정하는 것;
    상기 제 2 뷰잉 위치로부터 상기 인공 현실 장면의 하나 이상의 표면들의 가시성을 결정하는 것;
    상기 결정된 하나 이상의 표면들의 가시성에 기초하여, 디스플레이의 출력 위치들에 대응하는 상기 서브프레임의 컬러 값들을 생성하는 것; 및
    디스플레이를 위해 상기 서브프레임의 컬러 값들을 제공하는 것에 의해 생성되는, 시스템.
  13. 제 12 항에 있어서,
    상기 시스템으로 하여금 상기 제 2 뷰잉 위치로부터 상기 인공 현실 장면의 하나 이상의 표면들의 가시성을 결정하게 하도록 동작 가능한 상기 지시들은 또한, 상기 프로세서들 중 하나 이상에 의해 실행될 때, 상기 시스템으로 하여금:
    상기 제 2 뷰잉 위치에 기초하여 상기 인공 현실 장면으로 투사하기 위한 광선들을 생성하게 하고;
    상기 인공 현실 장면으로 광선 각각의 궤적을 수정하기 위해 상기 광선들에 기하학적 변환을 적용하게 하고;
    상기 수정된 광선들의 궤적들에 기초하여, 상기 인공 현실 장면에서 하나 이상의 표면들과 상기 광선들의 교차점들을 결정하게 하도록 동작 가능한, 시스템.
  14. 제 13 항에 있어서,
    상기 시스템으로 하여금 상기 결정된 하나 이상의 표면들의 가시성에 기초하여, 상기 디스플레이의 출력 위치들에 대응하는 서브프레임의 컬러 값들을 생성하게 하도록 동작 가능한 상기 지시들은 또한, 상기 프로세서들 중 하나 이상에 의해 실행될 때 상기 시스템으로 하여금:
    교차된 표면들의 표면 텍스처의 표면 좌표들에 상기 교차점들에 대한 좌표들을 매핑하게 하고;
    상기 표면 좌표들에서 상기 교차된 표면들의 표면 텍스처 데이터로부터의 컬러 값들을 액세스하게 하고;
    상기 교차점들에 기초하여 상기 액세스된 컬러 값들을 보간하게 하도록 동작 가능한, 시스템.
  15. 제 13 항 또는 제 14 항에 있어서,
    상기 시스템으로 하여금 상기 결정된 상기 하나 이상의 표면들의 가시성에 기초하여, 상기 디스플레이의 출력 위치들에 대응하는 상기 서브프레임의 컬러 값들을 생성하게 하도록 동작 가능한 상기 지시들은 또한, 상기 프로세서들 중 하나 이상에 의해 실행될 때 상기 시스템으로 하여금 상기 컬러 값들에 하나 이상의 그래픽 조정들을 적용하게 하도록 동작 가능하며,
    상기 그래픽 조정들은:
    밝기 조정;
    디더링;
    포비티드 렌더링; 또는
    지각 압축 렌더링을 포함하는, 시스템.
KR1020217016020A 2018-11-02 2019-10-30 사후-렌더링 프로세스를 위한 디스플레이 엔진 KR20210087052A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201862755333P 2018-11-02 2018-11-02
US62/755,333 2018-11-02
US16/586,598 US11403810B2 (en) 2018-11-02 2019-09-27 Display engine for post-rendering processing
US16/586,598 2019-09-27
PCT/US2019/058724 WO2020092477A1 (en) 2018-11-02 2019-10-30 Display engine for post-rendering processing

Publications (1)

Publication Number Publication Date
KR20210087052A true KR20210087052A (ko) 2021-07-09

Family

ID=70458833

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217016020A KR20210087052A (ko) 2018-11-02 2019-10-30 사후-렌더링 프로세스를 위한 디스플레이 엔진

Country Status (7)

Country Link
US (5) US11308681B1 (ko)
EP (1) EP3874469A1 (ko)
JP (1) JP7467437B2 (ko)
KR (1) KR20210087052A (ko)
CN (1) CN113272872A (ko)
TW (1) TWI810395B (ko)
WO (1) WO2020092477A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102017213177A1 (de) * 2017-07-31 2019-01-31 Audi Ag Verfahren zum Betreiben eines Bildschirms eines Kraftfahrzeugs sowie Kraftfahrzeug
US11282259B2 (en) * 2018-11-26 2022-03-22 International Business Machines Corporation Non-visual environment mapping
US11089320B2 (en) * 2019-03-27 2021-08-10 Nvidia Corp. Adaptive pixel sampling order for temporally dense rendering
BR112022001434A2 (pt) * 2019-07-28 2022-06-07 Google Llc Métodos, sistemas e mídia para renderizar conteúdo de vídeo imersivo com malhas otimizadas
KR20210096449A (ko) * 2020-01-28 2021-08-05 삼성전자주식회사 Hud 시스템에서 영상을 재생하는 방법 및 그 hud 시스템
US11308683B2 (en) 2020-06-29 2022-04-19 Imagination Technologies Limited Intersection testing in a ray tracing system using ray bundle vectors
US11295509B2 (en) * 2020-06-29 2022-04-05 Imagination Technologies Limited Intersection testing in a ray tracing system using multiple ray bundle intersection tests
CN115885237A (zh) * 2020-07-17 2023-03-31 惠普发展公司,有限责任合伙企业 头戴式显示器图像和中心凹区亮度计算
US11423520B2 (en) * 2020-10-30 2022-08-23 Facebook Technologies, Llc. Distortion-corrected rasterization
US11402634B2 (en) * 2020-12-30 2022-08-02 Facebook Technologies, Llc. Hand-locked rendering of virtual objects in artificial reality
DE102021104346A1 (de) * 2021-02-24 2022-08-25 Robert Bosch Gesellschaft mit beschränkter Haftung Verfahren zu einem Kompensieren von Projektionsfehlern bei einer Ausgabe von Bildern, System mit einer Recheneinheit zu einer Ausführung des Verfahrens und Computerprogramm
CN116310243B (zh) * 2023-05-24 2023-08-15 山东捷瑞数字科技股份有限公司 基于人工智能的ar防抖方法、系统、设备及存储介质

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6697063B1 (en) * 1997-01-03 2004-02-24 Nvidia U.S. Investment Company Rendering pipeline
US7012604B1 (en) * 2002-09-12 2006-03-14 Advanced Micro Devices, Inc. System architecture for high speed ray tracing
JP4734640B2 (ja) 2006-02-10 2011-07-27 国立大学法人岐阜大学 仮想現実画像表示装置
JP2010092360A (ja) * 2008-10-09 2010-04-22 Canon Inc 画像処理システム、画像処理装置、収差補正方法及びプログラム
US8446433B1 (en) * 2009-06-12 2013-05-21 Lucasfilm Entertainment Company Ltd. Interactive visual distortion processing
GB2470611B (en) * 2009-06-25 2011-06-29 Tv One Ltd Apparatus and method for processing data
US8570320B2 (en) * 2011-01-31 2013-10-29 Microsoft Corporation Using a three-dimensional environment model in gameplay
US9142043B1 (en) 2011-06-24 2015-09-22 Nvidia Corporation System and method for improved sample test efficiency in image rendering
US9292959B2 (en) * 2012-05-16 2016-03-22 Digizig Media Inc. Multi-dimensional stacking with self-correction
US9424685B2 (en) * 2012-07-31 2016-08-23 Imagination Technologies Limited Unified rasterization and ray tracing rendering environments
US9448404B2 (en) * 2012-11-13 2016-09-20 Qualcomm Incorporated Modifying virtual object display properties to increase power performance of augmented reality devices
US9514571B2 (en) * 2013-07-25 2016-12-06 Microsoft Technology Licensing, Llc Late stage reprojection
US9652893B2 (en) 2014-04-29 2017-05-16 Microsoft Technology Licensing, Llc Stabilization plane determination based on gaze location
US10438331B2 (en) * 2014-06-26 2019-10-08 Intel Corporation Distortion meshes against chromatic aberrations
US10089790B2 (en) 2015-06-30 2018-10-02 Ariadne's Thread (Usa), Inc. Predictive virtual reality display system with post rendering correction
US10962780B2 (en) * 2015-10-26 2021-03-30 Microsoft Technology Licensing, Llc Remote rendering for virtual images
US9832451B2 (en) * 2015-11-17 2017-11-28 Survios, Inc. Methods for reduced-bandwidth wireless 3D video transmission
US10026212B2 (en) 2015-11-20 2018-07-17 Google Llc Electronic display stabilization using pixel velocities
US11010956B2 (en) 2015-12-09 2021-05-18 Imagination Technologies Limited Foveated rendering
US10129523B2 (en) 2016-06-22 2018-11-13 Microsoft Technology Licensing, Llc Depth-aware reprojection
US20180005432A1 (en) 2016-06-29 2018-01-04 AR You Ready LTD. Shading Using Multiple Texture Maps
CN109863533B (zh) 2016-08-22 2024-03-15 奇跃公司 虚拟、增强和混合现实系统和方法
US10379611B2 (en) * 2016-09-16 2019-08-13 Intel Corporation Virtual reality/augmented reality apparatus and method
US11127110B2 (en) * 2017-03-01 2021-09-21 Arm Limited Data processing systems
US10365709B2 (en) 2017-03-03 2019-07-30 Microsoft Technology Licensing, Llc MEMS scanning display device
US10885711B2 (en) 2017-05-03 2021-01-05 Microsoft Technology Licensing, Llc Virtual reality image compositing
US10713752B2 (en) 2017-06-09 2020-07-14 Sony Interactive Entertainment Inc. Temporal supersampling for foveated rendering systems
US10755383B2 (en) 2017-09-29 2020-08-25 Apple Inc. Multi-space rendering with configurable transformation parameters
US10699374B2 (en) 2017-12-05 2020-06-30 Microsoft Technology Licensing, Llc Lens contribution-based virtual reality display rendering

Also Published As

Publication number Publication date
US20220366644A1 (en) 2022-11-17
TWI810395B (zh) 2023-08-01
WO2020092477A8 (en) 2021-05-06
JP7467437B2 (ja) 2024-04-15
US11308681B1 (en) 2022-04-19
US20200143585A1 (en) 2020-05-07
US11640691B2 (en) 2023-05-02
WO2020092477A1 (en) 2020-05-07
EP3874469A1 (en) 2021-09-08
US20230245381A1 (en) 2023-08-03
US11113867B1 (en) 2021-09-07
TW202036482A (zh) 2020-10-01
US11403810B2 (en) 2022-08-02
CN113272872A (zh) 2021-08-17
JP2022504931A (ja) 2022-01-13

Similar Documents

Publication Publication Date Title
US11640691B2 (en) Display engine for post-rendering processing
US11176901B1 (en) Pan-warping and modifying sub-frames with an up-sampled frame rate
US11170577B2 (en) Generating and modifying representations of objects in an augmented-reality or virtual-reality scene
US11100899B2 (en) Systems and methods for foveated rendering
US11743435B2 (en) Multi-projector display architecture
US11270468B1 (en) Joint color image and texture data compression
US11557049B1 (en) Interpolation optimizations for a display engine for post-rendering processing
CN113302658A (zh) 并行纹理采样
US11011123B1 (en) Pan-warping and modifying sub-frames with an up-sampled frame rate
US20210090322A1 (en) Generating and Modifying Representations of Objects in an Augmented-Reality or Virtual-Reality Scene
US11647193B2 (en) Adaptive range packing compression
EP4304170A1 (en) Pixel block encoder capable of jointly encoding pixel channels

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal