loading请求处理中...

浅谈手游开发性能优化

2021-12-03 05:05:43 阅读 8516次 标签: 开发 作者: yipinweike01

  游戏怎么这么卡?

  A.引擎问题

  如果游戏出现卡顿掉帧,多半和引擎优化有关。

  引擎性能有几个关键指标:

  1)渲染帧数

  渲染帧数代表一秒钟内实际渲染的帧数量,低于设定的运行帧数时,说明游戏可能存在引擎性能问题,需要进行排查。大致的排查方向,可以根据后面的DP数和多边形数来判断。

浅谈手游开发性能优化

  2)DP数

  DP数量决定了渲染流程中CPU的负担,DP数为1代表CPU调用了一次图形API(在NeoX中一般是OpenGL)进行绘制,调用API的效率并不算特别高,这导致DP数高的情况下会使CPU不堪重负,从而使游戏的渲染帧数下降,所以在游戏制作中需要避免DP数过高的情况发生。第一个DP数代表目前场景视野中总的DP数,modelDP是由于模型产生的DP数,fxdp是由特效产生的DP数,这几个DP数可以提供一些大致的优化方向。另外在这里并没有显示cocosui的DP数,可以使用python脚本cc.Director.getInstance().setDisplayStats来显示。

  3)多边形数

  多边形数量会影响渲染流程中GPU的负担,3D游戏中的物体由大量三角形面片组成,三角形面片越多,对GPU的压力越大。和DP数类似,第一个Prim数代表目前场景视野中总的多边形数量,modelprim则代表模型产生的多边形数量。

  B.如何优化

  1.资源优化

  1)首先可以考虑整体降低模型的批数和面数,这种方式可以最直接地降低渲染过程的压力,以达到优化游戏的目的。如果发现有模型的批次和面数太高,可以让美术把模型从3dsmax里重新导出,以降低面数,或者对于不重要的模型考虑直接删除。

  其实骨骼的运算是最耗时间的,一般来说有n骨头就做n*4次矩阵运算。这个比较好证明。放一屏幕的角色,然后把骨骼运算一停,只做蒙皮,会发觉游戏的效率瞬间飞起来。另外,限制骨骼运算的帧频也能起到一定优化作用。

  2)另外可以和美术交流,看看性能有问题的场景里是否存在大量重复模型的情况,以此来决定是否可以进行精简来降低DP数和面数。

  3)项目中如果有大场景,则应当设置LOD Mesh,来降低远景的批数面数,从而避免远景采用高精度渲染而导致性能下降。

  4)将一些模型合并为一个大模型可以减少渲染批次,但也可能因为无法遮挡剔除而增加渲染面数。

  2.优化shader

  Shader的编译需要花费一定的时间,所以这可能会成为渲染性能的瓶颈,使用离线编译Shader的方式可以减小Shader编译的时间开销,从而提高游戏的渲染性能。以NeoX使用的nfx文件来说,在渲染的时候,引擎会先从nfx生成nfxo文件,然后编译成的pipe文件才是真正的Shader文件。如果预先得到nfxo或者pipe,就可以加快游戏的渲染速度。

  3.为模型设置不同的level

  这一条适用于拥有大场景的游戏。在游戏中一个大物件周围可能有装饰性的小物件,和大物件相比,小物件可以允许在更近的距离使用低精度模型甚至不可见,从而达到在总体观感影响不大的前提下降低渲染模型批次和面数的效果。

  4.最终手段,降低分辨率

  降低分辨率是效果最明显的提高渲染效率的手段,但是负面影响是会很大程度上影响游戏的画面表现。如果别的手段没有效果,可以尝试降低游戏分辨率,比如从1080P降低到900P就可能带来很大的帧数提升。不过分辨率不能降得太低,不然帧数再高玩家也会被锯齿劝退的。

  好了,由于时间关系,今天我小编给大家介绍到这里了,如果觉得有用,就请多多关注我们一品威客平台(epwk.com)哦!

手游开发公司推荐

成为一品威客服务商,百万订单等您来有奖注册中

留言( 展开评论

快速发任务

价格是多少?怎样找到合适的人才?

官方顾问免费为您解答

 
手游开发相关任务
DESIGN TASK 更多
可视化展示工具,开发

¥1000 已有2人投标

开发支付宝支付功能及页面

¥1000 已有0人投标

剑网三自动招募软件开发

¥20000 已有0人投标

微信小程序后台系统开发

¥20000 已有0人投标

BitSKY-APP项目开发

¥100 已有2人投标

现成的获客系统开发

¥5000 已有0人投标