Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow bones to be renamed to proper names when converting from VRChat to VRM #51

Open
SorcererPonse opened this issue Sep 30, 2022 · 4 comments
Labels
enhancement New feature or request VRChat→VRM

Comments

@SorcererPonse
Copy link

So on this avatar:
Fina

There is an error when attempting to create an avatar from the VRM file:
http://puu.sh/JnPug/41c3be814d.png

Would it be possible for there to be some way to rename the bones during the conversion process? Since this avatar has a large list of bones named like this:

http://puu.sh/JnPvO/0889c41622.png

and then some, it would likely be a lot easier if they could be batch renamed instead of having to rename each one individually.

@esperecyan
Copy link
Owner

Is the VRM file that causes this error the VRM prefab right after import?
The avatar in the link already looks like an avatar for VRChat, is there a VRM file included?
For now, please copy and paste the full text of each error.

@esperecyan esperecyan added question Further information is requested VRM→VRChat labels Oct 4, 2022
@SorcererPonse
Copy link
Author

SorcererPonse commented Oct 7, 2022

The VRM prefab after import is what causes the issue, the converter itself is able to properly convert it into a VRM file. There is no VRM file included, one must be made from the avatar in order to have one, which is what I did. The solution I found was to manually modify the FBX file and rename all of the bones and vertex groups to their proper names in order to convert the avatar into a VRM. My apologies for my wording as well; I am not creating a VRChat avatar from a VRM file, but rather a VRM file from a VRChat avatar. For now, here are the errors that this specific avatar causes:

AvatarBuilder 'Fina_PB(Clone)(normalized)': Ambiguous Transform 'Armature/HipsBone/LeftUpperLegBone' and 'AvaterSetting/PB_colider/LeftUpperLegBone' found in hierarchy for human bone 'LeftUpperLeg'. Transform name mapped to a human bone must be unique.
UnityEngine.AvatarBuilder:BuildHumanAvatar (UnityEngine.GameObject,UnityEngine.HumanDescription)
UniHumanoid.AvatarDescription:CreateAvatar (UnityEngine.Transform) (at Library/PackageCache/[email protected]/Runtime/UniHumanoid/AvatarDescription.cs:125)
VRM.VRMBoneNormalizer/<>c__DisplayClass1_0:<Execute>b__0 (UnityEngine.GameObject,UnityEngine.GameObject,System.Collections.Generic.Dictionary`2<UnityEngine.Transform, UnityEngine.Transform>) (at Library/PackageCache/[email protected]/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs:105)
UniGLTF.MeshUtility.BoneNormalizer:NormalizeHierarchy (UnityEngine.GameObject,UniGLTF.MeshUtility.BoneNormalizer/CreateAvatarFunc) (at Library/PackageCache/[email protected]/Runtime/MeshUtility/BoneNormalizer.cs:29)
UniGLTF.MeshUtility.BoneNormalizer:Execute (UnityEngine.GameObject,UniGLTF.MeshUtility.BoneNormalizer/CreateAvatarFunc) (at Library/PackageCache/[email protected]/Runtime/MeshUtility/BoneNormalizer.cs:493)
VRM.VRMBoneNormalizer:Execute (UnityEngine.GameObject,bool) (at Library/PackageCache/[email protected]/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs:70)
Esperecyan.Unity.VRMConverterForVRChat.VRChatToVRM.VRChatToVRMConverter:Convert (string,string,UnityEngine.GameObject,VRM.VRMMetaObject,System.Collections.Generic.IDictionary`2<Esperecyan.Unity.VRMConverterForVRChat.VRChatToVRM.ExpressionPreset, Esperecyan.Unity.VRMConverterForVRChat.VRChatToVRM.VRChatExpressionBinding>,bool) (at Library/PackageCache/[email protected]/Editor/VRChatToVRM/VRChatToVRMConverter.cs:132)
Esperecyan.Unity.VRMConverterForVRChat.UI.VRChatToVRMWizard:OnWizardCreate () (at Library/PackageCache/[email protected]/Editor/UI/VRChatToVRMWizard.cs:315)
UnityEngine.GUIUtility:ProcessEvent (int,intptr)

AvatarBuilder 'temporary(Clone)(normalized)': Required human bone 'Hips' not found
UnityEngine.AvatarBuilder:BuildHumanAvatar (UnityEngine.GameObject,UnityEngine.HumanDescription)
UniHumanoid.AvatarDescription:CreateAvatar (UnityEngine.Transform) (at Library/PackageCache/[email protected]/Runtime/UniHumanoid/AvatarDescription.cs:125)
VRM.VRMBoneNormalizer/<>c__DisplayClass1_0:<Execute>b__0 (UnityEngine.GameObject,UnityEngine.GameObject,System.Collections.Generic.Dictionary`2<UnityEngine.Transform, UnityEngine.Transform>) (at Library/PackageCache/[email protected]/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs:105)
UniGLTF.MeshUtility.BoneNormalizer:NormalizeHierarchy (UnityEngine.GameObject,UniGLTF.MeshUtility.BoneNormalizer/CreateAvatarFunc) (at Library/PackageCache/[email protected]/Runtime/MeshUtility/BoneNormalizer.cs:29)
UniGLTF.MeshUtility.BoneNormalizer:Execute (UnityEngine.GameObject,UniGLTF.MeshUtility.BoneNormalizer/CreateAvatarFunc) (at Library/PackageCache/[email protected]/Runtime/MeshUtility/BoneNormalizer.cs:493)
VRM.VRMBoneNormalizer:Execute (UnityEngine.GameObject,bool) (at Library/PackageCache/[email protected]/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs:70)
VRM.VRMEditorExporter:Export (UnityEngine.GameObject,VRM.VRMMetaObject,VRM.VRMExportSettings,System.Collections.Generic.List`1<UnityEngine.GameObject>) (at Library/PackageCache/[email protected]/Editor/Format/VRMEditorExporter.cs:199)
VRM.VRMEditorExporter:Export (UnityEngine.GameObject,VRM.VRMMetaObject,VRM.VRMExportSettings) (at Library/PackageCache/[email protected]/Editor/Format/VRMEditorExporter.cs:24)
Esperecyan.Unity.VRMConverterForVRChat.VRChatToVRM.VRChatToVRMConverter:Convert (string,string,UnityEngine.GameObject,VRM.VRMMetaObject,System.Collections.Generic.IDictionary`2<Esperecyan.Unity.VRMConverterForVRChat.VRChatToVRM.ExpressionPreset, Esperecyan.Unity.VRMConverterForVRChat.VRChatToVRM.VRChatExpressionBinding>,bool) (at Library/PackageCache/[email protected]/Editor/VRChatToVRM/VRChatToVRMConverter.cs:179)
Esperecyan.Unity.VRMConverterForVRChat.UI.VRChatToVRMWizard:OnWizardCreate () (at Library/PackageCache/[email protected]/Editor/UI/VRChatToVRMWizard.cs:315)
UnityEngine.GUIUtility:ProcessEvent (int,intptr)

AvatarBuilder 'VRM': Required human bone 'LeftUpperLeg' not found
UnityEngine.AvatarBuilder:BuildHumanAvatar (UnityEngine.GameObject,UnityEngine.HumanDescription)
UniHumanoid.AvatarDescription:CreateAvatar (UnityEngine.Transform) (at Library/PackageCache/[email protected]/Runtime/UniHumanoid/AvatarDescription.cs:125)
VRM.VRMImporterContext:LoadHumanoid () (at Library/PackageCache/[email protected]/Runtime/IO/VRMImporterContext.cs:249)
VRM.VRMImporterContext/<OnLoadHierarchy>d__4:MoveNext () (at Library/PackageCache/[email protected]/Runtime/IO/VRMImporterContext.cs:48)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start<VRM.VRMImporterContext/<OnLoadHierarchy>d__4> (VRM.VRMImporterContext/<OnLoadHierarchy>d__4&)
VRM.VRMImporterContext:OnLoadHierarchy (VRMShaders.IAwaitCaller,System.Func`2<string, System.IDisposable>)
UniGLTF.ImporterContext/<LoadAsync>d__28:MoveNext () (at Library/PackageCache/[email protected]/Runtime/UniGLTF/IO/ImporterContext.cs:122)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<UniGLTF.RuntimeGltfInstance>:Start<UniGLTF.ImporterContext/<LoadAsync>d__28> (UniGLTF.ImporterContext/<LoadAsync>d__28&)
UniGLTF.ImporterContext:LoadAsync (VRMShaders.IAwaitCaller,System.Func`2<string, System.IDisposable>)
UniGLTF.ImporterContextExtensions:Load (UniGLTF.ImporterContext) (at Library/PackageCache/[email protected]/Runtime/UniGLTF/IO/ImporterContextExtensions.cs:15)
VRM.vrmAssetPostprocessor/<>c__DisplayClass2_0:<ImportVrmAndCreatePrefab>b__0 (System.Collections.Generic.IEnumerable`1<UniGLTF.UnityPath>) (at Library/PackageCache/[email protected]/Editor/Format/vrmAssetPostprocessor.cs:85)
UniGLTF.TextureExtractor/<>c__DisplayClass12_0:<ExtractTextures>b__0 () (at Library/PackageCache/[email protected]/Editor/UniGLTF/ScriptedImporter/TextureExtractor.cs:106)
UnityEditor.EditorApplication:Internal_CallDelayFunctions ()

Exception: fail to create avatar
VRM.VRMImporterContext.LoadHumanoid () (at Library/PackageCache/[email protected]/Runtime/IO/VRMImporterContext.cs:252)
VRM.VRMImporterContext+<OnLoadHierarchy>d__4.MoveNext () (at Library/PackageCache/[email protected]/Runtime/IO/VRMImporterContext.cs:48)
--- End of stack trace from previous location where exception was thrown ---
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () (at <eae584ce26bc40229c1b1aa476bfa589>:0)
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
System.Runtime.CompilerServices.TaskAwaiter.GetResult () (at <eae584ce26bc40229c1b1aa476bfa589>:0)
UniGLTF.ImporterContext+<LoadAsync>d__28.MoveNext () (at Library/PackageCache/[email protected]/Runtime/UniGLTF/IO/ImporterContext.cs:122)
Rethrow as AggregateException: One or more errors occurred.
Rethrow as AggregateException: One or more errors occurred.
UniGLTF.ImporterContextExtensions.Load (UniGLTF.ImporterContext self) (at Library/PackageCache/[email protected]/Runtime/UniGLTF/IO/ImporterContextExtensions.cs:22)
VRM.vrmAssetPostprocessor+<>c__DisplayClass2_0.<ImportVrmAndCreatePrefab>b__0 (System.Collections.Generic.IEnumerable`1[T] texturePaths) (at Library/PackageCache/[email protected]/Editor/Format/vrmAssetPostprocessor.cs:85)
UniGLTF.TextureExtractor+<>c__DisplayClass12_0.<ExtractTextures>b__0 () (at Library/PackageCache/[email protected]/Editor/UniGLTF/ScriptedImporter/TextureExtractor.cs:106)
UnityEditor.EditorApplication.Internal_CallDelayFunctions () (at <a259d3c004024353a2c217da97495055>:0)

@esperecyan
Copy link
Owner

I have confirmed the problem.
This problem seems to have already been fixed in the latest version of UniVRM.
In other words, it is caused by the fact that the Unity version that the VRChat SDK depends on is far too old that UniVRM cannot be updated.

@esperecyan esperecyan removed the question Further information is requested label Oct 8, 2022
@esperecyan
Copy link
Owner

I was mistaken that this does not happen with the latest UniVRM.
If I export with UniVRM-0.105.0, the broken VRM is generated, although the renaming did indeed take place.
I think it is probably a problem in UniVRM, but I trying to find out.

@esperecyan esperecyan added the enhancement New feature or request label Oct 8, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request VRChat→VRM
Projects
None yet
Development

No branches or pull requests

2 participants