Linking and Appending


Posted on Sept. 11, 2020, 11:58 a.m. by crute • Last updated on Oct. 18, 2020, 6:48 p.m.

For complex scenes, Linking is a great way of keeping assets organized and file sizes low. The process of Linking and Appending data in Blender is somewhat cryptic and is thus utilized only by few users. This article seeks to clear up the mysteries of linking and makes its benefits available to all.

On Data Blocks and how a .blend file is built.

Imagine a .blend file like a .zip file. Zip-Archives are containers that can contain any number of files.

Blender Data Block Model

A .blend file is structured in a similar way. If you try to link or append a .blend file, the Data Blocks that it is made up of will appear to you as a series of File Folders.

These Folders are the Data Block Types, to pick but a few examples: Meshes, Materials, Cameras, Collections and many more. These Folders contain the Data Blocks.

A Data Block is a bunch of information that has a particular structure. A Mesh-Data Block for instance would contain the information of how many points the mesh has, at what coordinates those points are located and so on. A Light-Data Block will contain the type of light, it's position, intensity, color.

For all intents and purposes, you can browse those data blocks like you would regular files and pick and chose which ones you want to use.

Blender's Data Block View from the Link/Append Menu

Where things can get a little confusing is in the way that some objects bring along their dependencies, while others do not have any.

Dependencies is just expression for Data Blocks that are required by an object to be complete. If you had a Material that required Textures, those Texture Files would be the dependencies of that Material.

Data Block Dependencies

As an example: appending an Object-Data Block will automatically bring its dependencies along with it, this means: Material Data Blocks and Mesh Data Blocks.

Appending only the Mesh Data Block will not bring the object along with it though.

So unless you know what specific element from a library you want, you should stick with those 3 Data Block Types for convenience's sake: Objects, Groups and Collections.

If you have been a good boy, labelling your scene objects as you went along, your .blend-file should be extremely easy to navigate. Should you have neglected this however, now would be the right time to do it.

One last tip for a "Quick-and-Dirty Append": oftentimes it is enough to just grab all the elements that you want to append and stuff them into a collection. You might want to name it "AppendMe". Cause that is exactly what you will do with it.


Appending:

Simply adds the selected data blocks to the active file. No relationship to the source file is retained. You can access and change every property the appended models have.

The File will also grow heavier, since the model data is actually copied into it

Appending a File Diagram

You do get a few options for the appending:

Select

Selects the objects you appended

Active Collection

Adds the appended objects to the currently active Collection

Instance Collections

If you append Collections, this will put instances of these collections in the scene, as opposed to the actual Collections themselves.

Fake User

Adds a Fake User to the appended elements. You will need to enable this is if you append things like Material Libraries. Without the face user their content will otherwise be removed on saving the file

Localize All

Makes a local copy of everything you append, which is especially important if you append assets that have linked parts of their own. ___

Linking:

enter image description hereLinking will not add the data-blocks to the active file's data but reference them from the source, in other words, it will look them up in their source files and copy them to the RAM on opening the file.

This cuts down on memory footprint, since the linked file's contents do not get added to the data of every scene file that uses them.

It is also very useful to be able to make changes to assets and have them update in all files that make use of them.


For Objects

Create Instance Object

Creates an Empty that the Collection is parented to. Since all changes in position, scale and rotation get passed down through the parenting relationship, you can transform the objects that make up the collection without using "Make Local" or using the Override System. All other mesh properties are still unchangeable. Perfect for props and objects that have no rigs.

Make Local

As the name suggests, Make Local gives the ability to keep certain parts linked, while appending others to the file and allowing local changes. This is the preferred method for non-armature objects, as it keeps them unchanged.

Make Local comes in 4 Flavors:

Selected Object:

Only localizes the Object Container, which will give you Translation, Scale and Rotation, but will keep all other Data blocks linked to the source file.

Selected Object and Data:

Same as above but also localizes Mesh Data, so the Vertices can be edited. This will break the link to the source file and prevent any changes from the original to override the local changes.

Selected Object and Data and Materials:

Same as above but also localizes Materials, so the Shader Nodes of the objects (surface properties and textures) can be edited as well. This also prevents Material changes from the source to transfer into the localized instance.

All:

Just what it says: makes all Data Blocks local and is thus equivalent to appending the object to the file.

Object > Relations > Make Local


For Collections

Instance to Scene

Creates an Instance of the linked Collection in the scene. This is transformable. Since Collections are not Objects, this is the way to get control over a linked collection.

The original of the linked Collection cannot be moved and should thus be hidden. We suggest digging a deep well to toss all the linked collections into, so they are out of sight and out of mind. Maybe creating a collection and turning the visibility off will yield comparable results.


For Rigs

Make Proxy

Make Proxy's main purpose is to be used on armature objects. To prep a rig for importing, all controls should be bone-based and the armature with all meshes, helper objects like Empties or Bone Widget Shapes be made part of a group.

The Armature Visibility should be turned OFF.
The reason for that is, that the proxy that will be created will be visible and this would result in a second visible rig.

If you use the Make Proxy command on a non-armature object, the resulting object will lose its modifier stack. While these can be added in the linked file, making the object local is usually the preferable option.

Meshes are appearing that are seemingly unrelated to the model

If those meshes look like a bunch of edge-rows and have no faces, these are most likely the rig Custom Bone Shapes, also known as Widgets. These are what Blender will replace the Default Bones Shapes with on your rig, so your controls look nicer. They are safe to hide and delete. Keep them, if you want to be able to make modifications to them later.

One more important thing to mention about Linked Content is this:

Any change that is not keyframed in your Scene File will be overwritten with information from the Linked Library File. So if you link a character and pose it, but you do NOT keyframe the bones' Location, Rotation and maybe Scale, those changes will, on re-loading the scene file, get lost and your pose will be reset to the rig's Rest Pose.

enter image description here___

For the Future

Make Library Override

The Library Override System is supposed to supersede the Proxy System. It will offer more finely-grained options in linking files and locally overriding specific properties.

At the time of this writing, this is still considered experimental, but works in a great many parts already.