Skip to Content
DocumentationTroubleshootingPerformance Tips

Performance Tips

If a Genesis material is slow, it is almost always one of three things: too many texture samples, too many shader variants, or batching broken by a script. This page walks the optimization process the way a perf engineer would.

As a reference, a heavy material (Lit + Cel Ramp + Rim + MatCap + Triplanar + Stochastic + Outline + Dissolve) can cost around 6.2ms/frame on an Adreno 730. Trimmed to Toon + Cel Single + Outline, the same gameplay-distance read drops to roughly 1.8ms — a 3x reduction with no visible difference at distance.

The optimization process

  1. Profile first. Open the Unity Profiler. Identify the slowest material.
  2. Check sample count — Frame Debugger shows the fragment instruction count and sampler bindings.
  3. Disable one feature at a time. Cut everything you cannot prove is needed at gameplay distance.
  4. Audit variants. Tools > Genesis > Shader Tools Window > Variant Audit.
  5. Confirm batching survives in the Frame Debugger.

Cost reference

Inspector labelShader propertyTypeDefaultDescription
Albedo + Normal_BaseMap / _BumpMap2 samplesKeep. Required for almost any material.
Cel Shading (any mode)_CEL_SHADING_ON+0 to +1 samplesMobile-safe. The signature look at minimal cost.
Rim Lighting_RIM_ON+8 ALUNo samples. Universal.
MatCap_MATCAP_ON+1 sampleCheaper than reflection probes; mobile-safe at 256x256.
Triplanar_TRIPLANAR_ONx3 samplesAvoid on mobile. Limit to hero surfaces.
Stochastic Triplanar_STOCHASTIC_ONx9 samplesHides tiling at heavy cost. Skip on mobile / WebGL.
Inverted-Hull Outline_OUTLINE_ON2x vertex passFragment cost zero. Mobile-OK.
Screen-Space Outline ModuleRenderer featureFull-screen passCinematic look. Reduce render scale on mobile.
Dissolve_DISSOLVE_ON+1 sample + clipCheap when noise is small.
Hologram_HOLOGRAM_ON+5-10 ALUMobile-safe at moderate scan density.
PCSS Shadow ModuleRenderer featureCompute filterHeavy. Desktop / console only — skip on mobile.

Tactical wins

  • Use Single-band cel when you can. Stepped(3) and Ramp look great, but Single is the cheapest tier.
  • Bake AO instead of running real-time AO. Use the AO Baker tool.
  • Share materials. Two materials with the same keyword set = batched. Diverging materials = separate draw calls.
  • Disable Receive Shadows on FX, holograms, and Unlit FX meshes.
  • Drop texture resolution on distant props. 512 instead of 1024 is invisible at 10m+.
  • Avoid Stochastic on mobile. Use plain triplanar plus a low-frequency detail map.

Mobile target frame budget: a single Genesis material should cost under 1.5ms per fragment shader invocation in the worst case. If you exceed this, audit samples and variants.

Per-instance keyword toggles via EnableKeyword instantiate the material and double draw calls. Pre-create material variants instead.

Build size

Variant count drives build size. A typical project ships 20–50 unique variants. If Tools > Genesis > Shader Tools Window > Variant Audit reports more than 200, your Feature Configurator profile is too permissive — tighten it.

Last updated on