blender烘焙与unity导入(bake multiple into one)

这里小白一个,首先可以先看一下视频,如果做不出来再看本文,因为本文只是指出了要注意的细节,此外如有错误也欢迎指出和讨论..
https://www.youtube.com/watch?v=9airvjDaVh4&list=PLj6G-3M0NXNXGGPSPXBTC1H04NPxk96Eo&index=18&t=0s

1.页面布局

blender烘焙需要用到shader、UV editor以及3dviewport界面,将界面布置好更有利于操作


blender烘焙与unity导入(bake multiple into one)_第1张图片
图片.png

2.烘焙前的准备

烘焙需要准备三点

  1. 一个全新的UV贴图
  2. 图像用来保存烘焙机结果
  3. 一个Image Texture节点用来指定导出到的图像

1.创建新图像

首先要创建一个新的图像,要注意的是这个图像要进行save as和save两步操作,让其保存在电脑的硬盘上,否则最后的烘焙会报"circular depandancy..."的信息,这个信息就是没找到需要导出的图像而导致图像载入到自己身上。原因大概是因为,不这样做,blender会无法检测到新图像。

2.UV展开

进行UV展开前,先新建一个UV贴图,并将该新贴图选定。


blender烘焙与unity导入(bake multiple into one)_第2张图片
图片.png

然后进入edit模式,按u键进行UV展开。


blender烘焙与unity导入(bake multiple into one)_第3张图片
图片.png

UV展开这里因为是高模,可以选择unwrap或者smart UV project。二者的区别在于,smart UV project可以进行个性化的展开。此外,低模也可以选择lightmap pack。
然后就可以发现,图片上出现了UV展开的节点,其实这里这些UV节点就保存到了刚刚新建的UV贴图里面了。
blender烘焙与unity导入(bake multiple into one)_第4张图片
图片.png

3.node节点设置

之后在每个材质的shader界面里,新增一个image texture节点,该节点的图片就指向你要导出的那个图片。
注意

  1. 该节点要给每个要导出的材质添加
  2. 该节点必须要激活(active)!!!,也就是有白色边框


    blender烘焙与unity导入(bake multiple into one)_第5张图片
    图片.png

    因为这样子操作非常麻烦,所以我写了一个脚本给每个模型的每个材质都添加这个节点,只要白get后的图片名称改成自己的即可。

for obj in bpy.data.objects:
    for material in obj.data.materials:
        tochangeNode = material.node_tree.nodes.new("ShaderNodeTexImage")
        tochangeNode.image = bpy.data.images.get("kokoro2") //change name here 
        tochangeNode.location = Vector((377,-141))
//active the node
        material.node_tree.nodes.active = tochangeNode

3.开始烘焙

烘焙必须在cycle下进行


blender烘焙与unity导入(bake multiple into one)_第6张图片
图片.png

比较常用的烘焙模式为combined,diffuse,normal模式。
combined模式就是讲光影效果、阴影效果等等全部烘焙到贴图上。
diffuse可以选择只烘焙材质的颜色。
normal是法线贴图,可以给贴图丰富细节的同时又不消耗性能。
这里要导出到unity中,所以选择diffuse和normal模式

1.diffuse

按下面的选项勾选,margin在贴图烘焙重叠时,可以改的小一些。此外如果是多个物体烘焙需要勾选selected to active,我这里用ctrl+j合并了物体,所以不能勾选。


blender烘焙与unity导入(bake multiple into one)_第7张图片
图片.png

2.normal

因为要新建个图片烘焙,所以这里用另一个脚本更改节点的图片名称

for obj in bpy.data.objects:
    for material in obj.data.materials:
        tochangeNode = material.node_tree.nodes[-1]
        tochangeNode.image = bpy.data.images.get("kokoro_normal") 

最后烘焙结束后,要记住点击save保存,烘焙才会生效


blender烘焙与unity导入(bake multiple into one)_第8张图片

4.其他设定

复制刚才的模型,并且删除所有模型,将刚刚的贴图制作成材质来测试一下烘焙效果。发现hair、eyelash、eyeball都全黑了。


blender烘焙与unity导入(bake multiple into one)_第9张图片
图片.png

再看贴图,这是因为本该透明的部分被黑色填充的结果。这个问题可以用gloss烘焙来解决。


blender烘焙与unity导入(bake multiple into one)_第10张图片
图片.png

按照之前的步骤,再进行gloss烘焙,得到的就是alpha通道的结果。白色代表要显示的部分,黑色的代表透明部分。


blender烘焙与unity导入(bake multiple into one)_第11张图片

打开ps将diffuse和gloss贴图导入。
给diffuse贴图添加一个蒙版,然后点击gloss贴图ctrl+a全选,ctrl+c复制,按住alt键点击多出来的蒙版,然后ctrl+v粘贴。最后就会得到两者合并的结果


blender烘焙与unity导入(bake multiple into one)_第12张图片
图片.png

然后到处PNG格式图片(PNG支持alpha通道)

回到blender,如图所示设置,即可完成结果


blender烘焙与unity导入(bake multiple into one)_第13张图片
图片.png

blender烘焙与unity导入(bake multiple into one)_第14张图片
图片.png

5.导入unity

将模型导出为fbx格式,如图所示勾选,即可将材质放入导出的fbx文件中


blender烘焙与unity导入(bake multiple into one)_第15张图片
图片.png

在unity中打开,但发现人物的眼睛、睫毛、头发仍然存在刚才的问题。
这是因为render mode中选择了opaque模式,这个模式是不考虑alpha通道的,之后选择cutoff模式即可。
不过这种模式下,发现睫毛和头发部分表现效果并不理想。解决方法是将这两个部分单独拎出来烘焙,然后选择fade效果。此外如果眼睛部分选择transparent效果,还可以实现眼睛的反光。

参考:
https://blender.stackexchange.com/questions/44525/cycles-bake-script-error-circular-dependency
https://blender.stackexchange.com/questions/47052/what-is-the-difference-between-unwrap-and-smart-uv-project
https://blenderartists.org/t/texture-bake-alpha/407849/5

你可能感兴趣的:(blender烘焙与unity导入(bake multiple into one))