版本:Unity 6 (6000.0)
语言:English
内置渲染管线中支持 GPU 实例化的 Surface Shader 示例
内置渲染管线中在运行时更改每个实例数据的示例

内置渲染管线中支持 GPU 实例化的 HLSL 着色器示例

以下示例演示如何创建具有不同颜色值的每个实例的实例化顶点和片段着色器在 GPU 上运行的程序。 更多信息
参见 术语表
。与表面着色器编写内置渲染管线着色器的一种简化方法。 更多信息
参见 术语表
不同,当创建顶点和片段着色器时,必须使用 UNITY_SETUP_INSTANCE_ID 手动设置实例 ID。

Shader "Custom/SimplestInstancedShader"
{
Properties
{
_Color ("Color", Color) = (1, 1, 1, 1)
}

SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100

Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_instancing
#include "UnityCG.cginc"

struct appdata
{
float4 vertex : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};

struct v2f
{
float4 vertex : SV_POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID // use this to access instanced properties in the fragment shader.
};

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

v2f vert(appdata v)
{
v2f o;

UNITY_SETUP_INSTANCE_ID(v);
UNITY_TRANSFER_INSTANCE_ID(v, o);
o.vertex = UnityObjectToClipPos(v.vertex);
return o;
}

fixed4 frag(v2f i) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(i);
return UNITY_ACCESS_INSTANCED_PROP(Props, _Color);
}
ENDCG
}
}
}
内置渲染管线中支持 GPU 实例化的 Surface Shader 示例
内置渲染管线中在运行时更改每个实例数据的示例