码迷,mamicode.com
首页 > 其他好文 > 详细

效率相关笔记

时间:2014-05-17 18:00:47      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:android   c   ext   color   a   strong   

简要清单,让你的游戏速度更快:
(1)保持顶点数如下:针对iPhone 3GS和更加新的设备(带SGX GPU),每帧40K;针对旧设备(带MBX GPU)每帧10K。
(2)物体之间尽可能共享相同的材质,这样有利于进行渲染合批,对于不同贴图同一材质的,可以将多张贴图合成一张,只合并两个物体而没有共享材质,这样不会给你带来任何性能提高。
  每场景中不同的材质的数量尽可能少。
  相同相机,如果被渲染的物体使用相同的材质, Unity IOS能够运用多种内部优化。额外的工作放在合并纹理成单一的图集的和让物体使用相同的材质,总会有回报的。做到这一点!
(3)非移动的物体上设置静态Static 属性,这样可以进行内部优化。
(4)在可能的情况下使用ETC1格式的纹理,否则,选择16bit纹理优于32bit未压缩的纹理数据。
(5)当没有必要时,不要使用像素灯- 选择只有一个(最好是方向光)像素灯的光线影响您的几何图形
  当没有必要时,不要使用动态光源- 选择烘焙照明
  逐像素的动态照明将显着增加每个受影响的像素的渲染开销,并可能导致对象多次渲染。避免多于一个像素灯 Pixel Light照亮任何单一的物件,并尽量使用方向灯。请注意,一个像素灯,渲染模式选项设置为重要Important。
  逐顶点的动态照明显着增加顶点转变的开销。尽量避免多个灯照亮任何给定的物体的情况,对于静态对象,烘焙照明更加高效。
(6)避免使用alpha测试,而是选择alpha混合。
(7)当没有必要时,不要使用雾效。
(8)了解遮挡剔除的好处,在复杂的静态场景的情况下,有很多遮挡,用它来减少可见几何体的数量和绘制调用。计划你的关卡,受益于遮挡剔除。
(9)使用天空盒制造出"假"遥远的几何体
(10)Per-Layer Cull Distances 每层消隐距离
  使用Camera.layerCullDistances函数,设置每一层消隐距离。这样可以把远距离的需需要渲染的物体隐掉,以减少渲染批次。

着色器相关:
(1)使用合并器或像素着色器,混合每帧的多个纹理,而不是用多通道方法
(2)如果您使用的是内置的着色器,对于移动平台。记住,Mobile / VertexLit 是目前最快的着色器。
(3)如果编写自定义的着色器,用尽可能小的浮点格式
  fixed / lowp -- perfect for color, lighting information and normals,
  用于颜色,灯光信息和法线
  half / mediump -- for texture UV coordinates,
  用于纹理UV坐标,
  float / highp -- avoid in pixel shaders, fine to use in vertex shader for vertex position calculations.
  尽可能地使用最低的精度,这点对于iOS和Android平台特别重要。推荐的经验法则:对于颜色和单位长度的向量,使用fixed;对于其他的,如果范围和精度允许的话,使用half,否则使用float。
  在移动平台上,关键是在片段着色器中使用尽可能多低精度数据计算。在大多数移动设备的GPU中,在低精度 (fixed/lowp) 类型上应用swizzles是比较耗时的;同时,在fixed/lowp 和高精度类型之间进行转换也是需要付出很大代价的。
(4)尽量减少在像素着色器使用复杂的数学运算,如pow, sin, cos 等。
(5)每个fragment使用较少的纹理。
(6)通常地说,所需要渲染的像素(像素着色器执行)个数要比所需要渲染的顶点(顶点着色器执行)个数要多,同时,所需要渲染的顶点个数也要比模型的个数要多。所以,一般来说,尽可能地将计算量从像素着色器移到顶点着色器中,或者完全从着色器中移除并从
  脚本中来赋值。避免在像素着色器,而是使用顶点着色器,计算顶点的位置。

批处理相关:
DrawCall: 引擎准备好数据并通知GPU绘制的过程称为一次DrawCall。一般一个物体一个Draw Call
  每帧的DrawCall数是一项非常重要的指标,不只是GPU渲染,引擎重设材质/Shader也是非常耗时的操作。
Draw Call Batching技术:
  Unity内置的合并处理技术,优点:将相同变换、材质的物体组合成一个物体进行一次Draw Call;缺点:组合成的物体会成为一个新的物体,耗费内存和CPU。
  Dynamic Batching:自动进行不需要手动干预,对于顶点数在300以内的可移动物体,只要使用相同的材质,就会组成Batch。
  Static Batching:收费的,static对象无论大小都会batch。
  要有效利用Draw Call Batching,首先是尽量减少场景中使用的材质数量,即尽量共享材质,对于仅纹理不同的材质可以把纹理组合到一张更大的纹理中(称为Texture Atlasing)。然后是把不会移动的物体标记为Static。

 

效率相关笔记,布布扣,bubuko.com

效率相关笔记

标签:android   c   ext   color   a   strong   

原文地址:http://www.cnblogs.com/sifenkesi/p/3732154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!