Click or drag to resize

NeoAxis Levels

Scripting OverviewManual / NeoAxis LevelsInstallation

NeoAxis Levels

Contents
Overview

NeoAxis Levels is a system which represent a set of techniques and tools to give the ability to get maximum rendering performance from modern GPUs. This is a complex system, consisting of many different techniques that are put together uniquely, we did a lot of research and creative work in order to get the system.

One of the key components of the system is the virtualized geometry technique, we call it Voxel LOD. The technique allows you to get the best rendering performance at far distances from the camera.

Screenshots below are made from "Samples\Starter Content\Scenes\Levels.scene" and City Demo.

Screenshot999999999999999999999999100.png
Screenshot999999999999999999999999101.png
Screenshot999999999999999999999999999331.png
Screenshot999999999999999999999999999332.png
Architecture

Levels is based on a system of smooth levels of detail, each level of which can be implemented in a special way. Due to the smooth transition between levels, there is no great requirement for the visual identity of neighboring levels.

The image is good at showing the distribution of objects by distance. We are dividing the distance interval into three parts: objects near, in the middle and far. Each of part has different way to get final image on the screen.

LevelsDistances.png
Far distance

Objects at the far distance. The main problem with drawing distant objects is their large number and the number of triangles in each mesh. Usual LOD systems don't give the ability to calculate an acceptable simplified mesh, so this is a problem. The modern world requires a lot of scalability in terms of the number of objects in the scene, and all these objects are mostly at a far distance.

After a lot of experiments, we got Voxel LOD technique, which allows you to most effectively display objects at a far distance. The technique includes tools for voxelizing a mesh and a way to display a voxelized mesh. Each object in the scene is rendered using no more than 12 triangles, which solves the problem of many triangles.

In the real scene by means Voxel LOD is rendering about half pixels on the screen. Shadows and reflections are also optimized to use Voxel LOD.

Voxel LOD only visualization:

Screenshot999999999999999999999999999341.png

Rendering on far distance looks like this (LOD Scale = 0):

Screenshot999999999999999999999999999330.png

Original geometry:

Screenshot999999999999999999999999999329.png
Near distance

Currently, at close range meshes are optimized and packed when imported, although they are drawn like regular meshes. Future engine updates will add support for mesh clustering and other optimizations. Right now at close range the fastest way is to draw the usual mesh via deferred shading.

Middle distance

Objects at the middle distance. There is an interval between near and far objects where it is inefficient to use a full mesh or Voxel LOD. On this interval we use a special LOD, which we call Careful LOD. This is the level of detail that is obtained from the original mesh, with the requirement is to reduce the number of triangles without significant visual damage. Usually 2 such levels are generated, although it is often enough to do 1 level or none.

Screenshot999999999999999999999999109 2.png
Multi materials

An integral part of the system is the support of multi materials. They make it possible to combine multiple materials into one draw call.

On the screenshot you can see a mesh with one mesh geometry, but with several materials.

Screenshot999999999999999999999999102 2.png
Batching and auto instancing

Thanks to the static batching and automatic instancing built into the engine, the system allows you to display both static and dynamic objects very efficiently. It is enough for the developer to use the appropriate components when creating the scene, the engine will take care of the rest. Dynamic instancing uses multithreaded optimizations, which gives good scaling on multiprocessor systems.

Vertex channels packing

When importing a 3D model, the system converts the channels to half or byte8 format, which reduces the size of meshes on the GPU.

Breaking into sectors by distance

The rendering pipeline of the engine splits the visible objects by distance and draws sectors from near to far. This allows to skip drawing those pixels that are not visible.

Scalability by device power

The system includes many options for customization. For example, by changing the LOD Scale you can give more quality or give more speed without changing the scene. The amount of triangles will be significantly reduced.

Screenshot999999999999999999999999106.png
Transparent objects

Transparency is fully supported. For optimization purposes, transparency for voxel LOD is implemented by using dithered alpha clip technique.

Voxel LOD transparency on far distance looks like this (LOD Scale = 0):

Screenshot999999999999999999999999107.png

Original transparent materials:

Screenshot999999999999999999999999999334.png
Future

Next plans are:

  • Improving the system for near camera distance interval. It includes support of mesh clustering, advanced mesh packing, using cutting edge GPU features and other graphic improvements.
  • Animated meshes. Voxel LOD right now not supports animated and dynamic meshes. Technically is possible to update Voxel LOD in real-time on GPU.
  • Support for mobile devices.
See also
Scripting OverviewInstallation