UNITY_VERTEX_INPUT_INSTANCE_ID 定义数据。 setup,在 vert/frag 中使用需要先UNITY_SETUP_INSTANCE_ID。在 frag 中使用还要在 vert 中使用UNITY_TRANSFER_INSTANCE_ID 获取数据。UNITY_ACCESS_INSTANCED_PROP shader sample Shader "Custom/TestDrawInstance" { Properties { _MainTex ("Texture",2D) = "white" ...
UNITY_SETUP_INSTANCE_ID(input); float4 baseColor = UNITY_ACCESS_INSTANCED_PROP(UnityPerMaterial, _BaseColor); return baseColor ; } Graphics.DrawMeshInstanced Unity提供了Graphics.DrawMeshInstanced来使用GPU Instancing合批。 public class MeshBall : MonoBehaviour { [SerializeField] private Mesh mesh; [...
UNITY_VERTEX_INPUT_INSTANCE_ID 定义数据。 setup,在 vert/frag 中使用需要先UNITY_SETUP_INSTANCE_ID。在 frag 中使用还要在 vert 中使用UNITY_TRANSFER_INSTANCE_ID 获取数据。UNITY_ACCESS_INSTANCED_PROP shader sample Shader "Custom/TestDrawInstance" { Properties { _MainTex ("Texture", 2D) = "white"...
UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); o.pos = UnityObjectToClipPos(v.vertex); return o; } fixed4 frag(v2f i) : SV_Target { UNITY_SETUP_INSTANCE_ID(i); return UNITY_ACCESS_INSTANCED_PROP(Props, _Color); } ENDCG } // Shadow Caster Pass Pass { Tags {...
UNITY_TRANSFER_INSTANCE_ID(v, o); o.pos = UnityObjectToClipPos(v.vertex); return o; } fixed4 frag(v2f i) : SV_Target { UNITY_SETUP_INSTANCE_ID(i); return UNITY_ACCESS_INSTANCED_PROP(Props, _Color); } ENDCG } // Shadow Caster Pass Pass { Tags {"LightMode"="ShadowCaster"} ...
#define UNITY_DEFINE_INSTANCED_PROP(type, var) type var; #define UNITY_ACCESS_INSTANCED_PROP(arr, var) arr##Array[unity_InstanceID].var 1. 2. 3. 4. 5. 6. 7. 运行的结果如下: 可以看到除了纹理,每一个胶囊体还获取了随机赋予给材质的颜色,也就是我们设置的颜色成为了实例化属性数据。Materi...
UNITY_TRANSFER_INSTANCE_ID(v, o);Use this to copy the instance ID from the input structure to the output structure in the vertex Shader. This is only necessary if you need to access per-instance data in the fragment Shader. UNITY_ACCESS_INSTANCED_PROP(arrayName, color)Use this to access...
_INSTANCING_CBUFFER_SCOPE_BEGIN(UnityInstancing_##buf)struct{#defineUNITY_INSTANCING_BUFFER_END(arr)}arr##Array[UNITY_INSTANCED_ARRAY_SIZE];UNITY_INSTANCING_CBUFFER_SCOPE_END#defineUNITY_DEFINE_INSTANCED_PROP(type,var)typevar;#defineUNITY_ACCESS_INSTANCED_PROP(arr,var)arr##Array[unity_InstanceID...
SCOPE_BEGIN(UnityInstancing_##buf) struct {#define UNITY_INSTANCING_BUFFER_END(arr) } arr##Array[UNITY_INSTANCED_ARRAY_SIZE]; UNITY_INSTANCING_CBUFFER_SCOPE_END#define UNITY_DEFINE_INSTANCED_PROP(type, var) type var;#define UNITY_ACCESS_INSTANCED_PROP(arr, var) arr##Array[unity_InstanceID...
将此结构作为参数添加到UnlitPassFragment。然后像以前一样使用UNITY_SETUP_INSTANCE_ID来使索引可用。现在需要通过UNITY_ACCESS_INSTANCED_PROP(UnityPerMaterial,_BaseColor)访问material属性。 (实例化的dc) 现在,Unity可以将24个球体与每个对象的颜色组合在一起,从而减少了绘制调用的次数。最后进行了四个实例化的绘制...