zoukankan      html  css  js  c++  java
  • [Unity优化]-DrawCall

    文章连接:   http://gad.qq.com/article/detail/26927

    在Unity中,Batch(批处理)一般是指进过打包之后的Draw call

    绘制100万个物体,每个物体10个三角形   与  绘制10个物体,每个物体100万个三角形,那个效率更快;后者更快

    每一次Btach都是CPU准备渲染数据,向GPU提供渲染数据,这个过程比较消耗性能,当这个Batch达到一定量,CPU负荷则会大大增加,达到瓶颈。(好的CPU的Batch瓶颈可能是200,差的CPU可能是130)

    总结:每一次Batch的提交就是一次Draw call的调用, 

              Draw call消耗性能的原因:每调用一次API:Application->Runtime->Driver->VideoCard(GPU处理),其中每一步都会有一定的耗时

              其中最大的耗时在Runtime发送渲染命令给Driver,如果每一个调用API都让Runtime发送命令给Driver,那样开销太大,所有在Runtime中有一个Command Buffer的东西,这个东西会缓存Runtime的命令,在适当时机一次发给Driver,这样避免了每次的调用;

     综合所有:Draw call消耗的2个主要原因:1:把Draw call及渲染状态切换的API调用转换成设备无关命令的消耗时间(其中还包括命令检查等操作)

                                                                       2:刷新Command Buffer导致CPU由用户模式切换到内核模式带来的消耗(这两个模式请百度)

                                                                       第1点的消耗并不大,关键的消耗在第2点,所以我们希望Command尽可能的缓存多的命令,一次提交给Driver

    最后:优化:1:目标平台的CPU性能 2:Batch提交操作所能够占用的CPU性能百分比(为其他CPU任务留出资源)

                          解决渲染问题的办法 1是合并批次减少DC,2是对Driver进行优化(有DX,OpenGL优化) 对于开发人员来说,减少DC还是很重要的

               

              

  • 相关阅读:
    YAR 并行RPC框架研究
    Yar
    Monolog
    laravel controller:make
    eclipse自动补全的设置(自动提示)
    如何在 PHP 中处理 Protocol Buffers 数据
    JAVA printWriter中write()和println()区别
    eclipse中启动tomcat
    Ajax简介
    div
  • 原文地址:https://www.cnblogs.com/cocotang/p/7927978.html
Copyright © 2011-2022 走看看