-
-
Notifications
You must be signed in to change notification settings - Fork 0
Auditor Tab
Video Tutorial
Coming soon - video tutorial placeholder
The Auditor is a comprehensive performance scanner that helps optimize your world for PC and Quest.
Select your target platform before scanning:
| Profile | Description |
|---|---|
| PC | General optimization, less strict thresholds |
| Quest | Strict Quest requirements, flags more issues |
- Select your audit profile (PC or Quest)
- Click Scan Scene
- Review each section for issues
- Use the Fix buttons to resolve issues
Occlusion culling prevents rendering objects hidden behind other objects. This is the single biggest optimization for VRChat worlds.
What it checks:
- Whether occlusion data is baked
- Size of baked data
How to fix:
- Click Open Occlusion Window
- Go to the Bake tab
- Click Bake
Tips:
- Re-bake after moving large static objects
- Larger worlds benefit more from occlusion culling
Realtime lights are rendered every frame and are expensive, especially on Quest.
What it flags:
- All lights not set to Baked mode
How to fix:
- Click Fix next to individual lights to make them baked
- Or click Fix All (Bake Lights) to batch convert
When to keep realtime lights:
- Animated lights that change during gameplay
- Dynamic shadows that must update
Static objects can be batched together for better performance.
What it finds:
- Non-static MeshRenderers that could be static
- Excludes objects with Animators, Rigidbodies, Pickups (can't be static)
How to fix:
- Click Make Static next to individual objects
- Or click Fix All to batch convert
Objects marked static but have components that require them to be dynamic.
What it finds:
- Static objects with Rigidbodies
- Static objects with VRC Pickups
- Static objects with Animators
Why this matters: These objects will behave incorrectly in VRChat. Pickups won't work, physics won't apply.
How to fix:
- Click Set Dynamic to fix individual objects
- Or click Fix All (Set to Dynamic) to batch fix
Analyzes the size and memory usage of your scene assets.
Lists meshes sorted by memory usage:
- Mesh name
- Triangle count
- VRAM size
Click any entry to select the object in the scene.
Lists textures with interactive controls:
- Texture name and file size
- VRAM usage
- Resolution dropdown - Change max resolution (128-8192)
- Format dropdown - Change compression (Automatic, BC7, DXT1, DXT5, ASTC 6x6)
Changes apply immediately to the texture import settings.
Lists audio clips and shaders:
- Audio clip names and memory usage
- Active shaders in the scene
Shows Quest-specific metrics:
Download Size Estimate:
- Bar showing estimated download size
- Quest limit is 100MB
- Color-coded: Green (safe), Yellow (warning), Red (critical)
Texture VRAM Estimate:
- Total VRAM used by textures
- Quest has limited VRAM
GPU Instancing allows the GPU to render multiple copies of the same mesh in a single draw call, significantly improving performance for repeated objects like trees, props, and decorations.
The GPU Instancing audit is divided into two main sections:
Groups that share the same mesh and the same material are ready to be instanced immediately.
Display:
- Mesh name
- Material name with instancing status:
[INST](enabled) or[---](disabled) - Active count (e.g., "5/7 active" means 5 checked out of 7 total)
- Static batched count (greyed out objects)
Per-Object Controls:
- Checkbox - Include/exclude from instancing operations
- Sel button - Select in hierarchy
- Switch to Instancing - For static batched objects, removes static flag and marks for instancing
Actions:
- Enable Instancing on All Materials - Enables GPU Instancing on all materials in the ready groups
- Mark Selected for Instancing - Marks checked objects for instancing (excludes from static batching)
Meshes that use multiple different materials need consolidation before they can be instanced efficiently.
Display:
- Mesh name
- Number of different materials
- Total object count
Material Groups: Each material group appears as a visual box showing:
- Small material thumbnail (32x32)
- Grid of objects using that material
- Individual checkboxes per object
Master Material Selection: Use the dropdown to select which material all objects should use. The master material will replace all other materials during consolidation.
Actions:
- Consolidate Selected to Master Material - Replaces materials on all checked objects with the master material
GPU Instancing and Static Batching are mutually exclusive - an object can only use one or the other.
For objects that are instancing candidates:
- If marked for instancing: greyed out in Static Batching section with
[Instanced]label - Switch to Static button - Removes from instancing, enables static batching
For static batched objects:
- Greyed out in Instancing section with
[Static Batched]label - Switch to Instancing button - Removes static flag, marks for instancing
Note: Objects not detected as instancing candidates (not part of any instance group) follow normal static batching rules without any special toggle UI.
| Feature | GPU Instancing | Static Batching |
|---|---|---|
| Best for | Many copies of same mesh/material | Unique objects that never move |
| Memory | Lower (shared mesh data) | Higher (combined mesh data) |
| Draw calls | Reduced (1 per instance group) | Reduced (1 per batch) |
| Movement | Objects can move individually | Objects cannot move |
| Requirements | Same mesh + material, instancing enabled | Static flag enabled |
Recommended workflow:
- Use GPU Instancing for repeated props (trees, rocks, furniture)
- Use Static Batching for unique architecture and terrain
- Keep dynamic objects (pickups, animated) as neither
Objects are only shown as instancing candidates if there are at least 5 copies of the same mesh. Individual or few-copy meshes won't benefit significantly from instancing.
Monitors VRCPhysBone performance metrics in your scene.
Scene Statistics:
- Components - Total number of VRCPhysBone components
- Total Transforms - Number of bones being simulated
- Unique Colliders - Distinct colliders referenced across all PhysBones
- Collision Checks - Total collision checks per frame (bones × colliders)
Performance Impact: PhysBones run entirely on CPU. Collision checks are the most expensive operation - each bone checks against each assigned collider every frame.
Color Coding:
- Normal - Under 64 collision checks per component
- Yellow - 64-128 collision checks (consider optimizing)
- Red - Over 128 collision checks (high CPU cost)
Component List: Shows each PhysBone component sorted by collision check count:
- Object name
- Bone count
- Collider count
- Collision checks
- Sel button to select in hierarchy
Optimization Tips:
- Reduce collider assignments where possible
- Use fewer bones in chains
- Consider disabling collision on less important PhysBones
Finds and removes broken/missing script references in your scene.
What it finds:
- Components where the script file is missing or can't be loaded
- Shows as yellow warning "The associated script can not be loaded" in Inspector
How to fix:
- Check items to remove in the list
- Click Remove Missing Scripts (Checked) to remove selected
- Or click Remove ALL Missing Scripts to clean everything
Analyzes audio for optimization opportunities.
What it flags:
- Stereo audio - Should be mono on Quest
- Uncompressed audio - Should use compression
- PCM audio - Wastes memory
How to fix:
- Click Optimize Checked Audio
- Applies: Force mono, Vorbis compression, quality 0.7
Flags expensive particle configurations.
What it finds (varies by profile):
- Collision enabled - Very expensive
- High particle counts - Quest: any count, PC: >1000
- Transparent materials - Extra draw calls
How to fix:
- Click Reduce Count by 50% to halve particle counts
Finds expensive physics configurations.
What it flags:
- MeshColliders on Rigidbodies - Extremely expensive
- Non-convex MeshColliders - Even more expensive
How to fix:
- Click Fix Checked: Make Mesh Colliders Convex
Alternative fixes (manual):
- Replace MeshCollider with Box/Sphere/Capsule colliders
- Remove the Rigidbody if physics isn't needed
Finds small objects casting unnecessary shadows.
What it flags:
- Objects below size threshold casting shadows
- Quest: <1.0 magnitude, PC: <0.2 magnitude
How to fix:
- Click Fix to disable shadow casting per object
- Or Fix Checked (Disable Shadows) for batch fix
Flags post-processing volumes that are expensive on Quest.
What it finds:
- Unity Post Processing Volumes
- URP Volume components
How to fix:
- Disable or remove volumes for Quest builds
Identifies non-mobile shaders.
What it flags:
- Shaders not containing: mobile, quest, unlit, matcap, toon, toony
How to fix:
- Click Swap to Mobile Toon to batch convert
Finds textures missing Android compression.
What it flags:
- Textures without Android platform override
- Textures not using ASTC compression
How to fix:
- Click Apply Android Overrides
- Applies: ASTC 6x6, max 2048px
All fix actions support Unity's Undo system:
- Ctrl+Z to revert any change
- Each section has an Undo Last Action button
- Fix critical issues first (occlusion, broken static)
- Address warnings (lights, static objects)
- Fine-tune with extended auditors
- Create Quest scene copy (Quest tab)
- Switch to Quest profile
- Fix all sections
- Build and test on Quest hardware
- Scan after importing new assets
- Scan before each upload
- Scan after major scene changes