zoukankan      html  css  js  c++  java
  • U3D 文档 GPU INSTANCING

    https://docs.unity3d.com/Manual/GPUInstancing.html

    归纳总结:

    一,快速使用U3D 的GPU 实例化功能

    1,选择一个shader,勾选 enable gpu instancing,这个shader将用于你的将要使用gpu instancing的物体

    2,U3D自动对使用了这个shader的物体做gpu instancing

    比如渲染一堆网格相同,位置不同的物体

    这时候做不到让每个物体有不同颜色,或不同的缩放,不同的旋转

    到此,最简单的gpu instancing功能就实现了,如果想要更多效果和控制,那么接下来看二,三两步

    二,添加个性化

    修改shader和应用程序,可以让实例化的每个物体拥有不同的颜色,或不同缩放,或不旋转

    1,修改shader,

    1.1 若是surface shader,只需三行宏定义,如下,指定颜色属性为每个实例都不相同

            UNITY_INSTANCING_BUFFER_START(Props)
               UNITY_DEFINE_INSTANCED_PROP(fixed4, _Color)
            UNITY_INSTANCING_BUFFER_END(Props)

    1.2若是vertex/fragment shader,则需要在不同地方写很多条宏定义

     2,修改脚本,在应用程序脚本中为每个物体的materialPropertyblock设置不同的参数,如颜色等,U3D会自动收集这些个性化数据,最后在绘制时一次性提交给GPU(即在drawmesh或drawInstancedMesh时),如下:

    MaterialPropertyBlock props = new MaterialPropertyBlock();
    MeshRenderer renderer;
    
    foreach (GameObject obj in objects)
    {
       float r = Random.Range(0.0f, 1.0f);
       float g = Random.Range(0.0f, 1.0f);
       float b = Random.Range(0.0f, 1.0f);
       props.SetColor("_Color", new Color(r, g, b));
       
       renderer = obj.GetComponent<MeshRenderer>();
       renderer.SetPropertyBlock(props);
    }

    如果还不满意,那么可以进行第三步

    三,进阶

    自己调用绘制API: Graphics.DrawMeshInstanced,替换U3D的默认调用Graphics.DrawMesh

  • 相关阅读:
    linux系统调优工具
    搭建ceph分布式文件系统
    ansible管理windows主机
    jenkins结合ansible发布
    Linux系统安全配置
    tomcat 的安全配置预防后台被攻击
    【9】添加主页日志列表展示
    【8】添加新建/编辑博客逻辑
    【7】使用css/js/html模板来实现一个注册、登录和管理的功能
    Ubuntu下给Sublime Text 3添加用python3运行文件
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/13168023.html
Copyright © 2011-2022 走看看