找回密码
 立即注册
查看: 513|回复: 0

MMD模型简并材质为游戏使用

[复制链接]
发表于 2022-5-10 19:29 | 显示全部楼层 |阅读模式
前言

上一篇文章MMD模型导入Unity的解决方案只是演示了如何将MMD导入Unity,但有一个问题是,导入Unity的模型材质or网格数过多。
如果你按照上篇文章,根据材质分离网格,那么你的材质数会等于网格数,导入Unity后每个网格都有一个SkinMeshRender;即使你没有分离网格,每个材质都意味着至少一个渲染颜色的DrawCall,甚至可能有更多(例如ShadowCasterPass、DepthOnlyPass等)。
而且当我们做NPR渲染时,还要考虑每个材质引用的资产。
等等,总之这么一堆材质有各种不方便,所以我们要想办法精简材质,以达到游戏可以使用的程度。
获取模型

MMD模型是最容易得到的,随随便便都能找到一大堆,这里我使用模之屋中【原神】优菈的模型。
原神官方发布的模型,优点是模型的材质、纹理已经很整洁了。对比下之前其他大大配布的改模、建模模型,纹理有很多重复的,看起来乱七八糟,光是整理就需要很长时间。
导入

我用的版本是Blender2.92,和之前一样使用mmd_tools插件,注意改下缩放比例:

这里先提一下,注意保存工程,每几个步骤完成后Ctrl+S保存下。否则Blender崩了,心态也就跟着崩了。也有可能某些步骤调错了Ctrl+Z返回不了,可以重新加载工程。
右上角着色视图改成材质预览:

检查

属性编辑器中可以看到,这个模型有25个材质。
我计划将模型分为三块:头发+眼睛、脸、身体三部分,过多材质的危害前文已经提及,而之所以不全部组成一个材质,是因为有些部位的着色模型不同,我们只是将能统一着色模型的部位放到一起。


原材质中,神之眼的纹理和头发在一起,披风1、2、3的纹理分布在发、服、披风三个纹理中,这对我们控制材质不利,所以我们要重新烘焙纹理,将每个目标材质用到的纹理放到一起。
Tips:进入编辑模式,选择材质,点击“选择”,可以看到材质作用的部位:

按照上面的Tips操作,可以发现优菈的头发网格有两份:

多出来的“发+”用来渲染各向异性的高光,这个要计划去掉,但不是现在,需要先烘焙纹理。

分离网格

由于我们计划要分成三个材质,为方便操作和烘焙,先将结果材质对应的网格分离。
按照前面的Tips,选择发+、发、头饰、头饰_金属,按P,分离选中项。
同样的方法,将身体和脸分离


选中头发,发现即使分离了网格,身体和脸的材质依旧存在,所以将头发上的身体和脸的材质删除。

同样的方法,脸的网格上删除身体和头发,身体的网格删除脸和头发。


重分UV

因为要重新烘焙纹理,UV也要重新分配,而我们烘焙需要在原来UV条件下烘焙,因此要准备第二套UV。
在属性栏中找到UV贴图,增加UV:


注意“UV贴图”下面加号旁边的相机,白色代表启用的相机代表我们用这个UV来渲染、预览,我们现在还没有重分UV+烘焙,所以需要用第一套UV。
而我们刚加入的UV(我重命名为BakeUV),我们暂时不需要用这个预览,但我们希望重新分配UV到这套UV,所以我们点击第二套UV,让其保持活动状态。
简而言之,第一套UV的相机保持白色,第二套UV保持橙色
注意:因为刚刚分离了网格,所以三个网格都要建立第二套UV
进入到UV编辑布局:

由于头发的网格要特殊处理,所以先分身体的UV,选择身体网格,进入编辑模式,按A全选,按U,选择第一项“展开”。

烘焙

建立一个烘焙目标,我命名为bake_body



拖出一个着色器编辑器窗口,选择“神之眼”材质:

为了增加烘焙目标,Shift+A添加节点,找到纹理->图像纹理,纹理选择我们刚刚创建的bake_body,什么都不连。

我希望烘焙颜色到这张纹理上,但这个材质还带有Toon纹理,渲染结果不是纯颜色,所以我要换一个着色器节点,来替换mmd_tools自定义的着色器节点。
Shift+A添加节点,找到着色器->漫射BSDF
将Mmd Base Tex的颜色输出到漫射BSDF节点中,然后漫射BSDF连接到材质输出:

然后将这个操作(添加图像节点、创建连接BSDF节点)对应到身体的所有材质上,可以用Ctrl+C复制节点。
作用好之后,再过一遍材质,点击我们刚刚创建的图像节点,保证图像节点有橙色边框,因为Blender的设定是,烘焙目标是我们最后点击的图像。(所有身体材质都要确保是活动状态)
这里建议保存下工程,上面操作有失误就会导致烘焙到其他纹理,还需要重新选择纹理。
属性节点找到渲染属性,将渲染引擎改为Cycles,找到烘焙标签.
烘焙类型选择漫射影响去掉直接光和间接光,只保留颜色,输出中,将清空图像的勾去掉。
最后在点击上面的烘焙按钮:

image.png

走完进度条后,可以看到烘焙结果:

验证烘焙结果

为了验证烘焙结果,将模型复制一份出来,在场景集合中选择优菈,Shift+G,选择子级,这样能选择当前节点所有子节点,再按住Ctrl选择父节点,然后Shift+D复制。
点击新优菈的身体,点亮第二套UV的相机:


此时身体上的纹理会乱。

进入材质属性,添加新材质,我命名为body


随意找个材质复制,然后粘贴到body上:

删除除了body材质的所有材质,然后修改节点,将烘焙的图像直接输出到BSDF的节点:

可以看到结果差不多:


右边是Bake的

披风少一块的话,到材质属性去掉背面剔除:


还有一点,身上的纹理相比之前的,感觉特别糊,这是因为Blender自动展开的UV不太合理,可以看到边角上放置了一堆小型几何体:

上面的小网格小到几乎看不出来,占用像素也很少,也不怪渲染结果很模糊,此时就要对模型的UV进行整理。

由于我不是专业建模师,我没有什么好的办法整理UV,大概就是网格整体缩放为原来的0.8,然后将小网格塞到大网格的缝隙中,整理时间几十分钟到一个小时,整理完后重新烘焙。

确认烘焙完毕后,可以将原有UV删除。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 13:00 , Processed in 0.169428 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表