zoukankan      html  css  js  c++  java
  • 关于shader.createGPUProgram耗时较高的问题

    UNITY对于shader的加载策略是:只有第一次在相机中出现时才会去创建相应的shader,测试用例如下:

    1,创建测试场景 testscene

    2,在testscene中创建一个 cube,为它创建一个材质 matx,使用一个shaderx

    3,确保cube不在相机视野内

    4,添加一个按钮 btnUseShader,添加脚本如下,

    public class btnUseShader : MonoBehaviour
    {
        public GameObject cube;
        void Start()
        {
    //=============================warm start=============================== /*
    var sv = Resources.Load<ShaderVariantCollection>("warmups"); if (sv != null) { sv.WarmUp(); Debug.LogError("load success ========================================"); }*/
    //=============================warm end================================

          GetComponent
    <Button>().onClick.AddListener(() => {
                //当点击按钮时将cube移到相机视野内,用profiler观察有线程的cpu波峰
                cube.transform.position = Vector3.zero;
            });
        }
    }

    5,【不使用shader预热】:打安卓包测试,运行游戏,ADB方式连接unity profiler,点击按钮的一瞬间发现主线程cpu有一个明显的巨大波峰,点击查看正是shader.createGPUProgram

    6,【使用shader预热】:将 warm start和 warm end之间的代码打开,并在Resources目录下创建一个名为warmupsshaderVarriantCollection,添加第2步中创建的 shaderx到其中,

    再次打包测试,运行游戏,连接profiler,点击按钮时CPU不再有明显的波动,说明已没有了shader.creategpuprogram消耗

  • 相关阅读:
    node.js 的简单介绍
    vue浅析
    rest_framework的分页器组件配置与使用
    restframwork组件的权限认证
    关于and和or的运算
    restframwork组件的使用
    实现简单的子页面传值给父页面
    Django使用orm模块时想看多对对数据关系的配置
    Django更新数据库表时无法执行表修改 指定Django要使用的数据库
    图论-kruskal算法-稀疏图
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/12221242.html
Copyright © 2011-2022 走看看