In this document, we will go through how you can optimize your scene to be less performance-heavy.
Aximmetry is rendering in real-time, therefore you have limited time to render each frame you should always keep this in mind at all times.
You can read about our system requirements here.
We strongly suggest testing performance with the same settings as you will be using during the production:
- Same resolution
- Similar camera angles
- Same number and resolution of inputs and output
- Same effects inside Aximmetry
We also suggest keeping the GPU load under 80% to avoid frame drops, because Windows can occasinaly steal some resources.
When creating or loading a model into your scene it is advised to keep its polygon count reasonable. Try not to use raw scanned or sculpted models as they usually come with way too many polygons.
Having some higher polygon models is okay, but they quickly add up in requirements.
Here you can see an example of unnecessary high polygon models:
You can see another example here:
As you can see reducing their polygon count barely made any difference in the shaded view.
Textures also have an important role in optimizing your scene. Overloading your Vram with textures will make your renders very slow.
A few things you should try to avoid
- Using too large textures when it is not necessary
- for example, if an object is far from the camera and you will not zoom into that object using a 4k texture is an overkill.
- Using textures for maps that are uni-colored
- for example, if an object is fully metallic or has an even roughness using a texture is not necessary as you can opt to use the metalness/roughness values instead
- you can also use a Solid Color node to change the base color of your object thus further reducing the Vram used by textures.
- Using 32-bit texture for lightmaps
- using a 16-bit texture is sufficient. More on lightmaps here.
- Using more than 1 channel for masks
- for masking using a single channel is sufficient
When selecting a shader it is important to choose one that suits your needs while not going over your requirements, by that we mean that if you will not use a normal map there is no point in adding a shader that requires a normal map.
By default each shader's transparency is set to None(0) we advise only changing this on shaders that you really want to make transparent as transparent shaders cost much more to render.
Earlier we talked about reducing the number of objects when importing a model to Aximmetry here.
Reducing the number of objects will not only make your work easier but also has some performance benefits on CPU side.
Light and shadows
As mentioned earlier it is advised not to use too many dynamic lights as they are slower to render.
We also suggest that you do not have too many shadows when rendering. You can turn off the Cast Shadow property for some of the lights.
Billboards also require some performance to render them. Try to use only as many as you need. For example, you can put 2 people in a single billboard.
Quality and also the number of effects greatly affect the performance requirements of the scene you can try to reduce the number of effects that are used and/or their quality.
Effects that are expensive to render:
- Blurring - try to decrease the quality or the number of Blurrer modules
- Tone Mapping - check if you need all of them in your scene, and turn off unnecessary effects such as streaks or glares
- Planar Reflections - Try to use them in reduced resolution and limit the number that you use More on this here.
- Antialiasing - Try to lower their number and quality
- Texture manipulations - In the case of static textures, try to minimize the number of real-time operations on the texture. Like resizing, blurring, adjusting the color, generating mipmaps, etc.
You can do all of these with Aximmetry, save the modified image to your hard drive, and use that instead.
In Aximmetry each effect is calculated in every frame. However, most of the time you don't need them to be generated again.
- for example, Blurring a still image shouldn't be calculated in each frame
In this case, you can use a Pass on Change Holder compound as explained here.