Neos-Metaverse / NeosPublic

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

[QOL] Name Badge Improvements #356

Open shiftyscales opened 4 years ago

shiftyscales commented 4 years ago

Following up from the #ideas channel on the Discord- GearBell, Lewi-bean, wauf!, and H3BO3 had discussed means by which a user could reposition their nametag.

For characters with large heads, or accessories, the nametags can be obstructed from view, or clip into the model/accessories.

Among the suggested possible solutions were to have a configurable offset value either on a per-avatar, or user level, or to have it implemented into the avatar creator tool.

shiftyscales commented 4 years ago

Additional suggestions:

Frooxius commented 4 years ago

There are a few approaches that could be taken. Using the AvatarNameTagAssigner and AvatarBadgeManager is the canonical way of moving the name tag, so that should ideally be used when you want to override it, as it allows explicitly specifying the offset.

Alternatively I could extend the behavior so it takes the avatar's bounding box into the account, but that might be hard to define and not position it correctly in all cases.

It could also be setup so you provide a component that specifies a height offset, but that duplicates the use of AvatarNameTagAssigner and AvatarBadgeManager a bit, so that might be addressed by adding more tools for easily positioning those.

Then again, those are suitable for setting up your own badges that can be highly customized, so just having a way to reposition the default ones would be beneficial.

I do plan on adding a way of deactivating name badges (and having a component for this so you can setup your own custom name badges correctly so they hide), but I haven't gotten to that yet.

The UI thing is a bit tricky. AvatarNameTagAssigner is not "UI", it's an internal component name. The "Hide Badges" is user facing and it doesn't necessarily match the technical terms for the sake of brevity. Having "Hide Badge Icons and Avatar Name Tags" is a lot less readable, despite being more technically correct.

Anomalous commented 4 years ago

If we're using this issue to suggest general name tag and badge icon improvements, at some point it might be good to let users select which of their badge icons are displayed and which are hidden. Just in case people who collect a lot of badge icons don't want a long list floating above their head at all times. This is in reference only to the Neos-supplied badge icons, I know they can always be replaced with a custom set of icons if desired.

Frooxius commented 4 years ago

Yes that's planned too. After the UI overhaul, I'll have a more extensive profile page, which will allow configuring badges.

shiftyscales commented 4 years ago

I don't think the bounding box could work in of itself because the instant a user raises their hand over their head- their name badge would also raise up.

The bounding box/height of the mesh could be used in setting up the initial offset value however, but then that doesn't accomodate scenarios where the user adds accessories to their avatar.

But that could be a great place to start as having that property would allow users to move/place it as desired after initial import too. E.g. if they add a hat to their avatar, they could adjust the offset value to accommodate that. No need to have it be smart/automated.

The components ideally should be reserved only for cases where a user wishes to create an entirely custom name badge. Perhaps the components could generate the default name badge, and badge setup unless you specify a different mesh/text renderer for it to use?

That combined with determining the initial offset from the initial mesh height of the avatar seems like it could be a flexible/versatile setup that adapts the existing systems with only slight tweaks to them.

As far as the UI/naming situation- instead of changing the component name, perhaps you could just have "Hide Nametags" in the streamer cam (or the overhauled UI's equivalent), and rename the object on the avatars to be "Nametag" instead of "Name Badge" to make the naming scheme consistent with the component names?

Frooxius commented 4 years ago

Raising the hands above head isn't really an issue. The bounding box would be taken from a mesh in its bind pose, which pretty much never has the hands above the head. The main issue would be having any parts of the avatar mesh that protrude above (e.g. a tall hat), but wouldn't actually obscure the name tag)

I'm not sure if reserving the components only for that use is best. I generally try to avoid duplication of functionality and provide more generic approach that encompasses all possible uses and build tooling around that to handle common scenarios.

I don't think the "Name Badge" is really too confusing, people generally refer to those as such. Are people really having trouble with that?

shiftyscales commented 4 years ago

It's not really too confusing, no. But it would be nice to have a consistent naming scheme. That is more of a general UI/UX principle than anything specific to the name badges though.

Another possibility to moving the placement would be rendering the nameplate on top- but that would be its own series of questions such as how desirable that behavior would be. E.g. viewing characters from low angles, or possibly seeing their badges rendering over walls in the world, etc.

Frooxius commented 4 years ago

I don't think that's a good idea. Technical terms and internal class/variable names don't make for good UI labels for the end user, it's better if it's separate.

Rendering name badge on top wouldn't be good, as it would be indiscriminate. It would render through walls, ceilings, floors, everything.

shiftyscales commented 4 years ago

For edge cases like you mentioned where an avatar's mesh extends the bounding box but isn't obstructing the nameplate- the user could configure a negative offset value to lower the name badge.

Overall- using the height of the mesh/bounding box to determine the initial position coupled with a user-adjustable offset value would be one of the best/most encompassing options.

For most users/use-cases it should make sure the nameplate is always visible for the avatar at the time of creation, and it is then the user's responsibility to adjust that property of their name badge if it is in an undesired position.

It is a very desirable solution as it would mean that users wouldn't need to adjust their current/existing avatars for their nameplates to become visible.