I’m the author of the Modular Avatar suite of nondestructive avatar editing tools, as well as the NDM Framework, which aims to help multiple nondestructive tools work together. These tools work by building on top of the VRChat SDK’s IVRCSDKPreprocessAvatarCallback
API, allowing us to transform the avatar at build and upload time.
That being said, there’s a number of sharp edges in this API:
- There’s no clear guidance on how to define the
callbackOrder
, or a place to register where you’ve placed your plugins. [Canny] - There’s no support for previewing transformations in play mode built into the SDK. As a result, every tool author needs to build their own system for doing so, which can result in conflicts (this has been a problem for Modular Avatar and VRCFury recently). [Canny]
- For that matter, there’s no official support for avatar emulation, which means tool authors have to handle multiple different implementations of avatar emulation. [Canny]
- There’s no way to plug into the VRCSDK error display, so tool authors have to build their own UI. [Canny]
- For tools which perform optimization and transformations to make avatars Quest-compatible, the VRCSDK checks the quest content rules prior to transforming the avatar, which can block upload of an avatar that would be compliant after running build plugins. [Canny]
(sorry if these cannys are duplicates - canny search is being particularly useless today…)
I’ve been trying to address these issues with NDM Framework, but a challenge here is that not everyone is willing to take on an additional dependency, particularly when there are outstanding VCC issues that cause problems with dependency resolution (e.g. [BUG] If there are multiple community repositories that have the common package, version list of another package will be wrong · Issue #369 · vrchat-community/creator-companion · GitHub).
It’s also not clear if resolving some of these issues would be considered acceptable from the VRChat perspective. In particular, one thing I’ve considered is bypassing the VRCSDK validations to start the build (probably using harmony), but then executing and enforcing the validations after all build hooks run. This of course has a bunch of UI challenges, but would enable having a single copy of an avatar that uploads both an optimized Quest variant and a more featureful PC variant. However, this would be mucking with the VRCSDK at a rather deep level, and I’m not sure VRChat would appreciate such things.
In short, I’m wondering:
- How much of these issues are ones that VRChat even wants to take in-house, vs allowing the community to resolve them?
- Is there any interest in taking some of the community-created solutions and integrating them into the VRCSDK, to improve consistency here?
- What’s the right venue to request permission to harmony-patch the VRCSDK to resolve UI/UX issues? (taking full responsibility if it breaks in the future, of course…)