This topic has been requested in many different ways with many different cannys requesting different features and solutions. The purpose of this canny is to try to aggregate all of those requests and ideas into one feature request to make things a bit more organized and control, and hopefully facilitate some kind of dialog with the dev team about reaching a compromise.
World creators need more ways to control avatar lighting, preferably in direct and standardized ways, to facilitated more immersive experiences with dynamic lighting. Creators have unlimited control over the shaders in their worlds, but pretty much no control over shaders on avatars. Creators have made all sorts of solutions to get around this, but all of them have some kind of caveat that makes them not very viable. Caveats include but are not limited to:
  • Massive performance hit (usually in the form of increased set pass calls across the board)
  • Broken shaders (Usually transparency)
  • Emissive lighting (lumen values > 1) overwrite any form of suppression.
  • Require avatar creators to use shaders that are compatible with the systems.
  • Slow update rate.
Solutions have included:
  • Decal shader based
  • Unity Projectors
  • Unity's Realtime GI System
  • Grabpass Shaders
Requests for fixes to these solutions or atleast are related to these fixes have been made but are kind of all over the place, so I'm going to start listing them here:
  • Add more ways of influencing light probes
  • Disabling Avatar Imposters at a world, or instance level
  • Add 'Replaced Shaders' options to VRCCameraSettings
  • Expose Projector component to Udon
  • Please implement an avatar brightness slider for each player to fix shader/lighting issues.
  • Allow updating environment lighting in World VRCSDK
  • Lighting Tab Script - World Creators
  • Shader fallback does not fallback to transparent as documented
It is not neccessary that all of these be addressed or implying they can be fixed, I am simply listing them for archival reasons. Please let me know if I missed any.
-----------------
This section is a list of my own personal ideas after working with worlds and the many different solutions the community has come up with for so long.
The main problem comes down to allowing some kind of system where avatar shaders can be modified more directly in some limited capacity. The keyword here is limited. Letting world creators go wild with people's shaders is a possible issue that should not be ignored.
A properly implemented shader replacement system that works with all cameras would be ideal. It is imperative that this system is controlled by VRChat in some capacity to minimize the cost it would have on performance and, if possible, implement any restrictions VRChat may need to reduce exploitation from map creators.
If need be, this could be purely restricted to "lighting" in however way that may be defined by VRChat. I could see a scenario where we could influence certain common parameters found in shaders.
Light probes are not a good solution as they were never intended to be dynamic, and that is very evident as they cannot even be edited at runtime. Realtime GI is a bandaid solution to that problem (with it's own caveats such as slow update rate and heavy vram usage) and is now deprecated.
The argument of not wanting to restrict the creative vision of avatar creators is somewhat nuanced i feel. I would argue as well that it in turn limits the creative vision of world creators by not allowing users to fully immerse themselves in the world they created.
There is a camp that do not trust world creators with their avatar's lighting. Which is understandable given that there are many novice world creators out there. Again, this is why I feel this could be something VRChat could step in as an intermediary. Creating some built in opt-in/opt-out feature users could set may be a possible solution.
--------------------
It is hard to say what the best path is, and I would like to have discussion about it if possible. Either way, I do believe some form of intervention from VRChat is going to be needed for world creators to create the level of immersiveness they are looking for.