Improve Blink and FaceExpression handling for various 3D avatars#471
Conversation
|
Hi @lavender-snow , On the implementation side, how about taking a more general-purpose approach? I love your idea of passing facial blendshape name keywords in from the outside to For example, we could add a member like this to public string[] FaceBlendShapeKeywords = { "blink", "eye_close" };Would love to hear your thoughts! ✨🙏✨ |
|
Hello @uezo, Based on your comment, I’ve been thinking about an approach to improve the implementation. How about changing the code to leverage the facial SkinnedMeshRenderer that Here’s the plan I’m considering:
If these components already have the SkinnedMeshRenderer set via the inspector, the setup function will prioritize the existing value over the passed-in value, as ignoring inspector-set values could result in behavior that users might perceive as unintended. If this approach sounds reasonable, I’ll proceed with the implementation. I’d appreciate your feedback. Additionally, I noticed that the current PR was missing the using directive for LINQ in |
|
Hi @lavender-snow , thanks for jumping on this so quickly! I’m happy with your plan as proposed. One ask: please keep backward compatibility so users on the current version can upgrade without errors(no breaking changes for typical users). 🙏 |
…innedMeshRenderer is not found
…zeField for viseme mapping
|
@uezo
I’d appreciate it if you could review these changes. |
|
Hi @lavender-snow , Just one question: I see |
|
@uezo |
|
@lavender-snow Cool, thanks a lot for your contribution! 🙌 |
Summary
Since 3D avatar blendshape names are not strictly standardized, some avatars may only include a blink blendshape with names like the Japanese word "まばたき."
In this PR, I made changes so that such avatars can be handled without manually modifying scripts or the 3D models themselves.
Changes
When the
BlinkorVRCFaceExpressionProxycomponent inspector variables are already set, the Setup function will now use those existing values instead of overriding them.The second parameter of
GetFacialSkinnedMeshRenderercan now accept a string. this value will be used when searching for the facial mesh.Fixed an issue where the entire process could fail if
Blinkcomponent was not set up correctly.