MMD联动Unity学习笔记 Vol.16 使用HDRP时MMD的制作流程

前言
在使用HDRP(高清渲染管线)后,Unity的画面会提升到一个新的级别。我们使用HDRP来制作MMD会给以往的效果更加出色。这次共同研究在使用HDRP时MMD的制作流程。

事前准备
这次我们不使用MMD4Mecanim来导入模型,我们用另一种方法来替代MMD4Mecanim。MMD4Mecanim有时导入动作,可能会使面部表情缺失,所以我们这次选择Blender。导入Blender时我们需要先安装一款叫做MMD Tools的插件,这款插件导入模型的时候支持模型的贴图,骨骼,刚体,动作,非常全面,制作视频所需要的所有元素都支持。下载地址:http://github.com/sugiany/blender_mmd_tools
mmd_tools的安装
设置语言在左上角的file > User preference,然后点击右上角的system,拖拽滚动条,到下面,勾选Internatonal fonts,然后把其他几上按钮点上。最后保存用户设置。
这样之后,语言切换到了中文显示。接下来是插件的安装。
首先解压插件压缩包。解压之后会得到几个文件。把其中的mmd_tools文件夹剪切,移动到blender目录的插件目录,路径是blener-2.78-scrpts-addon。其中的数字部分根据自己安装的版本灵活应变。Blender Foundation > Blender > 2.78 >scripts > addons,把刚才那个目录粘贴到这里。
然后,还要在blender里激活插件才能使用。同样是在用户设置面板,文件用户设置中,点击插件,在左边搜索栏里输入mmd,点击小三角,展开信息显示。
点击方框,给它打上勾。最后保存用户设置启动插件。

具体操作
导入模型
我们已经将插件准备好。现在可以开始导入模型。

选择File>Import>MikuMikuDance Model,找到.pmd或.pmx模型文件,将其导入Blender中。

或者在左边可以看到插件工具条。其中的Import Model可以导入模型。找到模型文件导入,点击Import Model file。

这之后就开始模型,按N键打开信息,最下面有个GLSL,点击后可以显示角色的贴图。

点击模型,再点击左边工具栏中Rigbody的Bulid,点击生成刚体。添加成功后人物身上会出现很多虚线,没有刚体人物的头发就会出现一些奇怪的行为。
现在可以导入动作,首先要选中物骨骼,在右边属性栏找到MMD Display,勾选骨骼显示,人物身上会出现很多骨骼类的物体。
之后导入动作,在左边的工具栏找到导入导出,点击下面的Import Motion,找到VMD后缀的动作文件,点击Import VMD file to MMD Model。

也可以在文件>导入>MikuMikuDance Motion导入动作文件。

导入成功后就能在时间轴上看到很多黄色竖线。这时人物已经可以被骨骼带动,但是头发和衣服不会跟随人物。这时还需要结算刚体碰撞。

在右边属性窗口点击图标切换到场景分页,找到Rigid Body Cache(刚体缓存)扩展栏,打开标签,并点击Bake All Dynamics(烘焙所有动力学)。这需要耐心等待,在导入动作和烘焙刚体之前不要做多余的操作,那样可能导致模型动作异常或者衣服头发姿态的异常。

额外提示(下面步骤是应用在Blender中的内容,因为我们主要学习Untiy,不感兴趣的同学可以跳过蓝字)
导入镜头
烘焙完成后接下来是镜头,也可以像人物那样直接导动作。
首先选中摄像机,然后在菜单里打开文件,导入mikumikudance motion。导航到动作数据文件,然后导入。时间轴同样出现黄色竖线。
需要注意的是,Blender导入Unity的相机是有问题的,所以导入镜头的步骤我们也可以省略。
渲染输出
渲染是单帧图像渲染,动画是渲染视频。分辨率就是图像分辨率,帧率一般在导入动作之后就自动调好了,帧范围同样也是。
输出设置选项,最上面一行是要输出的位置,就是最终渲染的视频存储位置,文件格式可以直接设置成视频的格式。
编码格式设置MPEG-4,编码器H.264,比率1800,音频编码器:AAC。
关于声音,这里是可以直接添加声音的,blender内置非线性编辑工具,可以添加音轨,剪辑,做转场效果,添加字幕等等。
最后按下渲染动画的按钮,等待完成即可。Blender是一款开源免费的3D软件,虽然小巧但是功能强大,2.8版本增加了EEVEE渲染器,可以进行实时渲染。

导出FBX

我们切换到AV-sync,再播放动画看看效果。烘焙后衣服和头发的问题已经修复,模型的面部表情也保留下来。我们现在导出FBX文件。我们在3D界面按A键。或者在Outline窗口Select Hierachy(选中层级),选中模型文件(这里注意要将骨骼显示出来)。


打开File>Export>FBX。

在左下角Export FBX扩展栏中,我们按照上图设置。选择好输出文件位置。点击Export FBX按钮。导出时在输出FBX同时会生成*.fbm的文件夹,这个里面装的是贴图文件。

导入导出相机动作
这个步骤Up偷个懒,请移步下面方案,查看Up学习笔记的第四期。

Up推荐步骤 MMDBridge导出abc文件 > Maya导出FBX文件 > FBX导入Unity

导入导出场景
导入场景Up建议和模型分开进行,场景导入Blender和模型前面的步骤基本一致。场景不需要进行Build刚体和导入动作。所以导入场景后我们就可以导出FBX文件了。

因为场景不需要骨骼和动画,所以我们只点选Mesh就可以。

在Unity中组装
预先设置
首先,我们要创建HDRP模版的项目。

根据之前的经验,创建项目要先进行两项设置。第一,在Asset文件夹中创建高清渲染管线资源,在项目设置中图像的可编程渲染管线设置中,设置为新创建的HDRP资源。第二,将项目设置中Player的其它设置里的渲染下的颜色空间设为线性。
导入资源
我们将刚才导出好模型,场景,相机的FBX和音乐文件导入Unity,可以直接将它们拖到Assets文件夹里面。可以看到模型拖入Unity后只是显示白模,没有贴图。我们将与FBX同时生成的*.fbm直接拖到Material文件夹里面(如果导出FBX文件时没有生成fbm文件夹,我们在Material文件夹里面创建一个新的文件夹(可以命名为Model),将贴图文件夹和文件都拖到这个新建的文件夹里面)。

我们点选模型的FBX文件,将Material的Location从Use Embedded Material(使用嵌入材质)切换到Use Exteral Materials(Legacy)(使用外部材质(遗留)),点击下面Apply按钮应用。可以在预览窗口看到模型的贴图已经附着上。

布置场景
我们将模型拖入场景中,调整Transform参数。这里我们需要注意的是要让模型符合相机的移动范围,我们要灵活地设置Scale大小,一般以原来值的10倍或一半进行实验性的设置。

我们展开FBX文件,可在看到带播放图标的文件,这个文件是FBX附带的动画文件,我们将它拖到场景中的模型上。

模型的Animator组件下Controller原来为None,拖入动画文件变为模型名。这时模型的默认动画已经修改为刚刚拖入的动画。这时我们点击播放按钮就可以看到模型动画已经设置完成了。

Blender一般会给动画加入几帧多余的空白帧。我们点选动画文件的检查器的Edit(编辑)按钮,对动画进行编辑,要改变动画的帧范围可以拖动里面的刻度的滑杆。
场景FBX文件只需要将材质以模型相同的处理步骤即可。
相机FBX文件导入Assets文件夹后,将FBX文件拖入场景中。点击FBX后的小三角展开里面内容,将里面的动画文件拖到相机文件上。相机的动画一般Transform设为Reset,不需要再进行调整,Up建议我们只修改模型和场景的Transform参数,让角色模型和场景适配相机即可。我们再给相机增加Audio Source和Audio Listener两个组件,将音乐文件拖到Audio Source组件的AudioClip后面的空白处。有了新相机,那么原来的相机就可以禁用或者直接删除掉了。

我们还要给相机增加抗锯齿,点击Anti-aliasing后面的选项可以选择四个级别的抗锯齿。

FXAA是轻度抗锯齿,TAA比它稍好一些,SMAA是越高级的抗锯齿。我们按自己需求的情况适当设置抗锯齿的级别。
材质设置
使用HDRP后材质和正常的情况下有很大的区别,这时我们要进材质进行修正。

我们保持材质的Shader为HDRP/Lit,有些材质的可见度现在是不正确的,我们要调整Surface Type的设置,Opaque为不透明,Transparent为透明。这时只要稍动一下,就会发现不正常的材质变正确了(各别材质会这样),而不是真得实际去改变设置。不排除升级HDRP材质后,原材质出现的Bug。
下面我们再将Material Type设置为对应的材质,比如皮肤设为Subsurface Scattering(次表面分散),也就是传说中的SSS材质,把Transmission的勾选去掉。其它可以选择Standard,高亮的材质可以选择Specular Color。材质的详细设置Up以后还要深入研究,我们现在先简单设置一下。
环境设置
HDRP下环境设置与正常情况时有很大区别,需要将天空盒等效果放入单独一个Volume中进行设置。下面这篇有HDRP详细说明,感兴趣可以看看。


我们在场景中创建一个空物体,命名为Skybox。增加Volume组件,勾选Is Global框选。点击Profile后面的New按钮,新建一个Skybox Profile配置文件。

再点击Add Oerride按钮,选择Sky里面的其中一种。这里的天空盒和正常的天空盒大同小异,我们可以参考之前的设置。


UP这里选择HDRI Sky,我们可以在Asset Store里面搜索HDRI Pack。可以找到下面两个免费的贴图包。

这里Up自已在网上搜索全景文件(jpg,hdr都可以,但推荐hdr),如下所示。

我们将Texture Shape设置由2D切换至Cube,点击Apply应用。

设置好天空盒,再点击Add Override按钮,增加Visual Environment组件。按自已需求勾选Type,Ambient Mode,Fog。Sky Type可选择上面的三种天空盒。Ambient Mode可以选择Static(静态)和Dynamic(动态)。
Fog Type可以选择Linear Fog(线性雾),Exponential Fog(指数雾)和Volumetric Fog(体积雾)。我们还可以加入Lighting,Shadowing,Post-processing,这些设置各位小伙伴可以实验性地调节,直到效果让我们满意为止。

这个不是标准,每个人对画面可能都有不同的喜好。另外还得补充一点,我们虽然使用了全景天空设置,但还是要记得将方向光对着模型的正面,用来保持更好的光照效果。还可以根据自己的需要增加灯光。我们后面再探讨灯光的设置。

HDRP的Post-processing和之前第五期的设置类似,我们可以参考Up的笔记回顾一下。关于Volume的具体设置我们后面再深入研究。

预览动画
准备工作已经完成,我们先播放看看整体效果如何。

如果你的Game窗口效果不明显,说明你的窗口分辨率可能比较低。我们可以调高窗口的分辨率仔细观察画面质量。

我们点击Game下面的这个按钮(一般默认设置为Free Aspect),我们可以点击下面的+号来增加新的分辨率。Up增加的是1920x1080分辨率。小伙伴们可以按照自己的想法来随意设置。4k以上也是没问题的,不过前提是你的机器得足够好,否则播放起来可能会卡成PPT。
导出视频
如果播放没有问题了,我们下面就可以准备导出视频文件了。之前Up的第三期里面已经介绍过了视频的录制插件和使用方法。我们可借这个机会复习一下。

另外,Up还要补充一点,官方的Recorder已经更新到v2版本,功能而且更加丰富。我们可以在Asset Store或者新版的Package Manager里面搜索可以找到。

它操作和以前略有不同,我们在这里简单了解一下它的视频输出。我们在Window>General>Recorder>Recorder Window打开它的界面窗口。

我们先要点击左侧Add New Recorders的按钮,添加一种输出类型,我们选择Movie(影片),下面就会出现输出类型,右面对应这种类型的参数设置。
Frame Rate (帧率)下,我们选择Playback的Constant,Target里面选择60,勾选Cap。
我们要影片保持60帧的播放速度。下面Format我们可以选择MP4类型的视频,Path选择我们的输出位置。Capture保持Game View,Output Resolution我们选择4K - 2160p,Quality我们选择High,勾选Capture audio抓取音轨。这样我们可以得到4K的高清高质量视频。
最后我们点击上面START RECORDING按钮,开始录制视频。这个录制的速度取决我们电脑的配置,分辨率越高花费的时间越长,但对于Unity这种实时渲染的方式,要比其它3D软件快得多。
新版的Recorder使用方法可以参考下面这篇专栏。


输出完成后我们就可以欣赏自己的作品了,成就感油然而生。小伙伴们都可以尝试一下。
当然,这个流程并不是固定的,它只是在Up自已有限知识范围内归纳的东西,肯定还有错误和冗余的步骤。如果哪位小伙伴有更好做法,希望您不吝赐教,指出Up的错误和不足。这样Up以后才能不断进步,进一步提高Unity水平,这也是我制作笔记的目的。