Skip to content

Asset Bundles Conversion

Mikhail Agapov edited this page Nov 10, 2023 · 4 revisions

Explorer Alpha fully relies on the existence of Asset Bundles for each world/realm: it does not work directly with GLTF due to performance reasons.

Service Side

At the moment the only way to launch the conversion for the "fixed" world (such as SDK7 Streaming World that is used for testing) is to do it manually. We have separate instance to perform the conversion for windows and mac.

Apart from the existing scripts in OPSCLI a new one was introduced to read from /about endpoint and launch the conversion for every scene listed there.

In order to launch it from the command line (from the local machine) use the following snippet:

npx @dcl/opscli queue-ab-conversion-about \
  --token <ACCESS_TOKEN> \
  --about-url https://sdk-team-cdn.decentraland.org/ipfs/goerli-plaza-main/about \
  [--ab-server https://asset-bundle-converter.decentraland.org]

E.g. for windows:

npx @dcl/opscli@latest queue-ab-conversion-about \ 
   --token <ACCESS_TOKEN> \
   --ab-server https://asset-bundle-converter-windows.decentraland.org/ \
   --about-url https://sdk-team-cdn.decentraland.org/ipfs/streaming-world-main/about

⚠️ As the token should not be publicly exposed it can't be shared here: please ask in Slack if such necessity arises.

All other APIs are still valid for Explorer Alpha, the only extra thing needed is to specify --ab-server to point out either windows or mac conversion.

Unity Side

For unity-renderer we don't generate (and use) Desktop Asset Bundles. Explorer Alpha in its turn does not work on WebGL. Thus, we can differentiate the behavior of Asset Bundle Converter based on the target platform.

Asset Bundle Converter operates on Unity 2022.3.12f1 while Explorer Alpha - on 2022.3.2f1. Such capability is provided by stripping the Unity version on Asset Bundles Generation `BuildAssetBundleOptions.AssetBundleStripUnityVersion.

Explorer Alpha uses a new shader for Scene Assets and does not re-assign it at runtime on the client side. It means the shader and all possible variants should be compiled and included in the shared Asset Bundle:

  • Scene.shader is located in unity-shared-dependencies
  • Variants Collection has the same name as the shader + "Variants" suffix: it's hardcoded, this is how Asset Bundle Converter understands that the variants collection should be included in the same bundle
  • The variants collection can be regenerated by `Decentraland/Shaders/Generate "Scene" Variants Collection"

⚠️ If we don't include all possible variants in the asset bundle at runtime they will be missing. as the shader itself comes from the AB Unity client will not additively compile required variants on the fly.

Empty Scenes Conversion