首先是免责声明!这种方法涉及到对资源的解包,有可能会涉及到版权等问题,而且也可能并不是一个合法的手段!同时很可能是在侵害原作者利益!因此造成的任何后果由自己承担,本人只是单纯传授一项技术,也许能够帮助有需要的人(比如那些旧版本工程文件全丢了的笨蛋老作者)以及…。
总之,你把这个搞懂了,那你也会转.vrm这种最基本的格式的模型了。
——————————————————————————————————
当前版本信息2025.8.11:
VRoidMod 2.4.9,VRoid Converter2.4 b,AssetRipper
这里我选取了Alter在一年半前转换的一个黑塔的模型作为教具,你也可以跟着一步一步做!
https://www.nexusmods.com/7daystodie/mods/3501?tab=files&file_id=15344
用到的工具有Unity、VRoid Converter2.4 b、AssetRipper。Unity和AssetRipper安装我就不说了,网上随便找,VRoid Converter去n网下。下好之后用unity打开这个项目
步骤:
一、解包
首先是unity3d的解包,启动AssetRipper后,使用它打开文件(可以先改一下语言)
然后点击导出/导出所有文件:
这里面选择文件夹、创建子文件夹、最后点击导出为Unity项目,然后资源就被解包出来了。
二、转换到新版本
进入VRoid Converter(也就是工程项目),去Scenes里面找到VRoidConverter这个场景打开,里面包含一个reference。
接下来的步骤基本上和https://github.com/JustAlter/VRoid-Mod/wiki/01-%E2%80%90-VRM-Model-Conversion一样,你要是看不懂我的也可以去看他的我这里的不同是我们可以快速完成动骨配置,节省大量时间。
我们把解包后的文件夹拖到unity里面:
之后的步骤可能根据模型版本的不同,略微有所不同,但是大致是一样的:
翻这个文件夹,从里面找到一个.prefab文件(通常会和_thumb缩略图放在一起),把它拖到上面左边的层级里
然后如果模型层级里面挂载有奇怪的东西(Reference),删掉:
然后在层级里点击这个prefab,在上面找到VRM0/Export to VRM 0.x
然后在里面点击Make T-Pose(这一步如果有警告,取ExportSettings里面把Pose Freeze勾上),然后点击Export导出就行了。这一步如果export是灰的没法按,说明你漏步了。
导出结束后,删掉层级/场景里多余的/Herta(它应该会从蓝色变成灰色)。去最外边的Avatars文件夹里面找到Herta.Data/Exported
把.prefab拖到左边层级里:
调整视线高度EyeHeight(根据角色模型大概调一下)、Voice,然后Overrides覆写,yes同意,接下来你视情况看第三或者第四步。
三、弹簧骨配置迁移(可选),SpringManager
弹簧骨控制模型的头发、服装飘动(以及某些身体部位),是模型的灵魂之一。
接下来我们需要快速恢复弹簧骨,当然你也可以不配置,而且说不定以前版本的模型本身就没配弹簧骨,那就得从头配,但是那等同于新搞了,就和我们用旧模型的目的偏移了(因为调动骨很麻烦),不过你要是不嫌烦也可以自己从头配。
这里根据前面的模型版本不同,可能要做不同处理(比较老的版本),也有可能不需要处理(相对新的版本),也有可能要处理的很麻烦。但是总之自己想办法,反正就很简单就是一个数据结构的转换。
情况一:弹簧骨数据已被序列化保存为txt
我们回到之前那个文件夹,里面有个Herta_data.txt,点击它或者记事本打开它)你会注意到右边有很多信息:
没错!后面这个实际上是一个json序列化的结果(老版本用的txt存的数据,新版本改为用cs脚本了更方便),我们要读取它然后加载到我们现在的模型上面。这里非常简单,你可以参考我的代码思路(也可以创一个cs脚本然后把我的代码粘贴进去),或者直接用我的工具箱(前面教程帖子自己找)
https://github.com/maoxig/VroidMMDTools/blob/main/Editor/VroidTools/VRoidSpringBoneSaverEditor.cs
选择模型,然后点击Load VRoid SpringBone,这里要加载一个.json文件,可以自己把txt后缀改成json,下图就是加载成功后的结果
这一步可能加载不对!也可能部分加载失败(上图只加载了弹簧骨,没加载碰撞体),因为版本不一样变来变去就可能没对上,反正数据都在,你对照一下数据结构的类型自己写一写、改一改脚本就行了:
然后点击模型回到模型Inspector,同样因为改了弹簧骨所以再Overrides覆写一下。
情况二:弹簧骨数据以.cs脚本数据存储在模型内部
还有一种情况是里面没有存储的txt/json数据,而是以.cs脚本组件存储在模型内部,此时如果直接导入会发现模型脚本上面的数据都丢失了(打开解包的Scripts文件夹里面的代码都是dummyClass):
这种情况你在导入unity之前得确保能够恢复Scripts里面的源码(或者有一个dll供AssetRipper解析),并且在导入时需要避免unity编译错误。因为AssetRipper没办法凭空猜出.cs源代码(因此会默认以一个dummyClass占位),你得找一下这几个源码(通常会在工程文件里找到)然后在把整个解包文件夹拖到unity前填上他们:
这样在导入unity时模型内部的脚本能够被正确识别,这样就能正确加载了(如果导入后提示命名冲突导致编译错误使得仍然没识别到脚本,说明你新引入的脚本和之前已有的脚本冲突了,你可以自行想办法解决,总之肯定是可以使得模型脚本正确加载的,推荐关键词:unity脚本引用机制、GUID 、 .meta),在成功加载之后,你可以把他保存一下Save VRoid SpringBone
如果没正确识别会是一个黄色警告,提示你脚本缺失
情况x:终极思想
总之,这里其实是一个很经典的数据迁移的难题,但是其实只要你能够接触到转换前后的数据,你就很容易想到如何迁移。因此我建议你无论如何只要能成功恢复旧版本的数据,就一定要把脚本数据信息保存下来存为.json(可以使用我的Save VRoid SpringBone的思想,不过代码不一定通用),然后亲自看一眼旧版本与新版本的结构差异,这样你就一定能够想到办法转换到适合新版本的json,然后在新版本使用脚本加载弹簧骨。
此外这里有一个建议/计算机哲理是:当你觉得做某件事麻烦时,那么99%是你还没找到能方便做这件事的工具;如果你发现还没有这个工具,那么就到了你发明工具的时刻了。现在的AI都很好用,相信你能够克服难题。
四、最终导出为.unity3d
选中模型点击VRM0/Export就行了
最后把_converted里面生成的unity3d放到Mods/VRoidMod/Avatars就欧克了。
五、游戏内检查
然后进游戏你会发现很多时候你的人物渲染很奇怪(可能包括但不限于过亮、没有自阴影、完全透明、抬头的时候透明)!那当然,不然你以为调着色很好搞吗,这个自己想办法,老帖子都有教程,反正不是换着色器就是调参数,而且调出来的风味都是看自己喜好的,随便调,这一步对模型的观感影响非常大,调出来千奇百怪都有。
ps,这里还是补充一下着色,简单讲一下常见问题对应的关键词、参数,不一定正确:
过亮->主色或者最高最低亮度限制;
没有自阴影->打开阴影;
完全透明、人物不可见->可能是着色器有问题;
抬头的时候头发之类的透明->渲染队列。
背面不显示->剔除模型cull mode
透明、镂空的材质有问题、叠在一起的材质有问题(例如丝袜、脸红)->渲染模式(不透明、透明、镂空、半透明)
这是好的,得支持一下
这个逼装的我给82分,剩下的用666的方式打给你!
感谢大佬的付出,赞一个!
感谢大佬的付出,赞一个!
大佬牛逼
666666666666
感谢大佬的付出,赞一个!
这个逼装的我给82分,剩下的用666的方式打给你!
大佬可以教下怎么加跳舞时的表情吗