天天看点

《Unity虚拟现实开发实战》——第2章,第2.2节创建简单的透视图

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

2.2创建简单的透视图

现在我们添加几个物体到场景中来搭建这个环境,其中包括一个单位立方体、一个平面、一个红色球体和一个照片背景。

2.2.1添加立方体

我们添加第一个对象到场景中—一个单位大小的立方体。

在hierarchy面板中,用create菜单选择3d object | cube,主菜单栏中gameobject的下拉菜单中也有同样的选项。

一个默认的白色立方体就被添加到了场景中,放在了地平面的中心点(0, 0, 0)位置,没有旋转值和缩放值,你可以在inspector面板中看到这些值。这是reset设置值,可以在这个物体在inspector面板中的transform组件中找到。

transform的reset值是position (0,0,0),rotation (0,0,0),scale(1,1,1)。

如果某些情况下你新添加的立方体不是这个值,可以手动设置成这些值,或者通过点击inspector面板中transform组件右上角的齿轮图标选择reset来设置。

这个立方体在各维度上都是一个单位,我们后面会发现,在unity中一个单位对应世界坐标系中的1m,其局部中心点位于立方体的中心。

2.2.2添加平面

现在我们来添加一个平面对象到场景中。

在hierarchy面板中,点击create菜单(或gameobject菜单),然后选择3d object | plane。

一个默认的白色平面会被添加到场景中,放置于地平面的中心点 (0, 0, 0) 位置,(如果有必要的话可以通过点击inspector面板中transform组件右上角的齿轮图标选择reset来设置成这个值),把它重命名为groundplane。

注意当缩放比例为 (1, 1, 1) 时,unity中的平面对象实际上相当于在x轴和z轴上10×10个单位的长度,也就是说,groundplane的长宽是10×10个单位大小,其transform组件的scale值是1。

立方体的中心点在 position (0, 0, 0),与地平面相同。但是看起来似乎不像是这样,scene面板可能会显示成一个把3d场景渲染到2d图片上的perspective投影,perspective变形使立方体看起来不在地平面的中心点,但实际上它在中心点,数一下到各边的网格线数就能看出来。另外,当在虚拟现实中查看它的时候,你实际上是站在场景中的,这个时候根本看不出变形,如下图所示:

《Unity虚拟现实开发实战》——第2章,第2.2节创建简单的透视图

立方体陷入了地平面之下是因为其局部原点在其几何中心—也就是相当于1×1×1的中心点 (0.5, 0.5, 0.5) ,这听起来可能很显然,但有些模型的原点并不在其几何中心上(比如在其一个角上)。一个对象的transform组件的位置值是其局部原点在世界坐标系中的位置值。我们移动一下这个立方体:

1.通过inspector面板中把position的y值设置成0.5:position (0, 0.5, 0),把立方体移动到地平面的表面以上。

2.通过在y旋转值中输入20:rotation(0, 20, 0),让立方体绕着y轴稍微旋转一点。

注意,其旋转的方向是顺时针20°。拿出左手,比划一个竖起大拇指的手势,看看其余四个手指指向什么方向?unity使用左手坐标系统(对于左手还是右手系统并没有标准,有些软件是左手坐标系统,有些是右手坐标系统)。

unity使用左手坐标系统,y轴向上。

2.2.3添加球体和材质

接下来,我们添加一个球体。

从菜单中选择 gameobject | 3d object | sphere。

像那个立方体一样,球体的半径是1.0,原点也在几何中心。(如果有必要的话可以通过点击inspector面板中transform组件右上角的齿轮图标选择reset来设置默认值)。很难看到这个球体,因为它被嵌入在立方体中,我们需要移动球体的位置。

《Unity虚拟现实开发实战》——第2章,第2.2节创建简单的透视图

在scene面板中,选中球体,确认translate工具处于激活状态(左上方工具栏的图标栏中的第二个图标),使用x轴、y轴、z轴箭头来移动它,我把位置变成了(1.6,0.75,-1.75)。

gizmo是一个图形化控件,用于操作某个对象或视图的参数。gizmos中有拖拽点或操作点,可以用鼠标点击和拖动。

在继续下一步之前,先按如下操作保存之前的操作:

1.在主菜单中,选择file | save scene然后将其命名为diorama。

2.然后,选择file | save project,注意在project面板中,新的场景对象已经被保存在assets文件夹的根目录中。

我们再制作一些有颜色的纹理,把纹理应用到物体上,来给场景上点颜色,步骤如下:

在project面板中,选择assets文件夹的根目录,再选择create | folder,重命名文件夹为materials。

2.选中materials文件夹,再选择create | material,重命名为red。

3.在inspector面板中,点击albedo右边的白色矩形会打开一个color面板,选择一种好看的红色。

4.再用同样的操作制作一个蓝色的材质。

5.在hierarchy(或scene)面板中选中sphere。

6.将红色材质从project面板拖进inspector面板作为球体的材质。球体将会变红。

7.在hierarchy(或scene)面板中选中cube。

8.这次,将蓝色材质从project面板拖进场景中作为立方体的材质,球体将会变蓝。

保存场景,并且保存项目。下面是场景现在的样子(和你制作的可能不太一样,不过无所谓):

《Unity虚拟现实开发实战》——第2章,第2.2节创建简单的透视图

注意,我们使用的文件夹在project/assets/目录下,用来存放我们的材料。

2.2.4改变场景视图

一般来说,鼠标左或右键与shift、ctrl、alt键的组合可以执行以下操作:

拖动摄像机。

让摄像机绕着当前中心点旋转。

放大和缩小。

alt + 鼠标右键可以上、下、左、右旋转当前的视角。

当选中hand工具(在图标栏的左上方)时,鼠标右键移动视野,鼠标中键也一样。

在scene面板的右上方是scene view 小部件,把场景视图的朝向描绘成下图这样,表示的是:比如在perspective视图中,x轴延伸至左边,z轴延伸至右边。

《Unity虚拟现实开发实战》——第2章,第2.2节创建简单的透视图

可以通过点击相应的色锥来改变视图的方向,使我们可以直接正面观察任意一个轴。点击中间的小立方体可以将perspective视图变成orthographic(无变形)视图,如下图所示:

《Unity虚拟现实开发实战》——第2章,第2.2节创建简单的透视图

在继续下一步之前,我们先把场景视图与main camera的方向对齐。你可能会想起我说过的默认摄像机朝向:(0, 0, 0),是向下看z轴的正方向(从后向前)。步骤如下:

1.点击scene视图小部件中的红色x锥,把视图从back(后向)调整为前向。

2.再使用手形工具(或者鼠标中键)慢慢滑动视图。

现在,当选择main camera组件(在hierarchy面板中)时,可以看到scene视图大致上与camera preview朝向相同。(参考下一节的屏幕截图,在我们添加照片之后可以看到场景与预览看起来差不多)。

2.2.5添加照片

现在,我们添加一张照片作为我们透视图的背景。

在计算机图形学中,映射到物体上的图片叫作纹理。当物体在世界坐标系中以x,y,z表示时,纹理以u,v坐标表示(与像素一样)。我们会发现纹理和uv贴图存在缩放的问题,步骤如下:

1.通过菜单gameobject | 3d object | plane创建一个平面,命名为photoplane。

2.重置这个平面的变换值。在inspector面板中,找到transform面板右上方的齿轮,点击图标选择reset。

3.绕着z轴旋转90°(把transform组件的rotation的z值设置成-90)。这是负90,所以它是竖直的,垂直于地平面。

4.顺着y轴方向旋转90°,这样它就面向我们了。

5.将其移动到地平面的最后面,使其position的z=5,y=5(想想地平面的10×10个单位)。

6.使用windows资源管理器或mac的finder选择任意一张计算机中的图片,粘贴到这个photoplane上。(也可以用本书中的grand canyon.png图片。)

7.在project面板中,选择assets文件夹的根目录,选择菜单中的create | folder,重命名为textures。

8.拖动图片文件到assets/materials文件夹中,它应该会自动以纹理对象导入。或者,也可以在assets文件夹上点击鼠标右键,选择 import new asset...导入图片。

选择project面板中的图片textures,在inspector面板中检查其设置,如果原图为矩形,纹理会变成正方形的(比如2 048×2 048),看起来像压扁了。当把它映射到正方形的面上时也会变扁,步骤如下:

1.从project面板中拖动图片到photo plane(scene面板中)上。

哎呀!我这张图片向侧面旋转了。(你的呢?)

2.选中photoplane,把transform组件的rotation的x值设置成90°。

好了,它现在竖直了,但还是扁的。我们来修复它。检查图片的原始分辨率,看它的宽高比,我的grand canyon图片是2 576×1 932,当你用高除宽时,为0.75。

在unity中,设置photoplane的transform组件scale的z值为0.75。

把position的y值设置为3.75。

为什么是3.75?高是从10开始的。所以,我们缩放到7.5。物体的缩放比与其原始大小有关。所以,高的一半是3.75。我们想让photo plane的中心点在地平面以上3.75个单位。

我们已经设置了大小和位置,但是图片看起来褪色了,这是因为场景中模糊的光影响了它。你可能想保持这种效果,尤其是当你建构复杂的光照模型和材质时,但是现在,我们要把光去掉。

选中photoplane,注意照片的texture组件在inspector面板中有默认的shader组件的standard,将它改成unlit | texture。

现在我的看起来是这样了,你的应该也差不多:

《Unity虚拟现实开发实战》——第2章,第2.2节创建简单的透视图

看起来还不错吧,记得保存场景和项目。

2.2.6给地平面着色

如果想改变地平面的颜色,可以创建一个新的材质(在project面板中),命名为ground并拖到地平面上。然后,改变其albedo色。建议使用滴管(图标)从photo plane中拾取一种土色。

继续阅读