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

  • 相关阅读:
    SQL 扩展事件
    SQL优化技巧--远程连接对象引起的CTE性能问题
    PowerBI通过gateway连接多维数据库
    具体问题解决:分离脚本
    干净的ssm框架项目
    web项目no such method exception
    解决com.microsoft.sqlserver.jdbc.SQLServerException: 该连接已关闭
    eclipse启动出现Could not read metadata for ……
    ajax提交form表单
    jquery实现元素高度变化页面变化
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/13168023.html
Copyright © 2011-2022 走看看