天天看点

《Unity虚拟现实开发实战》——第2章,第2.5节Blender简介

本节书摘来自华章出版社《unity虚拟现实开发实战》一书中的第2章,第2.5节blender简介,作者[美] 乔纳森·林诺维斯,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.5blender简介

打开blender程序,关闭欢迎界面后呈现的就是blender编辑器了,与下面的截图差不多:

《Unity虚拟现实开发实战》——第2章,第2.5节Blender简介

同unity一样,blender包括一些不重叠的窗口,可以按喜好自定义这些窗口的布局。但是,blender的界面更复杂,从某方面来说因为它集成了若干个不同的编辑器,而这些编辑器可以同时在各自的面板中打开。

改变默认视图的大小很有用,因为上面那张图中包含5个不同的编辑器。

最明显的编辑器是那个大的3d view,我已经用红色矩形高亮显示了,在这个视图中可以察看、移动和组织blender场景中的对象。

其余4个打开的编辑器是:

info editor,会发现它沿着程序顶部的边缘,其中包含程序的全局菜单和信息。

timeline editor,在程序的下底边上,用于动画。

outliner editor,在右上方,场景中所有对象的层级视图都在这里。

properties editor,在outliner的右下方,是一个很有用的面板,可以察看和修改场景中对象的多个属性。

每个编辑器也可以有多个面板,我们来看看3d视图编辑器:

中间的大片区域是3d viewport,可以察看、移动和组织blender场景中的对象。

3d viewport的下方是编辑器的header,它虽然在下方我们却叫它header。这个header是一行菜单和工具栏,提供了很多控制编辑器的功能,包括选择器、编辑模式、变换操作和层次管理。

左边的是tool shelf,包括各种编辑工具,可以用于当前选中对象、放进选项卡,tool shelf可以通过滑动其边缘或者按t键来切换开关状态。

3d视角也有一个properties面板,它默认可能是隐藏的,可以按n键来切换开关状态,它提供了当前选中对象的属性设置。

在接下来的介绍中,会要求你改变3d视图编辑器的interaction mode,变成edit mode和texture paint模式之间的值,可以在header中选择,如下图所示:

《Unity虚拟现实开发实战》——第2章,第2.5节Blender简介

其他编辑器也有header面板,info editor(程序顶部)本身就是一个header!outliner和properties编辑器(右边)的header在自身面板的顶部而不是在底部。

调整过布局后,看起来就不是那么拥挤和混乱了。

properties编辑器有一长溜图标,像是选项卡一样,要选择面板中的其余属性。鼠标悬停在图标上(这里其他的ui部件也都一样)就会显示出一个提示语告诉你它的功能,后面的(后续章节中用到它的时候)图片中可以看到。

blender的布局非常灵活,你甚至可以把一个面板从一个编辑器变成另外一个,每个header的最左边是editor type选择器。点击它就可以看到所有选项。

除了blender界面上可以点击东西之外,还可以用键盘快捷键执行命令,如果忘了在哪找到某个功能,可以敲空格键再输入最接近你要找的命令名称,它可能就会弹出来!

下图是blender中的editor type选择器:

《Unity虚拟现实开发实战》——第2章,第2.5节Blender简介

2.5.1立方体

现在,我们来在blender中构建一个单位立方体。

默认的场景中可能已经有物体了,包括一个立方体、摄像机和一个光源,如同前面在blender窗口中显示的那样。(你的初始设置可能会不同,因为它是可配置的。)

如果初始场景中没有单位立方体,那么就像下面这样创建一个:

1.删除场景中的任何东西以确保场景是空的(右键选择,x键删除)。

2.用shift+s (打开snap选项列表)| cursor to center把3d光标的原点设置成 (0, 0, 0)。

3.在左边的tool shelf面板中,选择create选项卡,再在mesh下选择cube 以添加一个立方体。

好了,我们现在进度一样了。

注意在blender中,参考网格延伸了x轴和y轴,z轴朝上(不像unity,y轴朝上)。

还有,注意blender中默认的立方体的大小是 (2, 2, 2)。

而我们需要的是一个单位立方体立在基准面的原点之上,就像这样操作吧:

1.用n键打开properties面板。

2.选择transform | scale 把x,y,z设置成 (0.5, 0.5, 0.5)。

3.选择transform | location把z设置成 0.5。

4.再按n键隐藏面板。

5.可以用鼠标滚轮来缩放。

我们还要确保当前渲染器是blender render(在程序窗口顶部中间的info 编辑器中的下拉选项里)。

2.5.2uv纹理图片

接下来,我们创建一张uv纹理图片:

《Unity虚拟现实开发实战》——第2章,第2.5节Blender简介

找到edit mode,在底部的header栏中选择interaction mode选择器。

用全选(双击a键)确保所有表面都被选中。

在左边的tool shelf面板中,选择shading/uvs选项卡。

在uv mapping下方点击unwrap,在下拉列表中选择smart uv project,接受默认值,点击ok(结果见下图,也能看到光皮的立方体长什么样)。

现在再用底部的header栏把interaction mode变成texture paint模式。

我们还需要为我们的材质定义一个绘制槽,点击add paint slot,选择diffuse color,命名为cubefaces,点击ok。

我们现在开始直接在立方体上绘制,首先画前面,步骤如下:

制作一个小一点的画刷。在左边的tool shelf面板中,tools选项卡下选择brush | radius,然后输入8 px。

可能在正交视图下更容易操作。在底部菜单栏中选择view | view persp/ortho。

然后选择view | front。

如果需要的话你可以用鼠标滚轮来缩放大小。

用你最好的书法水平用鼠标左键写上单词“front”。

再在背面做同样的操作。

在底部的菜单栏中选择view | back再用右键选择这一面。

好好写一个“back”。

再在左、右、上、下的面上重复上面的操作,如果发生不能画的情况,确认是否选中了当前表面,试试用右键在这个面上重新选择,结果应该差不多像下面这样(同时在3d view编辑器中用正交透视和uv/image editor):

现在,我们保存图片,然后设置其属性,步骤如下:

使用3d view编辑器底部header的最左边的选择器,把当前的editor type改成uv/image editor。

点击browse image to be linked选择器图标。(朝着+图标的左边),再在列表中选择 cubefaces。

底部菜单栏的image 菜单项现在有一个星号(image*)表示有一张未保存的图片,点击它,选择save as image,保存成cubefaces.png,使用一个unity工程之外的文件夹。

在左边,在properties编辑器的面板上,在其header中找到一长排图标,选择texture(倒数第三个),如果面板不够宽的话它可能会不显示,你可以用鼠标下滑来显示,如下图所示:

《Unity虚拟现实开发实战》——第2章,第2.5节Blender简介

在texture属性中,把type变成image or movie。

在属性的image组中,点击browse image to be linked选择器图标(见下图)选择cubefaces。

《Unity虚拟现实开发实战》——第2章,第2.5节Blender简介

你应该在preview窗口中可以看到带有标签的纹理图片了。

不错!我们保存这个blender模型吧,步骤如下:

在顶部菜单栏中的info编辑器中选择file,再点击save(或按ctrl+s)。

使用之前保存纹理图片的文件夹。

命名为uprightcube.blend,点击save blender file。

我们现在应该在文件夹中有两个文件了,uprightcube.blend和cubefaces.png。我使用了一个在unity项目根目录中叫作blender的文件夹。注意,也可以导出成其他标准格式,比如fbx(filmbox的简称)就可作为一种选择。

太棒了,完成这么多了。没弄懂也没关系,blender可能比较难,但是unity需要模型,你可以一直都从unity的asset store和3d模型分享网站中下载其他人的模型。但不要做一个没用的人,学习自己做自己的模型吧。哈哈!我说真的,这是一个很好的学习起点。

2.5.3导入unity

回到unity,我们要导入刚才那两个文件—uprightcube.blend和cubefaces.png,一个一个来,步骤如下:

在project面板中,选择assets根目录,定位到create | folder,重命名这个文件夹为models。

有一个简单的方法导入文件到unity中,就是从windows资源管理器(或mac的finder)窗口拖拽 .blend文件到project面板的assets/models文件夹,把 .png文件拖拽到assets/textures文件夹中(或者也可以用主菜单栏中的assets | import new assets)。

通过从assets/models文件夹,也就是刚才导入scene视图的地方,把刚才导入的模型uprightcube拖动到场景中。

把它的坐标值设置成与其他对象远离,我设置的position值是(2.6, 2.2, -3)。

从assets/textures文件夹中拖动cubefaces纹理到scene视图中,停在刚才添加的uprightcube上让它接收这个纹理,然后把松开纹理把放到立方体上。

这样场景应该看着像下面这样了:

《Unity虚拟现实开发实战》——第2章,第2.5节Blender简介

2.5.4观察者

立方体的背面对着我们,这是一个失误吗?其实这是正常的,因为当前视点是朝前看的,那么我们就应该看着立方体的背面。你应该没注意到,ethan也是这样。而这个立方体看着差不多有一个单位的容积。

但是,仔细检查一下,在立方体的inspector面板中,会发现它导入的缩放比例是我们在blender中给的(0.5, 0.5, 0.5),另外它还有一个x轴的-90°旋转(负90),所以如果我们重置变换值,也就是比例尺为(1, 1, 1),它在我们的世界坐标系中将会是两个单位大小,而且是颠倒的(所以,别重置)。

不用回到blender中,稍微操作一下就可以抵消这个旋转值了。

blender的默认朝上的方向是z轴,而unity是y轴。所以,导入时x轴-90°的旋转用于调整这个差异。导入的比例可以在对象的inspector面板的import settings中调整。

比例问题可以通过下面的步骤修复:

1.在project面板中,选择我们导入的uprightcube。inspector面板会显示其import settings。

把scale factor的值从1改成0.5。

点击apply。

场景中的立方体现在可以是scale (1, 1, 1),且可以是一个单位立方体,如我们所愿。

在hierarchy中选择uprightcube,把transform的sacle值改成 (1, 1, 1)。

在结束上面这个过程之前,在hierarchy面板中选择uprightcube并把它拖进project面板的assets文件夹中。(你可以考虑建立一个assets/prefabs文件夹把文件放进去。)这样就做成了一个可重复使用的预制件,包括纹理图片和所有内容。

本节中的一些重要练习(除了在blender学习的那些之外)可以用于任何3d unity项目,包括虚拟现实项目。正常来说,你应该会导入比立方体要复杂得多的模型,会遇到数据转换、缩放比例、朝向、uv纹理图片等相关的问题让你困惑。如果遇到了,试着把问题分解成小问题,分解成更独立的场景。做一些小的试验来了解程序是如何交换数据的,这对于你理解混杂的参数可能会有所帮助。

继续阅读