Masters

Every parameter, and what it is for.

M_FortCharactergradient diffuse, rim, skin, distance response
M_FortWeaponweapons and hard-surface props. Smoothstep diffuse, no rim, no skin
M_FortBaseanything else. The shared responses and nothing else

Textures

ParameterWhat
BaseColoralbedo. Its alpha is the emissive mask
Normaltangent space
CRMCavity, Roughness, Metallic
SpecPanoramaequirectangular HDR. Every reflection in the scene
Atlasthe gradient atlas. One per character if you want

Three textures plus one shared atlas, which is the budget a character gets.

There is no specular channel - the level is the inverse of roughness. There is no ambient occlusion channel either: cavity is micro shadowing, the crease between two plates, and it multiplies colour and specular rather than acting as occlusion. That way the same texture serves a lit master in the same project without a baked occlusion doubling with the renderer's own.

Features

SwitchDefaultWhat
bUseCRMTextureoffread the pack. Off, the three channels come from scalars, which is what a prop with no pack should do
bSpecularFresnelongrazing boost on the reflection. A captured panorama has no painted hot spots and reads flat without it
bEmissiveoffemissive from the albedo alpha
bSkinonblend the redder skin falloff where the vertex mask says
bUnderglowonthe wax term
bFriendFoeRimonthe rim light
bEnemyoffwhich rim row this instance reads
bUseDiffuseonoff drops the whole diffuse response and its gradient tap
bUseSpecularonoff drops the panorama tap and its sampler
bDebugoffreplaces the shaded result with one intermediate
bEmissive is off by default because a texture with no alpha samples as 1. Turn it on over an albedo without alpha and the whole surface emits.

Surface

ParameterDefaultWhat
Tintwhitemultiplies BaseColor. A per-character or per-team colour belongs here, not in the rim
Cavity1used when bUseCRMTexture is off. 1 is none
Roughness0.5same
Metallic0same
EmissiveIntensity1scales the alpha mask

Specular

ParameterDefaultWhat
SpecularScalar0.12overall reflection strength. The panorama is HDR, so this is small
MaxMip8the mip a roughness of 1 reads. Roughly where the panorama is a few pixels across
FresnelBoost2how hard the grazing boost pushes

One tap, at a mip chosen from roughness. There are no analytic highlights anywhere in this model, which is why a rough surface costs exactly what a shiny one does.

Rim character only

ParameterDefaultWhat
RimIntensity1.5how bright
RimUpBias0.35how much the rim prefers up-facing surfaces
RimHeightBias0.25how much it prefers the upper body
bEnemyoffwhich of the two rim rows this instance reads

Two rim palettes, picked per instance. The names come from the obvious use - ally and enemy - but nothing in the material cares what the distinction means. Faction, hostile and neutral NPCs, a status effect, an interactable versus scenery, or one palette and a second you never enable.

Grazing angle alone puts an even outline all the way round, which competes with the silhouette instead of describing it. The two biases are what make it read as lighting rather than as an overlay: up-facing surfaces catch more because that is what a light from above would do, and the upper body catches more because that is where the eye goes.

Height is measured against the object's own bounds, so it lands the same on a crouching character as a standing one.

Skin character only

ParameterDefaultWhat
SkinAmount0scales the red vertex channel
UnderglowPower2.5how tightly the wax term hugs the silhouette
UnderglowIntensity1how bright
SkinAmount starts at 0. An unpainted mesh arrives with white vertex colours, so any other default means every character is fully skin-shaded until someone paints one.

Skin gets a redder falloff row and an underglow with a specular-like grazing response - it comes off the surface, not through it. The underglow strengthens where the direct light is weakest, which is the only place there is anything left to see.

Weapon weapon only

ParameterDefaultWhat
ShadowEdge0.35where the dark side ends
LightEdge0.65where the lit side begins
ShadowColordark blue-grey
LightColorwhite

Two colours and a soft edge, no gradient. A weapon is mostly shiny metal, so the specular carries it and the extra control a gradient gives has nothing to act on.

Debug

bDebug replaces the shaded result with one intermediate, chosen by DebugMode. The terms that decide whether a character is readable are exactly the ones with no signature in the final image: a rim weighted to the wrong half of the body and a rim weighted correctly both just look like a rim until you put them side by side.

1 diffuse gradient5 rim mask9 roughness
2 specular6 skin mask10 metallic
3 world normal7 underglow
4 cavity8 distance brighten
Mode 5 shows the rim mask before the gradient shapes it, so a broad red wash is correct. The gradient's knee is what turns that into an edge.