Skip to content

04. Rule Reference

← Previous: Scene Doctor | Next: One-Click Optimize →


Overview

Scene Doctor includes 49 built-in audit rules organized across 17 categories.

All thresholds dynamically adapt to the currently selected platform profile (see Profiles & Settings). Rule IDs are permanent and stable: they are used by the false-positive ignore system, the disabled rules registry, CI logs, and exported reports.

Fix Safety Legend:

  • <span class="badge safe">Safe (S)</span>: Non-destructive import or render setting modification with zero visual or gameplay side effects.
  • <span class="badge moderate">Moderate (M)</span>: Setting or geometry adjustment with minor visual or structural impact; review recommended.
  • —: Advisory diagnostic rule without an automated one-click fix (requires manual design decision or baking).

See Fix Safety Levels for more information.


1. Textures

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
texture.uncompressedUncompressed TexturesRGBA/RGB textures loaded without hardware block compression (ASTC/ETC2/DXT), consuming 4–8× more VRAM.Compress (Safe). Applies the active platform override to the recommended compressed format without altering source files.
texture.oversizedOversized TexturesTexture resolution exceeds the active platform profile’s max texture limit.Clamp to {budget}px (Moderate). Lowers Max Size for the active build target only.
texture.read-writeRead/Write Enabled TexturesCPU-side texture buffer retained in RAM, effectively doubling memory usage; only necessary for GetPixels()/SetPixels().Disable Read/Write (Moderate). Disables the Read/Write flag on the asset importer.
texture.no-mipmaps3D Textures Without MipmapsTextures on 3D objects lack mipmaps, causing high-frequency shimmering at distance and wasting texture memory cache bandwidth.Generate Mipmaps (Safe). Enables mipmap generation on the asset importer.
texture.normal-map-typeNormal Maps Imported as DefaultTextures assigned to material normal map slots are configured as generic Default color textures, causing incorrect surface lighting vectors and improper compression.Set Type: Normal Map (Safe). Updates the texture type to Normal Map.
texture.npotNon-Power-of-Two TexturesNon-power-of-two (NPOT) texture dimensions that may fail compression or prevent mipmap generation on specific mobile GPUs.Scale To Nearest POT (Moderate). Configures the importer to scale to the nearest POT resolution.
texture.duplicatesDuplicate TexturesIdentical image assets imported multiple times into the project under different paths.Use Single Copy (Moderate). Remaps referencing materials to a single canonical texture asset.

2. Meshes & Lightmap UV

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
meshes.read-writeRead/Write Enabled ModelsCPU mesh copy enabled when not required by runtime procedural manipulation. Automatically skips meshes referenced by MeshCollider or particle shapes.Disable Read/Write (Moderate). Disables Read/Write on the ModelImporter.
meshes.unused-tangentsTangents Without Normal MapsMesh models importing vertex tangent channels (16 bytes/vertex) when no scene material utilizes normal mapping.Skip Tangents (Moderate). Sets Tangents import mode to None.
meshes.high-poly-no-lodHigh-Poly Meshes Without LODDensely tessellated meshes rendered at full polygon detail regardless of camera distance.Generate LODs (Moderate). Creates Burst-decimated LOD1/LOD2 meshes and configures a LODGroup. Shared meshes share generated LODs.
meshes.index-format32-bit Index BuffersMeshes containing under 65,536 vertices configured with 32-bit index buffers instead of 16-bit indices.Use 16-bit Indices (Safe). Converts index buffer format to 16-bit.
meshes.missing-lightmap-uvMissing Lightmap UVsGameObjects marked with Contribute GI lacking secondary UV2 channels for lightmap baking.Enable Generate Lightmap UVs (Safe) on model importers; Generate UV2 (Safe) for .asset mesh data.

3. Rendering & Batching

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
rendering.gpu-instancingGPU Instancing DisabledIdentical meshes rendered repeatedly across the scene with instancing disabled and the SRP Batcher inactive.Enable Instancing (Safe). Enables GPU Instancing on the shared material.
rendering.duplicate-materialsDuplicate MaterialsDuplicate material instances with identical shader properties and textures that break batching opportunities.Use Single Material (Moderate). Remaps renderers to a single canonical material asset.
rendering.missing-staticNon-Moving Props Not Marked StaticNon-moving environment props without scripts, animators, or rigidbodies that lack static flags.Mark Static (Moderate). Applies Batching Static and Occluder/Occludee Static flags.

4. Shadows & Lighting

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
shadows.small-casterSmall Shadow CastersRenderers whose bounding dimension is smaller than the platform’s shadow caster threshold that still cast shadows.Disable Shadows (Safe). Sets castShadows = Off on the renderer.
lighting.shadowed-local-lightsShadow-Casting Point/Spot LightsRealtime point lights (rendering 6 cubemap shadow passes per frame) or spot lights with realtime shadows enabled.Disable Shadows (Moderate). Disables realtime shadows on the light component.
lighting.realtime-countToo Many Realtime LightsActive realtime point and spot light count exceeds the platform performance budget.— Bake lightmaps or switch lights to Mixed or Baked.
lighting.realtime-probe-every-frameReflection Probes Updating Every FrameRealtime reflection probes configured to redraw 6 cubemap faces every frame.Refresh On Awake (Moderate). Switches probe update mode to Via Scripting / On Awake.
lighting.missing-light-probesBaked Lighting Without Light ProbesScene utilizes lightmaps for static geometry but lacks a LightProbeGroup for dynamic props and characters.— Add a LightProbeGroup component to cover the play space and re-bake.

5. Culling

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
culling.far-clipExcessive Camera Far ClipCamera Far Clip distance set orders of magnitude beyond the furthest scene renderer.Set Far Clip {n} m (Moderate). Trims camera far clip to match actual scene extents.
culling.occlusion-not-bakedOcclusion Culling Not BakedScene contains static occluders but lacks precomputed occlusion culling data.Bake Occlusion (Moderate). Initiates background occlusion bake with platform settings.
culling.layer-distancesLayer Distance CullingGameObjects assigned to prop layers without native per-layer cull distances configured.Add Layer Distance Culler (Moderate). Attaches LayerDistanceCuller to the main camera.
culling.small-objectsSmall Objects Never Culled by SizeMicroscopic props that continue rendering even when occupying only 1–2 pixels on screen.Add Size Culling (Moderate). Configures single-level LODGroup with cull transition height.

6. Colliders & Physics

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
colliders.heavy-meshHeavy Mesh CollidersMeshCollider components exceeding profile triangle thresholds, or MeshColliders with no mesh assigned.Simplify Collider (Moderate). Fits primitive (box/sphere/capsule) if watertight volume matches, or generates low-poly proxy. Remove Component (Moderate) if empty.
physics.animated-static-colliderAnimated Colliders Without RigidbodyGameObjects with colliders transformed by Animator/Animation components lacking a Rigidbody (causes static collider tree rebuilds).Add Kinematic Rigidbody (Moderate). Attaches kinematic Rigidbody to the animated root.
physics.continuous-dynamicMany Continuous Dynamic RigidbodiesMultiple rigidbodies configured with expensive Continuous Dynamic collision detection.Use Discrete (Moderate). Switches collision detection mode to Discrete.
physics.settingsPhysics Project SettingsProject settings configured with Auto Sync Transforms enabled, allocation callbacks enabled, or an excessively small fixed timestep.Disable Auto Sync, Reuse Callbacks, Set 20 ms (Moderate). Updates physics configuration.

7. Animation

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
animation.always-animateAnimators Always AnimatingAnimator components configured with Culling Mode set to Always Animate.Cull Update Transforms (Safe). Sets culling mode to Cull Update Transforms.
animation.update-when-offscreenSkinned Meshes Updating Off-ScreenSkinnedMeshRenderer instances with Update When Offscreen enabled, computing bone matrices when invisible.Disable (Moderate). Disables the offscreen update flag.

8. Audio

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
audio.long-decompress-on-loadLong Clips Decompressed On LoadAudio clips longer than 10 seconds set to Decompress on Load, expanding to massive raw PCM memory buffers.Load Type: Streaming (for clips $\ge 60$ s) or Compressed In Memory (Safe).
audio.short-streamingShort Clips StreamingVery short sound effects (< 2 seconds) configured to Stream, incurring continuous disk/thread streaming overhead.Decompress On Load (Safe). Sets load type to Decompress on Load.
audio.stereo-3dStereo Clips Played in 3DTwo-channel stereo audio clips played through localized 3D spatial AudioSource emitters.Force To Mono (Safe). Enables Force to Mono on the importer.
audio.sample-rateHigh Sample Rate on Mobile/VR44.1 kHz or 48 kHz audio clips targeting resource-constrained mobile or standalone VR platforms.Optimize Sample Rate (Safe). Sets sample rate override to 22,050 Hz or platform standard.
audio.pcmUncompressed (PCM) AudioSound assets stored in uncompressed PCM format consuming 3–10× more file and runtime memory than Vorbis/ADPCM.Compress (Vorbis 70%) (Moderate). Reconfigures audio compression settings.

9. Particle Systems

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
particles.cast-shadowsParticles Casting ShadowsParticle system renderers rendering into the real-time shadow map pass.Disable Shadows (Safe). Sets shadow casting mode to Off.
particles.max-particlesHigh Max ParticlesParticle systems configured with excessively high Max Particles limits (> 1,000–5,000).Clamp to {limit} (Moderate). Lowers maximum particle ceiling.
particles.world-collisionHigh-Quality Particle World CollisionParticle systems performing per-particle raycasts against scene physics geometry every frame.Medium Quality (Moderate). Switches particle collision quality to Medium / Voxelized.
particles.always-simulateLooping Particles Always SimulatedLooping ambient particle effects continuing to update full simulation cycles when far off-screen.Automatic Culling (Moderate). Switches particle culling mode to Automatic Culling.

10. UI (uGUI)

Activates automatically when com.unity.ugui is present in the project.

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
ui.raycast-targetUnnecessary Raycast TargetsNon-interactive text labels, shadows, and background images with Raycast Target enabled.Disable Raycast Target (Moderate). Clears raycast target flag on non-interactive elements.
ui.pixel-perfectPixel Perfect Canvas With Moving ContentPixel Perfect enabled on canvases hosting moving, scaling, or scrolling content (forces frequent canvas re-layouts).Disable Pixel Perfect (Moderate). Disables pixel perfect rendering on the canvas.
ui.large-dynamic-canvasLarge Canvas With Dynamic ContentMonolithic canvases where frequently updated sub-elements force complete geometry regeneration of static elements.— Move dynamic, high-frequency elements into a dedicated sub-canvas.

11. Terrain

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
terrain.settingsTerrain SettingsTerrain pixel error, basemap distance, detail billboard distance, or tree billboard distance configured beyond platform budget.Enable Draw Instanced (Safe), Set Pixel Error {n} (Moderate), Set Distances (Moderate).

12. Project Settings

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
settings.urp-assetURP Asset SettingsInactive SRP Batcher, unnecessary HDR on mobile, excessive MSAA, oversized shadow distance or cascade counts.Enable SRP Batcher (Safe); Disable HDR, Set MSAA, Set Shadow Distance (Moderate).
settings.qualityQuality SettingsExcessive realtime pixel lights, unconstrained skin weights, or unoptimized shadow cascades.Set Skin Weights (2 Bones), Configure Shadow Cascades (Moderate).
settings.playerPlayer SettingsIncremental Garbage Collection disabled, or Mono scripting backend used on Android/iOS instead of IL2CPP.Enable Incremental GC (Safe), Switch to IL2CPP (Moderate).

13. Hierarchy & Code

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
hierarchy.missing-scriptMissing ScriptsGameObjects referencing deleted or unlinked MonoBehaviour script components.Remove Missing Scripts (Moderate). (Irreversible via journal; see History & Revert).
hierarchy.empty-updateEmpty Update MethodsMonoBehaviour scripts defining empty Update(), LateUpdate(), or FixedUpdate() callbacks called every frame by the native C++ engine.— Remove the unused callback methods directly from the C# source code.

14. Performance Budget

Stable IDRule NameCondition & Diagnostic CheckAutomated Fix Action
budget.framePlatform BudgetsEstimated draw calls (batches), triangles, active materials, and texture VRAM exceed the target platform profile budget.— Provides diagnostic advice pointing to the relevant optimization tool (Combiner, Decimator, Culling, etc.).