Neos-Metaverse / NeosPublic

A public issue/wiki only repository for the NeosVR project
194 stars 9 forks source link

MTC 1.0 Feedback Megathread #364

Closed shiftyscales closed 4 years ago

shiftyscales commented 4 years ago

Submit any feedback, bugs, inconsistencies, performance issues, and any other findings regarding the MTC and MTC related worlds here.

Where possible please include screenshots, or detailed descriptions.

TehTurk commented 4 years ago

Don't know if this was tested, but was all the panels checked on different headsets? Text renders differently per headset. Had this thought when I was running through like man this looks good to read, (But then realized I'm on index)

shiftyscales commented 4 years ago

2020-01-13 18 12 42 2020-01-13 18 12 37

Enverex commented 4 years ago

The mirror in the avatar room brought me down to 20fps immediately, after a few more seconds I was down to 10fps, a few more seconds later I was at less than 1fps and it had effectively soft-crashed me. i7-8700 and a 2080 Ti with 32GB of RAM so not weak hardware either. Index headset.

Frooxius commented 4 years ago

@Enverex What was the GPU/CPU usage like with the mirror? There shouldn't be anything on it that would cause performance degradation, the hit should be pretty much constant.

It's unlikely the hardware, it's probably some kind of pathological case.

Does it happen every time you enter the room?

Enverex commented 4 years ago

It made my computer unusable, I had to kill Neos unfortunately. Someone else reported the same issue with two others so something weird is going on. I'll try again tomorrow and see if I can get CPU/GPU load readouts as it happens.

Frooxius commented 4 years ago

Yeah there's definitely something odd, I've never seen that happen with the mirror before. CPU/GPU readouts during this would definitely help. Potentially log if there's anything unusual in there.

shiftyscales commented 4 years ago

The folding mirror in the avatar creator room is using a lot of performance. In addition to this- it is still rendering even while folded because it is only being 'hidden' by setting the Y scale to 0.

A quick fix I tested was to use Set Component Enabled that turns off the mesh renderer of the mirror tied to a fire on change that uses the & bool. This is a two node solution that drastically reduces the impact of the mirror while it's not in use- although the mirror itself is still quite performance heavy.

I've not yet been able to replicate the issue Enverex had experienced.

2020-01-13 20 18 16

Frooxius commented 4 years ago

That's odd, I'm pretty sure I set it up so it deactivates when it folds up. I'll check the logic and make sure it does, thanks!

In general mirrors will have a pretty heavy performance hit, that's unavoidable as they increase the amount of things required to render. But I'll see what we can do to optimize it more.

I suspect one of the potential issues might be its weird transform and scaling, I'll rework it so it's at unit scale, that could potentially help.

Enverex commented 4 years ago

I've been in worlds with 5 active mirrors and multiple people before without performance getting too bad (e.g. still above 30) so it's definitely more than just mirror based performance hits in this case.

Anomalous commented 4 years ago

If you start the MTC as a private session and take a teleporter to another room, you end up in a public session. Perfectly understandable since they're separate worlds, but it might surprise some people. Is there a way to make the access level propagate when starting the new worlds?

Anomalous commented 4 years ago

I noticed some serious stuttering issues in the room about the camera and streaming. FPS was still showing as 30/45 FPS, but the CPU was pegged at 100% (Ryzen 5 3600). It stayed that way for several minutes. Closing that room reduced CPU usage to less than 40%, and it was fine after re-opening the 2nd time. Nothing in the log file for this time period. If I see it again I'll try to remember to check the timing window.

shiftyscales commented 4 years ago

The only map that appears to have load zones set up by the doors is the hub itself. Every other world (notably the avatar room) loads everything in the map all at once. Ideally there would be loading points at every door that set the active state of the room. This applies to the hallways in the hub too.

Even without drastically altering the contents of the rooms- just setting them as inactive while they aren't in use was helping improve performance a lot in general.

I believe your stuttering issue is related to the video players, @Anomalous. I managed to catch it using process explorer, and a bunch of threads had ties to the libvlc library. As best I can see- this occurs randomly- although it is more likely to happen when there are more video players- like there are in the stream room.

On another note- while it would be nice if the teleporters would consider the current session privacy- in the meantime- if you are set to "Invisible" worlds will always default to private. This applies to Neos in general.

Frooxius commented 4 years ago

There are actually no load zones in any of the maps, just culling in the main hub. Loading isn't a problem in this case though, there's not that unusual amount of stuff.

I do plan to setup culling for other rooms as well, but I couldn't because of time constraints. It will get added soon.

I'll see what can be done about the teleporters, the worlds are opened with LogiX, so I need to add some mechanism for propagating that information.

Thanks for the info!

shiftyscales commented 4 years ago

Misuse of terminology I guess, sorry. The culling is what I was referring to. And it is good to hear they will be added in more places. I do believe that they will help the overall performance a lot for those worlds.

I'm still investigating/profiling where I can to see if I can identify any specific problematic assets, etc.

Frooxius commented 4 years ago

Oh right. I don't think they'll help as much in the other rooms unfortunately, since art room is only one big room and the avatar room has just two small auxiliary ones. But I do want to have them setup regardless for future expansion or even the small boost.

Frooxius commented 4 years ago

Hey everyone!

I've done a bunch of optimizations on the Metaverse Training Center. I reduced the range of lights, added room culling, fixed mirror and did some tweaks to it, replaced videos with static downloads (for now), removed lots of clutter and unnecessary components and colliders, added audio/camera culling (e.g. the headphones won't actually load the radio stream until you put them on the head), deduplicated materials and assets a some other small details.

There are some more things I need to optimize in code (particularly brushes for the art room), but hopefully those things should already help a fair bit.

Could you give MTC a test and see if there's any improvements now?

Thanks everyone for the feedback!

Anomalous commented 4 years ago

Performance does seem better now, though it wasn't bad for me before other than the video bug. It's a solid 45 FPS now instead of varying between 30 and 45 (1070 Ti with motion smoothing on, hence the 90/45/30 fixed rates). Video playback works now.

In the MTC hub I spawn about waist deep in the floor. Other rooms are fine. Tried respawning a couple times and always ended up sunk into the floor.

In the avatar room one of the videos starts out about half way through instead of at the beginning.

In the streaming room the video plays, but the player seems to be bugged. The scrubbing and volume sliders do adjust the playback position and volume, but the UI doesn't update (indicators always stay in the center). Video does play, but the pause icon is always displayed even while the video is playing underneath it.

shiftyscales commented 4 years ago

I can confirm I've spawned in the floor a few times as well. I thought perhaps it's because I have the default scale component on my avatar. But seemingly that isn't the sole cause.

Performance is indeed considerably better across the board from what I've experienced. The framerate manages to hit 90 fairly regularly at the default/recommended resolution in SteamVR (1600x2000 per eye) on a GTX 1070, and in more intense areas hovers around the 70 FPS mark.

There are occasional dips down towards the mid-60s- notably during the door opening animation and particularly in the main hub.

As was said already- not all of the videos are saved at the beginning of the clip. I've not been able to replicate the issues @Anomalous has had regarding the UI indicators failing to update, though. The pause icon hid while the video was playing, and the sliders were sliding as intended.

While messing around with the mirror some more (it performs noticeably better now.) I developed some Logix as a test to have the mirror auto-scale proportionally to the user's framerate. It works incredibly well. The only issue I've had is that it causes the mirror to flicker every second or so. But setting it up this way gave a noticeable improvement in framerate/frametime. Up to a couple of milliseconds.

A system like this would mostly be useful in cases where a user is heavily GPU bottle-necked or on lower-end hardware. I'm not sure if you'd consider doing anything at the engine level as far as dynamic resolution/scaling of render targets is concerned.

2020-01-16 01 44 53

Frooxius commented 4 years ago

@shiftyscales That's good to know, thanks for the info! The video was just an accidental click so that's an easy fix. The hub probably just need a proper spawn area.

It's interesting tricky with the mirror, but dynamic resolution scaling is something that should be done at engine level. Changing resolution like that results in the texture to be deallocated and a new one reallocated every time you change resolution (which is what causes the flicker), so it's adding lots of overhead.

Also I've pushed a new Neos build which has brush preview mesh update culling, this should drastically reduce number of mesh updates each frame in the Art room. Can you guys give it a test?

shiftyscales commented 4 years ago

Yeah. The dynamic resolution scaling was more a proof-of-concept I wanted to throw together. As noted- it actually works incredibly well in the context of the mirrors.

Regarding the art room, and the brush mesh update culling- it seems to work as intended, and quite well at that. If you are watching for it, it can be slightly visually distracting- but it works really well. I was pleased to see that if the brush was scaled up- the distance required to trigger the culling was in turn.

The art room itself could still use a touch more optimization I feel- mostly right at the entrance to the room- the framerate dips to around the mid-high 60s using the same testing conditions I specified before (SteamVR auto scale/122%/1600x2000 per eye on a GTX 1070).

Although once the user is actually in the middle of the room, or towards the edges looking at the art- the framerate stabilizes at a fairly solid/consistent 90 thanks to the view frustum culling.

shiftyscales commented 4 years ago

The red glowing materials on the doorways have been broken.

Abysmal2134 commented 4 years ago

In the avatar creation room the portal option at the mirror can use some improvements.

For instance the grid that indicates that the portal option is selected seems too obstructive. It took me a while to figure out I had to be near enough to the mirror for it to disappear. Maybe having the grid visible only at the edges of the mirror or just an indication on which button is selected itself. This way you can actually see your avatar in full scale from the camera's POV when you're further away from the mirror.

Also the camera auto facing your character might make it easier, but in some cases such as when you want to view your character from below or above it glitches out rotating on a axis. Having an option to turn off that auto tracking can let you position it more precisely in the cases when you want to view under the jaw, or the top of the head, or at a sharper angle.

Maybe have an option for the camera to hide/turn transparent in it's middle and leave the outer loop so that it doesn't obscure your vision when you're using it to examine your character's face from close up?

Having an option to have the mirror stay active in fly mode would be nice too if you want to see characters with specific animations for it too. You can argue it's meant as an introductory tool for new users but I personally would want a optimized version of it it in the Neos Essentials folder for the portal mode alone.

Also when creating my Neos Bot it would have been easier if I could rotate it on the platform similarly how you can rotate the full body calibrator. That way the beam behind it wouldn't be in the way and I would't have had to drag the color palette with me.

TehTurk commented 4 years ago

So going back and checking it out, everything seems pretty good. I noticed the Mirror when on will basically render everything in the world twice. So maybe if the dimensions of the mirror, or at least what it renders is cut down, people would report less issues on lower end PCS. I also noticed that, for most new users I pop on in and check on in and say hi, despite people zipping past the initial controls, they don't see them and run off without even looking and are confused. So the controls issue might be less of it being "intuitive" from new user complaints and more people not reading the tut.

Frooxius commented 4 years ago

Thanks for the feedback! People skipping the parts is pretty common unfortunately, something we dealt with even with the original tutorial video. The intro narrative part that will be added on later should help with that.

@Abysmal2134 It's a bit tricky removing the grid. When we were testing it, the portal was really disorienting given how big it is, so the grid was added to prevent that. It can seem jarring, but it's a lot less than having unobscured portal.

We could see what to do about the auto-tracking, might need a toggle perhaps. You can position it and leave it still and move relative to it.

Rotating the platform for Neos bot seems like a good idea!