Can I use Armatured Characters in a different .blend file?

Crazy question, I know. I just wanted to know if I can use an already armatured character and put it into a different .blend file. Let’s say I have 2 or 3 different .blend files. Each of them has a character and has an animated walk cycle, different actions through armatures and different expressions through the use of RVK’s. Can I import all three of those meshes along with their RVK’s and armature actions into another .blend that will have all 3 characters interact with each other? Keep in mind that I want to keep the armature actions and RVK expressions of the characters. Thanks.

Jason Lin

You can. For the sake of simplicity, though, I’d make sure that your mesh, object, action and armature names are unique to each character. I’ve had problems in the past with Blender breaking constraints and actions when an appended armature gets renamed because one with that name already exists.

So you can import them into another .blend. Cool, thanks. But would the armature actions and RVK’s of each character still be there? The armature actions are converted to NLA action, RVK’s are still in the same place. Are all the actions and RVK’s imported along with the mesh, or do I have to do that separately? Thanks.

Jason Lin

I haven’t tried it, but my (probably good) guess is that RVK’s will come along with the object. Actions will have to be brought in seperately, but that’s no big deal. I do not know if NLA info can be appended.

NLA strips are part of the Scene data IIRC, so they will probably be imported if you append the scenes.

Martin

And for the final question, HOW?

lol, beau is just reading my mind. It would be great if we could do that in Blender. There should be a way. It would be so organized if all we had to do was create characters in different .blend files with their own unique actions and then be able to import all those characters into one single .blend file. Then we can see how their different actions can interact with one another.

Theeth, if possible can you elaborate on appending the scenes? Thanks.

Jason Lin

Not much to elaborate.
Append (Shift-F1)
Browse to the blend file you want to append from
In the databrowsing, select the scene you want to append

And you’re done, you just appened the scene from the other blend file.

Martin

I don’t know if anyone else works this way, but I posted a set of articles a while back about the way I wanted to work. What I describe in those articles is generally the way I work now and probably similar to what you’re describing. Skip down to IMPLEMENTATION and the few followup responses if you don’t want to read the goals, backgrounds, etc. articles.

Its not without its caveats in that it takes a bit of time to initially get the links to work right. You have to create some dummy mesh/armature objects and link the meshes and armatures from your library .blend files then manually change the links on those dummy objects to link to the imported/linked objects.

Its extra work and a bit clumsy to get setup initially, but works well once set up for most changes you make to your library models. I’d really like to see blender handle this better in the future. But since I like to maintain a high level of organization for stuff like this, its worth the extra effort to me, although I expect it isn’t for a lot of people.

Wow zaz it seems like you thought all this stuff through before. Well, I’m not looking for total organization like that. It might be a bit too much for me. I was reading that post but I didn’t get what you meant when you said that changes to your characters or objects in joke.blend will propogate to those in the .blend file holding your characters. A bit confusing on that note.

Zaz, I like the organization process that you have set up. Great work, Well, I’ll probably be organizing to an extent a little below yours. No generic actions or stuff like that just yet.

What I wanted to do was to simply create a character in one .blend file and have all those actions and expressions in that single .blend file. Then create some other characters via the same process. Maybe create different scenery objects in different .blends as well. Then combine all of them by importing it to one single .blend file. After that, I just simply create the animation with the different characters interacting with one another through their different actions. Hmm, I think I might try the scene appending for that purpose.

I didn’t see where I wrote this and freely admit I didn’t reread the entire thread in detail, :). The idea is to make sure that the opposite is true, i.e. that I can’t change my library characters by working on joke.blend.

Maybe this is the issue I was referring to that you paraphrased, I’ll try to explain it better. A character Stan stored in Stan.blend being used via Link by joke.blend will only get updated when you read the joke.blend file. Meaning if you’re working on joke.blend and your buddy is working on Stan.blend, you will need to re-open joke.blend for Stan.blend to get read to update your linked copy of the Stan character in your blender session.

Zaz, I like the organization process that you have set up. Great work, Well, I’ll probably be organizing to an extent a little below yours. No generic actions or stuff like that just yet.

Yeah, like I said, its probably overkill for most people’s needs and preferences. To bad my house doesn’t reflect the level of organization I like to put into my computing projects, :).

I’m finding that its hard to make truly generic useful actions and even very generic armatures. There are several reasons for this. Its definitely possible to have a generic armature you use as a starting point for an armature for your characters, but because of unique features of characters, limb lengths and other differences in the meshes that require armature modifications, you’re not going to have one armature you just copy for a significant number of characters. Because of these changes in the armatures, most actions end up not working properly because of changes in bone orientations and other differences.

Also, because some things are associated with the Object, like vertex groups and constraints, and not the mesh or armature, making changes to your characters in their .blend files requires you to re-import and link them properly in the files using them to insure the changes you made have propogated. If you actually finalized your characters for a big project, this isn’t too much of a problem. If you’re a newbie like me and am constantly changes things to make them better, working this way causes me to do some extra work, not a lot, but some extra work.

What I wanted to do was to simply create a character in one .blend file and have all those actions and expressions in that single .blend file. Then create some other characters via the same process. Maybe create different scenery objects in different .blends as well. Then combine all of them by importing it to one single .blend file. After that, I just simply create the animation with the different characters interacting with one another through their different actions. Hmm, I think I might try the scene appending for that purpose.

That’s definitely doable, especially if you minimize the number of times you change something after you’ve linked it into other .blend files. You just need to realize the relationships between Objects and ObjData (the actual meshes, armatures, etc.) and then work out your procedure for importing those characters and models intact with their vertex groups, constraints, etc. It’ll take a little effort to get this right the first few times you do it, but its not too bad to do once you’ve worked out your procedure(s).

Thanks so much. Organization would definitely make reusing characters a lot easier. Lol, now all I have to do is create more characters and objects so that I can implement this and see it work.

Jason Lin

I think I understand all of this - but my eyes kind of glazed over halfway through all the discussion…

So, for simple example:

I can create elvis.blend and import him into memphis.blend, and then, if i want to put Elvis into a jumpsuit instead of a gold smoking jacket, I modify elvis.blend, and memphis.blend will update those changes when i choose? Or will it automatically update when I open memphis.blend again?

OR, will I have to re-import (append?) elvis.blend and start all over again? That can’t be right, right?

beau:
You’ve basically got it. However, exactly how it works depends on exactly how you end up importing/appending via LINK and how you’ve structured elvis and his clothes.

The key words here are APPEND and LINK. When you do the File->Append or SHIFT-F1 action, you have a choice to add the models by either APPENDing them or LINKing them (see the buttons at the bottom of the window that appears when you do this). If you APPEND, the items you append are copied from the source .blend file into the current .blend file. They then only change if you APPEND them again.

If you LINK the items from the source file (elvis.blend) into your current file (memphis.blend), only a reference to those items are made in mempis.blend. They will change to the form they are in their file (elvis.blend) when you read your file (memphis.blend).

Another way to think about this in blender terms is that APPEND is like doing SHIFT-D, i.e. a duplicate by making a complete copy of the Object. LINK is like doing an ALT-D, i.e. a duplicate by just making a new Object refer to the same data (mesh, armature, etc.) as the original Object.

For example, lets say you modeled your elvis with a jumpsuit on and imported the elvis via a LINK into memphis.blend. If you then later edited elvis.blend and changed the jumpsuit into a smoking jacket, then the next time you loaded memphis.blend, elvis would be wearing his smoking jacket.

However, how this actually happens depends on how you actually do this and there are quite a few options, not all of which I’ve explored. In elvis.blend, you’re likely to have an Elvis Object which has as its child a Mesh called Elvis. Its important to understand what is associated with Obejcts and what is associated with Meshes, Armatures and other blender primitives.

An Empty is an Object without data/a primitive associated with it. When you add a Mesh to your scene, what you’re really doing is adding an Object that has a Mesh associated with it. When you add an Armature to your scene, you’re adding an Object that has an Armature associated with it. Certain attributes are associated with the Objects and other attributes are associated with the data/primitives.

The exact procedure you use to add Elvis from elvis.blend to memphis.blend makes a difference in how you can use elvis and what is actually LINKed vs what is APPENDed. Also, I suspect, but haven’t played with it that some of the user preferences affect this also.

My procedure for doing this is as follows. I SHIFT-F1 and select the file I want to get the model from. I then go into the Object “directory” of the .blend file I’m importing from and select the armature(s) and mesh Objects I want to import. I then import these via APPEND. Now this actually copies all of the items in their entirety into my current .blend file, but we’re not done yet.

I then rename the Datablocks for those imported objects by adding an X to the names. This is the left most name pull down menu under F9. Check the tooltip, it says Datablock in it. This might not be necessary, but I seem to have fewer crashes when I include this step.

Then I SHIFT-F1 and pick the elvis.blend file again, but this time I click on the LINK button. Rather than importing from the Object “directory” in the elvis.blend file, I now import from the Mesh and Armature “directories”. This only brings in the Datablocks/primitives, i.e. the actual meshes and/or armatures and not the Objects they are associated with. When you do this, you won’t see anything added to your 3D windows as the data you just imported isn’t associated with any Objects yet.

Once those datablocks/primitives are LINKed into my memphis.blend, I then select my armature and in the Editing (F9) panel, in the datablock pull down I switch the armature associated with the object to the one I just imported via a LINK. I then do this to the remaining armature and mesh objects. When I’m done with this, I have new Objects in my file that are copies of those objects from the elvis.blend file, however, the actual meshes and armatures are linked and changes I make to those in the elvis.blend file will be propogated to memphis.blend the next time I open it.

Why such a convoluted way of doing things ? Well, it has to do with how blender manages the data and how it works when you import via LINK vs. APPEND. Importing by APPENDing objects allows you to make any changes to those object you want. This makes sense as afterall, they were simply copied from the elvis.blend file into memphis.blend file and there is no longer any relationship between the two.

Importing objects by LINKing them causes all changes to propogate, however you can’t even move the object or change the actions on the armatures. Pretty useless in most situations.

If you understand how blender actually manages the data its working with, you can get to a middle ground where most of the changes you make in elvis.blend propogate to memphis.blend. However, I haven’t been able to get absolutely everything to propogate because of where certain attributes actually connect.

Remember when you added the Evlis mesh to elvis.blend ? If you started with a plane, you ended up adding an Object called Plane that had connected to it a Mesh called Plane. If you wanted both to be named Elvis (as I would), you had to edit both those name fields in the Editing (F9) window and change Plane to Elvis twice. Well, the left most name there is the name of the mesh. The name just to the right of that is the name of the Object.

Remember that an Empty is just an Object without a datablock (mesh, armature, etc.) associated with it. What can you change on an Empty ? You can rotate, scale, translate, change layers and maybe a few other operations on an Empty. All of that data is stored directly in the Object.

When you have a Mesh in a scene, it actually has an Object that contains those attributes above as well as a datablock that is a Mesh. The Mesh actually contains the vertices and some other data. This is actually part of the problem. Some of the stuff that should probably be associated with the Mesh, like vertex groups, are actually sort of associated with the Object. When you import a Mesh and not its associated Object, you don’t get the vertex groups. That why you have to APPEND the Mesh’s Object before you LINK the Mesh itself and then connect the LINKed Mesh to the APPENDed Object. The same holds true for constraints on Armatures.

That’s why that “extra” step above where I APPENDED the Objects first is needed. If you have no constraints on your armatures and no vertex groups in your meshes, you wouldn’t have to do that step.

Other attributes like materials seem to suffer a bit from the same issue about what they are associated with. So, if Evlis had a blue jump suit and a blue smoking jacket, i.e. the exact same material, you’d be ok. But if Elvis had a blue jumpsuit and a green smoking jacket, you’d have to APPEND the Elvis object again and then LINK the elvis mesh and connect them together. ALternativelyl, you could import via APPEND or LINK the new material and then apply it, but that starts to defeat the whole purpose of doing this.

These aren’t concepts that everyone will grasp easily and blender could handle them better than it does. I hope my attempt to explain this has made it clearer, but I’m afraid I may have just muddied the waters more than cleared them, :).

Nope - for now (erm, abstractively) you’ve definitely cleared up some questions I’ve had. For now.

Wait’ll I start fiddling around with all this information.

Thank you for a very clear, informative lesson. it was very helpful, if at least, in just clarifying what is possible.

I’ll get back to you when I’m actually attempting it, later this week.

Slaps zaz on the back and slips him a beer! :smiley:

%<

/em Gladly accepts the beer even though it is a little early in the day for him to start drinking, :).

what, are you kidding me? It’s after 8am, ain’t it?

Yeah, but its Tuesday to day where I’m at. I normally wait until 10AM to drink on Tuesdays.

Thanks to zaz for his extremely helpful post, which helped to clarify some of what Blender is doing. I’m having a problem in adding more than one character to a scene, however.

I have successfully used the append/link method described by dao to create a scene with a dynamically updating link to a library file containing a character. However, whenever I attempt to append any other object, the first character loses its links to the library file and becomes a static object contained in the new scene file. I can no longer make changes to the original file and have them propogate to the scene. In the OOPS window I can still see the Link object, but the yellow and red squares (which seem to indicate linkage) disappear from the first object’s mesh and materials boxes. The second character I’ve added is still linked, but if I add a third the second loses its link as well. Does anyone know why the links would get lost when I do this?