#world-optimization
1 messages ยท Page 27 of 1
Lmao. No. There's no reason to do that.
You make logical groups. A root or parent container holding the similar items.
WINDOWS--
window 1
Window 2
Window 3
There's no need to nest things under each other endlessly.
When merging, you don't want to just merge everything without logic either. You merge nearby meshes into larger chunks to make culling easier and more effective. If every item was merged for example, then no matter where you look, nothing would ever be frustum culled.
Organizing your hirearxhy only makes it easier for you to know where things are and manage your project, or make it easier to export things as fbx to send into blender and merge.
Poor organizing of the hierarchy can have odd impacts that are more technical and debated than what needs to be talked about here.
Well I mean I feel like combining all these glasses on the display into some kind of mesh thing on blender is far beyond me, should I try to bake the world as it is or basically toss out having glasses and cups
Glasses and cups arenโt static objects so donโt bake them, should help performance I think
Occlusion culling thinks there's an occluder here for some reason? Even though you can clearly see this is an open area? It was working flawlessly up until I just moved some furniture around and re-baked.
Its this one spot in the entire map thats giving me issues and it's a corner spot with a couch and spin the wheel.
This is the problem area I have no clue why. The couch used to be along the wall with the rug, that is the only change I made here. The bar is a prefab and when I bake occlusion in another scene, the issue does not exist. (This scene is a bar in the middle of a city so It's rather large )
Cleaning press before baking occlusion?
I will say. Things like small furniture, like couches. Tables, chairs, etc. Should not be set as occluders. Only occludes. The walls should be your only occluders.
Yea I did clear the data ๐
I think I found an explanation for what is happening but no ideas for how to fix. I am using the occlusion visualization and it shows these white boxes from the second floor when I put the camera into the problem area. in the spots where theres no problem, it only uses white boxes from the first floor.
I have narrowed it down to something upstairs thats messing up the calculation but I cant figure out what ๐ฆ just gonna slowly enable things until it messed up and update you guys on the findings cuz i dont want anyone to have to deal with this haha
EDIT: Figured it out. SO that yellow box happened to be the area that the camera can 'see' the floor of the second floor and it was marked both occludee and occluder static. Removing occluder static from the floor object on the second floor fixed it.
is there a proper guide for this
culling in my world is being very hard to work with
i just want to render certain things when a player is in certain areas
That guide rainwolf plush posted has been the one I have been going off of its super helpful. Every once and a while you'll get a weird behavior like I just had but luckily I could solve it within a day
the camera still renders the rest even when its indoors + the wall in the way
wacky
Poor occluder or merged mesh. Or possibly transparent materials with zwrite disabled.
Should consider using large solid walls (giant unity cubes) set to the tag Editor Only as your only occluders.
You can also use area triggers to disable areas depending on how your world is setup. Occlusion may or may not be the best solution, considering it's file size and cpu overhead. There's times to use it. And times to not use it. Sometimes a mix of things is needed. You can't overly rely on any one system to solve your issues.
ello i just wanna ask for help, i cant seem to upload the world although there are no errors showing up or anything, how do i fix this?~
ello, you filtered out errors and warnings in your console, press the little upper right grey icons
Uhm my bad, still kinda new to unity in a way, but is it the grey โ ๏ธ symbol?
just enable both
but yellow is warnings
red is errors
oh, nevermind, you have 0 on all of them anyway, could not see that on mobile well
iirc occlusion bounds are calculated based on the mesh origin
so if the origin is at world center you might get some bizarre occlusion bounds
Thx for the reply yeah that could very well be contributing to it! Did not know that
Yo dose anywone have good avatars to trade
this is the wrong channel for that
my world is pretty heavy (50 fps on desctop) so i reduced the render distance a lot (1000 to 100) and i only see the room i am in (the other rooms are at least 150m+ far away) yet i didnt see any improvement
am i doing something wrong or is it just that reducing the render distance wont unload the assets as that they are not in view anymore
can be alote of things that low yor fps like a wery bad mesh you walking on maybe or something else.i think not seeng the object not mean that it not costing somthink no idea why yor world have fps problem :/
You need to use the profiler tool. There's a lot of things you could be doing wrong. From too high poly. Too many meshes, too many materials. You could also be using realtime lights and have an excessive amount of lights. We can't know unless you start providing screenshots and more info.
I have 8m poly with around 33 mat and around 200mesh 2 udon (for tp) and most of my lights are in baked mode (even tho they somehow still show as real-time for no reason)
I have one grabpass on the water(big pink-ish rectangle)
I made everything from scratch and I can tell ot is pretty optimised
Except a couple textures
What's the profiler tool
Absolute yikes. You're doing everything wrong lol.
8m poly is absurdly high.
200 separated meshes is a ton of draw calls
Your lights are set to baked but show as real time because you haven't actually baked them in the lighting tab
GrabPass is expensive.
You need to drastically reduce the poly count. Player ideally shouldn't render more than maybe 500k at any given time.
You need to merge meshes into logical groups to reduce draw calls
Use as few materials as possible and atlas textured where possible to reduce drawcalls and improve baking for lighting
And actually bake your lights in the lighting tab.
Profiler is a profiling tool in the windows tab.
Is 72 a lot?
I don't think so
Also in the editor I'm getting actually a lot of fps
You're rendering nearly 14 millions tris.....
16.2 million verts....
72 can also be a bit, especially considering hardly anything seems to be batching, ideally more of that would be able to be batched. Remember, performance is much worse in vr because you're rendering everything twice, once for each eye. Your profiler doesn't take this into consideration, you need to.
Your poly count however, is most likely your biggest issue that absolutely needs to be dealt with. Those numbers are simply not viable. The camera should absolutely never exceed 1mn poly, ideally sub 500k. Or even way less than that
If any of these super high poly meshes have a mesh collider on them, you'll have an absolutely massive hit to performance on top of just rendering them.
Mesh colliders perform a collision check against every face of a mesh, so millions of collision checks, would absolutely tank performance. Even if you're not using any mesh colliders, 16.2 million Tris is simply 16 million too many
I have a lot of poly that are lost in tree and grass, which are alredy quite low poly, I can't really reduce them
My world has around 50k poly, but the I added a landscape for a place to chill with sum tree and grass I made, which kinda are using a lot ik, but usually u won't see that much poly at once except if ur going there
Tho, I think imma redo everything, like all the landscape to smth else completely
The screen you posted is the render from your camera, the camera can clearly see over 16m tris....
Yes, but thas with the additional terrain, the base facility where ull be 70%time is about 50k poly(if I remeber well but wasent that big)
Imma go sleep now, thanks for ur help and tips
I'm having some ridiculously finnicky results with occlusion culling and I need help. The camera is outside of the occluder and there are no holes in it. The only flag the occluder has is occluder static. All of the objects inside the occluder are occludee static, but still visible
The scene view is in between outside where the camera is and inside a cube occluder (pink)
if it helps a guidon occlusion culling
That's what I'm currently reading and taking inspiration of using occluder boxes and nothing else being occluder static
Yeah I can't seem to get any of this to work the way I want it to, so I might just make my own culling system
Nvm. That's neigh impossible for my current skill set
Does anybody have an estimate for the performance impact of video player screens? are they efficient enough to have a bunch of them in a sports bar setting? I've been putting the video material on lots of tvs
just a rough estimate not asking for big O complexity or anything
i don't have one of these gpu profiling programs and stuff but: the shader itself is a surface shader with an extra gamma converter so it's like the standard shader but a bit lighter, if you want an even lighter shader you can change the material for one with an unlit>texture shader, and if you want to apply gamma then create a new unlit shader and replace the line "return col;" with "return pow(col,2.2);", if you are using various non-toggleable screens you can just merge all planes as one so you don't reuse the video screen component on each object
So Iโm somewhat new to making worlds, is there any good videos for starters on optimization?
https://cdn.discordapp.com/attachments/405285983794364417/974768129815220274/unknown.png
https://cdn.discordapp.com/attachments/405285983794364417/974768232084959292/unknown.png
The Standard Lite shader saves me over 200 draw calls from the profiler, but doesn't quite produce the specular effect I want it to. Does the metallic/specular map even do anything on the Standard Lite shader?
Smoothness does absolutely nothing in what I can see and metallic somewhat works.
Or is there a way I can achieve a similar look as the top with just baked lights?
Both images do have realtime lights turned on
Unfortunately the standard lite shader has reflections disabled to avoid sampling cubemap textures
The only available reflections would be specular highlights
So standard lite won't sample reflection probes, only dynamic lights
And if you baked the lights already it's possible the shader will disable them
Well. I have a toggle to use only baked lightmaps or lightmaps + realtime lights for specular. It seems like I can remove realtime lights altogether if I use something like bakery to bake the specular highlights into directional maps or something cheesy like baking specular highlights into reflection probes
since standard light doesn't sample reflection probes, I'll have to see how just standard does in terms of draw calls
just enabling realtime lights blows my performance target away
Maybe I'll just try bakery. Even though bakery produced some really bad results for me
Try using box projection reflection probesand a shader that supports it, realtime specular lights are heavy sometimes
I use this to bake spec into reflection probes, it's an annoying extra step to the baking process but works nicely https://github.com/zulubo/SpecularProbes
I did stumble across that and tried to use it, but couldn't quite get results similar to realtime specular. Trying out bakery atm since I have that
Also make sure you're using some kind of directional mode for lightmaps
And shaders which support that, if it's the more advanced kind
I don't think bakery does this? I personally use that together with bakery
The directional mode thing is important or else normal maps won't do anything. But yea it also takes some tweaking of the specular probe sizes and intensities, and intensity of the reflection probe too
To make it look close to realtime
Bakery SH mode does bake speculars and requires a special shader for that reason
Ah cool, good to know. I just use normal directional mode since I wanna keep my shaders simple and I'm not too concerned about it being super realistic. Those advanced modes look niiiice tho
I'm aiming for highest quality I can squeeze out of quest hardware since my map supports quest. Trying every optimization tip I can get and reading the profiler a lot. Too bad the PlayerLoop is taking most of the profiler
Isn't the playerloop like literally everything that's happening in your scene, graphics physics scripts etc? Idk why it wouldn't be using the most time in the profiler?
I believe it's always gonna be the stuff within that loop that you want to look closer at and optimize, unless your editor is glitching out or something
That should be EditorLoop iirc
PlayerLoop, I believe, is player controller related stuff
No, I think it means Player as in the Unity Player, as in the core engine that runs the game, all update functions and rendering etc (including player controller stuff)
Same way "Player settings" is like engine settings and not controller settings
Yeahh it is an inconvenient choice of name XD
Are you using the frame debugger as well? That's really helpful for optimizing graphics, making sure your meshes and materials are batching/instancing properly and the camera isn't taking any extra steps to draw things
I also keep this handy for what numbers to target
Ive been on off asking this sub and reddit for a good month with no answers on thisโฆ I have QT pens in my worlds and they do not drawโฆ how for the love of god to people get these things to actually leave trails and draw
I don't think you're supposed to do anything special, it's a drag and drop prefab afaik
Check whichever official source for them and follow instructions
There is no instructions on them its literally just qt pens
There are instructions..... Did you download it from the Booth page?
If I had to guess it's one of two things
1: you didn't download it from the booth page and are using a stupid old version meant for SDK2 acquired from God knows where
2: you're not using the prefab and are just adding the FBX of the pens.
we're trying to figure it out in world dev lol
God I hate when people cross post.
Redownloaded from booth page, updated sdk and still same thing. The prefab is in the world the pens are there theres just nothing when you use them and the buttons dont light up and cant be clicked
You do have UdonSharp, correct?
how can I make a room not render when people are not in it?
Easiest way would to enable ambient occlusion
Some good tutorials on YouTube on how to do it
That.... Doesn't make sense
First, you never want to use post processing AO in vrc. AO should always be baked into the textures/lightmaps.
You probably meant Occlusion Culling as well. AO makes no sense in the context you used it.
Occlusion Culling, which may or may not work depending on the world design. Occlusion culling can work well when designed for it, but it carries both a file size and cpu performance impact so it needs to be used appropriately. It will cull meshes hidden behind solid occluders, like walls, or by using large solid cubes set to Editor Only set as occluders between structures if the structures aren't visible from one another such as disjointed rooms
You can also use LODs to distance cull meshes.
You can also use the far clip on the camera to cull meshes.
None of these however cull running logic, and only cull meshes.
You can use area triggers which is a udon behavior or U# script that uses a collider volume set to istrigger to determine if a player is in it or not and then disable meshes and udon logic so that there isn't any logic overhead from items in the room. When a player leaves a trigger, that area can be entirely disabled. You can have trigger portals between rooms, in hallways, all over, or if there are buttons to get to another space, that button can also disable everything.
thank you, thatโs a great overview
Iโm thinking Iโll use occlusion culling
with an invisible wall occluding it
since the room kinda sticks out and makes other parts of the world look bad
Yea big invisible walls are always handy. That or setting your camera culling distance if all your rooms are well sperated in space and you teleport between them
You're completely right, not a clue why I said AO.
Hello, I've made a world, that is supposed to hold a 'show' for about 12 people, + 3 actors and a few theatre instructors.
we have a host on a PC using Vive, but the rest uses Quest 1
Lately when we have tested, several people experience being booted from the world, where the only clue has been a message which sometimes appears, stating that they have run out of memory.
the world's size on quest is ~26Mb
We've tried clearing the cache, but it does not seem to resolve the issue, and I've yet to find other suggestions to this specific problem.
I'm thinking that the culprits could be one or more of the below:
-
Too many objects in the scene
(As I recall, unity only render the objects that it can actually see, and most places they see much less objects than is even in the standard VRchat home, but the problem seems to occur everywhere. I'm considering to bake an occlusion map regardless. Also yes, I made sure the objects were mostly as low poly as I could get them, and I mostly used VRchat Toon Lit shader if I could get away with it.) -
Six constant looping music
(Basically for ambience in different parts of the world) -
Two particle systems
(both: max particles 1000, rate over time 500, lifetime random between 50 and 100) -
About 100+ canvasses
(because buttons needs to be located many different places, but it pains me to place that many, as I have seen canvasses as taking up quite a bit of space when observing them in Unity's profiler in the past) -
Bad routers
(because we use three, and the headsets using one particular router seems more stable in not getting booted)
Any thoughts and ideas?
Literally just as the error says, the quest ran out of memory. Q1 has like 2gb of ram iirc. That goes very fast. Six audio sources could be a pretty big hit on memory, ensure your audio files are very small and set to be compressed in memory. You may want to use area triggers so only audio near the player is active. Or remove these outright on the quest.
Textures and light mapping can also take a chunk in memory. Compressed textured uncompress into memory.
Canvasses is certainly excessive. You should rethink design if you're relying on that many.
Too many meshes.
Too many materials.
Thank you for the reply. How low would you suggest he audio files should be?
Also I can see we have 77 materials in total. If I do some funny buisness, I should be able to kill off like 42 of them I'd wager, by stuffing the images into one texture, and project the UVs to their correct image. Would that be a better option?
It's always a good idea to atlas materials together like that where possible
does unity have some easy atlassing tool like CATS/Blender? Or
There's a few things I was able to find like this - https://assetstore.unity.com/packages/tools/modeling/atlas-maker-136215. That being said atlasing environments can be quite different to atlasing avatars, depends on what you need
Yeah, i'm familiar with optimizing avatars. With worlds i have no idea where to start haha
i'll check that, ty
Okay, then it's worth pointing out that unlike avatars a lot of large environment objects like building surfaces won't atlas unless you're using Blender and can essentially "cut up" the surface into chunks.
If you're aware of how UV unwrapping works then it's important to understand that with avatars, UV unwraps almost always lie between the values of 0 and 1 (the space that the texture occupies across it's X and Y axis), and auto-atlas tools found in CATS uses this to simply shrink and move UV coordinates into smaller sections.
With environment objects this often isn't possible as surface UV coordinates will be much larger than the 0-1 bounds of the texture, and its how a texture continually repeats across a large surface.
Merging small objects that have their UV space within the 0-1 bounds is doable, though the addon I linked only combines textures - not the UV data in meshes which you also need.
77 materials is quite a lot. that's likely to send draw calls through the roof. look into material atlasing... as the other poster said, you pack the UV shells of multiple objects into a single map, then use a single material for all of them.
trim texturing /trim sheets is another good trick for environments. you basically slice up your uv tile into tileable horizontal strips that describe different materials like walls, molding, baseboards, etc, and arrange the UVs on your various objects to match. means you can texture tons of space with a single material
I've noticed on some worlds for the Q1 exclusively that you'll get an out of memory warning too, but if you immediately load the world again, without doing anything at all, it will load fine with no issues at all and perform as expected. Not sure if it's some form of memory bug, bad garbage collection, or something. But it's kinda odd. If it fails on the first try and you get the out of memory warning, going again immediately will almost always succeed if the world is indeed functional.
has anyone come across this error when trying to build for android/occulus?
Assembly with name 'Unity.XR.Oculus.Editor' already exists (Packages/com.unity.xr.oculus/Editor/Unity.XR.Oculus.Editor.asmdef)
i cant get rid of this error I googled it and others are getting the same thing.. im not sure how to fix it
https://forums.oculusvr.com/t5/Unity-VR-Development/Assembly-with-name-Unity-XR-Oculus-Editor-already-exists/td-p/839295
I have tried to update to the latest oculus unity integration. I'm stuck in package limbo.ย I see Assembly with name 'Unity.XR.Oculus.Editor' already exists (Packages/com.unity.xr.oculus.android/Editor/Unity.XR.Oculus.Editor.asmdef) Assembly with name 'Unity.XR.Oculus.Editor' already exists (Packa...
Do you have the Oculus SDK imported into your project? If so, remove it
ya that got it thanks
Error converting build target group names .
Must specify valid information for parsing in the string.
UnityEngine.SubsystemManager:Internal_ReloadSubsystemsCompleted ()
now this popped up
Hmm, only place I recognize subsystem from is here, do you have any of this XR stuff installed in the package manager? If so remove that too
Or do you have any XR stuff or objects using components from the Oculus SDK leftover in your scene maybe?
crunch compression?
its in the import options
Ah, gotcha. If textures ever become a problem in my world i'll check it out :D
Note, this reduces the download size of the world but not the size in memory.
yes 
any tips for size in memory?
decrease the resolution of it
like if you have a 2k texture and it still looks decent in 1K use the 1K
in that case you probably need the resolution
also stuff like roughness Maps or metallic Maps might be a good spot to Target a resolution reduction
like a metallic map is just a black and white texture that's pretty much just going to be solid blobs
yea
I always find I end up with a bunch of normal maps that are like 4k and huge file size but are literally one flat color and don't even contain any details lol
then you should remove those normal Maps
So I usually have a handful that I straight up delete, and others that are big blobby textures that look exactly the same at like 128 or 256
Yep
It's just funny to look at what's taking up space in a world with assets you've imported, and find it's a bunch of blank 4k normal maps that aren't doing anything ๐
fuck it
unnormal maps
so with the vrsdk, when optimizing a world, we dont use the XR plugin right?
Right, XR is for multiplatform integration and nothing we are concerned with. Optimization is: Mesh, atlas, compression, lighting, and size. simplified. If you make use of Udon or UdonSharp you also then get to focus on code optimization.
^generalized of course. Point being, ignore the plugins. the vrc toolkit which needs to be added to the CC is your first step into optimization, followed by the profiler and then the built in stats monitor.
ok and one more question, i know it says on the website that there are no shader limitations for worlds on quest, but is there a performance benefit to switch from unitys "standard" to the vrc provided "standard lite"
or will using unitys standard really not affect it much? cuz when i swap some to the standard lite, they become a lot more dull
This isn't true how you've worded it. There are limitations. The quest for instance can not use GrabPass. So any shader using a grabpass will break the world, among other unsupported shaders.
You're allowed to use unsupported shaders for worlds, but it's absolutely no guarantee they will work at all. Some unsupported shaders may cause a heavy hit to performance.
It is best to use the quest shaders when possible, as they have the least overhead.
Standard is usable but if you're not specifically needing a part of standard that isn't in Standard lite. There is no reason to not use standard lite.
Poiyomi Toon has been shown to work pretty well for quest assuming all materials are locked in, and no unsupported aspects of the shader are used. When locked in, it would perform virtually the same as standard.
Everything needs to be tested by you as you add more unsupported shaders. Performance and function isn't guaranteed so it's up to you to ensure it functions and ensure you don't use any unsupported shaders.
Good luck
Hey! Is there a way to check what am i importing and what size ? I made a world in blender(8mb), then i put textures inside unity, compressed them into around 170kb each and i did this with every asset i put, like rocks and trees but the world still says its 100mb
https://github.com/oneVR/VRWorldToolkit this tool can tell you what's causing the file size to be big
Thanks! I tried going through each object in the scene and checking the textures but its pain haha
this will be a lot faster as they'll give you a list of everything
Yeah found it thanks a lot!
so what was taking up the file size
other cubemap idk where i am using it lol, shader, and then there is a normal map in array its for the trees but idk how to unpack it so i will just get rid of it probably
I'm trying to profile my world to see if it is event optimized
I'm getting 8.2Ms on my CPU but 7.6Ms of that is "PlayerLoop"
The part that appears to be handling my scripts only takes 1.5Ms.
Is there a way to lower the PlayerLoop miliseconds?
Basicaly, how do I ensure my CPU utilzation is as low as possible as I am being very light on the GPU already (1Ms at max)
Currently working on a world and when i test on pc, in some locations i am less than 60fps and others i'm at 100+, could someone help me out with optimising it? thanks!
VRChat world works fine in build test, but when I try to access it in game after uploading it, it crashes and sends me back to home world. Is this a common issue?
Is there a way to reduce my world size from 245mb to below 100? Or have i done too much to my project?
https://github.com/oneVR/VRWorldToolkit this tool tells you what to take a file size and has a crunch compress all the textures button
^^ use that tool and probably reduce the size of a lot of textures and set them all the crunch compression
thankyou so much!
Check that you have remebered to set the spawn point in the VRC descriptor. If you have that, then check if your world might be too big.
@obtuse bronzeAre you talking about file size or in-game world size?
File size its only 50mb or so.
Then check the spawn point. I brainfarted a while ago, and forgot to put in a transform, so I got booted back to home world.
I got my spawn point as a transform.
is it oculus or PC build?
PC build
Ok, then I don't know anything to further help. Sorry ๐
Its cool. I've been having all sorts of trouble with it. First few days it was working great! Now, I'm having all of these problems just popping up left and right, lol. This all started happening right after the more recent update to SDK3 that I imported.
Not sure if maybe some of my assets just don't like the new updates. If that's the case, then I'd have to start removing stuff from the world.
uff, sounds like I should take care if I update the SDK3 then ๐
Ha, yeah. Who knows? Maybe this is just an isolated incident in my case.
or were you updating from SDK2 to SDK3? ๐ค
No, I started getting into world building about a week ago, and then I saw that SDK3 had a newer update over the weekend if I remember correctly. I have a habit of checking for updates every other day or so.
Arh, I see ^^ I'm fairly new to this myself, popping in and out, depending on work assignments ๐
Same. I'm honestly stumped at this point, lol. I'm trying to back track at this point to see if maybe there was something I added or changed in settings that caused this. Everything on initial setup should be good, but I might have to start over and go step by step again.
also, check the log on your PC, and see if you can get a hint there. It is quite extensive in length though
because one never know if there might be a bug๐
Very possible
I think I finally fixed the issues
Looks like it was being caused by having too many specific colliders along with 2 or 3 assets that just didn't want to play nice with Unity.
Removed the problem assets and colliders, and now its loading!
No errors showing up in the console. Its a clean buld.
build*
Neat. I will remember that as a case issue for my future work. Although I'm very tedious when it comes to using physics layers, to avoid too many collisions progging, and normally disables colliders when I can, It is good to know, that it may cause crashes ๐
anyone know the most performant way to light avatars? single light only, light probes only or just cranking up the environment lighting?
light probes
hey! so i have my world done for a bit now and i wanted to set it public, i found something dating back to 2018
saying that you need to send a email to vrchat (email was given). But when i send an email i got a notification that
it wasnt send does anyone maybe know the new way to set your world public?
That's..... Very old and not the case anymore. You need to submit your world to labs. This can be done on the website, or the world upload screen in unity when uploading.
ooh alright alright thank you!
i really need some help
when im baking lights it just stays on preparing bake then says in console lighting data incompatible with current version of unity
What exactly am I doing wrong here? Nothing else in the scene is occluder static except for these boxes that I have set to block camera visibility. Inside of these boxes, stuff is flickering even though there are no occluder static front faces that would be occluding it
another example. Nothing inside is being occlusion culled
Are the boxes not supposed to enclose the area I want to occlude?
Seems like I got the occlusion to work somewhat by setting the smallest hole as 0, but the flickering still happens. Smallest occluder is set as 4 which is the smallest size of one of the axis on one of the cubes
The Occlusion Areas are. Have you changed the occluder/occludee settings of objects in your scene?
Its in the Object tab of the Occlusion window and options will appear whenever you select a GameObject with a MeshRenderer component. Generally speaking really big objects should never be occludees and small objects should never be occluders
yes I have. My post already explains
sorry I missed that ๐
I don't have any suggestions yet then, I recently started implementing it and i'm aware it can be quite flaky
btw, occlusion areas only limit the areas the baking process needs to consider. Occluder static marked objects are what culls occludees
either way, I still need help on this because my brain is melting
I know, I guess I misunderstood that part of your question too ๐
I reckon the occlusion I added will be missed up as it's rare Unity "just works", if I find something that is actually helpful i'll let you know ๐
Yeah. My scene is really complex which is why I'm trying to do the cube strat
Here's one suggestion, shouldn't the box not surround the objects but merely act as a wall?
That's what I was thinking and might try
but shouldn't my way work either way
since it should only consider occluder static front faces
That would be a good assumption but Unity has so many corner cases and inconsistent behaviours that i'd never assume
If you are trying to completely make something invisible in a cube you make the cube with occlusion portals with the open checkbox turned off. Then they act as invisible occluders. The occlusion areas are just more precise data like mentioned above
thx a ton this helped me understand it a lot more
Oh you welcome :> ๐
Does light probes help performance?
baked lighting helps performance. light probes are just there to apply baked lighting to non-static objects
ah, i have a huge warehouse that has a lot of objects and it performs horrible in vr
well, if you have a huge warehouse with a lot of objects, there's other stuff you'll probably need to do to optimize
first would be to atlas materials as much as possible. this means grouping up multiple objects into one UV tile and shading them all under one material
second would be enabling GPU instancing on these materials
third would be occlusion culling
Light probes are a lot faster than realtime lights from what I've seen!!! but yea toadstorm gives a good list. If you can find a mesh combiner plugin for unity that helps too. I paid for a nice add on that does this but there's a free one on unity asset store simply called mesh combiner.
occlusion culling was super weird to find a solid total on, but that helped a LOT
and yeah the mesh combiner helped too
nice!! I had to fiddle with occlusion culling a long time to get it working properly without bugs ;-;
anyone have good settings or recommendations on how to make a super optimized glass material for quest? by that i mean vrc mobile shaders if possible
You can't compress generated meshes when you use mesh combiner. It's better to export the meshes as an FBX and combine them in blender. It's like one button click. Then just export it as a fbx into unity and you're able to compress the mesh again to at least medium.
The amount of individual parts in the prefabs are ridiculous, it would take days to reconstruct it in blender
What. No. You just export as fbx. Then drag it back in. Takes seconds..... Nothing has to be "rebuilt".
Regardless, my point is, that combining in unity isn't a good practice, it's easy for testing, prototyping, and stuff. But you're unable to compress generated meshes and they have other more technical downsides as well. Exporting and combining in blender is the right way and takes literally seconds. Unity has a FBX export tool that works well enough and it's as easy as export, open in blender, join the parts that need to be joined which is two button presses or a single menu press, export, swap out in unity. Done.
thats a good point
It is, I just donโt know how to haha
Thereโs no option
at least to โexportโ or โconvertโ anything I can see
Maybe itโs an add-on? I have no idea
yea ... I think there's yet another addon that lets you export meshes from .asset files into fbx but idk if it's free or not :/
cough
Thanks so much for your help though
It's in the asset manager. You need to add it to your project. Google will show you how to use the manager. It's called FBX Exporter. Once added you just right click meshes and click export as fbx.
what is unknown lol
I found out why my world was so laggy- it was the fact all of my baked lights were still on
If they're baked, that shouldn't matter 
It sure as hell did ๐
Disabled all of them, brought FPS up by 30 and download size down by 50 mb
Maybe because theyโre prefab lights?
Are you sure they were baked and not just set to "baked"
baking lights wouldn't bring the download size down at all, if anything it would increase the size due to lightmaps. sounds like there's something particularly weird about the prefab lights you're using
Yeah, I suppose so. All I know is that what I did work and it didnโt decrease the experience at all
Can you post a screenshot of how your world looks post lightbake ?
Definitely baked, there was almost 80 mb of uncompressed light maps lol
I donโt currently have it up
Sweet, wanted to make sure just in case, but if you have lightmaps that should be fine. Still weirded out by your world size decreasing by disabling lights though
there must have been some really heavy textures included in the light prefab he was using... hdr cubemaps or light textures or w/e
I have a simple script in my world to spawn a small static sphere whereever a ray is colliding with. everything works great but these sphere counts add up very quickly (potentially 10s of thousands)
would it be better to use particles instead of geometry to mark these points? is it possible to create these particles using one particles system and continue adding to it or do I need a separate particle system for each dot
the rest of the world is very optimized and this should be the only thing that otherwise affects performance
Try the better build report tool I made. https://vsk.lox9973.com/abstat/
hey what shaders are supported in quest vr chat but still do the same effect as the one i usually use (standard)
Shaders for quest are under Vrchat>Mobile
StandardLite would be the comparable shader to standard.
Quest worlds are allowed to use unsupported shaders, but it's up to you to performance test and ensure everything works. For instance, you can use Poiyomi, standard, or a fairly wide range of shadertoy shaders, but there's simply no guarantee it will work right or well and is purely up to you to play around.
i do have alot of quest friends and when they play they get around 40 - 60 fps
even with standard
but ill use standardlite
k i tested standard lite and im not a fan of it, thanks for reccomending it tho!
I didn't recommend anything. 
wrong word i guess ๐
using lite shaders might help, but you'll likely get more of a performance boost by reducing the number of materials you're using overall, GPU instancing if you have a lot of duplicates of the same object, and setting up occlusion culling if your world is large / has a lot of rooms
Currently trying to improve FPS in my world, OCC is fully set up however when other areas are enabled (located very far away, OCC'd out), theyre still affecting performance rather drastically still. Trying to figure out whats causing it but also thinking, what if the area is turned off locally and when you TP to that area it enables it and disables the area behind, is that viable or dumb?
Does your world have realtime lighting ?
No, baked entirely.
currently trying to debug it in world with others
Occlusion culling, frustum culling and LOD culling all only cull meshes. They do not disable any running logic, cameras, etc. In those areas.
You may also want to utilize the frame debugger as well as the overdraw visualization mode with the occlusion culling preview mode to ensure things are culling.
Do note there is also a performance hit to using occlusion culling, depending on your setup it may or may not hit the CPU hard.
If rooms are separated and spaced out (nothing too far from 0:0:0) it may be best to just use protected triggers to enable/disable areas entirely. Occlusion culling isn't really the best for when your rooms are all spaced out and teleporters are used to get between them.
Debugging is done in unity 
i know, i have unity open as well, we're ingame to see vr performance as i turn things on n off etc, re upload, to see if theres anything going on.
this last bit is what i was asking, il add them to the teleports. thank you.
Does anyone know of a shader that is just unlit texture+vertex colours
Trying to find the cheapest shader I can atm and landed on standerd lite tho that has options I'm not using
right click on the project window and create a new unlit shader.
open it on any editor.
after the cgprogram, remove:
#pragma multi_compile_fog
#include "UnityCG.cginc"
on the appdata structure, add:
fixed4 Vcolor : COLOR0;
on the v2f structure:
remove unity_fog_coords(1)
add fixed4 Vcolor : COLOR0;
on the vert program:
remove unity_transfer_fog(o,o.vertex);
add o.Vcolor = v.Vcolor; (before the return o; line)
on the frag program:
remove unity_apply_fog(i.fogcoord,col);
change the fixed4 col = tex2D(_MainTex, i.uv); line to fixed4 col = tex2D(_MainTex, i.uv) * i.Vcolor;
you can remove the comments if you want, it's not necessary but i always do it to clean up the code
is there a consensus on whether using a mesh vs using a unity terrain is better optimization wise? assuming that the landscape will be fairly small and the shader complexity is about the same
im assuming vrchat is forward rendered and iirc unity terrains have to be computed multiple times for depth and lighting which is pretty expensive
Yeah mesh is definitely better afaik
ok good
because unity terrain tools are also miserable
the only trade off i can think of is for lods
Can always use unity terrain tools if you want and then export to fbx and use the fbx
god no
Yeah exactly
have you done mesh terrains?
Not in VRchat but all of my standalone projects use mesh terrain yeah
do you use something like splatmaps?
or vertex color
ah ok
I have heard things about terrain meshes being bad for performance, but I gave up on them for reasons unrelated to performance so I couldn't identify what exactly makes using them a problem.
For terrains my bet would be to just use sculpted meshes in Blender and export to Unity, and if you're still new to Unity you could experiment with Polybrush - it lets you paint textures onto any kind of object surface and that should be easier to use then setting up a custom shader and painting Vertex Color data in Blender.
This only applies if the scene is relatively small (around 100m X 2). Any bigger and you might have to start thinking about terrain mesh splitting and LODs, all the fun things.
What are some basic things I can do to start optimizing my world? The current download size is 106mb.
crunch your textures
for file size, the biggest offender is almost always textures, so use crunch compression and possibly reduce the resolution of textures in your project that don't need to be super high.
do it to your skybox too
What's the recommended texture size for quality and performance?
as low as you can get it without a huge visual loss
maps/masks can usually be pretty low
like normal maps
yeah there's no minimum size really... it's all relative to what level of fidelity you need in your scene
for example if there's a texture on the ceiling that you know nobody is going to see up close, you can probably get away with a lower resolution
i import everything as high res and let unity do the compressing, after i just play around with how low i can get it while also having it still be within my personal taste
it tells you what size your image is before and after compression so you can get a mild idea on the size reduction
Thanks. I compressed a lot of textures down from 2048 to 1024 and the download is now just over 80mb! About 25mb saved just because of that with almost no noticeable downgrade in looks.
Compressed more stuff and got it down to 72mb. More than happy.
https://github.com/oneVR/VRWorldToolkit this has a tool that lets you know what's taking up file size and crunch compress everything in the scene
Because of the fact that Poiyomi compiles into optimized versions of the uber shader based on selected properties, would it be reasonable to use in worlds?
So far, the pros on my end are that it supports Physically Based Rendering and can provide a standard-like look, and that it also supports matcaps with masks, so I'm using the matcap on fake windows and wanting as much as possible in the map to batch. It also seems like it supports some cheap specular highlights from spherical harmonics as my map only uses baked lighting.
The cons is that I don't know the cons. Idk if it's just not practical or if it goes through too many passes if this or that is present or if there's a better option. Pointers are really appreciated
Here's a benchmark of it
thank you. This helps a ton
the unity video player makes my world 200mb and i literally am using ther normal shaders and stuff. i don't understand why'
I think that depends more on the render texture it's using for the video other than shader, but it shouldn't be that much of a memory increase
my video is 1920x1080 60fps and it was like 3 mins long
Ah ok you mean a video directly on your world
Well now that depends on the format and compression
Hey guys, I'm new with crunch compression/crunching, do you bake lighting then crunch or the other way around? ty for reply.
Anyone know a way I could lower the amount of frames that are being taken away for a world with a bunch of real-time lights for quest? Also without baking lights (every time I tried it didnโt wanna start baking) currently getting 20-25FPS
running real-time lights on quest is a recipe for pain. if you don't need precise illumination for all those lights you could try setting them to Not Important which means they'll only provide vertex lighting rather than pixel lighting. really you should just figure out the bake process.
Every time I tried to bake it would either crash my unity or freeze it anyway
you're going to have to fix your baking so it works
What is it that you'd like to crunch? Your textures, or your light map?
Lightmaps aren't usually crunch compressed. You can enable crunch compression, but (with the default settings) there isn't much of a difference in file size. When I want to make my lightmaps smaller (for quest), I usually just decrease their resolution on that platform.
For other textures, I usually keep them crunch compressed all the time. It shouldn't affect the quality of your final bake too much, though... it's an interesting thought, actually! Using 'raw' textures for bakes only.
This was the one I was trying to crunch textures
I already baked a lighting, then crunch compressed it. then this happened
If you disable crunch compression, does that resolve your issue?
If it remains, then we're probably looking at mismatched UVs instead..!
I'll try checking it out later, ty for the help!
hi im unable to upload world cause its over 50mb for quest is there anyway around this cause im compressing all textures to 512 from 2048 and its doing nothing to the mb count help plz
The limit is 100mb... If you're seeing a 50mb limit, your sdk is probably very out of date and needs to be updated.
my savior thank you so much
Bake them on PC
and then switch to quest
thats what i do
as for results?? go to the world called "Backrooms VRC"
so i uploaded my world earlier it was the same mb size now it wont let me upload it its a windows build https://gyazo.com/484a6a5499a530de8d9ff5cb2e40e073 what do i do?
@lilac saddle Have you tried building and testing, to see if the error may be erraneous? Double-check that your platform is Windows, not Android
how i prevent vrchat kicking me out of own world after loading in
Help. I've done literally everything I can think of
Sounds compressed, textures compressed, meshes compressed
https://github.com/oneVR/VRWorldToolkit this tool can tell you what's taking up file size
I have that installed. Where do I see what's taking up file size
VRWorldToolkit at the top > World Debugger > Build Report tab
how do you bake lights? preferably without changing the look of the lighting (dont care about real time lighting, it just makes my world hella laggy since i have a lot of lights)
I'm not really understanding it, it's talking about more realistic lighting that increases file size?
I'm just trying to get the world to not give lower end devices heavy frame drops
increasing frame rate would also be baked lighting
You can support me on my pateron
https://www.patreon.com/mcphersonsound
This is a longer tutorial than normal and there is a lot to cover so here are time stamps for your convivence.
00:00 what is baked lighting
00:35 setting up lights
1:23 preparing meshes to bake
2:30 generate lightmap UV
3:28 light probes
5:10 reflection probes
6:00 emissive ...
I'm making a scanner sombre inspired world, uses my own unlit shader and a simple mesh renderer game object for the dots. Works fine, but on quest after having scanned for a few minutes the FPS starts to decrease when looking back at what you've done
Is there any better solutions of rendering lots of dots at a time?
Right now I'll be implementing a system that removes dots after a certain amount of time but leaving this here if anyone knows any methods ^^'
Make sure the material for the dots is set to use GPU instancing
Then it can render all of them together in one pass instead of one at a time
Unitys Frame Debugger tool can give you a nice breakdown of that kind of thing, and also suggest reasons why things aren't being rendered together when they should be
Other than that I would consider using a particle system instead of gameobjects, but I don't know how practical that would be for how your world works
I kind of haven't been able to figure out how to manually spawn individual particles from an emitter in a certain location ^^' that'd work though
thanks for letting me know about the GPU instancing thing
Quick question
Does a big mirror tank more performance than a small mirror?
is it difference if i use same objects over and over again or prefab instead
If you change the prefab, everything changes with it
If you unpack it, nothing will change when you edit the prefab
thats actually handy
if i want to edit script
and will need some object in these objects
i would have to edit 5000 objects separate
yus
but performance sided its same
Yeah, it's the same.
thought it might load world faster
since it loads prefab by prefab rather than object spam
whats the timeout time that if i exceed it during loading it will kick me out for vrchat not responding
i need more world optimization 1 minute loading time in unity is still too long and kicks me out in vrchat
probably would help to know what you're working with
optimizing worlds doesn't really change between them though
https://github.com/oneVR/VRWorldToolkit/releases this tool can tell you whats taking up space
is there a world size limt for PC?
The reality is, you'll be hard pressed to get the vast majority of people to download anything over 100-200mb. So while you can go over that, nobody is gonna go there unless it's some stupid awesome experience but even then.
My world has a 500 megabyte download. I already did crunch compression at 50%, what more can I do to lessen that number?
this world really shouldnt be more than 150 gigs in comparison to similar worlds
download VRWorldToolkit, that'll tell you where all your MB are going
99% of the time it's all textures
noted
alright its imported, how do I check?
do a build & test, then check the VRWorldToolkit UI for the build report. that'll tell you what assets are taking up the most space
huh, turns out my reflection probes werent actually compressing themselves
gotta love it
anyways world size is down at 197 from 519 now
nice-sized Improvement
Besides using compression I would also lower the resolution of textures that don't need to be high res. For example I usually find a few assets have giant 4k/8k normal maps even though it's a flat surface with literally no detail and the normal map is just a single color that's not even doing anything. Or the map is something like blurry waves that can be represented perfectly fine at 256x256 res instead of 4k or whatever
Some maps definitely need that high res level of detail but plenty don't, or the difference is negligible and worth the sacrifice
So is using a directional light that only affects the layers "player" and "playerlocal" a good way to handle player lighting?
It is what my world currently uses since I wanted the player's brightness to change when they swapped between the baked day and night modes.
The world seems to be fine with it, but since performance loss would scale linearly with the amount of players I haven't yet seen if it becomes a problem at high player counts.
I wasn't the one who asked, but my god is this tool amazing!
it's very handy
I'm trying to upload a world I made to be compatible for Quest but when I try to switch build target to android I get the error "androidplayer is disabled" is there a reason for that or how can I enable it?
did you install the Android build when you installed Unity
is it worth it sacrificing 30~MB for optimization? After setting all my trees/bushes/whatever to static, the game is locked at 90fps but the map weighs slightly over 40MB now (15 before)
I'd do it, download size is a one off thing, performance is more important.
And it isn't like 40MB is large.
I'd say that's a fair trade-off
I've modeled my world entirely as 1 main mesh, and it uses a non-convex mesh collider for collisions (it's required for my use case). Is it a good idea to split up certain parts that can be convex as seperate convex mesh colliders?
Since no one has responded, my understanding is that a single low poly collision mesh is better than splitting things up.
Not sure if the total amount of polygons matter, just that you want the avatar collider to have to check as few faces as possible, so preferably being so low poly that a avatar could fit on a single face.
Should avatar pedestals be set to continuous or manual synchronization for its udon behavior?
been having trouble with too many pedestals and i am splitting them up but still getting a weird bug of if you show each box-set of them too fast you still get a long "load" time of none of your own avatars, other people, and pedestals loading for a bit until it finishes up
Is there a way to get a bunch of avatar pedestals to load slowly and gracefully?
I already split them up and still getting that issue, i have 160 or so in total so far
I suppose you could use a script with a coroutine so that it enables one pedestal at a time, with an arbitrary time delay between each one
well i feel i have a unique problem no other avatar worlds with large number of pedestals have, and im wondering if its a weird setting somewhere i have set thats causing it
Hm I'm not sure what you mean then
well its doing this, where if i load too many or before where it all loaded in at once, itd halt all loading of new avatars and even all favorite and my own avatars and lots of other online features until its done
though at the moment, i think i mitigated it slightly where if someone turns on a batch of them (i have 4 buttons) and not immediatly try to open them all and wait like 20 seconds it works
personally i dont think udon worlds like opening 162 avatars at once
where as sdk2 didnt seem to mind
You should never load that many anyways. Just load groups. Or use area triggers to only load the ones closest to a user as they walk around. All or nothing when you're doing a fuck ton of pedestals is just bad design.
well thats why im segmenting it, right now i split it into 4 groups
did that just today
with my layout, im not really sure how else to reorganize 162 pedestals at the moment. kinda wish vrc just had a prefab of just putting a single id and having it show all my public in a list or something but thatd be too easy
yeah i tried that, but you have to manually take a picture and input one for EVERY avatar
it doesnt auto load it from the api
and i aint doing that 160+ times
cool prefab if you have a few avatars but nightmare if you have alot
don't do this. separate objects where possible and let batching handle merging objects at runtime. modeling everything as a single mesh will screw with reflections, prevent frustum culling, and make occlusion culling impossible
thing is, my colliders aren't being rendered at all, it's just to check for raycasts
which in turn visualize the environment
is your world mesh modeled as a single object? or you're only talking about colliders?
mostly a single object- the world is not visible, the colliders more or less become whats visible as particles get created along raycast hits
ah so this is some unusual special effects thing
yeah ~
personally i would break things up into multiple convex hulls for simplicity and only use mesh colliders in places where the object can't be described by simple convex primitives
boxes, cylinders, etc
this is what I've been doing ^^' nice to get some more confirmation though
thankyou ))
I am making a castle, and I was wondering: should I split the mesh into parts so the world can unload parts of it that arent in view, or does that increase the number of draw calls and make it not worth it?
Depends how high poly the pieces are tbh, not worth doing if it's not massive, 30 drawcalls also won't make a difference
What is "massive" in vrchat terms? The mockup of the whole thing is about 250k (this includes some things that would definitely be split off though)
depends are you targeting PC or Quest
PC, making it work for quest as well would be nice, but I probably wont be able to
250k for PC is pretty low
Good to hear, I expected it to be a few times higher once all the set dressing is in place (depending on what I do with it). I'm sure that what I make will be fine for PC, but I'm always interested in learning the fundamentals of what makes good performance just to make a habit of making optimal content. (and thanks for the help btw!)
would like to know which would be better for tiling textures, multiple materials? or shader lerping between textures using a mask texture?
Shader 
if it's helpful knowledge the Shader would let you use less draw calls potentially as one of your main enemies for optimization is draw calls
How can I make a mirror only reflect stuff in a certain radius? The world runs at 90+ fps normally, but when I look at the mirror it drops to 40
thank you
https://github.com/acertainbluecat/VRCPlayersOnlyMirror another option if you just want a mirror that only shows players
would it be possible to attach pickup object scripts to bones and have one big skinned mesh for all the little do-dads in a world? or should i stick with having individual objects
Well that sounds odd af. One giant skinned mesh tho would = one giant bound so none of the "pickups" would cull so long as any part of the huge smr bound is visible, if I'm understanding your intent.
things would be pretty low detail, just like balls, pillows, toothbrush ect. might experiment with it!
thats just wrong. 30 Drawcalls makes a massive difference. notice how much of a difference there is if an avatar uses 30 matierals vs 1? the difference can be gigabytes of Video memory. depending on the size of the textures obviously. if a world takes up 30-50% of a high end users Vram budget. then you can expect low/mid ranges users to be hit with minimum of 50% obviously. this all depends on if it's a static castle that do not change. as in no light change etc. objects not moving around or materials changing then the difference is minimal
the only reason why it wouldn't matter to much if it was alot of the same materials etc since unity would automaticly batch everything. that it considers similar or same. so if you had 10 x objects with 10 materials each. thats 100 drawcalls. but if they are the same materials across all 10 it can be reduced alot. i dont know exact amount but more then half. so instead of 100 drawcalls that would end up being 50. or lower
it's rarely worth splitting up something like that castle. unless it has alot of polygons and or materials. and i would say no its not worth the extra cost. that amount resource you end up using could be used on making other parts of the world making it better looking. or even the castle itself higher polygon count etc.
That was from nearly a week ago....
still matters.
Thanks, I appreciate it
My main concern was texture size. I was prepared to unwrap this whole castle as a single mesh with a giant atlased texture, but was worried that the overall texture memory from storing an 8k texture or whatever might outweight the benefit of it being a single mesh.
eh 8k is fine. since its only one texture that takes up 64 mb.
when it comes to Textures and materials etc. if avatars keep it max at 4k. no point in beyond. unless you need to combine alot of textures go 8k. and in your case i would highly recommend 8k. since its fine if a world uses like 512 mb of vram of even 1024 mb
what you generally need to be worried about is how many lights sources, dynamic or static. since each light is another drawcall. etc.
just baked all of your lighting and you'll be fine
yea.
baked light is the best for worlds.
having one or two dynamic lights is fine.
i often see so many worlds take up 4-5 GB of vram. which is so much.
Yeah, I'd planned on that, Im not familiar with what it means, technically speaking, but I planned to keep any dynamic light to a minimum
and majority of avatars are typically in between 64-256 mb each
just keep it to max 2 i would say.
honestly if you do your map right you won't need any Dynamic lights
2 total, or 2 that would be loaded at once? Or are they always loaded?
and make a button for people to switch between dynamic and or baked.
2 loaded.
but that said. yea no real need for it.
technically different light types have different costs as far as draw calls
unless you want a really cool day/night cycle.
I wanted people to still be able to cast shadows outside in the moonlight, thats a dynamic light though, right?
does not need to be no
oh wait for real??
you can still cast light with baked.
Man I have so much to learn...
all through
that is abit more advanced.
but if you keep the moonlight as dynamic light that shouldn't hurt to much.
you can just make a toggle for the light for the shadows for the players
Oh for sure
i would say shadows keep them at max 2k. for recasts.
4k and 8k shadows are hella expensive
Yeah, I think people overestimate the resolution that they're seeing things at in VR, lower res stuff still looks fine if its used well
2k looks more then fine in Vr
for shadows.
people tend to overestimate the budget they have for worlds in vrc.
you dont really have a massive budget.
Yeah for sure, I really want to get educated on the fundamentals of optimization and how to best use what I have to work with
so if you can find clever texture reuse for your map do it
like for instance i would keep any world to be max around i dont know 96 drawcalls. because every increase you do in a world means less resources for avatars.
yea 100% lol
Yeah, I've been doing that a lot, trying to find places where my UVs can overlap to do more with less
texture reuse is not a bad thing
if you're trying a big castle like that trim sheets are helpful concept to learn
Free 4 Part Tutorial Series on making trim sheets:
Part 1 - https://youtu.be/DipfrjCgYW8
Part 2 - https://youtu.be/Tspveb9bjYA
Part 3 - https://youtu.be/CarefswACgs
Part 4 - https://youtu.be/VEHsZniXguY
Free UE4 lighting presets + Tutorial : https://youtu.be/_bqpw5sOwr4
Get the example texture and mesh files from this tutorial: https://gumroad....
Do either of you know where I could read/watch more about baking lighting and what it means technically? When I first heard baked lighting I was still thinking about it being baked directly into the diffuse map lmao
https://docs.unity3d.com/Manual/LightMode-Baked.html a little bit here
https://developer.arm.com/documentation/102109/0100/Bake-as-much-as-possible also this one might be super useful
Cool, thanks
light baking doesn't occur in blender for vrchat worlds but still good to know how blender baking works
100% but you can still do AO maps. which generally makes a nice effect to
Oh yeah, I've baked things in blender before, but its mostly normal maps or procedural textures to diffuse
Gate from my cloud scenery๐ฐ
Uses just a 512px trimsheet for the whole texturing. (I love trimsheets now!)
#madewithunity #unity3d #gamedev #indiedev #shader
an example of trim sheets on a castle like structure
oof ๐
Settle down bot!
Ok, I think trim sheets were exactly what I was looking for even before this conversation, very excited
but yeah you don't necessarily need a huge amount of textures to make a decent Castle
you can do all the castle in one atlas. but if its to hard its not bad to seperate it into 2
Thats what I was thinking too, espectially since plenty of the textures never get close to the players (rooves ceilings etc) so they can be lower res
they can. but you can solve that with Mip mapping. so further away textures are not using as much.
yeah you can get a lot of mileage out of tiling textures and trim sheets for texturing large objects
https://assets.reedpopcdn.com/zelda-breath-of-the-wild-walkthrough-guide-tips-4857-148847247825.jpg/BROK/resize/1200x1200>/format/jpg/quality/70/zelda-breath-of-the-wild-walkthrough-guide-tips-4857-148847247825.jpg the Temple of Time in like breath of the wild is also a bunch of trim sheets and tiling textures
You're conflating drawcalls with memory usage, they're two completely different things. You could have 100 drawcalls in a world and use 1mb of memory, or 5 drawcalls and use a gb of memory. My point still stands, 30 drawcalls will barely make a noticeable difference on PC in terms of perceived performance
i am not. it was to give an example of material. i was making a direct corrolation between memory and amount of materials.
plus. 30 drawcalls will make a noticeable difference. depending on hardware. but most people will be heavily affected.
So what you were saying was that the memory usage of the materials in question is the big issue, and doing many draw calls with tiny textures/materials wont be a problem?
don't believe me. try and do two different objects one that causes 30 calls. while another that causes one. in vr obviously. in desktop you wont be to affected
ontop of that the idea of optimization is to allocate more resources to allow more players in a world.
no the memory usage and the draw call usage are two completely separate metrics
that's primarily the reason why so many worlds drain your frames. it has to many drawcalls
Have you made any worlds or is that just based on your unity experience ?
10 years of unity. and vr research and development since 2014.
and wasn't the original question to separate the pieces for occlusion purposes wouldn't static batching take care of the draw called Problem?
Memory usage will most likely not differ much. The biggest issue for a lot of materials (with the same texture) with memory usage is material settings, texture bloat, and void space. Bloat meaning needed info for computers to be able to understand what the shader is about and void space is lessened by smart UV mapping and (again, as before, trim sheets). If they don't use the same texture then mostly it'll just be the texture file size that fills the memory.
As for frames; the best for a big castle that has an interior is to separate it and use occlusion culling or unity's standard frustum culling with either a static baking to keep draw calls down through batching or GPU instancing.
static will still do drawcalls. just less intensive
As long as you fall below 200-300 drawcalls in the end, it'll be fine
the good thing about that is the batching
and we are talking about the hero asset of the map
GPU instancing is better in some instances than static batching which is another thing to consider.
yeah GPU instancing would probably work pretty well on the modular pieces if they're low poly enough
for a world keep it below 50 drawcalls

I appreciate the info folks
Good luck !
hope your Castle goes well and if you have anymore questions feel free to ask
often i see to many worlds drop me to 45 fps. with just my self.
and your Castle will probably go fine if it's tiling textures and not trying to uniquely texture the whole thing
100% goodluck
Im sure what will matter most is identifying whatever my bottleneck is (once I get further along)and spending my available time addressing optimizing that
Make sure the world is actually interesting ! Cool world > performant world
of course I just mentioned the trim sheet and tiling texture stuff as might not be obvious to folks who don't have a lot of experience making environment art
Optimization comes second
Honestly. I would say it mostly devolves to what you need it for. But, I'd say try doing trim sheets + 1-3 materials.
Hah, no worries there, cool is easier for me
well you're not going to stick around in a boring world even if it's the most optimized in the world
Not if you're trying to make something interesting 
you can make insanely worlds
I guess it would be better phrase try to be interesting and be the most optimized well keeping the concept
with good looking
I'm approaching this from a perspective of first determining what the world should be, for player experience, and then determining how to make that performative
Go to any of Fins's worlds, some of the most gorgeous and complex, people love them, millions of visits, 500-1000 drawcalls in a lot of those places
Yes, always keep performance in mind, and work towards making it as nice as it can be, but if the experience is compelling, people won't care
It's a balance
do I suppose also a important question with some of this is if the map is PC only
like I could see being completely hyper obsessive about drawcalls if you're trying for the quest
Probably? I'm PC and I'm making this world first and foremost to be the sort of castle that I want to hang out in lol
ehm. suure if you want 30 fps max alone lol.
I sincerely doubt it would be that terrible considering castles provide lots of occlusion opportunities
Its going to have a few places where you can see lots of the castle/some surrounding terrain all at once which might be a bit taxing
hmm. define complex and pretty
It's alright
Check out Aquarius !
you'll probably be fine it's not like you're trying to do something like this https://i0.wp.com/ryanschultz.com/wp-content/uploads/2021/10/VRChat-ONeil-Cylinder.jpg?resize=660%2C498&ssl=1
its alright. seen much better worlds.
District: Roboto has been completed!
Explore this bustling town full of curious droids inhabitants, every corner offers a mysterious glimpse to this humble district. Inspired by Stray as a study piece.
#VRChat
#VRChat_world็ดนไป
1375
451
I feel like you're challenging someone rain
Oh, I'm interested in what you think is a much better world !
I'm also of the opinion that good art direction beats highpoly/textures any day. So looking cool isn't at odds with being performative for me at all.
that map already exists so the challenge has been completed
You challenged them from the future, impressive.
let me find the name of it
like breath of the wild looks pretty nice and it's running on Hardware way less powerful than the average vrchat PC
Some of the remakes of games that focus on "realism" over interesting lighting and art direction lose a bit of visual interest because they set their sights on the wrong goal imo
That's one of the issues with unreal engine ngl. A lot of games that are made would work better in toonish or more unrealistic lighting
now I'm mildly curious if you could fit like the breath of the wild Temple of Time in one big texture Atlas as it's mostly some tiling textures and trim sheets
prob 5-10 atlas
I guess that would depend on your max texture resolution as the breath of the wild textures aren't terribly rez
Yeah some of the lighting n that Distric: Roboto world you linked is really pretty
world name is organism
like doing some quick Googling apparently 1024 is like the max size of the textures in breath of the Wild
by DrMorro
it's complex and insanely big. its prob one of my favorite. but i agree fin makes good worlds
Yeah I'm a fan of that world too ! Talked to the creator before, the world is beautiful, although very static, so it's a bit like comparing apple to oranges
Occlusion is doing a lot of the legwork
Regarding "static" what does this refer to? Models that dont animate or change?
yes exactly
But if you're thinking of performance, I'm not sure that's the best argument, given that DrMorro didn't even add lightprobes in the world until recently because he thought it would be bad for performance, so who knows what else he did/didn't do
like for example if you know something is static you can just bake the lighting into a texture because it's never going to change
also btw i hope i am not being to mean or anything. i just know quite alot about unity etc. and have been really heavily into optimization etc. while keeping things pretty
It's just hard to take most of what you say at face value given you've not made a world in vrchat, where compromise is key, a lot of creators knowingly make the choice to trade performance for looks/compelling experiences. Not everything needs to be extremely optimized
No one will make a interesting world with 50 drawcalls, hell, making a 50 drawcall world to begin with would be challenging
not yet no. i always jump between projects and not finishing things.
been more busy with avatars
We're all there with you 
question would that be 50 draw calls over the whole map or 50 draw calls loaded in any given time
Yeah ^ same. I put this project down a month or two ago and just picked it up again
i love doing vr devolpment through.
honestly I probably need to try my hand at making a vrchat map I just need to actually figure out what I would want to make
I've been learning c# for career reasons, but I also hope to get into being able to use it in unity to do cool stuff
Even the Devouring, which is made by the most knowledgeable and skilled world creators, and was built with performance in mind, never reaches 50 drawcalls, even though it has a massive amount of occlusion going on and everything atlased
Same thing with Pop Escape. And they're some of the most compelling experience the platform has to offer
must be quite annoying conundrum how much of the player base on the quest2 which doesn't give you many draw calls play with
Yeah I was also wondering if it is possible to make a world that has a pc version and a quest version that would load for those players?
you need to keep it seperate. due to quest 2 limits
make seperate world versions
performance first is just something i deal with due to being a programmer.
Aww dang, i was hoping a pc and a quest player could be in the same world, but only loading their respective version of it
I mean, tbf, you can almost always optimize something more. But, the problem comes in if quality is lost. Or if the thing you're trying to optimize causes less optimization somewhere else.
An example is that you could make each zone in a map in one shader and use shader logic as well as UV zones to keep the same quality but use less draw calls, but, you'd use more GPU resources to do so.
they can. buuut
you just gave a description of cross-compatible worlds
then you need to stay in limits of quest 2
You can have two different maps all together for quest and pc
You could make a map that just has the poop emoji for PC and an amazing mini golf course for quest if you'd like.
Oh interesting, I'll have to read more about that
Setting up a cross-platform world or avatar is actually quite straightforward! In short, all you have to do is use a duplicate project to build an Android version of the asset, and upload it to the same content ID as the VRChat PC asset. The client will manage which version it needs to download. If ...
with the caveat that your concept could actually fit on a quest 2 like no you're not going to get a huge open-world Forest map on the quest
and mostly I picked a forest as an example because that tends to induce lots of alpha overdraw
That's understandable, but the artistic part will likely result in trade-offs, if you have a vision of what needs to be made.
like you probably couldn't get organism to fit on the quest as an example
that you might be able to. but in terms of how limitting it will take a very long time.
Yeah I'll have to look at what the constraints are for that once I get further along. I dont plan on culling things to make it quest compatable, but if its possible I'd like to make non pc players able to experience it too.
the quest has half the floating-point Precision so if a map is big enough no you can't get it on the quest no matter if you turn everything into potato
ikr
depends. tricks can used to make cool af things
cool tricks aren't going to get you like that O'Neill cylinder map on the quest as one of its main points as you can drive around the entirety of the O'Neill cylinder all 32 kilometers of it
Tricks can only get you so far 
nope. but can make something unigue
like if you were just having a chill house in a O'Neill cylinder you could probably do that on the quest as you could turn the cylinder into a Skybox
but that's a very different thing from drive around the entirety of it
you can absolutely have two versions of a world that quest and pc coexist in. Easy Quest Switch facilitates this. just keep same hierarchy.
i do this and swap out shaders/lods
hmm. sweating now. what have you done.
Furality apparently just went with swap everything to Quest shaders and lower lod settings for handling the quest maps on the same project
i prefer a consistent experience, but will do things like change a mesh particle to a billboard for quest, remove normals, etc
Check out the world Frame of Reference when you can !
isn't the whole used to different Unity project version going to easily result in hierarchy desync
back when we only had 50mb for Quest, you hsd to make a lot more compromises. 100mb is very doable now.
๐
alright
ruuubick i havent even started thinking about making that quest yet
a map making friend of mine was very pleased when the limit got doubled as it let them include the full map in the quest build instead of just a little chunk of it
dog park was brutal at 50mb, realistic terrain and foliage is tough
I suggested we bump it a while ago, everyone went "Yeah that makes sense" and we made it happen in a couple of days 
and everyone cheered, literally
I made sure to include as many screenshots of world creators tearing their hair out to save those few kilobytes just to be below 50mb as possible
lets see this world you two made haha
especially painful when it's the light baking making you over 50mb as you can't really make that any smaller by a couple of KB
Yeah, there's always 30% of that 50mb that is just inherent to unity if you try to make anything meaningful
Ez. Ambient lighting only lol.
Nah. Depends on the world. Adrift is only ambient
honestly given the neon look a proper light bake would have made it look a lot nicer quickly Googling it
Lmao. It was just a joke, but there are no lights to bake. All effects are shader driven.
fair but most Maps aren't Shader toys
Was just a joke...
yes but I don't want the Newbie mapmakers taking the suggestion seriously and skipping out on doing proper lighting
...
People have to make a wide range of choices artistically to achieve the effect, look, style, whatever of the world they're trying to create. Choices have to be made towards optimization and space saving, especially when it's for quest. But optimization shouldn't be entirely at the expense of artistic expression or unique experiences. Properly setup ambient only lighting actually works great for many types of quest worlds and looks totally fine. It saves a ton of file size and works for those who don't have good enough computers for a decent bake. PC worlds can get away with it too but course it looks needlessly flat but reflections from properly setup reflection probes can greatly help that. My statement was a joke. Because why or when someone would do this is up to them purely, but that doesn't mean it's inherently a bad choice or shouldn't be mentioned. Infact I see it as the opposite. Talking about random methods to achieve the style, file size, or whatever limitations we've encountered is important.
Your first mistake was making a joke Merc
Suppose so lol q.q
Can't believe you've done this
like heck even the PS1 could do more intriguing lighting than just ambient only https://twitter.com/Dreamboum/status/1185983405365837824?s=20&t=4ee4G3dbmDPuFGvsx7ubwA
Ok
pretty nice world. frame of reference that is
well how would they know how many draw calls it would be if they're not the mapmaker to complain about too many draw calls
its pretty decent yea. but i did explore it by my self
Because the line between performance and "it runs like shit and it's noticeable" is very very wide
Hence leeway you have in terms of optimization
it really depends. like 300 calls is alot obviously. but it also highly depends on hardware.
It also depends what's grabbing your attention at that moment 
yeah I suppose that is one difference between PC vrchat and Quest vrchat development as the quest is fixed Hardware
beautiful and horror experience
1 material, make everything vertex colours XD
whops sorry for the ping, forgot to uncheck the @ bit
So this might be more of a blender question than anything else, but I figure some folks here might know. I'm baking textures in substance painter, and they look great there, but in blender, the normals look WAY screwy. has anyone experienced this/ know what to do about it?
The crenelations at the top of the tower are weirdly dark in a way they shouldnt be
question how do they look in unity itself as that's the important part
Yeah, Im about to check that, hopefully its fine there, It's just wierd to work on it in blender not knowing if I'll get a cohesive appearance in unity
Ah damn, looks wierd in unity too ๐ฆ
did you accidentally export DirectX normal Maps?
I dont think so but im going to check
nope, open GL for the crenelation
Hmm, mightve had a bad normal setting on njob
Yeah problem solved, I was exporting from substance painter with the wrong output template, its all good now
glad it's working now
