Blender模型导入Unity实践

前言

最近在网上找到了一些命运2的模型,思索着如果能把这些模型用在Unity里二次创作,那真是件很cool(๑•̀ㅂ•́)و✧的事情。后面的例子用的是命运2中的经典异域武器“烈日弹丸(Sunshot)”,下面先看看它在游戏里的样子:

雀食帅

以枪的模型来说,每把枪作者提供fbx模型、dds贴图和blend文件。但在Win10上用系统自带的“3D查看器”打开fbx后,发现是个白膜,没有贴图:

发现事情并没那么简单,下面把模型和贴图都放进Unity试试:

跟预想的一样,依旧是白膜,这时候我们检查模型包含的材质是否正常:

可以看到材质是空的,没有任何一张贴图,看来我们需要手动将贴图设置给材质。但模型里的材质球我们无法直接编辑,因此我们还得先把它们提取出来:

  1. 在Unity的Project面板中选中模型资源
  2. 在Inspector面板中选择Materials选项卡
  3. 点击Extract Materials按钮,提取材质球,选择输出目录后,就能看到材质球跑到了同目录下(默认情况下)

到这里我们得到了两个材质球,分别对应枪械的主体和弹仓部分。

下面该给材质设置贴图了,但这时会发现,作者只给每个材质提供了Diffuse、Gstack和Normal贴图,这与Unity默认Shader接收的贴图参数对不上(作者目前没有提供普通武器的Unity Shader)。

Diffuse和Normal贴图好理解,可以对应标准Shader中的Albedo和Normal贴图。但Gstack就难搞了,后面根据作者提供的blend文件分析,Gstack贴图是在Blender中的Shader系统进行一系列转换后,提供给Metallic和Roughness这两项参数的,因此这贴图勉强和Unity标准Shader的Metallic参数对应上。下面我们把贴图设置好后看看结果:

在Unity中设置完后的效果:

怎么这么黑

emmm……这和原图的差距有亿点大——如果只靠作者提供的模型和贴图,在Unity中是无法达到理想效果的。要优化模型在Unity中的显示效果,我们得在Blender中重新烘焙贴图,让该贴图能够被Unity正常使用。

烘焙准备工作

在Blender工程中打开作者提供的blend文件(blend文件和dds文件要放在同目录下,否则可能读取不到贴图),可以看到模型是正常显示的:

确认Mesh组合及其材质

在Blender界面右边的Outliner窗口,查看这把枪由哪些网格组成:

可以看到该枪被分成了7个部分,点击选中后,该网格会在左方的Modeling窗口中高亮显示。和大部分软件一样,可以按住Ctrl或Shift来多选。除了网格之外,场景中还有摄像机和光源这两个物体,在这个例子中用不到,因此我们把它们隐藏。

之后来检查各个网格所使用的材质有哪些:选中其中一个网格,在下方的Properties窗口中查看该网格使用的材质,以及材质使用的贴图:

逐个查看后,得出每个网格拥有一个材质,一共有三种材质。我们的任务就是为这三个材质球重新烘焙贴图,且该贴图能够在Unity中使用——由于Gstack贴图在Unity中无法正常使用(标准shader下),因此我们只烘焙Diffuse和Normal贴图。

UV检查

由于UV记录着网格与贴图上像素的映射关系,因此在烘焙前我们还需检查贴图的UV是否设置正确。如果UV出现问题,那烘焙出来的贴图也是错误的。

进入UV Editing编辑界面(进入按钮默认在正上方),然后在Outliner窗口选择需要查看的网格的UV:

由于我们烘焙的贴图是基于材质球的,因此示例里选中了Mesh_0001、Mesh_0002、Mesh_0003三个网格——它们都共同使用Sunshot材质。

在左侧的UV Editor窗口中,点击上方切换贴图,可以看到UV平铺在贴图上,这是理想情况。当UV处于立体结构时,我们需要进行UV展开:在UV Editor窗口选中所有UV节点(默认按键A),然后按U键打开菜单,选择Unwrap或Smart UV Project。注意,这里就不要再将UV展开了,不然模型上的贴图会出现显示错误。

检查完01到03三个网格,我们检查00和04,这两个网格的材质球都是Sunshot.001:

这里出现问题了!UV坐标并不在贴图上,那烘焙出来的贴图会是一片漆黑——因为UV坐标下没有像素。这里需要手动调整UV坐标:

调整完毕后的UV如下:

最后检查Mesh_0005和Mesh_0006网格的UV,没有需要调整的地方,这里就不再放图了。

烘焙贴图

烘焙贴图需要在Shader Editor窗口中进行。我们可以点击主界面上方的Shading按钮进入预设的着色器排版界面,也可以自己在Layout窗口中新建窗口来编辑。这里推荐一种自用的排版方式:

从上面的图例可以了解到,Blender的Shader Editor跟Unity的Shader Graph比较相似。

我们需要逐个给材质球烘焙新贴图(这个示例中,我们只烘焙Diffuse和Normal贴图),我们先来烘焙Sunshot.001材质球:

  • 在Shader Editor窗口中新建一个Image Texture。点击窗口下方的Add,或使用快捷键Shift+A,选择Texuture\Image Texture
  • 在新建的Image Texture节点中新建贴图,这里取名为Sunshot001_Diffuse_Baked
  • 选择贴图的Mesh,然后根据下图进行设置:
  • 然后我们渲染Sunshot.001材质的Normal贴图,与上面的步骤大致相同,区别是:创建新图的时候不勾选Alpha通道;BakeType选择Normal。渲染后的贴图如下:
  • 然后我们将这两张贴图输出到模型上。这里我们要使用到Blender的Principled BSDF着色器,靠它来整合贴图与输出:
  • 设置完Principled BSDF后点击Material Output节点查看烘焙的贴图输出到材质/模型上的结果

烘焙完Sunshot.001材质球的两张贴图后,还剩下Sunshot和SunshotMagazine材质球。我们根据上面的步骤如法炮制,给它们烘焙Diffuse和Normal贴图。

Sunshot和SunshotMagazine材质球烘焙贴图如下:

所有贴图都烘焙完后,模型输出如下:

看起来还算回事^v^~

为了精简Blender工程,我们可以把作者提供的shader节点都给删掉,只保留我们创建的节点。当然也可以二者都保留。

保存贴图

我们需要将烘焙好的贴图保存下来,提供给Unity使用。在Image Editor窗口下方点击Image按钮,再点击Save As按钮,将贴图保存为PNG格式的图片即可。这里我们一共保存了6张图片:

导出FBX文件

根据点击File/Export/FBX按钮,打开导出窗口:

我们不需要导出Camera和Light这两项,我们可以把它俩删掉,或者勾选Selected Objects,并在Outliner窗口中选中要导出的Mesh。

导出后双击FBX文件,通过Win10的3D查看器快速检查我们的模型:

(o゜▽゜)o☆距离成功只差将它导入到Unity中了。如果这里打开发现模型没有贴图,要检查贴图是否放在模型同目录,或者次级目录下。

将资源导入进Unity

我们将FBX文件和PNG贴图都放进Unity中,此时Unity可能会提示我们有贴图被当作Normal贴图来使用,询问我们是否要修改这些贴图的设置,选择确认即可。

我们按照前言里的方法,将模型中的材质球导出,然后我们就能设置其贴图的参数了。

我们将三个材质球的Albedo贴图,即Diffuse贴图的颜色修改一下,改为全白,并且将Metallic参数拉满,Smoothness参数设置为一半,如果模型比较暗,就设置一下灯光,然后看看它在Unity中的表现如何:

( ̄▽ ̄)”,怎↗么→说↘↗呢→,虽然看上去没有在blender里的精致,但至少比最开始的好多了是不。

到此,我们获得异域武器——烈日弹丸(久经沙场)╰( ̄ω ̄o)。

上一篇
下一篇