zoukankan      html  css  js  c++  java
  • unity, 内存profile,ImageEffects Temp和Unity GI SystemTex RGBM

    最近用unity的Profiler对公司项目进行内存profile,发现一些问题,记录一下。

    用Memory Area的Detailed View,用法见:http://docs.unity3d.com/Manual/ProfilerMemory.html

    一,

    可以看到Not Saved->RenderTexture下有两个ImageEffects Temp。想不出它们是因何而来。

    注:在profile过程中直接点Take Sample才容易看到ImageEffects Temp,如果先点曲线区域使项目暂停运行了再Take Sample,有时候会看不到ImageEffects Temp。

    于是开始用屏蔽法排查,发现当场景中某个节点关掉之后ImageEffects Temp就不再出现了,再检查此节点,发现上面挂了个脚本。对脚本中的函数逐个进行屏蔽,发现当其中一个函数屏蔽之后ImageEffects Temp就不再出现了。这个函数是一个空函数:

    void OnRenderImage(RenderTexture src,RenderTexture dest){}

    一般这个函数里都会调用个Graphics.Blit(src, dest, mat)之类的,但是可能写程序的人临时改了思路把其中的语句删了,但是没删函数,这样不仅导致这个回调每帧都被调用,而且还为了参数创建了renderTexture!!!

    不知道开启某些优化选项后这个会不会被优化掉,但出于稳妥考虑,这种空函数还是清理干净为好。

    二,

    在Not Saved->Texxture2D下面有

    Unity GI SystemTex RGBM
    Unity GI SystemTex RGBM
    Unity GI SystemTex Directionality

    这几个项目,看起来跟GI有关,想看看究竟是怎么来的,是不是必须的。

    在Windows->Lighting下面把Precomputed Realtime GI和Baked GI都关了,然后再profile还是有这三项。

    后来新建了个工程做实验,发现在不烘焙lightmap之前profile,是没有这三项的,但一旦烘焙了lightmap再profile,这三项就出来了,虽然查看这三项中的图像与lightmap中的图像并不相同,但是似乎只要lightmap存在它们就存在。目前只知道这些。

  • 相关阅读:
    计算公司下班时间(娱乐)
    设计模式-观察者模式
    vue 打包后白屏的问题
    HashSet实现原理
    LinkedList实现原理
    ArrayList的实现原理
    HashMap实现原理分析
    深入理解java动态代理机制
    Spring工作原理
    数据库SQL优化大总结之 百万级数据库优化方案
  • 原文地址:https://www.cnblogs.com/wantnon/p/4891847.html
Copyright © 2011-2022 走看看