Is there a comprehensive guide to VRC's engine VS PC hardware

So I think I have tired of trying to explain that Yes, VRC is multi threaded. No it is not running off of a single core except the main graphics pipline line Ect…

Can we please … please get a complete in’s and outs of how things work and list out
the components like … Direct X 10 - 11 usage cases (desktop/VR)

Why we cannot have FSR and other optimizations.

As it stands, And please correct me if I am wrong here, But everything I have ever gotten as a response says we are stuck on unity 2019 forever or a HEAVILY modified 2020 and that there really is not a path forward to the new rendering tech because it would … Melt … everything down to slag where it concerns assets

We have rumors abound , and the only reason for those rumors is a lack of any followup . As it stands everyone believes the following.

  1. We cannot move forward to modern rendering techniques because of the branch of unity VRC has been on forever because it would break everything.

  2. We will only get to that place with VRC 2.0 , Which will mean there will have to be some asset conversion systems in place to move them onto the new platform. This will be the new fork

  3. All we can hope for is incremental changes and QOL upgrades on the current platform for the time being. (game performance) So some of the major issues of lag are only going to be able to be directly dealt with … you guessed it . raw… crushing… power… Running native 4k , 5k , 8k . is not possible without MASSIVE power draw.

Change my mind

I am not a VRChat employee but I am a reasonably experienced software developer. I have tried to explain it the best I can, but 3D rendering is a fundamentally complex topic.

tldr: 3D engines are extremely complex and upgrading is not trivial, and upgrading or even changing engines will not make 500k tri 50 material avatars magically faster. The only way to do that is to not make your avatars 500k tri 50 material monstrosities.

VRChat uses Unity’s Builtin Renderer Pipeline (sometimes called the legacy renderer). There’s plenty of in-depth technical documentation out there on how this all works, just google around, but be prepared: many of these expect some experience with graphics programming.

Versions after Unity 2019 focus on its Scriptable Render Pipeline technology. This allows developers to create their own rendering techniques with a great deal of flexibility. Unity maintains two of their own SRPs, High Defenition Rendering Pipeline (HDRP) and Universal Rendering Pipeline (URP, previously known as Lightweight Rendering Pipeline). You can also find plenty of information on these with google (and can even read the source code).

These newer rendering systems operate very differently to the legacy one. This has the possibility to introduce all sorts of compatibility problems; but let’s focus on the biggest: shaders.

Shaders are compiled programs that the GPU executes to determine what to do with all those vertices, bones, and images that make up avatars and worlds.

Shaders are heavily dependent on the rendering environment. They depend not just on the avatar/world mesh/textures, but also on things like the framebuffer, additional buffers (e.g. the G-Buffer and its particular layout), camera projection matrices etc. They also depend on the engine to execute them correctly e.g. the standard forward-lighting shader handles only one light, and additional lights are handled by having the engine execute that shader over and over and adding the result to the framebuffer (traditional forward rendering techniques).

With a radically different rendering environment, those shaders cannot meaningfully execute. For example: URP can handle multiple lights in one pass and doesn’t execute the additive-lighting pass over and over, and HDRP has a very complex framebuffer layout that cannot be simply rendered to.

The result for VRChat is that upgrading to a new rendering technique would break virtually all uploaded content with no automatic way to fix it. If your lucky the shaders might have their fallbacks set up properly and still render something, but many probably don’t and will just turn pink.

Running native 4k , 5k , 8k . is not possible without

Running at super high resolutions should be quite possible with Unity’s old forward renderer that VRChat uses if content creators know exactly how to optimise for it, but many don’t (and can’t reasonably be expected to). So this is more of a pragmatic issue then it is a technological one.

Most of the performance issues related to VRChat are to do with asset optimisation and not the engine. VRChat cannot be expected to magically run dozens of 500k skinned meshes with fifty materials and 400 physics-enabled bones.

But essentially the rumors are true. There can be nothing done until VRC 2.0

I have heard this from some “other” developers looking at VRC’s challenges moving into the future, While not a “dead” platform, there are many things that engine wise would help if they could offer some of the newer options.

Can or does Unity 2019 even use the cache of say a 7950 X3D ?

As far as I know the latest version of the Mixed Reality OpenXR plugin requires LTS 2021? I think that is probly pretty important since Open XR is one of the linchpin pieces that makes it work.

I would talk about what I have seen with FSR and VR, but I know any talk about it is instant shutdown on the topic. Nobody wants to talk about it, and it cannot be run on 2019 anyways so , dead horse.

While I agree we cannot have 500k and 50 materials or more avatars. But we run afoul of not being able to run 20 people with far less. So In summary.

  1. Too many changes to move over.

  2. No update to Open XR

  3. No FSR or any other platform specific optimizations and up-scaling

Right So that’s that then.

… lets see… 1500w power supply . RTX4090 … Add to cart.

I don’t see what makes the newer cache different from the older cache. I thought many people have tested the 5800x3d add has positive things to say regarding performance.

Where it comes to the unity version OpenXR question, I wonder if it’s wiser to have one big backwards compatible event/crisis or some smaller events along the way.

I hope they add a test feature for something like that.

1 Like

Can or does Unity 2019 even use the cache of say a 7950 X3D ?

That’s just a CPU cache, right? Like an enlarged L3 cache or something? It should be utilised automatically by any software if so; that’s not really an engine thing.

But we run afoul of not being able to run 20 people with far less

Avatars can also contain hundreds of physics enabled bones with hundreds of collisions, pipeline-stalling framebuffer-reading shaders etc. Engine upgrades or changes won’t make those run faster—they just need to be optimised.

FSR

I think FSR requires modifications to shaders to work fully, which would be an issue with compatabiltiy.

1500w power supply

You would probably find that power supply being underutilized most of the time. Much of the unoptimised content doesn’t allow for efficient pipelining and often result in the CPU/GPU stalling and waiting idly, not actually consuming much power.

Still… something is inevitable. Upgrading/switching engines isn’t going to bring the magic optimisations everyone seems to think it will, but 2019 LTS is no longer supported, and the tech will continue to get older and older.

There are benchmarks showing the 7950X3D having significant performance improvements over even just the 7950X.

A lot of the current performance issues in VRChat (beyond the notable overhead of VRC compared to the other VR social game also running Unity 2019.4) are due to avatar and world performance optimizations.

For example, I was in Udon Tycoon, which is an entire game with LOD levels and properly takes advantage of the Quality presets in the VRC settings, plus 2 others with medium rated avatars, and I managed 72 FPS with some GPU and CPU still on the table. Meanwhile, some worlds cause me to drop to 50-60 FPS even without anyone else there.

Even better: If you go to many of Silent’s worlds (Silent made their “Filamented” shader), they are rips from games. There is a FFXIII world with beautiful visuals that runs at 72 FPS for me, even with 5 others in the world with very poor avatars.

Another example: An event I go to decided to go to 1’s Optimized Box (1 material, just a box). The event still dropped to 20-35 FPS with 25-35 users because of how horridly optimized their avatars are.

And Tupper and other VRC devs have been focusing recently on optimization. The main thing being exposing the common performance issues. The main performance bottlenecks right now are:

  1. unoptimized shaders (GPU heavy)
  2. too many materials (plus draw calls, which incur CPU cycles)
  3. player animators with 50-100+ layers (blend trees are magnitudes faster; CPU limiting)
  4. constraints (CPU)
  5. blendshapes (CPU)

Also, poly count directly affects the performance of blendshapes, plus shaders doing math on meshes to render them.

This is why, even when I had a Rift CV1 and a 2080 Super where I would barely even get close to 70% or more utilization on the GPU at all times, I would get 15-30 FPS, due to CPU limitations on my 3950X. Plus the occasional <1 FPS with repeated frames due to VRAM not being large enough for all active textures.

Most games are optimized in various ways, most often with batching and optimized materials. Some characters in games might even have 1 material with many different maps to separate metallic, roughness, base color, etc.

This is why games like LoL are so performant, since they are able to very easily batch things, even going as far as to make their artwork and art-style play into the limitations of 3D rendering. When you have control of the player’s view, you can get away with some pretty impressive quality cuts and tricks to improve performance.

If we want the game to be more performant, the people that are making content need to optimize their content. This is why they added texture memory to the safety restrictions now, where 150 MB+ is very poor, and constraints is a generic stat that isn’t counted towards safety yet.

But I will say, this would have to come with VRC adding better self-moderation for users to hide poorly performing avatars automatically/programmatically, plus better SDK hints/tools on how to improve. They do already promote things like VRCFury and other scripts that the community has made, even saying that the community tools will always be ahead of the curve of whatever they can make.

It also would help if we have some more features, like mipmap streaming, which can allow the textures to drop to a lower quality if the active VRAM is too full, rather than locking up the game.
https://feedback.vrchat.com/feature-requests/p/add-support-for-streaming-mipmaps-for-avatars-and-worlds

1 Like

Another issue that makes upgrading more difficult is the way that Unity assetbundles work; every piece of user-generated content is compiled specifically to the version of Unity, its underlying shader language(s), and the target platform. This is related to how you have to do platform-specific builds.

I’m curious to know if the “maximize forward compatibility” option in the current SDK upload panel is doing something extra to allow VRChat to rebuild stuff for newer engine versions and platforms going forward (such as also uploading the underlying scene file and its dependencies), and how they’re actually making that work with Unity if so.

1 Like

My understanding is that it would upload the unity project itself so it can recompile it with new Unity versions. I remember people saying not to do it, because it makes it easier to rip avatars. But I never tested or confirmed if that was really the case.