Team, as you may recall our original goal was to create an app that allowed users to easily create detailed 3D assets. Now, we shelved that in favor of pursuing the middleware development.
Now, we have a new opportunity for collaboration with a great guy we know from local meetups. He wants to do the same thing and is interested in working with us on it (yay!).
Below is our initial dialog - I'll first quote the concerns he had followed by excerpts from the email I sent in reply. Please feel free to chime in:
Our friend commented:
my biggest need is serialization, so that players can undo or rewind work they've done, also the ability to save/load objects and scenes from an online source. Also multiplayer and VOIP need to be done, let me know what you think and if you think you can help out with any of it.
Multiplayer - this is actually being done with Efficio V1 (the WebGL-only version) - there's a live demo out there at abantech.cloudapp.net/SharedRoom
If you go to it with 2 webgl-capable devices with accelerometers (i.e. phones/tablet) you'll see the other client as Ironman (up to 10 can connect) whose movements mirror the device orientation. Note: we built it as a proof of concept (we didn't invest more than a couple hours on it) and the service crashes quite often. I just restarted it now so it should be good for a little while.
For actually WORKING collaboratively (i.e. 2 clients manipulating the same object) I built a shim that writes and reads any changes made to any assets out to firebase.io. It was really fast and incredibly effective because I only sent the relevant subset of data and the shim on the other end would propagate the changes -
it would end up doing,
var changedObject = scene.getObjectByName('cube12345');
changedObject.scale.x = 1.8;
changedObject.position.set(18, 10, 15)
As for object serialization - we done this in threejs quite a bit - we were able to save/load to json/stl/and various other formats - I seem to remember with STL we had problems with the colors coming back the right way though. We're thinking of applying the same approach to clients that use other engines. Having "knowledge" about the scene is requisite for a certain essential feature of our middleware. I feel that we have the core of that problem solved since we already did it for threejs. Depending on what engine you want to work with, we can figure out how to make the same approach work.
I do want to note that for performance reasons, that's not the same approach we applied for the undo-redo.
Finally VOIP - we haven't had much success with it yet but I don't think we've tried hard enough. Fortunately a former member of Abantech is now one of the senior devs at AltspaceVR, and I'm, sure he'd be happy to share insights on how they've managed to do it so well.
Anyway, so there's the smattering of what we've done and I contribute. I'd love to help and to do so I'd like to get a bit more context on your vision for how you intend to implement this - in more concrete terms - so that I can focus my thinking on where my experience and ideas would be most useful to you.
For example - there are several approaches one could take especially when it comes to creating irregular geometries and how to allow people to create them intuitively while still ensuring the meshes are manifold. Micro-voxels vs Boolean Constructive Solid Geometry operations just to start. It's just learning what was the preferred approach you've decided to take to put all these things together (pun intended).
Team, as you may recall our original goal was to create an app that allowed users to easily create detailed 3D assets. Now, we shelved that in favor of pursuing the middleware development.
Now, we have a new opportunity for collaboration with a great guy we know from local meetups. He wants to do the same thing and is interested in working with us on it (yay!).
Below is our initial dialog - I'll first quote the concerns he had followed by excerpts from the email I sent in reply. Please feel free to chime in:
Our friend commented:
Here was my reply by email: