GPU Instancing に対応させる
https://gyazo.com/78af50c69c48bac0915a56c6dc49f50b
Unity: 2023.1
GPU Instancing を有効にするには, SRP Batcher を無効にするあるいは SRP Batcher 非対応の Shader である必要がある Pragma directive
https://gyazo.com/2feda7005855cb7f10e6e6b25751f29e
code:hlsl
https://gyazo.com/13857f7b7cfd3b2c5a55dba02bfc806c
この時点で GPU Instancing を有効化してもすべての Instance が同じ位置に描写されてしまうため, Vertex Shader での実装が必要
Vertex shader
code:hlsl
struct Attributes
{
float4 positionOS : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID // Add
};
Varyings vert(Attributes input)
{
Varyings output;
UNITY_SETUP_INSTANCE_ID(input); // Add
output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
return output;
}
(Optional) Fragment shader
Fragment Shader 側で Instance Id を使用する場合は追加の実装が必要
code:hlsl
struct Varyings
{
float4 positionCS : SV_POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID // Add
};
Varyings vert(Attributes input)
{
Varyings output;
UNITY_SETUP_INSTANCE_ID(input);
UNITY_TRANSFER_INSTANCE_ID(input, output); // Add
output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
return output;
}
Refs