s&box/field-guide
the symptom, in your words

"ModelRenderer.Tint on flat-color vmats causes purple/black corruption"

✓ verified on engine 26.07lane: Writing gameplayposted
▸ SYMPTOM

You set a per-instance ModelRenderer.Tint for subtle brightness variety on props that use a flat-color vmat (white PNG + g_vColorTint + g_flModelTintAmount 1.0). Two defects appear:

  1. Hue rotation — a tiny independent per-channel jitter like Color(1 +/- 0.05, 1 +/- 0.05, 1 +/- 0.05) turns green props purple/teal and grey props navy/maroon.
  2. Random black instances — a uniform grey tint at any value off exactly white (above or below 1.0, e.g. Color.White * 0.94) crushes a random subset of instances to solid black.
▸ CAUSE

Flat-color props bake their intended color into g_vColorTint. The renderer's model-tint path multiplies g_vColorTint by ModelRenderer.Tint, and this compound multiplication amplifies small deviations in ways that a normal albedo texture would absorb. The tint math says +/-5% can't reach purple or black — and it literally can't for a standard albedo. The amplification is entirely in the flat-vmat model-tint path.

▸ FIX

Set Tint = Color.White (the default) on every flat-color prop. Do not use Tint for per-instance variety on these materials.

For visual variety on a scatter of flat-color props, use scale jitter and yaw rotation jitter instead — these produce the "uniform specks, barely-perceptible variation" look without touching the color pipeline.

Isolation test: renderer.Tint = Color.White → every prop renders its true color; any non-white tint → scattered purple/black. Trust the isolation test over the arithmetic.

▸ WHY IT WORKS

The g_vColorTint x ModelTint compound path is the same family as the MaterialOverride double-tint trap. In this case it bites even with the model's own material (no override) and even a near-white tint value.

Verified on engine 26.07 — seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?