decentraland / protocol-squad

Apache License 2.0
2 stars 2 forks source link

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:

Members that participated:

The Protocol Squad has two objectives:

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 :x: :x: :x: βœ…
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