Scene importer/exporter

Hey all,

I am trying to make a booth editor and each booth is in a separate project. Now for the booth editor to work I need to be able to serialize the scene(s) in each of the booth projects and load them in the booth editor (a different project), the main goal is to allow our clients to be able to change textures, move hotspots and models in the booths and save back the scene data to the backend:

I made a diagram to depict it, it is based on multi-tenant architecture.

so here the booth(s) are shown in separate Playcanvas projects, since each of our clients has a separate booth, the artist would set up the booth and using a script would serialize the scene(s) in a scene.json file which would be saved in the backend along with the CMS data the client has put in. Then the client can load that scene in the booth configurator and make changes to the scene and save back the scene.json to the backend.

The booth player will be getting data (images, hotspots text, etc) from that client’s CMS and also the scene(s) JSON and reconstruct a booth.

This way I won’t have to change images/move hotspots for each of the clients and redeploy the changed project every time we have a client request because each client website would have their instance of the booth player which will be fetching data from their instance of the booth and so they can easily change images/move hotspots using the booth configurator and there would be no need to redeploy on their website.

What would be the best approach for this? Playcanvas already does this task in the backend when we import/export a project. I was thinking if I could make a custom scene JSON file which instead of referring to models and images through folders (when we download a project, the assets refer to folders) would be referring to their assetID and using Assets - Get Asset | Learn PlayCanvas I can get that asset and re-construct the scene.

If there is any other approach to this, please advise.

I can think of a few ways to do this. The one I have in mind:

All assets and scenes will have unique IDs so the CMS system when uploading a build from the client, they can be a step where the config.json is converted to format (probably JSON) that the main app can load at runtime that contains the scene URL to load and a list of assets to add to the registry.

The assets will be uniquely tagged by the system so that they can easily be unloaded/loaded by the main app.