World optimization tips?

I get baking lights and removing normal maps when possible. Giving users the ability to turn off things and using very crunched textures.

What else am I missing.

For reference here is my world.

1 Like

Here are some things: Making sure that objects share the same material, atlas them to combine their textures if needed. Normal maps should not be an issue and are actually encouraged.
You can set up occlusion culling so objects you shouldn’t see can be seen.
You can select textures in the project window in unity, and it will let you choose the maximum size of said texture.

In general you are doing yourself a disservice if you don’t use this editor add on in your project. I will help you manage the project https://github.com/oneVR/VRWorldToolkit

2 Likes

By optimization, do you mean reducing world size? Or increasing its perfromance? I’m going to guess you meant the latter, like @akalink

Some of the things you mentioned would decrease the size of your world (crunching textures, not using normal maps), but don’t really affect the performance of your world. So if you’d like your world to run smoothly, you do not need to remove normal maps!

VRChat has a guide for this sort of thing, actually. World Creation, Optimization, and Community Labs Tips

2 Likes

yeah both size and performance. I am just curious on neat things people have found that otherwise get overlooked.

Turn off the alpha channel on any texture not being used for transparency. This will reduce the VRAM used by 25%.

If you’re using TextMeshPro, and aren’t displaying fully dynamic text like user display names, consider creating a static font atlas to avoid having to bundle the full font file.

If you have lots of copies of the same pickup, consider using GPU instancing to batch them (note that both mesh and material have to be the same). If the material settings aren’t identical, you may be able to use MaterialPropertyBlocks to tweak the materials on a per-object basis without breaking GPU instancing (note that shader changes may be needed in this case).

Static batching can reduce drawcalls, but will also increase world size. You can look into using something like MeshCombinerStudio to merge meshes and remove the originals to avoid this.

For some objects, you may want them to cast static shadows on the world, but it may not be worth adding them to the lightmap themselves. In this case, set their lightmap scale to zero - they’ll still contribute to the overall light bake process, but they’ll be rendered themselves just using light probes.

Writing an UdonBehaviour with an update handler? Disable the component when it’s not needed; you may consider even breaking your logic up between a component with an update handler, and one which has no update handler but receives other types of events. Or use SendCustomEventDelayed to avoid an update handler in the first place.

3 Likes

normal maps don’t actually have a noticable impact on performance.

In most cases it’ll be texture resolution, culling, mesh size and (over) using mesh colliders that are the main performance killer.

Additionally shader use and object instancing also play a role in optimizing things.

Oh and you can just use something like CyanEmu’s “emulator” to play in unity and use unity’s profiler to see what it’s doing and see bottlenecks

1 Like