unity场景优化问题.docx
- 文档编号:8431859
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:6
- 大小:149.63KB
unity场景优化问题.docx
《unity场景优化问题.docx》由会员分享,可在线阅读,更多相关《unity场景优化问题.docx(6页珍藏版)》请在冰豆网上搜索。
unity场景优化问题
■图形显示的优化
简单来说就是「结合!
结合!
结合!
」(combine!
combine!
combine!
)
Mesh尽可能结合,Material和Texture尽可能共享。
一个Mesh建议使用的面数在1500~4000之间。
一个Mesh建议只用一个Material。
注意:
两个Mesh结合成一个Mesh,但是却使用两个Material,并不会提高效能。
如果要提高效能必须把这两个Mesh的Material也合并成一个。
换句话说,一个Mesh使用多个Material和一个Material使用多个render,其实耗能是差不多的。
所以,尽可能的让对象共享相同的Texture才是提升效能的根本之道。
PixelLight
PixelLight非常耗能,如果想要在旧计算机上也跑得很顺,
可以在Edit->RenderSettings中把PixelLightCount设成0。
(完全不使用PixelLight)
你也可以根据每个Light的重要度,分别设定。
重要度高的RenderMode设成ForcePixel。
不重要的设成ForceVertex。
Layer管理
地上的小石头或瓦砾之类的小东西产生的影子比较不明显,
我们可以把这些东西设在同一个图层。
并利用script中Camera.layerCullDistances功能变更参数控制显示的距离。
functionStart()
{
vardistances=newfloat[32];
//Setuplayer10tocullat15metersdistance.
//Allotherlayersusethefarclipplanedistance.
distances[10]=15;
camera.layerCullDistances=distances;
}
Shadow
影子的计算完全依靠GPU。
Softshadow比hardshadow多花费GPU效能。
但是两者使用的CPU与内存是相同的。
Anti-aliasing也是完全靠GPU计算。
AnisotropicTextures也是完全靠GPU计算,建议在天花板或是地板的Texture上使用。
关于实时阴影的优化,请参考叫你自由前辈所写的这一帖:
■Texture2D
Unity读取PSD档之后,会自动将图档平面化缩压,并不会让制作的游戏变大。
Texture的长宽的大小最好由下列数字中挑选:
2、4、8、16、32、64、128、256、512、1024、2048。
Texutre不一定要是正方形的,长方形也可以。
如果Texture的大小不是由上方数字所组成的,那么图形将会稍微多耗用一些的显卡的内存,读取时也会稍微变慢。
所以特殊的Texture大小建议只使用在GUI上。
MipMaps
使用MipMaps大约会多占用33%的内存,但是可以大幅提升效能。
所有的Texture都建议使用MipMaps,唯一不需要使用的是GUI的Texture。
■Shader效能(Normal、Transparent、TransparentCutout、Self-Illuminated、Reflective、Lightmap)
由上→下,左→右,愈来愈耗能。
Vertex_Lit->Decal
->Diffuse Fast->Diffuse->DiffuseDetail
->Bumped->Specular->BumpedSpecular
->ParallaxBumped->ParallaxBumpedSpecular
附件中有比较清楚的图示。
■角色(charcater)最佳化
一、每个Mesh只使用一个SkinnedMeshRenderer。
二、不要使用太多的Material。
唯一需要使用不同的Material的原因,应该是你想要使用不同的shader。
一个角色使用2~3Material应该就能充份表现效果。
如果角色可能会换武器,人物和武器的Material应该要分开,
三、减少bone的数量
角色bone的数量限制通常在15~60之间,通常30个bone已经可以做到很好的效果。
强烈建议一个角色的bone数量在30个以内。
四、polygon面数
面数建议在500~6000之间。
HL2(半条命)的面数是2500~5000、次世代游戏角色的面数在5000~7000。
五、将IK(反向动力学)与FK(正向动力学)严格区分
因为Unity不需要IK的资料,这么做可以让你很方便地删除IK数据。
六、使用可重复利用的Rig
这样可以让不同的角色使用相同的动画。
七、正确命名每一个bone
正确命名每一个bone之后,使用Ragdoll功能将会事半功倍。
否则将骨架设定正确将花费你许多时间。
■脚本相关
参考论坛上前辈的心得,摘录如下:
1.biobio前辈的新人的学习作业 FindObjectsOfType,FindGameObjectWithTag,GameObject.Find,这类函数很好用,但是开销很大,要想优化性能最好使用staticArrayList,存储同一个类型的对象,使用的
时候查这个list表就好。
首先ISLANDDEMO的模型资源并不大,主要是内置的地形系统,植物等都是可重用的pref。
开始动手前最好先系统的把帮助手册通看一篇。
要不你会遇到层出不穷的问题。
我们主要使用3dsmax2010进行制作,输出FBX的类型导入Unity3D中。
默认情况下,3dsmax8可以和U3D软件直接融合,自动转换为FBX物体。
注意事项如下:
1.
面数控制
在MAX软件中制作单一GameObject物体的面数不能超过65000个三角形,即32500个多边形Poly,如果超过这个数量的物体不会显示出来,这就需要我们合理分布多边形和模型数量。
打开MAX场景,选择File/Properties/SummaryInfo可以打开文件属性记录。
下载(24.84KB)
2009-8-3023:
38
其中Faces可以看到每个物体的实际数量,个体数量不能超过65000个Faces面。
2.
建模控制
Unity3D软件支持Line渲染和编辑之后所产生的模型。
大部分模型都依靠Polygon进行制作。
在模型表面可以承认多出四边形的面,但不渲染交错的面。
默认情况下,U3D引擎是不承认双面材质的,除非使用植物材质球Nature类型。
所以在制作窗户、护栏等物体,如果想在两面都能看到模型,那需要制作出厚度,或者复制两个面翻转其中一个的Normal法线。
3.
文件的放置
模型可以继承MAX的材质,但是文件的设置要按照以下形式进行放置:
下载(3.69KB)
2009-8-3023:
38
在项目的Assets文件夹内,新创建一个Object文件夹。
并在其中创建Materials和Texture文件夹(分别自动存放材质球和贴图)。
模型物体并列保存在Object文件夹内。
这个规律模式不要打乱,否则会破坏整个系统逻辑。
4.
材质数量控制
如果一个物体给与一个材质球,那么Unity3D对于材质数量和贴图数量没有任何的限制。
如果一个物体给与多个材质球,我们需要用Multi/SubObject来实现,但是这种罗列的材质球的数量没有严格的控制,但尽量保持在10以内,过多的数量会导致一些错误。
如果不使用Multi/SubObject材质球,也可以选择一些面,然后给与一个材质球。
这样系统会自动将其转换成Multi/SubObject材质。
综合而言Unity3D软件对于材质的兼容还是很好的。
5.
物体的质感
Diffuse
DiffuseBumped
BumpedSpecular
这三种类型为常用类型,其中Bumped需要增加Normal法线贴图来实现凹凸。
Decal
这种材质为贴花材质,即相当于Mask类型,可以再Decal(RGBA)贴与一个带有Alpha通道的图像,形成和原图像相叠加的效果。
DiffuseDetail
这种材质可以创造出污迹和划痕的效果,即相当于Blend混合材质。
Reflective
其中各种类型可以创造出金属反射效果,需要增加Cubmap贴图。
Transparent
其中各种类型可以创造出透明的效果,需要增加具有Alpha的通道贴图。
注意:
如果要做玻璃贴图,Alpha如果全是灰色或黑色(即要求全透明),那么Alpha就会失效,如果要全透明,材质Alpha其中必须至少有1像素为白色。
Nature
其中SoftOcclusionLeaves类型主要应用于片状的树叶材质。
6.
物体尺寸
默认情况下U3D系统单位1等于1米,等于软件1单位。
如果我们制作是按照实际大小比例制作,那么导入U3D引擎会自动变成原来的1%的大小。
因为默认情况下,U3D的FBXImporter中的ScaleFactor的数值为0.01。
那个我们可以将ScaleFactor的数值恢复为1,但是这样会占用模型资源,比较消耗物理缓存。
我们也可以将这个物体从Hierarchy中选择,并使用Scale放大100倍,这种设置可以有很多好处,并且还能通过用脚本制作动画。
7.
关于复制
场景中的灯光布局,重复的模型物体都可以使用系统Prefab进行关联复制,这样可以改变一个参数的同时将所有关联物体属性改变。
8.
山脉控制
在创建山脉之后,选择Terrain/SetResolution可以设置山脉的大小和属性。
下载(17.32KB)
2009-8-3023:
38
需要注意的是,默认情况下TerrainWidth和TerrainHeight为1000米。
如果设置这个数值太小,那么绘制草的时候会产生偏移,因为草的尺寸必须减少到0.1的单位。
也就是说,山脉在处理0.1单位的时候会产生0.01的偏差,如果模型太小,这种偏差是显而易见的,所以建议用户不要让模型过小。
9.
光晕控制
光晕又称为LensFlare即灯光光效。
可以选择一个GameObject物体给与Component/Rendering/LensFlare,并在Flare中增加一个StandardAssets/LightFlares/50mmZoom项目。
这样在运行之后就会产生光晕。
但有时候如果光晕太远太高却看不到。
一种办法是将光晕离近,另一种办法是将所有摄影机Camera的Farclipplane的数值增加。
10.摄影机控制
如果场景中有多架摄影机,那么如何确定第一打开时间所显示的摄影机,就需要设置Camera属性中的Depth数值,数值越大的摄影机越优先显示。
Unity3D是一款优秀的3D游戏引擎,支持iPhone游戏开发。
但是由于硬件限制,如果不进行优化,有时开发好的游戏放到真机运行效率是比较低的。
以下是一些优化的小技巧:
-试试把gameobject一个一个禁用,确定下什么最影响性能
-stats里面有多少个Drawcalls&三角形
-合并网格物体
-合并材质张数
-不要用网格碰撞.
-Unity对带动作的模型渲染消耗比较大,如果是静态的不带动作文件的模型渲染不会出现效率问题,但是要确保只绘制屏幕内的东西
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- unity 场景 优化 问题
![提示](https://static.bdocx.com/images/bang_tan.gif)