Neos-Metaverse / NeosPublic

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

Auto-height scaling causes incorrectly scaled avatars #656

Closed shiftyscales closed 4 years ago

shiftyscales commented 4 years ago

I opened up Neos as a fresh user (no local profile), and on loading into the MTC, and selecting the Neos bot while seated, my avatar was very small/short.

I identified this to be because of the initial height being set to 0 which appears to auto-size a user based on their initial standing height but as I was seated, it incorrectly scaled my avatar on that assumption that I was standing.

This mechanism has caused an issue in reverse too, where a user was using a playspace mover when they first launched Neos which made them seem way taller than they were, resulting in the avatars they equipped becoming enormous.

This mechanism could be avoided in the short-term by setting the default height to something average e.g. around 178cm rather than 0. But long-term, this mechanism should be reworked in some capacity.

I think it might be because of this mechansim that we also see users most often pick a height compensation value somewhere around the ~0.92 range for their avatars.

I believe Neos to calculate height based on the top of an avatar's mesh rather than where their eye level is, and as such, they need to scale their avatar down with the height compensation so that their avatar's stands up straight, as at a height compensation of 1, nearly all avatars tend to slouch, are hunched up due to being too tall for the user wearing them.

This is also noticeable in that enabling height compensation will place the user's eye level at the height they specified rather than where their eyes would be as if they were that tall.

Frooxius commented 4 years ago

Yes, by default Neos will try to estimate the height of the user, to provide some basic scaling functionality, which is necessary for the avatar system to work.

We could switch to a fixed height value, but that will also cause some issues, though those could be less than the auto-estimation.

The auto-height estimation isn't really fixable issue though, the users will have to calibrate it and make sure their floor is setup correctly too for things to work well. Neos has no way of knowing what the currently reported height is. It can be a tall person sitting or it could be someone who's short or if the whole playspace is moved. There's no way to distinguish that when all you have to go on is a single number (the current position of the headset).

The avatar mesh cannot be used for this, the height compensation doesn't deal with avatars at all, it's the other way around, the mesh is sized based on the estimate.

We can't use avatar mesh in general either, because you can't make assumptions on what the mesh is. Maybe it has really tall hair or a hat, which would cause it to scale incorrectly. This way the system scales the avatar's eye-line to the user's eye-line, but with the mesh you'd be scaling whatever the top-most vertex is to their eye-line, which would produce wrong values.

shiftyscales commented 4 years ago

658 seems to be related to what I was talking about, @Frooxius.

With a default avatar height compensation value, avatars are crouched. He had to set his height compensation (in this case via adjusting his height instead of the height compensation value to ~0.92 (157cm/170cm).

I've noticed pretty well everyone in Neos uses a height compensation of somewhere between 0.9-0.95 which would suggest an underlying issue in how the calculations are run or how the system works.

Frooxius commented 4 years ago

Is this using the height compensation on or off? There's a lot of stuff that goes into this and that can influence the fit. The floor calibration for one. But another one is that the actual avatar proportions are different per avatar, so you can't have perfect 1:1 fit.

The default values are currently set to give a bit more leeway, by making the avatar slightly bigger. You can always tighten the fit, but when it's too tight the face geometry can tend to clip into your face, which is disturbing (or at least it used to, before the head position fix was added).

In general, there's lots of variables that come into this, so without having a good set of well isolated test cases we can't really do much, other than recommend people to calibrate their fit.

shiftyscales commented 4 years ago

The default compensation (I think) appears to be 0.95- because of the overwhelming majority of the models I tested (including various samples from Polygonal Minds, the various bots, some of GearBell's avatars, etc.) nearly all were using a value of 0.95 for the height compensation. With a height compensation of 1, nearly every avatar used had bent knees/their overall height was considerably larger than my own height.

While I'm not ruling out the possibility that a majority of avatars could be vastly non-humanoid in proportion, even the ones that we would assume should be including the xbox, Neos Bot, skeletons, etc. all exhibit this same trend.

Testing was done with maintain height turned off, and as best I can tell my floors, and everything else should be calibrated about as well as I could get them.

Frooxius commented 4 years ago

Yeah that's probably a bit of the extra height I've added a while back to compensate the avatars being too short when looking up and down in some cases (or with maintain height enabled) making the face geometry clip into the face.

I'd wait until the seated mode is reworked, so it doesn't keep putting the user too high as it does now and then we can tweak the defaults.

Frooxius commented 4 years ago

Should be fixed in 2020.7.4.755 now! I've got rid of the height estimation system and just set the default height to fixed 175 cm. It will be too short for some people, to tall for others, but should be good enough on average and won't cause the avatar to be ridiculously small or big due to some wild estimations. And people should be able to just set their height so it fills well!