void RenderInstancedMesh()
{
if (InstanceRenderMaterial == null || GPUBoidsScript == null ||
!SystemInfo.supportsInstancing)
{
return;
}
uint numIndices = (InstanceMesh != null) ?
(uint)InstanceMesh.GetIndexCount(0) : 0;
args[0] = numIndices; // メッシュのインデックス数をセット
args[1] = (uint)GPUBoidsScript.GetMaxObjectNum(); // インスタンス数をセット
argsBuffer.SetData(args); // バッファにセット
InstanceRenderMaterial.SetBuffer("_BoidDataBuffer",
GPUBoidsScript.GetBoidDataBuffer());
InstanceRenderMaterial.SetVector("_ObjectScale", ObjectScale);
var bounds = new Bounds
(
GPUBoidsScript.GetSimulationAreaCenter(),
GPUBoidsScript.GetSimulationAreaSize()
);
Graphics.DrawMeshInstancedIndirect
(
InstanceMesh,
0,
InstanceRenderMaterial,
bounds,
argsBuffer
);
}