Skip to content

decentraland/protocol-squad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 

Repository files navigation

State of the Protocol Squad

Welcome to the State of the Protocol Squad document. This document is updated periodically with the status and plan of each implementation and documentation.

The current team members are:

  • @leanmendoza - Godot implementation leader
  • @robtfm - Bevy implementation leader
  • @kuruk-mm - Staff engineer
  • @sdilauro - Jr. Scene and Godot Developer

Members that participated:

  • @menduz - Babylon implementation leader, technical coordination
  • @slezica - Documentation & technical writing

The Protocol Squad has two objectives:

  • Publish an extensive and detailed documentation of the Decentraland protocol
  • Create alternative implementations of the World Explorer

There are currently three implementations being developed, each implementation has their own different objectives and tints in development.

Current objective: 🔛 Render interactive scenes.

Next objective: 🔜 Connect the explorers together and see eachother in-world.

The team also focuses on documenting the protocol in the shape of Architecture Decision Records (ADR) and as contributions to the Official Documentation

Babylon.js + Typescript

Repository: https://github.com/decentraland/hammurabi

Objective: It is the educational implementation of Decentraland. Its main objective is to provide a clear standard/reference implementation that implements the Decentraland protocol in the most readable and correct way possible. Even though it contains many performance optimizations, complex optimizations are left for other explorers to optimize this one for readability. The test coverage of this implementation should be the highest and its objective is to be the "reference implementation" when implementing new explorers from scratch.

Current state: Not maintained 🟠, the Babylon accomplished his objective, and it's suitable for educating the people to implement an Explorer

Bevy + Rust

Repository: https://github.com/decentraland/bevy-explorer

Objective: Rust may be the greatest language for the coming decades, and its open source nature is very aligned with Decentraland's mission. The same happens with Bevy (the engine). Internally, Bevy is already implemented using an ECS, at the moment of writing this document, creating a Decentraland Explorer in this technology seems to be the best decision long term.

Current state: Completed 🟢

Godot 4 + GDScript + Rust

Repository: https://github.com/decentraland/godot-explorer

Objective: Its objective is to be a production ready (or ready-to-fork) Decentraland Explorer. Godot (fully open source) has been gaining traction in the industry and more and more titles are being published and developed on Godot as time passes.

Current state: Completed 🟢

Unity + C# (Unity Alpha)

Repository: https://github.com/decentraland/unity-explorer

Objective: Its objective is to be a production-ready Decentraland Explorer. Developed by the Decentraland Foundation.

Current state: ON TRACK 🟢

Unity + C# (#1)

Repository: https://github.com/decentraland/unity-renderer

Objective: First unity client developed by the Decentraland Foundation

Implementation, part 1. Render interactive scenes

At this stage, the implementations will focus on loading and unloading scenes, render their content in the world and oferring basic interactivity.

Feature Specification Bevy Babylon Godot
CI Tests Continous automated testing in commits and pull requests
Continous release Continous release of testable artifacts
Load and unload scenes PENDING
Scene Runtime ADR-133 (Living)
CRDT protocol ADR-117 (Living)
Scene Tick ADR-148 (Living)
Load static realm/world ADR-110 ADR-111 (Living)
Resolve realm base URL ADR-144 (Review)
Static entitites for SDK ADR-219 (Draft)
Player Locomotion PENDING
├── Colliders MeshCollider & GltfContainer 1/2
└── First Person Camera PENDING
SDK Component Specification Bevy Babylon Godot SDK
Transform ADR-153 (Living)
MeshRenderer PENDING Partially
MeshCollider PENDING Partially
Billboard ADR-198 (Living)
Raycast ADR-200 (Draft)
PointerEvents ADR-214 (Draft)
GltfContainer ADR-215 (Draft)
GltfContainerLoadingState ADR-215 (Draft)
Animator ADR-216 (PENDING)
EngineInfo ADR-148 (Living)

Implementation, part 2: Seeing other people

Feature Specification Bevy Babylon Godot
Load a global scene (AvatarsScene) PENDING
Create ephemeral identity PENDING
Connect to WebSocket transport PENDING
├──Transport implementation ADR-105
└──Expose transport to SDK PENDING
SDK Component Specification Bevy Babylon Godot SDK
AvatarShape PENDING Render avatars with custom wearables and emotes

Implementation, part 3: Full SDK implementation

Feature Specification Bevy Babylon Godot
Player Locomotion PENDING
├── Moving platforms PENDING
├── Third person camera PENDING
└── Jump PENDING
Traversal city loading PENDING
Scene boundaries checker PENDING
Runtime API Specification Bevy Babylon Godot Unity #1
fetch ADR-133 addition
WebSocket ADR-133 addition
PortableExperiences
RestrictedActions
Runtime
SignedFetch
CommsApi
SDK Component Specification Bevy Babylon Godot Unity #1
CameraMode PENDING
CameraModeArea PENDING
Material PENDING
AvatarAttach PENDING
TextShape PENDING
Visibility PENDING
AudioSource PENDING
AudioStream PENDING
VideoPlayer PENDING
UiTransform ADR-124
UiCanvasInformation ADR-124
UiLabel ADR-125
UiText ADR-125
UiInput & UiInputResult ADR-125
UiDropdown & UiDropdownResult ADR-125

Comms Support

Feature Bevy Babylon Godot
WebSocket Room
SignedLogin
LiveKit PR
├──VoiceChat PR
Archipelago

Runtime 6 support (aka SDK6)

Feature Bevy Babylon Godot Unity #1
Native support
Proxy support

Proposal #2: implementation part 1

SDK Components

SDK Component Bevy Godot
PointerLock
AvatarModifierArea
NftShape
VideoEvent
Tween
TweenSequence
TweenState

Explorer functionality Components

Web3 - Sign-in Bevy Godot
External wallet
Browser wallet
Web2 method

Future Ideas

Feature Description
ReferenceMaterial SDK Component Reuse materials and reference an entity to use its material while reducing hundreds of CRDT messages
CinematicCamera SDK Component Ability to attach the camera to a specific entity while standing on a scene. Enables cinematic cameras and new game modes.
GameServers Enables scenes to run inside a specialized server. The server connects to comms and is considered an authority. The scene can trust messages from the server and automatic entity synchronization can be configured.
Enable actors for comms A novel communications architecture to enable third party actors to join the communications network of Decentraland. Unblocks game servers
Raycast from global scenes

Links

Governance proposal: https://governance.decentraland.org/proposal/?id=9303c5e0-7cbb-11ed-b135-498029192bca

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •