Hubs-Foundation / hubs

Duck-themed multi-user virtual spaces in WebVR. Built with A-Frame.
https://hubsfoundation.org
Mozilla Public License 2.0
2.13k stars 1.41k forks source link

Export room with objects as gltf for use in Spoke #2303

Open johnshaughnessy opened 4 years ago

johnshaughnessy commented 4 years ago

Is your feature request related to a problem? Please describe. People collaboratively aggregate media in a hubs room, but cannot tweak or move this media to a new room later. We have the objects.gltf file for the room, and it would be nice if we gave users a way to export these room objects (with the current scene) for use in Spoke as a new scene.

Describe the solution you'd like A "remix this room in Spoke" button that exports the current room state as gltf or glb and then loads it into Spoke.

Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

Additional context Add any other context or screenshots about the feature request here.

┆Issue is synchronized with this Jira Task

misslivirose commented 4 years ago

Some general thoughts - can we limit this to the room owner being able to export? Should we?

It would be nice to get this in on the earlier part of the quarter since I know that it's a major ask from the IEEEVR folks

robinkwilson commented 4 years ago

Summarizing the discord conversation starting here Contributers @misslivirose @gfodor @blairmacintyre @robertlong

MVP Options

Minimum MVP export .spoke file design by Liv:

Direct transition to spoke

Paste a hubs room url into it and it pulls the scene + assets into it by Blair

Push Specific assets to scene:

Stretch goals:

Issues and frustrating circumstances to avoid

Avoid data loss

Scene sprawl

If we close rooms, links will become invalid.

How does 'scene-owned-entities' work

misslivirose commented 4 years ago

Given the scope of doing this, we're going to push this out of Q2.

jywarren commented 8 months ago

Any updates to this in light of the sunsetting plan, perhaps to allow people to export their whole room in glb/gtlf for archiving? Thank you! ❤️❤️

jywarren commented 8 months ago

Noting the export to GLTF code from Spoke is here: https://github.com/mozilla/Spoke/blob/9fe7af7e0b4eab5908d1ada17c06aab223c978ce/src/editor/gltf/GLTFExporter.js#L617-L664

Including image media object export (highlighted). But, in testing this out, it seems perhaps image objects aren't exported -- they don't seem to be in the resulting .glb and when a scene contains only an image, i get the "e is not iterable" error which indicates it can't find anything to export.

jywarren commented 8 months ago

I didn't actually know though that objects.gltf was generated for every room! I was able to download it for a room I am looking to archive. The URL is simply the same as the room URL but the last string (the customizable one) is replaced with objects.gltf: https://hubs.mozilla.com/ZbPnoCW/objects.gltf

The format is so simple, very nice: https://gist.github.com/jywarren/a2447ae2e236b20b7fe2d57f36f61c7d (this is simplified to show just one image)

So no exporter is required, but the actual images shown are part of a hubs specific usage, not standard GLTF format - so to archive this and make it viewable in a simple GLTF viewer like https://gltf-viewer.donmccurdy.com/, we would have to:

  1. Create standard GLTF image objects, rather than Hubs specific ones (need to find an example file for this - here or maybe this)
  2. Possibly embed the files as data-urls, before Reticulum gets shut down, and to make the room export fully
  3. Possibly combine with the gltf export of the scene?

This seems a little steep a climb for me, but plausible... would others find this to be useful? I'm imagining a web form where you input the URL of your room and it fetches the objects.gltf file, but also offers to convert it to a standard GLTF format so you can view the images in a standard viewer?

jywarren commented 6 months ago

I wanted to note that with help, I found the scene is provided in glb format in every room, and a URL is noted in the console when it loads. However it is named with a .bin extension. When renaming it to .glb (watch for Mac extension hiding issues) it loads fine consistently for all rooms. Moz export tools will also make this available in a bulk interface.