One of the powerful features in Blender is to use data linked from other .blend files. The referenced data is then continually read from that other file and cannot be edited. This is called a linking object data.
When working in a team environment, you may want control users' access to files. For example, if modeling a car, you may have one person working on the shape of the car (its mesh), but another working on available color schemes (its materials). In this case, you want to grant the painter a Proxy of the object and allow him/her to modify the material settings. More commonly, you will have a character being animated by a team of animators; they can define poses, but cannot change the character’s colors or armature, only use what is defined by the master rigger.
The important aspect of a proxy object is that it allows you to edit data locally, but also allows specific data to be kept restricted. Data that’s defined as restricted will always be restored from the library (typically on file reading or undo/redo steps). This restriction is defined in the referenced library itself, which means that only the library files can define what’s allowed to change locally.
Linking object data is a great method for keeping final models, such as props and background scenes, from accidentally being altered while animating a scene, because the objects are protected in another .blend file. It is also good to link characters to keep the original character model and rig preserved.
A proxy object overrides the animation controls of a linked object in a nondestructive way, that permits an animator to work with poses and actions locally. The linked character object retains all its original information and is only locally altered by the proxy object scene.
This diagram shows what happens when you load a character from a library (color red is referenced data).
Note that the pose is part of the armature object. The mesh object points to the armature object, the arrow symbolizes the armature deformation modifier. A linked character setup does not allow any edits to be made.
If we make the armature object with it's pose data local, we have access to edit that new armature object. However, the mesh object's armature modifier is still being protected in the library and is not pointing to the locally copied armature object. So, the linked character will not follow the local armature object.
One way to solve this dilemma is to make the character's mesh object local too. This will fix the modifier conflict, but the benefits to keeping the character linked are lost.
A big disadvantage of this is that the entire pose data isn't read from the library anymore (which contains all IK and constraints too). That means that important rigging updates in the library are ignored. Also, if the character's design is updated in the original file, it will not update automatically in the scene.
It would be much nicer if we could keep the entire character referenced, and define certain parts to become local editable in our own files.
This is what the boldproxy objectbold does. It aligns itself with the referenced object and pose data, allowing to make local edits that will override the referenced data.
Select/activate a library linked object, and press CtrlAltP.
This will add a new object, creates a proxy reference to the library object, and removes the library object from the scene.In the Outliner this shows as a ghost icon ( add icon here).
Synchronizing with Proxies
The important aspect of a proxy object is that it allows data to be edited locally, but also keeps the original data protected and link intact.
Data that's defined as 'protected', will always be restored from the Library (typically on file reading or undo/redo steps). This protection is defined by the referenced library itself, which means that only the library files can define what's allowed to change locally.
- This is work in progress, for evaluation especially in larger animation projects.
- Currently Proxy support now works for other Objects as well, but only for Object transformations (not for modifiers or constraints, for example).
- Proxy support for Armatures inside Groups will be added.