查看: 2349|回复: 0
打印 上一主题 下一主题

Uniy3D优化之图形性能

[复制链接]

435

主题

2

听众

6371

积分

高级设计师

Rank: 6Rank: 6

纳金币
6372
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-9-5 11:32:13 |只看该作者 |倒序浏览
良好的性能是许多游戏的成功的关键。下面是一些简单的指导,可以用来帮助您最大化你的游戏图形渲染速度。
优化网格
您仅仅只需要渲染视域体内含有Mesh Renderer的物体,而对于空的或者视域体外的游戏物体则不需要进行渲染。
现代的图形卡已经非常擅长处理大量的多边形渲染,但在每次将每批几何数据(网格)提交给图形卡时却要花费很大的开销。即便你只渲染一个只有100个三角形的物体,它的开销也和渲染一个1500个三角形面片的物体的开销是一样的。因此,最优的渲染性能的"平衡点"是每次渲染1500-4000三角形网格。

通常情况下,提高渲染性能的最佳途径是将物体组合一起,使每个网格大概拥有大约 1500个三角形面片,并且整个网格只使用一种材质。值得注意的一点是,您需要了解将拥有不同材质的两个物体拼合在一起并不会给您带来任何的性能提升。最常见的原因两个网格所用的材质并不共享相同的纹理,所以要优化渲染性能,您至少应该确保您所组合的任何物体共享相同的纹理。
但是,在Forward rendering path的渲染方式下,如果每个像素使用多个光源,那么可能会出现拼合物体不起作用的情况,我们将在下面对其进行解释。
如果您使用像素光照,那么每个网格将会渲染多遍,渲染次数是根据每个像素的光源个数来决定的。如果两个相距很远的网格进行合并,它将会增加合并物体的有效大小。因此,任何可以找到该物体的像素光源都将在渲染过程中进行计算,这势必会增加整个渲染的pass。一般情况下,拼合物体的渲染pass总数将是各个物体所需要的渲染pass的综合,这样一来,拼合这些物体显然没有任何的好处。出于以上原因,您不应该组合距离较远的、受到不同的像素光照影响的物体。


在渲染过程中,Unity会查找一个网格周边的所有光源,并计算最影响这些光线的。质量设置(Quality Settings)是用来修改多少光源将最终会作为像素光源和多少光源将作为顶点光源。每个光源的重要性计算是基于它距离物体的远近以及它自身的亮度强弱。此外,一些光源的重要性与否需要根据游戏内容而定,因此,每个光源都有一个渲染模式(Render Mode)设置,来制定其是重要还是不重要的;被标记为不重要的光源通常会被设定为较低的渲染开销。

比如,我们以一个赛车游戏为例,选手的车打开车前疼在黑暗中行驶。车前灯应该算是游戏中最为显著的
光源,所以它们的渲染模式应该被设定为重要(Important)。同时,游戏中很可能存在一些不重要的光源(比如其他车的车尾灯)。对于这些光源,其绘制模式可以被设定为不重要(Not Important),以此来避免渲染方面的开销,从而达到更良好的运行性能。

Per-Layer Cull Distances 每层裁剪距离
在某些游戏中,通过裁剪小物体来减少绘制调用的数量可能比裁剪大物体达到更好的效果。例如,小块岩石和碎片在距离较远时可以设为不可见,而大型建筑物仍然可见。为了完成这样的裁剪,可以将小物体放入单独的图层和并使用Camera.layerCullDistances脚本来对每层物体进行不同的视域裁剪距离。

Shadows 阴影
如果您要在桌面平台上进行发布,那么您应谨慎地使用阴影,因为如果没有正确地使用它们,可能会将很多不必要的渲染开销添加到您的游戏中。有关进一步的详细信息,情况阴影部分(以后翻译)
注意:目前阴影功能暂不支持iOS和Android设备。
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-13 20:22 , Processed in 0.109117 second(s), 35 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部