Developer Update - 28 September 2023

Regarding mipmap streaming, here is a relevant discussion: Unity Mipmap Streaming in VRChat - #13 by dark You commented there so I assume you’ve read it, but I figured I’d link it anyway for others who haven’t. Hopefully they can get it enabled at some point.

shaders like poi and pretty much all the ones people use are pixel lit, that means they take realtime lights at the pixel level instead of the vertex level

Per-pixel lighting is the standard for modern games and has been for quite a while. Vertex lighting is honestly a pretty strange choice these days, except if you’re going for a retro aesthetic I guess.

poi’s poly discard isn’t discarding anything, it yeets them beyond the frustum and farplane so that the geometry surface isn’t running on them (i dunno if this actually works how they hope, i’d like to see actual tests of it rather than just claims)

It works. Triangles that are entirely outside of clip space, including ones beyond the far clip plane, are guaranteed to be culled and not rasterized. I haven’t read poiyomi shaders so I can’t speak to what they do specifically, but in general there are many potential reasons you could want to discard triangles in the vertex shader as opposed to some other part of the graphics pipeline.

Realtime LoD generation aside from distance impostors is an extremely taxing system and is one of the main reasons why UE5 struggles to run acceptable framerates without upscalers.

Nanite does not generate LoDs in realtime, they are pre-baked. And in any case that has no relevance to VRChat’s upcoming impostor system.

I feel like you don’t even know how unity and C# works here. VRChat ahs many times done work on the very much necessary garbage collection, which is purging unused memory, because it doesn’t automatically expire it, you have to tell it to do so. I’ve had many people i know test, and have also found it to be the case myself, that mesh renderers that are not active indeed offload themselves out of working memory and if your memory fills up they will be evicted in favour of more readily needed memory, which can cause those meshes to hitch your system to squeeze them back into vram taking them off of your system ram, and if your system ram also filled then it has to query it off of your pagefile

Garbage collection, virtual memory (the pagefile), and whatever Unity does or doesn’t do w/r/t unloading inactive assets (not a Unity guy so idk), are 3 completely separate and unrelated things. You seem to be getting them mixed up here.

I don’t want to go over every little thing because I don’t think it’s that useful and it’s honestly not my intent to nitpick, but there are several other things you’ve written here that seem to be wrong or that just make no sense from a game developer’s perspective. In general, I get the impression that you have a lot of practice BSing your way through these kinds of conversations, but lack the necessary foundational knowledge to have a discussion that’s as productive as you want it to be. Just a hunch, coming from someone who has very much been there and done that. And from my experience I think you will be happier if you spend less time arguing about it online and more time mastering those fundamentals and being appropriately humble about the things you’re not totally sure of - assuming my vibe check was accurate.