我的游戏性能跟不上,遇到了以下问题,请问是否有简单的方式解决:
1.PointLight最大光源数量目前由Configuration的_maxPointLightInShader等参数控制,而这个值等于3的时候,iPhone5已经跑不动了,30帧以下;
2.我的地图由简单的正方形块拼成,每一块是Sprite3D对象,地图大小也就20x20个地图块,地图重复度大,然而好像并没有批量渲染,所以效率很低。
请问有没有什么简单方法能优化这两个问题?
我的游戏性能跟不上,遇到了以下问题,请问是否有简单的方式解决:
1.PointLight最大光源数量目前由Configuration的_maxPointLightInShader等参数控制,而这个值等于3的时候,iPhone5已经跑不动了,30帧以下;
2.我的地图由简单的正方形块拼成,每一块是Sprite3D对象,地图大小也就20x20个地图块,地图重复度大,然而好像并没有批量渲染,所以效率很低。
请问有没有什么简单方法能优化这两个问题?
20x20个sprite3d?每个都接受3个点光源?那别说iPhone5了,iphone6估计都悬。
这样是无解的,硬件性能就这样。
正确的做法:对于场景静态物体,请使用lightmap,不要实时计算光照。而且400个物件太多了,让你们美术能合并的合并,cocos不像unity那样有自动合并的功能。动态人物/npc使用的光源数也不应过多,大部分情况一个directional light足够了,根据需求小范围的使用点光源和聚光灯。
谢谢,我理解了性能低的原理。
我的游戏是一个地下城场景的游戏,想象黑暗的地下城里,多人的时候,每人点了一个火把。。。然后就卡死了!
这种多光源在手机上都没有太好的办法,对pc游戏来说这需要延迟渲染(deferred shading/deferred lighting),但是对手机来说延迟渲染的memory bandwidth消耗太大,基本玩不起来的。况且cocos这种半吊子3d功能只有forward rendering,搞多光源不现实。
额外说一句(也是说给cocos引擎组的),手机上多光源(延迟渲染)只有Pixel Local Storage一条明路。
不知道cocos是否支持3d批量渲染,如果不支持就比较麻烦,只能让美术尽量合并模型,移动平台对于类似cube的模型还不如用画的光照贴图,连烘焙都不用,最近在做一个体素游戏准备尝试一下类似的解决方案,由于地图是随机的烘焙就非常不好使。