SOS:为什么3D游戏FPS会很低?

Creator 版本:Creator 3D 1.1.1
目标平台:vivo小游戏
手机型号:vivo手机 V1818A

一、FPS值很低
电脑上用谷歌浏览器上跑的还是正常如图:

但我打包成vivo小游戏的包就会变得很卡如图(FPS 8~12):

二、DrawCal l 会随着预制体(同一个)的增加而增加
我参考了


但我发现我的DrawCal l没降下去,反而FPS值降低了。 我不清楚是不是我哪里使用的有问题。

demo:Test_1.zip (2.6 MB)

希望能帮忙看下

@350791117

不要用 use batch 了,这个需要额外的 CPU 端损耗才能降低 draw call,更何况没有降低的情况下,说明你场景中的物体不满足合批条件。

合批优先选择 use instancing

如果降不下来 drawcall 代表合批没有用就不要做了

先感谢你的答复, 首先我的预制体想采用合批的方式来降低draw call,我参考了官方文档的确也勾选了use instancing但发现好像效果不明显,我先确定下问题是我这边的模型问题还是我的操作问题, 其次也是最主要的,我这边的需求是想在小游戏平台上跑,但发现在vivo小游戏平台上只有几帧,所以我这边采用排除法,先单独把角色与场景资源加载出来渲染,发现也只10几帧,所以发这个demo包,想请教下 是我们这边哪里出了问题?

因为现在游戏差不多完成了, 在电脑与手机的浏览器上跑都还算流畅, 但在vivo小游戏上跑的就非常卡, 所以目前我这边就是卡在这里。我这边也没有到更好的办法优化,想请教下怎么才能 优化更流畅。

PANDA大神其实已经回答你了。
下面是我根据PANDA大神的意思,理解出来的东西。

1、优先使用INSTANCING
Instancing是GPU功能,就是可以一次性绘制多个模型。骨骼动画也支持这个,但要处理好骨骼纹理分布。文档里面有讲。

2、Batching只适合小而不常更新的Mesh,因为你MESH的位置变动,都会触发Batching的MESH合并功能,而这个合并功能是在CPU端进行操作的。

3、抛开Batch和Instancing的选择不谈,开了batching但是DC没有降低,则表示你的材质不符合batching原则。检查一下材质。

4、不管是instancing还是batching,都需要相同材质 实例 才能生效。如果同一材质但你代码改了某个材质的参数,也是不行的。如果是通过sharedMaterial修改,则没问题。

PS:
1、小游戏这个量级的游戏,想对GPU产生压力是不太可能的。 反而CPU资源比较吃紧。 特别像VIVO这类卖摄相头的手机,更加吃紧。所以建议优化方向是,能让GPU干的,就不要让CPU干。
2、如果GPU确实也吃紧了,那优化方向,一般就是三角面数和贴图尺寸。 在不影响游戏质量的情况下。尽量精简。这个影响光栅化和采样效率。 物体较多且实在无法精简的情况下,考虑LOD。
LOD一般就是:MESH,贴图,材质

4赞

看你的profile信息 其实CPU和GPU占用时间都不太多,但你的帧消耗时间却很大,可能是带宽的瓶颈,用压缩纹理试试。vivo是安卓所以压缩纹理可以选择etc

确实啊,我仔细看了一下 vivo 的左下角性能信息,

Logic: 0.12ms
Physics: 0.08ms
Renderer: 1.88ms

完全应该是是 60fps,但是帧率很低的原因就可能是数据传输、GPU 中执行性能低(CPU 在等待)。这方面问题不好查,除了尝试降低一些数据量以外,建议把问题发给 vivo 平台,对方可能可以找到原因

VIVO这种卖摄像头的,GPU的填充率都低。

3.3.0版本,如果多个相同的模型,但是他们的材质用的是不一样的,那么instancing会合批吗?

GPU INSTANCING要求,同模,同材质

1赞

如果材质他的tilingOffset偏移不一样,那么也能GPU INSTANCING 吗?