We usually write about what we learn,
so hopefully you can learn too!
The 20th of February Decentraland was launched. For the ones who do not know, Decentraland is a virtual world backed by the Ethereum blockchain where its community owns the shape and purpose of their LANDs, creating an innovative and a dynamic relationship between landowners and visitors. With this premise, the sky is the limit.
We got a chance to be part in the development of some LAND content prior launch, from adventure mazes and sound experiments to art galleries, gardens and even transit systems. Shaping the future of virtual transportation, today we are describing how we created the Trail Transit System in South Decentraland from scratch to its final patch prior launch day.
For this workflow, here at Polygonal Mind worked with a custom Unity plug-in that you can find at GitHub [https://github.com/fairwood/DecentralandUnityPlugin/]. This plugin allowed us to work natively from Untiy, compose and create all the scenarios without heavy coding. Note that we did not use the plug in in its vanilla version, we slightly modified it in order to be suitable for our custom environments, improve its performance and be "game ready".
Each project requires a different approach and production pipeline and that is why the plugin got modified as we faced different challenges and technical issues, mainly related to performance issues once deployed in Decentraland.
#00 - Scratching the main concepts for a transport system
As soon as we started defining on paper all the work that had to be done we set the environment to be a megalitic structure with an elevator to be accessed from the ground level. The train direction returning issue was solved by having two wagons going in the opposite direction of each other in order to avoid long waiting queues. This created a visual and design problem, we needed to design 4 platforms per level and these levels to be connected as well. So the user could easily go through the whole building.
I made a visual mood-board and pitched it in order to get my hands on the first designs. For the general art style I got a heavy inspiration from the Bioshock* environments and art design highlights, and from Fallout 4 I took the transit concept. Both games take a heavy influence on retro-futurism but being backed by different art styles. Bioshock has a gorgeous and well defined art-deco environments mixed with iron forged monumentalism environments and on the other hand we have Fallout 4**, which has a well built and detailed-retro futurist world based on how the future was being dreamt in the late 50s and early 60s.
Bioshock does a materfully use of the metallic channel on its environment and that was key for me on the idea of doing a similar approach on an art deco environment.
Once the art boundaries were set, we could begin the work. We will do the breakdown as we created the assets, beginning with the first version of the train, the one who goes on top of the trail; followed by the design of the station and its integration with the environment. And last but not least we will take a look on the second train.
*Bioshock, developed by 2K Boston / Irrational Games and published by Take Two.
**Fallout 4, developed by Bethesda Game Studios and published by Bethesda Softworks.
#01 The train: Shaping the virtual wagon
For a 55 LAND State the Scene Limitations were pretty high for a environment that was basically a train system so we decided to go for a high-polygon mesh level of detail instead of a more blocky low-res shape resolution. The limits were a maximum of 550k tris, 116 materials and 58 textures (512 square max) to be implemented along the scene.
The whole design turned around one single image that fitted perfectly the mood we were aiming for, although it backfired during development as its a hand-drawn forced perspective of the future from the 50s.
As the design advanced, the main issues turned around the position of the wheel (as it deformed the main structure) and how the train would "move" along the train track. This lead to a better and smoother shaping of the wheel cover and a bigger track for a bigger wheel.
From the inside point of view, which it was made up entirely from design interior concepts from the 50s and the use of wood in contrast of an iron structured wagon, the main issue was to give a "direction" to the train, as it has to have a control point or something similar stuffed with mechanical levels and buttons.
Its Material design consisted on two materials, one for the exterior and one for the interior props, plus one exclusive emissive material for the control panel. Once again, the "lack" of content as the LAND was purely a way of transport meant an advantage to dedicate more resources to detail and patch with more materials the constrain of 512px textures.
After a few iterations we had our first model running on the track and ready to have its firsts tests.
#02 The Station: Balance between composition and utility
As we said before, the station had to have two levels of platforms, one placed at 16m with connections along both sides of the LAND and another platforms placed on the 32m level. All the platforms had to be connected one to another in order to be fully playable and easy to turn in the opposite direction in case you missed a stop, just like a normal subway design. Furthermore, from an artistic point of view, the idea was to avoid as much as posible the use of stairs or long paths in order to match a more "mechanic" and futuristic view of what transport would look like. Taking the Bioshock environments and concept art as a main guideline in colour and material composition I started to sketch the main shape of the station.
I started defining the design of the whole elevator, based on how Bioshock portrayed art-deco steampunk elevators I decided to follow a similar approach from scratch to the final model visuals. The design came to be open and wall-less in order to avoid a claustrophobic feeling, it also served as a concept in model detail and material design.
From the very start I wanted to make a mechanical opening and closing elevator behaviour and so this made me keep in mind where the pieces pivots need to be placed and how the parenting got to be done in order to get correctly animated.
Once the elevator was done and placed, the carcass was placed and its access holes designed. The platforms began to take shape.
We began the development of the statio platforms by its playable design, for me it was crucial to first design how the station would be played and experienced by the user. So I made quick greyboxes doing the playable boundaries and anticipating future visual and experience design troubles, that's how we found and dealt with the troubling connection of ground with the 16m level, as well as how we started to spot complications with the visual integration of the whole set.
Following the original idea, the concept was to take the user from the 16m level to the 32m level by an elevator placed above the upper platform. This lead to notice heavy problems with visual integration and gameplay utility and was quickly discarded as it overloaded the scene with an amount of avoidable tris for a short experience. Instead a -middle level- was created that connected the upper platform of the 16m level with the lower platform of the 32m level.
With its final touches it came the time to paint and design its materials. I decided to use seamless tileable textures for the biggest objects as it would give me more control of sharp detail, we had the exterior structure. For the platforms and elevator I made their UVs and packed them in an atlas, this maximised control over detail and enhance graphic results. Also we made a clever use of the metallness/smoothness channel to make the environment shine naturally.
#03 The Second Train: Reconverting the same concept
When the stations where set, running and the overall was working, it was the time to incorporate a new train to the tracks. This train design was planned to be upside down using the same track as the original wagon but with obvious appearance modifications.
The principal constrain when remodelling the exterior was to keep and preserve the uvs or reshaping the train without needing to redo the material. Because both trains use the same materials.
#04 Material consumption and asset optimziation
The trains were done and set, the stations placed and the first tests showed good results, because for this LAND project we decided to use a prefab approach and A. Picazo, our programmer, suggested and implemented some modifications to the plugin to recognize the same 3D models and instantiate them instead of exporting them individually as separated files.
The overall performance was boosted and it was now time for a texture cut, not because we really needed it, but its always a good idea to revisit the work and improve it deleting or replacing irrelevant files.
As I started to dig in the relation between texture usage and the final result I concluded that the Normal map was usually not necessary to achieve a good result. This was because the ambient light in Decentraland KILLS this kind of micro-details and the directional light is not really helpful in such conditions. So normal maps were eliminated in every material that did not simulate high bumps.
I must say, that one thing that really helped the graphical level we accomplished in this scene was the use of the metallic/smoothness channel, as it meant a discrete type of shinning without being visually invasive as it is the glow channel.
ORM Textures and Decentraland
Decentraland recommends texture optimization by using ORM (Occlusion, Roughness, Metallness) RGB textures. This is quite a good point when working in a PBR workflow but for the project we avoided its use as Ambien Occlusion requires a specific prop-set composition in order to be truly useful. Furthermore if I needed a darker area of occlusion I would just do a light multiply over the Albedo channel instead.
More info about this textures can be found in the Khronos Group documentation:
Colliders in decentraland are created by overlapping a mesh on the model you want with collision behaviour and writing the suffix _collider to the mesh name. It is important to not have the same name twice in the same hierarchy or have the parent and child with the same naming as the GTLF export would crash. Parenting and naming order is a must.
On the performance side I highly recommend to use a low-res mesh when creating the collider as Decentraland creates Mesh Colliders based on the mesh you had named with the suffix. As you may know if you are familiar with Unity, Mesh Colliders are not quite the best workaround for complex scenes so its quite better to avoid colliders with high detail or matching the original objects and do their boundaries intead.
Basic issues of a Unity workflow
Decentraland runs a modified version of the Unity engine with high modifications focused on their current and planned features on the platform. This is quite great as you can use the plugin and Unity to develop and preview how it will look once deployed. Alhough there are significant visual differences because of the Ambient and Directional light on deploy, you can pretty much guess how it will look like.
But although the efficience boost that means working with the unity editor there are two main constrains to keep in mind.
The major part of the components will not get exported with the GTLF format and therefore will not be shown in deploy: Particle Systems, Lights, Cameras, 2D components, Collider components and VFX will not work. GTLF only gets to have the basic mesh renderer, material shading and basic Animator functionality.
Note that the X axis in Unity is flipped and can lead to missplacements when working with the plugin, as DCL does not have its axis inverted.
X = -X
Furthermore the exporter doesnt get along with large scenes and can lead to a laggy editor. The recommendable when working with large scenes is to have the DCL exporter window hidden while editing and opening it to evaluate all the entities and keep in mind if you are going out of bounds.
As soon as the main stations where placed and the it was functional. It was time to develop the ground surroundings. I decided to do an arid vegetation-less approach because I wanted to avoid a polygon overload and maximize detail above where the experience of the train was, not below.
This was the decided approach, the rockish environment was detailed with some resting areas and pipes decorating the paths. The resting areas reused the textures from the props in the station and there were created 3 new materials for the dirt and rocks and one for the glass structure.
#06 Final Patches
During the very end of the development and with the Decentraland launch ahead KnownOrigin became the art host for the crypto art we wanted to display. A limited number of art pieces were curated and placed along the trail, being able to be seen and admired while you travel from one point to another and wait for the train.
This environment meant a huge challenge for the team, as it needed to develop a custom behaviour for the train and its stops, all the props for achieving the train to move go to A.Picazo. For me, who I was in charge of the whole environment, meant a lot as I could bring to life a truly great design based on two games and an art-style I love.
Furthermore there were low constrains regarding graphics as they were reused without boring the composition, this gave me the freedom to enhance the appearance by polygons and make a difference by doing a realistic approach with the material design and give extra detail in a platform that mainly relies on flat-shading and low-poly conceptualisation of environments.
I purr when you're not looking. I'm passionate about environments and all the techie stuff to make them look rad. Learning and improving everyday to be a better hooman.