-
Notifications
You must be signed in to change notification settings - Fork 1
/
introduction.html
198 lines (180 loc) · 11.4 KB
/
introduction.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>1. Introduction — Teleport XR documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/graphviz.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="https://unpkg.com/[email protected]/dist/mermaid.min.js"></script>
<script>mermaid.initialize({startOnLoad:true});</script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="2. Client" href="client/index.html" />
<link rel="prev" title="Teleport VR" href="index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="" >
<span class="sidebartitle">
Teleport XR
</span>
<img src="_static/TeleportLogo-64.png" class="logo" alt="Logo" />
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<label class="search-label" for="q">Search the teleport documentation</label>
<input type="text" name="q" id="q" placeholder="Search..." aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">1. Introduction</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#concepts">1.1. Concepts</a></li>
<li class="toctree-l2"><a class="reference internal" href="#comparison-to-the-world-wide-web">1.2. Comparison to the World Wide Web</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="client/index.html">2. Client</a></li>
<li class="toctree-l1"><a class="reference internal" href="unity/index.html">3. Teleport Unity SDK</a></li>
<li class="toctree-l1"><a class="reference internal" href="protocol.html">4. The Teleport VR Protocol</a></li>
<li class="toctree-l1"><a class="reference internal" href="reference/index.html">5. Reference Implementation</a></li>
</ul>
</div>
</div>
</nav>
<div data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<h2 class="wy-nav-top">Navigation</h2><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Teleport XR</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active"><span class="section-number">1. </span>Introduction</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/introduction.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="introduction">
<h1><span class="section-number">1. </span>Introduction<a class="headerlink" href="#introduction" title="Permalink to this heading">¶</a></h1>
<p>Teleport is an <a class="reference external" href="https://www.bbc.co.uk/bitesize/guides/zr3yb82/revision/6">application level</a> protocol and SDK for client-server virtual, augmented and mixed reality (collectively, XR).</p>
<p>Think of Teleport in analogy to the World Wide Web: instead of a Web Browser, you have a Metaverse Browser (i.e. the Teleport Client);
instead of a Website, you have a Virtual World (operated by a Teleport Server).
And instead of passively reading a web-page, you are an active participant in an immersive application.</p>
<section id="concepts">
<h2><span class="section-number">1.1. </span>Concepts<a class="headerlink" href="#concepts" title="Permalink to this heading">¶</a></h2>
<p>A Teleport Server runs a multi-user XR application. <em>The app lives on the server</em>.</p>
<p>The Teleport system is a client-server simulation.
The server is considered to have the ground-truth of the simulation, while the client provides
a view into that simulation of varying accuracy, depending on the latency and bandwidth of the connection,
hardware capabilities of the client device, and other factors.
At any time, each connected client has partial information on the simulation state.</p>
<table class="docutils align-default" id="id1">
<caption><span class="caption-number">Table 1.1 </span><span class="caption-text">Definitions</span><a class="headerlink" href="#id1" title="Permalink to this table">¶</a></caption>
<colgroup>
<col style="width: 27.3%" />
<col style="width: 72.7%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Name</p></th>
<th class="head"><p>Description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>Node</p></td>
<td><p>An object positioned in 3D Space. A node may have child nodes, forming a hierarchy.</p></td>
</tr>
<tr class="row-odd"><td><p>Resource</p></td>
<td><p>A read-only, unchanging data object that is used for rendering: a mesh, texture, material, etc.</p></td>
</tr>
<tr class="row-even"><td><p>Mutable Asset</p></td>
<td><p>A data object that may be expected to change during the simulation runtime: a Node is a Mutable Asset, for example.</p></td>
</tr>
<tr class="row-odd"><td><p>Component</p></td>
<td><p>An instance that provides functionality to a specific node. Each node can have zero or more components, and components are of different types depending on their purpose.</p></td>
</tr>
</tbody>
</table>
<p>Table :numref:Definitions defines some key terms.</p>
<p>The server tells the client which nodes it needs to keep track of, and which assets and resources it needs.
The server will send the client the asset states and resource data.</p>
<p>Clients generally keep only a part of the world state at any time. Two clients connected to the same server could use completely different nodes and resources, or could share some. But the server should send
only the data any client needs at a given time. In Teleport, “worlds” or “levels” are not downloaded wholesale to the client, so connection is instantaneous.</p>
<p>The state of the simulation is considered to be <em>live</em> and <em>real-time</em> - unlike an HTML-based system where a text-file might contain the structure of the 3D world, there is no such file in Teleport, because it’s a real-time protocol that expects
the state to be constantly evolving. How the server stores its data is not specified: this is entirely implementation-dependent.</p>
<p>The server can grant a client control of certain nodes. For example, you might directly control the nodes representing your avatar’s head or hands. But the server is the final arbiter
of the simulation.</p>
<p>The server determines the meaning of the client’s control inputs. On connection, the server tells the client which control inputs it expects, and it’s up to the client to match these up to its own hardware.</p>
</section>
<section id="comparison-to-the-world-wide-web">
<h2><span class="section-number">1.2. </span>Comparison to the World Wide Web<a class="headerlink" href="#comparison-to-the-world-wide-web" title="Permalink to this heading">¶</a></h2>
<p>Although sometimes used interchangeably, the Internet and the World Wide Web are not the same network.
The Web is the subset of the Internet that consists of HTML pages, accessed via the HTTP protocol (and its extensions/successors).
The Internet is bigger - it includes email (delivered by SMTP, accessed by POP, IMAP or HTTP) and FTP, as
well as many proprietary, domain-specific or custom formats, protocols and sub-networks.</p>
<p>The Teleport network is part of the Internet, but it is not part of the Web.</p>
<p><strong>File Format</strong>
The Web is founded on a file format: HTML. When you navigate to a URL, your browser expects to receive an HTML
page and render it as styled text. The whole page is downloaded, as a file. The dynamic aspects to a website are
implemented by scripts that can modify that file locally, often by requesting additional information from the server.</p>
<p><em>Teleport</em> has <em>no file format</em>. What the client device receives is considered to be only a partial and temporary
representation of a simulation, whose state is subject to continuous change.</p>
<p><strong>Nouns and Verbs</strong>
The Web is a language, and that language has nouns and verbs. The nouns are: text, tags, headings, links, and so on.
The verbs are the HTTP commands: GET, PUT, POST, and a small number of others. The Web is a system of
static resources, modified discretely.</p>
<p>Teleports nouns are the fundamentals of spatial computing: Nodes (hierarchic 3d objects), poses (position and orientation),
3D shapes, materials, image streams (video) and so on. And likewise the verbs are spatial, and temporal:
commands from server to client to update states; requests from client to server to update other states.
The Teleport network is a system of live simulations, modified continually.</p>
<p><strong>Statefulness</strong>
A stateless API is one where the entire set of information needed to form a response is encoded in the query.
The Web is strongly oriented towards a stateless approach to API’s, encapsulated in the REST design principles.</p>
<p>By contrast, Teleport’s API is necessarily stateful: the data you receive from the server depends on a great many
time- and state-dependent hidden variables in the server’s databases, to which the client can have no access.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="index.html" class="btn btn-neutral float-left" title="Teleport VR" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="client/index.html" class="btn btn-neutral float-right" title="2. Client" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>© Copyright 2018-2024, Teleport XR Ltd.</p>
</div>
</footer>
</div>
</div>
</div>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>