KR102648256B1 - 중앙화된 렌더링 - Google Patents

중앙화된 렌더링 Download PDF

Info

Publication number
KR102648256B1
KR102648256B1 KR1020197031887A KR20197031887A KR102648256B1 KR 102648256 B1 KR102648256 B1 KR 102648256B1 KR 1020197031887 A KR1020197031887 A KR 1020197031887A KR 20197031887 A KR20197031887 A KR 20197031887A KR 102648256 B1 KR102648256 B1 KR 102648256B1
Authority
KR
South Korea
Prior art keywords
data
computer system
client application
scene
clause
Prior art date
Application number
KR1020197031887A
Other languages
English (en)
Other versions
KR20190134694A (ko
Inventor
프라빈 바부 제이 디
Original Assignee
매직 립, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 매직 립, 인코포레이티드 filed Critical 매직 립, 인코포레이티드
Priority to KR1020247008075A priority Critical patent/KR20240036150A/ko
Publication of KR20190134694A publication Critical patent/KR20190134694A/ko
Application granted granted Critical
Publication of KR102648256B1 publication Critical patent/KR102648256B1/ko

Links

Classifications

    • 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
    • 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/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • G06F3/147Digital output to display device ; Cooperation and interconnection of the display device with other functional units using display panels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • 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
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/005Tree description, e.g. octree, quadtree
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/14Display of multiple viewports
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/21Collision detection, intersection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/61Scene description
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2219/00Indexing scheme for manipulating 3D models or images for computer graphics
    • G06T2219/024Multi-user, collaborative environment

Abstract

방법이 개시되며, 이 방법은 제1 클라이언트 애플리케이션으로부터 제1 노드를 포함하는 제1 그래픽 데이터를 수신하는 단계; 제1 클라이언트 애플리케이션과 독립적인 제2 클라이언트 애플리케이션으로부터, 제2 노드를 포함하는 제2 그래픽 데이터를 수신하는 단계; 및 장면그래프를 생성하는 단계를 포함하고, 여기서 장면그래프는 제1 노드와 제2 노드 사이의 계층적 관계를 기술한다.

Description

중앙화된 렌더링
[0001] 본 출원은, 35 U.S.C. § 119(e) 하에서 2017년 3월 30일에 출원된 미국 특허 출원 번호 제62/479,134호를 우선권으로 주장하며, 이로써 상기 출원의 내용들은 모든 목적들을 위해 그 전체가 인용에 의해 본원에 포함된다.
[0002] 본 개시내용은 일반적으로 디스플레이 상에 그래픽 데이터를 시각적으로 렌더링하기 위한 시스템들 및 방법들에 관한 것으로, 특히 단일 디스플레이 상에서 다수의 컴퓨터 애플리케이션들로부터의 데이터를 시각적으로 렌더링하기 위한 시스템들 및 방법들에 관한 것이다.
[0003] 컴퓨터 애플리케이션의 그래픽 데이터를 디스플레이에 렌더링하기 위한 다양한 기술들이 존재한다. 이러한 기술들은 그래픽 데이터를 현실성 있게(즉, 물리적 세계에 기초한 뷰어의 예상들에 부합하게) 그리고 효율적으로 렌더링하는 것이 바람직할 수 있다. 또한, 렌더링 기술들은, 예컨대, 다수의 애플리케이션들이 단일 디스플레이 상에 디스플레이될 그래픽 데이터에 기여하는 컴퓨터 시스템들을 포함하여, 다양한 토폴로지들의 컴퓨터 시스템들을 수용하는 것이 바람직할 수 있다.
[0004] 종래의 시스템들은 종종, 이러한 다중-애플리케이션 시스템들에서 콘텐츠를 현실성 있게 그리고 효율적으로 렌더링하지 못한다. 예컨대, 일부 이러한 시스템들에서, 다수의 애플리케이션들로부터의 그래픽 데이터를 단일 디스플레이 상에서 렌더링하는 것은 디스플레이 상에서 데이터가 올바르지 않게 정렬되게 하여, 디스플레이의 사실성을 손상시키는 예기치 않은 시각적 결과들을 생성한다. 추가로, 하나의 애플리케이션으로부터의 그래픽 데이터가 다른 애플리케이션으로부터의 그래픽 데이터와 현실성 있게 상호작용(이를테면, 조명 및 새도우캐스팅(shadowcasting) 효과들을 통해 또는 쉐이더들을 통해)하지 못할 수 있다. 부가적으로, 일부 그러한 시스템들은 컴퓨테이셔널 효율을 증가시키기 위해 보이지 않는 표면들의 컬링(culling)과 같은 렌더링 최적화를 사용하는 자신들의 능력 면에서 제한적이다.
[0005] 증강 현실(AR) 또는 "혼합 현실"을 수반하는 시스템들은 특히, 다수의 애플리케이션들로부터의 그래픽 데이터를 단일 디스플레이로 렌더링하는 것에 관한 문제에 대한 더 나은 솔루션들을 요구한다. 예컨대, AR 시스템들은 다수의 사용자들이 공유된 가상 공간들에서 상호작용할 가능성을 가지며 모든 사용자들로부터의 가상 콘텐츠는 단일 디스플레이로 렌더링된다. 그러한 상호작용들은, 사용자들이 믿을 수 있고 이들에게 의미있고(이는 AR 시스템의 그래픽 출력이 설득력있고 사용자의 시각적 예상들에 부합할 것을 요구함); 상이한 유형들 및 수의 사용자, 사용자 하드웨어, 및 사용자 소프트웨어뿐만 아니라, 사용자들이 시스템에 관여하기를 원할 수 있는 상이한 방식들을 수용하기에 충분히 유연하고; 그리고 높은 프레임 레이트들로 지속적인 동작을 유지하고 모바일 디바이스들 상에서 배터리 수명을 최대화하기에 충분히 효율적인 것이 바람직하다. 또한, R 시스템의 개별 사용자와 연관된 애플리케이션 데이터 및 애플리케이션들아 다른 사용자들과 독립적으로 유지되고, 보안(이는 비신뢰 사용자들 사이의 데이터 액세스에 의해 손상될 수 있음)을 제공하는 것뿐만 아니라, 특히 시스템의 사용자들의 수가 많아짐에 따라 확장성을 유지하는 것이 바람직할 수 있다. 또한, 이러한 시스템들은 사용자들 및 사용자 애플리케이션들에 관한 기술적 제약들을 최소화함으로써 이익을 얻을 수 있는데; 예컨대, 사용자가 AR 시스템에 참여하기 위한 하드웨어 요건들을 제한하는 것은 더 많은 사용자들이 참여하도록 장려한다. 이는, 개별 사용자들 또는 사용자의 하드웨어 상에서 실행되는 애플리케이션들이 복잡한 렌더링 동작들을 수행해야 하는 정도를 제한함으로써(예컨대, 전용 하드웨어 상에서 실행되는 서버-측 호스트 애플리케이션들과 같이 공유 시스템들에 이러한 동작들을 떠넘김으로써) 달성될 수 있다.
[0006] 본 개시내용의 예들은 다수의 애플리케이션들이 단일 디스플레이 상에 디스플레이될 그래픽 데이터에 기여하는 컴퓨터 시스템들을 설명한다. 본 개시내용의 예들은 그래픽 데이터를 현실성 있게(즉, 물리적 세계에 기초한 뷰어의 예상들에 부합하게) 그리고 효율적으로 렌더링하는 데 사용될 수 있다. 본 개시내용의 예들에 따르면, 제1 그래픽 데이터는 제1 클라이언트 애플리케이션으로부터 수신될 수 있고, 제2 그래픽 데이터는 제2의 독립적인 클라이언트 애플리케이션으로부터 수신될 수 있다. 제1 및 제2 그래픽 데이터는 제1 및 제2 그래픽 데이터에 의해 표현된 노드들 사이의 관계들을 설명하는 데 사용될 수 있는, 장면그래프(scenegraph)와 같은 "중앙화된(centralized)" 데이터 구조로 결합될 수 있다. 따라서, 중앙화된 데이터 구조는 현실성 있고 효율적인 방식으로 제1 및 제2 그래픽 데이터를 반영하는 장면을 디스플레이에 렌더링하는 데 사용될 수 있다.
[0007] 도 1a 내지 도 1e는 본 개시내용의 예들에 따라 그래픽 디스플레이들을 포함하는 예시적인 컴퓨터 시스템들을 예시한다.
[0008] 도 2a는 본 개시내용의 예들에 따른 예시적인 컴퓨터 시스템에서의 예시적인 데이터 흐름을 도시한다.
[0009] 도 2b는 본 개시내용의 예들에 따른 예시적인 컴퓨터 시스템에 대응하는 예시적인 렌더러(renderer) 출력을 도시한다.
[0010] 도 2c는 본 개시내용의 예들에 따라 다수의 독립적인 애플리케이션들을 포함하는 예시적인 컴퓨터 시스템에서의 예시적인 데이터 흐름을 도시한다.
[0011] 도 2d는 본 개시내용의 예들에 따라 다수의 독립적인 애플리케이션들을 포함하는 예시적인 컴퓨터 시스템에 대응하는 예시적인 렌더러 출력을 도시한다.
[0012] 도 3a는 본 개시내용의 예들에 따라, 중앙화된 장면그래프를 사용하여 다수의 독립적인 애플리케이션들로부터의 3D 데이터를 디스플레이로 렌더링할 수 있는 예시적인 컴퓨터 시스템의 컴포넌트들을 예시한다.
[0013] 도 3b는 본 개시내용의 예들에 따라 다수의 독립적인 클라이언트 애플리케이션들을 포함하는 예시적인 컴퓨터 시스템에 대한 예시적인 클라이언트 애플리케이션의 양상들을 예시한다.
[0014] 도 3c는 본 개시내용의 예들에 따라 다수의 독립적인 애플리케이션들을 포함하는 예시적인 컴퓨터 시스템에 대한 예시적인 클라이언트-서버 인터페이스의 양상들을 예시한다.
[0015] 도 3d는 본 개시내용의 예들에 따라 다수의 독립적인 클라이언트 애플리케이션들을 포함하는 예시적인 컴퓨터 시스템에 대한 예시적인 호스트 애플리케이션(340)의 양상들을 예시한다.
[0016] 도 3e는 본 개시내용의 예들에 따라 다수의 독립적인 애플리케이션들을 포함하는 예시적인 컴퓨터 시스템에 대한 예시적인 렌더러(360)의 양상들을 예시한다.
[0017] 도 4는 본 개시내용의 예들에 따라 임의의 휴대용 또는 비-휴대용 디바이스 내에 구체화될 수 있는 시스템 아키텍처의 예를 예시한다.
[0018] 예들의 다음의 설명에서, 설명의 일부를 형성하는 첨부한 도면들에 대한 참조가 행해지며, 도면들에서, 실시될 수 있는 특정한 예들이 예시로서 도시된다. 개시된 예들의 범위를 벗어나지 않으면서, 다른 예들이 사용될 수 있고 구조적인 변화들이 이루어질 수 있음을 이해할 것이다.
[0019] 도 1a 내지 도 1e는 디스플레이들을 갖는 다양한 예시적인 컴퓨터 시스템들을 예시한다. 도 1a는 외부 모니터에 연결된 예시적인 데스크톱 컴퓨터를 도시한다. 도 1b는 디스플레이를 포함하는 예시적인 랩톱을 도시한다. 도 1c는 통합된 디스플레이를 포함하는 예시적인 모바일 디바이스를 도시한다. 도 1d는 디스플레이를 포함하는 예시적인 텔레비전을 도시한다. 도 1e는 머리-장착 디스플레이를 포함하는 예시적인 컴퓨터 시스템을 도시한다. 본 개시내용은 임의의 특정 유형의 컴퓨터 시스템으로, 임의의 특정 유형의 디스플레이로, 또는 컴퓨터 시스템을 디스플레이에 연결하는 임의의 특정 수단으로 제한되지 않는다. 본 개시내용은 추가로, 2차원 디스플레이들로 제한되지 않고; 특히 3-차원 디스플레이들, 이를테면, 스테레오스코픽 디스플레이들이 고려된다.
[0020] 일부 예시적인 컴퓨터 시스템들에서, 디스플레이 상에 그래픽으로 제시될 데이터는, 3차원 공간에서 객체들(이를테면, 다각형들을 포함하는 2D 또는 3D 기하학적 프리미티브들)을 표현하는 데이터("3D 데이터")를 포함하고, 디스플레이 상에 3D 데이터를 제시하는 것은 뷰 축을 따라 배향된 뷰 원점으로부터 볼 때 3-차원 공간에서 객체들에 대응하는 이미지("렌더링된 장면")를 제시하는 것을 포함한다. 예컨대, 컴퓨터 시스템 상에서 실행되는 소프트웨어 애플리케이션(이를테면, 3D 엔진을 사용하는 비디오 게임)에서, 3D 데이터는 3-차원 게임 세계에서의 객체들의 공간 좌표들, 배향들 및/또는 시각적 성질들뿐만 아니라 게임 세계에서의 뷰 원점 및 뷰 축을 설명하는 데이터를 포함될 수 있다. 3D 데이터는 또한 렌더링될 객체들과 연관된 텍스처들, 객체들과 관련된 쉐이더(shader) 파라미터들, 및 객체들이 어떻게 디스플레이될 수 있는지에 영향을 미치는 다른 정보와 관련된 데이터를 포함할 수 있다. 게임은, 예컨대, "렌더링(render)" 또는 "드로우(draw)" 단계 동안, 디스플레이 상에 렌더링된 장면을 제시하도록 소프트웨어 및/또는 하드웨어 "파이프라인"에 지시할 수 있다. 이러한 예들에서, 결과적인 이미지가 시각적 세계에 대한 사용자의 예상들을 반영하는 것이 일반적으로 바람직하다. 특히, 뷰 원점에 더 근접한 제1 불투명 객체가 제1 객체 뒤의 제2 객체를 폐색하는 것이 일반적으로 바람직하다. 올바르게 폐색되지 않은 객체들은 사용자를 혼란스럽게 할 수 있고 객체들이 3차원-공간에 놓이는 곳을 명확하게 제시하지 않을 수 있다. 일부 예시적인 컴퓨터 시스템들에서, 폐색은 정렬을 통해 달성되며, 여기서 뷰 원점에 더 근접한 객체들이 뷰 원점으로부터 더 멀리있는 객체들 위에 정렬되거나 드로잉된다.
[0021] 하나의 객체가 현실성 있게 다른 객체를 폐색하도록 디스플레이 상에 제시하기 위해 다수의 객체들을 정렬하는 것은 객체들 사이의 관계들에 관한 정보(예컨대, 3-차원 공간에서 객체들 사이의 공간 관계들)를 요구한다. 일부 예시적인 컴퓨터 시스템들은 장면으로서, 렌더링될 객체들과 같은 하나 이상의 객체들 사이의 관계들(예컨대, 계층적 관계들)을 표현하는 장면그래프를 사용한다. 본원에서 사용된 바와 같은 장면그래프는 이러한 관계들을 표현하는 임의의 데이터 구조이다. 예컨대, 장면그래프에서, 렌더링될 객체들은 그래프에서 노드로서 표현될 수 있으며, 노드들 사이의 관계들은 객체들 사이의 논리적 또는 공간적 관계들을 표현한다. 그 후, 렌더러는 당업계에 알려진 기술들에 따라 장면그래프를 트래버싱(traverse)하여 적절한 폐색을 달성하는 방식으로 객체들을 디스플레이할 수 있다. 일부 예들에서, 장면그래프는 3D 데이터를 포함하는 애플리케이션과 그 3D 데이터를 스크린에 렌더링하기 위한 렌더러 사이에 위치된 중간 데이터 구조이며: 일부 예들에서, 애플리케이션은 장면 정보를 장면그래프에 기록하고, 장면그래프는 장면을 렌더링하기 위해 렌더러에 의해 추후에 사용될 수 있다.
[0022] 도 2a는 예시적인 컴퓨터 시스템(200)에서의 예시적인 데이터 흐름을 도시한다. 시스템(200)에서, 단일 애플리케이션(210)은 데이터를 장면그래프(240)에 기록할 수 있으며, 이를 사용하여 렌더러(250)가 객체들(220)을 디스플레이(290)에 렌더링할 수 있다. 예컨대, 객체들(220)은 인간의 두 손들인 손(232) 및 손(236)의 3D 표현을 함께 포함하는 다수의 객체들(예컨대, 다각형)을 포함할 수 있고; 애플리케이션은, 예컨대 렌더링 또는 드로우 단계 동안, 뷰 축을 따라 배향된 뷰 원점의 관점으로부터 디스플레이 상에 객체(220)가 렌더링하게 한다. 이 예에서, 손(232) 및 손(236)은 악수 시에 맞물려지고; 손들의 상대적인 포지셔닝으로 인해, 뷰어는 뷰 원점 및 뷰 축에 대해, 손(232)의 일부 부분들이 손(236)의 부분들을 폐색하고 손(236)을 포함하는 일부 다각형들이 손(232)의 부분들을 폐색할 것으로 예상한다. 애플리케이션(210)은 객체들(220) 사이의 관계들 이를테면, 객체들(220)을 포함하는 다각형들 사이의 공간 관계들을 설명하는 정보를 장면그래프(240)에 기록할 수 있으며, 이는 어떤 다각형들이 다른 다각형들을 폐색해야 하는지를(즉 어떤 다각형이 다른 다각형들 위에 디스플레이되도록 정렬되어야 하는지를) 식별하는 데 사용될 수 있다. 예컨대, 장면그래프(240)는 (손(232)에 속하는) 다각형(234)이 손(236)을 포함하는 다각형과 뷰 원점과 사이에 포지셔닝되고, 이에 따라 손(236)의 그러한 다각형들을 폐색해야 한다는 것을 반영할 수 있고; (손(236)에 속하는) 다각형(238)이 손(232)을 포함하는 다각형과 뷰 원점과 사이에 포지셔닝되고, 이에 따라 손(232)의 그러한 다각형들을 폐색해야 한다는 것을 반영할 수 있다. 렌더러(250)는 그 후 객체(220)를 원하는 폐색과 일치하게 디스플레이(290)로 렌더링할 수 있다.
[0023] 도 2b는 도 2a에 도시된 예시적인 컴퓨터 시스템(200)의 렌더러(250)의 예시적인 출력을 도시한다. 도 2a와 관련하여 위에서 설명된 예에서, 객체(220)의 상대적 포지션들에 기초하여, 뷰어는 손(236)을 폐색하는, 손(232)을 포함하는 일부 객체들(예컨대, 다각형(234))이 손(232)을 폐색하고, 일부 객체들(이를테면, 다각형(238))이 손(236)을 포함할 것을 예상한다. 도 2b에 도시된 예시적인 출력은 예상된 폐색들에 부합한다. 즉, 도 2a의 객체들(220)은 뷰어의 예상들에 부합하는 악수를 디스플레이(290) 상에 제시하도록 올바르게 디스플레이된다.
[0024] 도 2a 및 도 2b에 도시된 예시적인 컴퓨터 시스템(200)에서, 장면그래프(240)는 단일 애플리케이션 즉, 애플리케이션(210)에 의해서만 직접 기록된다. 그 후, 렌더러(250)는 장면그래프(240)를 트래버싱하여 적절히 폐색된 손(232) 및 손(236)을 렌더링한다. 예시적인 컴퓨터 시스템(200)과 같이 렌더링 프로세스의 부분으로서 장면그래프들을 사용하는 종래의 시스템들은 장면그래프(예컨대, 장면그래프(240))가 다수의 독립적인 애플리케이션들로부터 입력을 직접 수신할 때 객체들을 올바르게 폐색하지 않을 수 있다. 이러한 상황들에서, 예시적인 컴퓨터 시스템(200)과 달리, 디스플레이 상에 객체들을 올바르게 정렬하는 데 필요할 수 있는 모든 객체 관계 데이터를 장면그래프에 제공할 수 있는 단일 애플리케이션은 존재하지 않는다.
[0025] 도 2c는 2개의 독립적인 애플리케이션을 사용하는 예시적인 컴퓨터 시스템(201)에서의 예시적인 데이터 흐름을 도시하고, 위에서 설명된 폐색 문제를 예시한다. 위에서 설명된 예시적인 컴퓨터 시스템(200)과 달리, 예시적인 컴퓨터 시스템(201)은 2개의 독립적인 애플리케이션인 애플리케이션(212) 및 애플리케이션(214)을 포함한다. 예시적인 컴퓨터 시스템(201)에서, 애플리케이션(212) 및 애플리케이션(214) 둘 모두는 그 각각의 3D 데이터를 단일 디스플레이(290)로 렌더링하기 위해 장면그래프(240)에 데이터를 기록한다. 도 2c에서, 애플리케이션(212)은 (손(232)을 포함하는 객체들을 포함하는)객체들(222)을 렌더링하도록 시도하고, 애플리케이션(214)은 (손(236)을 포함하는 객체들을 포함하는)객체들(224)을 렌더링하도록 시도한다. 이 예에서, 도 2a 및 도 2b에 설명된 예에서와 같이, 손(232) 및 손(236)은 동일한 3D 환경에서 동시에 디스플레이되는 경우, 악수 시에 맞물릴 것이어서, 뷰어는 손(236)을 폐색하는 손(232)의 부분들 및 손(232)을 폐색하는 손(236)의 부분들을 예상하게 될 것이다.
[0026] 도 2c에 도시된 예는 렌더링될 객체들의 현실적인 폐색을 달성하는데 어려움을 가질 수 있다. 이 예에서, 애플리케이션(212)은 객체들(222)(손(232)을 포함함)에 대응하는 데이터를 장면그래프(240)에 기록할 수 있고, 애플리케이션(214)은 객체들(224)(손(236)을 포함함)에 대응하는 데이터를 동일한 장면그래프(240)에 기록할 수 있다. 그러나, 예시적인 컴퓨터 시스템(201)에서, 애플리케이션(212) 및 애플리케이션(214)이 독립적인("샌드박스화된") 애플리케이션들인 경우, 애플리케이션(212)은 애플리케이션(214)의 객체들(224)(손(236) 및 그 구성 객체들을 포함함)에 관련된 데이터에 액세스할 수 없고, 마찬가지로 애플리케이션(214)은 애플리케이션(212)의 객체들(222)(손(232) 및 그 구성 객체들을 포함함)에 관련된 데이터에 액세스할 수 없다. 즉, 일부 예들에서, 애플리케이션(212) 및 애플리케이션(214) 어느 것도 객체들(222)과 객체들(224) 사이의 관계들을 완전히 식별할 수 없다. 따라서, 애플리케이션(212) 및 애플리케이션(214) 어느 것도, 어느 객체들이 다른 객체들을 폐색하는지 또는 객체들이 디스플레이 상에서 어떤 순서로 정렬되어야 햐는지 식별하는 데 필요할 수 있는 정보를 장면그래프(240)에 기록할 수 없다.
[0027] 도 2d는 도 2c에 도시된 예시적인 컴퓨터 시스템(201)의 렌더러(250)의 예시적인 출력을 도시한다. 도 2c와 관련하여 위에서 설명된 예에서, 객체들(222) 및 객체들(224)의 상대적 포지셔닝에 기초하여, 뷰어는 손(232)의 일부 부분들이 손(236)을 폐색하고 손(236)의 일부 부분들이 손(232)을 폐색할 것으로 예상한다. 그러나, 도 2a 및 도 2b와 달리, 도 2c의 장면그래프(240)는 위에서 설명된 바와 같이 원하는 폐색들을 생성하기 위해 객체들(222 및 224)을 올바르게 정렬시킬 수 없다. 대신, 도시된 예에서, 모든 객체들(222)이 모든 객체들(224) 위로 정렬된다. 따라서, 도 2d에 도시된 예시적인 출력은 예상된 폐색들에 부합하지 않는다. 이에 따라, 결과적인 악수 이미지는 애플리케이션(212) 및 애플리케이션(214)의 객체들을 정확하게 반영하지 않으며; 이미지가 부가적으로 부자연스럽게 보일 수 있고 뷰어를 혼란스럽게 할 수 있다.
[0028] 예시적인 컴퓨터 시스템(201)과 같은 다수의 독립적인 애플리케이션들과 함께 사용될 때, 도 2a 내지 도 2d의 장면그래프(240)와 같은 종래의 장면그래프들의 다른 단점들은 명백하다. 예컨대, 렌더링 효율들은 도 2a의 애플리케이션(210)에서와 같이 렌더링될 전체 장면에 대응하는 데이터를 사용하여 실현될 수 있다. 예컨대, 어느 표면들이 폐색될지를 알게 됨으로써, 도 2a의 예시적인 컴퓨터 시스템(200)은 시스템(200)에게 이들 표면을 컬링하도록 지시하고, 그리하여 컴퓨팅 자원들의 불필요한 지출을 회피할 수 있다. 이러한 컬링은, 어느 표면들이 컬링되어야 하는지 결정하기 위한 장면 지식을 각각의 애플리케이션이 갖지 않을 수 있기 때문에, 도 2c의 예시적인 컴퓨터 시스템(201)과 같은 다중-애플리케이션 시스템들에서 가능하지 않을 수 있다. 또한, 예시적인 컴퓨터 시스템(200)과 같은 단일 애플리케이션만을 수반하는 일부 예들에서, 유익한 효과들은 장면 내의 다른 객체들의 존재에 기초하여 객체들에 적용될 수 있다. 예컨대, 현실적인 조명 및 그림자 효과들을 객체에 적용하는 것은 근처의 객체들에 대응하는 데이터를 요구할 수 있다. 또한, 일부 쉐이더 효과들은 이러한 데이터로부터 이익을 얻을 수 있다. 유사하게, 입자 시스템들 또는 충돌 검출 시스템들에 의해 생성된 효과들이 그러한 데이터로부터 이익을 얻을 수 있다. 어떠한 단일 애플리케이션도 그러한 효과들을 적용하는 데 필요한 모든 노드 관계 정보를 제공할 수 없기 때문에, 3D 데이터가 다수의 독립적인 애플리케이션들에 의해 제공되는 시스템들에서 이러한 효과들은 제한되거나 불가능할 수 있다.
[0029] 본 개시내용은, 다수의 독립적인 애플리케이션들로부터의 3D 데이터를 렌더링하는 시스템의 위의 단점들을 해결하도록 중앙화된 장면그래프를 사용하는 시스템들 및 방법들을 제시한다. 다수의 독립적인 애플리케이션들이 렌더링될 3D 데이터를 제공하는 시스템들(이를테면, 도 2c의 예시적인 컴퓨터 시스템(201))에서 도 2c의 장면그래프(240)와 같은 종래의 장면그래프 대신, 중앙화된 장면그래프가 사용될 수 있다. 본원에서 설명된 바와 같이, 일부 예들에서, 중앙화된 장면그래프는 다수의 개별 입력 소스들로부터 3D 데이터를 수신하고; 그 3D 데이터에 대응하는 정보를 중앙 위치에 기록하고; 그리고 그 3D 데이터에 기초하여 이미지를 렌더링하는 렌더러에 의한 액세스를 위해 그 정보를 유지하는 시스템을 포함할 수 있다. 그 그래픽 출력은 현실적인 객체 폐색; 컴퓨테이셔널 효율들; 시각적 효과들(이를테면, 조명 및 쉐도우캐스팅); 또는 물리적 효과들(이를테면, 충돌 검출)을 반영할 수 있으며, 이는 보통은, 중앙화된 장면그래프를 활용하지 않는 시스템에서 실현하는 것이 어렵거나 불가능했을 것이다.
[0030] 일부 예들에서, 예시적인 컴퓨터 시스템은 공통 3D 환경에서 하나 이상의 객체들을 표현하는 3D 데이터를 각각 포함하는 복수의 애플리케이션들을 포함한다. 복수의 애플리케이션들 각각은 "샌드박스화된" 환경에서 존재할 수 있어서, 그것은 다른 애플리케이션들에 불가지론적인 채로 유지될 수 있는데; 예컨대, 각각의 개별 애플리케이션의 데이터는 각각의 다른 애플리케이션의 데이터와 독립적일 수 있고; 각각의 애플리케이션은 각각의 다른 애플리케이션의 데이터에 대한 액세스를 갖지 않을 수 있고; 애플리케이션들 각각의 3D 데이터는 동일한 3D 환경에 대응할 수 있지만, 각각의 애플리케이션은 3D 환경의 그 자신의 인스턴스를 유지한다. 예컨대, 각각의 애플리케이션은 온라인 멀티플레이어 비디오 게임에서 플레이어를 표현할 수 있으며, 여기서 각각의 플레이어는 동일한 게임 세계 또는 3D 환경의 인스턴스에 존재하지만, 다른 플레이어들의 데이터에 직접 액세스하진 못한다. 이러한 예들에서 모든 플레이어들이 게임 세계의 단일 인스턴스에서 동시에 렌더링되는 것이 바람직할 수 있지만, 각각의 플레이어가 각각의 다른 클라이언트 참가자의 3D 데이터를 렌더링하는 데 필요한 정보를 유지하는 것은 바람직하지 않을 수 있다(또는 컴퓨테이셔널적으로 지나치게 비쌈). 또한, 보안 목적으로 다른 플레이어가 이용 가능한 플레이어의 정보를 제한하는 것이 바람직할 수 있다.
[0031] 일부 예들에서, 복수의 샌드박스화된 애플리케이션들 각각은 자신의 3D 데이터에 대응하는 정보를 로컬 장면그래프에 독립적으로 기록할 수 있으며, 이 정보는 추후에 공통 중앙화된 장면그래프에 기록된다. 중앙화된 장면그래프는 그 후 렌더러에 의해 트래버싱되어 각각의 애플리케이션에 의해 제공된 집합적인 3D 데이터에 기초하여 이미지를 디스플레이에 렌더링할 수 있다. 복수의 샌드박스화된 애플리케이션들 각각으로부터 단일의 중앙화된 장면그래프로 3D 데이터를 통신함으로써, 렌더러는 폐색, 조명 효과들, 및 모든 애플리케이션들의 3D 데이터의 동시성 지식을 요구하거나 이로부터 이익을 얻는 렌더링 최적화(이를테면, 표면 컬링)와 같은 유익한 기술들을 적용할 수 있다. 이러한 이익들은 각각의 샌드박스화된 애플리케이션에 필요한 컴퓨테이셔널 오버헤드를 제한하면서 실현되고; 단일 애플리케이션의 관점에서, 애플리케이션이 해야 할 일은 그의 3D 데이터를 반영하도록 단일 장면그래프를 업데이트하는 것이 전부이며, 다른 동작들은 시스템의 다른 컴포넌트에 의해 수행된다. 추가로, 샌드박스화된 애플리케이션들 간에 분리를 유지함으로써 보안 이익들이 획득될 수 있다.
[0032] 도 3a는 중앙화된 장면그래프를 사용하여 다수의 독립적인 애플리케이션들로부터의 3D 데이터를 디스플레이로 렌더링할 수 있는 예시적인 컴퓨터 시스템(300)의 컴포넌트들을 예시한다. 예시된 예는 클라이언트-서버 토폴로지를 활용하지만; 본 개시내용은 클라이언트-서버 예들로 제한되지 않는다. 예시적인 컴퓨터 시스템(300)에서, 제1 클라이언트 애플리케이션(310) 및 제2 클라이언트 애플리케이션(320)은 각각 3D 데이터를 (일부 예들에서, 네트워크를 통해) 클라이언트-서버 인터페이스(330)로 통신한다. 일부 예들에서, 클라이언트 애플리케이션들(310 및 320)은, 서로 독립적으로 동작하고 그들의 3D 데이터를 클라이언트-서버 인터페이스(330)에 독립적으로 통신하는 "샌드박스화된" 애플리케이션들이다. 클라이언트-서버 인터페이스(330)는 클라이언트 애플리케이션들(310 및 320)로부터 업데이트된 3D 데이터를 수신하고 그 3D 데이터를 (일부 예들에서, 네트워크를 통해) 서버-측 호스트 애플리케이션(340)에 통신할 수 있다. 일부 예들에서, 클라이언트-서버 인터페이스(330)는 3D 데이터를 수신하고, 프로세싱하고 그리고/또는 다수의 프로세서 스레드들을 사용하여 호스트 애플리케이션(340)에 통신하도록 멀티스레딩 기술들을 사용한다. 일부 예들에서, 클라이언트-서버 인터페이스는 3D 데이터가 호스트 애플리케이션(340)에 통신되는 레이트를 (이를테면, 스로틀링(throttling)에 의해) 제어하기 위한 로직을 포함한다. 호스트 애플리케이션(340)은 클라이언트-서버 인터페이스로부터 수신된 3D 데이터를 사용하여 중앙화된 장면그래프(350)를 업데이트하여서, 중앙화된 장면그래프(350)가 클라이언트 애플리케이션들(310 및 320)로부터 수신된 3D 데이터를 반영할 수 있게 한다. 일부 예들에서, 중앙화된 장면그래프(350)는 다수의 버전들의 장면그래프들을 포함하고, 중앙화된 장면그래프(350)에 대한 업데이트들이 병렬로 발생할 수 있도록 하기 위해 알려진 버전화 기술(versioning technique)들이 사용된다. 렌더러(360)는 그 후, 중앙화된 장면그래프(350)를 트래버싱하고, 최적화 및 효과들을 적절히 적용하고, 컴퓨터 모니터와 같은 디스플레이(370) 상에 디스플레이될 그래픽 출력을 생성할 수 있다.
[0033] 도 3b는 도 3a에 도시된 예시적인 컴퓨터 시스템(300)에 대한 예시적인 클라이언트 애플리케이션(310)의 양상들을 예시한다. 도시된 예에서, 3D 데이터(312)는 3D 환경에서, 디스플레이(370) 상에 드로잉될 그래픽 객체들(이를테면, 기하학적 프리미티브 이를테면, 다각형들)을 표현한다. 3D 데이터(312)는 클라이언트 애플리케이션(310)에 의해 업데이트(314)될 수 있다. 예컨대, 클라이언트 애플리케이션(310)이 초당 60회 반복되는 렌더링 루프를 갖는 애플리케이션인 경우, 클라이언트 애플리케이션(310)은 애플리케이션의 동작 과정 동안, 렌더링 출력에 반영되어야 하는 그 데이터에서의 변화들을 반영하기 위해 초당 60회 3D 데이터(312)를 업데이트할 수 있다. 일부 예들에서, 3D 데이터(312)는 각각의 클라이언트 애플리케이션(310)에 대해 로컬일 수 있는 로컬 장면그래프(316)로서 표현된다. 일부 예들에서, 로컬 장면그래프(316)는 중앙화된 장면그래프(350) 내의 데이터에 대응하는 데이터(이를테면, 노드들)를 포함할 수 있다. 3D 데이터(312)가 업데이트됨에 따라(314), 클라이언트 애플리케이션(310)은 가장 최신 버전의 3D 데이터(312)를 반영하기 위해 로컬 장면그래프(316)를 업데이트할 수 있다. 로컬 장면그래프(316)가 업데이트됨에 따라, 그것은 클라이언트 데이터(318)를 생성(317)하기 위해 클라이언트 애플리케이션(310)에 의해 사용될 수 있다. 일부 예들에서, 클라이언트 데이터(318)는 그 전체가 로컬 장면그래프(316)를 표현할 수 있다. 일부 예들에서, 클라이언트 데이터(318)는 이전 클라이언트 데이터(318)가 클라이언트-서버 인터페이스(330)에 전송된 이후 로컬 장면그래프(316)에 대해 이루어진 변화들을 표현할 수 있다. 예컨대, 클라이언트 데이터(318)는 로컬 장면그래프(316)에 추가되거나 이로부터 삭제된 노드들; 로컬 장면그래프(316) 내의 노드들 사이의 관계들에 대한 변화들; 또는 로컬 장면그래프(316) 내의 노드들의 성질들에 대한 변화들을 포함할 수 있다. 일부 예들에서, 클라이언트 데이터(318)는 로컬 장면그래프(316)로부터의 데이터와 중앙화된 장면그래프(350) 상의 대응하는 데이터 사이의 관계들을 식별하기 위해 장면그래프 노드들에 대응하는 식별 번호들과 같은 식별자들을 사용할 수 있다. 그 후, 클라이언트 데이터(318)는 호스트 애플리케이션(340)으로의 궁극적인 통신을 위해 클라이언트-서버 인터페이스(330)에 통신될 수 있다. 일부 예들에서, 클라이언트-서버 인터페이스(330)로의 클라이언트 데이터(318)의 통신은 네트워크를 통해 발생할 수 있다. 일부 예들에서, 클라이언트 헬퍼(client helper) 애플리케이션은 로컬 장면그래프(316)로부터 또는 3D 데이터(312)로부터 클라이언트 데이터(318)를 생성하기 위해 클라이언트 애플리케이션(310)과 함께 사용될 수 있다.
[0034] 클라이언트 애플리케이션(310)과 관련하여 설명된 양상들은 클라이언트 애플리케이션(320), 또는 (클라이언트 애플리케이션(310)과 함께) 예시적인 컴퓨터 시스템(300)을 포함하는 다른 클라이언트 애플리케이션들을 유사하게 설명할 수 있다. 본원에서 설명된 시스템들 및 방법들은, 임의의 수의 클라이언트 애플리케이션들 및 클라이언트 데이터를 포함하도록 연장될 수 있으며, 본 개시내용은 임의의 이러한 수로 제한되지 않으며; 추가로, 일부 이익들(예컨대, 컴퓨테이셔널 효율 면에서의 개선들)은 클라이언트 애플리케이션의 수가 증가함에 따라 보다 명백해질 수 있는 것이 당업자들에 의해 인지될 것이다. 위에서 설명된 바와 같이, 클라이언트 애플리케이션들(310 및 320)은 데이터 또는 기능성을 공유하지 않는 샌드박스화된 애플리케이션들일 수 있다. 예컨대, 예시적인 컴퓨터 시스템(300)에서, 클라이언트 애플리케이션(320)은 클라이언트 애플리케이션(310)에 속하는 3D 데이터(312) 및 로컬 장면그래프(316)와 독립적으로, 그 자신의 3D 데이터 및 로컬 장면그래프를 가질 수 있다. 그러나, 예시적인 컴퓨터 시스템(300)을 포함하는 일부 예들에서, 단일 클라이언트-서버 인터페이스(300)는 클라이언트 애플리케이션들(310 및 320)과 같은 다수의 클라이언트 애플리케이션들에 의해 공유된다.
[0035] 도 3c는 도 3a 및 도 3b에 도시된 예시적인 컴퓨터 시스템(300)에 대한 예시적인 클라이언트-서버 인터페이스(330)의 양상들을 예시한다. 이 예에서, 클라이언트 데이터(318) 및 클라이언트 데이터(328)는 도 3b와 관련하여 위에서 설명된 바와 같이 각각의 클라이언트 애플리케이션들(310 및 320)에 통신되거나 이들에 의해 업데이트되는 클라이언트 데이터이다. 일부 예들에서, 클라이언트 데이터(318 및 328)는 상이한 레이트들로 클라이언트-서버 인터페이스(330) 상에서 업데이트될 수 있다. 이는, 예컨대, 하나의 클라이언트 애플리케이션이 다른 클라이언트 애플리케이션보다 더 낮은 성능의 컴퓨팅 하드웨어 상에서 실행되는 경우(그 클라이언트 애플리케이션이 그의 클라이언트 데이터를 덜 빈번하게 업데이트하게 함); 하나의 클라이언트 애플리케이션이 다른 클라이언트 애플리케이션보다 더 낮은-대역폭 네트워크를 통해 클라이언트-서버 인터페이스(330)와 통신하는 경우; 또는 하나의 클라이언트 애플리케이션과 연관된 클라이언트 데이터가 다른 클라이언트 애플리케이션과 연관된 클라이언트 데이터보다 더 복잡(그리고 생성하는 데 더 많은 프로세싱 시간을 요구)한 경우, 발생할 수 있다. 클라이언트-서버 인터페이스(330) 상에서 클라이언트 데이터를 업데이트하는 상이한 레이트들은 또한, 이를테면, 네트워크 정지가 클라이언트 애플리케이션으로 하여금 일시적으로 오프라인이 되게 하는 경우 동작 조건들에서 일시적인 스파이크들의 결과일 수 있다. 예컨대, 컴퓨터 시스템(300)은 클라이언트 데이터를 업데이트하는 상이한 레이트들을 용인하는 것이 바람직한데; 예컨대, 하나의 클라이언트 애플리케이션에 영향을 미치는 네트워크 정지는, 다른 클라이언트 애플리케이션들로부터의 클라이언트 데이터를 사용하여 중앙화된 장면그래프(350)를 업데이트하는 레이트 또는 장면들이 렌더링되는 레이트에 부정적으로 영향을 미치지 않는 것이 바람직할 수 있다. 또한, 중앙화된 장면그래프(350)를 업데이트할 때, 하나의 클라이언트 애플리케이션으로부터의 클라이언트 데이터가 다른 클라이언트 애플리케이션으로부터의 클라이언트 데이터보다 너무 많이 뒤로 뒤처지거나 너무 많이 앞서지 않도록 보장하는 것이 바람직할 수 있는데, 그 이유는, 그것이 클라이언트 애플리케이션들과 관련하여 중앙화된 장면그래프 또는 렌더링된 디스플레이의 탈안정화 또는 탈동기화를 초래할 수 있기 때문이다.
[0036] 일부 예들에서, 클라이언트-서버 인터페이스(330)의 역할은 클라이언트 데이터를 업데이트하는 레이트들에서의 차이들 또는 등락들을 처리하는 것이다. 도 3c를 참조하면, 예시적인 클라이언트-서버 인터페이스(330)는 각각, 독립적인 프로세싱 스레드들(332 및 334)을 통해 클라이언트 데이터(318 및 328)를 수신할 수 있고, 스레드들을 처리하기 위한 스레드 관리자(336)를 포함할 수 있다. 상이한 소스들 이를테면, 클라이언트 애플리케이션(310) 및 클라이언트 애플리케이션(320)으로부터의 클라이언트 데이터를 업데이트하기 위해 다수의 스레드들을 활용하는 것은, 하나의 소스가 다른 소스로부터들의 데이터를 차단하거나, 달리 부정적인 영향을 미치지는 문제들을 방지할 수 있다. 도시된 예에서, 스레드 관리자(336)는 스레드들(332 및 334)을 사용하여 클라이언트 애플리케이션들(310 및 320)로부터의 클라이언트 데이터(318 및 328)를 각각 입력받고, (클라이언트 데이터(318 및 328), 클라이언트 애플리케이션들(310 및 320), 및 스레드들(332 및 334)에 각각 대응하는) 호스트 데이터(319 및 329)를 호스트 애플리케이션(340)에 출력할 수 있다. 스레드 관리자(336)는 호스트 데이터(319 및 329)의 출력을 제어하고 그리고/또는 스레드들(332 및 334)과 관련된 쓰루풋 문제들 또는 다른 문제들을 식별 및 해결하기 위해 스레드들(332 및 334)을 프로세싱하기 위한 로직을 포함할 수 있다. 예컨대, 클라이언트 데이터(318) 및 클라이언트 데이터(328)가 대략 동일한 레이트로 (각각 스레드들(332 및 334)을 통해) 업데이트되는 경우, 스레드 관리자(336)는 대략 동일한 레이트들로 (클라이언트 데이터(318 및 319) 각각에 대응하는) 호스트 데이터(319 및 329)를 단순히 업데이트할 수 있다. 그러나, 클라이언트 데이터(318)가 클라이언트 데이터(328)보다 훨씬 더 빠른 레이트로 업데이트되는 경우, 스레드 관리자(336)는 클라이언트 데이터(318)가 클라이언트 데이터(328)를 너무 앞지르는 것을 방지하기 위해 클라이언트 데이터(318)를 (예컨대, 이를 호스트 애플리케이션(340)에 덜 빈번하게 통신함으로써) 쓰로틀링할 수 있다. 스레드 관리자(336)는 또한, 호스트 데이터가 업데이트되는 전체 레이트들을 제어할 수 있다. 예컨대, 스레드 관리자(336)는 호스트 데이터(319 및/또는 329)의 업데이트 레이트를 쓰로틀링하여 호스트 애플리케이션(340)이 이 호스트 데이터를 프로세싱할 수 있는 것보다 빠르게 그것이 업데이트되는 것(이는 클라이언트 애플리케이션들(310 및/또는 320), 중앙화된 장면그래프(350) 및/또는 디스플레이(370)에 대한 출력의 바람직하지 않은 탈동기화를 초래할 수 있음)을 방지할 수 있다.
[0037] 도 3d는 도 3a 내지 도 3c에 도시된 예시적인 컴퓨터 시스템(300)에 대한 예시적인 호스트 애플리케이션(340)의 양상들을 예시한다. 호스트 애플리케이션(340) 내의 스레드(341) 내에서 실행되는 동작들이 본원에서 설명되며, 여기서 스레드(341)는 호스트 애플리케이션(340) 내의 부가적인 스레드들과 동시에 실행될 수 있다. 일부 예들에서, 호스트 애플리케이션(340) 내의 멀티스레딩 프로세싱은 다수의 클라이언트 애플리케이션들 또는 호스트 데이터의 다수의 세트들이 동일한 중앙화된 장면그래프(350)를 (일부 예들에서, 상이한 버전들의 중앙화된 장면그래프를 업데이트함으로써) 동시에 업데이트할 수 있게 하는 이점을 가질 수 있다. 이는 결국, 렌더링된 디스플레이에 대한 클라이언트 데이터의 전체 쓰루풋을 증가시킬 수 있다. 일부 예들에서, 멀티스레딩은 예컨대, 스레드들이 동일한 데이터에 실수로 기록하는 것을 방지하도록 잠금(lock)들이 중앙화된 장면그래프 데이터에 대해 설정될 것을 요구할 수 있다. 그러나, 일부 예들에서, 설명된 동작들 중 하나 이상이 스레드 내에서 실행되지 않을 수 있다.
[0038] 도 3d에 도시된 예에서, (클라이언트 애플리케이션(310) 및 클라이언트 데이터(318)에 대응하는) 호스트 데이터(319)가 도 3c와 관련하여 위에서 설명된 바와 같이 업데이트된다(342). 그 후, 호스트 애플리케이션(340)은 호스트 데이터(319)가 이전 버전의 중앙화된 장면그래프(350)에 가할 수 있는 변화들을 식별할 수 있다. 예컨대, 호스트 애플리케이션(340)은 중앙화된 장면그래프(350)와 관련하여, 호스트 데이터(319)가 노드를 추가하거나, 노드를 삭제하거나, 두 노드들 사이의 관계를 변경하거나, 또는 노드의 속성을 변경할 것임을 식별할 수 있다(도 3d에 도시된 예들과 같은 일부 예들에서, 호스트 애플리케이션(340)은 호스트 데이터 핸들러(344)를 사용하여 이들 동작들 또는 다른 것들을 수행할 수 있음). 호스트 애플리케이션(340)은 호스트 데이터(319)에 따라 생성되거나 업데이트될 중앙화된 장면그래프(350)의 버전(352)을 식별할 수 있다. 일부 예들에서, 중앙화된 장면그래프(350)의 버전(352)에 기록하기에 앞서, 호스트 애플리케이션(340)은 다른 프로세스들이 그 버전을 동시에 수정하는 것을 방지하기 위해 그 버전을 잠금설정(lock)할 수 있다. 호스트 애플리케이션(340)은 (예컨대, 호스트 데이터(319)에 대응하는 버전(352)에 장면그래프 노드들을 추가하거나 거기서 삭제함으로써) 호스트 데이터(319)를 반영하도록 버전(352)에 대해 변화들을 가할 수 있다. 일부 예들에서, 호스트 애플리케이션(340)은 그 후, 버전(352)을 잠금해제하고, 버전(352)에 대응하는 버전 번호의 값(356)을 업데이트할 수 있다. 그 후, 호스트 애플리케이션(340)은 호스트 데이터를 업데이트하고(342), 도 3d에 도시된 프로세스를 반복할 수 있다. 중앙화된 장면그래프(350)가 개별 클라이언트 애플리케이션들로부터 유도된 개별 호스트 데이터를 반영하도록 업데이트됨에 따라, 중앙화된 장면그래프(350)는, 개별 클라이언트 애플리케이션들이 "샌드박스화"되고 서로 독립적일 수 있을지라도 다수의 클라이언트 애플리케이션들로부터의 집합적인 호스트 데이터를 반영할 것이다.
[0039] 도 3e는 도 3a 내지 도 3d에 도시된 예시적인 컴퓨터 시스템(300)에 대한 예시적인 렌더러(360)의 양상들을 예시한다. 일부 예들에서, 렌더러(360)는 호스트 애플리케이션(340)의 부분을 포함한다. 일부 예들에서, 렌더러(360)는 예시적인 컴퓨터 시스템(300)의 다른 컴포넌트의 부분일 수 있거나 별개의 컴포넌트 또는 애플리케이션일 수 있다. 일부 예들에서, 렌더러(360)는 예시적인 컴퓨터 시스템(300)의 하나 이상의 컴포넌트들과 상이한 물리적 하드웨어로 구현될 수 있고, 네트워크를 통해 이들 컴포넌트들 중 하나 이상과 통신할 수 있다.
[0040] 도 3e에 도시된 예에서, 렌더러(360)는 중앙화된 장면그래프(350)의 버전(352) 상에서 동작한다. 이 예에서, 렌더러의 역할은 중앙화된 장면그래프(350)의 버전(352)에 기초하여 디스플레이(370)에 그래픽 출력을 렌더링하는 것이다. 이 프로세스의 부분으로서, 렌더러(360)는 알려진 장면그래프 트래버설 기술들을 사용하여 버전(352)을 트래버싱(362)할 수 있다. 트래버설(362) 동안 또는 그 후에, 렌더러(360)는 트래버설의 결과들을 반영하기 위해 중앙화된 장면그래프(350)를 적절하게 업데이트(364)할 수 있다. 예컨대, 트래버설(362)의 부분으로서, 렌더러(360)는 중앙화된 장면그래프(350)로부터 삭제되어야 하는 고립된 노드(orphaned node)들을 식별할 수 있다. 트래버설(362) 및/또는 업데이트(364)에 이어, 렌더러(360)는 다양한 최적화들을 장면에 적용(366)할 수 있다. 예컨대, 렌더러(360)는 불필요한 컴퓨테이셔널 자원들을 소비하는 것을 회피하기 위해, 가려지거나 보이지 않는 표면들을 컬링할 수 있다. 트래버설(362) 및/또는 업데이트(364)에 이어, 렌더러(360)는 하나 이상의 시각적 효과들을 장면에 적용(367)할 수 있다. 예컨대, 일부 예들에서, 렌더러(360)는 조명 효과들 또는 그림자 효과들을 적용하고; 하나 이상의 쉐이더들을 적용하고; 입자 효과들을 적용하고; 그리고/또는 물리적 효과들을 적용할 수 있다. 마지막으로, 렌더러(360)는 데이터를 그래픽 출력 파이프라인으로 출력할 수 있으며, 그 결과, 디스플레이(370) 상에 그래픽 출력을 디스플레이할 수 있다.
[0041] 컴퓨터 시스템의 위의 예시적인 프로세스들은 임의의 적합한 로직 회로에 의해 제공될 수 있다. 적합한 로직 회로는 소프트웨어 프로그램으로 구현된 명령들을 실행할 때, 프로세스들을 수행하는 하나 이상의 컴퓨터 프로세서들(예컨대, CPU, GPU 등)을 포함할 수 있다. 부가적으로, 이러한 프로세스들은 또한, 프로세스들을 제공하는 로직 설계들을 구현하는 프로그래밍 가능 로직(예컨대, PLD, FPGA 등) 또는 커스터마이징된 로직(예컨대, ASIC 등)과 같은 하드웨어 로직 회로에서 구현되는 대응하는 로직 설계를 통해 제공될 수 있다. 또한, 이러한 프로세스들은 하드웨어 로직 회로 및 소프트웨어를 실행하는 하나 이상의 프로세서들 둘 모두를 결합하는 구현을 통해 제공될 수 있다.
[0042] 도 4는 위의 예들 중 임의의 것 또는 전부를 구현하는 데 사용될 수 있는 예시적인 시스템(400)을 예시한다. 위의 예들(전체 또는 일부)은 임의의 휴대용 디바이스(웨어러블 디바이스를 포함함) 또는 비-휴대용 디바이스, 예컨대 통신 디바이스(예컨대, 모바일 폰, 스마트 폰), 멀티미디어 디바이스(예컨대, MP3 플레이어, TV, 라디오), 휴대용 또는 핸드헬드 컴퓨터(예컨대, 태블릿, 넷북, 랩톱), 데스크톱 컴퓨터, 올인원 데스크톱, 주변 디바이스, 머리-장착 디바이스(이는 예컨대, 통합된 디스플레이를 포함할 수 있음), 또는 이러한 유형들의 디바이스들 중 둘 이상의 조합들을 포함하는, 예시적인 시스템 아키텍처(400)를 포함하도록 적응 가능한 임의의 다른 시스템 또는 디바이스 내에서 구체화될 수 있다. 위의 예들은 무선 네트워크를 통해 통신하는 둘 이상의 컴퓨터들과 같은 둘 이상의 물리적으로 별개의 디바이스들로 구체화될 수 있다. 위의 예들은, 머리-장착 디스플레이로 그리고/또는 이로부터의 데이터를 통신하는 벨트 팩과 같은 둘 이상의 물리적으로 상이한 디바이스들로 구체화될 수 있다. 도 4는 일반적으로 하나 이상의 컴퓨터-판독 가능 매체들(401), 프로세싱 시스템(404), I/O 서브시스템(406), RF(radio frequency) 회로(408), 오디오 회로(410), 및 센서 회로(411)를 포함하는 시스템(400)의 일 예의 블록도이다. 이들 컴포넌트들은 하나 이상의 통신 버스들 또는 신호 라인들(403)에 의해 커플링될 수 있다.
[0043] 도 4에 도시된 아키텍처는 시스템(400)의 하나의 예시적인 아키텍처일 뿐이며, 시스템(400)은 도시된 것보다 더 많거나 적은 컴포넌트들, 또는 컴포넌트들의 상이한 구성을 가질 수 있다는 것이 명백해야 한다. 도 4에 도시된 다양한 컴포넌트들은 하나 이상의 신호 프로세싱 및/또는 주문형 집적 회로를 포함하여, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 임의의 조합으로 구현될 수 있다.
[0044] 도 4의 예시적인 시스템 아키텍처(400)를 참조하면, RF 회로(408)는 무선 링크 또는 네트워크를 통해 정보를 하나 이상의 다른 디바이스들에 전송하고 및 이들로부터 수신하는 데 사용될 수 있으며, 이 기능을 수행하기 위한 잘 알려진 회로를 포함한다. RF 회로(408) 및 오디오 회로(410)는 주변장치 인터페이스(416)를 통해 프로세싱 시스템(404)에 커플링될 수 있다. 인터페이스(416)는 주변장치들과 프로세싱 시스템(404) 사이의 통신을 설정 및 유지하기 위한 다양한 알려진 컴포넌트들을 포함할 수 있다. 오디오 회로(410)는 오디오 스피커(450) 및 마이크로폰(452)에 커플링될 수 있고, 사용자가 다른 사용자들과 실시간으로 통신하는 것을 가능하게 하도록 인터페이스(416)로부터 수신된 음성 신호들을 프로세싱하기 위한 알려진 회로를 포함할 수 있다. 일부 예들에서, 오디오 회로(410)는 헤드폰 잭(도시되지 않음)을 포함할 수 있다.
[0045] 센서 회로(411)는 하나 이상의 LED(light emitting diode)들 또는 다른 광 이미터들, 하나 이상의 포토다이오드들 또는 다른 광 센서들, 하나 이상의 광열 센서들, 자력계, 가속도계, 자이로스코프, 기압계, 컴퍼스, 근접도 센서, 카메라, 주변 광 센서, 온도계, GPS 센서, EOG(electrooculography) 센서, 및 잔여 배터리 수명, 전력 소비, 프로세서 속도, CPU 부하 등을 감지할 수 있는 다양한 시스템 센서들을 포함(그러나 이에 제한되지 않음)하는 다양한 센서들에 커플링될 수 있다. 이를테면, 머리-장착 디바이스를 수반하는 예들에서, 하나 이상의 센서들은 사용자의 눈과 관련된 기능성 이를테면, 사용자의 눈 움직임을 추적하거나 사용자의 눈의 이미지에 기초하여 사용자를 식별하는 것과 관련하여 사용될 수 있다.
[0046] 주변장치 인터페이스(416)는 시스템의 입력 및 출력 주변장치들을 프로세서(418) 및 컴퓨터-판독 가능 매체(401)에 커플링할 수 있다. 하나 이상의 프로세서들(418)은 제어기(44)를 통해 하나 이상의 컴퓨터-판독 가능 매체들(401)과 통신할 수 있다. 컴퓨터-판독 가능 매체(401)는 하나 이상의 프로세서들(418)에 의한 사용을 위한 코드 및/또는 데이터를 저장할 수 있는 임의의 디바이스 또는 매체(신호들은 제외함)일 수 있다. 일부 예들에서, 매체(401)는 비-일시적 컴퓨터-판독 가능 저장 매체일 수 있다. 매체(401)는 캐시, 메인 메모리 및 보조 메모리를 포함(그러나 이에 제한되지 않음)하는 메모리 계층을 포함할 수 있다. 메모리 계층은 RAM(예컨대, SRAM, DRAM, DDRAM), ROM, FLASH, 자기 및/또는 광학 저장 디바이스 이를테면, 디스크 드라이브들, 자기 테이프, CD(compact disk)들 및 DVD(digital video disc)들의 임의의 조합을 사용하여 구현될 수 있다. 매체(401)는 또한, 컴퓨터 명령들 또는 데이터를 나타내는 정보-보유 신호들을 반송(carry)하기 위한 송신 매체를 포함할 수 있다(그러나 신호들을 배제하고 신호들이 변조되는 반송파를 배제함). 예컨대, 송신 매체는 인터넷(월드 와이드 웹(World Wide Web)으로서 또한 지칭됨), 인트라넷(들), LAN(Local Area Network)들, WLAN(Wide Local Area Network)들, SAN(Storage Area Network)들, MAN(Metropolitan Area Networks)들 등을 포함(그러나 이에 제한되지 않음)하는 통신 네트워크를 포함할 수 있다.
[0047] 하나 이상의 프로세서들(418)은 매체(401)에 저장된 다양한 소프트웨어 컴포넌트들을 실행하여 시스템(400)에 대한 다양한 기능들을 수행할 수 있다. 일부 예들에서, 소프트웨어 컴포넌트들은 운영 체제(422), 통신 모듈(또는 명령들의 세트)(424), I/O 프로세싱 모듈(또는 명령들의 세트)(426), 그래픽 모듈(또는 명령들의 세트)(428), 및 하나 이상의 애플리케이션들(또는 명령들의 세트)(430)을 포함할 수 있다. 이들 모듈들 및 위에서 언급된 애플리케이션들 각각은 위에서 설명된 하나 이상의 기능들 및 본 출원에서 설명된 방법들(예컨대, 본원에서 설명된 컴퓨터-구현 방법들 및 다른 정보 프로세싱 방법들)을 수행하기 위한 명령들의 세트에 대응할 수 있다. 이들 모듈들(즉, 명령들의 세트들)은 별개의 소프트웨어 프로그램들, 절차들 또는 모듈들로서 구현될 필요가 없으며, 따라서 이들 모듈들의 다양한 서브세트들은 다양한 예들에서 결합되거나 또는 다른 방식으로 재배열 수 있다. 일부 예들에서, 매체(401)는 위에서 식별된 모듈들 및 데이터 구조들의 서브세트를 저장할 수 있다. 또한, 매체(401)는 위에서 설명되지 않은 부가적인 모듈들 및 데이터 구조들을 저장할 수 있다.
[0048] 운영 체제(422)는 일반적인 시스템 작업들(예컨대, 메모리 관리, 저장 디바이스 제어, 전력 관리 등)을 제어 및 관리하기 위한 다양한 절차들, 명령들의 세트들, 소프트웨어 컴포넌트들 및/또는 드라이버들을 포함할 수 있고 다양한 하드웨어 및 소프트웨어 컴포넌트들 사이의 통신을 용이하게 한다.
[0049] 통신 모듈(424)은 하나 이상의 외부 포트들(436)을 통해 또는 RF 회로(408)를 통해 다른 디바이스들과의 통신을 용이하게 할 수 있고, RF 회로(408) 및/또는 외부 포트(436)로부터 수신된 데이터를 처리하기 위한 다양한 소프트웨어 컴포넌트들을 포함할 수 있다.
[0050] 그래픽 모듈(428)은 하나 이상의 디스플레이 표면들 상에서 그래픽 객체들을 렌더링, 애니메이팅 및 디스플레이하기 위한 다양한 알려진 소프트웨어 컴포넌트들을 포함할 수 있다. 디스플레이 표면들은 2D 또는 3D 디스플레이들을 포함할 수 있다. 디스플레이 표면들은 예시적인 시스템(400)의 하나 이상의 컴포넌트들에 직접적으로 또는 간접적으로 커플링될 수 있다. 터치 감지 디스플레이(예컨대, 터치 스크린)를 수반하는 예들에서, 그래픽 모듈(428)은 터치 감지 디스플레이 상에서 객체들을 렌더링, 디스플레이 및 애니메이팅하기 위한 컴포넌트들을 포함할 수 있다. 일부 예들에서, 그래픽 모듈(428)은 원격 디스플레이들로 렌더링하기 위한 컴포넌트들을 포함할 수 있다. 일부 예들 이를테면, 카메라를 통합하는 예들에서, 그래픽 모듈(428)은 카메라 데이터(이를테면, 머리-장착 카메라로부터 캡처됨) 또는 사진 데이터(이를테면, 위성 캡처 이미저리)를 랜더링된 그래픽 객체들과 합성함으로써 형성된 이미지를 생성 및/또는 디스플레이하기 위한 컴포넌트들을 포함할 수 있다. 일부 예들에서, 그래픽 모듈은 이미지를 머리-장착 디스플레이로 렌더링하기 위한 컴포넌트들을 포함할 수 있다. 일부 예들에서, 이미지는 가상 콘텐츠의 엘리먼트(예컨대, 3-차원 가상 환경에서의 객체)의 뷰 및/또는 물리적 세계(예컨대, 사용자의 물리적 주변들을 나타내는 카메라 입력)의 뷰를 포함할 수 있다. 일부 예들에서, 디스플레이는 가상 콘텐츠 및 물리적 세계의 뷰의 합성을 제시할 수 있다. 일부 예들에서, 물리적 세계의 뷰는 렌더링된 이미지일 수 있고; 일부 예들에서, 물리적 세계의 뷰는 카메라로부터의 이미지일 수 있다.
[0051] 하나 이상의 애플리케이션들(430)은, 브라우저, 주소록, 연락처 리스트, 이메일, 인스턴트 메시징, 워드 프로세싱, 키보드 에뮬레이션, 위젯들, JAVA-인에이블드(enabled) 애플리케이션들, 암호화, 디지털 권한 관리, 음성 인식, 음성 복제, 위치 결정 능력(이를테면, GPS(global positioning system)에 의해 제공하는 것), 음악 플레이어 등을 제한 없이 포함하여, 시스템(400) 상에 설치된 임의의 애플리케이션들을 포함할 수 있다.
[0052] I/O 서브시스템(406)은 다양한 기능들을 제어 또는 수행하기 위해 눈 I/O 디바이스(412) 및 하나 이상의 다른 I/O 디바이스들(414)에 커플링될 수 있다. 예컨대, 눈 I/O 디바이스(412)는 눈 I/O 디바이스 제어기(432)를 통해 프로세싱 시스템(404)과 통신할 수 있으며, 이 프로세싱 시스템은 눈 입력(예컨대, 눈 추적을 위한 센서들) 또는 사용자 제스처 입력(예컨대, 광학 센서들)을 프로세싱하기 위한 다양한 컴포넌트들을 포함할 수 있다. 하나 이상의 다른 입력 제어기들(434)은 다른 I/O 디바이스들(414)로 전기 신호들을 전송하고 다른 I/O 디바이스들(414)로부터 전기 신호들을 수신할 수 있다. 다른 I/O 디바이스들(414)은 물리적인 버튼들, 다이얼들, 슬라이더 스위치들, 스틱들, 키보드들, 터치 패드들, 부가적인 디스플레이 스크린들, 또는 이들의 임의의 조합을 포함할 수 있다.
[0053] I/O 프로세싱 모듈(426)은, I/O 제어기들(434)을 통해 다른 I/O 디바이스들(414)로부터 또는 눈 I/O 디바이스 제어기(432)를 통해 눈 I/O 디바이스(412)로부터 수신된 입력을 수신 및 프로세싱하는 것을 포함(그러나 이에 제한되지 않음)하여, 눈 I/O 디바이스(412) 및/또는 다른 I/O 디바이스들(414)과 연관된 다양한 작업들을 수행하기 위한 다양한 소프트웨어 컴포넌트들을 포함할 수 있다. 일부 예들에서, I/O 디바이스들(414) 및/또는 I/O 프로세싱 모듈(426)은 촉각 또는 비-촉각 수단에 의해 제공될 수 있는 제스처 입력과 연관된 다양한 작업들을 수행할 수 있다. 일부 예들에서, 제스처 입력은 예컨대, 사용자의 눈들, 팔들, 손들 및/또는 손가락들의 움직임들을 검출하기 위해 카메라 또는 다른 센서에 의해 제공될 수 있다. 일부 예들에서, I/O 디바이스들(414) 및/또는 I/O 프로세싱 모듈(426)은 사용자가 상호 작용하고자 하는 디스플레이 상의 객체들, 예컨대 사용자가 가리키는 GUI 엘리먼트들을 식별하도록 구성될 수 있다. 일부 예들에서, 눈 I/O 디바이스(412) 및/또는 I/O 프로세싱 모듈(426)은 (이를테면, 광학 또는 EOG 센서들의 도움으로) 사용자가 바라보는 디스플레이 상의 객체 또는 구역을 식별하는 것과 같은 눈 추적 작업들을 수행하도록 구성될 수 있다. 일부 예들에서, 디바이스(이를테면, 하드웨어 "비콘")는 사용자에 의해 착용되거나 보유되어 2D 또는 3D 환경에 대해 사용자 손들의 위치를 식별하는 것과 같은 제스처-관련 작업들과 관련하여 터치 I/O 디바이스(412) 및/또는 I/O 프로세싱 모듈(426)을 보조할 수 있다. 일부 예들에서, 눈 I/O 디바이스(412) 및/또는 I/O 프로세싱 모듈(426)은 사용자의 눈과 관련된 카메라 센서로부터의 데이터와 같은 센서 입력에 기초하여 사용자를 식별하도록 구성될 수 있다.
[0054] 일부 예들에서, 그래픽 모듈(428)은 GUI에서 시각적 출력을 사용자에게 디스플레이할 수 있다. 시각적 출력은 텍스트, 그래픽, 비디오 및 이들의 임의의 조합을 포함할 수 있다. 시각적 출력의 일부 또는 전부는 사용자-인터페이스 객체들에 대응할 수 있다. 일부 예들에서, (임의의 연관된 모듈들 및/또는 매체(401) 내의 명령들의 세트들과 함께) I/O 디바이스들(412 및/또는 414) 및/또는 제어기들(432 및/또는 434)은 제스처들 및/또는 눈 움직임들을 검출 및 추적할 수 있고, 검출된 제스처들 및/또는 눈 움직임들을, 하나 이상의 사용자-인터페이스 객체들과 같은 그래픽 객체들과의 상호작용으로 변환할 수 있다. 눈 I/O 디바이스(412) 및/또는 눈 I/O 디바이스 제어기(432)가 사용자의 눈 움직임들을 추적하도록 구성된 예들에서, 사용자는 그것들을 바라봄으로써 그래픽 객체들과 직접적으로 상호작용할 수 있다.
[0055] 디스플레이되고 있는 것 및/또는 컴퓨팅 시스템의 상태 또는 상태들에 기초하여, 피드백이 이를테면, 눈 I/O 디바이스(412) 또는 다른 I/O 디바이스(414)에 의해 제공될 수 있다. 피드백은 광학적으로(예컨대, 광 신호 또는 디스플레이된 이미지), 기계적으로(예컨대, 햅틱 피드백, 터치 피드백, 힘 피드백 등), 전기적으로(예컨대, 전기 자극), 후각, 음향적으로(예컨대, 비프음(beep) 등) 등 또는 이들의 임의의 조합으로 그리고 가변 가능 또는 가변 불가능 방식으로 송신될 수 있다.
[0056] 시스템(400)은 또한 다양한 하드웨어 컴포넌트들에 전력을 공급하기 위한 전력 시스템(444)을 포함할 수 있고, 전력 관리 시스템, 하나 이상의 전력 소스, 재충전 시스템, 정전 검출 회로, 전력 변환기 또는 인버터, 전력 상태 표시기, 및 휴대용 디바이스들에서의 전력의 생성, 관리 및 분배와 통상적으로 연관된 임의의 다른 컴포넌트들을 포함할 수 있다.
[0057] 일부 예들에서, 주변장치 인터페이스(416), 하나 이상의 프로세서들(418) 및 메모리 제어기(420)는 프로세싱 시스템(404)과 같은 단일 칩 상에서 구현될 수 있다. 일부 다른 예들에서, 그것들은 별개의 칩들 상에 구현될 수 있다.
[0058] 일부 예들에서, 방법이 개시된다. 방법은, 컴퓨터 시스템의 제1 클라이언트 애플리케이션으로부터, 제1 노드를 포함하는 제1 그래픽 데이터를 수신하는 단계; 컴퓨터 시스템의 제2 클라이언트 애플리케이션으로부터, 제2 노드를 포함하는 제2 그래픽 데이터를 수신하는 단계; 및 장면그래프를 생성하는 단계를 포함할 수 있으며, 장면그래프는 제1 노드와 제2 노드 사이의 관계를 설명하고, 장면그래프는 컴퓨터 시스템의 프로세서에 의해 트래버싱될 때 출력을 렌더링하도록 구성된다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 컴퓨터 시스템의 프로세서에 의해, 장면그래프를 트래버싱하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 컴퓨터 시스템은 디스플레이와 통신하도록 구성될 수 있고, 방법은 디스플레이 상에서 출력을 디스플레이하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은, 컴퓨터 시스템에서, 출력에 최적화를 적용하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 최적화를 적용하는 단계는 표면을 컬링하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 컴퓨터 시스템에서, 출력에 시각적 효과를 적용하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 시각적 효과를 적용하는 단계는 광 값을 계산하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 시각적 효과를 적용하는 단계는 쉐이더(shader)를 실행하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 컴퓨터 시스템에서, 출력에 물리적 효과를 적용하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 물리적 효과를 적용하는 단계는 충돌을 검출하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 클라이언트 애플리케이션은 컴퓨터 시스템 상에서 실행되는 제1 애플리케이션일 수 있고, 제2 클라이언트 애플리케이션은 컴퓨터 시스템 상에서 실행되는 제2 애플리케이션일 수 있으며, 제1 클라이언트 애플리케이션은 제2 클라이언트 애플리케이션에 대해 컴퓨터 시스템 상에서 샌드박스화될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 그래픽 데이터는 제1 클라이언트 애플리케이션과 연관된 제1 클라이언트 장면그래프에 대응할 수 있고, 제2 그래픽 데이터는 제2 클라이언트 애플리케이션과 연관된 제2 클라이언트 장면그래프에 대응할 수 있고, 제1 클라이언트 장면그래프는 제2 클라이언트 장면그래프에 대해 컴퓨터 시스템 상에서 샌드박스화될 수 있고, 제1 클라이언트 장면그래프는 장면그래프에 대해 컴퓨터 시스템 상에서 샌드박스화될 수 있고, 제2 클라이언트 장면그래프는 장면그래프에 대해 컴퓨터 시스템 상에서 샌드박스화될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 장면그래프는 버전화된 장면그래프의 버전에 대응할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 그래픽 데이터는 컴퓨터 시스템의 제1 프로세싱 스레드를 사용하여 장면그래프에 통신될 수 있고, 제2 그래픽 데이터는 제1 프로세싱 스레드와 독립적인 컴퓨터 시스템의 제2 프로세싱 스레드를 사용하여 장면그래프에 통신될 수 있다.
[0059] 일부 예들에서, 방법이 개시된다. 방법은, 디스플레이를 갖는 컴퓨터 시스템의 장면그래프를 트래버싱하는 단계 ― 장면그래프는, 제1 애플리케이션과 연관된 제1 3D 데이터를 포함하고, 제1 3D 데이터는 하나 이상의 노드들을 포함하고, 장면그래프는 제2 애플리케이션과 연관된 제2 3D 데이터를 포함하고, 제2 3D 데이터는 하나 이상의 노드들을 포함하고, 제1 애플리케이션은 제2 애플리케이션에 대해 컴퓨터 시스템 상에서 샌드박스화되고, 장면그래프는 제1 3D 데이터의 노드와 제2 3D 데이터의 노드 사이의 관계를 포함함 ― ; 및 디스플레이 상에서, 장면그래프에 대응하는 이미지를 디스플레이하는 단계를 포함할 수 있고, 이미지는 장면그래프를 트래버싱하는 출력에 대응하고, 이미지는 관계를 반영한다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 관계는 공간 관계일 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 컴퓨터 시스템에서, 장면그래프를 트래버싱하는 출력에 최적화를 적용하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 최적화를 적용하는 단계는 표면을 컬링하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 컴퓨터 시스템에서, 장면그래프를 트래버싱하는 출력에 시각적 효과를 적용하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 시각적 효과를 적용하는 단계는 광 값을 계산하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 시각적 효과를 적용하는 단계는 쉐이더(shader)를 실행하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 컴퓨터 시스템에서, 장면그래프를 트래버싱하는 출력에 물리적 효과를 적용하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 물리적 효과를 적용하는 단계는 충돌을 검출하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 장면그래프는 버전화된 장면그래프의 버전에 대응할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 3D 데이터에 대응하는 그래픽 데이터는 컴퓨터 시스템 상에서 실행되는 호스트 애플리케이션에 의해 장면그래프에 통신될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 3D 데이터에 대응하는 그래픽 데이터는 호스트 애플리케이션의 클라이언트에 의해 호스트 애플리케이션에 통신될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 3D 데이터에 대응하는 제1 그래픽 데이터는 제1 프로세싱 스레드를 사용하여 호스트 애플리케이션에 의해 장면그래프에 통신될 수 있고, 제2 3D 데이터에 대응하는 제2 그래픽 데이터는 제1 프로세싱 스레드에 독립적인 제2 프로세싱 스레드를 사용하여 호스트 애플리케이션에 의해 장면그래프에 통신될 수 있다.
[0060] 일부 예들에서, 컴퓨터 시스템이 개시된다. 시스템은, 하나 이상의 프로세서들; 및 명령들을 저장한 메모리를 포함할 수 있으며, 명령들은, 하나 이상의 프로세서들에 의해 실행될 때, 하나 이상의 프로세서들로 하여금 위에서 설명된 방법들 중 하나 이상을 수행하게 한다.
[0061] 일부 예들에서, 비-일시적인 컴퓨터-판독가능 저장 매체가 개시된다. 비-일시적 컴퓨터-판독 가능 저장 매체는 명령들을 저장할 수 있으며, 명령들은, 하나 이상의 프로세서들에 의해 실행될 때, 하나 이상의 프로세서들로 하여금 방법을 수행하게 하고, 방법은, 컴퓨터 시스템의 제1 클라이언트 애플리케이션으로부터, 제1 노드를 포함하는 제1 그래픽 데이터를 수신하는 단계; 컴퓨터 시스템의 제2 클라이언트 애플리케이션으로부터, 제2 노드를 포함하는 제2 그래픽 데이터를 수신하는 단계; 및 장면그래프를 생성하는 단계를 포함하고, 장면그래프는 제1 노드와 제2 노드 사이의 관계를 설명하고, 장면그래프는 컴퓨터 시스템의 프로세서에 의해 트래버싱될 때 출력을 렌더링하도록 구성된다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 컴퓨터 시스템의 프로세서에 의해, 장면그래프를 트래버싱하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 컴퓨터 시스템은 디스플레이와 통신하도록 구성될 수 있고, 방법은 디스플레이 상에서 출력을 디스플레이하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은, 컴퓨터 시스템에서, 출력에 최적화를 적용하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 최적화를 적용하는 단계는 표면을 컬링하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 컴퓨터 시스템에서, 출력에 시각적 효과를 적용하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 시각적 효과를 적용하는 단계는 광 값을 계산하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 시각적 효과를 적용하는 단계는 쉐이더(shader)를 실행하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 컴퓨터 시스템에서, 출력에 물리적 효과를 적용하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 물리적 효과를 적용하는 단계는 충돌을 검출하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 클라이언트 애플리케이션은 컴퓨터 시스템 상에서 실행되는 제1 애플리케이션일 수 있고, 제2 클라이언트 애플리케이션은 컴퓨터 시스템 상에서 실행되는 제2 애플리케이션일 수 있으며, 제1 클라이언트 애플리케이션은 제2 클라이언트 애플리케이션에 대해 컴퓨터 시스템 상에서 샌드박스화될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 그래픽 데이터는 제1 클라이언트 애플리케이션과 연관된 제1 클라이언트 장면그래프에 대응할 수 있고, 제2 그래픽 데이터는 제2 클라이언트 애플리케이션과 연관된 제2 클라이언트 장면그래프에 대응할 수 있고, 제1 클라이언트 장면그래프는 제2 클라이언트 장면그래프에 대해 컴퓨터 시스템 상에서 샌드박스화될 수 있고, 제1 클라이언트 장면그래프는 장면그래프에 대해 컴퓨터 시스템 상에서 샌드박스화될 수 있고, 제2 클라이언트 장면그래프는 장면그래프에 대해 컴퓨터 시스템 상에서 샌드박스화될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 장면그래프는 버전화된 장면그래프의 버전에 대응할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 그래픽 데이터는 컴퓨터 시스템의 제1 프로세싱 스레드를 사용하여 장면그래프에 통신될 수 있고, 제2 그래픽 데이터는 제1 프로세싱 스레드와 독립적인 컴퓨터 시스템의 제2 프로세싱 스레드를 사용하여 장면그래프에 통신될 수 있다.
[0062] 일부 예들에서, 비-일시적인 컴퓨터-판독가능 저장 매체가 개시된다. 비-일시적 컴퓨터-판독 가능 저장 매체는 명령들을 저장할 수 있으며, 명령들은, 하나 이상의 프로세서들에 의해 실행될 때, 하나 이상의 프로세서들로 하여금 방법을 수행하게 하고, 방법은, 디스플레이를 갖는 컴퓨터 시스템의 장면그래프를 트래버싱하는 단계 ― 장면그래프는, 제1 애플리케이션과 연관된 제1 3D 데이터를 포함하고, 제1 3D 데이터는 하나 이상의 노드들을 포함하고, 장면그래프는 제2 애플리케이션과 연관된 제2 3D 데이터를 포함하고, 제2 3D 데이터는 하나 이상의 노드들을 포함하고, 제1 애플리케이션은 제2 애플리케이션에 대해 컴퓨터 시스템 상에서 샌드박스화되고, 장면그래프는 제1 3D 데이터의 노드와 제2 3D 데이터의 노드 사이의 관계를 포함함 ― ; 및 디스플레이 상에서, 장면그래프에 대응하는 이미지를 디스플레이하는 단계를 포함하고, 이미지는 장면그래프를 트래버싱하는 출력에 대응하고, 이미지는 관계를 반영한다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 관계는 공간 관계일 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 컴퓨터 시스템에서, 장면그래프를 트래버싱하는 출력에 최적화를 적용하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 최적화를 적용하는 단계는 표면을 컬링하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 컴퓨터 시스템에서, 장면그래프를 트래버싱하는 출력에 시각적 효과를 적용하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 시각적 효과를 적용하는 단계는 광 값을 계산하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 시각적 효과를 적용하는 단계는 쉐이더(shader)를 실행하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 컴퓨터 시스템에서, 장면그래프를 트래버싱하는 출력에 물리적 효과를 적용하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 물리적 효과를 적용하는 단계는 충돌을 검출하는 단계를 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 장면그래프는 버전화된 장면그래프의 버전에 대응할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 3D 데이터에 대응하는 그래픽 데이터는 컴퓨터 시스템 상에서 실행되는 호스트 애플리케이션에 의해 장면그래프에 통신될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 3D 데이터에 대응하는 그래픽 데이터는 호스트 애플리케이션의 클라이언트에 의해 호스트 애플리케이션에 통신될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 3D 데이터에 대응하는 제1 그래픽 데이터는 제1 프로세싱 스레드를 사용하여 호스트 애플리케이션에 의해 장면그래프에 통신될 수 있고, 제2 3D 데이터에 대응하는 제2 그래픽 데이터는 제1 프로세싱 스레드에 독립적인 제2 프로세싱 스레드를 사용하여 호스트 애플리케이션에 의해 장면그래프에 통신될 수 있다.
[0063] 일부 예들에서, 컴퓨터 시스템이 개시된다. 시스템은 하나 이상의 프로세서들; 저장소 ― 저장소는, 제1 클라이언트 애플리케이션으로부터 컴퓨터 시스템에서, 제1 장면 데이터를 수신하고; 그리고 제2 클라이언트 애플리케이션으로부터 컴퓨터 시스템에서, 제2 장면 데이터를 수신하도록 구성됨 ― ; 명령들을 저장한 메모리를 포함하며, 명령들은, 하나 이상의 프로세서들에 의해 실행될 때, 하나 이상의 프로세서들로 하여금 방법을 수행하게 하고, 방법은, 제1 장면 데이터 및 제2 장면 데이터에 기초하여 그래픽 데이터 구조를 생성하는 단계를 포함하고, 그래픽 데이터 구조는, 하나 이상의 프로세서들에 의해 실행되는 렌더링 동작에 대한 입력으로서 제공될 때, 디스플레이 상에서 이미지에 대응하는 출력을 발생시키도록 구성된다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 그래픽 데이터 구조는 디스플레이 리스트 및 디스플레이 트리 중 적어도 하나일 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 입력으로서 그래픽 데이터 구조를 사용하여 렌더링 동작을 실행하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 컴퓨터 시스템은 디스플레이를 더 포함할 수 있고, 방법은 디스플레이 상에서 이미지를 디스플레이하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 클라이언트 애플리케이션은 제1 디바이스의 하나 이상의 프로세서들에 의해 실행되는 제1 애플리케이션일 수 있고, 제2 클라이언트 애플리케이션은 제1 디바이스의 하나 이상의 프로세서들에 의해 실행되는 제2 애플리케이션일 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 클라이언트 애플리케이션은 제1 디바이스의 하나 이상의 프로세서들에 의해 실행되는 제1 애플리케이션일 수 있고, 제2 클라이언트 애플리케이션은 제2 디바이스의 하나 이상의 프로세서들에 의해 실행되는 제2 애플리케이션일 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 저장소는 추가로, 제3 클라이언트 애플리케이션으로부터 제3 장면 데이터를 수신하도록 구성될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 저장소로부터 제1 장면 데이터를 삭제하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 그래픽 데이터 구조는 제1 데이터 및 제2 데이터를 포함할 수 있고, 방법은, 제1 데이터가 폐색된 뷰에 대응하는지 또는 비폐색 뷰(unoccluded view)에 대응하는지를 결정하는 단계; 제1 데이터가 비폐색 뷰에 대응한다는 결정에 대한 응답으로, 제1 데이터에 기초하여, 비폐색 뷰를 포함하는 이미지를 렌더링하는 단계; 및 제1 데이터가 폐색된 뷰에 대응한다는 결정에 대한 응답으로, 폐색된 뷰를 포함하지 않는 이미지를 렌더링하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 저장소는 추가로, 제1 장면 데이터를 수신하는 것에 대한 응답으로, 버전 제어 시스템에서 제1 버전으로서 제1 장면 데이터를 저장하도록 구성될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 저장소는 추가로, 제1 클라이언트 애플리케이션으로부터, 제3 장면 데이터를 수신하고; 그리고 버전 제어 시스템에서 제2 버전으로서 제3 장면 데이터를 저장하도록 구성될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 그래픽 데이터 구조를 생성하는 것에 대한 응답으로, 저장소로부터 제1 버전을 삭제하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 방법은 저장소가 제3 장면 데이터를 수신하는 것과 병렬로 수행될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 저장소는 제2 장면 데이터를 수신하는 것과 병렬로 제1 장면 데이터를 수신하도록 구성될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 저장소는 제1 데이터 레이트에 대응하는 제1 간격으로 제3 장면 데이터를 수신하도록 구성될 수 있고, 방법은, 제2 데이터 레이트에 대응하도록 제1 간격의 길이를 조정하는 단계를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 장면 데이터는 새로운 데이터, 삭제된 데이터 및 데이터 간의 관계의 변화 중 적어도 하나를 포함할 수 있다.
[0064] 일부 예들에서, 컴퓨터 시스템이 개시된다. 컴퓨터 시스템은 서버, 서버 데이터, 제1 클라이언트 애플리케이션 및 제2 클라이언트 애플리케이션을 포함할 수 있으며, 서버에서, 제1 클라이언트 애플리케이션으로부터 제1 미프로세싱 장면 데이터(unprocessed scene data)를 수신하고; 서버에서, 제2 클라이언트 애플리케이션으로부터 제2 미프로세싱 장면 데이터를 수신하고; 서버에서, 제1 클라이언트 애플리케이션으로부터의 제1 미프로세싱 장면 데이터, 제2 클라이언트 애플리케이션으로부터의 제2 미프로세싱 장면 데이터 및 서버 데이터를 중앙화된 장면 데이터 구조에 통합하고; 서버에서, 중앙화된 장면 데이터 구조 내에 포함된 데이터의 적어도 일부를 실행하고; 그리고 중앙화된 장면 데이터 구조 내에서 실행된 데이터에 기초하여 그래픽 데이터 구조를 생성하도록 구성될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 그래픽 데이터 구조는 디스플레이 리스트 또는 디스플레이 트리일 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 컴퓨터 시스템은 그래픽 데이터 구조를 프로세싱된 이미지로 렌더링하도록 구성된 렌더링 엔진을 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 컴퓨터 시스템은 프로세싱된 이미지를 디스플레이하도록 구성된 디스플레이를 더 포함할 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 디스플레이는 물리적 세계의 적어도 부분 뷰를 유지하면서 가상 콘텐츠를 디스플레이할 수 있을 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 클라이언트 애플리케이션 및 제2 클라이언트 애플리케이션은 단일 물리적 디바이스 상에서 실행되는 2개의 상이한 애플리케이션들일 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 클라이언트 애플리케이션 및 제2 클라이언트 애플리케이션은 별개의 물리적 디바이스들 상에서 각각 실행되는 2개의 상이한 애플리케이션들일 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 서버는 제3 클라이언트 애플리케이션으로부터 제3 미프로세싱 장면 데이터를 수신하도록 구성될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 서버는 제1 클라이언트 애플리케이션으로부터의 미프로세싱 장면 데이터의 실행 후에 제1 클라이언트 애플리케이션으로부터 미프로세싱 장면 데이터를 삭제하도록 구성될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 렌더링 엔진은 폐색 모듈을 더 포함할 수 있고, 폐색 모듈은 그래픽 데이터 구조 내의 데이터를 제1 폐색 카테고리 및 제2 미폐색 카테고리로 분리하고 제2 미폐색 카테고리를 디스플레이하도록 구성된다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 서버는 제1 버전으로서 제1 클라이언트 애플리케이션으로부터의 제1 미프로세싱 장면 데이터를 저장하도록 구성될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 서버는 제2 버전으로서 제1 클라이언트 애플리케이션으로부터의 제3 미프로세싱 장면 데이터를 저장하도록 구성될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 컴퓨터 시스템은, 제1 클라이언트 애플리케이션으로부터의 제1 미프로세싱 장면 데이터의 제1 버전이 서버에 의해 수신된 시간으로부터 제1 클라이언트 애플리케이션으로부터의 제1 미프로세싱 장면 데이터가 판독 및 실행되는 시간까지, 제1 클라이언트 애플리케이션으로부터의 제1 미프로세싱 장면 데이터의 제1 버전을 저장하도록 구성될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 서버는 서버가 제2 클라이언트로부터 제2 미프로세싱 장면 데이터를 수신하는 것과 동시에 제1 클라이언트로부터 제1 미프로세싱 장면 데이터를 수신하도록 구성될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 서버는 제1 클라이언트 애플리케이션이 미프로세싱 장면 데이터를 서버에 전송하는 레이트를 늦추도록 구성될 수 있다. 위의 예들 중 하나 이상에 부가적으로 또는 대안적으로, 제1 클라이언트 애플리케이션 및 제2 클라이언트 애플리케이션으로부터 수신된 데이터는 새로운 데이터, 삭제된 데이터, 이전에 전송된 데이터 사이의 관계의 변화들 및 수정된 데이터로 구성된 그룹으로부터 선택된 적어도 하나일 수 있다.
[0065] 개시된 예들은 첨부 도면들을 참조하여 완전하게 설명되었지만, 다양한 변경들 및 수정들이 당업자에게 명백할 것이란 점에 주의한다. 예컨대, 하나 이상의 구현들의 엘리먼트들은 추가의 구현들을 형성하기 위해 결합, 삭제, 수정 또는 보충될 수 있다. 그러한 변경들 및 수정들은 첨부된 청구항들에 의해 정의된 바와 같은 개시된 예들의 범위 내에 포함되는 것으로 이해될 것이다.

Claims (73)

  1. 컴퓨터 시스템의 제1 클라이언트 애플리케이션으로부터, 제1 노드를 포함하는 제1 그래픽 데이터를 수신하는 단계;
    제1 시스템에서, 상기 컴퓨터 시스템의 제1 클라이언트 애플리케이션으로부터 제1 데이터 레이트로, 업데이트된 제1 그래픽 데이터를 수신하는 단계;
    상기 제1 시스템에서, 상기 컴퓨터 시스템의 제2 클라이언트 애플리케이션으로부터, 제2 노드를 포함하는 제2 그래픽 데이터를 수신하는 단계;
    상기 제1 시스템에서, 상기 컴퓨터 시스템의 제2 클라이언트 애플리케이션으로부터 제2 데이터 레이트로, 업데이트된 제2 그래픽 데이터를 수신하는 단계 ― 상기 제2 데이터 레이트는 상기 제1 데이터 레이트와 상이함 ―;
    상기 제2 데이터 레이트가 너무 높다는 결정에 대한 응답으로, 상기 제2 그래픽 데이터를 상기 제2 데이터 레이트보다 낮은 제3 데이터 레이트로 업데이트하는 단계; 및
    장면그래프(scenegraph)를 생성하는 단계 ― 상기 장면그래프는 상기 제1 클라이언트 애플리케이션 및 상기 제2 클라이언트 애플리케이션에 대해 동기화되고,
    상기 장면그래프는 상기 제1 노드와 상기 제2 노드 사이의 관계를 설명함 ―;
    를 포함하고,
    상기 장면그래프를 생성하는 단계는:
    상기 제3 데이터 레이트에 따라, 상기 업데이트된 제1 그래픽 데이터에 기초하여 상기 장면그래프의 제1 버전을 업데이트하는 단계;
    상기 제3 데이터 레이트에 따라, 상기 업데이트된 제2 그래픽 데이터에 기초하여, 상기 제1 버전과 동시에, 상기 장면그래프의 제2 버전을 업데이트하는 단계;
    상기 업데이트된 제1 버전 및 상기 업데이트된 제2 버전에 기초하여 상기 장면그래프를 생성하는 단계
    를 포함하고,
    상기 장면그래프는 상기 컴퓨터 시스템의 프로세서에 의해 트래버싱(traverse)될 때 출력을 렌더링하도록 구성되는,
    방법.
  2. 제1 항에 있어서,
    상기 컴퓨터 시스템의 프로세서에 의해, 상기 장면그래프를 트래버싱하는 단계를 더 포함하는,
    방법.
  3. 제2 항에 있어서,
    상기 컴퓨터 시스템은 디스플레이와 통신하도록 구성되고,
    상기 방법은 상기 디스플레이 상에서 상기 출력을 디스플레이하는 단계를 더 포함하는,
    방법.
  4. 제2 항에 있어서,
    상기 컴퓨터 시스템에서, 상기 출력에 최적화를 적용하는 단계를 더 포함하는,
    방법.
  5. 제4 항에 있어서,
    상기 최적화를 적용하는 단계는 표면을 컬링(culling)하는 단계를 포함하는,
    방법.
  6. 제2 항에 있어서,
    상기 컴퓨터 시스템에서, 상기 출력에 시각적 효과를 적용하는 단계를 더 포함하는,
    방법.
  7. 제6 항에 있어서,
    상기 시각적 효과를 적용하는 단계는 광 값을 계산하는 단계를 포함하는,
    방법.
  8. 제6 항에 있어서,
    상기 시각적 효과를 적용하는 단계는 쉐이더(shader)를 실행하는 단계를 포함하는,
    방법.
  9. 제2 항에 있어서,
    상기 컴퓨터 시스템에서, 상기 출력에 물리적 효과를 적용하는 단계를 더 포함하는,
    방법.
  10. 제9 항에 있어서,
    상기 물리적 효과를 적용하는 단계는 충돌을 검출하는 단계를 포함하는,
    방법.
  11. 제1 항에 있어서,
    상기 제1 클라이언트 애플리케이션은 상기 컴퓨터 시스템 상에서 실행되는 제1 애플리케이션이고, 상기 제2 클라이언트 애플리케이션은 상기 컴퓨터 시스템 상에서 실행되는 제2 애플리케이션이며, 상기 제1 클라이언트 애플리케이션은 상기 제2 클라이언트 애플리케이션에 대해 상기 컴퓨터 시스템 상에서 샌드박스화(sandboxed)되는,
    방법.
  12. 제1 항에 있어서,
    상기 제1 그래픽 데이터는 상기 제1 클라이언트 애플리케이션과 연관된 제1 클라이언트 장면그래프에 대응하고,
    상기 제2 그래픽 데이터는 상기 제2 클라이언트 애플리케이션과 연관된 제2 클라이언트 장면그래프에 대응하고,
    상기 제1 클라이언트 장면그래프는 상기 제2 클라이언트 장면그래프에 대해 상기 컴퓨터 시스템 상에서 샌드박스화되고,
    상기 제1 클라이언트 장면그래프는 상기 장면그래프에 대해 상기 컴퓨터 시스템 상에서 샌드박스화되고,
    상기 제2 클라이언트 장면그래프는 상기 장면그래프에 대해 상기 컴퓨터 시스템 상에서 샌드박스화되는,
    방법.
  13. 제1 항에 있어서,
    상기 장면그래프는 버전화된 장면그래프의 버전에 대응하는,
    방법.
  14. 제1 항에 있어서,
    상기 제1 그래픽 데이터는 상기 컴퓨터 시스템의 제1 프로세싱 스레드를 사용하여 상기 장면그래프에 통신되고, 상기 제2 그래픽 데이터는 상기 제1 프로세싱 스레드와 독립적인 상기 컴퓨터 시스템의 제2 프로세싱 스레드를 사용하여 상기 장면그래프에 통신되는,
    방법.
  15. 디스플레이를 갖는 컴퓨터 시스템의 장면그래프를 트래버싱하는 단계 ― 상기 장면그래프는, 제1 클라이언트 애플리케이션과 연관된 제1 3D 데이터를 포함하고, 상기 제1 3D 데이터는 하나 이상의 노드들을 포함하고,
    상기 장면그래프는 제2 클라이언트 애플리케이션과 연관된 제2 3D 데이터를 포함하고, 상기 제2 3D 데이터는 하나 이상의 노드들을 포함하고,
    상기 제1 클라이언트 애플리케이션은 상기 제2 클라이언트 애플리케이션에 대해 상기 컴퓨터 시스템 상에서 샌드박스화되고,
    상기 장면그래프는 상기 제1 클라이언트 애플리케이션 및 상기 제2 클라이언트 애플리케이션에 대해 동기화되고,
    상기 장면그래프는 상기 제1 3D 데이터의 노드와 상기 제2 3D 데이터의 노드 사이의 관계를 포함함 ― ; 및
    상기 디스플레이 상에서, 상기 장면그래프에 대응하는 이미지를 디스플레이하는 단계를 포함하고,
    상기 이미지는 상기 장면그래프를 트래버싱하는 출력에 대응하고,
    상기 이미지는 상기 관계를 반영하고,
    상기 제1 3D 데이터는, 상기 컴퓨터 시스템의 제1 클라이언트 애플리케이션으로부터 제1 데이터 레이트로 제1 시스템에서 수신되는 업데이트된 제1 3D 데이터를 포함하고,
    상기 제2 3D 데이터는, 상기 컴퓨터 시스템의 제2 클라이언트 애플리케이션으로부터 상기 제1 데이터 레이트와 상이한 제2 데이터 레이트로 상기 제1 시스템에서 수신되는 업데이트된 제2 3D 데이터를 포함하고,
    상기 업데이트된 제2 3D 데이터는, 상기 제2 데이터 레이트가 너무 높다는 결정에 대한 응답으로, 상기 제2 데이터 레이트보다 낮은 제3 데이터 레이트로 업데이트된 데이터를 포함하고, 그리고
    상기 장면그래프의 제1 버전은 상기 제1 3D 데이터에 기초하여 업데이트되고,
    상기 장면그래프의 제2 버전은 상기 제2 3D 데이터에 기초하여, 상기 장면그래프의 제1 버전과 동시에 업데이트되는,
    방법.
  16. 제15 항에 있어서,
    상기 관계는 공간 관계인,
    방법.
  17. 제15 항에 있어서,
    상기 컴퓨터 시스템에서, 상기 장면그래프를 트래버싱하는 출력에 최적화를 적용하는 단계를 더 포함하는,
    방법.
  18. 제17 항에 있어서,
    상기 최적화를 적용하는 단계는 표면을 컬링하는 단계를 포함하는,
    방법.
  19. 제15 항에 있어서,
    상기 컴퓨터 시스템에서, 상기 장면그래프를 트래버싱하는 출력에 시각적 효과를 적용하는 단계를 더 포함하는,
    방법.
  20. 제19 항에 있어서,
    상기 시각적 효과를 적용하는 단계는 광 값을 계산하는 단계를 포함하는,
    방법.
  21. 제19 항에 있어서,
    상기 시각적 효과를 적용하는 단계는 쉐이더를 실행하는 단계를 포함하는,
    방법.
  22. 제15 항에 있어서,
    상기 컴퓨터 시스템에서, 상기 장면그래프를 트래버싱하는 출력에 물리적 효과를 적용하는 단계를 더 포함하는,
    방법.
  23. 제22 항에 있어서,
    상기 물리적 효과를 적용하는 단계는 충돌을 검출하는 단계를 포함하는,
    방법.
  24. 제15 항에 있어서,
    상기 장면그래프는 버전화된 장면그래프의 버전에 대응하는,
    방법.
  25. 제15 항에 있어서,
    상기 제1 3D 데이터에 대응하는 그래픽 데이터는 상기 컴퓨터 시스템 상에서 실행되는 호스트 애플리케이션에 의해 상기 장면그래프에 통신되는,
    방법.
  26. 제25 항에 있어서,
    상기 제1 3D 데이터에 대응하는 그래픽 데이터는 상기 호스트 애플리케이션의 클라이언트에 의해 상기 호스트 애플리케이션에 통신되는,
    방법.
  27. 삭제
  28. 컴퓨터 시스템으로서,
    하나 이상의 프로세서들; 및
    명령들을 저장한 메모리를 포함하며,
    상기 명령들은, 상기 하나 이상의 프로세서들에 의해 실행될 때, 상기 하나 이상의 프로세서들로 하여금 방법을 수행하게 하고, 상기 방법은,
    제1 클라이언트 애플리케이션으로부터 상기 컴퓨터 시스템에서, 제1 노드를 포함하는 제1 그래픽 데이터를 수신하는 단계;
    상기 컴퓨터 시스템에서, 상기 컴퓨터 시스템의 제1 클라이언트 애플리케이션으로부터 제1 데이터 레이트로, 업데이트된 제1 그래픽 데이터를 수신하는 단계;
    상기 제1 클라이언트 애플리케이션과 상이한 제2 클라이언트 애플리케이션으로부터 상기 컴퓨터 시스템에서, 제2 노드를 포함하는 제2 그래픽 데이터를 수신하는 단계;
    상기 컴퓨터 시스템에서, 상기 컴퓨터 시스템의 제2 클라이언트 애플리케이션으로부터 제2 데이터 레이트로, 업데이트된 제2 그래픽 데이터를 수신하는 단계 ― 상기 제2 데이터 레이트는 상기 제1 데이터 레이트와 상이함 ―;
    상기 제2 데이터 레이트가 너무 높다는 결정에 대한 응답으로, 상기 제2 그래픽 데이터를 상기 제2 데이터 레이트보다 낮은 제3 데이터 레이트로 업데이트하는 단계; 및
    상기 컴퓨터 시스템에서, 장면그래프를 생성하는 단계 ― 상기 장면그래프는 상기 제1 클라이언트 애플리케이션 및 상기 제2 클라이언트 애플리케이션에 대해 동기화되고,
    상기 장면그래프는 상기 제1 노드와 상기 제2 노드 사이의 계층적 관계를 설명함 ―
    를 포함하고,
    상기 장면그래프를 생성하는 단계는:
    상기 제3 데이터 레이트에 따라, 상기 업데이트된 제1 그래픽 데이터에 기초하여 상기 장면그래프의 제1 버전을 업데이트하는 단계;
    상기 제3 데이터 레이트에 따라, 상기 업데이트된 제2 그래픽 데이터에 기초하여, 상기 제1 버전과 동시에, 상기 장면그래프의 제2 버전을 업데이트하는 단계;
    상기 업데이트된 제1 버전 및 상기 업데이트된 제2 버전에 기초하여 상기 장면그래프를 생성하는 단계
    를 포함하고,
    상기 장면그래프는 상기 하나 이상의 프로세서들에 의해 트래버싱될 때 출력을 렌더링하도록 구성되는,
    컴퓨터 시스템.
  29. 제28 항에 있어서,
    상기 방법은 상기 장면그래프를 트래버싱하는 단계를 더 포함하는,
    컴퓨터 시스템.
  30. 제29 항에 있어서,
    상기 컴퓨터 시스템은 디스플레이를 더 포함하고, 상기 방법은 상기 디스플레이 상에서 이미지를 디스플레이하는 단계를 더 포함하는,
    컴퓨터 시스템.
  31. 제29 항에 있어서,
    상기 방법은 상기 장면그래프를 트래버싱하는 출력에 최적화를 적용하는 단계를 더 포함하는,
    컴퓨터 시스템.
  32. 제31 항에 있어서,
    상기 최적화를 적용하는 단계는 표면을 컬링하는 단계를 포함하는,
    컴퓨터 시스템.
  33. 제29 항에 있어서,
    상기 방법은 상기 장면그래프를 트래버싱하는 출력에 시각적 효과를 적용하는 단계를 더 포함하는,
    컴퓨터 시스템.
  34. 제33 항에 있어서,
    상기 시각적 효과를 적용하는 단계는 광 값을 계산하는 단계를 포함하는,
    컴퓨터 시스템.
  35. 제33 항에 있어서,
    상기 시각적 효과를 적용하는 단계는 쉐이더를 실행하는 단계를 포함하는,
    컴퓨터 시스템.
  36. 제29 항에 있어서,
    상기 방법은 상기 장면그래프를 트래버싱하는 출력에 물리적 효과를 적용하는 단계를 더 포함하는,
    컴퓨터 시스템.
  37. 제36 항에 있어서,
    상기 물리적 효과를 적용하는 단계는 충돌을 검출하는 단계를 포함하는,
    컴퓨터 시스템.
  38. 제28 항에 있어서,
    상기 제1 클라이언트 애플리케이션은 상기 컴퓨터 시스템 상에서 실행되는 제1 애플리케이션이고, 상기 제2 클라이언트 애플리케이션은 상기 컴퓨터 시스템 상에서 실행되는 제2 애플리케이션이며, 상기 제1 클라이언트 애플리케이션은 상기 제2 클라이언트 애플리케이션에 대해 상기 컴퓨터 시스템 상에서 샌드박스화되는,
    컴퓨터 시스템.
  39. 제28 항에 있어서,
    상기 제1 그래픽 데이터는 상기 제1 클라이언트 애플리케이션과 연관된 제1 클라이언트 장면그래프에 대응하고,
    상기 제2 그래픽 데이터는 상기 제2 클라이언트 애플리케이션과 연관된 제2 클라이언트 장면그래프에 대응하고,
    상기 제1 클라이언트 장면그래프는 상기 제2 클라이언트 장면그래프에 대해 상기 컴퓨터 시스템 상에서 샌드박스화되고,
    상기 제1 클라이언트 장면그래프는 상기 장면그래프에 대해 상기 컴퓨터 시스템 상에서 샌드박스화되고,
    상기 제2 클라이언트 장면그래프는 상기 장면그래프에 대해 상기 컴퓨터 시스템 상에서 샌드박스화되는,
    컴퓨터 시스템.
  40. 제28 항에 있어서,
    상기 장면그래프는 버전화된 장면그래프의 버전에 대응하는,
    컴퓨터 시스템.
  41. 제28 항에 있어서,
    상기 제1 그래픽 데이터는 상기 컴퓨터 시스템의 제1 프로세싱 스레드를 사용하여 상기 장면그래프에 통신되고, 상기 제2 그래픽 데이터는 상기 제1 프로세싱 스레드와 독립적인 상기 컴퓨터 시스템의 제2 프로세싱 스레드를 사용하여 상기 장면그래프에 통신되는,
    컴퓨터 시스템.
  42. 컴퓨터 시스템으로서,
    하나 이상의 프로세서들;
    저장소 ― 상기 저장소는, 제1 클라이언트 애플리케이션으로부터 상기 컴퓨터 시스템에서, 제1 장면 데이터를 수신하고;
    상기 제1 클라이언트 애플리케이션으로부터 제1 데이터 레이트로 상기 컴퓨터 시스템에서, 업데이트된 제1 장면 데이터를 수신하고;
    제2 클라이언트 애플리케이션으로부터 상기 컴퓨터 시스템에서, 제2 장면 데이터를 수신하고;
    상기 컴퓨터 시스템의 제2 클라이언트 애플리케이션으로부터 제2 데이터 레이트로, 업데이트된 제2 장면 데이터를 수신하고 ― 상기 제2 데이터 레이트는 상기 제1 데이터 레이트와 상이함 ―; 그리고
    상기 제2 데이터 레이트가 너무 높다는 결정에 대한 응답으로, 상기 제2 장면 데이터를 상기 제2 데이터 레이트보다 낮은 제3 데이터 레이트로 업데이트하도록 구성됨 ― ; 및
    명령들을 저장한 메모리를 포함하며,
    상기 명령들은, 상기 하나 이상의 프로세서들에 의해 실행될 때, 상기 하나 이상의 프로세서들로 하여금 방법을 수행하게 하고,
    상기 방법은,
    상기 업데이트된 제1 장면 데이터 및 상기 업데이트된 제2 장면 데이터에 기초하여 그래픽 데이터 구조를 생성하는 단계를 포함하고,
    상기 그래픽 데이터 구조는, 상기 하나 이상의 프로세서들에 의해 실행되는 렌더링 동작에 대한 입력으로서 제공될 때, 디스플레이 상에서 이미지에 대응하는 출력을 발생시키도록 구성되고,
    상기 그래픽 데이터 구조를 생성하는 단계는:
    상기 제3 데이터 레이트에 따라, 상기 업데이트된 제1 장면 데이터에 기초하여 상기 그래픽 데이터 구조의 제1 버전을 업데이트하는 단계;
    상기 제3 데이터 레이트에 따라, 상기 업데이트된 제2 장면 데이터에 기초하여, 상기 제1 버전과 동시에, 상기 그래픽 데이터 구조의 제2 버전을 업데이트하는 단계
    를 더 포함하고,
    상기 그래픽 데이터 구조는 상기 제1 클라이언트 애플리케이션 및 상기 제2 클라이언트 애플리케이션에 대해 동기화되는,
    컴퓨터 시스템.
  43. 제42 항에 있어서,
    상기 그래픽 데이터 구조는 디스플레이 리스트 및 디스플레이 트리 중 적어도 하나인,
    컴퓨터 시스템.
  44. 제42 항에 있어서,
    상기 방법은 입력으로서 상기 그래픽 데이터 구조를 사용하여 렌더링 동작을 실행하는 단계를 더 포함하는,
    컴퓨터 시스템.
  45. 제44 항에 있어서,
    상기 컴퓨터 시스템은 디스플레이를 더 포함하고, 상기 방법은 상기 디스플레이 상에서 상기 이미지를 디스플레이하는 단계를 더 포함하는,
    컴퓨터 시스템.
  46. 제42 항에 있어서,
    상기 제1 클라이언트 애플리케이션은 제1 디바이스의 하나 이상의 프로세서들에 의해 실행되는 제1 애플리케이션이고,
    상기 제2 클라이언트 애플리케이션은 상기 제1 디바이스의 하나 이상의 프로세서들에 의해 실행되는 제2 애플리케이션인,
    컴퓨터 시스템.
  47. 제42 항에 있어서,
    상기 제1 클라이언트 애플리케이션은 제1 디바이스의 하나 이상의 프로세서들에 의해 실행되는 제1 애플리케이션이고,
    상기 제2 클라이언트 애플리케이션은 제2 디바이스의 하나 이상의 프로세서들에 의해 실행되는 제2 애플리케이션인,
    컴퓨터 시스템.
  48. 제42 항에 있어서,
    상기 저장소는 추가로, 제3 클라이언트 애플리케이션으로부터 제3 장면 데이터를 수신하도록 구성되는,
    컴퓨터 시스템.
  49. 제42 항에 있어서,
    상기 방법은 상기 저장소로부터 상기 제1 장면 데이터를 삭제하는 단계를 더 포함하는,
    컴퓨터 시스템.
  50. 제42 항에 있어서,
    상기 그래픽 데이터 구조는 제1 데이터 및 제2 데이터를 포함하고, 상기 방법은,
    상기 제1 데이터가 폐색된 뷰(occluded view)에 대응하는지 또는 비폐색 뷰(unoccluded view)에 대응하는지를 결정하는 단계;
    상기 제1 데이터가 비폐색 뷰에 대응한다는 결정에 대한 응답으로, 상기 제1 데이터에 기초하여, 상기 비폐색 뷰를 포함하는 이미지를 렌더링하는 단계; 및
    상기 제1 데이터가 폐색된 뷰에 대응한다는 결정에 대한 응답으로, 상기 폐색된 뷰를 포함하지 않는 이미지를 렌더링하는 단계를 더 포함하는,
    컴퓨터 시스템.
  51. 제42 항에 있어서,
    상기 저장소는 추가로, 상기 제1 장면 데이터를 수신하는 것에 대한 응답으로, 버전 제어 시스템에서 제1 버전으로서 상기 제1 장면 데이터를 저장하도록 구성되는,
    컴퓨터 시스템.
  52. 제51 항에 있어서,
    상기 저장소는 추가로,
    상기 제1 클라이언트 애플리케이션으로부터, 제3 장면 데이터를 수신하고; 그리고
    상기 버전 제어 시스템에서 제2 버전으로서 상기 제3 장면 데이터를 저장하도록 구성되는,
    컴퓨터 시스템.
  53. 제51 항에 있어서,
    상기 방법은 상기 그래픽 데이터 구조를 생성하는 것에 대한 응답으로, 상기 저장소로부터 상기 제1 버전을 삭제하는 단계를 더 포함하는,
    컴퓨터 시스템.
  54. 제48 항에 있어서,
    상기 방법은 상기 저장소가 상기 제3 장면 데이터를 수신하는 것과 병렬로 수행되는,
    컴퓨터 시스템.
  55. 제42 항에 있어서,
    상기 저장소는 상기 제2 장면 데이터를 수신하는 것과 병렬로 상기 제1 장면 데이터를 수신하도록 구성되는,
    컴퓨터 시스템.
  56. 삭제
  57. 삭제
  58. 서버, 서버 데이터, 제1 클라이언트 애플리케이션 및 제2 클라이언트 애플리케이션을 포함하는 컴퓨터 시스템으로서,
    상기 서버에서, 상기 제1 클라이언트 애플리케이션으로부터 제1 미프로세싱 장면 데이터(unprocessed scene data)를 수신하고;
    상기 서버에서, 제1 데이터 레이트로, 상기 제1 클라이언트 애플리케이션으로부터, 업데이트된 제1 미프로세싱된 장면 데이터를 수신하고;
    상기 서버에서, 상기 제2 클라이언트 애플리케이션으로부터 제2 미프로세싱 장면 데이터를 수신하고;
    상기 서버에서, 상기 제1 데이터 레이트와 상이한 제2 데이터 레이트로, 상기 제2 클라이언트 애플리케이션으로부터, 업데이트된 제2 미프로세싱 장면 데이터를 수신하고;
    상기 제2 데이터 레이트가 너무 높다는 결정에 대한 응답으로, 상기 제2 미프로세싱 장면 데이터를 상기 제2 데이터 레이트보다 낮은 제3 데이터 레이트로 업데이트하고;
    상기 서버에서, 상기 제1 클라이언트 애플리케이션으로부터의 상기 업데이트된 제1 미프로세싱된 장면 데이터, 상기 제3 데이터 레이트에 따라 업데이트된 상기 제2 클라이언트 애플리케이션으로부터의 상기 업데이트된 제2 미프로세싱된 장면 데이터, 및 상기 서버 데이터를 중앙화된 장면 데이터 구조에 통합하고 ― 상기 중앙화된 장면 데이터 구조는 상기 제1 클라이언트 애플리케이션 및 상기 제2 클라이언트 애플리케이션에 대해 동기화됨 ―;
    상기 서버에서, 상기 중앙화된 장면 데이터 구조 내에 포함된 데이터의 적어도 일부를 실행하고; 그리고
    상기 중앙화된 장면 데이터 구조 내에서 실행된 데이터에 기초하여 그래픽 데이터 구조를 생성하도록 구성되고,
    상기 그래픽 데이터 구조를 생성하는 것은:
    상기 제3 데이터 레이트에 따라, 상기 업데이트된 제1 미프로세싱 장면 데이터에 기초하여 상기 그래픽 데이터의 제1 버전을 업데이트하는 것;
    상기 제3 데이터 레이트에 따라, 상기 업데이트된 제2 미프로세싱 장면 데이터에 기초하여, 상기 제1 버전과 동시에, 상기 그래픽 데이터의 제2 버전을 업데이트하는 것
    을 더 포함하는,
    컴퓨터 시스템.
  59. 제58 항에 있어서,
    상기 그래픽 데이터 구조는 디스플레이 리스트 또는 디스플레이 트리인,
    컴퓨터 시스템.
  60. 제58 항에 있어서,
    상기 그래픽 데이터 구조를 프로세싱된 이미지로 렌더링하도록 구성된 렌더링 엔진을 더 포함하는,
    컴퓨터 시스템.
  61. 제60 항에 있어서,
    상기 프로세싱된 이미지를 디스플레이하도록 구성된 디스플레이를 더 포함하는,
    컴퓨터 시스템.
  62. 제61 항에 있어서,
    상기 디스플레이는 물리적 세계의 적어도 부분 뷰를 유지하면서 가상 콘텐츠를 디스플레이할 수 있는,
    컴퓨터 시스템.
  63. 제58 항에 있어서,
    상기 제1 클라이언트 애플리케이션 및 상기 제2 클라이언트 애플리케이션은 단일 물리적 디바이스 상에서 실행되는 2개의 상이한 애플리케이션들인,
    컴퓨터 시스템.
  64. 제58 항에 있어서,
    상기 제1 클라이언트 애플리케이션 및 상기 제2 클라이언트 애플리케이션은 별개의 물리적 디바이스들 상에서 각각 실행되는 2개의 상이한 애플리케이션들인,
    컴퓨터 시스템.
  65. 제58 항에 있어서,
    상기 서버는 제3 클라이언트 애플리케이션으로부터 제3 미프로세싱 장면 데이터를 수신하도록 구성되는,
    컴퓨터 시스템.
  66. 제58 항에 있어서,
    상기 서버는 상기 제1 클라이언트 애플리케이션으로부터의 상기 미프로세싱 장면 데이터의 실행 후에 상기 제1 클라이언트 애플리케이션으로부터 상기 미프로세싱 장면 데이터를 삭제하도록 구성되는,
    컴퓨터 시스템.
  67. 제60 항에 있어서,
    상기 렌더링 엔진은 폐색 모듈을 더 포함하고, 상기 폐색 모듈은 상기 그래픽 데이터 구조 내의 데이터를 제1 폐색 카테고리 및 제2 미폐색 카테고리로 분리하고 상기 제2 미폐색 카테고리를 디스플레이하도록 구성되는,
    컴퓨터 시스템.
  68. 제58 항에 있어서,
    상기 서버는 제1 버전으로서 상기 제1 클라이언트 애플리케이션으로부터의 상기 제1 미프로세싱 장면 데이터를 저장하도록 구성되는,
    컴퓨터 시스템.
  69. 제68 항에 있어서,
    상기 서버는 제2 버전으로서 상기 제1 클라이언트 애플리케이션으로부터의 제3 미프로세싱 장면 데이터를 저장하도록 구성되는,
    컴퓨터 시스템.
  70. 제68 항에 있어서,
    상기 컴퓨터 시스템은, 상기 제1 클라이언트 애플리케이션으로부터의 상기 제1 미프로세싱 장면 데이터의 제1 버전이 상기 서버에 의해 수신된 시간으로부터 상기 제1 클라이언트 애플리케이션으로부터의 상기 제1 미프로세싱 장면 데이터가 판독 및 실행되는 시간까지, 상기 제1 클라이언트 애플리케이션으로부터의 상기 제1 미프로세싱 장면 데이터의 제1 버전을 저장하도록 구성되는,
    컴퓨터 시스템.
  71. 제58 항에 있어서,
    상기 서버는 상기 서버가 상기 제2 클라이언트로부터 상기 제2 미프로세싱 장면 데이터를 수신하는 것과 동시에 상기 제1 클라이언트로부터 상기 제1 미프로세싱 장면 데이터를 수신하도록 구성되는,
    컴퓨터 시스템.


  72. 삭제
  73. 삭제
KR1020197031887A 2017-03-30 2018-03-29 중앙화된 렌더링 KR102648256B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020247008075A KR20240036150A (ko) 2017-03-30 2018-03-29 중앙화된 렌더링

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201762479134P 2017-03-30 2017-03-30
US62/479,134 2017-03-30
PCT/US2018/025298 WO2018183778A1 (en) 2017-03-30 2018-03-29 Centralized rendering

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020247008075A Division KR20240036150A (ko) 2017-03-30 2018-03-29 중앙화된 렌더링

Publications (2)

Publication Number Publication Date
KR20190134694A KR20190134694A (ko) 2019-12-04
KR102648256B1 true KR102648256B1 (ko) 2024-03-14

Family

ID=63671060

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020247008075A KR20240036150A (ko) 2017-03-30 2018-03-29 중앙화된 렌더링
KR1020197031887A KR102648256B1 (ko) 2017-03-30 2018-03-29 중앙화된 렌더링

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020247008075A KR20240036150A (ko) 2017-03-30 2018-03-29 중앙화된 렌더링

Country Status (9)

Country Link
US (2) US11017592B2 (ko)
EP (1) EP3602495A4 (ko)
JP (1) JP7168578B2 (ko)
KR (2) KR20240036150A (ko)
CN (1) CN110476188B (ko)
AU (1) AU2018243460B2 (ko)
CA (1) CA3058421A1 (ko)
IL (2) IL269545B2 (ko)
WO (1) WO2018183778A1 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10977858B2 (en) 2017-03-30 2021-04-13 Magic Leap, Inc. Centralized rendering
KR20240036150A (ko) 2017-03-30 2024-03-19 매직 립, 인코포레이티드 중앙화된 렌더링
WO2019246157A1 (en) * 2018-06-18 2019-12-26 Magic Leap, Inc. Centralized rendering
JP7445642B2 (ja) 2018-08-13 2024-03-07 マジック リープ, インコーポレイテッド クロスリアリティシステム
US11227435B2 (en) 2018-08-13 2022-01-18 Magic Leap, Inc. Cross reality system
JP2022512600A (ja) 2018-10-05 2022-02-07 マジック リープ, インコーポレイテッド 任意の場所における場所特有の仮想コンテンツのレンダリング
WO2020190565A1 (en) * 2019-03-19 2020-09-24 Highwire Games Llc Dynamic 3d environment generation
US11132827B2 (en) * 2019-09-19 2021-09-28 Facebook Technologies, Llc Artificial reality system architecture for concurrent application execution and collaborative 3D scene rendering
CN114600064A (zh) 2019-10-15 2022-06-07 奇跃公司 具有定位服务的交叉现实系统
CN114616534A (zh) 2019-10-15 2022-06-10 奇跃公司 具有无线指纹的交叉现实系统
JP2023504775A (ja) 2019-11-12 2023-02-07 マジック リープ, インコーポレイテッド 位置特定サービスおよび共有場所ベースのコンテンツを伴うクロスリアリティシステム
EP4073763A4 (en) 2019-12-09 2023-12-27 Magic Leap, Inc. CROSS-REALLY SYSTEM WITH SIMPLIFIED PROGRAMMING OF VIRTUAL CONTENT
US11830149B2 (en) 2020-02-13 2023-11-28 Magic Leap, Inc. Cross reality system with prioritization of geolocation information for localization
JP2023514205A (ja) 2020-02-13 2023-04-05 マジック リープ, インコーポレイテッド 正確な共有マップを伴うクロスリアリティシステム
CN115398314A (zh) 2020-02-13 2022-11-25 奇跃公司 使用多分辨率帧描述符进行地图处理的交叉现实系统
CN115461787A (zh) 2020-02-26 2022-12-09 奇跃公司 具有快速定位的交叉现实系统
CN115803788A (zh) 2020-04-29 2023-03-14 奇跃公司 用于大规模环境的交叉现实系统
US11568610B2 (en) * 2020-05-12 2023-01-31 Magic Leap, Inc. Privacy preserving expression generation for augmented or virtual reality client applications
US20220134222A1 (en) * 2020-11-03 2022-05-05 Nvidia Corporation Delta propagation in cloud-centric platforms for collaboration and connectivity
US11935149B2 (en) 2020-11-13 2024-03-19 Samsung Electronics Co., Ltd Electronic device and image rendering method thereof for adjusting frame rate
WO2022103225A1 (ko) * 2020-11-13 2022-05-19 삼성전자 주식회사 전자 장치 및 전자 장치의 이미지 렌더링 방법
CN114283245B (zh) * 2022-03-04 2022-06-14 中科计算技术创新研究院 基于三维模型层次化隐式场的渲染方法
CN117785343A (zh) * 2022-09-22 2024-03-29 华为终端有限公司 界面生成方法及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020163515A1 (en) * 2000-12-06 2002-11-07 Sowizral Henry A. Using ancillary geometry for visibility determination
US20050182844A1 (en) * 2004-02-17 2005-08-18 Sun Microsystems, Inc. Efficient communication in a client-server scene graph system
US20070057952A1 (en) * 2005-09-14 2007-03-15 Microsoft Corporation Adaptive scheduling to maintain smooth frame rate
US20150199788A1 (en) * 2012-04-12 2015-07-16 Google Inc. Accelerating graphical rendering through legacy graphics compilation
WO2016028293A1 (en) * 2014-08-20 2016-02-25 Landmark Graphics Corporation Optimizing computer hardware resource utilization when processing variable precision data

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6130670A (en) 1997-02-20 2000-10-10 Netscape Communications Corporation Method and apparatus for providing simple generalized conservative visibility
US6456285B2 (en) * 1998-05-06 2002-09-24 Microsoft Corporation Occlusion culling for complex transparent scenes in computer generated graphics
US6771264B1 (en) * 1998-08-20 2004-08-03 Apple Computer, Inc. Method and apparatus for performing tangent space lighting and bump mapping in a deferred shading graphics processor
US7050955B1 (en) 1999-10-01 2006-05-23 Immersion Corporation System, method and data structure for simulated interaction with graphical objects
US7064766B2 (en) * 2001-10-18 2006-06-20 Microsoft Corporation Intelligent caching data structure for immediate mode graphics
US7443401B2 (en) * 2001-10-18 2008-10-28 Microsoft Corporation Multiple-level graphics processing with animation interval generation
US7088374B2 (en) * 2003-03-27 2006-08-08 Microsoft Corporation System and method for managing visual structure, timing, and animation in a graphics processing system
US7290216B1 (en) * 2004-01-22 2007-10-30 Sun Microsystems, Inc. Method and apparatus for implementing a scene-graph-aware user interface manager
US8275031B2 (en) * 2005-12-15 2012-09-25 Broadcom Corporation System and method for analyzing multiple display data rates in a video system
US8244051B2 (en) * 2006-03-15 2012-08-14 Microsoft Corporation Efficient encoding of alternative graphic sets
US7911950B2 (en) * 2006-07-03 2011-03-22 Cisco Technology, Inc. Adapter and method to support long distances on existing fiber
US20080122838A1 (en) 2006-09-27 2008-05-29 Russell Dean Hoover Methods and Systems for Referencing a Primitive Located in a Spatial Index and in a Scene Index
US20090278852A1 (en) * 2008-05-09 2009-11-12 Production Resource Group L.L.C Control of 3D objects in a light displaying device
US8368705B2 (en) 2008-07-16 2013-02-05 Google Inc. Web-based graphics rendering system
US8253730B1 (en) 2008-08-29 2012-08-28 Adobe Systems Incorporated System and method for construction of data structures for ray tracing using bounding hierarchies
WO2010035141A2 (en) 2008-09-24 2010-04-01 Erwan Maigret Method and system for rendering or interactive lighting of a complex three dimensional scene
US9270783B2 (en) * 2008-12-06 2016-02-23 International Business Machines Corporation System and method for photorealistic imaging workload distribution
FR2974474B1 (fr) 2011-04-19 2017-11-17 Prologue Procedes et appareils de production et de traitement de representations de scenes multimedias
US20130127849A1 (en) 2011-05-26 2013-05-23 Sebastian Marketsmueller Common Rendering Framework and Common Event Model for Video, 2D, and 3D Content
US9069554B2 (en) * 2012-09-24 2015-06-30 Qualcomm Innovation Center, Inc. Systems and methods to coordinate resource usage in tightly sandboxed environments
US9075618B2 (en) * 2012-11-02 2015-07-07 Microsoft Technology Licensing, Llc Cross-platform data visualizations using common descriptions
US9717982B2 (en) * 2012-12-21 2017-08-01 Microsoft Technology Licensing, Llc Client rendering of latency sensitive game features
US9811936B2 (en) * 2013-03-15 2017-11-07 Dreamworks Animation L.L.C. Level-based data sharing for digital content production
US9230294B2 (en) 2013-03-15 2016-01-05 Dreamworks Animation Llc Preserving and reusing intermediate data
EP2793127B1 (en) * 2013-04-19 2021-11-17 Huawei Technologies Co., Ltd. Method for displaying a 3D scene graph on a screen
US9430251B2 (en) * 2013-09-30 2016-08-30 Unity Technologies Finland Oy Software development kit for capturing graphical image data
US11570114B2 (en) * 2014-03-04 2023-01-31 Mobophiles, Inc. System and method of adaptive rate control and traffic management
KR102244619B1 (ko) 2014-09-30 2021-04-26 삼성전자 주식회사 가속 구조를 생성 및 탐색하는 방법
US10062354B2 (en) 2014-10-10 2018-08-28 DimensionalMechanics, Inc. System and methods for creating virtual environments
EP3104271A1 (en) * 2015-06-08 2016-12-14 Hans-Henry Sandbaek Running remote java applications through a local, plugin-free web browser
US10417803B2 (en) 2016-06-17 2019-09-17 The Boeing Company Multiple-pass rendering of a digital three-dimensional model of a structure
US20180114368A1 (en) * 2016-10-25 2018-04-26 Adobe Systems Incorporated Three-dimensional model manipulation and rendering
KR20240036150A (ko) 2017-03-30 2024-03-19 매직 립, 인코포레이티드 중앙화된 렌더링
US10977858B2 (en) 2017-03-30 2021-04-13 Magic Leap, Inc. Centralized rendering

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020163515A1 (en) * 2000-12-06 2002-11-07 Sowizral Henry A. Using ancillary geometry for visibility determination
US20050182844A1 (en) * 2004-02-17 2005-08-18 Sun Microsystems, Inc. Efficient communication in a client-server scene graph system
US20070057952A1 (en) * 2005-09-14 2007-03-15 Microsoft Corporation Adaptive scheduling to maintain smooth frame rate
US20150199788A1 (en) * 2012-04-12 2015-07-16 Google Inc. Accelerating graphical rendering through legacy graphics compilation
WO2016028293A1 (en) * 2014-08-20 2016-02-25 Landmark Graphics Corporation Optimizing computer hardware resource utilization when processing variable precision data

Also Published As

Publication number Publication date
KR20240036150A (ko) 2024-03-19
JP7168578B2 (ja) 2022-11-09
CN110476188B (zh) 2024-03-22
JP2020515967A (ja) 2020-05-28
IL269545B1 (en) 2023-06-01
EP3602495A1 (en) 2020-02-05
US20180286116A1 (en) 2018-10-04
CN110476188A (zh) 2019-11-19
US11315316B2 (en) 2022-04-26
US20210312708A1 (en) 2021-10-07
IL269545B2 (en) 2023-10-01
AU2018243460A1 (en) 2019-10-17
US11017592B2 (en) 2021-05-25
WO2018183778A1 (en) 2018-10-04
IL269545A (en) 2019-11-28
KR20190134694A (ko) 2019-12-04
IL303169A (en) 2023-07-01
EP3602495A4 (en) 2020-12-16
CA3058421A1 (en) 2018-10-04
AU2018243460B2 (en) 2023-01-05
IL303169B1 (en) 2024-04-01

Similar Documents

Publication Publication Date Title
KR102648256B1 (ko) 중앙화된 렌더링
US11936733B2 (en) Application sharing
US11295518B2 (en) Centralized rendering
US20170329503A1 (en) Editing animations using a virtual reality controller
US20240061502A1 (en) Look to Pin on an Artificial Reality Device
JP7411585B2 (ja) 一元化レンダリング
US20230419618A1 (en) Virtual Personal Interface for Control and Travel Between Virtual Worlds

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
A107 Divisional application of patent
GRNT Written decision to grant