读书频道 > 软件开发 > 其他综合 > Unity游戏开发实战(原书第2版)
3.2.5 用草和细节网格把它弄乱一点
2015-11-30 16:35:31     我来说两句 
收藏    我要投稿   
这是一本介绍Unity引擎的书。它解释了Unity需要提供什么,以及不管你要用它做什么都会用到的一些Unity最佳实践。如果你是一名爱好者或者学生,你或许可以按部就班从第1章开始阅读。如果你想通过本书来判断Unity是  立即去当当网订购

树木并不是你唯一能够涂在地形上的东西,你还可以添加一些草和一些细节网格。地形引擎针对这些东西会区别对待,只有在它们接近镜头的时候才会渲染这些东西。这么做是为了节约存储空间来保证游戏性能。

要绘制这些对象,可以在地形工具栏中点击绘制细节(Paint Detail)按钮,这个按钮看起来像一团小花朵。和其他可以涂画的功能一样,你需要填入你的可用资源库供引擎使用。然而不同于树木和纹理的是,你可以选择将你的资源添加为一个草或者一个细节网格,每一种都有自己独特的好处,选择时可以参考表3.1。



注:*表示只有在距离足够近的时候才可见——距离太远就不会渲染。

草和树木有点像的是,它们会在风中摇摆,但是不同于树木和其他细节网格的是,草是一种二维纹理,没有深度。另一方面,细节网格则是作为三维对象来呈现的,但是不会像树木一样随着距离退化成二维贴图,在风中也不会像树木那样摇摆。 这对于你想放到场景中的一些小石头或者其他其他一些凌乱的东西很有帮助。草皮和细节网格都是使用相同的画笔和选项来涂画的。

标准资源包已经包含两种可以用的草皮纹理,放在这个目录下 Standard Assets > Terrain Assets > Terrain Grass 。点击编辑细节(Edit Detail)按钮,然后选择添加草皮纹理(Add Grass Texture)来打开添加草皮纹理对话框,如图3.16所示。从下拉菜单中选择草皮资源,或者从项目视图中拖曳草皮资源到细节纹理框(Detail Texture)中。


 

添加草皮的基础选项有这些:

细节纹理:草皮使用的纹理,纹理文件必须有一个透明层来定义草叶。图片中的透明层和红绿蓝三原色层很相似,但是透明层控制的是透明度。

最小宽度:每一个单独放置的草皮纹理的最小宽度。

最大宽度:每一个单独放置的草皮纹理的最大宽度。

最小高度:每一个单独放置的草皮纹理的最小高度。

最大高度:每一个单独放置的草皮纹理的最大高度。

噪波范围:改变花草颜色大小的随机效果。

健康颜色:健康草的颜色,草叶边缘的颜色。

干色料:草边缘的颜色。

贴图:开启后草总是面向摄像机。

Unity不会摆放一些相同的草丛,而是会将草丛的某些值做一些随机变化,但是会确保在你设置的宽度和高度的范围内。而且草的颜色也会根据健康颜色和干草颜色发生一些变化。

你可以改变任意一项设置,点击添加(Add)来结束操作。然后选择一个画笔尝试在场景视图中画一些笔画。记住一点:你可以在画的时候修改画笔设置来改变草的样子。你还可以点击运行按钮来观察草皮和树木在风中飘摇的样子,如图3.17所示。


 

你可以按相同的方式添加细节网格,但是这次不是选Add Grass Texture,而是Add Detail Mesh。这些网格和树木一样,需要是从预制件中创建的。细节网格会出现在和草皮相同的库里,如图3.18所示。


 

在添加细节网格的时候,你有如下这些选项:

细节:用作细节涂画的网格。

噪波范围:细节网格的随机效果。

随机宽度:每一个单独网格的宽度所允许的最大随机值。

随机高度:每一个单独网格的高度所允许的最大随机值。

干色料:表示网格边缘的颜色。

渲染模式:选择该网格是使用特殊草皮光照还是顶点光照。对于植物而言,可以选择草皮光照,其他的类似岩石的物体,你应该选择顶点光照。

当你添加了一个细节网格之后,按照涂草皮类似的方式来涂在地形上就可以了。

你可以在导入之后编辑草皮和细节网格。导入的方式是在选中地形资源的时候,点击Edit Detail按钮。然后你就可以在导入的时候修改你选择的任何选项了。与树木一样,如果你将细节网格摆在地形上之后,修改了网格或者纹理,你需要手动更新一下,手动更新方式是导航到Paint Details 工具,然后点击刷新(Refresh)按钮。

如果你觉得在某一些很紧密的块里,很难摆放草皮或者网格,可以检查一下地形设置工具(Terrain Settings)中的细节分辨率设置(Detail Resolution)。与地形纹理一样,你并不是真的在地形上画这些特征,而是在画一个生成的透明度映射,这个映射可以告诉引擎在哪里展示多少你的资源。如果你的细节纹理的分辨率太低了,可能没有足有的分辨率来很好地展示对象的分组。

记住:所有这些纹理和网格不同于树木的地方是它们只有在靠近镜头的时候才会显示,而不是像树木那样在距离远的时候变成了二位贴图,它们应该只是细节,不是地形上的一些永久性固定装置。

你没有必要限制在这几种提供的地形资源的名字中:树木、草皮、细节网格。如果你想让你的草皮在远距离时还能看得见,可以考虑将其设置为网格,然后作为树木展示。如果你需要加一点风中飘摇的效果,可能应该是树木或者草皮,需要三维的话可以考虑树木,二位可以考虑草皮。你最终需要什么结果就引入什么资源,而不是只按照字面上的名字来。

陡峭地形疑难排解

你可能已经发现了摆放草皮和树木的另外一个显著不同点:在摆放草皮的时候,从上面看你会觉得草皮是按照地面形状铺的很契合的,但是如果你尝试将一棵树摆放在悬崖上的时候,你可能会发现树的部分飘在半空中了。这是树的轴心位置以及树涂在地形上的方式所导致的。树的尺寸不同以及树靠近镜头的程度不同时,可能看起来没什么问题,但是有几个步骤可以让你的树木牢牢的扎根在地上。

试着在三维建模程序中引入你的树木模型,然后将树木的轴心往上移动一点点,这个对于特写树木(距镜头比较近的三维模型的树)有所帮助,但是远处的那些二维贴图的树可能还是飘在地面上。随着你的地形不同,这个方法可能起作用,浮动的贴图树也可能不可见。

如果这些特殊的树确实差异很大,而且数量比较少,你可以给这些有问题的树木单独塑造一些特殊地形。如果你有很多这种有问题的树木需要微调的话,这个方法会耗时很久,而且很难都做好。

如果你真的需要一颗斜坡上的树,也不想浪费时间来重塑地形或者重新引入,可以尝试将这些树作为一个单独的游戏对象,而不是作为一个地形特征来摆在场景中。这样摆放的树不会在风中飘摇,除非你添加一个自定义脚本来让其飘摇。同时它也不会有其他地形元素所有用的一些功能,但是你可以单独调整这些树。

如果你有足够的空闲的存储空间,可以尝试在地形下面添加另外一个相同的地形,要这么做的话可以将你的地形导出为一个高度图,创建一个新地形,将新地形下降大约半米左右,然后在地形上引入之前导出的高度图,这样你就能有一个额外的地形,你可以将树木摆放在这个额外的低一点的地形上面,然后任何的漂浮的部分在主要地形上面就都被隐藏起来了。如此一来,你的树木看起来就好像是自然地从表面自然生长出来的。使用这种方法的时候,你需要知道并且观察性能表现可能遇到的瓶颈。

最简单的也是最不怎么占用存储空间的方式是:不要尝试在悬崖边上摆树木,实际上树可能也不会长在那些地方。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.2.4 摆放树木
下一篇:3.2.6 地形设置
相关文章
图文推荐
Python语言及其应用
2.2.1 Java Buffer
3.9 OpenCL错误处理
3.6.3 查询和管理内
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站