<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Gargantis</title><link>https://gargantis.com/</link><description>Recent content on Gargantis</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://gargantis.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Bounding Volume Hierarchy</title><link>https://gargantis.com/wiki/bounding-volume-hierarchy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/bounding-volume-hierarchy/</guid><description>&lt;p&gt;A &lt;strong&gt;Bounding Volume Hierarchy (BVH)&lt;/strong&gt; is a tree of nested bounding volumes over&#10;a set of geometry. Each leaf holds primitives; each interior node holds a volume&#10;enclosing all of its children. A query — &amp;ldquo;what does this ray hit?&amp;rdquo;, &amp;ldquo;what is&#10;inside this box?&amp;rdquo; — descends from the root and prunes any subtree whose volume&#10;already fails the test, so cost scales with the answer rather than with the size&#10;of the world.&lt;/p&gt;</description></item><item><title>Game Loop</title><link>https://gargantis.com/wiki/game-loop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/game-loop/</guid><description>&lt;p&gt;A &lt;strong&gt;game loop&lt;/strong&gt; is the simulation step of a &lt;a href="https://gargantis.com/wiki/realm/"&gt;realm&lt;/a&gt; — a realm is, by&#10;definition, the region served by a single one. Each iteration turns the realm&amp;rsquo;s&#10;input streams into its output streams:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Record the current position of every input stream, so the whole iteration&#10;reads a consistent snapshot of its inputs.&lt;/li&gt;&#10;&lt;li&gt;Run AI.&lt;/li&gt;&#10;&lt;li&gt;Move objects.&lt;/li&gt;&#10;&lt;li&gt;Generate sounds.&lt;/li&gt;&#10;&lt;li&gt;Compute output deltas and append them to the output streams.&lt;/li&gt;&#10;&lt;li&gt;Repeat.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="why-the-shape-matters"&gt;Why the shape matters&lt;a class="anchor" href="#why-the-shape-matters"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Reading inputs at a &lt;em&gt;recorded stream position&lt;/em&gt;, and emitting deltas &lt;em&gt;appended to&#10;a stream&lt;/em&gt;, is what makes the loop a state machine over &lt;a href="https://gargantis.com/wiki/the-log/"&gt;the log&lt;/a&gt;:&#10;two &lt;a href="https://gargantis.com/wiki/node/"&gt;nodes&lt;/a&gt; that begin in the same state and consume the same inputs in&#10;the same order end in the same state. That is the property the&#10;&lt;a href="https://gargantis.com/wiki/peer-to-peer-network/"&gt;peer-to-peer network&lt;/a&gt; leans on in place of an&#10;authoritative server — convergence follows from determinism rather than from&#10;anyone being in charge.&lt;/p&gt;</description></item><item><title>Gargantis Architecture</title><link>https://gargantis.com/wiki/gargantis-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/gargantis-architecture/</guid><description>&lt;p&gt;Gargantis is a &lt;strong&gt;protocol&lt;/strong&gt;, realised as a &lt;strong&gt;pure peer-to-peer network of&#10;homogeneous &lt;a href="https://gargantis.com/wiki/node/"&gt;browser nodes&lt;/a&gt;&lt;/strong&gt;. There is no central server: every node&#10;runs essentially the same software and is &lt;strong&gt;ephemeral&lt;/strong&gt; — any node may leave at&#10;any time, and the architecture assumes this. A node that happens to stay online&#10;continuously can improve availability and discovery for others, but it is not&#10;privileged and &lt;strong&gt;must not be depended on&lt;/strong&gt; — the architecture must hold with&#10;none. Data is kept across the ephemeral swarm by redundancy (erasure coding)&#10;and continuous repair; durability is probabilistic, and some loss is accepted&#10;by design (see &lt;a href="https://gargantis.com/wiki/peer-to-peer-network/"&gt;Peer-to-Peer Network&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>Gargantis Scout</title><link>https://gargantis.com/wiki/gargantis-scout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/gargantis-scout/</guid><description>&lt;p&gt;&lt;strong&gt;Gargantis Scout&lt;/strong&gt; is the browser-based explorer for the&#10;&lt;a href="https://gargantis.com/wiki/gargantisphere/"&gt;Gargantisphere&lt;/a&gt;: the JavaScript application that lets a&#10;person enter the network, render &lt;a href="https://gargantis.com/wiki/realm/"&gt;realms&lt;/a&gt; with WebGL, and travel&#10;between them through &lt;a href="https://gargantis.com/wiki/portal/"&gt;portals&lt;/a&gt;. It runs in any modern web browser —&#10;the browser &lt;em&gt;is&lt;/em&gt; the platform, so there is no separate console or desktop client&#10;(the legacy &amp;ldquo;Steam&amp;rdquo;/native-client clients are not part of the protocol vision).&lt;/p&gt;&#10;&lt;p&gt;Scout is itself an ordinary &lt;a href="https://gargantis.com/wiki/node/"&gt;node&lt;/a&gt;: it joins the&#10;&lt;a href="https://gargantis.com/wiki/peer-to-peer-network/"&gt;peer-to-peer network&lt;/a&gt; via&#10;&lt;a href="https://gargantis.com/wiki/helia-and-ipfs/"&gt;Helia / IPFS&lt;/a&gt;, subscribes to the visible parts of a realm&#10;via the &lt;a href="https://gargantis.com/wiki/scene-composition-protocol/"&gt;Scene Composition Protocol&lt;/a&gt;, and&#10;represents the visitor with a &lt;a href="https://gargantis.com/wiki/persona/"&gt;persona&lt;/a&gt;. &amp;ldquo;Exploring with Scout&amp;rdquo; and&#10;&amp;ldquo;being a peer&amp;rdquo; are the same act.&lt;/p&gt;</description></item><item><title>Gargantisphere</title><link>https://gargantis.com/wiki/gargantisphere/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/gargantisphere/</guid><description>&lt;p&gt;The &lt;strong&gt;Gargantisphere&lt;/strong&gt; is the universe of all Gargantis &lt;a href="https://gargantis.com/wiki/realm/"&gt;realms&lt;/a&gt; and&#10;the &lt;a href="https://gargantis.com/wiki/portal/"&gt;portals&lt;/a&gt; that connect them — the whole interconnected space the&#10;&lt;a href="https://gargantis.com/wiki/peer-to-peer-network/"&gt;peer-to-peer network&lt;/a&gt; of &lt;a href="https://gargantis.com/wiki/node/"&gt;nodes&lt;/a&gt; renders and&#10;maintains.&lt;/p&gt;&#10;&lt;p&gt;It is analogous to the World Wide Web: just as the Web is the universe of&#10;hyperlinked pages, the Gargantisphere is the universe of portal-linked realms. A&#10;visitor can travel seamlessly between realms — potentially with different&#10;physics, avatars, and authoring — exploring and discovering as they go, without&#10;ever contacting a central server.&lt;/p&gt;</description></item><item><title>Gargontology</title><link>https://gargantis.com/wiki/gargontology/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/gargontology/</guid><description>&lt;p&gt;The &lt;strong&gt;Gargontology&lt;/strong&gt; is the ontology, or abstract schema, underlying the&#10;&lt;a href="https://gargantis.com/wiki/scene-composition-protocol/"&gt;Scene Composition Protocol&lt;/a&gt; of the&#10;&lt;a href="https://gargantis.com/wiki/gargantisphere/"&gt;Gargantisphere&lt;/a&gt;. It names the classes and properties a scene&#10;is built from, so that independently-authored &lt;a href="https://gargantis.com/wiki/realm/"&gt;realms&lt;/a&gt; and&#10;independently-written &lt;a href="https://gargantis.com/wiki/node/"&gt;nodes&lt;/a&gt; mean the same thing by &amp;ldquo;mesh&amp;rdquo; or&#10;&amp;ldquo;rotation&amp;rdquo;.&lt;/p&gt;&#10;&lt;h2 id="list-of-classes"&gt;List of classes&lt;a class="anchor" href="#list-of-classes"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://gargantis.com/wiki/vertex/"&gt;Vertex&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Line&lt;/li&gt;&#10;&lt;li&gt;Curve&lt;/li&gt;&#10;&lt;li&gt;Polygon&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://gargantis.com/wiki/mesh/"&gt;Mesh&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Image&lt;/li&gt;&#10;&lt;li&gt;Affine &lt;a href="https://gargantis.com/wiki/transform/"&gt;Transform&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Rotation&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="why-an-ontology-rather-than-a-fixed-schema"&gt;Why an ontology rather than a fixed schema&lt;a class="anchor" href="#why-an-ontology-rather-than-a-fixed-schema"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://gargantis.com/wiki/json-3d/"&gt;JSON-3D&lt;/a&gt; extends &lt;a href="https://json-ld.org/" target="_blank" rel="noopener"&gt;JSON-LD&lt;/a&gt;, and the&#10;Gargontology is the vocabulary its &lt;code&gt;@context&lt;/code&gt; points at. That buys two things a&#10;fixed struct definition does not, both of which matter here specifically.&lt;/p&gt;</description></item><item><title>Helia and IPFS</title><link>https://gargantis.com/wiki/helia-and-ipfs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/helia-and-ipfs/</guid><description>&lt;p&gt;&lt;strong&gt;Helia&lt;/strong&gt; is the modern JavaScript implementation of &lt;strong&gt;IPFS&lt;/strong&gt; (the InterPlanetary&#10;File System). It is a core building block of Gargantis: it provides&#10;content-addressed storage and the libp2p networking stack that the&#10;&lt;a href="https://gargantis.com/wiki/peer-to-peer-network/"&gt;peer-to-peer network&lt;/a&gt; is built on, entirely inside the&#10;&lt;a href="https://gargantis.com/wiki/node/"&gt;browser node&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="role-in-gargantis"&gt;Role in Gargantis&lt;a class="anchor" href="#role-in-gargantis"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Content addressing.&lt;/strong&gt; Scene assets and &lt;a href="https://gargantis.com/wiki/json-3d/"&gt;JSON-3D&lt;/a&gt; documents are&#10;identified by cryptographic hash (CID). Any peer holding a CID can serve it,&#10;so there is no origin server (this replaces the legacy AWS S3/CloudFront&#10;origin entirely).&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Transport &amp;amp; discovery.&lt;/strong&gt; libp2p (bundled with Helia) handles peer&#10;discovery, connection, NAT traversal, and &lt;strong&gt;pubsub&lt;/strong&gt; — the substrate for&#10;per-&lt;a href="https://gargantis.com/wiki/realm/"&gt;realm&lt;/a&gt; and per-stream topics.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Data plane for streams.&lt;/strong&gt; The &lt;a href="https://gargantis.com/wiki/web-stream-message-protocol/"&gt;Web Stream Message Protocol&lt;/a&gt;&#10;and its &lt;a href="https://gargantis.com/wiki/the-log/"&gt;log&lt;/a&gt; semantics ride on libp2p pubsub plus&#10;content-addressed blocks for replay.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="deployment"&gt;Deployment&lt;a class="anchor" href="#deployment"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The Hugo documentation site is deployable to &lt;strong&gt;IPFS&lt;/strong&gt; as well as Cloudflare&#10;Workers, so the docs themselves can be served by the same content-addressed&#10;fabric as the protocol.&lt;/p&gt;</description></item><item><title>JSON-3D</title><link>https://gargantis.com/wiki/json-3d/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/json-3d/</guid><description>&lt;p&gt;&lt;strong&gt;JSON-3D&lt;/strong&gt; is the JSON format for exchanging virtual-reality scenes and events&#10;between &lt;a href="https://gargantis.com/wiki/node/"&gt;nodes&lt;/a&gt;. It is an extension of&#10;&lt;a href="https://en.wikipedia.org/wiki/JSON-LD" target="_blank" rel="noopener"&gt;JSON-LD&lt;/a&gt;, so a document carries its own&#10;vocabulary context and can be read as linked data; the classes and properties&#10;that vocabulary names are the &lt;a href="https://gargantis.com/wiki/gargontology/"&gt;Gargontology&lt;/a&gt;. It borrows&#10;concepts from, but is not compatible with,&#10;&lt;a href="https://en.wikipedia.org/wiki/GeoJSON" target="_blank" rel="noopener"&gt;GeoJSON&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;JSON-3D is what the &lt;a href="https://gargantis.com/wiki/scene-composition-protocol/"&gt;Scene Composition Protocol&lt;/a&gt;&#10;puts on the wire: the &lt;a href="https://gargantis.com/wiki/scene-hierarchy/"&gt;scene hierarchy&lt;/a&gt; with its&#10;&lt;a href="https://gargantis.com/wiki/transform/"&gt;transforms&lt;/a&gt; and &lt;a href="https://gargantis.com/wiki/mesh/"&gt;meshes&lt;/a&gt; as structure, plus the events&#10;and value updates that flow over &lt;a href="https://gargantis.com/wiki/structural-stream/"&gt;structural&lt;/a&gt; and&#10;&lt;a href="https://gargantis.com/wiki/parameter-stream/"&gt;parameter&lt;/a&gt; streams.&lt;/p&gt;</description></item><item><title>Mesh</title><link>https://gargantis.com/wiki/mesh/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/mesh/</guid><description>&lt;p&gt;A &lt;strong&gt;mesh&lt;/strong&gt; is a graphical object that represents a surface as a two-dimensional&#10;web-like network of interconnected &lt;a href="https://gargantis.com/wiki/vertex/"&gt;vertices&lt;/a&gt;, lines, and triangles.&#10;It is how a &lt;a href="https://gargantis.com/wiki/realm/"&gt;realm&lt;/a&gt;&amp;rsquo;s geometry reaches the GPU: triangles are what&#10;WebGL rasterises, so any richer surface is reduced to them before it is drawn.&lt;/p&gt;&#10;&lt;p&gt;A mesh sits in the &lt;a href="https://gargantis.com/wiki/scene-hierarchy/"&gt;scene hierarchy&lt;/a&gt; beneath a&#10;&lt;a href="https://gargantis.com/wiki/transform/"&gt;transform&lt;/a&gt; that places it. Its geometry is &lt;strong&gt;bulk data&lt;/strong&gt; — large,&#10;immutable, and typically reused across many placements — which makes it the part&#10;of a scene that content addressing suits best: a mesh is fetched once by hash&#10;from any peer holding it via &lt;a href="https://gargantis.com/wiki/helia-and-ipfs/"&gt;Helia / IPFS&lt;/a&gt; and instanced&#10;wherever it is needed, rather than travelling in the&#10;&lt;a href="https://gargantis.com/wiki/parameter-stream/"&gt;parameter stream&lt;/a&gt; alongside values that change every&#10;frame. Structure and bulk move on different terms; see&#10;&lt;a href="https://gargantis.com/wiki/structural-stream/"&gt;Structural Stream&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Node</title><link>https://gargantis.com/wiki/node/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/node/</guid><description>&lt;p&gt;A &lt;strong&gt;node&lt;/strong&gt; is a single participant in the Gargantis&#10;&lt;a href="https://gargantis.com/wiki/peer-to-peer-network/"&gt;peer-to-peer network&lt;/a&gt;. Nodes are &lt;strong&gt;homogeneous&lt;/strong&gt;:&#10;every node runs essentially the same software, in the &lt;strong&gt;browser&lt;/strong&gt;, using&#10;&lt;strong&gt;JavaScript&lt;/strong&gt; for logic and &lt;strong&gt;WebGL&lt;/strong&gt; for rendering and GPU computation.&lt;/p&gt;&#10;&lt;p&gt;There is no client/server split. A node that renders a scene for a user and a&#10;node run headless as an always-on peer are the &lt;em&gt;same software&lt;/em&gt; in different&#10;configurations. &lt;strong&gt;Every node is ephemeral&lt;/strong&gt; — including the always-on one,&#10;which may still vanish at any time; the protocol assumes this and &lt;strong&gt;must never&#10;depend on any node persisting&lt;/strong&gt;. An always-on configuration is not privileged:&#10;it merely improves availability and discovery for others at the margin, while&#10;the network stays correct with none.&lt;/p&gt;</description></item><item><title>Open Problems</title><link>https://gargantis.com/wiki/open-problems/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/open-problems/</guid><description>&lt;p&gt;This page is the &lt;strong&gt;register of known conceptual conflicts, gaps, and&#10;inconsistencies&lt;/strong&gt; in this wiki — the places where entries contradict each other,&#10;contradict the protocol premise in &lt;a href="https://github.com/gargantis/gargantis/blob/main/README.md" target="_blank" rel="noopener"&gt;README&lt;/a&gt;,&#10;or assert as settled something no entry actually specifies.&lt;/p&gt;&#10;&lt;p&gt;It exists because the wiki deliberately records open questions in place (&lt;strong&gt;not&#10;yet specified&lt;/strong&gt;) rather than papering over them. Those in-place markers say&#10;&lt;em&gt;that&lt;/em&gt; a question is open; this page says &lt;em&gt;what breaks if it stays open&lt;/em&gt;, and&#10;collects the conflicts that span more than one entry and so have no single page&#10;to live on.&lt;/p&gt;</description></item><item><title>Parameter Stream</title><link>https://gargantis.com/wiki/parameter-stream/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/parameter-stream/</guid><description>&lt;p&gt;A &lt;strong&gt;parameter stream&lt;/strong&gt; specifies numerical, Boolean, and other parameters that&#10;typically vary &lt;strong&gt;quickly&lt;/strong&gt; over time — the positions, rotations, and states that&#10;change as a &lt;a href="https://gargantis.com/wiki/realm/"&gt;realm&lt;/a&gt;&amp;rsquo;s &lt;a href="https://gargantis.com/wiki/game-loop/"&gt;game loop&lt;/a&gt; runs. It is the&#10;fast-moving counterpart to the &lt;a href="https://gargantis.com/wiki/structural-stream/"&gt;structural stream&lt;/a&gt;, and&#10;together the two carry the&#10;&lt;a href="https://gargantis.com/wiki/scene-composition-protocol/"&gt;Scene Composition Protocol&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="higher-order-derivatives"&gt;Higher-order derivatives&lt;a class="anchor" href="#higher-order-derivatives"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;A parameter may carry derivatives alongside its value: a point&amp;rsquo;s position can&#10;also specify velocity and acceleration. This is what lets a &lt;a href="https://gargantis.com/wiki/node/"&gt;node&lt;/a&gt;&#10;&lt;strong&gt;extrapolate&lt;/strong&gt; between updates instead of waiting for them — it renders the&#10;predicted value each frame and corrects when the next record arrives. Motion&#10;then stays smooth at frame rate while the stream runs at whatever rate the&#10;network and the loop sustain, and an update becomes a &lt;em&gt;correction&lt;/em&gt; rather than a&#10;hard requirement.&lt;/p&gt;</description></item><item><title>Peer-to-Peer Network</title><link>https://gargantis.com/wiki/peer-to-peer-network/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/peer-to-peer-network/</guid><description>&lt;p&gt;Gargantis is a &lt;strong&gt;pure peer-to-peer network&lt;/strong&gt;: there is no central server and no&#10;privileged tier. Participants are homogeneous &lt;a href="https://gargantis.com/wiki/node/"&gt;nodes&lt;/a&gt; running&#10;essentially the same software, and &lt;strong&gt;every node is ephemeral&lt;/strong&gt; — any node may&#10;disappear at any time, and the protocol treats this as the normal case, never&#10;the exception. A node that stays online continuously can improve discovery&#10;latency and data availability at the margin, but it is an ordinary peer the&#10;protocol grants no special authority and, crucially, &lt;strong&gt;must never depend on&lt;/strong&gt;:&#10;correctness and liveness must hold even if no node is permanent.&lt;/p&gt;</description></item><item><title>Persona</title><link>https://gargantis.com/wiki/persona/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/persona/</guid><description>&lt;p&gt;A &lt;strong&gt;persona&lt;/strong&gt; (a.k.a. character, toon, avatar) is the mechanism that allows a&#10;user/player to interact with a virtual world created as part of a shared social&#10;activity with friends. It represents a combination of values and mechanics —&#10;attributes, skills, and other things dependent on the experience — and the&#10;personality and other individual choices that a player makes to define their&#10;character.&lt;/p&gt;&#10;&lt;p&gt;A &lt;a href="https://gargantis.com/wiki/node/"&gt;node&lt;/a&gt; represents its user through a persona, and a persona travels:&#10;crossing a &lt;a href="https://gargantis.com/wiki/portal/"&gt;portal&lt;/a&gt; hands it from one &lt;a href="https://gargantis.com/wiki/realm/"&gt;realm&lt;/a&gt; to the next,&#10;with no central server mediating the transition.&lt;/p&gt;</description></item><item><title>Portal</title><link>https://gargantis.com/wiki/portal/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/portal/</guid><description>&lt;p&gt;A &lt;strong&gt;portal&lt;/strong&gt; connects one &lt;a href="https://gargantis.com/wiki/realm/"&gt;realm&lt;/a&gt; to another. Portals are what make&#10;the &lt;a href="https://gargantis.com/wiki/gargantisphere/"&gt;Gargantisphere&lt;/a&gt; a single navigable space rather than a&#10;set of isolated worlds — they are the Gargantisphere&amp;rsquo;s analogue of the hyperlink.&lt;/p&gt;&#10;&lt;h2 id="kinds-of-portal"&gt;Kinds of portal&lt;a class="anchor" href="#kinds-of-portal"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Obvious portal&lt;/strong&gt; — a visible boundary or gateway the visitor knowingly steps&#10;through (a door, a gate, a marked threshold).&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Seamless portal&lt;/strong&gt; — no visible boundary. If the two realms share physics and&#10;continuous geometry, a visitor may cross without being aware of it. A single&#10;virtual space can therefore be composed of multiple seamlessly-joined realms;&#10;this is also a &lt;strong&gt;scaling&lt;/strong&gt; technique, since each joined realm runs its own&#10;&lt;a href="https://gargantis.com/wiki/game-loop/"&gt;game loop&lt;/a&gt; and can be served by different peers.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="mechanics"&gt;Mechanics&lt;a class="anchor" href="#mechanics"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;A portal references the target realm by a content-addressed identifier resolved&#10;through &lt;a href="https://gargantis.com/wiki/helia-and-ipfs/"&gt;Helia / IPFS&lt;/a&gt;. Crossing a portal means the&#10;&lt;a href="https://gargantis.com/wiki/node/"&gt;node&lt;/a&gt; subscribes to the target realm&amp;rsquo;s streams (via the&#10;&lt;a href="https://gargantis.com/wiki/scene-composition-protocol/"&gt;Scene Composition Protocol&lt;/a&gt;) and hands off the&#10;visitor&amp;rsquo;s &lt;a href="https://gargantis.com/wiki/persona/"&gt;persona&lt;/a&gt; — no central server mediates the transition.&lt;/p&gt;</description></item><item><title>Realm</title><link>https://gargantis.com/wiki/realm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/realm/</guid><description>&lt;p&gt;A &lt;strong&gt;realm&lt;/strong&gt; is a region of the &lt;a href="https://gargantis.com/wiki/gargantisphere/"&gt;Gargantisphere&lt;/a&gt; served by a&#10;single &lt;a href="https://gargantis.com/wiki/game-loop/"&gt;game loop&lt;/a&gt;. It is the unit of world simulation and&#10;authoring: a realm has its own scene, its own physics, and its own avatars.&lt;/p&gt;&#10;&lt;p&gt;A realm is &lt;strong&gt;published into and replicated across&lt;/strong&gt; the&#10;&lt;a href="https://gargantis.com/wiki/peer-to-peer-network/"&gt;peer-to-peer network&lt;/a&gt; rather than hosted on a server.&#10;Its scene is expressed via the &lt;a href="https://gargantis.com/wiki/scene-composition-protocol/"&gt;Scene Composition Protocol&lt;/a&gt;&#10;as a &lt;a href="https://gargantis.com/wiki/scene-hierarchy/"&gt;Scene Hierarchy&lt;/a&gt;, carried by&#10;&lt;a href="https://gargantis.com/wiki/structural-stream/"&gt;structural&lt;/a&gt; and &lt;a href="https://gargantis.com/wiki/parameter-stream/"&gt;parameter&lt;/a&gt; streams.&#10;&lt;a href="https://gargantis.com/wiki/node/"&gt;Nodes&lt;/a&gt; subscribe only to the partitions of a realm they can currently&#10;see, bounded by a &lt;a href="https://gargantis.com/wiki/bounding-volume-hierarchy/"&gt;Bounding Volume Hierarchy&lt;/a&gt;; a&#10;large or busy realm may be split into multiple seamlessly-joined sub-realms to&#10;spread load across peers.&lt;/p&gt;</description></item><item><title>Scene Composition Protocol</title><link>https://gargantis.com/wiki/scene-composition-protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/scene-composition-protocol/</guid><description>&lt;p&gt;The &lt;strong&gt;Scene Composition Protocol (SCP)&lt;/strong&gt; specifies how a 3D scene is transferred&#10;between &lt;a href="https://gargantis.com/wiki/node/"&gt;nodes&lt;/a&gt; over the &lt;a href="https://gargantis.com/wiki/peer-to-peer-network/"&gt;peer-to-peer network&lt;/a&gt;&#10;and assembled into the &lt;a href="https://gargantis.com/wiki/scene-hierarchy/"&gt;Scene Hierarchy&lt;/a&gt; a &lt;a href="https://gargantis.com/wiki/node/"&gt;node&lt;/a&gt;&#10;renders.&lt;/p&gt;&#10;&lt;h2 id="model"&gt;Model&lt;a class="anchor" href="#model"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;A world is modeled as a hierarchy. Each level has its own coordinate system and&#10;a &lt;a href="https://gargantis.com/wiki/transform/"&gt;transform&lt;/a&gt; mapping a contained coordinate system into its&#10;container. Parameters may carry higher-order derivatives — e.g. a point&amp;rsquo;s&#10;position may also specify velocity and acceleration so motion can be&#10;extrapolated between updates.&lt;/p&gt;</description></item><item><title>Scene Hierarchy</title><link>https://gargantis.com/wiki/scene-hierarchy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/scene-hierarchy/</guid><description>&lt;p&gt;The &lt;strong&gt;Scene Hierarchy&lt;/strong&gt; is the hierarchical set of objects making up the scene a&#10;&lt;a href="https://gargantis.com/wiki/node/"&gt;node&lt;/a&gt; renders. Each level has its own coordinate system, and a&#10;&lt;a href="https://gargantis.com/wiki/transform/"&gt;transform&lt;/a&gt; maps a contained object&amp;rsquo;s coordinates into its&#10;container&amp;rsquo;s — so moving a parent moves everything beneath it, and an object&amp;rsquo;s&#10;world placement is the composition of the transforms along its path to the root.&lt;/p&gt;&#10;&lt;p&gt;It is the structure the&#10;&lt;a href="https://gargantis.com/wiki/scene-composition-protocol/"&gt;Scene Composition Protocol&lt;/a&gt; assembles from&#10;incoming streams: the &lt;a href="https://gargantis.com/wiki/structural-stream/"&gt;structural stream&lt;/a&gt; adds, removes,&#10;and re-parents objects, while the &lt;a href="https://gargantis.com/wiki/parameter-stream/"&gt;parameter stream&lt;/a&gt; drives&#10;values on objects already present. A &lt;a href="https://gargantis.com/wiki/realm/"&gt;realm&lt;/a&gt;&amp;rsquo;s&#10;&lt;a href="https://gargantis.com/wiki/bounding-volume-hierarchy/"&gt;bounding volume hierarchy&lt;/a&gt; is indexed over this&#10;tree, which is what lets a node subscribe to a subtree it can see and ignore the&#10;rest.&lt;/p&gt;</description></item><item><title>Structural Stream</title><link>https://gargantis.com/wiki/structural-stream/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/structural-stream/</guid><description>&lt;p&gt;A &lt;strong&gt;structural stream&lt;/strong&gt; specifies the structure of a &lt;a href="https://gargantis.com/wiki/realm/"&gt;realm&lt;/a&gt;&amp;rsquo;s objects&#10;— what exists, of what type, parented where — and typically varies &lt;strong&gt;slowly&lt;/strong&gt;&#10;over time. It is one of the two stream kinds the&#10;&lt;a href="https://gargantis.com/wiki/scene-composition-protocol/"&gt;Scene Composition Protocol&lt;/a&gt; uses; the other, the&#10;&lt;a href="https://gargantis.com/wiki/parameter-stream/"&gt;parameter stream&lt;/a&gt;, carries the values that change quickly.&lt;/p&gt;&#10;&lt;h2 id="why-the-split"&gt;Why the split&lt;a class="anchor" href="#why-the-split"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The two kinds have opposite delivery needs. Structural records are comparatively&#10;rare, but nothing else can be interpreted without them, and a missed one cannot&#10;be papered over by extrapolation — a &lt;a href="https://gargantis.com/wiki/node/"&gt;node&lt;/a&gt; that never learned an&#10;object exists cannot render it. Parameter records are the reverse: high rate,&#10;individually disposable, stale within a frame. Separating them lets a node fetch&#10;the structure of a newly-visible&#10;&lt;a href="https://gargantis.com/wiki/bounding-volume-hierarchy/"&gt;BVH&lt;/a&gt; partition once and then track only its&#10;parameters, and lets each kind be delivered on the terms it actually needs.&lt;/p&gt;</description></item><item><title>The Log</title><link>https://gargantis.com/wiki/the-log/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/the-log/</guid><description>&lt;p&gt;A &lt;strong&gt;log&lt;/strong&gt; is an append-only sequence of records ordered by time — a very simple&#10;storage abstraction, and the one underneath every Gargantis stream. It acts as a&#10;kind of messaging system with durability guarantees and strong ordering&#10;semantics, and it solves the two problems every distributed data system has:&#10;&lt;strong&gt;ordering changes&lt;/strong&gt; and &lt;strong&gt;distributing data&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;The load-bearing property is the &lt;strong&gt;State Machine Replication Principle&lt;/strong&gt;: if two&#10;identical, deterministic processes begin in the same state and get the same&#10;inputs in the same order, they will produce the same output and end in the same&#10;state. A &lt;a href="https://gargantis.com/wiki/game-loop/"&gt;game loop&lt;/a&gt; is exactly such a process, which is why a&#10;&lt;a href="https://gargantis.com/wiki/realm/"&gt;realm&lt;/a&gt; can converge across the network with no authoritative server&#10;deciding what is true.&lt;/p&gt;</description></item><item><title>Transform</title><link>https://gargantis.com/wiki/transform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/transform/</guid><description>&lt;p&gt;A &lt;strong&gt;transform&lt;/strong&gt; is composed of a position, a rotation, and a scale. The position&#10;is represented as a three-dimensional vector, and the scale is also a&#10;three-dimensional vector. Every level of the&#10;&lt;a href="https://gargantis.com/wiki/scene-hierarchy/"&gt;scene hierarchy&lt;/a&gt; carries one, mapping a contained&#10;coordinate system into its container, so an object&amp;rsquo;s world placement is the&#10;composition of the transforms along its path to the root.&lt;/p&gt;&#10;&lt;p&gt;The three components compose into a single 4×4 matrix — using&#10;&lt;a href="https://en.wikipedia.org/wiki/Homogeneous_coordinates" target="_blank" rel="noopener"&gt;homogeneous coordinates&lt;/a&gt;,&#10;so that translation, rotation, and scale all become multiplication and a chain&#10;of them collapses into one product. That matrix is the form the GPU consumes.&lt;/p&gt;</description></item><item><title>Vertex</title><link>https://gargantis.com/wiki/vertex/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/vertex/</guid><description>&lt;p&gt;A &lt;strong&gt;vertex&lt;/strong&gt; is a point of a &lt;a href="https://gargantis.com/wiki/mesh/"&gt;mesh&lt;/a&gt; — the atom of renderable geometry.&#10;It is a position, and usually more: a vertex commonly carries a&#10;&lt;a href="https://en.wikipedia.org/wiki/Surface_normal" target="_blank" rel="noopener"&gt;normal&lt;/a&gt; for lighting,&#10;&lt;a href="https://en.wikipedia.org/wiki/UV_mapping" target="_blank" rel="noopener"&gt;UV coordinates&lt;/a&gt; for texturing, and&#10;sometimes a colour or skinning weights. These are its &lt;strong&gt;attributes&lt;/strong&gt;, and naming&#10;which attributes a vertex may carry is part of what the&#10;&lt;a href="https://gargantis.com/wiki/gargontology/"&gt;Gargontology&lt;/a&gt; has to do.&lt;/p&gt;&#10;&lt;p&gt;The &lt;strong&gt;vertices&lt;/strong&gt; property of a mesh is an ordered list with elements of type&#10;vertex. The ordering is load-bearing rather than incidental: triangles are&#10;defined by &lt;em&gt;indices&lt;/em&gt; into that list, so a vertex&amp;rsquo;s position in it is its&#10;identity, and sharing one vertex between adjacent triangles is what makes a mesh&#10;a connected surface rather than a pile of loose triangles.&lt;/p&gt;</description></item><item><title>Web Stream Message Protocol</title><link>https://gargantis.com/wiki/web-stream-message-protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gargantis.com/wiki/web-stream-message-protocol/</guid><description>&lt;p&gt;The &lt;strong&gt;Web Stream Message Protocol (WSMP)&lt;/strong&gt; defines how a &lt;strong&gt;web stream&lt;/strong&gt; is&#10;carried between &lt;a href="https://gargantis.com/wiki/node/"&gt;nodes&lt;/a&gt;. A web stream is a resource that provides data&#10;to many subscribers in the form of a replicated &lt;a href="https://gargantis.com/wiki/the-log/"&gt;log&lt;/a&gt; of messages.&#10;The channel between publisher and subscriber is &lt;strong&gt;bidirectional and symmetric&lt;/strong&gt;:&#10;what a publisher emits may depend on messages its subscribers send, so a stream&#10;is a conversation rather than a broadcast.&lt;/p&gt;&#10;&lt;p&gt;Web streams carry both stream kinds the&#10;&lt;a href="https://gargantis.com/wiki/scene-composition-protocol/"&gt;Scene Composition Protocol&lt;/a&gt; uses — the&#10;&lt;a href="https://gargantis.com/wiki/structural-stream/"&gt;structural stream&lt;/a&gt; and the&#10;&lt;a href="https://gargantis.com/wiki/parameter-stream/"&gt;parameter stream&lt;/a&gt;. The same abstraction composes into data&#10;pipelines, where a stage consumes web streams and publishes another, and it&#10;simplifies distributing updates to a replicated store.&lt;/p&gt;</description></item></channel></rss>