Unity之MaterialPropertyBlock优化Drawcall

这篇具有很好参考价值的文章主要介绍了Unity之MaterialPropertyBlock优化Drawcall。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、不使用MaterialPropertyBlock效果

每更改一次颜色会重新实例化一份材质、不能进行动态合批,当物体比较多时Drawcall会比较高

materialpropertyblock,unity,unity,游戏引擎

 文章来源地址https://www.toymoban.com/news/detail-550059.html

 materialpropertyblock,unity,unity,游戏引擎

materialpropertyblock,unity,unity,游戏引擎

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MaterialTest : MonoBehaviour
{
    public  List< MeshRenderer> list;
    // Start is called before the first frame update
    void Start()
    {
        for (int i = 0; i <list.Count ; i++)
        {
            if (i % 2 == 0)
            {
                list[i].material.color = Color.white;
            }
            else
            {
                list[i].material.color = Color.red;
            }
        }
    }   
}

 二、使用MaterialPropertyBlock效果

更改颜色不会重新实例化一份材质、能进行动态合批,当物体比较多时能有效降低Drawcall提高帧率

materialpropertyblock,unity,unity,游戏引擎

materialpropertyblock,unity,unity,游戏引擎

materialpropertyblock,unity,unity,游戏引擎

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MaterialTest : MonoBehaviour
{
    public  List< MeshRenderer> list;
    // Start is called before the first frame update
    void Start()
    {

        MaterialPropertyBlock materialPropertyBlock = new MaterialPropertyBlock();
        for (int i = 0; i < list.Count; i++)
        {
            materialPropertyBlock.SetColor("_Color", Color.white);
            list[i].SetPropertyBlock(materialPropertyBlock);
        }

    }   
}

 三、使用MaterialPropertyBlock有多种颜色效果

相同颜色的物体,能够进行合批处理,示例中4个物体有两种颜色,合批后会有两个drawcall

materialpropertyblock,unity,unity,游戏引擎

materialpropertyblock,unity,unity,游戏引擎

materialpropertyblock,unity,unity,游戏引擎

materialpropertyblock,unity,unity,游戏引擎

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MaterialTest : MonoBehaviour
{
    public  List< MeshRenderer> list;
    // Start is called before the first frame update
    void Start()
    {

        MaterialPropertyBlock materialPropertyBlock = new MaterialPropertyBlock();
        for (int i = 0; i < list.Count; i++)
        {
            if (i % 2 == 0)
            {
                materialPropertyBlock.SetColor("_Color", Color.white);
                list[i].SetPropertyBlock(materialPropertyBlock);
            }
            else
            {
                materialPropertyBlock.SetColor("_Color", Color.red);
                list[i].SetPropertyBlock(materialPropertyBlock);
            }
        }
    }   
}

 

 

 

 

 

到了这里,关于Unity之MaterialPropertyBlock优化Drawcall的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity2020 Unity2021 场景灯光烘焙简单教程,Unity场景灯光优化, 一些简单的问题

    吃饱饭 多喝水 睡好觉 将需要烘焙的场景和不需要烘焙的场景不放到一个父物体下面 模型尽量是分开的, 烘焙很耗费时间,很吃显卡和CPU性能 将需要烘焙的场景设置为static 选择灯光,将灯光设置为bake 打开Lighting 窗口 (windows 》rendering》lighting) 烘焙,建议取消自动烘焙。

    2024年02月01日
    浏览(72)
  • unity 性能优化之GPU和资源优化

    众所周知,我们在unity里编写Shader使用的HLSL/CG都是高级语言,这是为了可以书写一套Shader兼容多个平台,在unity打包的时候,它会编译成对应平台可以运行的指令,而变体则是,根据宏生成的,而打包运行时,GPU会根据你设置的宏切换这些打包出来的代码,而不是我们书写那

    2024年02月02日
    浏览(64)
  • 十一、Unity优化

    1、确定性能瓶颈,使用Unity种Profiler工具确定场景的性能瓶颈 2、减少模型的三角面数 3、合批和批处理 4、使用LOD进行多层次细节处理 5、减少纹理和材质使用 6、光照优化,使用静态光源 7、使用遮挡剔除遮挡剔除(Occlusion Culling)功能来减少渲染不可见物体的开销。 8、粒子

    2024年02月10日
    浏览(41)
  • Unity 优化贴图模型

    纹理 纹理属性 Aplha Source 对于不透明的纹理,关闭其apha通道 Read/Write Enable:如果你不需要运行时读取图片的像素信息的话, 禁用 ,否则启用后纹理的内存消耗会增加一倍。 Streaming MipMaps:如果不是3D模型贴图,则 禁用 ,否则会多出约33%的内存开销。Mipmaps主要为远处的物件

    2024年02月11日
    浏览(42)
  • Unity 性能优化锦集

    Unity作为一款主流的游戏开发引擎,不仅提供了强大的编辑器和开发工具,还可以让开发者轻松地实现高质量的3D游戏。但是,随着游戏规模的不断扩大和玩家需求的增加,游戏的性能问题也变得越来越重要。因此,在使用Unity进行游戏开发时,我们需要注意性能优化方面的一

    2024年02月16日
    浏览(42)
  • Unity性能优化 - 动态图集

    Unity 动态图集是 Unity 引擎中用于处理游戏纹理优化的一种技术。它可以将多个纹理打包到一个图集中,减少游戏中需要加载的纹理数量,从而提高游戏性能。 在运行时,Unity 动态图集会根据游戏需要动态地生成纹理,并将它们打包到一个图集中,这样可以大幅降低游戏加载

    2024年02月13日
    浏览(38)
  • Unity 性能优化基础

    首先贴出官方文档。 DrawCall 即绘制调用命令,CPU在准备好渲染数据并设置渲染状态后,会通过Drawcall命令通知GPU进行渲染。 Canvas Canvas是一个 Native 层实现的Unity组件,被 Unity 渲染系统用于在游戏世界空间中渲染分层几何体(layered geometry)。 Canvas 负责把它们包含的Mesh合批,

    2024年02月06日
    浏览(33)
  • Unity包体积优化实践

    在移动端App混合Unity开发的项目中,Unity的包体增量一直是一个被严格把控的关卡,包体积增量太大估计老板都直接不给上Unity了,因此Unity移动端的包体积优化尤为重要。由于混合开发中Unity部分的优化和Unity独立App的优化手段差不多,这里就以Android独立App项目为例,实践一波

    2024年02月04日
    浏览(49)
  • unity性能优化部分

         (1) 优化几何体 :尽可能减少模型中三角形的数目,尽可能重用顶点     (2)使用LOD(Level of detail)技术      unityLOD优化技术详解_丶博Liang的博客-CSDN博客_lod优化     (3)使用遮挡剔除(Occlusion culling)技术 (1)像素优化的重点在于减少overdraw。overdraw指的就

    2024年02月14日
    浏览(42)
  • unity 性能优化指标

    内存需要关注项目以及阈值推荐: Mono 堆内存:    影响 GC 耗时, 存在泄露风险,控制在 80M 以下。       PSS                   :    进程在 RAM 中实际使用的空间地址大小     内存峰值控制在硬件总内存 0.5~0.6  以下,闪退风险才低。中端机型 900M Reserved Total

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包