Rendering outdoor scenes is one beast to tame. Rendering indoor scenes is an entire different beast. There are a couple of problems with this kind of rendering so a special work batch about optimizing this case has been conducted. The main problem with this kind of scenes is the lighting. In outdoor scenes there is often only one light source, the sun. This is a very simple case and easy to get working fast. Especially if you use lots of light sources without shadow casting. But indoors this is not possible. An indoor scene without proper shadow casting is up for troubles. In one of the last articles we already presented this problem in depth so no more words required here. Various lighting approaches have been tested out and a good solution found. For this a couple of changes happened also to the engine itself.
Semi Point Lights
Spot lights are simple to do but ceiling or wall lights are tricky. They cover around 180 degree of a scene and are therefore not doable using spot lights. A simple solution are point lights but shadow mapping a point light is a problem. But for precisely 180 degree lights there exist solution as mentioned in the article. For this purpose a new light source has been added the semi point light. This is a specific 180 degree oriented light which allows the Graphic Module to optimize this common case. To further improve the lighting the attenuation system slightly changed. The old attenuation exponent had some nasty properties which could be difficult for a mapper. The attenuation function has been slightly changed to allow now to control a light solely by the light range ( beyond which light is 0 ) and the half intensity distance. The HID is given as the percentage of the range instead of an absolute value which makes it simple to tweak for specific lighting setups. To support the mapper a new scrubbing tool has been added to the editor. Object properties which affect lighting can now be in addtion to the manual editing be edited using a scrubbing panel where all parameters are located. This allows to scrub the properties while seeing the effect directly in the editor. Furthermore a typed edit field has been added to edit composed properties better ( for example a color is a property with value "r g b" but in the typed field this is edited as an actual color ). The following images show a test scene with some props slammed in for testing purpose. The new light source is fully working with solid and transparent shadows. A total of 11 semi point lights with shadows are in this scene.
Visibility Meshes and Occluders
Another important aspect is culling not only for indoor scene but there especially important. The visibility meshes attachable to terrain meshes have been improved. They store now a portal system consisting of occluders, portals and rooms. The visibility mesh is not mandatory but improves performance quite a lot. The engine uses now these vis-meshes now also for software culling objects and lights. There exists the possibility of using hardware culling ( so called occlusion testing ) but it is too slow to be usable. The culling used in the engine is fast and culls objects quickly by testing them against occluders in the scene. Only if they are fully occluded by at least one occluder they are dropped. This misses some objects but is a lot faster than complex culling algorithms. In upcoming work the rooms itself will be used too to cull objects. This is going to help especially culling lights. The images below show a sample visibility mesh of a couple of terrains as well as a test render showing how the occluders work. These visibility meshes are of low face count and can be quickly set up by the mapper. They are only intended to roughly bound space and can be build in a matter of minutes.
All the changes explained in the articles are not mentioned here. No need to duplicate stuff. Some smaller things changed too which are though not enough for an own section. On one side the animator rules have been improved what goes for the bone rotator rule and the animation difference rule. They provide now more possibilities which come in handy for procedural animations. Furthermore a new rule has been added the sub-animator rule. This is a powerful addition which allows you to include another animator as if it would be a single rule. This allows to create generic animators and reuse them in other animators to create complex animations. The Epsylon project uses already this system which allowed us to reduce the complexity of the individual animators which enables us to create a lot more animations without loosing too much production time. The last update concerns the normal mapper tool.
DENormGen Release 1.6
The normal mapper did not get an update since quite some time. This had various reasons and one of them is that the normal mapper tool will be included into the DEIGDE as an own editor. This allows us to use the powerful features already in place like real-time preview, virtual file system straight from the game, unified user interface and working natively with game file formats. But until this happens the tool received a little update. Here the Changelog:
- improved quality of generated normal map
- modified the algorithm to produce nearly optimal normal maps without requiring to set up complex cages ( backface limitation check )
- added a little hack to the export script to avoid waiting very long for exporting ( normals/tangents not required on highres while exporting )
- adjusted export script to work with newer blender versions
- border pixels are now extended by 8 times to avoid mip-map problems
The quality of the produced normal maps is now a lot better than before without requiring to create complicated cage meshes or other fancy tricks usually required. You can
Upfront is more optimization work on the rendering. There are still a couple of tricks left to improve the render performance. Also the terrain rendering is going to be optimized. There's still room for improvement. Once this is done a new and for me very interesting topic will be dealt with, one which ( if working as expected ) sets this engine apart from the rest. But more I'm not going to tell yet. Stay tuned for more.