Graphics.DrawMeshInstanced
Declaration
public static void DrawMeshInstanced(Mesh mesh, int submeshIndex, Material material, Matrix4x4[] matrices, int count = matrices.Length, MaterialPropertyBlock properties = null, Rendering.ShadowCastingMode castShadows = ShadowCastingMode.On, bool receiveShadows = true, int layer = 0, Camera camera = null, Rendering.LightProbeUsage lightProbeUsage = LightProbeUsage.BlendProbes, LightProbeProxyVolume lightProbeProxyVolume = null);public static void DrawMeshInstanced(Mesh mesh, int submeshIndex, Material material, List<Matrix4x4> matrices, MaterialPropertyBlock properties = null, Rendering.ShadowCastingMode castShadows = ShadowCastingMode.On, bool receiveShadows = true, int layer = 0, Camera camera = null, Rendering.LightProbeUsage lightProbeUsage = LightProbeUsage.BlendProbes, LightProbeProxyVolume lightProbeProxyVolume = null);Параметры
| Параметр | Описание |
|---|---|
| сетка | Mesh для рисования. |
| submeshIndex | Какое подмножество меши рисовать. Это относится только к сетям, которые состоят из нескольких материалов. |
| материал | Material использовать. |
| матрицы | Массив матриц преобразования объектов. |
| Количество | Число экземпляров для рисования. |
| свойства | Дополнительные свойства материала, которые должны применяться. См. MaterialPropertyBlock. |
| castShadows | Определяет, должны ли меши бросать тени. |
| receiveShadows | Определяет, должны ли меши получать тени. |
| слой | Слой для использования. |
| камера | Если null (по умолчанию), сетка будет рисоваться во всех камерах. В противном случае она будет рисоваться только в заданной Camera. |
| lightProbeUsage | LightProbeUsage для экземпляров. |
Описание
Рисует одну и ту же сетку несколько раз, используя экземплярование GPU.
Аналогичные Graphics.DrawMesh, эта функция рисует меши для одного кадра без накладных расходов на создание ненужных игровых объектов. Эта функция теперь устарела. Graphics.RenderMeshInstanced вместо этого. Используйте эту функцию в ситуациях, когда вы хотите рисовать одну и ту же меш определенное количество раз с помощью экземплярного шейдера. Unity создает выравниваемый по оси предельный блок, который содержит все меши, рассчитывает центральную точку, а затем использует эту информацию для удаления и сортировки экземпляров меши. Обратите внимание, что после удаления и сортировки объединенных экземпляров, Unity далее не выбирает отдельные экземпляры по виду frustum или печеным окклюдерам. Он также не сортирует отдельные экземпляры по прозрачности или эффективности глубины.
Матрица преобразования каждого экземпляра меши должна быть упакована в данную матрицу. matrices Вы можете указать количество экземпляров для рисования, или по умолчанию это будет длина массива. matrices Другие данные по экземплярам, если они требуются для шейдера, должны быть предоставлены путем создания массивов на MaterialPropertyBlock аргумент с использованием MaterialPropertyBlock.SetFloatArray, MaterialPropertyBlock.SetVectorArray и MaterialPropertyBlock.SetMatrixArray.
Чтобы отобразить экземпляры с световыми зондами, предоставьте данные светового зонда через MaterialPropertyBlock и указать lightProbeUsage с LightProbeUsage.CustomProvidedПроверка LightProbes.CalculateInterpolatedLightAndOcclusionProbes для деталей.
Примечание: Вы можете нарисовать только максимум 1023 экземпляра за один раз.
InvalidOperationException будет брошен, если материал не имеет Material.enableInstancing установлен в true, или текущая платформа не поддерживает это API (i.eесли GPU экземпляров недоступно). См. SystemInfo.supportsInstancing.
Дополнительные ресурсы: Graphics.DrawMesh, Graphics.RenderMeshInstanced.