To take your mind off the bad news...

I have had this idea for a little while and wasn’t going to bother given the news, but what the hell… I think it is possible to “groupware” Blender. Why? Well for fun mostly so that you all could join in on group productions, maybe speed-contests. The idea is that a new project is established and you each get assigned a layer in blender. There would be a mechanism to send your layer to a server and read back other layers, in order to sync-up your local file. In this way up to 20 people could participate in a group project. Good idea? By all means trash it if is isn’t! Details to be worked out but I think it’s possible with an external utility to dig into the Blender file directly and some Python script to maintain overall control.

PS: This has nothing to do with distributed rendering I have seen mentioned elsewhere and which I thought had been all but bottom out in the old forums (conclusion: not feasible).

Sounds cool :slight_smile:

Stefano

yes, groupware is (or was?) possible in blender, you have the layers, scenes and the ability to use library blend files. this way each user can work “in his own file” and if that is reloaded as a library the objects from the library are updated. so for example instead of a car you can load a simple library file with a box and work with the box until the car is finished and then simply “overwrite” the simple library object with the car.

Nice idea, working toghether is hard. But working by yourself for a common goal is not :smiley:

I was thinking of starting a project called ‘blender city’ awhile ago. Anyone who wanted to could make a house and I’d add it to the city. Of course there’d have to be restraints on polycount, materials, lights etc. Never got around to it though, perhaps it’s worth digging up?

  1. pofo

edit: will set up separate thread

yes, dig it up! that is a way cool idea :smiley:

and after people have built their houses, they could go back to the town planner and apply for more work and end up with a job building the local convience store/park/etc… :slight_smile:

do it! do it now!

Not on my usual machine at the moment but I think when using other blender files as libraries the selected elements are imported not linked, ie, if source subsequently changed then you would have to re-import it. Anyone know? This could still be part of the overall mechanism but there is more required, eg, knowing the latest status of each layer, sending an update (maybe replacing the save operation), possibly a token passing scheme to hand over a layer to someone else. I’m sure there would be a lot more issues to iron out, on both the client and server side, but the idea seemed an interesting one and entirely possible at first glance. So throw any ideas/ info in and we’ll just see if it gets anywhere.

PS: VCS might be a source of related ideas, but AFAIK it in itself does not allow multiple users to work on one file.

CVS (Concurrent version system) allows multiple users to write to a single file. I’d be interested to know how you want to try to lock layers and stuff tho :).

ok, i think im lost, :smiley: it sounds complicated but im sure its juyst me =)
are we talking about a group project, in which each person of the group has his own layer to work in? and then at the end, we put them all together to make a killer cool picture? =) if thats what this all means, then that sounds awesome!

@Vidigiani - I don’t think I said “lock” did I. May have inferred it so ok, here goes. No need to lock! Just accepting that if you did something in another layer that it would get overwritten when you next synchronised. This may be ok in that it does not stop you using other layers as temporary workspace :smiley:

@imgranpaboy - yeah but being able to “synchronise” whenever you want so that everyone involved can see the results coming together as they happen.

The tricky thing is how do you destinguish between layers? The .blend file is binary, so if you give person A layer 1 and they modify layer 2 for temp data and person 2 who owns layer 2 also modifies layer 2 how do you synchronize the file so that person A’s changes to layer 2 are overwritten by person B’s during checkin.

You almost have to have someone managing a master .blend. You can put a read only copy somewhere and people go work with that. They make changes to their layer, check it in to their own .blend file. Then the manager takes the layer and imports it into the master .blend and updates the read-only image.

BTW… not trying to be difficult. This is definately something that can work. I am just trying to point out some issues that need to be addressed :slight_smile:

Could this be mostly automated with some python stuff?

Note: I don’t know what I’m talking about - I haven’t even used scripts, let alone written them…

@Vidigiani - I know your not trying to be difficult and welcome any and all comments. Now that I know that the Blender file is a dump of C/C++ structures/objects then the server element could reconstruct (in theory at least (for now)) the master file. Here’s an outline of where my thoughts are going…

  • You download the master file (initially empty) and possibly an external utility (still thinking)
  • Do the work in the layer assigned to you
  • Instead of saving run a supplied script (aka the “sync-script”)
  • The sync-script saves the file and sends it to the the server
  • The sync-script polls the server for an updated version
  • The sync-script downloads it and re-opens the file
  • User carries on as normal

On the server side, when a file is sent for synchronisation, then only the layer for that user is extracted and updated in the master file. Remember that a Blender file contains all(?) the current status info, including which layer an element lives on, so along with a relatively small amount of admin info sitting on the server for a particular project, it should be possible to maintain the master file. Note that there is a PEARL script to directly read Blender files. From this and by putting our collective heads together all the above is possible (ok, I’m 99% sure).

PS: I have to admit giving up learning Python when NaN went under so any Python heads please feel free to chip in.

About the Python side of the thing, we have the dyshelve.py module (which was made for Dynamica, but available to anyone if requested) that can save the data separately, and I already have a code structure that saves NMesh data to disc, so maybe that process can be automated, with Clients that would feed their meshes to a Server, and a server that would recombine them. Mix that idea with the other thing I said in the Blender City thread, and you’re good to go.

Martin

Thanks Theeth! What do you think of the idea, is it sound/ useful. I’d be interested to see what could be produced with a few blender heads in a speed test on that sort of set-up.

Re the dyshelve.py can you explain what it does a bit more?

Basicly, dyshelve is a high level module based on the Pickle module distribute with Python. It has its own type of object which take care of saving, storing, synching and loading data. This object works like the dictionnary object type, with extra methods like forced reload, flush and some other database stuff.

If you don’t know what the Pickle module does, I’ll try to explain it really quick. It enables you to save Python variables (and objects) to disk.

I didn’t like the interface of Pickle that much, that’s why I made dyshelve. It’s much easier to use and has mure more features.

Martin