Message Bus for external Applications
A simple message bus would be nice to have for interaction with other programs:
The protocol could be json, because it is already a part of python and easy to implement. the messagebus server/client part should be under freebsd licensing so companies won't fear to push blender to the front lines.
The client sends a simple request where it wants to be subscribed (like a single object, material, scene, context, value, etc.) and can change its mind over the whole session.
Most of this is doable in python, but in more heavy scenes, python will be the bottleneck for low latency synchronisation.
Maybe a preprocessor could read all implemented DNA+RNA to enable serialization of the c implemented variables for json.
Additional Flags could enforce "exact tcp transfer"(object names as example), "interpolated udp with some loss"(positioning as example) or different types of sending rates (every change, every big change, every X frame)
Examples to use:
livelink with game engines like unity3d, unreal or crytek engine (camera, animation curves, scenes, pbr materials)
collaborative work with other blender instances depending how DNA+RNA is implemented (read/write, maybe blocking actions if someone is doing something (like being in edit mode in one object blocks the other user to be in the same object)
- telling, that blender instace A saved a *.blend file on the network drive for blender instance B to open
- collaborative grease pencil (everyone can pick own colors to differ from eachother as example)
- moving/editing different objects in a scene at once
- changing material changes live
telling other gfx software (or blender) to update or do things like the livelink stuff of gameengines
mo cap live preview (telling blender camera movement and/or actor movement)
for subscribing and unsubscribing:
msg_subscribe
{
context.scene.camera.location,
context.scene.camera.rotation_euler,
context.scene.camera.lens
}
#unsubscribing:
msg_unsubscribe
{
context.scene.camera.lens
}
mutex on object to make object non-accessible to prevent simultaneous editing:
msg_mute
{
data.objects["foo"]
}
sending "p-frame" where the client subscribed to camera.lens and camera.name but only camera.name changed:
msg
{
context
{
camera
{
name="newname"
}
}
}
only halfway related:
- allowing to stream video to blender for the real life cam would be the icing on top (in the texture category).
2 Comments
Anything for a Livelink I'm voting for. A+
@ondraise15: was my initial request, but then i realized, there is so much potential to it xD