游戏优化注意点

特效性能分析:

1、粒子数量太多,这个会对CPU的耗时产生一定的压力。
2、粒子的size太大,这样容易导致渲染的像素数量非常高。
3、Overdraw非常高,当场上粒子数非常高导致叠层很高,会造成Overdraw很高,这会对GPU造成一定的压力,尤其在中低端设备上会造成性能的下降,从而影响游戏表现,如:卡顿、发热等。

1、贴图信息
遍历特效的Material.mainTexture统计贴图数量,使用反射调用函数统计贴图所占内存。
private static int GetStorageMemorySize(Texture texture) { return (int)InvokeInternalAPI("UnityEditor.TextureUtil", "GetStorageMemorySize", texture); }
2、DrawCall
采用了UnityStats.batches的数值,统计当前运行的粒子特效的Batches数量(并不完全等同于DrawCall数量)
3、粒子数量
通过反射调用函数进行统计。
#if UNITY_2017
m_CalculateEffectUIDataMethod = typeof(ParticleSystem).GetMethoc("CalculateEffectUIData", Bind
#else 
m_CalculateEffectUIDataMethod = typeof(ParticleSystem).GetMethod"CountSubEmitterParticles",E 
#endif
4、Overdraw
通过Camera.SetReplacementShader这个API全局地替换着色器为Overdraw.Shader。
public void SetCamera(Camera camera)_camera = camera;camera.SetReplacementShader(Shader.Find("ParticleEffectProfiler/OverDraw"), "");
该Shader使得像素每次通过片元着色器进行渲染时G值都会增加0.04。
fixed4 frag(v2f i) : SV_Targetreturn fixed4(0.1, 0.04, 0.02, 0);
将当前特效渲染在RenderTexture上,进而转换为Texture,逐像素统计RGB数值。将每个像素的G值除以0.04得到,该像素实际绘制的次数。
public int DrawPixTimes(float r, float g, float b){return Convert.ToInt32(g/0.04);
遍历所有像素,得到有颜色的像素数量(特效原填充像素点),GPU实际渲染的像素数量(特效实际填充像素点),从而得到重复比率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值