StressLevelZero / MarrowSDK-Legacy

MIT License
288 stars 36 forks source link

Clarify / Refine avatar eye settings #115

Open Woogoo336 opened 1 year ago

Woogoo336 commented 1 year ago

After a lot of testing I have discovered quite a few things about how the eyes of an avatar work. I have also found a few issues and oddities about them.

First, Eye Center Override,

The main function of this seems to be to simply ignore the information derived from eye bones, however it was not that simple. The primary issue with the eye center override is that if your avatar has eye bones already, the only thing it does is affect the eye offset. The zero point for forward/back offset will rest on the eye center override, but it will not affect up/down or left/right. I assume the intended behavior is that it should define the eye center in all three axis rather than just one. In order to achieve this goal, the eyes must be unbound in the avatar definitions.

Eye Offset,

The wiki states "Adjust the Eye Offset as needed to bring the green dot forward enough so that it does not clip inside the head geometry. This indicator acts like the player's "camera"/viewpoint."

However, this is not true. The player's camera is always at the zero point of the eye position. By changing the eye offset, the character's head is pushed backward out of the way of the camera. This doesn't appear to be intended, however it is extremely useful in some cases.

Through a cocktail of various mods interacting, I found a glitch which allows you to view your own unmodified player model where this affect is obvious. The screenshot below shows this. This is achieved by entering a Fusion lobby (not your own), leaving, and opening your VR dashboard.

20230625123517_1

I can't be certain that the reason I state is exactly why Strong appears like this, but this is how any custom avatar appears under these circumstances. I always found it odd how Strong can barely see over his chest when looking down when he doesn't seem abnormally large, but this eye position explains it. In mirrors, the third person view seen while in your dashboard, and on Fusion players, this offset is not visible.

If the eye settings are modified, here is how I think it should work,

Eye center override should control the eye center in all three dimensions rather than just in one. Additionally, when an eye center is used the eye offset slider should probably be set to zero and disabled so the user can control that aspect by moving the eye center override.

Eye offset control should actually control the position of the camera rather than the position of the head relative to the body. This will allow modders to achieve predictable results when constructing their avatars.

A second slider should be added called head offset. This will preserve the current functionality of the eye offset. As for how it could look, a ghosted version of the player model could be overlayed to show it's effect. The reason I want this option to remain is because it is very useful for controlling the first person views of avatars with abnormal body types. It can also reduce motion sickness by bring the players camera closer to the pivot of their avatars head. Additionally, it may also be useful for any models which have geometry in the players view and you want to hide it. If your model doesn't have separate meshes to apply as a "hair" mesh, this could be a cheap way to solve that problem.