KR101732288B1 - 스프라이트 그래픽 렌더링 시스템 - Google Patents

스프라이트 그래픽 렌더링 시스템 Download PDF

Info

Publication number
KR101732288B1
KR101732288B1 KR1020157014003A KR20157014003A KR101732288B1 KR 101732288 B1 KR101732288 B1 KR 101732288B1 KR 1020157014003 A KR1020157014003 A KR 1020157014003A KR 20157014003 A KR20157014003 A KR 20157014003A KR 101732288 B1 KR101732288 B1 KR 101732288B1
Authority
KR
South Korea
Prior art keywords
texture
memory
computing
processors
cached
Prior art date
Application number
KR1020157014003A
Other languages
English (en)
Other versions
KR20150080577A (ko
Inventor
작퀘스 피. 가셀린 드 리체보그
노르만 엔. 왕
티모시 알. 오리올
제프리 지. 스탈
Original Assignee
애플 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 애플 인크. filed Critical 애플 인크.
Publication of KR20150080577A publication Critical patent/KR20150080577A/ko
Application granted granted Critical
Publication of KR101732288B1 publication Critical patent/KR101732288B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/001Texturing; Colouring; Generation of texture or colour
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T13/00Animation
    • G06T13/802D [Two Dimensional] animation, e.g. using sprites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/61Scene description

Landscapes

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

Abstract

그래픽 렌더링 시스템을 위한 소프트웨어 개발자 킷(SDK) 형태의 툴들의 세트를 제공하여 전체 그래픽 작업을 개선한다. 일반적으로, 상기 툴은 장면 트리를 분석하는 단계 및 렌더링 작업을 개선하도록 하나 이상의 그래픽 프로세싱 유닛(GPU)에 대한 그것의 제시를 최적화하는 단계에 관한 것이다. 이것의 전체 목표는 다수의 다양한 기능을 통해 제공되고, 이들은 각각 새로운 애플리케이션 프로그래밍 인터페이스(API)를 통해 소프트웨어 개발자에게 제시된다.

Description

스프라이트 그래픽 렌더링 시스템{SPRITE GRAPHICS RENDERING SYSTEM}
본 개시내용은 일반적으로 컴퓨터 그래픽 분야에 관한 것이다. 더욱 상세하게는, 그러나 제한적이지 않게, 그것은 그래픽 프로세서 유닛(GPU)용 렌더링 시스템에서 스프라이트를 조작하기 위한 기술에 관한 것이다.
스프라이트는 큰 장면에 포함된 2차원적(2D) 이미지 또는 애니메이션이다. 스프라이트는 3차원적(3D) 장면으로 맵핑될 수 있다. 스프라이트는 미리 렌더링된 화상, 다이나믹 3D 그래픽, 벡터 아트(vector art), 및 심지어 텍스트까지 포함하는, 임의의 소스로 생성될 수 있다. 그래픽 프로세서 유닛(GPU)이 이용 가능해짐에 따라, 스프라이트의 라이브러리 및 그래픽 처리 루틴은 그래픽의 더 빠른 렌더링을 위하여, 범용 중앙 프로세싱 유닛(CPU)의 처리 능력에 전적으로 의존하는 대신에 GPU의 처리 능력의 사용을 허용하는 렌더링 시스템을 제공하도록 개발되었다. 일반적으로 CPU와 GPU 둘 모두 이러한 라이브러리들에 의해 제공되는 그래픽 처리 연산에 연관되는데, 그래픽 처리의 많은 부분이 GPU에 의해 처리된다.
이러한 렌더링 시스템은 통상적으로 그래픽 작업을 장면 트리(scene tree) 구조로 나타낸다. 장면 그래프(scene graph)는 그래픽 장면의 논리적 및 종종 (필수는 아님) 공간적 표현을 나열한 구조이다. 장면 그래프는 그래프 또는 트리 구조 형태의 노드들의 집합이다. 노드는 많은 자식을 가질 수 있지만 종종 오직 한 부모를 갖고, 부모의 영향이 자신의 모든 자식 노드들에 적용된다. 한 그룹에서 수행된 연산은 자동으로 그것의 모든 구성원들에게 그 영향을 전달한다. 공통 기능은 관련된 형상/객체들을 단일 객체만큼 용이하게 이동, 변환, 선택될 수 있는 합성 객체로 모으는 능력이다.
그래픽 렌더링 시스템을 위한 소프트웨어 개발자 킷(SDK)의 형태의 툴의 세트를 제공하여 전체 그래픽 작업을 개선한다. 일반적으로, 상기 툴은 장면 트리를 분석하는 단계 및 렌더링 작업을 개선하도록 하나 이상의 그래픽 프로세싱 유닛(GPU)에 대한 그것의 제시를 최적화하는 단계에 관한 것이다. 이것의 전체 목표는 다수의 다양한 기능들을 통해 제공되고, 이들은 각각 새로운 애플리케이션 프로그래밍 인터페이스(API)를 통해 소프트웨어 개발자에게 제시된다.
도 1은 그래픽 렌더링 시스템의 일 실시예를 도시하는 블록 다이어그램이다.
도 2는 다수의 스레드를 동시에 실행하기 위하여 병렬로 동작하는 다중 컴퓨팅 프로세서(예를 들어 컴퓨팅 유닛들)를 갖는 컴퓨팅 디바이스의 예를 도시하는 블록 다이어그램이다.
도 3은 간단한 장면 그래프를 나타내는 트리의 그래프이다.
도 4는 일 실시예에 따른 자동 배칭(auto-batching) 기술을 도시하는 플로차트이다.
도 5는 일 실시예에 따른 인덱스 버퍼 및 버텍스 버퍼를 이용하는 기술을 도시하는 플로차트이다.
도 6은 일 실시예에 따라 서브트리가 효과 노드(effects node)로 교체되는 간단한 장면 그래프를 도시하는 그래프이다.
도 7은 일 실시예에 따른 효과 노드들을 생성하는 기술을 도시하는 플로차트이다.
도 8은 일 실시예에 따른 텍스처 아틀라스(texture atlas)를 자동으로 생성하는 기술을 도시하는 플로차트이다.
도 9는 일 실시예에 따른 예시적인 장면 그래프 및 장면 그래프의 서브트리를 마스킹하는 두 가지 방법을 도시하는 그래프이다.
도 10은 일 실시예에 따른 렌더링 시스템을 위한 뷰 프러스텀(view frustum)을 도시하는 블록 다이어그램이다.
도 11은 일 실시예에 따른 스텐실 버퍼(stencil buffer)를 이용하여 마스킹하는 기술을 도시하는 플로차트이다.
도 12는 일 실시예에 따른 렌더링 시스템에 사용하기 위한 컴퓨터 시스템의 블록 다이어그램이다.
이하의 개시내용에서는, 설명의 목적으로, 본 발명에 대한 완전한 이해를 제공하기 위해 많은 구체적인 상세사항들이 기술된다. 그러나, 본 발명이 이러한 구체적인 상세사항 없이도 실시될 수 있음이 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 자명할 것이다. 다른 예에서, 본 발명을 이해하기 어렵게 하는 것을 피하기 위하여 구조 및 디바이스들을 블록 다이어그램으로 도시한다. 아래첨자 또는 접미사가 없는 번호를 언급하는 것은 인용 번호에 대응하는 모든 경우의 아래첨자 및 접미사를 언급하는 것으로 이해한다. 게다가, 본 개시 내용에 사용된 표현은 원칙적으로 가독성 및 교육 목적들을 위해 선택되었으며, 본 발명의 요지를 기술하거나 제한하도록 선택되지는 않아서, 그러한 본 발명의 요지를 결정하기 위해 특허청구범위에 대한 의존이 필요할 수 있다. 본 명세서에서 일 실시예("one embodiment" 또는 "an embodiment")에 관한 언급은 실시예에 관련되어 기술되어진 특정한 특징부, 구조 또는 특성이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미하고, 일 실시예("one embodiment" 또는 "an embodiment")에 관한 중복 언급은 동일 실시예를 반드시 모두 참조하는 것으로 이해되어서는 안된다.
뒤따르는 도면에 도시된 프로세스들은 하드웨어(예컨대, 회로, 전용 로직 등), (범용 컴퓨터 또는 전용 기계 상에서 구동되는 것과 같은) 소프트웨어, 또는 둘 모두의 조합을 포함하는 프로세싱 로직에 의해 수행된다. 프로세스들이 순차적인 작업의 관점으로 아래에 설명되지만, 설명하는 작업들 중 일부는 상이한 순서로 수행될 수 있고, 일부 작업은 순차적이 아니라 병렬적으로 수행될 수 있다.
그래픽 프로세싱 유닛(GPU)은 고성능 그래픽 작업, 예컨대 2D, 3D 그래픽 작업 및/또는 디지털 비디오 관련 기능들을 구현하는 전용 그래픽 프로세서일 수 있다. GPU는 그래픽 작업, 예를 들어, 블리터(blitter) 연산, 텍스처 맵핑, 폴리곤 렌더링, 픽셀 쉐이딩(pixel shading), 및 버텍스 쉐이딩을 수행할 특수(프로그램 가능한) 하드웨어를 포함할 수 있다. GPU는 프레임 버퍼에서 데이터를 페치하여 픽셀들을 서로 블렌딩해서 다시 디스플레이를 위한 프레임 버퍼로 이미지를 렌더링하는 것으로 알려져 있다. GPU는 또한 프레임 버퍼를 제어하고 프레임 버퍼가 CRT 또는 LCD 디스플레이와 같은 디스플레이를 리프레시 하는 데 사용되도록 할 수 있다. 일반적으로, GPU는 디스플레이 제어기를 통해 디스플레이 디바이스에 래스터 그래픽 이미지를 출력하기 위하여 GPU에 연결된 하나 이상의 중앙 프로세싱 유닛(CPU)에서 그래픽 처리 태스크들을 가져올 수 있다.
일반적인 GPU는 통상적으로 각 명령어가 병렬로 다수의 데이터에 대하여 동작할 수 있는 단일 명령어 다중 데이터(Single Instruction Multiple Data: SIMD) 디바이스이다. CPU가 단일 프로세싱 유닛에서 각 코어에서 독립적으로 명령어를 실행할 수 있는 다중 코어 프로세서로 발전함에 따라, 최근 GPU는 벡터 계산의 "레인(lane)들"을 제공하고, 이들은 각각 독립된 스레드로 해석될 수 있다. 단일 하드웨어 시퀀서(sequencer)는 통상적으로 그러한 스레드들의 그룹을 병렬로 운영한다. 모든 스레드들이 동일한 명령어를 실행하는 경우, 그것들은 코히런트(coherent) 있다고 한다. 단일 명령어 페치가 모든 개별적인 프로세싱 요소들에 널리 전달된다. 스레드들이 상이한 방향들로 나뉘는 경우, 그것들은 분기되었다(diverged)고 한다. 단일 명령어 시퀀서는 어떤 것이 분기했는지 파악한다. 그것은 사이클당 1 개의 명령어를 페치해서 마스크에 의해 인에이블되는 모든 프로세싱 요소들에 분배한다.
도 1은 애플리케이션을 위해 병렬 컴퓨팅을 수행할 CPU 및/또는 GPU를 포함하는 컴퓨팅 디바이스를 이용하는 그래픽 렌더링 시스템(100)의 일 실시예를 도시하는 블록 다이어그램이다. 시스템(100)은 병렬 컴퓨팅 아키텍처를 구현할 수 있다. 일 실시예에서, 시스템(100)은 데이터 버스(190)를 통해 하나 이상의 CPU(170) 및 하나 이상의 GPU(180)에 연결된 하나 이상의 호스트 프로세서를 포함하는 그래픽 시스템일 수 있다. 복수의 호스트 프로세서는 호스트 시스템(110)에서 서로 네트워킹될 수 있다. 복수의 CPU(170)는 상이한 벤더들이 만든 다중 코어 CPU를 포함할 수 있다. CPU 또는 GPU와 같은 컴퓨팅 프로세서 또는 컴퓨팅 유닛은 여러 기능들과 연관될 수 있다. 예를 들어, GPU는 전용 텍스처 렌더링 하드웨어를 가질 수 있다. 다른 미디어 프로세서는 전용 텍스처 렌더링 하드웨어 및 배정밀 부동소수점 연산(double precision floating point arithmetic) 둘 모두를 지원하는 GPU일 수 있다. 다수의 GPU는 서로 연결될 수 있다.
일 실시예에서, 호스트 시스템(110)은 소프트웨어 스택을 지원할 수 있다. 소프트웨어 스택은 애플리케이션(120), 컴퓨팅 애플리케이션 라이브러리(130), 예를 들어 OpenCL 플랫폼과 같은 컴퓨팅 플랫폼 층(140), 컴퓨팅 런타임 층(150), 및 컴퓨팅 컴파일러(160)와 같은 소프트웨어 스택 컴포넌트들을 포함할 수 있다. 애플리케이션(120)은 API 콜을 통해 다른 스택 컴포넌트들과 접속할 수 있다. 하나 이상의 프로세싱 요소 또는 스레드는 호스트 시스템(110)의 애플리케이션(120)을 동시에 실행할 수 있다. 컴퓨팅 플랫폼 층(140)은 각각의 부착된 물리적 컴퓨팅 디바이스에 대한 프로세싱 기능들을 저장하는 데이터 구조, 또는 컴퓨팅 디바이스 데이터 구조를 유지할 수 있다. 일 실시예에서, 애플리케이션은 컴퓨팅 플랫폼 층(140)을 통해 호스트 시스템(110)의 이용 가능한 프로세싱 리소스에 관한 정보를 검색할 수 있다. 애플리케이션은 컴퓨팅 플랫폼 층(140)을 통해 프로세싱 태스크를 수행하는 데 필요한 기능 요구 조건들을 선택하고 명시할 수 있다. 따라서, 컴퓨팅 플랫폼 층(140)은 프로세싱 태스크에 대하여 부착된 CPU(170) 및/또는 GPU(180)의 프로세싱 리소스들을 할당하고 초기화하는, 물리적 컴퓨팅 디바이스들을 위한 구성을 결정할 수 있다.
컴퓨팅 런타임 층(150)은 예를 들어, 하나 이상의 로직 컴퓨팅 디바이스에 기초하여, 애플리케이션(103)을 위하여 구성된 프로세싱 리소스들에 따라 프로세싱 태스크의 실행을 관리할 수 있다. 일 실시예에서, 프로세싱 태스크를 실행하는 단계는 프로세싱 태스크를 나타내는 컴퓨팅 프로그램 객체를 생성하는 단계 및 예를 들어 실행 파일, 입출력 데이터 등을 보관하기 위한 메모리 리소스를 할당하는 단계를 포함할 수 있다. 컴퓨팅 프로그램 객체를 위해 로딩된 실행 파일은 컴퓨팅 프로그램 실행 파일일 수 있다. 컴퓨팅 프로그램 실행 파일은 컴퓨팅 프로세서 또는 CPU 또는 GPU와 같은 컴퓨팅 유닛에서 실행될 컴퓨팅 프로그램 객체에 포함될 수 있다. 컴퓨팅 런타임 층(109)은 프로세싱 태스크의 실제 실행을 수행하도록 할당된 물리적 디바이스와 상호 작용할 수 있다. 일 실시예에서, 컴퓨팅 런타임 층(109)은 프로세싱 태스크들을 위해 구성된 CPU 또는 GPU와 같은 프로세서 각각의 런타임 상태에 따라 상이한 애플리케이션들의 여러 프로세싱 태스크 실행을 조율할 수 있다. 컴퓨팅 런타임 층(109)은, 런타임 상태에 기초하여, 프로세싱 태스크를 수행하도록 구성된 물리적 컴퓨팅 디바이스들에서 하나 이상의 프로세서를 선택할 수 있다. 프로세싱 태스크를 수행하는 단계는 복수의 물리적 컴퓨팅 디바이스에서 하나 이상의 실행 파일의 다수의 스레드를 동시에 실행하는 단계를 포함할 수 있다. 일 실시예에서, 컴퓨팅 런타임 층(109)은 각 프로세서의 런타임 실행 상태를 감시함으로써 각각 실행되는 프로세싱 태스크의 상태를 추적할 수 있다.
런타임 층은 애플리케이션(120)의 프로세싱 태스크에 대응하는 컴퓨팅 프로그램 실행 파일로서 하나 이상의 실행 파일을 로딩할 수 있다. 일 실시예에서, 컴퓨팅 런타임 층(150)은 프로세싱 태스크를 수행하는 데 필요한 추가 실행 파일을 컴퓨팅 애플리케이션 라이브러리(130)에서 자동으로 로딩한다. 컴퓨팅 런타임 층(150)은 실행 파일 및 컴퓨팅 프로그램 객체에 대응하는 그것의 소스 프로그램 둘 모두를 애플리케이션(120) 또는 컴퓨팅 애플리케이션 라이브러리(130)에서 로딩할 수 있다. 컴퓨팅 프로그램 객체에 대한 소스 프로그램은 컴퓨팅 프로그램 소스일 수 있다. 단일 컴퓨팅 프로그램 소스에 기초한 복수의 실행 파일은 다수의 유형 및/또는 다양한 버전의 물리적 컴퓨팅 디바이스를 포함하도록 구성된 로직 컴퓨팅 디바이스에 따라 로딩될 수 있다. 일 실시예에서, 컴퓨팅 런타임 층(150)은 실행 파일을 실행하도록 구성된 타겟 프로세서, 예를 들어 CPU 또는 GPU에 최적화된 실행 파일로 로딩된 소스 프로그램을 온라인 컴파일할 컴퓨팅 컴파일러(160)를 활성화할 수 있다.
온라인 컴파일된 실행 파일은 대응하는 소스 프로그램에 따라 기존의 실행 파일뿐만 아니라 향후 호출을 위해 저장될 수 있다. 추가로, 실행 파일은 오프라인에서 컴파일되고, API 콜을 이용하여 컴퓨팅 런타임(150)에 로딩될 수 있다. 컴퓨팅 애플리케이션 라이브러리(130) 및/또는 애플리케이션(120)은 애플리케이션에서 받은 라이브러리 API 요청에 응답하여 연관된 실행 파일을 로딩할 수 있다. 새로 컴파일된 실행 파일은 적극적으로 컴퓨팅 애플리케이션 라이브러리(130) 또는 애플리케이션(120)에 업데이트될 수 있다. 일 실시예에서, 컴퓨팅 런타임(150)은 새로 업그레이드된 버전의 컴퓨팅 디바이스를 위하여 컴퓨팅 컴파일러(160)를 통해 온라인으로 컴파일된 새로운 실행 파일로 애플리케이션에 있던 컴퓨팅 프로그램 실행 파일을 교체할 수 있다. 컴퓨팅 런타임(150)은 컴퓨팅 애플리케이션 라이브러리(130)를 업데이트하기 위하여 온라인으로 컴파일된 새로운 실행 파일을 삽입할 수 있다. 일 실시예에서, 컴퓨팅 런타임(150)은 프로세싱 태스크를 위한 실행 파일을 로딩할 때 컴퓨팅 컴파일러(160)를 호출할 수 있다. 다른 실시예에서, 컴퓨팅 컴파일러(160)는 컴퓨팅 애플리케이션 라이브러리(130)를 위한 실행 파일을 만들기 위해 오프라인으로 호출될 수 있다. 컴퓨팅 컴파일러(160)는 컴퓨팅 프로그램 실행 파일을 만들기 위해 컴퓨팅 커널 프로그램을 컴파일하고 링크할 수 있다. 일 실시예에서, 컴퓨팅 애플리케이션 라이브러리(130)는, 예를 들어, 개발 도구 및/또는 이미지 프로세싱을 지원하는 복수의 함수를 포함할 수 있다. 각 라이브러리 함수는 복수의 물리적 컴퓨팅 디바이스를 위하여 컴퓨팅 애플리케이션 라이브러리(130)에 저장된 컴퓨팅 프로그램 소스 및 하나 이상의 컴퓨팅 프로그램 실행 파일에 대응할 수 있다.
본 명세서에서 설명하는 다양한 실시예들은 장면 그래프를 조작하는 데 유용한 다양한 기능을 제공한다. 이 실시예들은 그래픽 렌더링 시스템을 위한 API, 통상적으로 소프트웨어 개발자 킷(SDK)의 형태로 제공될 수 있지만, 임의의 바람직한 방식으로 패키징될 수 있다. 일 실시예에서 렌더링 시스템은 그래픽을 처리하는 데 사용될 하드웨어(CPU 및 GPU)에 특화되어, 하드웨어를 더 효과적으로 사용하도록 한다.
다양한 실시예에 의해 다뤄지는 스프라이트들은 회전, 크기 조절, 변형, 비율 조절, 이동, 선명도 조절, 및 색상 조절이 될 수 있다. 소리가 스프라이트에 포함되는 경우, 스프라이트의 소리가 재생될 수 있다. 특정 동작은 그 동작이 시작하기 전에 이벤트를 기다리는 것으로서 정의될 수 있다.
오토배칭(Autobatching)
일반적으로 빠른 프레임 레이트가 느린 프레임 레이트보다 바람직한데, 게임과 같은 애플리케이션에서는 특히 그렇다. 10 프레임/초(fps)로 실행되는 게임과 60 fps로 실행되는 게임 간의 차이는 대개 시각적으로 명백하고 게임을 더 즐겁고 재밌게 만든다. 더 높은 프레임 레이트를 성취하는 한 방법은 렌더링을 위한 데이터를 GPU에 대규모로 제공하는 것이다.
일부 API는 드로우 콜이 프로그래머에 의해 수동으로 모두 분류되는 수동 배칭 모드를 허용하지만, 장면 그래프 구조를 이용하여 소프트웨어가 그래픽 API에게 무엇을 렌더링하는지 알려주는 자동 배칭을 허용하지 않고, 렌더링 시스템은 API 뒤에서 자동으로 모든 것을 서로 분류하고 GPU에 배치를 공급한다.
자동 배칭은 GPU에 대규모의 데이터를 공급하도록 하는데, 이는 통상적으로 처리 속도를 증가시키고, 이로 인해 렌더링된 그래픽에 프레임 레이트가 증가된다(예를 들어, 60 fps 대 10 fps). API는 또한 프로그래머가 GPU에 관한 지식을 알아야 하거나 GPU에 맞춤 적용을 수행해야 할 필요없이 사용될 GPU에 기초하여 자동으로 배칭을 결정하도록 한다. API 및 기본 그래픽 라이브러리는 정확히 어떤 하드웨어가 이용 가능한지 알고 있기 때문이다. 예를 들어, 어떤 GPU(들) 및 CPU(들)가 이용 가능하고, 자동 배칭 API는 종래의 수동 배칭보다 더 쉽게 배칭할 수 있다.
동작중에, 프로그래머가 임의의 원하는 방식으로 장면 그래프, 그래픽 API는, 사용 중인 GPU(들)에 관한 지식에 기초하여 장면 그래프를 나타내는 트리를 분석한다. 상기 분석은 API로 하여금 GPU 드로우 콜을 정리하여 바람직한 결과를 자동으로 생산하도록 하는데, 이는 사용자가 트리에서 명시한 것과는 순서가 상이할 수 있다.
도 2는 다수의 스레드를 동시에 실행하기 위하여 병렬로 동작하는 다중 컴퓨팅 프로세서(예를 들어 컴퓨팅 유닛들)를 갖는 컴퓨팅 디바이스의 예를 도시하는 블록 다이어그램이다. 각 컴퓨팅 프로세서는 복수의 스레드를 병렬로(또는 동시에) 실행할 수 있다. 컴퓨팅 프로세서 또는 컴퓨팅 유닛에서 병렬로 실행될 수 있는 스레드들은 스레드 그룹으로 지칭될 수 있다. 컴퓨팅 프로세서는 병렬로 실행될 수 있는 다수의 스레드 그룹을 가질 수 있다. 예를 들어, M 스레드는 컴퓨팅 프로세서(220)에서 스레드 그룹으로서 실행하는 것으로 도시된다. 다수의 스레드 그룹, 예를 들어 컴퓨팅 프로세서 1 (220)의 스레드 1 및 컴퓨팅 프로세서 N (230)의 스레드 N은, 하나의 컴퓨팅 디바이스(210) 상의 독립된 컴퓨팅 프로세서들에 걸쳐 병렬로 실행되거나 다수의 컴퓨팅 디바이스(210)에 걸쳐 실행될 수 있다. 다중 컴퓨팅 프로세서에 걸친 복수의 스레드 그룹은 컴퓨팅 프로그램 실행 파일을 병렬로 실행할 수 있다. 2 이상의 컴퓨팅 프로세서는 ASIC (주문형 집적 회로) 디바이스와 같은 단일 칩에 기초할 수 있다. 일 실시예에서, 애플리케이션의 다수의 스레드는 다수의 칩에 걸쳐 2 이상의 컴퓨팅 프로세서에서 동시에 실행될 수 있다.
컴퓨팅 디바이스(210)는 CPU(220) 및 CPU(230)와 같은 컴퓨팅 프로세서 또는 컴퓨팅 유닛을 하나 이상 포함할 수 있고, 이는, CPU 및 GPU의 임의의 조합일 수 있다. 로컬 메모리(240)는 컴퓨팅 프로세서에 연결되고 컴퓨팅 프로세서에서 실행중인 단일 스레드 그룹의 스레드들 간에 공유될 수 있다. 스레드 1 (224) 및 스레드 N (234)과 같은 상이한 스레드 그룹들에 걸쳐 있는 다수의 스레드는 컴퓨팅 디바이스(210)에 연결된 컴퓨팅 디바이스 메모리(270)에 저장된, 스트림과 같은 컴퓨팅 메모리 객체를 공유할 수 있다. 컴퓨팅 디바이스 메모리(270)는 글로벌 메모리(280)와 상수 메모리(290)를 포함할 수 있다. 글로벌 메모리(280)는 스트림과 같은 컴퓨팅 메모리 객체들을 할당하는 데 이용될 수 있다. 컴퓨팅 메모리 객체는 컴퓨팅 프로그램 실행 파일에 의해 동작될 수 있는 데이터 요소들의 수집을 포함할 수 있다. 컴퓨팅 메모리 객체는 이미지, 텍스처, 프레임 버퍼, 스칼라 데이터 유형의 어레이, 사용자 정의 구조의 어레이, 또는 변수 등을 나타낼 수 있다. 상수 메모리(290)는 컴퓨팅 프로그램 실행 파일에 의해 빈번하게 사용되는 고정 변수들을 저장하는 판독 전용 메모리일 수 있다.
일 실시예에서, 컴퓨팅 프로세서 또는 컴퓨팅 유닛을 위한 로컬 메모리를 사용하여 스레드 그룹의 모든 스레드들에 의해 공유되는 변수들을 할당할 수 있다. 로컬 메모리는 CPU(220)를 위한 로컬 공유 메모리(240) 및 GPU(230)를 위한 로컬 공유 메모리(250)와 같은 전용 로컬 저장장치로서 구현될 수 있다. 다른 실시예에서, 컴퓨팅 프로세서를 위한 로컬 메모리는 컴퓨팅 디바이스의 하나 이상의 컴퓨팅 프로세서에 대하여 컴퓨팅 디바이스 메모리를 위한 판독-기록 캐시, 예컨대 컴퓨팅 디바이스(210)의 컴퓨팅 프로세서(220 및 230)를 위한 데이터 캐시(260)로서 구현될 수 있다. 전용 로컬 저장장치는 상이한 스레드 그룹에 걸쳐 스레드들에 공유되지 않을 수 있다. CPU(220)와 같은 컴퓨팅 프로세서의 로컬 메모리가 판독-기록 캐시, 예를 들어 데이터 캐시(260)로서 구현되는 경우, 로컬 메모리에 있는 것으로 선언된 변수는 컴퓨팅 디바이스 메모리(270)로부터 할당되고 판독-기록 캐시, 예를 들어 로컬 메모리를 구현하는 데이터 캐시(260)에 저장될 수 있다. 예를 들어, 판독-기록 캐시(260)나 전용 로컬 저장장치(240, 250) 모두 대응하는 컴퓨팅 프로세서(220, 230)에 이용 가능하지 않을 때, 스레드 그룹 내의 스레드들은 컴퓨팅 디바이스 메모리(270)에 할당된 로컬 변수들을 공유할 수 있다. 일 실시예에서, 각 스레드는 스레드에서 호출된 함수들에 의해 사용되는 스레드 프라이빗 변수들을 저장할 프라이빗 메모리와 연관될 수 있다. 예를 들어, 프라이빗 메모리 N (232)는 스레드 N (234) 이외의 스레드들에는 보이지 않을 수 있다.
도 3은 제1 스프라이트의 3 개의 렌더링(도 3에서 "A"로 식별됨) 및 제2 스프라이트의 3 개의 렌더링(도 3에서 "B"로 식별됨)을 포함하는 간단한 장면 그래프를 나타내는 트리의 그래프(300)이다. 그래프(300)는 무조건적으로 GPU 드로우 콜(310, 320, 330, 340, 350, 및 360)에 대한 순서를 정의하여, A, B, B, B, A, 및 A를 렌더링하도록 한다. API가 정보를 수신하면, 그것은 6 개의 GPU 드로우 콜을 생성할 것이다. 프로그래머는 3 개의 연속적인 B 렌더링이 단일 드로우 콜로 통합될 수도 있고, 마지막 2 개의 A 렌더링이 배칭되거나 단일 드로우 콜로 통합되어, 3 개의 드로우 콜로 될 수도 있다는 것을 인식할 지도 모른다. 그러나 본 명세서에서 개시된 바와 같이 API의 자동 배칭 기술은, 이용 가능한 GPU 하드웨어의 지식에 기초하여, 수동 배칭을 능가하여 개선 가능할 수 있다. 특정 GPU는 다른 GPU보다 더 많은 통합화를 허용할 수 있고, 수동 배칭은 프로그래머로 하여금 바람직한 GPU에 소프트웨어를 맞춤 적용하거나 다양한 GPU를 처리할 커스텀 코드를 작성하도록 요구할 수도 있다. 그러한 활동을 API로 이전시킴으로써, 프로그래머는 맞춤 적용에서 벗어나고 애플리케이션의 복잡성은 상대적으로 감소할 수 있다.
한 애플리케이션에서, 제1 GPU를 이용하여, 자동 배칭은 드로우 콜(310, 350, 및 360)을 단일 드로우 콜로 통합하여 A를 렌더링하고, 드로우 콜(320, 330, 및 340)을 단일 드로우 콜로 통합하여 B를 렌더링하여, GPU에 대하여 오직 2 개의 실제 드로우 콜이 되도록 한다. 다른 애플리케이션에서, GPU가 트리 연합(a union of trees)으로부터 단일 텍스처를 생성 가능한 경우, API는 GPU 드로우 콜의 개수를 A와 B 연합인 단일 드로우 콜로 감소 가능하여, 연합과 오프셋(offset)의 단일 텍스처가 된다. 예를 들어, 드로우 콜(310)은 드로우 콜(350)과는 장면 중 상이한 위치에서 A를 렌더링한다. 따라서, 오프셋이 렌더링 시스템에 의해 계산되어서 스프라이트 A를 재렌더링해야 할 필요 없이, 렌더링된 스프라이트 A 를 두 위치에서 디스플레이하도록 한다. 드로우 콜들을 자동 배칭함으로써, 동일하게 생성된 장면이 프레임으로서 디스플레이되지만, GPU 활동이 감소하여, 잠재적으로 프레임 레이트가 증가하도록 할 수 있다.
자동 배칭 기술이 도 4의 플로차트에 도시된다. 블록(410)에서, 애플리케이션으로부터 장면 그래프를 수신한다. 블록(420)에서 사용될 GPU의 특성과 기능을 고려하여 장면 그래프를 분석한다. 블록(430)에서, 분석에 기초하여 각 프레임의 장면 그래프를 분류함으로써 그래프의 무조건적인 순서의 드로우 콜들을 가능한 많이 통합한다. 최종적으로, 블록(440)에서, 장면 그래프를 렌더링한다.
상기 기술은 GPU 메모리에서 데이터 관리를 위한 인덱스 버퍼 및 버텍스 버퍼의 사용을 수반하고, 이는 도 5의 플로차트에 도시된 바와 같다. 그래픽 프레임을 생성하는 애플리케이션을 로딩하는 경우, 블록(510)에서 API는 최대 길이 인덱스 버퍼를 미리 생성하여, 고정 인덱스들로 채운다. 블록(520)에서 인덱스 버퍼를 GPU에 한번 업로딩하고, 버퍼의 서브셋을 재사용하여 각 프레임을 드로잉한다. 일 실시예에서, 모든 드로잉들은 버텍스를 공유하는 두 삼각형으로 구성된 사변형의 형태이다. 블록(530)에서 장면 그래프의 상태에 기초하여 각 프레임의 인덱스들과 매칭되도록 버텍스 버퍼들을 생성한다. 버텍스들이 업데이트되면, 버텍스 버퍼도 업데이트될 수 있어서 인덱스 버퍼 엔트리는 계속해서 정확한 버텍스 구조를 참조한다.
일 실시예에서, 드로우 콜은 다음과 같이 표현된다
드로우콜(텍스처, 버텍스들의 리스트)
각 버텍스는 (x, y, z, 색상, 텍스처_위치)의 구조이다. 버텍스들이 버텍스 버퍼에서 GPU 메모리 한 번에 저장된다. 그러나, "버텍스들의 리스트"는, 드로우 콜의 버텍스들을 전송하는 대신에, 인덱스들을 버텍스 버퍼에 전송한다. 인덱스 버퍼가 GPU에 공급되어 인덱스 버퍼 엔트리가 버텍스 버퍼로의 인덱스가 되도록 한다.
일 실시예에서, 인덱스 버퍼 엔트리들은 버텍스 버퍼로의 오프셋이다. 대안적으로, 인덱스 버퍼 엔트리들은 단순히 숫자일 수 있다. 따라서, 인덱스 버퍼 엔트리 2는 버텍스 버퍼로의 제2 엔트리를 나타내고 "1, 3, 2"의 버텍스들의 리스트를 갖는 드로우 콜은 버텍스 버퍼에서 제1, 제3, 및 제2 버텍스를 참조할 것이다. 그와 같은 실시예에서, 인덱스 버퍼 엔트리들은 16-비트 정수와 같이 작은 값일 수 있고, 이는 통상적으로 버텍스 버퍼의 버텍스 엔트리의 크기보다 작다.
텍스처 효과, 자동 래스터화(auto rasterization).
일 실시예에서, API는 매우 비경제적인 효과일 수 있는 것을 캐시에 저장해서, 이 캐시저장된 효과들을 재사용하여, 처리 시간을 감소시키고 렌더링 처리에 속도를 내도록 한다. 그와 같이 캐시저장된 텍스처 효과들은 코어 이미지 효과를 처리하는 데 매우 유용할 수 있고, 그렇지 않다면 시간 및 프로세싱 리소스 면에서 비경제적일 것이다.
"효과 노드"는 장면 그래프의 어디에든 위치될 수 있다. 효과 노드는 그것의 모든 자식들을 캐시저장된 텍스처로 단순화한다. 효과 노드는 자동으로 그것의 임의의 자식이 변경되는 시기를 검출하고 래스터화된 텍스처를 재생성한다. 변경된 것이 없는 경우, 효과 노드는 자식들을 다시 드로잉하는 시간을 들이지 않고 캐시저장된 텍스처를 이용하여 자동으로 다시 드로잉될 수 있다. 효과적으로, 효과 노드는 장면 그래프에서 그 지점에서 파생된 전체 서브트리를 대체한다.
텍스처 효과 또는 "CI 필터" 또한 효과 노드에 적용될 수 있다. 이는 블룸(Bloom), 가우시안 블러(Gaussian Blur), 워핑(Warping) 및 스머징(Smudging)과 같은 복합 효과를 포함한다. 이 동작들은 종종 모든 프레임을 컴퓨팅하기에 비경제적이어서 렌더링 시스템은 효과 노드에 적용되는 효과의 출력을 캐시저장하여 그것을 사용해서 효과 노드 하위에 아무것도 변경된 것이 없을 때 매우 빠른 렌더링을 수행할 수 있다. 일 실시예에서, 기본 텍스처에 다양한 효과들이 적용되는 다수의 효과 노드가 캐시저장될 수 있다.
도 6은 간단한 장면 그래프를 도시하는 그래프(600)이다. 효과 노드(610A)를 생성하여 장면 그래프의 노드(610)에서 파생된 서브트리 전체를 대신할 수 있다. 효과 노드(610A)는 서브트리(도 6에서 파선으로 윤곽을 나타냄)에서 생성된 텍스처를 포함하여 효과 노드(610A)가 유닛으로서 조작될 수 있도록 한다. 효과 노드는 단순화된(flattened) 특수 장면 그래프 노드이고 고정된 텍스처와 같이 장면 그래프에서 그것 아래의 모든 것을 캐시저장한다. 노드(620) 또는 그것 아래의 서브트리에서 다른 어떠한 것이 변경된 경우 효과 노드(610A)는 다시 컴퓨팅될 수 있다. 이것은 비경제적인 CI 필터의 사용을 허용하는데, 그 이유는 CI 필터의 출력이 효과 노드의 일부로서 캐시저장될 수 있기 때문이다.
도 7은 일 실시예에 따라 효과 노드를 생성하는 기술을 도시하는 플로차트(700)이다. 블록(710)에서, 도 6의 블록(610)에서 파생된 서브트리와 같은, 효과 노드로 변환될 장면 그래프의 서브트리를 식별한다. 블록(720)에서, 서브트리를 단순화된 텍스처로 단순화한다. 단순화된 텍스처는 통상적으로 GPU 메모리에 캐시 저장되지만, 애플리케이션 메모리에 저장될 수 있다. 효과 또는 필터가 효과 노드에 적용될 경우, 블록(730)에서 효과를 적용하고 블록(740)에서 결과를 캐시저장한다. 일 실시예에서, 단순화된 텍스처는 또한 캐시저장되어, 상이한 효과가 효과 노드에 적용되기를 원하는 경우, 전체 서브트리를 다시 단순화 해야 하는 대신에, 캐시저장된 효과 노드가 상기 효과를 적용하는 데 사용될 수 있도록 한다.
블록(750)에서, 서브트리에서 어떠한 변경, 예컨대 도 6에 도시된 바와 같은 노드(620)에 대한 변경이 발생하는 경우, 블록(720)에서 시작하는 절차가 반복될 수 있다. 그렇지 않다면, 블록(760)에서 캐시저장된 필터링된 노드가 필요할 때, 서브트리를 렌더링 하고 필터를 적용해야 하는 대신에 캐시저장된 필터링된 노드를 재사용될 수 있다.
텍스처 재사용 및 프리로딩(Preloading)
텍스처는 GPU 상의 소중한 메모리를 차지하고 개발자는 종종 상이한 장소에서 동일한 텍스처를 사용할 것이다. 종래의 렌더링 시스템에서, 텍스처가 파일에서 처음 로딩되고, 이후에 다시 로딩되는 경우, 텍스처의 두 사본이 GPU 메모리에 저장되어, 소중한 공간을 차지한다.
일 실시예에서, 렌더링 시스템은 GPU 메모리의 텍스처들을 관리한다. 이것은 텍스처 재사용을 포함한다. 프로그래머가 사용할 이미지를 표시하면, 시스템은 그것을 GPU 메모리에서 관리한다. 프로그래머는 또한 텍스처가 더 이상 사용되지 않을 것이라고 표시하여, 시스템이 상기 텍스처를 GPU 메모리에서 제거하도록 한다. GPU 메모리의 텍스처를 관리함으로써, 시스템은 GPU 메모리에 어떠한 이미지도 오직 단일 사본만이 있다는 것을 보증할 수 있다.
렌더링 시스템은 텍스처의 단일 캐시저장된 사본이 GPU 메모리에 상주하도록 유지하고 자동으로 모든 향후 사용이 상기 단일 공유 인스턴스로 전용되도록 할 수 있다. 일 실시예에서, 시스템은 또한 리소스가 미리 결정된 시간(또는 드로우 콜의 수)동안 사용되지 않은 경우를 검출하여 메모리를 풀어줄 수 있다.
캐시저장된 텍스처는 또한 디스크 드라이브 상의 파일에 저장될 수 있다. 캐시저장된 텍스처가 캐시에서 삭제되지만, 나중에 사용되는 경우, 렌더링 시스템은 자동으로 디스크에서 리소스를 다시 로딩할 수 있고, 이는 사용자에게 매우 명백하다.
GPU 메모리의 텍스처들을 관리하는 것으로 위에서 설명하였지만, GPU 메모리에 저장된 어떠한 리소스도 관리될 수 있고 위에서 나타낸대로 캐시저장될 수 있다.
개시된 기술들은 장면 그래프 트리를 전처리하거나 분석한다. 리소스들은 그것들이 필요하기 전에 프리페치되어, 프리페치된 리소스를 캐시저장할 수 있다. 또한 위에서 설명한 자동 배칭 기술을 사용하여 장면을 렌더링하는 데 최적의 시퀀스를 GPU에 전송함으로써, 텍스처가 GPU 메모리 캐시에서 삭제되어야 할 횟수를 가능한 한 감소시킬 수 있다.
도 3에 도시된 바와 같이 일 실시예에서 그래프(300)를 분석하여 노드(380) 전에 노드(370)를 렌더링할 필요가 있는 것과 같이 그래프의 종속성을 식별한다. 이어서, 렌더링 시스템은 장면을 GPU에 전달하는 것을 최적화화여 캐시 삭제 및 기타 효율을 떨어뜨리는 상황을 줄일 수 있다.
자동 텍스처 아틀라스
이름을 텍스처에 맵핑하는 텍스처 아틀라스를 생성하여, 개발자가 이름으로 텍스처를 참조하도록 하는 툴이 존재한다. 그러나, 이러한 툴은 자동이 아니고 위에서 설명한 메모리 관리 기능도 제공하지 않는다. 일 실시예에서, 자동 텍스처 아틀라스 기능은 확실하게 텍스처 아틀라스를 생성한다.
일 실시예에서 개발자는 플로차트(800)에 따라 도 8에서 도시된 바와 같이 단일 자동 툴을 실행할 수 있고, 플로차트(800)는 블록(810)에서 텍스처 파일들(PNG, JPG, TIFF 등)의 디렉토리를 취하고, 블록(820)에서 각각 개별적인 텍스처를 파스(parse)하고, 블록(830)에서 텍스처 아틀라스에서 텍스처 좌표 및 치수를 기록한 XML 포맷의 매니페스트 파일(manifest file)을 따라 (통상적으로 단일 JPG 또는 PNG이지만, 임의의 바람직한 포맷으로) 텍스처 아틀라스를 생성한다. 이후에, 블록(840)에서 렌더링 시스템은 개발자에 의해 명시된 텍스처의 이름을 수신하고, 블록(850)에서 바람직한 텍스처를 찾기 위해 조회(lookup)가 발생하고, 마지막으로 블록(860)에서 아틀라스의 하위직사각형에 바람직한 텍스처를 제공한다.
게다가 개발자는 블록(840)에서 수신된 이름으로 이미지를 요청할 수 있다. 그래픽 시스템은 아틀라스 파일을 위치파악하여, 그것을 GPU로 로딩하고, 블록(850)에서 아틀라스의 텍스처를 조회한 뒤, 블록(860)에서 원본 이미지 데이터를 포함하는 아틀라스의 하위직사각형을 나타내는 객체를 제공한다.
시퀀스 등에서 그룹을 의미하는 어레이 내부 어레이 사용하기.
애니메이션은 비율 조절, 이동, 선명도 조절, 시한 대기(timed wait), 회전 등과 같은 동작을 포함한다. 추가로, 이 빌딩 블록들의 각각은 "그룹" 애니메이션(병렬) 또는 "시퀀스" 애니메이션(순차) 중 어느 하나에 위치될 수 있다. 그룹 및 시퀀스 자체 또한 다른 그룹/시퀀스 내에 위치되어 복합 애니메이션을 생성할 수 있다.
일 실시예에서, 어레이를 정의하기 위하여 오브젝티브 C 문법을 이용하는 것은 사용자에 의해 공급된 내포된 애니메이션을 해석할 지능적인 방법을 제공한다. 동작의 시퀀스를 정의할 때, 요소들 중 하나가 자신이 다른 동작들의 어레이인 경우, 서브어레이는 시퀀스 내의 그룹(병렬)으로 처리된다. 유사하게, 동작들의 그룹의 요소들 중 하나가 다른 동작들의 어레이인 경우, 서브어레이는 그룹 내의 시퀀스로 처리된다.
예를 들어, 애니메이션이 3 개의 동작의 어레이로서 다음과 같이 정의되고:
Figure 112015050816707-pct00001
비율 조절 동작이 3 개 동작의 어레이로서 다음과 같이 정의되는 경우:
Figure 112015050816707-pct00002
애니메이션은 다음과 같이 해석될 수 있다
Figure 112015050816707-pct00003
비율 조절 및 보잉(boing) 동작은 병렬로 수행된다.
시간상 임의의 시점에서의 장면 그래프의 연재(serialization)
렌더링 시스템의 실시예의 독특한 특징은 시간상 임의의 시점에서 전체 장면 그래프가 메모리 또는 데이터 파일에 연재될 수 있다는 것이다. 이것은 장면의 모든 노드의 정확한 상태 및 그것들에 적용된 임의의 애니메이션들을 포함한다. 이어서 이 파일은 특정 이슈를 디버깅하는 수단으로서 또는 전개 메커니즘(deployment mechanism)으로서 이후에 로딩되어 한줄의 코드를 이용하여 게임 콘텐츠를 전달하고 공유할 수 있다. 연재는 또한 메모리 보존에 사용될 수 있다. 즉, 파일로의 연재 이후, 장면 그래프는 필요할 때까지 메모리에서 제거될 수 있고, 그 때 연재된 장면 그래프가 파일에서 다시 로딩된다.
아티팩트(artifact)를 방지하는 정확한 픽셀 렌더링에 적합한 화면 핸들링, 비율조절
일 실시예에서, 렌더링 시스템은 자동으로 그래픽이 렌더링될 디스플레이의 픽셀 밀도 및 종횡비를 검출한다. 상기 정보를 이용하여, 렌더링 시스템은 디스플레이에 이용 가능한 최고의 가능성있는 작품을 제공하기 위하여 여러 버전의 작품들 중에서 선택할 수 있다. 렌더링 시스템은 또한 화면-맞춤, 화면-채움, 또는 크기 조절 알고리즘을 이용하여 스크린 해상도와 매칭되도록 작품을 비율 조절할 수 있다.
입력으로서 장면 그래프을 이용한 마스킹
렌더링 시스템의 일 실시예에서, 마스킹은 매우 유동적이다. 장면 그래프의 어떤 서브트리는 마스크될 아이템으로서 사용될 수 있고 장면 그래프의 어떤 다른 서브트리는 마스크로서 사용될 수 있다. 도 9는 예시 장면 그래프 및 서브트리(910)를 마스킹하는 두 가지 방법을 도시하는 그래프(900)이다. 종래에는, 마스킹은 마스크로서 별 모양 요소(930)와 같은 단일 입력 이미지를 통해 수행된다. 그러나 추가로, 장면 그래프(900)에서 게임 캐릭터, 불과 같은 입자계, 비디오, 지리적 형상 등을 포함하는 어떤 것이든 마스크로서 사용될 수 있다. 도 9의 예에서, 서브트리(910)는 또한 서브트리(920)에 의해 마스킹될 수 있다.
사용된 클립핑(Clipping), 컬링(culling) 및 마스킹 기술
도 10은 뷰 프러스텀(1020)이 평면(1010) 및 뷰포트(1030)에 의해 정의되는 표시 시스템(1000)을 도시하는 블록 다이어그램이다. 뷰 프러스텀(1020) 외부에 있는 것은 뷰포트(1030)에서 보이지 않는다. 렌더링 형상을 GPU에 전달하기 전에, 렌더링 시스템의 실시예는 현재의 뷰 프러스텀(1020) 내에 보이지 않을 렌더링 객체들 또는 렌더링 객체들의 부분들을 잘라내기 위하여, 높은 레벨 컬링을 수행할 수 있다. 렌더링 객체(1040)와 같이, 렌더링 객체가 현재의 뷰 프러스텀(1020) 내부에 있지 않은 경우, 컬링은 드로우 콜에서 렌더링 객체를 제거한다. 랜더링 객체(1050)와 같이, 렌더링 객체가 뷰 프러스텀(1020) 내에 단지 부분적으로 있는 경우, 렌더링 객체의 그 부분만이 렌더링 시스템에 의해 GPU로 전송된 드로우 콜에 유지될 것이다. 일 실시예에서, 렌더링 시스템은 장면 그래프 트리를 분석하고 또한 불투명한 요소(1060)의 후면 및 뷰포트(1030)의 시점에서 렌더링 객체(1060)에 의해 가려진 요소(1070)의 적어도 일부분과 같은 후면 또는 가려진 형상을 제거한다.
일 실시예에서, 종래의 알파 마스킹(alpha masking) 기술보다 훨씬 빠른 스텐실 버퍼가 마스킹에 사용된다. 스텐실 버퍼는 통상적으로 2D 게임에서 사용되지 않는다. 렌더링 시스템은 깊이 버퍼(depth buffer), 색상 버퍼, 및 스텐실 버퍼를 사용한다. 색상 버퍼는 렌더링된 객체가 디스플레이될 때 보이는 것이고, 및 픽셀당 8, 16, 24, 또는 임의의 다른 비트 수일 수 있다.
도 11은 일 실시예에 따른 스텐실 버퍼를 사용하여 마스킹하기 위한 기술(1100)을 도시하는 플로차트이다. 블록(1110)에서, 뷰포트(1030)에 대하여 Z 방향에서 더 가까운 객체와 같이, 마스크가 렌더링 시스템에 의해 식별된다. 블록(1120)에서, 색상 버퍼를 끈다. 이어서 블록(1130)에서 마스크를 스텐실 버퍼에 기록한다. 일 실시예에서, 8-비트 스텐실 버퍼 요소 중 1 개의 비트는 마스킹을 나타내는 데 사용된다. 이어서 블록(1140)에서 색상 버퍼를 다시 켜고 트리의 렌더링을 시작한다. 렌더링 시스템은 스텐실 버퍼에서 대응하는 비트가 설정되지 않은 경우에만 렌더링 시스템이 색상 버퍼를 렌더링하도록 명령하는 GPU 드로우 콜을 발행한다.
물리적 결합부로의 장면 그래프 계층 맵핑
렌더링 시스템은 렌더링 객체들과 물리적 객체들을 서로 조합한다. 최종 사용자에게는, 온-스크린 렌더링 스프라이트 및 물리적 강체(rigid body) 둘 모두를 나타내는 단일 객체가 있다. 물리적 강체 정보는 각각의 스프라이트에 중량, 질량, 가속도, 및 속도를 적용하는 것을 허용한다.
렌더링 시스템은 렌더링 좌표와 물리적 세계의 좌표를 맵핑하고 연관시킨다. 물리적 내용이 업데이트되면, 스트라이프의 새로운 위치도 자동으로 업데이트된다. 객체의 자식이 추가되면, 렌더링 시스템은 자동으로 자식 객체와 그것의 부모 사이에 물리적 접합부를 생성해서, 부모와 자식의 물리적 특성은 계층적으로 유지된다.
전자 디바이스의 구현
도 12는 일 실시예에서 사용될 수 있는 컴퓨터 시스템(1200)의 일 예시를 나타낸다. 예를 들어, 시스템(1200)은 도 1에 도시된 시스템의 일부로서 구현될 수 있다. 도 12는 컴퓨터 시스템의 다양한 콤포넌트들을 도시하지만, 그러한 상세사항이 본 발명과 밀접한 관련이 없기 때문에 그 콤포넌트들을 상호접속시키는 임의의 특정 아키텍처 또는 방식을 나타내도록 의도되지 않는다. 더 적은 컴포넌트들 또는 아마도 더 많은 컴포넌트들을 갖는 네트워크 컴퓨터 및 기타 데이터 프로세싱 시스템(예를 들어, 핸드헬드 컴퓨터, 개인용 디지털 어시스턴트 (PDA), 셀룰러 전화기, 오락 시스템, 소비자 전자 디바이스 등)은 또한 하나 이상의 실시예를 구현하는 데 사용될 수 있다.
도 12에 도시된 바와 같이, 데이터 프로세싱 시스템 형태의 컴퓨터 시스템(1200)은 CPU 및/또는 GPU일 수 있는 마이크로프로세서(들)(1216), 휘발성 판독/기록 랜덤 액세스 메모리(RAM) 및 판독 전용 메모리(ROM) 중 하나 또는 둘 모두를 포함할 수 있는 메모리(1212), 및 비휘발성 저장 디바이스(1214)에 연결되는 버스(1222)를 포함한다. 마이크로프로세서(들)(1216)는 위에서 설명한 동작들을 수행하기 위하여 메모리 (1212) 및 저장 디바이스(1214)에서 명령어들을 조회하여 캐시(1218)를 이용하여 명령어들을 실행할 수 있다. 버스(1222)는 이러한 다양한 컴포넌트들을 서로 상호연결하고 또한 이러한 컴포넌트들(1216), (1218), (1212), 및 (1214)을 디스플레이 제어기(1206) 및 디스플레이 디바이스(1220)와 주변 디바이스들, 예컨대 마우스, 키보드, 모뎀, 네트워크 인터페이스, 프린터 및 본 발명이 속하는 기술분야에서 잘 알려진 기타 디바이스들일 수 있는 입출력 (I/O) 디바이스들(1204)에 연결한다. 통상적으로, 입출력 디바이스들(1204)은 입출력 제어기(1202)를 통해 시스템에 연결된다. 휘발성 RAM이 메모리(1212)에 포함되는데, RAM은 통상적으로 메모리에 데이터를 리프레시 또는 유지하기 위하여 계속 전력을 필요로 하는 다이나믹 RAM (DRAM)으로서 구현된다. 디스플레이 제어기(1206) 및 디스플레이 디바이스(1220)는 디스플레이 데이터를 처리할 하나 이상의 GPU를 선택적으로 포함할 수 있다. 선택적으로, GPU 메모리(1208)를 제공하여 디스플레이 제어기(1206) 또는 디스플레이 디바이스(1220)에 포함된 GPU를 지원할 수 있다.
저장 디바이스(1214)는 통상적으로 자기 하드 드라이브, 광학 드라이브, 비휘발성 솔리드 스테이트 메모리 디바이스, 또는 시스템에서 전력이 제거된 이후에도 데이터(예를 들어 대량의 데이터)를 유지하는 기타 유형의 메모리 시스템이다. 도 12는 저장 디바이스(1214)가 데이터 프로세싱 시스템의 나머지 컴포넌트들에 직접 연결되는 로컬 디바이스로 나타내지만, 실시예들은 시스템에서 원격으로 떨어져 있는 비휘발성 메모리, 예컨대 유선 또는 무선 네트워킹 인터페이스일 수 있는 네트워크 인터페이스(1210)를 통해 데이터 프로세싱 시스템에 연결된 네트워크 저장 디바이스를 활용할 수 있다. 버스(1222)는 본 발명이 속하는 기술분야에서 잘 알려진 다양한 브릿지, 제어기 및/또는 어댑터를 통해 서로 연결되는 하나 이상의 버스를 포함할 수 있다. 간결성을 위해 각 유형의 단일 요소만이 도 12에 도시되더라도, 임의의 또는 모든 다양한 요소 유형들 중 다수의 요소들이 바라는 대로 사용될 수 있다.
위의 상세한 설명이 의도적인 예시이며, 제한하려는 것이 아님이 이해될 것이다. 예를 들어, 위에서 설명한 실시예들은 서로 조합하여 사용될 수 있다. 다른 많은 실시예들은 위의 상세한 설명을 검토한 후에 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게는 명백할 것이다. 그러므로, 본 발명의 범주는 첨부된 특허청구범위를 참조하여, 이러한 특허청구범위의 권리를 갖는 등가물들의 전체 범주에 따라 결정되어야 한다.

Claims (14)

  1. 명령어들을 포함하는 컴퓨터 판독 가능 저장매체로서, 상기 명령어들은 실행시 하나 이상의 프로세서로 하여금,
    그래픽 프로세서와 연관된 제1 메모리에 텍스처(texture)를 캐시저장하도록 하고;
    상기 캐시저장된 텍스처를 식별하도록 텍스처 아틀라스(a texture atlas)를 자동으로 업데이트하도록 하고 - 상기 캐시저장된 텍스처는 검색가능한 이름에 맵핑됨 - ;
    상기 그래픽 프로세서에 의해 장면 그래프(scene graph)를 렌더링할 때, 상기 제1 메모리 내에 상기 캐시저장된 텍스처의 복사본을 생성하지 않고 상기 캐시저장된 텍스처를 자동으로 재사용하도록 하고, 상기 캐시저장된 텍스처를 자동으로 재사용하기 위한 명령어들은, 상기 하나 이상의 프로세서로 하여금,
    이미지에 대한 요청을 수신하도록 하고 - 상기 요청은 상기 검색가능한 이름을 포함함 -;
    상기 검색가능한 이름에 의해 상기 캐시저장된 텍스처를 참조하도록 하고;
    상기 검색가능한 이름을 이용한 검색(lookup)을 수행하여 상기 텍스처 아틀라스로부터 상기 캐시저장된 텍스처의 좌표들 및 치수들을 획득하도록 하고;
    상기 수신된 요청에 응답하여, 상기 캐시저장된 텍스처의 상기 좌표들 및 상기 치수들에 대응하는 상기 텍스처 아틀라스의 하위 직사각형(sub-rectangle)을 제공하게 하는 명령어들을 포함하는, 컴퓨터 판독 가능 저장매체.
  2. 제1항에 있어서, 상기 명령어들은 또한 상기 하나 이상의 프로세서로 하여금,
    자동으로 상기 제1 메모리로부터 상기 캐시저장된 텍스처를 제거하도록 하고,
    저장 매체에 상기 텍스처를 캐시저장하도록 하고;
    자동으로 상기 저장 매체에서 상기 제1 메모리로 상기 텍스처를 다시 로딩하게 하는, 컴퓨터 판독 가능 저장매체.
  3. 삭제
  4. 제1항에 있어서, 상기 명령어들은 또한 상기 하나 이상의 프로세서로 하여금,
    장면 그래프의 단순화된(flattened) 서브트리로부터 상기 텍스처를 생성하게 하고;
    상기 텍스처와 연관된 노드를 상기 장면 그래프에 삽입하게 하고;
    상기 서브트리를 렌더링하는 대신에 상기 캐시저장된 텍스처를 렌더링하게 하는, 컴퓨터 판독 가능 저장매체.
  5. 제4항에 있어서, 상기 명령어들은 또한 상기 하나 이상의 프로세서로 하여금,
    상기 서브트리의 변경에 응답하여 상기 텍스처를 재생성하게 하고;
    상기 제1 메모리에 상기 재생성된 텍스처를 다시 캐시저장하게 하는, 컴퓨터 판독 가능 저장매체.
  6. 제4항에 있어서, 상기 명령어들은 또한 상기 하나 이상의 프로세서로 하여금,
    상기 캐시저장된 텍스처에 효과(effect)를 적용함으로써 제2 텍스처를 생성하게 하고;
    상기 제1 메모리에 상기 제2 텍스처를 캐시저장하게 하는, 컴퓨터 판독 가능 저장매체.
  7. 명령어들을 포함하는 컴퓨터 판독 가능 저장매체로서, 상기 명령어들은 실행시 하나 이상의 프로세서로 하여금,
    장면 그래프를 분석하게 하고;
    프레임을 렌더링하기 전에 상기 프레임에 대하여 자동으로 상기 장면 그래프를 분류하게 하고;
    상기 분류된 장면 그래프의 유사한 서브트리 연합(a union of subtrees)으로부터 자동으로 텍스처를 생성하게 하는, 컴퓨터 판독 가능 저장매체.
  8. 제7항에 있어서, 상기 명령어들은 또한 상기 하나 이상의 프로세서로 하여금,
    상기 텍스처를 렌더링하도록 그래픽 프로세서에 대하여 드로잉 콜(drawing call)을 생성하게 하는, 컴퓨터 판독 가능 저장매체.
  9. 삭제
  10. 제8항에 있어서, 상기 분류된 장면 그래프의 상기 유사한 서브트리 연합(a union of subtrees)으로부터 자동으로 텍스처를 생성하게 하는 명령어들은, 상기 하나 이상의 프로세서로 하여금,
    상기 유사한 서브트리 연합의 상기 서브트리들에 대응하는 오프셋(offset)들을 생성하게 하고,
    렌더링을 위하여 상기 그래픽 프로세서에 상기 텍스처와 함께 상기 오프셋들을 전송하게 하는 명령어들을 추가로 포함하는, 컴퓨터 판독 가능 저장매체.
  11. 명령어들을 포함하는 컴퓨터 판독 가능 저장매체로서, 상기 명령어들은 실행 시 하나 이상의 프로세서로 하여금,
    복수의 애니메이션 요소를 제1 조합 요소로 조합하게 하고 - 상기 복수의 애니메이션 요소는 제2 조합 요소를 포함함 - ;
    상기 제1 조합 요소를 수행하도록 그래픽 프로세서에 대하여 콜(call)들을 생성하게 하는, 컴퓨터 판독 가능 저장매체.
  12. 삭제
  13. 제11항에 있어서,
    상기 제1 조합 요소는 순차적 실행을 위하여 지정되고,
    상기 제2 조합 요소는 병렬적 실행을 위하여 지정된 조합 요소로서 해석되는, 컴퓨터 판독 가능 저장매체.
  14. 제11항에 있어서,
    상기 제1 조합 요소는 병렬적 실행을 위하여 지정되고,
    상기 제2 조합 요소는 순차적 실행을 위하여 지정된 조합 요소로서 해석되는, 컴퓨터 판독 가능 저장매체.
KR1020157014003A 2012-12-28 2013-10-30 스프라이트 그래픽 렌더링 시스템 KR101732288B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201261746678P 2012-12-28 2012-12-28
US61/746,678 2012-12-28
PCT/US2013/067470 WO2014105264A2 (en) 2012-12-28 2013-10-30 Sprite graphics rendering system

Publications (2)

Publication Number Publication Date
KR20150080577A KR20150080577A (ko) 2015-07-09
KR101732288B1 true KR101732288B1 (ko) 2017-05-02

Family

ID=49582816

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157014003A KR101732288B1 (ko) 2012-12-28 2013-10-30 스프라이트 그래픽 렌더링 시스템

Country Status (6)

Country Link
US (2) US9582848B2 (ko)
EP (1) EP2939208B1 (ko)
KR (1) KR101732288B1 (ko)
CN (1) CN104823215B (ko)
AU (1) AU2013368503B2 (ko)
WO (1) WO2014105264A2 (ko)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102048885B1 (ko) * 2013-05-09 2019-11-26 삼성전자 주식회사 그래픽 프로세싱 유닛, 이를 포함하는 그래픽 프로세싱 시스템, 및 이를 이용한 렌더링 방법
US20150070358A1 (en) * 2013-09-12 2015-03-12 Marcello Judah Sachs Thotput
US9886736B2 (en) 2014-01-20 2018-02-06 Nvidia Corporation Selectively killing trapped multi-process service clients sharing the same hardware context
US9235871B2 (en) 2014-02-06 2016-01-12 Oxide Interactive, LLC Method and system of a command buffer between a CPU and GPU
CN104035751B (zh) * 2014-06-20 2016-10-12 深圳市腾讯计算机系统有限公司 基于多图形处理器的数据并行处理方法及装置
CN104036451B (zh) * 2014-06-20 2018-12-11 深圳市腾讯计算机系统有限公司 基于多图形处理器的模型并行处理方法及装置
US9928564B2 (en) * 2014-06-26 2018-03-27 Intel Corporation Efficient hardware mechanism to ensure shared resource data coherency across draw calls
US9223551B1 (en) * 2014-07-22 2015-12-29 Here Global B.V. Rendergraph compilation method and use thereof for low-latency execution
US9934547B2 (en) * 2014-10-09 2018-04-03 Qualcomm Incorporated Method and system for reducing the number of draw commands issued to a graphics processing unit (GPU)
CN106157353B (zh) * 2015-04-28 2019-05-24 Tcl集团股份有限公司 一种文字渲染方法和文字渲染装置
US9733721B2 (en) 2015-04-28 2017-08-15 Dell Products, L.P. Rendering graphics using framebuffer nodes with event handler mapping in a binary search tree
US9594776B2 (en) 2015-05-05 2017-03-14 Microsoft Technology Licensing, Llc Dynamic, parameterized image resource selection
US10031947B2 (en) * 2015-06-24 2018-07-24 Advanced Micro Devices, Inc. Method and apparatus for performing a search operation on heterogeneous computing systems
GB2540382B (en) * 2015-07-15 2020-03-04 Advanced Risc Mach Ltd Data processing systems
US9654753B1 (en) * 2015-09-01 2017-05-16 Amazon Technologies, Inc. Video stream processing
US9761026B1 (en) * 2016-01-22 2017-09-12 The Mathworks, Inc. Rendering graphical scenes
KR102651125B1 (ko) 2016-04-06 2024-03-26 삼성전자주식회사 경로 렌더링을 수행하는 방법 및 장치
CN107992328A (zh) * 2016-10-26 2018-05-04 深圳市中兴微电子技术有限公司 一种数据处理的方法、装置和片上系统
US10445852B2 (en) * 2016-12-22 2019-10-15 Apple Inc. Local image blocks for graphics processing
US10565802B2 (en) * 2017-08-31 2020-02-18 Disney Enterprises, Inc. Collaborative multi-modal mixed-reality system and methods leveraging reconfigurable tangible user interfaces for the production of immersive, cinematic, and interactive content
US10726605B2 (en) * 2017-09-15 2020-07-28 Intel Corporation Method and apparatus for efficient processing of derived uniform values in a graphics processor
US10540194B2 (en) 2017-12-21 2020-01-21 International Business Machines Corporation Runtime GPU/CPU selection
US10878611B2 (en) * 2018-01-26 2020-12-29 Nvidia Corporation Techniques for pre-processing index buffers for a graphics processing pipeline
US10909739B2 (en) 2018-01-26 2021-02-02 Nvidia Corporation Techniques for representing and processing geometry within an expanded graphics processing pipeline
US10600229B2 (en) 2018-01-26 2020-03-24 Nvidia Corporation Techniques for representing and processing geometry within a graphics processing pipeline
US10650482B1 (en) 2018-11-09 2020-05-12 Adobe Inc. Parallel rendering engine
CN109948091A (zh) * 2019-03-20 2019-06-28 网宿科技股份有限公司 一种网页处理方法及客户端设备
US11302055B2 (en) 2019-04-01 2022-04-12 Apple Inc. Distributed processing in computer generated reality system
CN110070597A (zh) * 2019-04-02 2019-07-30 同济大学 一种基于OpenCL的Unity3D渲染加速方法
CN112470194A (zh) * 2019-04-12 2021-03-09 艾司科软件有限公司 用于生成和查看具有印刷特征的对象的3d可视化的方法和系统
CN110738720B (zh) * 2019-10-08 2022-01-07 腾讯科技(深圳)有限公司 特效渲染方法、装置、终端及存储介质
CN111327695B (zh) * 2020-02-13 2022-08-02 腾讯科技(深圳)有限公司 一种资源下载方法和相关装置
US11722540B2 (en) 2020-09-24 2023-08-08 Apple Inc. Distributed encoding
US11533351B2 (en) 2020-09-24 2022-12-20 Apple Inc. Efficient delivery of multi-camera interactive content
US11742973B2 (en) 2020-09-25 2023-08-29 Apple Inc. Multi-protocol synchronization
US11728932B2 (en) 2020-09-25 2023-08-15 Apple Inc. Communication system with improved reliability
CN112652025B (zh) * 2020-12-18 2022-03-22 完美世界(北京)软件科技发展有限公司 图像渲染方法、装置、计算机设备及可读存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004102998A (ja) * 1995-08-04 2004-04-02 Microsoft Corp グラフィック対象物をチャンク映像に変換し、かつ、映像層を結合して表示画像に換える方法、および、装置

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5982939A (en) 1995-06-07 1999-11-09 Silicon Graphics, Inc. Enhancing texture edges
EP1434172A3 (en) * 1995-08-04 2004-09-15 Microsoft Corporation Method and system for generating a display image using Gsprites.
US6373482B1 (en) 1998-12-23 2002-04-16 Microsoft Corporation Method, system, and computer program product for modified blending between clip-map tiles
US6995765B2 (en) 2001-07-13 2006-02-07 Vicarious Visions, Inc. System, method, and computer program product for optimization of a scene graph
EP1495412B1 (en) 2002-03-22 2012-11-28 Alandro Consulting NY LLC Scalable high performance 3d graphics
US7151545B2 (en) * 2003-08-06 2006-12-19 Landmark Graphics Corporation System and method for applying accurate three-dimensional volume textures to arbitrary triangulated surfaces
US7602398B2 (en) 2005-01-28 2009-10-13 Microsoft Corporation Decorating surfaces with textures
TWI267060B (en) 2005-05-11 2006-11-21 Benq Corp Display apparatuses, methods and machine-readable storage medium for adjusting display parameter based on display content
US7283140B2 (en) 2005-06-21 2007-10-16 Microsoft Corporation Texture montage
US7750922B2 (en) 2006-10-24 2010-07-06 Adobe Systems Incorporated Transparency group computation on a graphics processing unit
US9013499B2 (en) 2007-07-19 2015-04-21 Disney Enterprises, Inc. Methods and apparatus for multiple texture map storage and filtering including irregular texture maps
GB2457646B (en) 2007-10-30 2010-03-03 Imagination Tech Ltd Method and apparatus for compressing and decompressing data
US8204338B2 (en) 2008-02-14 2012-06-19 Microsoft Corporation Factoring repeated content within and among images
US9024959B2 (en) * 2009-12-21 2015-05-05 Intel Corporation Demand-paged textures
US8761543B2 (en) 2011-08-30 2014-06-24 Microsoft Corporation Image processing using bounds adjustment
US9710950B2 (en) 2012-04-27 2017-07-18 Adobe Systems Incorporated Extensible sprite sheet generation mechanism for declarative data formats and animation sequence formats
US9286122B2 (en) * 2012-05-31 2016-03-15 Microsoft Technology Licensing, Llc Display techniques using virtual surface allocation
CN102831631B (zh) * 2012-08-23 2015-03-11 上海创图网络科技发展有限公司 一种大规模三维动画的渲染方法及渲染装置
US9349210B2 (en) * 2012-11-30 2016-05-24 Arm Limited Methods of and apparatus for using textures in graphics processing systems
WO2014151796A1 (en) 2013-03-15 2014-09-25 Robert Bosch Gmbh System and method for display of a repeating texture stored in a texture atlas
US9626789B2 (en) 2013-05-07 2017-04-18 Advanced Micro Devices, Inc. Implicit texture map parameterization for GPU rendering

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004102998A (ja) * 1995-08-04 2004-04-02 Microsoft Corp グラフィック対象物をチャンク映像に変換し、かつ、映像層を結合して表示画像に換える方法、および、装置

Also Published As

Publication number Publication date
CN104823215B (zh) 2018-04-27
AU2013368503A1 (en) 2015-04-30
US20170148131A1 (en) 2017-05-25
EP2939208A2 (en) 2015-11-04
US20140184606A1 (en) 2014-07-03
WO2014105264A8 (en) 2015-04-23
US9978115B2 (en) 2018-05-22
KR20150080577A (ko) 2015-07-09
AU2013368503B2 (en) 2016-11-03
WO2014105264A3 (en) 2014-09-18
EP2939208B1 (en) 2021-03-03
US9582848B2 (en) 2017-02-28
WO2014105264A2 (en) 2014-07-03
CN104823215A (zh) 2015-08-05

Similar Documents

Publication Publication Date Title
KR101732288B1 (ko) 스프라이트 그래픽 렌더링 시스템
US9766938B2 (en) Application interface on multiple processors
CN106575228B (zh) 图形处理中的渲染目标命令重新排序
CN110084875B (zh) 使用计算着色器作为顶点着色器的前端
US10255650B2 (en) Graphics processing using dynamic resources
EP3413198A1 (en) Data parallel computing on multiple processors
EP3137985B1 (en) Method and system to create a rendering pipeline
CN108475441B (zh) 光线追踪期间的详细级别选择
EP3410297B1 (en) Indirect argument buffers
CN111400024A (zh) 渲染过程中的资源调用方法、装置和渲染引擎
US8907979B2 (en) Fast rendering of knockout groups using a depth buffer of a graphics processing unit
Tolo Multi-gpu rendering with vulkan api
Mileff et al. Advanced 2D rasterization on modern CPUs
Joshi et al. Graphics programming for the web
AU2016213890B2 (en) Data parallel computing on multiple processors
Browning et al. 3D Graphics Programming
Borgo et al. State of the Art Report on GPU Visualization
Sutherland et al. Chapter 14: 3D Graphics Programming

Legal Events

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