Append or Link: Slows BGE Down?

Hey, I really like the idea of appending to other blender objects - but does anyone know if it will slow down BGE if I make separate blends for each object (space ship, planet, rocks, etc) and then just Append them into one master game blend that calls them all out?

I like appending because it is much easier to just edit that one part in its own blender window/textures/etc, then your “Master” game blend just calls out and grabs each object to assemble the game (rather than having to edit a hundred objects in one blend file).

Does this cause any problems when you make a runtime? Thanks guys

:spin:I’m actually unsure of what you mean.

By appending do you simply mean having multiple objects in a different .blend? Then when you put them all together, import them from other .blend files in realtime?

If so, to my knowledge that would be possible only when it is not in realtime. Currently there is no way in blender that’ll allow a master .blend file to call objects and load them from other .blend files in realtime.

The only way of running other .blend or .exe files is only by switching to them. So let’s say you have object A in blend1 and object B in blend2. blend1 cannot call and load an object from blend2, it can only switch to blend2 and only the object in blend2 will be shown.

Well, I hope I am wrong, since I’ve been wanting to do that with blender since the beginning.

Jason Lin

Hey goldentaiji-- Yea that’s what I originally thought too, until I was playing around with File>append>object … it seems to work like this: If you are in blend1 you can do File>append>object and it will read in any object you want from blend2, you can save bland1 and when you reopen it, it re-reads in the object from blend2 (with any new changes).

This is why I’m confused because I didn’t know you could do this, it looks like blender opens up a copy of the appended object at startup (you can’t modify the object, only move it btw).

So in a sence it does work like as “master” blend file… Does ANYone have any experience here lol? Seems like us two are baffled? :wink: lol…

Thanks guys

What you’re doing is actually called linking. You can select whether you want to append or link in the append menu. However, I don’t have any experience how it affects games.

This is helpful, I didn’t know you could have a master blend like that. I knew it was missing one. I had been going the long way… (exporting .3ds, importing .3ds) and it didn’t always load. And from my experience with other game engines, it doesn’t really effect the game. The only true effect that it has, is the effect of adding more vertices.

Yournamehere- Good point, that’s what I was thinking too, since you can’t modify the object mesh that you are Appended to, it would stand to reason that the Master blend just reads in the vertices and textures and doesn’t slow it down, since it only reads in the objects at startup.

Still… Does anyone know anything about this method in making Games? I think I’ll experiment with this tomorrow if no one else knows much, I’ll post my findings tomorrow…

Oh and PSK131 that’s what I thought too, that you should have to Link the object, but I’m not, I’m using Append. The difference is that Link takes the blend object and puts it in the exact same place as it is in the other blend file and you can’t move it. With Appaned, it just loads the vertices /textures of the object and you can move it anywhere in your Master blend you want to (but can’t edit it still, unless you explode it obviously)…

I still think you’re using Link or maybe we are not talking about the same feature. In File / Append or Link look at the lower edge of the file browser. There’s a switch which determines whether you’re using append or link. If I select append I can edit the object because append creates an unique copy. Now if I select link I can’t edit it because it’s an instance of the master object. That’s at least how it works in my Blender 2.45.

APPEND NOTES:

  • No decrease in BGE framerate from using Appended objects
  • Brings in all of object’s UV textures and Logic bricks {Complete object}
  • You can tell an object is Appended by pressing F9 and looking next to the [OB:xxxx] box, there is a little yellow “Li” symbol that shows the object is linked to another blend file (and will update changes at blend startup)
  • NOTE: sometimes when you try to Append the object it won’t show up with the yellow “Li” symbol, if it doesn’t then delete it and re Append the object to try again until the “Li” symbol appears
  • If you don’t want it to be Appended to another blend file and just want to get that object, you can uncheck the “Li” symbol and it will now allow you to Edit mode the object (but will no longer update at startup)
  • You can either add Logic to the object blend file and when you Append it, its logic will stay attached (e.g. some rotation or IPO) – Or you can add Logic to the Master blend file after you Append it in (useful if you want to re-use the object, but have it do different things… like people walking different directions etc…)

Unless anyone has a reason not to make a game this way, I would say this is By Far the best way to make a game. Make all your objects (people, cars, buildings…) in separate blend files, store them in a directory, and then make a Master blend file that brings in all your different objects via Append… This way if you want to edit a squad car (eg.) you just have to edit the Squad_car.blend file and it will update ALL squad cars in your master blend!

PS. I think this is how blender was meant to work, so I don’t take credit for any “discovery”, I’m sure there are plenty of people who already know all this… but for the rest of us…!! :wink:

As I said in my previous post, you’re mainly talking about linking, not appending. But anyway, it’s good that you mentioned this subject. I find it very useful for my large project in which I have to separate the game to multiple blends because it won’t fit memory at once and scenes can’t be used because of the memory leak. It would be cumbersome to edit the same model in every blend it is used in.

There’s just one problem: I can add logic only to the master (model) blend. I can’t add logic to instances (in game blend) of the object unless I make the object local, but after that it no longer reads the modified mesh data from master blend. It says: “Can’t edit external libdata”.

Hey PSK131, this is good you mentioned large game projects, how do you separate the game into multiple blends? Do you call out to different blends instead of changing scenes? I was planning on using scenes for my game (6 different levels), but how do you do it???

And I agree with you PSK131, that it “should” be Link, but you should actually be using Append for what we want… hear me out since we’re in the same boat…

LINK: brings in the object in the exact location it is in your (model) blend, you cannot change it eg. by adding Logic bricks (as you discovered) or anything else. It is simply a “link” to the other blend (model) file.

APPEND: at startup loads in your object (model blend) with all vertices, UV textures, logic bricks, etc. and places it as a “Non mesh editable” object in your game blend. You can, however, add Logic to this to make it do unique things.

OK about the Logic bricks on the APPENDED model, it seems that Logic bricks are the one and only thing that somehow does not update with the model… You CAN however, just disconnect the Actuator from the Sensor to make the Logic not execute. But unless it’s a Logic that all the objects will do repeatedly and the exact same way, I would suggest just putting the logic in the Game blend… Or better yet just use Python AI.

Ah, now I got it. You’re apparently only linking the mesh. This way you can add custom logic to every instance of the object and move it freely etc. What might confuse you is that if you first LINK the object or mesh and then delete it, it stays in the blend (check Editing buttons / Link and Materials). Next time you APPEND that same object you can’t anymore edit the mesh because it uses the linked mesh.

I suggest you try this: create a new blend (Ctrl-X). Go to File / Append or Link. Look at the lower edge of the file browser and verify that Append is selected. Load your object. Now it should be completely editable. Save it and load your model blend. Modify the model and save. Load game blend again. Notice the model hasn’t updated. That is how append really works, but as I said you can link only the mesh so that logic is editable.

About the multiple blends: instead of one level = one scene, you could use one level = one blend. This way you don’t have to worry about the memory leak. Using scenes might be easier if they all fit in the memory at ONCE (you have to test it by loading every scene one after another when game is running) and if the game is linear (player can’t go back). Some time ago I wrote a simple script for changing blends. Check this thread for more info: http://blenderartists.org/forum/showthread.php?t=109527

Well the game I’m working on starts off with a menu where you can choose to play 1 of 6 levels, after you play that level you go back to the menu to see if you want to play another level or not. In this case do you think the memory leak will occur/cause slowness??

Yes I am selecting Append, and I am selecting Object (not mesh). Hmm this is interesting, I think there are many ways to use both Link and Append, you’ve found one way and I seem to have found another… Very useful features nonetheless.

Depends how big your game is. You can monitor its memory usage in Windows from the Task manager (Ctrl-Alt-Del). Remember that every scene stays in the memory, so if the player really loves your game and plays every level ten times in one session :stuck_out_tongue: and each scene takes 20 MB (propably much more since the basic cube scene with six polys takes already 20 MB) the game will eventually reserve 1200 MB of RAM. I’m afraid even Crysis doesn’t steal as much memory.

Lol, this is just way too confusing to me. I agree with PSK131 though. By terminology that is what “LINK” means and what “APPEND” is supposed to mean.

Heh, to clarify all this. Can you just provide the .blend files?

Jason Lin

PSK131- yes this would deffiently be a huge problem for my game, the player will no doubt be playing each level multiple times.

Can you discribe in more detail what you meant by having different blends that are called out instead of scenes? Does it work in when you make a Runtime as well?? Thanks PSK

Runtimes work as well as blends. Just change the filename in the script to match your .exe file. But it’s better to use blends and blenderplayer because blends are much smaller and OS independent. Here’s an example how to change blends:
http://users.tkk.fi/pkangass/blender/setscene_mem_leak_workaround.zip

Ahhh cool thanks-
So this is widely accepted as the Best way to change scenes without causing a memory leak? Just making sure this is the best way because once I start making the game using this method it would be hard to change to a different way of changing scenes.

But thanks again man…