毕业设计(论文)-虚拟民族博物馆漫游系统.doc_第1页
毕业设计(论文)-虚拟民族博物馆漫游系统.doc_第2页
毕业设计(论文)-虚拟民族博物馆漫游系统.doc_第3页
毕业设计(论文)-虚拟民族博物馆漫游系统.doc_第4页
毕业设计(论文)-虚拟民族博物馆漫游系统.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章 作品说明 附录A:2013年度本科生毕业设计说明书虚拟民族博物馆漫游系统作品类别: 游戏开发 学 院: 电子信息工程学院 专 业: 数字媒体技术 年 级: 2009 级 主创人员: 导师(职称): 2013年6月2013年度本科生毕业设计说明书目 录 第一章 作品说明11.1 引言11.1.1 作品创作背景11.1.2作品来源21.2 策划文案21.3 作品概述21.3.1软件工具介绍21.3.2系统架构设计31.3.3系统功能概述31.4 本章小结4第二章 设计说明52.1 设计目的52.2 系统的主要功能52.3 模型需求52.4 模型制作规范62.4.1 Polygon建模原则62.4.2 模型的制作规范72.5 UV贴图需求72.6 Unity相关贴图技术82.6.1 Unity提供的着色器82.6.2 Unity内置贴图92.7 本章小结10第三章 制作说明113.1 Polygon建模的应用113.1.1 多边形基本几何体113.1.2 挤出工具113.1.3 平滑命令123.1.4 布尔运算133.1.5 结合和分离143.1.6 合并工具143.1.7 分割多边形工具和环形切割工具153.1.8 倒角工具153.1.9 软化边工具和硬化边工具163.2 Maya Polygon 贴图技术163.2.1 UV编辑器及其命令163.2.2 UV映射的分类173.2.3 UV的编辑183.2.4多边形UV的设置183.2.5 复杂的多边形与UV编辑器203.3 博物馆地形整体制作223.4模型的构建253.5 镜子效果273.6 虚拟漫游功能的实现293.6.1碰撞功能检测293.6.2 Unity3d中漫游功能的实现293.7基本功能的实现333.7.1俯视图功能的实现333.7.2 弹框GUI的设计343.7.3弹出屏幕功能的实现363.8 Unity运行测试393.9 本章小结40第四章 结 论41第一章 作品说明第一章 作品说明1.1 引言随着虚拟现实技术的发展,利用虚拟现实技术构建网络虚拟环境给人们带来了一种全新的体验,具有很强的趣味性、交互性和沉浸性。虚拟漫游系统的实现不仅为大众提供了一种全新的旅游方式,而且在宣传方面也摆脱了传统平面媒体形式单调、不能与观众产生可交互式操作的缺点。并且通过虚拟现实技术,可以将文物的展示、保护提高到一个新的水平。本系统以3D为主要技术,构建一个虚拟漫游平台,用高度仿真的3D场景为用户带去完美的体验,同时为景点开创一种新的营销渠道,从而增强其在旅游业中的竞争力和知名度。用户可以全面的,完善的,可靠的,认知景点信息。还可以为想去实地旅游的游客提供预先游览景点风光,提供旅游信息服务和游客旅游路线策划,从而实现为游客提供个性化的导游服务。现如今,以3D为主要技术,以旅游为核心集休闲、娱乐、商务于一体的新型体验模式即将应运而生了。况且未来是一个体验营销的社会,谁满足了消费者的终极体验,谁将赢得未来市场。而在环境刚成熟的中国此时正是进入的黄金期,早一步或者晚一步都会带来巨大的损失。 1.1.1 作品创作背景国务院出台的关于推进海南国际旅游岛建设发展的若干意见指出,要加快发展文化体育及会展产业。加快发展文化产业,引进创意产业人才,大力发展文化创意、影视制作、演艺娱乐、文化会展和动漫游戏等各类文化产业,积极培育具有海南地域和民族特色的文化产业群。建设国际旅游岛是利国利民的好事,不仅仅为了海南的经济社会发展,也是为了海南人民的富裕安康。积极发展服务型经济、开放型经济、生态型经济,形成以旅游业为龙头、现代服务业为主导的特色经济结构;着力提高旅游业发展质量,打造具有海南特色、达到国际先进水平的旅游产业体系;注重保障和改善民生,大力发展社会事业,加快推进城乡和区域协调发展,逐步将海南建设成为生态环境优美、文化魅力独特、社会文明祥和的开放之岛、绿色之岛、文明之岛、和谐之岛。海南以其国内独特的旅游资源及舒适的环境,在吸引休闲度假旅游方面有独特的优势。既是机遇也是挑战,许多新兴产业孕育而生。致力于打造具有国内最大的虚拟旅游平台,为更多的人群提供良好的虚拟平台,以全新的认知方式了解旅游景点的相关信息,更好的传播当地的民族特色文化和人文环境。1.1.2作品来源传统的旅游产业如果与虚拟现实技术结合将会具有明显的优势。虚拟现实技术会带给大众一种全新的体验名胜古迹的方式。相较于传统的宣传手段,如报纸、杂志等平面媒体,虚拟旅游系统是以三维可视化的方式再现景区风景,相较于电视网络等数字媒体,虚拟旅游系统又具有可交互操作的优势。以这种方式作为景区的宣传手段,可以使那些潜在的游客直观地了解该景区的旅游资源、配套设施等情况,更方便地为游客提供服务。1.2 策划文案虚拟民族博物馆系统旨在提供一个景区的三维展示,向用户展示白沙河谷博物馆的地区的地形地貌、景点分布、基础服务设施分布等信息,在该系统中,用户在三维场景中可以以第一人称视角漫游,查看博物馆里面藏品以及建筑物的属性。系统以Maya 作为三维建模工具,以 Unity3d作为三维展示平台,其他功能通过编程开发实现,包括俯视图的制作、点击查看藏品详情等。1.3 作品概述 1.3.1软件工具介绍 本项目的开发工具主要是Unity3D和Maya2011,其中 Maya 2011主要用于建筑物、藏品等各种模型的制作与贴图,Unity3D软件则用于搭建博物馆的地形,漫游等功能的实现;其次,还用 Photoshop 辅助开发,其作用主要是制作模型贴图; Unity 3D:Unity3D 是全面集成的开发引擎,具有丰富的开包即用功能,可以用来创建游戏和其他 3D 互动内容。你可以使用 Unity3D 将你的艺术和素材配置到场景和环境中;添加物理性能。Maya 2011:它集成了最先进的动画及数字效果技术,不仅包括一般三维和视觉效果制作功能,还与最先进的建模、数字化布料模拟、毛发渲染、运动匹配技术相结合,已然成为当今市场上用来进行数字和三维制作工具的首选解决方案。Photoshop:Adobe 公司旗下最为出名的图像处理软件之一,集图像扫面、编辑修改、图像制作、广告创意,图像输入与输出于一体的图形图像处理软件,深受广大平面设计人员和电脑美术爱好者的喜爱。1.3.2系统架构设计系统架构分为两部分,即逻辑层和应用层(或称为用户表现层、界面层)。系统的业务逻辑是通过在 Unity3d 引擎中编写脚本代码控制实现的。脚本功能可以分为以下几类:行为控制脚本,例如控制摄像机在三维空间中的运动;逻辑控制脚本,例如对数据库的连接、查询等操作;各种特效脚本,例如公告板技术(Billboard)的实现;画面优化脚本,例如控制淡入淡出效果的 Fade.cs 脚本;UI 控制脚本,例如在屏幕中绘制各种 GUI 控件的脚本。界面层是用户与系统实现交互的接口,界面层与逻辑层的分离是为了便于系统功能的修改和扩充,提高代码的重用性。1.3.3系统功能概述白沙河谷博物馆虚拟漫游系统通过虚拟现实技术,能够在计算机中再现景区风景,让游客通过计算机领略到博物馆的独特魅力。系统功能要求如下:1) 第一人称漫游:游客以第一人称视角在博物馆各景点进行三维全景漫游,可以浏览景区内的各景点的三维仿真场景。功能设计描述如表1-1所示。表1-1 第一人称漫游设计描述表第一人称漫游功能模型博物馆地形模型以及物品模型。用户操作用户使用鼠标实现控制摄像机视野,通过键盘的WASD控制第一人称控制器的运动。脚本FPSInputController.cs:实现键盘控制方向功能。 MouseLook.cs:实现鼠标控制视野功能。 2) 俯视图功能:该功能可以使用户随时了解自己的所处位置。功能设计如下表1-2所示。表1-2 俯视图功能设计描述表俯视图功能模型博物馆地形模型。脚本camera.cs:通过控制摄像机并实时反映当前的大概位置。3) 点击查询藏品详细信息功能:当人物靠近藏品一定的距离内,会弹出一个按钮,单击按钮可以打开GUI界面,查看藏品的具体信息。功能设计如下表1-3所示。表1-3 藏品详细信息功能描述表藏品详细信息功能模型藏品模型。图形界面点击按钮的制作以及弹出图形界面的制作。用户操作点击按钮弹出藏品的具体信息。 脚本GUI_WaypointStore.cs以及 WaypointBehavior.cs实现用户点击查看。1.4 本章小结本章阐述了该作品的创作背景、作品最终实现的方案以及虚拟博物馆系统总体设计,介绍了系统的整体设计思路,主要功能模块的划分。41第二章 设计说明第二章 设计说明2.1 设计目的利用虚拟现实技术,结合网络技术,可以将文物的展示、保护提高到一个新的水平。同时利用所研发的场景为游客提供提前旅游的服务,也为众多没机会旅游的人们前来虚拟体验,激发游客对景区进行实地旅游的兴趣,同时也为景区做宣传。我们为游客提供的服务功能主要是让游客可以查看博物馆藏品的具体详细,了解海南的文化,宣传海南文化。2.2 系统的主要功能1)第一人称漫游功能2)俯视图功能3)弹框GUI的功能2.3 模型需求根据虚拟博物馆的设计需求,整理出需要制作的博物馆建筑模型(如图2-1): 博物馆主体建筑 博物馆大门图 2-1 博物馆整体设计需要制作的博物馆藏品模型主要以乐东白沙河谷生态园内收藏的藏品为参照,从中挑选出比较有民族特色和代表性的藏品制作模型。需要制作的藏品模型分为四类:(1) 生活生产类,包括古木弓、完井木制织布机及各式瓷器等生产生活工器具类文化遗存;(2) 铜铁器具类,包括汉代青铜蛙锣、战国绳纹青铜璧、“同治年”款“世代永昌”字中铁钟、清代铁质大研药磨、药轮等铜器铁器类文化遗存;(3) 文化艺术类,包括男根石祖、南海神针、木制窗花等图腾崇拜类和民间艺术类文化遗存;(4) 纺织类,包括清代龙凤寿字龙被挂锦和明代织绣龙凤麟呈祥图龙被。2.4 模型制作规范2.4.1 Polygon建模原则在多边形建模过程中,要遵循一定的建模规律,一个包含着很多错误的模型会给后续的生产带来不必要的麻烦,影响工作流程的正常运行。(1) Planar 和 non-planar Polygon(平面多边形和非平面多边形)一个多变形的所有顶点都位于同一个平面上,这样的多边形就称为平面多边形。如果一个多边形有三个以上的顶点,并且这些顶点不在同一个平面上,那个这样的多边形就是非平面多边形。创建多边形时要尽量让多边形的所有顶点都位于同一个平面上,不要产生过大的弯曲变形,因为非平面多边形可能会在渲染时带来闪动等问题。(2) 有效和无效的多边形几何体在Maya中,有效的多边形几何体可具有“规则”拓扑或“不规则”拓扑。一个边或一个顶点不是有效的几何体。如果合理地创建了多边形模型,那么多边形面的数量会比较少,并且执行一些操作(比如在模型上贴图)时会非常方便快捷。要避免创建出没有面的多边形边,另外,要尽量使多边形面的法线相同,虽然具有不同法线方向的面在技术上是很有用的,但是在实施纹理渲染时会出现意外的情况。(3) 尽量避免N边形四边形是多边形建模中最适合的多边形,三角形在必要时也可以使用,但是要尽量避免使用超过四条边的多边形。N边形在平滑时会出现一些奇怪的形状,在渲染时经常会造成纹理扭曲等问题。2.4.2 模型的制作规范为了保证模型后期贴图没有问题和在Unity中能正常使用,模型应按照以下制作规范制作:(1) 制作的模型不允许有大于四边的面出现;(2) 模型应该避免空点的出现,所谓空点就是说在模型上只有点而没有面;(3) 避免多余重合的面,这种情况也通常是因为不小心复制了某个面造成的;(4) 避免开放的几何体,所谓开放的几何体就是指没有闭合的多边形,比如只有5个面的BOX等;(5) 过于尖锐的点,比如长矛的尖端,尖端处尽量不要只用一个点,最好在尖端处用一个面来表示;(6) 物体之间尽量不要穿插,也就是说尽量不要有一个物体插入另一个物体的情况出现,把各个部件尽量做成一个物体会提高运算和加载速度;(7) 为了保证Unity系统能流畅运行,单个模型的面最好不超过2000个(形状较为复杂的物体可酌情考虑增加);2.5 UV贴图需求UV编辑的最终目的是为使用2D纹理服务的,如果在编辑纹理的时候就给予一个标准的2D纹理用于UV的正确与否,将有利于UV编辑的快速与准确,于是我们经常会用到已经准备好的UV测试贴图,通file节点作为模型的纹理,程序纹理当中的棋盘格也经常被用作测试,看纹理在模型表面分部是否合理均匀,但是在编辑过程中最好使用事先准备好的图片而非程序纹理。在进行UV贴图之前,首先是要对民族藏品的实体进行观察,最好是寻找到跟现实物体一样质感的纹理素材。 纹理和质感图片收集在没有开始前,要对物体观察后进行素材收集。一个好的模型在贴了与他现实质感纹理一样的贴图时,那么它的仿真效果就更佳了。所以,素材收集是一个非常重要的步骤。 素材处理不是每个素材从网上或是现实中采集到来后都能直接用到模型上。要做到与UV上的点相统一,特别是在给不规则的多边形贴图时,更加要在Photoshop中进行处理后才能放到UV编辑器中处理。 连贯性为了达到连贯性,也就是所说的无缝贴图。那么在展开UV的时候就更加用心,必须导出到Photoshop里观察,并且要不同程度的相互导出导入不断调整。2.6 Unity相关贴图技术2.6.1 Unity提供的着色器Unity带有一个很大的,预先创建的着色器库,绝大部分着色器都按照种类来划分:Normal(普通)、Transparent(透明)、Nature(自然)、Self-Illuminated(自发光)、Reflective(反射)以及Lightmapped(光照图),这里仅仅列出一些分类。Unity着色器可以为物体直接调节些高光颜色、高光强度等的,同样基于兰伯特类型,如图2-2。图2-2 Unity着色器2.6.2 Unity内置贴图贴图可以用来描述高度、透明度、反射、细节以及很多其他的辅助属性。有时候,一张贴图可以用来一次性提供多个细节,但是通常情况下你需要创建多张贴图来为一个对象着色。1)凹凸贴图凹凸贴图是用来定义对象高度或深度的灰度图象。该贴图上比较暗的区域看上去好像缩在对象里面,贴图上较亮的区域标记了该对象应该抬高或是突出的部位。如果对象只是一个球体,通过使用一个带有凹凸通道的着色器,使得这个球体看上去好像被雕刻过一样,带有裂缝和凸起了,凹凸贴图就是其散射的颜色贴图的灰度版本,如图2-3。图2-3 凹凸贴图当导入一张将要用做凹凸贴图的贴图时,在导入设置上选择Generate BumpMap(生成凹凸贴图)复选框实际上会让Unity为贴图创建一张法线贴图(normal map)。法线贴图是使用RGB而不是灰度来编码的图像,它使用颜色数据来定义对象上的凹凸和褶皱。根据创建法线贴图的方法,它们通常可以使得结果比使用普通的灰度凹凸贴图更好看,生成一张法线贴图时,尝试改变Bumpiness(凹凸度)滑块来增加其效果。2)高光和发光贴图高光贴图定义了对象上哪些部分是有光泽的而哪些部分不是。高光信息通常作为灰度图象保存在贴图的alpha通道里,而不是像凹凸贴图一样是一张独立的贴图。使用白色来绘制的部分是有光泽的,使用黑色部分来绘制的部分则没有。使用一张贴图来定义对象的不同部分而不是把一个高光值“批发”给整个对象,这有助于让资源变得更为有趣。虽然一个藏品的中部和上部可能是带有光泽的,但是让藏品的背光部分也变得有光泽就比较奇怪了。可以简单地把对应于背光部分的贴图绘制为黑色,从而避免任何高光。3)细节贴图细节贴图是另一种特殊贴图,它们仅仅由散射细节着色器所使用。细节贴图就好像是一张反转的mipmap,因为当你靠近一个对象时,这个特别的着色器才会开始起作用。细节贴图用来为对象增加一些小的细节,例如,陶罐上沾染的泥土或是笠帽上的草编。如果摄像机离这个对象很远,会显示普通的散射贴图。然而,当摄像机接近对象时,细节贴图会慢慢地覆盖在原始贴图之上以显示,这可以用一个相对较低的开销增加额外的趣味。细节贴图通常是灰度的,并且必须是在各个方向都完全平铺的,否则你会看到缝隙。贴图中较暗的值会让散射贴图变得更暗,较亮的值会让这个对象变得更亮。当导入一张细节贴图时,要确保启用其Fade Out(淡出)属性,并且设置想要让它起作用的mipmap级别。2.7 本章小结具体介绍虚拟民族博物馆系统需要基本功能,模型的需求,以及模型的制作规范,其中还对UV贴图进行了论述为创作该系统做了充足的准备。第三章 制作说明第三章 制作说明 3.1 Polygon建模的应用3.1.1 多边形基本几何体在Maya Polygon建模中,往往是从一个基本几何体开始的,再通过分割、挤压、合并等方法对几何体的基本元素进行编辑、修改和细化,从而得到所需的复杂模型。以模型“男根石祖”的制作为例,先创建和实物相近的基本几何体。 图 3-1男根石祖实物图 图3-2创建圆柱体通过增加圆柱体高的线段数,调整线段和点的分布,制作出男根石祖模型的大致形状。图3-3男根石祖模型小样3.1.2 挤出工具挤出(Extrude)工具是多边形建模中最常用的工具之一。当物体上需要增加新的面时,很多情况下都是用挤出命令从原物体表面长出新的面。可以在物体上选择不同的元素挤出,当切换到不同元素显示时,挤出工具的属性也会变换到对应的设置。如下图,模型南海神针凹槽部分的制作中,就是使用挤出工具挤压出凹槽的效果。图3-4挤压前图3-5 Extrude工具挤压出凹槽3.1.3 平滑命令在多边形建模中,由于多边形的拓扑结构比较灵活,在制作过程中可以随意改变多边形的形态,但是在使用多边形工具创建的多边形模型也有局限性,即模型的显示精度较低。使用平滑(Smooth)命令可以对模型的表面进行再次细分,使模型的表面看起来更光滑。平滑命令有两种平滑方式:Exponentially(指数)模式和Linear(线性)模式。使用指数模式细分后,模型全部为四边形;而使用线性模式细分后,模型有些部分会产生三角面。线性细分的平滑方法可以更好地在面上控制细分的数量,线性细分特别设置了局部细分的属性。如果多边形物体的表面是四边以上的面,平滑后将产生不平衡的效果,会出现三角面。以之前做的男根石祖模型为例,之前的模型看起来还是会有一些棱角,使用平滑命令可以让模型变得更加光滑细腻。由于模型的顶部和底部是三角面,为了避免出现多余的面,这里使用指数模式对模型进行平滑。 图3-6 平滑前 图3-7 平滑后3.1.4 布尔运算Maya的布尔运算(Booleans)可以将两个表面相交的物体进行Union(并集)、Difference(差集)及Intersection(交集)三种方式的运算。在清代“世代永昌”铁钟模型的制作中,需要将铁钟和铁钟上方的装饰合并,使用布尔运算的交集运算将两个模型合并看看效果。 图3-8合并前 图3-9合并后布尔运算对两个物体的拓扑结构要求比较严格,运算后要对新模型的拓扑结构仔细检查整理,避免出现物体消失等运算上的错误,因此在实际模型的制作中尽量少使用此命令。3.1.5 结合和分离结合(Combine)命令可以将选择的多个多边形物体合并为一个单独的物体,将多边形转换成物体选择模式。合并后的物体看似一个物体,其实还是由两部分组成。分离(Separate)命令可以把多边形物体不连接的面分离为单独的物体,分离操作只对不共享边界边的物体有效。在上一个模型的制作中,我发现使用布尔运算合并后的物体,在两个物体的交接面处产生了不规则的多边形。含有这样不规则的边数大于四边形的面的模型是不符合模型的制作规范的,所以我改用Combine命令将两个模型合并起来。如图3-10。图 3-10 使用布尔运算合并后的模型产生了变数大于四边形的不规则面由于使用Combine命令合并起来的物体还是由两部分组成,所以不存在产生不规则N边形的问题。使用Combine命令合并起来的物体还可以由Separate命令重新分离,方便模型的修改。3.1.6 合并工具合并(Merge)工具可以在指定的距离范围内合并选择的多边形物体的边界边或点,合并的边或点必须在同一物体上。在模型南海神针的制作过程中,先制作出物体的一半,制作完成后镜像复制出物体的另一半,然后把物体的两部分Combine成一个整体,再使用合并工具将物体中的点和线合并。分别如图3-11和图3-12。 图3-11 先制作出模型的一半 图3-12 复制另一半后合并使用合并工具可以合并多余的点和线,使Combine后的物体真正成为一个整体。合并点工具(Merge Vertex Tool)是Merge工具的另一个版本,此工具需要手动选择合并的点,将两个点合并在一起。3.1.7 分割多边形工具和环形切割工具分割多边形工具(Split Polygon Tool)也是最常用的的建模工具之一,它可以在多边形物体上创建新的点或者边。图3-13旁边的边被一分为二使用分割多边形工具添加边的时候,要注意处理由此产生的不规则面。图3-13中分割多边形后,旁边的四边形实际上变成了五边形。这样的情况可以使用环形切割工具(Insert Edge Loop Tool)添加边,此命令可以在多边形物体的连续四边面上添加环形相连的分割线,如图3-14。图3-14使用Insert Edge Loop Tool添加环形边3.1.8 倒角工具在创建多边形物体时经常需要把一直角边,倒角(Bevel)工具可以使坚硬的边缘变得细滑。在渲染时有倒角的转折边缘会产生很好的光影效果,能够增加模型的渲染细节。相对于Smooth命令将模型细分,倒角工具更擅长对模型的局部细化,在提升模型质量时也能很好地控制模型的面的数量。3.1.9 软化边工具和硬化边工具在模型的制作中,模型质量和模型的面数成正比,想要控制模型的大小,就会牺牲模型的精细度。相对于将模型细分和倒角工具,使用软化边工具(Soft Edge)和硬化边工具(Harden Edge)调整法线的方向从而使多边形物体的外观呈现一种软化的效果是一个不错的选择,如图3-15、3-16。 图3-15 硬化边显示图 图3-16 软化边显示3.2 Maya Polygon 贴图技术3.2.1 UV编辑器及其命令如果需要进行多边形的UV的映射,首先需要切换到Polygon(多边形)菜单模式,在该模式下有两个命令菜单栏可对UV进行映射和编辑:一个是Crete UVs菜单栏,菜单栏中的所有命令都是用来创建UV映射;一个是Edit UVs菜单栏,菜单栏中的所有命令都是用来对UV进行编辑的,见图3-17。图3-17 UV编辑器3.2.2 UV映射的分类在多边形UV映射中,有多种UV映射方式供选择。1) Planar Mapping(平面映射)2) Cylindrical Mappong(圆柱形映射)3) Spherical Mappong(球形映射)4) Automatic Mapping(自动映射)5) Create UVs Based On Camera(摄像机UV映射)6) Best Plane Texturing Tool (最佳平面纹理工具映射)7) Assign Shader to Each Projection(赋予映射物体一个材质)在各类的映射类型中,平面映射的应用较广泛及简易,只需理解该平面映射属性面板(见图3-18、图3-19、图3-20)中的参数设置,就可以很好的得到良好的UV映射效果。 图3-18 create UVs 图3-19 Edit UVs图3-20 UV映射效果3.2.3 UV的编辑在UV映射后,还需要对UV进行编辑,以便达到制作要求。UV编辑工作是在UV编辑器中进行的,选择WindowUV Texture Editor(UV纹理编辑器),这样就能打开UV编辑器。如图3-21。图3-21 UV编辑器与打开命令3.2.4多边形UV的设置3D虚拟民族博物馆不乏多边形藏品模型,多边形不像NURBS具有可以用于指定表面上点的固有的2D坐标,这样一来2D纹理可能在多边形表面不知如何去定位与放置,唯一的解决方法是进行UV映射,达到这个目的是通过在UV Texture Editor中移动、编辑、旋转等一系列方法让纹理在表面的放置有不同的放置。图3-22 陶罐中的多边形如图3-22所示,罐子分为内外两层,并不是表面看上去的只有一层覆盖。这种也是典型的多边形UV。在展开后,UV分布陶罐口、内外身、脚等。图3-23陶罐口UV图从图3-23可以看出,这是一个陶罐口的UV图。形状并不是和模型的形状一致,常理来说,这个UV应该会被认为是椭圆状,而从UV图来看,这是一个三角状起伏的形状。另一方面,从面的角度讲,这是一个属于比较多面,但是比较平均的模型。这样的模型有个好处就是UV分配均匀,在贴图的过程和素材处理过程中比较方便。3.2.5 复杂的多边形与UV编辑器对于相对复杂和多个组合的多边形,那么他的UV图在UV编辑器里会相对比较大。如图3-24和图3-25图3-24纺织机图3-25纺织机UV图从图3-25可以看出,UV编辑器中的可用范围不只是一个小矩形框;当图形偏大,或是组合过多,放到其他三个矩形框里一样可以对其进行贴图。图片和右上角的矩形框里的素材效果一样。为了达到好的效果,让藏品模型的贴图看上去像纯天然。那么,就要在处理素材的时候就要考虑到。诸如瓶口或是身体中间重合部分:很多贴图如圆状的话,就要考虑两边重合在一起时候纹理是否能够衔接得上。如图3-26图 3-26 圆环纹理处理图左右两边的黑色斑点会在上模型身体的某一部分相遇,那么就要考虑到这两个斑点纹理重合的时候是否能够合理拼接。修改前后的效果如图3-27、图3-28。图3-27 改前的纹理效果图 3-28改后的纹理效果在处理过程中,必须得用Photoshop进行明暗调节。利用图彰等工具,进行模仿拼合。当然,这样完成并不是就能成功达到想要的效果。多次在Maya和PS尝试后,才可以得到令人满意的结果。如图3-29。图 3-29在编辑器里的UV面 3.3 博物馆地形整体制作Unity3d 引擎内置了一个功能十分完善的地形编辑工具Terrain Editor,开发人员利用它可以方便快捷的制作出各种复杂的地形。1) 创建一个新的地形(选择TerrainCreate Terrain)并且把它的分辨率设置为800米长,800米宽(在TerrainSet Resolution 对话框中设置)。参数如图3-30所示。图3-30 地形参数设置图2) 使用笔刷来绘制出地形地貌这一方法主要是选中地形们使用Inspector视图中的Terrain组件中的工具,前3个按钮是提高和降低高度、绘制目标高度以及平滑高度,第4个按钮是绘制地形贴图,Brushes组件是高度和贴图笔刷,Settings 组件主要是设置笔刷大小;结合使用这些工具,能可以很容易的绘制出各种地形。如图3-31所示。图3-31 地形在Inspector视图中的属性3) 绘制贴图在地形上绘制颜色的方式就和绘制高度一样,可以把平铺的贴图导入到工具里面,然后使用相同的笔刷和控件在Sence视图中直接把贴图给绘制到地形上,Unity 本身 Standard Assets(标准资源)包里面就包含了4张可用的贴图;在绘制贴图之前,要确定在 Hierarchy 视图上选中这个地形,并且在Inspector视图中选中“绘制地形贴图”按钮,其中,Brushes 组件是选择笔刷的类型,Textures 组件是已经上传的贴图,而 Settings 里面则是对笔刷进行设置,如图3-32所示。图3-32 绘制地形贴图的工具栏4) 草地的绘制Standard Assets包包含一张可用的草贴图,位于Standard AssetsTerrain Grass下,单击Edit Details(编辑细节)按钮并选择Add Grass Texture(添加草贴图),以弹出Add Grass Texture对话框(参见图3-33)。从下拉框中选择Grass资源,或者把Grass资源从Project视图拖拽到Detail Texture(细节贴图)字段中。图3-33 Add Grass Texture对话框 Detail Texture(细节贴图):这是草所使用的贴图。这个贴图文件必须具有alpha通道来定义草的每一片叶子。 Min With(最小宽度):每张独立放置的草贴图的最小宽度。 Max With(最大宽度):每张独立放置的草贴图的最大宽度。 Min Height(最小高度):每张独立放置的草贴图的最小高度。 Max Height(最大高度):每张独立放置的草贴图的最大高度。 Noise Spread(散步噪声):一簇草的大小。 Healthy Color(健康色):使用这种颜色来为一簇草中央的草进行染色。 Dry Color(干涸色):使用这种颜色来为一簇草边缘的草进行染色。 Billboard(公告牌):使这个贴图总是向着摄像机旋转。对以上参数进行设置,利用笔刷绘制,最终运行效果如图3-34所示。图3-34 绘制草地5) 最终完成的博物馆地形如图3-35所示:图3-35 制作完成的博物馆地形3.4模型的构建将Maya导出的.fbx文件夹直接放入项目文件夹下的Assets文件夹下,系统会自动将文件信息导入Unity内部,包括模型、贴图、材质球以及动画等信息,然后从Project视图中把模型拖入Scene场景视图中,并使用缩放、旋转、移动工具将其摆放在正确的位置上,点击模型,在Inspector视图中,对参数进行设计,以博物馆模型为例,如图3-36所示。图3-36博物馆模型导入设置 Scale Factor(缩放系数):使用这个字段在导入资源时改变其大小。 Mech Compression(网格压缩):选择Off(关闭)、Low(低)、Medium(中)或是Hight(高),来决定在导入时是否对网格进行压缩以及进行多达的压缩,这样有助于节约内存。 Generate Colliders(生成碰撞体):选中这个复选框,可以让Unity自动为对象生成一个网格碰撞体。 Swap UVs(交换UV):有时当导入一个网格时,着色器可能会使用错误的UV通道。 Split Tangents(分离切线):如果注意到模型在引擎中显示时看到UV缝隙,可以选中这个复选框。博物馆模型在Unity中最终效果如图3-37所示。图3-37 博物馆模型效果3.5 镜子效果1)通过AssetsImport New Assets对所需的资源导入到Project视图中(或者通过拖拉方式导入),如图3-38所示。图3-38 资源导入菜单2)通过GameObjectCreate otherPlane,在Hierarchy视图中选中Plane,按F2重新命名为Mirror。在Project视图中右击创建一个Shader,并对其进行修改,如图3-39所示。右击创建一个Material,点击New Material,在Inspector视图中选择着色器,如图3-40所示。图3-39 Shader属性值图3-40 着色器菜单3)把导入的脚本MirrorReflection.cs拖放给对象Mirror,并且对对象Mirror赋予New Material,对其调整位置、大小,运行效果如图3-41所示。图3-41 镜子效果3.6 虚拟漫游功能的实现3.6.1碰撞功能检测碰撞检测(Collision Detection)也称为干涉检测或者接触检测,是基于现实生活中一个普遍存在的事实:两个不可穿透的对象不能共享相同的空间区域。碰撞检测作为虚拟现实系统中的一个关键组成部分,主要的任务是判断物体模型之间、模型与场景之间是否发生了碰撞,以及给出碰撞位置、穿刺深度等信息。碰撞检测是构建交互式虚拟旅游系统的一个重要部分,它可以使虚拟人物以更自然的方式与三维场景对象进行交互。如果没有碰撞检测,当虚拟人物在三维场景中漫游或者行走时,会“穿墙而过”,而不会产生碰撞效果,这在现实中是不存在的。因此三维场景中必须能实时、精确地判断场景中物体之间是否发生了碰撞。如图3-42所示,当以第一人称靠近树木或是建筑物时,将会被挡住。图3-42 碰撞体检测图3.6.2 Unity3d中漫游功能的实现实现三维场景中的首要问题就是任何实现虚拟人物与地面的碰撞检测,以避免人物穿越地面。Unity3d 引擎为用户提供了四种基于物体空间的层次包围盒,分别是:BoxCollider、SphereCollider、MeshCollider、WheelCollider,引擎中包围盒的边框是以绿色实线表示,图3-43(a)(b)(c)(d)分别展示了一个Cube 物体被四种包围盒环绕的效果。通过为模型附加不同的包围盒类型,可以实现不同精度的碰撞检测。在漫游功能中,第一人称控制器对象使用了 SphereCollider 包围盒,从而实现了与地面的碰撞,避免了“穿地而过”,如图3-44所示。(a) BoxCollider(b)SphereCollider(c) MeshCollider(d) WheelCollider图3-43 Cube物体使用不同包围盒图3-44 第一人称的SphereCollider 包围盒本系统采用第一人称主视角的方式进行漫游,给观赏者更强的代入感。利用FirstPersonController作为用户的控制对象。在工程面板中显示出该对象由四个组件组成:Transform、FPSInputController(script)、CharacterController、MouseLook(script)。此外,在Unity3d 中,是以层次关系来组织相关物体的,在工程面板中,如图3-45所示。可以看到FirstPersonController 中包含了两个子物体Graphics和Main Camera。图3-45 第一人称控制器结构及组件 其中,Main Camera 是一个重要的组件,它相当于用户的视点,不仅起到了展示场景的作用,并且通过调节其各个属性,可以改变相机的渲染效果,下面将详细说明 MainCamera 的各个属性,如表3-1所示。表3-1 Main Camera参数说明Main Camera 各属性值Clear Flags 通常该值被设定默认,即“skybox”,该值将允许摄像机对天空进行渲染。Back Ground Color 当 skybox 没有给定材质时,场景的背景色将会被渲染为指定的颜色。Normalized View Port Rect 当使用多架相机时,该值用来设定同相机的视野大小及位置。 Field of view 该值用来调节摄像机的视野角度,通常设定为60度。 Projection 投影方式,该值可以被设定为Orthographic和perspective。Depth 该值表示摄像机的级别,该值大的,则将先被渲染出来。Culling Mask该值指定了像机的渲染图层。对以上参数进行设置,并调整第一人称控制器在场景中的位置,如图3-46 所示,点击测试,会看到控制器和地面模型发生碰撞后,站立在场景中,即可进行漫游操作。图3-46 漫游功能的实现效果 3.7基本功能的实现3.7.1俯视图功能的实现俯视图功能主要实现了在漫游中实时显示并更新用户当前大概位置的功能。实现功能过程如下:在场景中多架设一架摄像机(Camera),文件结构如图3-47所示: 图3-47 创建的Camera组织结构1) 创建脚本camera.cs。拖放给Camera,然后把First Person Controller拖放给Target,如图3-48所示: 图3-48 拖放第一人称给Target代码如下:var target:Transform;var damping = 6.0;var smooth = true;function LateUpdate() if(target) if(smooth) var rotation = Quaternion.LookRotation(target.position-transform.position); transform.rotation = Quaternion.Slerp(transform.rotation,rotation,Time.deltaTime*damping); else transform.LookAt(target); transform.position.y = target.position.y + 90; transform.position.x = target.position.x; transform.position.z = target.position.z; function Start() if(Rigidbody) rigidbody.freezeRotation = true; 2) 最终运行结果如图3-49所示:图3-49俯视图运行效果(4-49右下小图) 3.7.2 弹框GUI的设计1)创建GUISkin在project视图中,右击并且选择CreateGUI Skin。把这个新的皮肤放在一个名为GUI的文件夹中,点击可以查看GUI所有主要控件以及一些其他的GUI。每个控件列表都是其自身的GUIStyle定义。如图3-50所示。图3-50 一个默认的GUISkin如果展开这些控件中的任何一个,例如Button,我们可以为按钮的所有属性都编辑和创建新的默认值,例如,其悬停(hover)图片,边界,字体或是普通视图。2)Button的设计展开刚刚创建 的GUISkin对象的Button对象,在Button风格中展开这个按钮的Normal、Hover、Action定义。把文件夹中的ShortButton_up图片拖拽(或是从下拉菜单中选择)到Normal Background字段中。使用ShortButton_Hovet贴图来填充Hover和Active Background字段。当用户单击或是把鼠标选题在按钮上时,这张贴图会让按钮看上去有点“发光”,通过单击彩色栏把按钮所有的文本颜色都设置为黑色或暗色。在列表下方,把Alignment设置修改为MiddleCenter。为按钮制作的GUIStyle,如图3-51所示。图3-51 完成的GUIStyle3.7.3弹出屏幕功能的实现当漫游靠近物品时,需要添加一些动态的弹出窗口,了解物品的详细信息,通过单击所出现的按钮,可以随时地打开或是关闭。首先,需要创建一个新的脚本来处理如何显示。在Script文件夹中创建一个新的JavaScript文件,并且把它命名为GUI_WaypointStore。添加一些基本变量来处理GUI图片。var storeBG : Texture2D;var customSkin: GUISkin;private var openStore = false;现在,我们只需要决定什么时候显示弹出窗口。创建一个新的OnGUI()函数并且把定制皮肤与之相连:function OnGUI()if(customSkin)GUI.skin = customSkin;在OnGUI()函数中,加入一条if语句,以便在openStore=true的情况下显示图片:if(openStore)GUI.Box(Rect(0,0,Screen.width, Screen.height), );GUI.La

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论