kurotu / VRCQuestTools

Unity editor extension to support uploading VRChat avatars for Oculus Quest
https://kurotu.github.io/VRCQuestTools/
MIT License
218 stars 15 forks source link

[Feature Request]: Add VQT Material Swap Component for Game Object Level Control #25

Open Amoenus opened 6 months ago

Amoenus commented 6 months ago

User Story

As an asset maker / avatar editor, I want to add the VQT Material Swap component to individual props (game objects), so that I can have more granular control over material swapping, enhancing the modularity and ease of use of my assets with tools like VRCFury.

Current Limitation

Currently, material swapping is managed at the avatar root level using the Material Conversion Settings -> Additional Material Conversion Settings. This setup limits the flexibility and reusability of material swap configurations. It also makes it cumbersome to apply the same configuration across multiple avatars or specific game objects within an avatar.

Acceptance Criteria

Component Addition:

Material Selection:

Shader Compatibility:

Context

Benefits

kurotu commented 6 months ago

Thank you for the detailed and clear explanation. Your suggestion sounds great.

Currently I'm working on another project, so I won't be able to start on this immediately. However, I would like to add this feature in the future.

I have a few questions to clarify:

Amoenus commented 6 months ago

Hi @kurotu, thanks for the quick reply,

Question 1

In my opinion, achieving feature parity with Additional Material Conversion Settings makes the most sense.

However, it depends on how difficult it is to implement. If the scope needs to be small, a simple Swap could be sufficient as a start.

Question 2

Yes! The child component settings should act as an 'override' for the global (avatar root) defaults. This should also apply to any 'nested' child objects.

So, if there are any conflicts, the logic as I see it would be:

Global (avatar root)
└── Child 1 (overrides Global)
    └── Child 2 (overrides Child 1 and/or Global)
        └── Child 3 (overrides Child 2 and/or Child 1 and/or Global)

This way, we keep the current flow 'as is' but add additional control only when it's needed.

Thanks again, and let me know if you have any more questions.