User Tools

Site Tools


Sidebar

hpl3:engine:static_objects

Static Objects


General

Static objects are placed in the editor in the static objects edit mode. Static objects are usually the performance wise the best objects since they are combined when the level is loaded. What happens is that the engine will look for nearby objects that share the same material and settings (shadows, collider, occluder, etc) and combine these into a single mesh. This heavily reduces the number of draw calls the renderer has to do and thereby speeds up the rendering. Because of this, it is important that static objects that are often nearby one another (walls of certain type, pipes, etc) all share the same material. So it is often good to have a really big texture that is shared among many objects, up to as large as 4096×4096. It is important to not get carried away with this thinking though. First of all large textures may take longer to render and thus it can slow down if it does not reduce the number of draw calls enough. Also important to not have things that are almost always separate (say floor for a corridor and ceiling used in an office) on the same texture, because that will only bring up the memory requirements as part of the texture might not be used on certain levels.

Collision

For most of the time, collision is automatically generated from the mesh of the object. This works fine for most of the time and when possible it is wise to spend a little less polygons a on an object with collision or to let more detailed (non-colliding) parts be in a separate object. The physics material of a collider generated this way is determined by the material (.mat) file that the mesh has, so make sure to set this up in the material file for all static object materials!

Sometimes though, the poly-count cannot be reduced enough (like in cylindrical shapes), or the collision needs to be different from the actual geometry (like a stairs, where you want a slope for characters). Then you need to add custom collides, this is done by adding a .ent file for the static object.

Entity File

<note>NOT YET SUPPORTED</code> Static objects support having a .ent file, but this is not needed. The engine will check if there is an entity file with the same name as the model (eg, if “wall.dae” has “wall.ent”) and if so load it. The only thing loaded from this file will be the bodies and all bodies will be given a mass of 0. Anything else will be ignored. Also note that the material of the bodies are now determined by what is set in the ent file and NOT of the material (.mat) of the mesh.

hpl3/engine/static_objects.1332163400.txt.gz · Last modified: 2012/03/19 13:23 by thomas