将mmd模型改造成游戏可用模型


最近在学习Unity3D 5.0的基于物理的渲染,说实话,这玩意比unity4里的传统光照模型好理解,而且也多了很多的贴图可用,效果也好了很多,尤其是加入了AO贴图以后,能够很好的表现模型暗部的阴影了。出于个人兴趣,就使用了mmd的模型放到unity5.0里做效果,能在unity里看到可爱的妹子,对于我来说是很开心的,这里用到了mmd4mecanim(以下简称mmd4)这个插件,实在是非常感谢作者nora先生,这个插件能非常完美的将mmd模型导入到unity中去。这里附上作者的twitter:https://twitter.com/Stereoarts  注意需要翻墙。

     这个插件能将mmd模型和里面的动作转换为fbx文件,这个格式能很方便的导入3dmax,maya,c4d等3d建模软件进行修改。

     接下来我稍微讲一下导入mmd模型进入unity里的步骤,其实本身就非常的方便和简洁。

    1.导入mmd4插件,导入完成以后应该就会看到红箭头标出的3个文件夹了

2.找一个mmd模型,一般mmd模型格式为pmd和pmx,下载过来的mmd模型一般会是一个文件夹包含pmd或者pmx文件和一堆贴图文件,注意不要改变文件夹结构,直接将文件夹放入unity工程里,如图,这时候mmd4插件会自动对应pmx和pmd文件生成一个.MMD4Mecanim文件。

3.选中这个.MMD4Mecanim文件之后,就能在inspector窗口里看到模型使用条约,我们都勾选上并点击同意,之后就可以看到转换界面了,点击process,稍等一会儿,模型就生成了。生成的模型会在对应的pmx或者pmd的同一个文件夹下,并生成一个Materials的文件夹,里面是这个模型的所有材质。



4.将这个模型拖到场景里就能看到漂亮的mmd模型了。


5.接下来是重点,由于mmd4里的shader是完全模仿mmd效果的shader,并不是基于物理的shader,所以需要将生成出来的shader全部调为unity5里的standard,选中materials文件夹里的所有材质球,将shader改为standard。


因为没有仔细调整,所以模型会变成这个样子

mmd模型的材质命名基本都是日语的罗马音,所以懂日语的人会比较好找对应的材质球。

将材质球稍微调整之后,得到一个看上去比较正常的模型。


6.以上的效果看上去还不错,但是细节部分完全就不行了。unity可以使用lightmap来烘焙静态的物体,使得其阴影能够很好的表现出来,但是动态物体就不行了,这里就需要给动态物体添加AO贴图,在standard的shader里这个就是Occlusion贴图。接下来就需要得到一个比较好的Occlusion贴图。

7.使用3dmax打开这个fbx文件。查看该模型的uv发现,这个模型的uv非常混乱,并且使用了镜像和重叠的uv,这是因为mmd模型原本是为了做视频而做的模型,所以可能在制作的时候并没有按照游戏模型的制作标准来分uv和制作贴图,但是Occlusion贴图的烘焙又必须依靠正确的uv来烘焙,所以这里需要重新分一下模型的uv。


8.一般mmd模型会有两个网格部分,一个是脸部,一个是除脸部以外的其他部分。选择除脸以外的部分,选择可编辑网格中该部分的所有顶点,将焊接值设置为0.001,然后焊接。

焊接之后顶点应该会变少

9.选择脸以外的部分,因为焊接了顶点,可能面的平滑会出问题,选择脸以外部分网格的所有面,并自动平滑一次,选中脸以外的部分,选择导出选定对象,并导出为obj



10.将导出的obj文件导入到Zbrush 4R6中。这里准备使用zbrush 4R6里的uvmaster进行自动拆分uv。


11.在Zbrush里找到Zplugin,选择uvmaster,并使用里面的unwrap命令,稍等片刻,uvmaster将会自动把模型的uv分好


12.稍等之后在右边的tool工具栏中选择texturemap,选择create -> newfromUVcheck查看分好的uv,如果看到这样的图,则说明uv已经分好了


将模型导出成obj保存,用max将导出的obj打开并添加uvw展开修改器检查uv是否正确。现在的uv是不是好看多了。



13.将uv从3dmax中导出,回到最早obj模型的max工程中,选择身体部分的网格,添加uvw展开修改器,将贴图通道选择为2

弹出窗口中选择移动。点击加载,选择新的uv。加载之后可能会有一些显示错误,不过没关系,打开uv编辑器,随便框选几个顶点就显示正常了。


14.因为从unity导入到3dmax中会丢失模型的所有贴图,这一步要将导入的3dmax中的模型还原到unity中的正常样子,具体方法就是调整3dmax里的材质球,对应贴图就好。


15.3dmax菜单中选择 渲染–>渲染到纹理,添加渲染元素为diffusemap,渲染通道选择为2,填充设置为16,分辨率设置为2048×2048,如图


然后选择好保存位置点击渲染,渲染出来的贴图看上去感觉是有问题的,但是其实用photoshop打开或者放到unity里去之后是没有问题的


16.确保漫反射贴图正确以后打开工具->通道信息,选中贴图2并点击清除,


之后会多出一个uvw清除修改器


17.将uvw展开和uvw贴图清除修改器移动到蒙皮的下面,可编辑网格的上面


然后将这两个修改器右键–》塌陷,塌陷完以后将只留下蒙皮和可编辑网格两个修改器。

18.塌陷完以后再次添加uvw修改器,确保贴图通道为1,再次加载之前保存的uv,

这样就完成了漫反射贴图的烘焙和新uv的合并。

由于烘焙漫反射贴图会把之前的多个材质球合并为一个,接下来就是还原本来的多个材质球以便调整单个部位。

19.打开材质编辑器,点击吸管,移动到模型身上吸取材质。

20.将吸取到的材质球付给第二个新的材质球,方法选择实例。

21.最后将材质球拖到模型身上,完成材质球还原。

22.将新添加的uvw展开修改器塌陷之后就可以烘焙AO贴图了,最后把这个模型导出为fbx之后,重新放进unity中。

模型最终效果就变成这样了,是不是比最早的好很多呢