From: William Casarin Date: 2020-08-02 Subject: Protoverse, a metaverse protocol Recently I've been working on my vision of a metaverse protocol. I'm calling it protoverse[1]. PROTOVERSE At a high level, protoverse is an abstract virtual space. It is designed to be accessible and open to everyone. It achieves this by describing the world abstractly like so: (room (shape rectangle) (condition "clean") (material "gold") (name "Satoshi's Den") (width 10) (depth 10) (height 100) (group (table (id welcome-desk) (name "welcome desk") (material "marble") (condition "new") (width 1) (depth 2) (height 1) (light (name "desk"))) (chair (id welcome-desk-chair) (name "fancy")) (light (location ceiling) (name "ceiling") (state off) (shape circle)))) Since this is an abstract description, we can "render" it in many different ways. For example, with natural language: $ ./protoverse parse example.space There is a(n) clean rectangular room made of gold named Satoshi's Den. It contains three objects: a welcome desk table, fancy chair and ceiling light. This is important for accessibility. If we want the metaverse to be open to everyone, we need some way to describe what is going on in this abstract space without a visual rendering. PROGRESSIVE LEVEL OF DETAIL One aspect of these spaces that I want to have is the ability for the protocol to load detail progressively. On first connection you would pull down a high level description of the space, and then you could query for further detail. For example, you could ask for a 3d model of a table or chair, otherwise the client could just render a default table. Text clients wouldn't need to pull down anything more than the abstract description, as well as chat events and other dynamic aspects of the protocol. DYNAMICS Right now I have an initial accessibility prototype. All it really does is what I described above: render a description from the abstract data. To bring some more interactivity to the protocol, I've started working on the actual network aspect of things. Right now I'm using UDP, but eventually I'm thinking about QUIC[2] as a transport. I'm thinking about simple TLV[3] packets of various events: - space data (space s-expressions, models, textures, etc) - chat - actions: movement, changing object states (light switch, etc) Stay tuned for future posts on the protoverse, I'm going to be updating my phlog as I make progress on the progressive lod, dynamics and network side of things. Interested in contributing? shoot me an email with your ideas! [1] https://github.com/jb55/protoverse [2] https://en.wikipedia.org/wiki/QUIC [3] https://en.wikipedia.org/wiki/Type-length-value