Setup

The whole package is contained in the Mirage folder resulting from the import but you can move it wherever you want.

What is an impostor

An impostor or imposter is a dynamically rendered billboard texture map used to stand in for geometry in the distance.

In Mirage context, you can have as many objects as you want in a single impostor, and all the the points of view are stored into an abedo map and an optional normal map atlas map per impostor. Smoothness, metallic or occlusion are not baked into textures but are still customizable on post baking options.

How to use

Basics

Mirage consists in a single editor window. You can open it via Window->Mirage->Impostors.

Image 2024-02-06 164734156.png

For a simple on-click impostor approach, drag and drop the common ancestor in the Target field. Note that if you want to bake only one object the common ancestor can be the object itself or on one of its parent. .

Click on the Generate Impostor button and wait a few seconds. your object should now have a LODGroup attached / updated, and the impostor should be instantiated as its children. Try to zoom out to see the LOD transition between the original object and its impostor.

Advanced

The provided scene BakingScene-Default is automatically loaded in the Baking Scene object field. Note that you can use your own scene, the only constraints are the presence of an object named "Target" and a main Camera with the script ImpostorTexturesGenerator attached.

If you are using URP, you must also fill in the UniversalRenderPipelineAsset and the UniversalRendererData fields at the bottom of the camera impostor.

The provided scene is the recommanded one for high-fidelity results, but you can modify the lighting settings or add objects in the scene to achieve some interesting result. It's up to your imagination!

  • You can change the generated atlas size with the Texture Size popup. The estimated size below gives an idea of the full impostor (Albedo atlas + Normals atlas + Billboard) size on the disk after DXT1/DXT5 compression.
  • The atlas is baked following a sphere vertices coordinates. Currently, two types of sphere are available.
    1. UV sphere: The default choice. The UV sphere is based on a constant number of longitude and latitude samples. The coverage is denser at the poles.
    2. Pseudo-Fibonacci sphere: at an experimental stage. Provides a homogeneous coverage. Not compatible with latitude interpolation in the impostor shader.
  • The Optimization info panel is some read-only information to help understanding the coverage and the atlas layout.
  • The LOD Group Settings panel contains the settings of the upcoming LODGroup. If you don't want to setup any LODGroup and just bake an impostor, you can uncheck the panel toggle.
  • Impostors baked as prefab only. You have to enter a valid output path (i.e. child from the Assets/ folder). A preview text will display the full path of the upcoming impostor.

Post baking improvements

If you select the impostor object in the hierarchy, you will see that the shader has a few parameters to improve the fidelity.

  • The Brightness slider can increase/decrease the albedo power.
  • The Smoothness/Metallic/Occlusion sliders work the same way than the default diffuse material.
  • The Curvature Occlusion slider applies an additionnal occlusion in rifts, sharp inward angles.
  • The Cutout slider can increase/decrease the sharpness of the alpha clipping geometry.
  • The Smooth toggle turns On/Off impostor bilinear interpolation smoothing.
  • The Dithering Fade toggle turns On/Off Dithering fading on the edges of the impostor.
From left to right: The original model, smooth enabled, smooth disabled.
  • The Yaw/Elevation offset sliders is the way to virtually rotate the object.

Lit / Unlit

By default, impostor shaders are rendered lit. You can change this for a provided unlit shader.

LODGroup Management

If you tick the toggle 'LODGroup Setup' in the editor window, the impostor will be part of a LODGroup when the baking process ends.

From there, there are 3 possible scenarios:

  1. The target object is not part of a LODGroup : It will be created with the provided settings.
  2. The target is already part of a LODGroup in which there is no impostor : the impostor will be added in last position with the provided transition height value.
  3. The target is already part of a LODGroup in which there is already an impostor : The impostor will be replaced.

Tip: if you want to add an additionnal impostor in a LODGroup instead of replacing it, just delete the ImpostorReference component on the LODGroup holder before baking.

Presets

You can save and load presets by pressing the buttons "Load Preset" and "Save Preset" respectively. It will save/override the following settings:

  • Resolution
  • Latitude Samples
  • Latitude Offset
  • Latitude Angular Step
  • Longitude Samples
  • Sphere Type

How to bake several objects at once

Since version 3.4, there is a new component called "AutoLODImpostorsQueue". Here is how to use it:

  • Create an empty GameObject in the scene.
  • Add the component "AutoLODImpostorsQueue" from the bottom of the inspector.
  • In the script editor, you can fill the array with the objects you want to bake.
  • Click on the "Show settings" button. The AutoLOD Impostor window will dock next to the inspector.
  • Tweak the settings as you want.
  • Come back in the queue inspector and click on "Generate Impostors"
  • Take a coffee while your objects are baked automatically

Warnings:

  • Baking a lot of objects at once may take a long time (depending on your settings and hardware)
  • Don't try to interrupt the process. It could lead to a corrupted scene.
  • Keep the focus on the unity editor.

Contact

chaumartinleo@gmail.com

References

https://www.gamedeveloper.com/programming/dynamic-2d-imposters-a-simple-efficient-directx-9-implementation

https://calcifer.org/kenneth-christiansen/ComputerScience/imposters.pdf

https://developer.nvidia.com/gpugems/gpugems3/part-iv-image-effects/chapter-21-true-impostors