最优的郑州网站建设,淄博临淄网站建设,如何做网页宣传,html网页设计代码作业正能量文章目录 前言一、GPU实例化的Shader准备步骤1、在Pass中声明实例化需要的变体2、UNITY_VERTEX_INPUT_INSTANCE_ID 在顶点着色器的输入(appdata)和输出(v2f可选)中添加(uint instanceID : SV_InstanceID). 前言
在上篇文章中#xff0c;我们做了一些GPU实例化的前置准备… 文章目录 前言一、GPU实例化的Shader准备步骤1、在Pass中声明实例化需要的变体2、UNITY_VERTEX_INPUT_INSTANCE_ID 在顶点着色器的输入(appdata)和输出(v2f可选)中添加(uint instanceID : SV_InstanceID). 前言
在上篇文章中我们做了一些GPU实例化的前置准备这篇文章主要来准备一下Shader支持GPU实例化的步骤中的GPU实例化ID准备。
Unity中Batching优化的GPU实例化1 一、GPU实例化的Shader准备步骤 用于对多个对象(网格一样材质一样但是材质属性不一样)合批,单个合批最大上限为511个对象. 1.#pragma multi_compile_instancing 添加此指令后会使材质面板上曝露Instaning开关,同时会生成相应的Instancing变体(INSTANCING_ON). 2.UNITY_VERTEX_INPUT_INSTANCE_ID 在顶点着色器的输入(appdata)和输出(v2f可选)中添加(uint instanceID : SV_InstanceID). 3.构建需要实例化的额外数据: #ifdef UNITY_INSTANCING_ENABLED UNITY_INSTANCING_BUFFER_START(prop自定义名字) UNITY_DEFINE_INSTANCED_PROP(vector, _BaseColor) UNITY_INSTANCING_BUFFER_END(prop自定义名字) #endif 4.UNITY_SETUP_INSTANCE_ID(v); 放在顶点着色器/片断着色器(可选)中最开始的地方,这样才能访问到全局变量unity_InstanceID. 5.UNITY_TRANSFER_INSTANCE_ID(v, o); 当需要将实例化ID传到片断着色器时,在顶点着色器中添加. 6.UNITY_ACCESS_INSTANCED_PROP(arrayName, propName) 在片断着色器中访问具体的实例化变量. 1、在Pass中声明实例化需要的变体
这个变体做了两件事定义一个开启GPU实例化的开关同时定义了一个变体 #pragma multi_compile_instancing 开启变体开关 变体 目前我们已经可以 把这些生成的多个物体合批成一批了但是渲染的位置不对会重合成一个位置 2、UNITY_VERTEX_INPUT_INSTANCE_ID 在顶点着色器的输入(appdata)和输出(v2f可选)中添加(uint instanceID : SV_InstanceID).
struct appdata
{float4 vertex : POSITION;float2 uv : TEXCOORD0;UNITY_VERTEX_INPUT_INSTANCE_ID
};struct v2f
{float2 uv : TEXCOORD0;float4 pos : SV_POSITION;float3 worldPos : TEXCOORD4;UNITY_VERTEX_INPUT_INSTANCE_ID
};在UnityInstancing.cginc文件中看一下Unity这句话做了什么UNITY_VERTEX_INPUT_INSTANCE_ID 这里知道原理后不建议自己改写。虽然最后只是定义了一句话。但是需要满足很多条件才可以定义 UNITY_INSTANCING_ENABLED : GPU实例化能开启的情况 UNITY_SUPPORT_INSTANCING GPU实例化硬件支持 之后的步骤在下一篇文章中解析。