Avatar Bugs & Feature Requests

Post about current Avatar bugs and Avatar Feature Requests. One item per post!
Non-constructive and off-topic posts will be moved or deleted.
[SDK] Display Error/Warning in SDK when mipmaps are disabled on main textures
Mipmaps are an important technique used in computer graphics to lower the cost of rendering high resolution textures at oblique/glancing angles or great distances. They store progressively smaller, filtered versions of the main, higher resolution texture. As the size of a surface in real screen pixels becomes smaller, a higher mipmap level is used, resulting in both a reduction in visible aliasing (due to containing an average of the higher resolution texture contents) and an increase in performance (as the lower-resolution mipmaps fit better into the GPU cache, increasing rendering throughput). Mipmaps are great! Unity enables mipmaps by default. On PC, they're essential if you use large textures. And on Quest, having mipmaps can have a big positive impact on performance! However, mipmaps cost a small amount of memory, and it has become commonplace for people who do not understand or care about the performance implications to recommend disabling mipmaps to save on memory, thus causing the GPU cache to be thrashed and various other negative effects. As the SDK currently recommends people reduce their avatars' memory usage by any means necessary, it's created this incentive to disable an important performance optimization. The solution I propose is for the SDK to also provide feedback and some light restraints on mipmap settings. However, it should not force the usage of mipmaps for all textures, as there are many important cases where mipmaps are not useful or harmful due to their extra data not being necessary, or causing calculations to become inaccurate. For instance, a common technique in both stylised cel shaders and realistic shaders is to use look-up textures for things like toon lighting ramps, specular/fresnel distributions, and other types of data which does not benefit from mipmapping. For advanced users, textures are really just a data source, and mipmaps are wasted if data you're reading doesn't benefit from them. Also, this proposal is geared entirely towards avatars. While worlds are technically not any different from avatars in how mipmaps affect things, individual avatars will always use unique textures, while only one world exists at a time. Here is what I recommend: ### On PC: Show a Warning if a texture meets all of the following conditions is above a size threshold (suggested: 256x256) does not have mipmapping enabled is not a render texture, custom render texture, or similar Show an Error if a texture meets all of the following conditions is assigned to a texture slot with the following name: _MainTex, _MetallicGlossMap, _BumpMap, _ParallaxMap, _OcclusionMap, _EmissionMap, _DetailMask, _DetailAlbedoMap, _DetailNormalMap is above a size threshold (suggested: 1024x1024) does not have mipmapping enabled ### On Quest/Mobile/Android: Show a Warning if a texture meets all of the following conditions is above a size threshold (suggested: 256x256) does not have mipmapping enabled Show an Error if a texture meets all of the following conditions is above a size threshold (suggested: 512x512) does not have mipmapping enabled The PC recommendations are designed to be permissive, and only stop users from using textures without mipmapping in places that would cause issues under normal circumstances. It can't cover all cases, but it shouldn't try. Render textures are excluded from the warnings as they require mipmaps to be generated at runtime, which has its own performance impact. The Android recommendations are a bit more heavy handed, as custom shaders don't exist for Android avatars and the performance impact is more notable. Thanks for reading!
2
·

tracked

Physbone immobile changes
For both Physbone versions 1.0 and 1.1, the world immobile behavior has been reliant on ignoring any position data from the root of the avatar, but the main issue is that it still inherits the model's rotational velocity. The idea I would like to propose is something that is in the newest version of Magica Cloth 2 which is to have a game object's transform be referenced as an anchor in relation to the assigned root transform for the physbone. The idea of having an anchor referenced can help with the issue of physbones and calculating rotational data for the scripts to ignore. For the world immobile it could grab the avatar descriptor and auto assign that as the anchor point for the physbones to ignore, allowing IK transforms and animations to behave properly. Best way to sum up the idea is: All Motion: Reduces any motion as calculated from the root transform's parent World Immobile v2: (old method) Reduces position movement from locomotion, any movement due to animations or IK still affect bones normally. (new method) Reduces any motion based on the avatar descriptor's location in the hierarchy, any movement from animations or IK still affects bones normally. Anchor Reduces any motion calculated in relation between the root transform and the anchor's transform, any movement from animations or IK will affect bones depending on the anchor's location. Edit: Basically like with the new VRC Constraints adding something like a Source Transform component where the physics would be calculated from. This in turn would make it so if you were to freeze a physbone component in World Space with the new VRC Constraints, when you move the physbones physics wouldn't be calculated.
0
Load More