Install

Four steps to a character on screen. UE5.8+.

1. The plugin

cd YourProject/Plugins
git clone git@github.com:Vaei/GradientTool.git
git clone git@github.com:Vaei/MobFort.git

GradientTool is required, not optional - the diffuse falloff and both rim palettes are gradients.

Rebuild, open the project. A Fort button appears on the level editor toolbar.

2. A panorama

Point SpecPanorama at an equirectangular HDR image. This is every reflection in your scene, so pick one that matches the level's sky.

Mip generation must not be NoMipmaps. Roughness picks a mip, so without a chain every surface is a mirror at every roughness - and the material still compiles and still renders, so nothing tells you.

Set MaxMip to roughly the mip at which the image is a few pixels across. For a 2048×1024 panorama that is about 8.

The plugin ships a flat 4×4 placeholder so a fresh install compiles. It is grey, not broken.

3. The sun

Fort → Sync Sun From Directional Light. It writes your level's directional light into MPC_FortLighting and saves.

Better, if you are staying on this renderer: install ForwardRender and it ticks the sun in for you, as well as loading the editor in mobile forward preview. Settings here.

Nothing in MobFort reads a light actor - the masters are Unlit, so the engine never hands them one. Until this runs, rotating your sun changes nothing on a character. Run it again whenever the sun moves, or drive the same two parameters from the level Blueprint if it moves during play.

4. A character

Instance M_FortCharacter and set three textures: BaseColor, Normal and CRM. Tick bUseCRMTexture.

Duplicate the instance and tick bEnemy. Ally and enemy are two instances rather than one instance with a scalar, so only one rim gradient ever compiles.

What to expect first time

Everything is flat greythe placeholder panorama is a uniform 4×4. Step 2
Everything is blown out whiteSpecularScalar against a bright HDR. It defaults to 0.12 for a reason; go lower before going higher
Everyone is pinkskin. See If it is wrong

The Fort menu

Everything here is also a Python call, but you should not need one.

New Character Atlas…copies GA_FortCharacter so a character can have gradients of its own
Open <atlas>one entry per Gradient asset in the project
Sync Sun From Directional Lightwrites the level's sun into MPC_FortLighting
Open MPC_FortLightingscrub Indirect and every character follows live
Open <master>the three masters
Verify Contractasserts what the cost page claims. 47 checks, Output Log
Rebuild Materialsre-authors every asset from author_fort.py

Hide it under Editor Preferences → Plugins → Mob Fort Editor.

Rebuild Materials is maintenance, not setup. The materials ship built - you only need it after editing the builder or the gradient row list. Each asset is emptied and re-authored in place, so instances keep their overrides, but anything hand-edited in those graphs is lost.

Sanity check

Fort → Verify Contract. 47 claims, results in the Output Log. On a cold derived data cache run it twice - the first pass reports permutations nobody has compiled yet.

Every parameter →