[VRChat] Measuring Performance: Find What's Heavy Before You Fix It

Created: 2026-09-09

Before optimizing, split heaviness into four kinds and measure. Covers when to use Stats, the Profiler, the Frame Debugger, and build size, plus how to keep records.

Your world feels heavy. You search and try every fix you find. Shrink the textures, cut the lights, combine the meshes. Half a day later, it feels about the same.

Heaviness comes in kinds, and the fixes are completely different. Nobody with a fever swallows every bottle in the cabinet.

This article covers finding what's heavy. The fixes are handed off to their own articles.

Four measurement windows side by side, hunting down the heaviness

What You'll Learn

  • Thinking of heaviness as four kinds
  • How to narrow it down from how it feels
  • When to use each of the four measurement windows
  • How to keep records for before-and-after comparison

If you have a world of your own on hand, read along with it.

Sponsored


There are four kinds of heavy

"Heavy" as one word splits into four things.

Four kinds: rendering, processing, size, and synchronization

Happily, how it feels narrows it down to a degree.

How it feelsWhat to suspectCommon causes
It stutters especially when you swing the cameraRenderingMaterial count, polygons, overlapping transparency
It's heavy even idle. Stopping the mechanisms lightens itProcessingUdon, physics, animation
Entering takes a long time. It crashes on QuestSizeTextures, audio, meshes
Light alone, heavy as people arriveSynchronizationThe number of synchronized objects

These four categories are the most important part of this article. Being clear about which one you suspect settles which article to read.

What you suspectArticle to read
Renderingmaking rendering lighter
Processingmaking Udon lighter, reducing physics load
Sizematerials and textures
Synchronizationnetworking basics

Let's separate two that get conflated up front.

  • Slow entry and stuttering motion are different. The former is size, the latter is rendering or processing
  • Heavy rendering and heavy processing are different too. Heavy while drawing nothing means processing
Sponsored

Looking through four windows

There are four tools too, each showing something different.

The four measurement windows show different things
ToolWhere to open itWhat it shows
Stats"Stats" at the top right of the Game viewHow much is being drawn right now
ProfilerWindow → Analysis → ProfilerThe breakdown of one frame's time
Frame DebuggerWindow → Analysis → Frame DebuggerThe order in which one image is built
Build sizeThe SDK's build panelHow much visitors download

Stats is the easiest. Show the Game view and press "Stats" at the top right.

Four numbers are enough to watch.

FieldMeaning
BatchesHow many times things were drawn together
SetPass callsHow many times the drawing method switched. This one bites
TrisTriangle count
VertsVertex count

Start with SetPass calls. It grows with the number of material types, and worlds heavy on rendering usually have it inflated.

Treat these targets as one reference point.

For PCFor Quest
SetPass callsUp to around 100Up to a few dozen
TrisUp to a few hundred thousandAround 100,000

These aren't absolute pass lines. What matters is comparing before and after your changes.

Sponsored

Hands-On: Measure your own world

Measure your own world through all four windows. A work in progress is fine.

1. Fix where you measure

First, fix the measurement conditions. Without that, the numbers scatter and can't be compared.

  • Pick one place to stand (the room's center, say)
  • Pick a direction to face (whichever shows the most objects)
  • Note the camera position in the Scene view so you can return there easily

Measure the heaviest view. A good number facing a wall means nothing.

2. See rendering in Stats

Press Play, stand at your chosen place and direction, and press "Stats" in the Game view.

Note the four numbers. You'll compare later, so a notepad or text file is fine.

SetPass calls : 
Batches       : 
Tris          : 
Verts         : 

Turn in place and watch how the numbers move. If they change a lot with direction, something heavy is that way.

3. See processing in the Profiler

Open "Window → Analysis → Profiler" and press Play.

Once the graph starts flowing, pause somewhere and select one frame. The bottom half shows what that frame spent time on.

Beginners only need two places.

Where to lookWhat it tells you
The CPU Usage bandsWhether processing or rendering is thicker
The top of the Hierarchy viewThe names of what's eating time

PhysicsUpdate at the top means physics; Udon-related entries mean your mechanisms; a thick Camera.Render means rendering. You don't need to read the names precisely. Knowing which category is thick is enough.

In the Profiler, just look at where the thick band is

4. See draw order in the Frame Debugger

Open "Window → Analysis → Frame Debugger" and press "Enable."

On the left, the steps for building one image are listed. Moving the slider shows the image up to that point in the Game view. You watch the picture assemble itself.

Two things to look for.

  • Are similar objects being drawn dozens of times separately? (They may be combinable)
  • Is something being drawn that shouldn't be visible? (behind a wall, say)

Think of it as the tool for inspecting the contents when Stats showed a high SetPass calls.

5. See size by building

Open the VRChat SDK's build panel.

Building displays the download size and the uncompressed size. Note both.

Download Size     : 
Uncompressed Size : 

If people say entering takes a long time, this is what's grown. Whether you're approaching the limit shows on this panel too.

Most of the size is textures. When it feels large, suspect texture resolution and count first.

6. Keep a record

Finally, gather the numbers into one table.

FieldBeforeAfter
SetPass calls
Tris
Download Size
The thick entry in the Profiler

Having this table makes optimization work an entirely different activity.

Without numbers, you end with "I think it feels lighter, maybe." With numbers, you can say "SetPass calls went from 180 to 60." You also learn which work didn't help, so you don't repeat it.

When measuring doesn't tell you

  • The Stats numbers don't move → The Game view isn't shown, or you aren't in Play
  • The Profiler is unreadable → Don't try to read the names. Just look at where the thick band is
  • Light in the editor, heavy on device → The editor is a guide. Always confirm Quest on the device
  • Heavy as people arrive → That's synchronization. Count your synchronized objects
  • Nothing looks large → It may be accumulation. Delete things gradually and find where it lightens
  • The numbers differ every time → Your standing position and direction aren't fixed

Bonus: Good to Know Up Front

  • Don't conflate this with avatars: The "Performance Rank" you see around is an avatar metric. Worlds are judged by looking at the numbers yourself
  • Change one thing at a time: Fixing three places at once leaves you unsure which helped. Change one, measure, record. Unglamorous, and the fastest way forward
  • Don't measure from the light room: Measure the view with the most objects. Good numbers give reassurance and teach you nothing
  • Measure early if Quest is in scope: Halving the size after finishing is painful. Build periodically while building and watch how the size grows
  • Measuring isn't only for the end: Building the habit of measuring right after adding a large asset or one mechanism narrows causes to one thing

Summary

Optimization starts with measuring.

  • Heaviness comes in four kinds: rendering, processing, size, synchronization. Different fixes
  • How it feels narrows it down to a degree
  • Stats for rendering, the Profiler for processing, the Frame Debugger for rendering's contents, the build panel for size
  • Keep before-and-after numbers in a table. Change one thing at a time

The question to ask before acting is: "Which of the four am I trying to fix right now?" If you can't answer, you're still at the measuring stage.

To make rendering lighter, go to making rendering lighter. To make your mechanisms lighter, go to making Udon lighter.

VRChat Notes in this section63