Объявление
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
Параметры
mesh | Сетка для рисования. |
submeshIndex | Какое подмножество сетки рисовать. Это относится только к сеткам, состоящим из нескольких материалов. |
material | Материал для использования. |
matrices | Массив матриц преобразования объектов. |
count | Количество отрисовываемых экземпляров. |
properties | Дополнительные свойства материала для применения. См. MaterialPropertyBlock. |
castShadows | Определяет, должны ли сетки отбрасывать тени. |
receiveShadows | Определяет, должны ли сетки получать тени. |
layer | Слой для использования. |
camera | Если null (по умолчанию), сетка будет отрисовываться во всех камерах. В противном случае он будет отрисовываться только в данной камере. |
lightProbeUsage | LightProbeUsage для экземпляров. |
Описание
Отрисовывает одну и ту же сетку несколько раз, используя экземпляр GPU.
Подобно Graphics.DrawMesh, эта функция рисует сетки для одного кадра без дополнительных затрат на создание ненужных игровых объектов.
Используйте эту функцию в ситуациях, когда вы хотите нарисовать одну и ту же сетку определенное количество раз с помощью экземпляра шейдера. Unity отбирает и сортирует экземпляры Meshes как группу. Он создает выровненную по оси ограничивающую рамку, содержащую все сетки, вычисляет центральную точку, а затем использует эту информацию для отбраковки и сортировки экземпляров сетки. Обратите внимание, что после отбраковки и сортировки объединенных экземпляров Unity больше не отбирает отдельные экземпляры по усеченной видимости или запеченным окклюдерам. Он также не сортирует отдельные экземпляры по прозрачности или эффективности глубины.
Матрица преобразования каждого экземпляра сетки должна быть упакована в массив matrix
. Вы можете указать количество отрисовываемых экземпляров или по умолчанию это длина массива matrix
. Другие данные для каждого экземпляра, если это требуется шейдеру, должны быть предоставлены путем создания массивов в аргументе MaterialPropertyBlock с использованием SetFloatArray, SetVectorArray и SetMatrixArray.
Чтобы визуализировать экземпляры со световыми зондами, предоставьте данные светового зонда через MaterialPropertyBlock и укажите lightProbeUsage
с помощью LightProbeUsage.CustomProvided. . Подробности см. в разделе LightProbes.CalculateInterpolatedLightAndOcclusionProbes.
Примечание. Одновременно можно рисовать не более 1023 экземпляров.
InvalidOperationException будет сгенерировано, если для материала не установлено значение true для параметра Material.enableInstancing или текущая платформа не поддерживает этот API (т. е. недоступно). См. раздел SystemInfo.supportsInstancing.
Смотрите так же: DrawMesh.