这两天在学习的时候看到了unity “星象台”室内场景的教程,感觉很漂亮,在这分享给大家。
       室外建筑模型主要是制作整体的建筑外观,它强调建筑模型的整体性,在模型结构上也偏向于以“大结构”为主的外观效果,而室内场景主要是制作和营造建筑的室内模型效果,它更加强调模型的结构性和真实性,不仅要求模型结构制作更加精细,同时对于模型的比例也有更高的要求。另外,室外建筑模型对于游戏中的玩家来说都显得十分高大,在游戏场景的实际运用中也多用于中景和远景,即便玩家站在建筑下面也只能看到建筑下层的部分,建筑的上层结构部分也成为等同于中景或远景的存在关系,正是由于这些原因建筑模型在制作的时候无论是模型面数和精细程度上都要求精简为主,以大效果取胜。而对于室内场景来说,在实际游戏环境中玩家始终与场景模型保持十分近的距离关系,场景中所有的模型结构都在玩家的视野距离之内,这要求场景中的模型比例必须要与玩家角色相匹配,在贴图的制作上要求结构绘制更加精细、复杂与真实。
 1. 场景模型的制作
       本章的实例内容是在Unity中制作一个封闭的室内场景,整体制作分为两大步,首先在3ds Max中制作场景模型,然后导入Unity引擎中进行整体场景的拼建。在3ds Max中首先要制作出场景的整体结构框架,然后通过场景装饰模型丰富场景细节,最后再来制作场景中需要用到的各种场景道具模型。下面我们开始本章场景模型的制作。

首先制作室内场景的基本墙体结构,在3ds Max视图中创建一个18边的基础圆柱体模型,塌陷为可编辑多边形,删除顶面和底面,然后将剩余所有圆柱侧面的法线反转,通过编辑多边形命令制作成上下两层的室内结构。


                                         制作墙围结构

       下一步我们制作室内的地面模型结构,选中刚刚制作的墙体模型,进入多边形Edge层级,选择下面的边缘,利用Cap命令制作出底面,然后进入多边形面层级,选择刚刚制作出的底面,通过Detach命令将其分离,这样就得到地面的基础模型。然后对其进行多边形编辑,在面层级下利用Inset命令逐级向内收缩,制作地面的分段层次结构,将中间的环形面利用Bevel命令向下挤出,让地面结构富有凹凸起伏变化,如下图所示。另外每一个环形地面结构要注意包边的制作,方便后期利用贴图来 丰富结构细节。


       接下来制作场景内部的立柱模型,在视图中创建8面的基础圆柱体模型,将其塌陷为可编辑的多边形,通过Connect连接切线、Extrude挤出以及倒角等命令制作出立柱下方的柱墩以及上方的立柱结构,如下图。图中左侧的立柱模型作为室内下层的支撑立柱,右侧为上层的支撑立柱。场景中的立柱结构一方面作为支撑结构,让整体建筑具有客观性和真实性,另一方面立柱作为装饰结构,用来增加和丰富场景细节。


                                制作立柱装饰结构

       将场景的墙体和地面模型对齐拼接到一起,然后将立柱模型与墙体的一条纵向边线对齐,进入3ds Max层级面板,将立柱的Pivot轴线点对齐到地面中心,通过旋转复制的方式快速制作出其他的立柱模型。


                                      复制立柱

       室内的整体框架模型制作完成后,接下来为模型添加贴图,墙面为四方连续的石砖贴图,立柱和横梁都为带有雕刻纹理的贴图。地面外围为木质贴图,中间为石砖贴图,内圈为带有雕刻纹理的石质贴图,最中心是一张带有完整图案的独立贴图。下图为室内场景整体贴图完成后的效果。


                                     最终的贴图效果

       下面我们制作室内的屋顶结构,在3ds Max视图中创建一个半球模型,将半球顶部的多边形面删除,上方再创建一个完整的半球模型,两个半球之间利用Tube模型结构相衔接。因为要作为室内结构,所以要将模型整体进行法线反转,这样室内屋顶的模型结构就制作完成了。


                                   制作屋顶模型结构

       然后为屋顶模型添加贴图,下层半球我们添加一张带有雕刻纹理的石砖四方连续贴图,如下图所示。顶层半球为其添加一张带有星座图案的完整独立贴图。


                                    穹顶的贴图效果

       除此以外还需要制作一些其他的场景道具模型,如水晶、地球仪、石像雕塑、书橱等(图1-8),这些场景道具模型我们会在Unity引擎编辑器中导入调用,在室内场景中进行整合摆放。


               水晶、地球仪、石像雕塑、书橱等场景道具模型

 2. 场景资源优化处理
       场景模型制作完成后,在正式导出为FBX文件前还需要对模型资源进行优化处理,因为在模型的制作过程中我们是利用完整的几何体来进行编辑制作的,当这些模型真正拼合到场景中时会由于室内场景的空间和结构发生相互遮挡,例如模型与室内场景地面相接的底部,或者模型靠近墙面的多边形面,这些多边形的面片结构会出现在玩家视角永远不可能看到的死角区域,我们需要对这些面片进行删除,以保证资源导入引擎后的优化显示。每个模型结构被删除的面片可能并不很多,但随着模型数量的增加,这些优化处理将显得极为必要。

首先选中室内场景上层立柱和横梁插入到墙壁内的多边形面片结构,可以利用顶视图来快速选取,如下图所示,我们发现全部被选择的多边形面有300余面,而这仅是对于场景上层结构的优化,所以累计来看删除废面是非常必要的一步。


                         利用顶视图快速选取


      利用同样的方法选择删除场景下层装饰立柱与横梁与墙面相交的多边形面并进行删除操作,如下图所示。


                              删除下层立柱和横梁的“废面”
       模型资源优化处理结束后,下面就可以将模型进行导出操作了。将模型从3ds Max中导出前需要对系统单位以及比例大小进行设置,打开3ds Max菜单栏Customize(自定义)菜单下的Units Setup选项,点击System Unit Setup按钮,将系统单位设置为Centimeters厘米。调整好模型比例后就可以对其进行导出了,将所有模型的Pivot轴心点归置到模型的中心位置,然后将模型位置调整到坐标系原点(0,0,0),将模型的名称与模型材质球名称相统一,然后选择File文件菜单下的Export选项,逐一选择需要导出的模型,利用Export Selected命令将模型导出为FBX格式文件。
 3. Unity3D模型的导入与设置

       场景资源导出完成后,我们启动Unity3D引擎编辑器,首先点击File菜单下的New Project创建新的游戏项目,在弹出的面板中设置项目文件夹的路径位置以及导入Unity预置资源。然后打开创建的项目文件夹,在Assets资源文件中创建Object文件夹,用来存放FBX模型以及贴图资源,如下图所示,Object文件夹下的Textures文件夹用来存放模型贴图,Materials文件夹是系统自动生成存放模型材质球的位置。


                                     创建项目文件夹

       将各种资源文件拷贝到Assets目录下后,我们就可以在Unity引擎的Project项目面板中进行查看和调用。接下来将室内场景模型以及各种场景道具模型用鼠标从项目面板拖拽到Unity场景视图中(图3-2)。由于室内场景都是在封闭的空间中,所以在利用Unity编辑器进行制作的时候无需创建Terrain地形,接下来的所有操作都是在制作好的室内场景模型中进行搭建和拼接。


                        将模型导入到Unity场景视图

       在默认状态下场景中没有任何的光源,这时场景中的模型都显得比较灰暗,我们需要创建一个基本光源,方便我们在视图中操作与查看。点击GameObject游戏对象菜单,在Create Other选项下创建一盏Point Light点光源,在Inspector面板中将光源的Range(范围)设置为80,将Intensity(强度)调大到5(图3-3)。这个光源并不是最终我们对场景的布光设置,只是为了简单的照亮场景。


                                     创建点光源照亮场景

       在场景模型整合摆放前需要对所有导入的场景模型进行材质Shader的设置,我们可以在项目面板中选择模型,然后在Inspector面板中对其材质和贴图参数进行设置,也可以在项目面板中直接选择模型对应的材质球进行设置。首先在项目面板Materials目录下选择望远镜模型的材质球,然后将Shader设置为Bumped Specular法线高光模式,设置其主色调和高光颜色,同时利用Shininess参数设置高光的反光区域范围,如下图所示。


                            设置望远镜材质Shader

       利用同样的方法对其他模型的Shader进行设置,将书橱和地球仪模型的材质球Shader设置为VertexLit顶点模式,分别设置材质的主色调、高光色、自发光颜色以及高光的反射范围。接下来将水晶模型的材质Shader设置为Self-Illumin/Bumped Diffuse(自发光法线贴图模式),如下图所示。将雕塑模型的材质Shader设置为Bumped Specular模式。由于最终整体场景的主光源为蓝绿色,所以这里在所有的Shader设置中我们尽量将高光反射颜色都设置为绿色。


                           设置水晶材质的Shader

       场景道具模型设置完毕后,接下来我们开始设置主体场景模型的材质Shader。将场景中所有雕刻装饰结构的贴图Shader都设置为Bumped Specular模式,例如立柱、横梁、大门、窗户模型等,法线高光模式可以强调出雕刻结构的纹理凹凸质感。将地面和墙体的石砖材质Shader设置为Bumped Diffuse模式。


                              设置室内模型结构的Shader

       将屋顶中央独立贴图的材质Shader设置为Self-Illumin/VertexLit模式,如下图所示,这里主要是为了配合后面的粒子特效制作。


                                     设置穹顶材质Shader
       所有Shader设置完成后,我们从项目面板的预置资源中调出第一人称角色控制器,并将其拖拽导入到室内场景中,方便整个场景的查看与浏览。这里需要注意的是,由于整个场景并没有制作碰撞盒,在运行游戏的时候角色控制器并不能与场景发生碰撞反应,所以需要对项目面板中场景模型进行设置,在Inspector面板中将Meshes选项下的Generate Colliders勾选,这样整个室内场景就生成了与自身网格模型一致的碰撞盒,角色控制器也能够在场景中正常真实的进行活动。

       接下来我们正式开始场景模型的摆放和整合,这里主要是将各种场景道具模型摆放到场景的各个位置,首先将水晶模型移动到室内屋顶的正中央,将其作为整个室内场景的虚拟主光源(主光源的视觉模型),如下图所示。


                           将水晶模型放置到屋顶正中
       将望远镜模型移动放置到地面平台中央,让镜筒延伸出墙面的窗口,如下图所示。将雕塑模型和书橱模型利用复制(Ctrl+D)的方式紧靠墙壁间隔错落摆放,如图所示。这样室内场景的整体拼接和整合就完成了。


                                     放置望远镜模型


                                      放置雕塑模型


                           将雕塑模型和书橱模型间隔错落摆放
 4. 场景光源、特效及输出设置
       基本场景搭建完成后,我们需要为场景添加光源和特效,来增强室内场景的视觉效果,烘托场景的整体氛围。室内场景与野外场景不同,在野外场景中无论何时都会有一盏方向光来模拟日光效果,而在室内场景中照亮环境的光源基本来自于室内,另外有少数情况是光线透过窗户由室外照射进室内。对于本章实例场景来说,整体为全封闭的场景结构,我们需要在场景中设定一盏主体光源用来照亮全局环境,另外需要设定若干次级光源来辅助照亮场景。

       我们将房间屋顶正中央的水晶作为场景的虚拟主光源,在它附近创建一盏Point Light点光源来照亮整个场景,这里可以直接利用之前为了照亮场景所创建的点光源来进行参数修改,将Range设置为60,光源颜色调为淡绿色,灯光强度设置为6,勾选Draw Halo可以形成光晕效果(图4-1)。将墙壁雕塑上的水晶作为次级虚拟光源,在其附近创建Point Light点光源来辅助照亮场景,将Range设置为10,强度设置为2.5(图4-2),利用复制的方式快速完成其他次级光源的制作。


                               创建并设置场景主光源


                               创建次级辅助光源

       然后我们需要对Unity场景指定一个天空盒子,虽然整个场景为封闭的室内环境,但从望远镜伸出的窗口可以看到室外环境。点击Edit菜单下的Render Settings选项,在Inspector面板中为Skybox Material添加预置资源中的MoonShine Skybox,如图所示。


                                   设置场景天空盒子

       接下在场景视图中创建一个Particle System粒子系统,Shape选择Cone,调整发射器的形状为圆饼状,激活Limit Velocity Over Time选项,将Speed参数设置为0。这样就形成了圆点粒子原地闪烁的效果,然后将粒子发射器移动到屋顶的半球形穹顶内,用来模拟星空效果。


                              将粒子系统放置到穹顶中央

       最后在场景中央水晶下方添加一束体积光特效,这样这个室内场景就制作完成了(图4-5)。我们可以将制作完成的游戏场景利用File菜单下的Building Settings命令进行导出,将其输出为各个平台下可独立运行的游戏程序。


                                      最终的场景效果