How we aim to reduce friction and make the job of buildng 3D content for Decentraland easier and more collaborative.
Originally published March 2018
devlog
decentraland
dcl
pipeline
In December 2017, DCL held an open, public auction of around 45,000 parcels, with each parcel starting at 1000 MANA (about $100 at the time). Over 3000 unique addresses participated and 35,000 parcels were purchased at an average of around 3000 MANA per parcel which equals to 161,483,050 MANA burned (about $28M at end of auction).
More than a third of the map is dedicated to community goverened district projects which people bid 1000 MANA per stake in. District leaders are essential to the long term success of the project and each have their own dedicated startup plans and work closely with Decentraland on giving early feedback. Focus on accelerating progress for districts will be the main subject for this dev log.
During the summer of 2018, James Baicoianu built a Decentraland client that successfully loaded parcels from IPFS into Janusweb. Watch as we dive down to Genesis Plaza (0,0):
We got a first outsiders look into the world of Genesis Cityโฆ
Parcels would load in as you hovered over themโฆ
and when a player got close enough to themโฆ
Guess you can now tell we can control day or night mode in this sandbox. Decentraland was implemented as a component that can be nested inside of JML code as <dcl/>. This means that all of the functionality that comes with janusweb out of the box like avatars and components just worked.
In this code block example we load the DCL client within a night world:
<html>
<body>
<!--
<FireBoxRoom>
<Assets>
<AssetScript src="dcl.js"/>
<AssetScript src="dcl2jml.js"/>
<AssetImage id="sky_side" src="sky_side.png" tex_clamp="true" tex_colorspace="sRGB"/>
<AssetImage id="sky_down" src="sky_down.png" tex_clamp="true"/>
<AssetImage id="sky_up" src="sky_up.png" tex_clamp="true" tex_colorspace="sRGB"/>
<AssetImage id="rmap" src="Night_Radiance.dds" tex_clamp="true"/>
<AssetImage id="irmap" src="Night_Irradiance.dds" tex_clamp="true"/>
</Assets>
<Room far_dist="10000" fog="true" fog_col="0 0 0" fog_end="200" fog_mode="linear" pos="0 0 0" shadows="true" skybox_back_id="sky_side" skybox_down_id="sky_up" skybox_front_id="sky_side" skybox_left_id="sky_side" skybox_right_id="sky_side" skybox_up_id="sky_up" use_local_asset="room_plane" visible="false" xdir="1 0 0" zdir="0 0 -1">
<dcl/>
</Room>
</FireBoxRoom>
-->
<script src="https://web.janusvr.com/janusweb.js"></script>
<script>elation.janusweb.init({url: document.location.href})</script>
</body>
</html>
One could load Genesis City in many interesting ways by nesting <dcl/> in janusweb such as a table-top game within a virtual or augmented reality world, have weather, extend the builder components, etc.
Make the job of prototyping Decentraland scenes much easier and collaborative.
Developers working from different engines like Unity and Unreal and need a staging platform into webvr
People interested in building 3D scenes now but aren't ready to learn code
Decentralized teams who want to work together on their own platform
Currently a builder has to edit code manually to build their scenes. There is no easy way to manipulate objects visually to place, rotate, and size them.
Also, there's no easy place to host a scene that's under development so that others in the design team or public can see it. In September 2018, Decentraland released a tutorial for using Zeit to deploy and share live previews. Still, a functional developer experience for DCL falls short of the artists, hobbyists, and casuals expectations which is causing a huge bottleneck of content for the city that is just months away from launching.
Until nowโฆ
The native client currently has the most features for power users such as a code editor, VOIP, and visual editor. Here is an excerpt from an hour of collaboration between a few builders sharing an asset pallet.
"There is already a high degree of congruence between scenes that you can build in JanusVR and what you can deploy in Decentraland. It is already possible to manually rework JanusVR scene mark up into Decentraland ECS code. We have examples of that. But it would be much easier for a larger audience of nontechnical builders if the conversions from JanusVR to Decentraland was automated by a plugin or conversion utility." - Carl Fravel
Meanwhile, a web client has been observing the entire time connected through a standard web browser like chrome. Here is what an hour timelapse sped up looks like:
The ability to drag and drop images, lights, links, videos, and sounds is also possible with janus. In this video, the user is drag and dropping positional audio soundbites hosted from a web server.
JanusVR offers advanced scene building environment that can be used as the "devops" pipeline for webvr developers. Vesta offers free hosting and a place to build prototypes with maximum control over how they're shared. As well as offering building tools and staging services, it is simple to embed Vesta sites to your website like this example:
After building something with Janus you can export to html or json and import that scene directly into blender using FireVR and then export as GLTF files or the whole project to an IPFS site. It would be possible to streamline parts of the process by adding functionality to export the scene from janusvr or Vesta to SDK. UPDATE [2/5/19] We now have a working converter to go from Janus scenes to Decentraland!
Also useful for teams is the ability for Vesta site users to leave positional comments in the world that people can teleport directly to.
JanusVR has now added a feature to convert Vesta Scenes to DCL SDK compatible game.ts files! This feature now allows team collaborative scene building, editing, custom content, and a large expertise within the community to help grow Genesis City with more content. Here's how the pipeline looks:
Step 1: Assemble Vesta scene in JanusVR
Not sure where to start? Here's a guide: https://github.com/madjin/janus-guide/blob/master/guide/tutorials/vestabasics.md
Step 1.5: Optimize in Blender
JanusVR supports all sorts of formats for images, sounds, and models like obj, dae, gltf. Decentraland mainly accepted GLTF and has specific scene limitations in terms of height and triangle limits. FireVR is an open source Blender plugin to import and export JanusVR scenes, useful to standardize everything midstep.
Step 2: Export Decentraland typescript
This option is available to Vesta paid members.
Step 3: Preview in SDK
JanusVR added a new feature to load an asset pallete into the native client via json. Knowing where to look, we incorporated the DCL builder assets and fixed .glb support to start using the drag n' drop assets in janus.
When one clicks an asset, it spawns and can be immedietly repositioned then modified with mouse and keyboard.
Assets can also be pulled from an external window and do not have to be .glb format. In this example, we see google poly assets being dragged into the scene from a separate web browser window on the right.
The building experience with janus feels frictionless and powerful upon use. Check out this 5 minute recording of building a simple 16x16 parcel with the dcl builder assets:
It is also social and collaborative. In this video, me and a friend spend 10 minutes building two 16x16 parcels with the DCL builder assets. The video is sped up 4x:
What we have is a bunch of technology and some prototypes, it will take money and effort and a back-and-forth with the community to figure out what exactly would be the best parts to focus on. Everything is open source including the multiplayer server which can all be self hosted on the organizations own infrastructure and provide a collaborative meeting space to organize and create 3D content for projects in realtime.
DCL has recently announced a drag n' builder as well as a content creation contest that launches early March 2019.
It is possible to simply embed that as a websurface in janus, giving more power to the creator. There always exists a path to best of both worlds, it's our intention to stay on it.
The builder can also be bundled in with the hacker homekit, an open source cross-platform homekit thats getting released soon.
2017
Bronze Age
Embed bronze age unity client into a multiuser room in janusweb
2018
2019
DEMOS
It's been almost 2 years since I've been part of the community, long enough to see DCL change their engine 4 different times from Unity > A-minus > Babylon.js > Unity. Since the first release of the software development kit in April 2018 to 2/10/19, less than 100 parcels out of 90,601 had content uploaded to Genesis City.
Even if there was a surge of creativity and 10x more content appears in the next few months that would still barely meet 1% of the map populated with interesting content before the release of the official client and Oculus Quest.
After making a homebrew builder then sponsoring a massive hackathon for supplying content, DCL realized that they weren't able to provide a smooth frame rate experience. This is how the main client looked a few weeks before expected launch at the end of Q2 2019.
The DCL team was beginning to change their rendering engine yet again, this time to Unity citing better performance. They then sponsored another hackathon a few weeks later to battle test it.
This unfortunately marks the end of the open source rendering pipeline for Decentraland, another promising VR project bends the knee to Unity. Public launch was delayed for another 9 months until the Unity client was good enough for release.
I love the idea of the project to build a blockchain incentivized decentralized metaverse but execution matters most and since I have little stake in the outcome (I only own one parcel) my participation in this community has purely been out of passion for it to succeed. With this dev log I'll conclude doing anymore free work and will be open to paid gigs if any investors are interested in building decentralized webxr experiences for DCL and beyond. Feel free to email me if interested. Cheers!