• Unity Draw Call 初研究


           前言:百度了几个博客讲解unity draw call的文章,不明觉厉,我应该先自己去unity中试试先,不然看着一脸懵B,let‘s go!

           DC:Batches Draw Call,每一次dc都会调用图形API绘制图像,每次的调用都会消耗比较多性能,减少DC,优化项目

           一:光照因素(光照可能增加一倍的DC)

           二:Material因素(一个mat增加至少一次DC)

           三:Mesh顶点数量(cube顶点数:24  sphere顶点数:515 Cylinder顶点数:88)

           四:Mesh是否投射阴影或者接受阴影投射(其中一项为true,DC+=4)

      Test:关闭光照test:(空场景+关闭光照:DC=2)(下面的物体都在摄像机视野内)(开启投射阴影,没光照貌似没卵用)

             T1:1,关闭光照  2,场景中添加 1个cube                                      DC=3;(目测是因为添加了一个mat,所以DC增加1次)

             T2:1,关闭光照  2,场景中添加 2个cube,2cube的mat相同             DC=3;(因为2个cube的mat相同,所以DC增加1次)

             T3:1,关闭光照  2,场景中添加 2个cube,2cube的mat不相同          DC=4;(因为2个cube的mat不相同,所以DC增加2次)

    综上三次测试:模型相同,Mat增加一个,DC增加一次

             T4:1,关闭光照  2,场景中添加 2个cube,2cube的mat相同(DC+1) 3,场景中添加 1个sphere,mat相同于cube(DC+1)     DC=4;(2个cube的mat相同,1个sphere的mat相同与cube mat,DC增加2次,所以,跟模型mesh也有关系)

    综上四次测试:模型不相同,Mat增加一个,DC增加一次,模型mesh不同,DC增加一次

             T5:1,关闭光照  2,场景中添加 2个cube,2cube的mat相同(DC+1) 3,场景中添加 2个sphere,mat相同于cube(DC+2)     DC=5;(2个cube的mat相同,2个sphere的mat相同与cube mat,DC增加3次,所以,跟模型mesh顶点数量也有关系)

             T6:1,关闭光照  2,场景中添加 2个cube,2cube的mat相同(DC+1) 3,场景中添加 2个sphere,mat相同于cube(DC+2) 4,场景中添加1个Cylinder,mat相同与cube(DC+1)   

                                                                                                                                                                                DC=6;(2个cube的mat相同,2个sphere的mat相同与cube mat,DC增加3次,所以,跟模型mesh顶点数量也有关系)

             T7:1,关闭光照  2,场景中添加 2个cube,2cube的mat相同(DC+1) 3,场景中添加 2个sphere,mat相同于cube(DC+2) 4,场景中添加2个Cylinder,mat相同与cube(DC+1)   

                                                                                                                                                                                DC=6;(2个cube的mat相同,2个sphere的mat相同与cube mat,DC增加3次,所以,跟模型mesh顶点数量也有关系)

    综上七次次测试:模型不相同,Mat增加一个,DC增加一次,模型mesh增加一个,DC增加一次,模型mesh顶点超过300,即使使用用过的mat,DC还是会增加一次

         Test:开启光照test:(空场景+开启光照:DC=2)(下面物体都在摄像机视野内)(开启投射阴影)(接受阴影投射)

             T8-1:1,开启光照  2,场景中添加 1个cube(DC+6)                                         DC= 7~9;(当摄像机与cube处于一个相对的特殊位置时,DC=9,当cube与摄像机夹角越大,DC越小)

             T8-2:1,开启光照  2,场景中添加 1个cube(DC+6)  3,关闭 投射阴影                 DC= 4;(当摄像机与cube处于一个相对的特殊位置时,DC=9,当cube与摄像机夹角越大,DC越小)

             T8-3:1,开启光照  2,场景中添加 1个cube(DC+6)  3,关闭 接受阴影投射           DC= 4;(当摄像机与cube处于一个相对的特殊位置时,DC=9,当cube与摄像机夹角越大,DC越小)

    综上T8测试:如果 关闭投射阴影&&关闭接受阴影投射,一个光照会增加一个DC,如果 开启投射阴影||开启接受阴影投射 一个光照增加了1+4个DC

             T9:  1,开启光照  2,场景中添加 2个cube,cube的mat相同(DC+6)                   DC= 8~9;(当摄像机与cube处于一个相对的特殊位置时,DC=9,当cube与摄像机夹角越大,DC越小)

             T10:1,开启光照  2,场景中添加 2个cube,cube的mat不相同(DC+6)                DC= 10~11;(当摄像机与cube处于一个相对的特殊位置时,DC=9,当cube与摄像机夹角越大,DC越小,因为2个cube mat不同,增加了一个DC,增加了一个光照的DC)

         Test:开启光照+其他环境光test:(空场景+开启光照:DC=2)(下面物体都在摄像机视野内)(开启投射阴影)(接受阴影投射)Spotlight

             T11-1:1,开启光照  2,场景中添加 1个cube(DC+6)  3,场景中添加一个point light   4,cube在point light范围内(DC+1)    DC=8~10(增加了一个点光源,并且Obj在点光源范围内,DC+1)

             T11-2:1,开启光照  2,场景中添加 1个cube(DC+6)  3,场景中添加一个point light   4,cube在point light范围内(DC+1)  5,关闭投射阴影||关闭接受阴影投射  DC=5(增加了一个点光源,并且Obj在点光源范围内,DC+1)

             T11-3:1,开启光照  2,场景中添加 1个cube(DC+6)  3,场景中添加一个spot light   4,cube在spotlight范围内(DC+1)    DC=8~10(增加了一个点光源,并且Obj在点光源范围内,DC+1)

    待续...

      Test:关闭光照test:(空场景+关闭光照:DC=2)(下面的物体都在摄像机视野内)(开启投射阴影,接受阴影投射,没光照貌似没卵用)

             T12-1:1,关闭光照  2,场景中添加 1个空的obj                                                                                                                                                  DC=2;

             T12-2:1,关闭光照  2,场景中添加 1个空的obj  3,obj添加一个Mesh Filter,并且指定mesh为cubemesh  注意:并没有添加mesh renderer                           DC=2;

             T12-3:1,关闭光照  2,场景中添加 1个空的obj  3,obj添加一个Mesh Filter,并且指定mesh为cubemesh  4,obj添加mesh renderer(不指定材质)                  DC=3;(粉色,材质丢失)

             T12-4:1,关闭光照  2,场景中添加 1个空的obj  3,obj添加一个Mesh Filter,并且指定mesh为cubemesh  4,obj添加mesh renderer,并指定材质                    DC=3;(增加了一个mat,DC+1)

             T12-5:1,关闭光照  2,场景中添加 1个空的obj  3,obj添加一个Mesh Filter,并且指定mesh为cubemesh  4,obj添加mesh renderer,并指定材质                    DC=2;(没有mesh,DC不变)

    综上T12测试:1个有mesh网格的Obj,并被添加Mat的时候,DC增加

  • 相关阅读:
    如何把新加的分区挂载到指定目录下
    怎样通过U盘安装启动Centos6.8
    Redis 单机安装【一】
    Linux漏洞扫描工具【lynis】
    mysql 主从 重新同步
    Centos 6.8下安装oracle10g数据库、
    监控服务supervisor服务的安装及使用
    制作c#桌面应用程序 安装程序 卸载程序
    Microsoft Visual SourceSafe 2005 服务端安装配置过程以及出现的问题,以及解决方法!
    .NET中的CSV导入导出
  • 原文地址:https://www.cnblogs.com/cocotang/p/5823527.html
Copyright © 2020-2023  润新知