Эта страница содержит информацию о данных, содержащихся в сетке, и о том, как Unity хранит эти данные в Mesh. Основной графический примитив Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
См. в классе Словарь.
Обзор
Сетка определяется следующими свойствами:
- Вершины: набор позиций в трехмерном пространстве с необязательными дополнительными атрибутами.
- Топология: тип структуры, определяющий каждую грань поверхности.
- Индексы: набор целых чисел, описывающих, как вершины объединяются для создания поверхности на основе топологии.
Помимо этого, деформируемые сетки содержат:
- Смешивание форм: данные, описывающие различные деформированные версии сетки для использования с анимацией.
- Связывание поз: данные, описывающие «базовую» позу скелета в сетке со скиннингом.
Данные вершин
Элементы данных вершин называются атрибутами вершин.
Каждая вершина может иметь следующие атрибуты:
- Позиция
- НормальныйНаправление, перпендикулярное поверхности сетки, представленное Вектор. Unity использует нормали для определения ориентации объекта и применения затенения. Подробнее
См. в Словарь - Касательная
- Цвет
- До 8 текстурных координат
- Вес костей и индексы смешивания (только для сеток с оболочкой)
Внутри все данные вершин хранятся в отдельных массивах одинакового размера. Если ваша сетка содержит массив с 10 позициями вершин, у нее также есть массивы с 10 элементами для каждого другого используемого атрибута вершины.
В C# Unity описывает доступные атрибуты вершин с помощью перечисления VertexAttribute. Вы можете проверить, имеет ли экземпляр класса Mesh
заданный атрибут вершины, с помощью Mesh.HasVertexAttribute функция.
Позиция
Положение вершины представляет положение вершины в пространстве объекта.
Unity использует это значение для определения поверхности сетки.
Этот атрибут вершины обязателен для всех сеток.
В классе Mesh
самый простой способ получить доступ к этим данным — использовать Mesh.GetVertices и Mesh.SetVertices. Unity также хранит эти данные в Mesh.vertices, но это более старое свойство менее эффективно и удобно для пользователя.
Обычный
Нормаль вершины представляет собой направление, указывающее прямо «вне» от поверхности в положении вершины.
Unity использует это значение для расчета отражения света от поверхности сетки.
Этот атрибут вершины является необязательным.
В классе Mesh
самый простой способ получить доступ к этим данным — использовать Mesh.GetNormals и Mesh.SetNormals. Unity также хранит эти данные в Mesh.normals, но это более старое свойство менее эффективно и удобно для пользователя.
Касательная
Касательная вершины представляет направление, которое указывает вдоль оси "u" (горизонтальная текстура) поверхности в положении вершины.
Unity сохраняет касательную вершины с дополнительным фрагментом данных в четырехкомпонентном векторе. Компоненты x,y,z вектора описывают касательную, а компонент w вектора описывает его ориентация. Unity использует значение w для вычисления бинормали, которая является перекрестным произведением касательной и нормали.
Unity использует значения тангенса и бинормали в сопоставлении нормалей.
Этот атрибут вершины является необязательным.
В классе Mesh
самый простой способ получить доступ к этим данным — использовать Mesh.GetTangents и Mesh.SetTangents. Unity также хранит эти данные в Mesh.tangents, но это более старое свойство менее эффективно и удобно для пользователя.
Координаты текстуры (UV)
Сетка может содержать до восьми наборов текстурных координат. Координаты текстур обычно называются UV, а наборы называются каналами.
Unity использует координаты текстуры, когда она «обертывает» текстуру вокруг меша. UVs указывают, какая часть текстуры выравнивается с поверхностью сетки в позиции вершины.
Каналы UV обычно называются «UV0» для первого канала, «UV1» для второго канала и так далее до «UV7». Каналы соответственно сопоставляются с шейдеромПрограммой, работающей на графическом процессоре. Подробнее
См. в Словарь семантика TEXCOORD0
, TEXCOORD1
и так далее до TEXCOORD7
.
По умолчанию Unity использует первый канал (UV0) для хранения UV для обычных текстур, таких как диффузные карты и карты бликов. Unity может использовать второй канал (UV1) для хранения запеченной карты освещенияпредварительно обработанной текстуры, которая содержит эффекты источников света на статике. объекты в сцене. Карты освещения накладываются поверх геометрии сцены для создания эффекта освещения. Подробнее
См. в Словарь UVs и третий канал (UV2) для хранения входных данных для карт освещения в реальном времени. Для получения дополнительной информации о UV-картах освещения и о том, как Unity использует эти каналы, [[wiki:LightingGiUvs|Lightmap UVs]]. Дополнительную информацию о UV-картах освещения см. в разделе UV-карты освещения.
Все восемь атрибутов координат текстуры являются необязательными.
В классе Mesh
самый простой способ получить доступ к этим данным — использовать Mesh.GetUVs и Mesh.SetUVs. Unity также хранит эти данные в следующих свойствах: Mesh.uv, Mesh. uv2, Mesh.uv3 и так далее, вплоть до Mesh .uv8. Обратите внимание, что эти старые свойства менее эффективны и удобны для пользователя.
Цвет
Цвет вершины представляет собой базовый цвет вершины, если таковой имеется.
Этот цвет существует независимо от текстур, которые может использовать сетка.
Этот атрибут вершины является необязательным.
В классе Mesh
самый простой способ получить доступ к этим данным — использовать Mesh.GetColors и Mesh.SetColors. Unity также хранит эти данные в Mesh.colors, но это более старое свойство менее эффективно и удобно для пользователя.
Сочетать индексы и веса костей
В скелетном меше индексы смешивания указывают, какие кости влияют на вершину, а веса костей описывают, насколько сильно эти кости влияют на вершину.
В Unity эти атрибуты вершин хранятся вместе.
Unity использует индексы смешивания и веса костей для деформации сетки со скиннингом в зависимости от движения ее скелета. Дополнительную информацию см. в разделе Средство визуализации сетки со скелетом.
Эти атрибуты вершин необходимы для каркасных сеток.
В прошлом Unity позволяла воздействовать на вершину не более чем четырьмя костями. Он сохранил эти данные в структуре BoneWeight в массиве Mesh.boneWeights. Теперь Unity позволяет до 256 костей влиять на вершину. Он хранит эти данные в структуре BoneWeight1, и вы можете получить к ним доступ с помощью Mesh.GetAllBoneWeights. и Mesh.SetBoneWeights. Для получения дополнительной информации прочитайте связанную документацию по API.
Топология
Топология описывает тип грани сетки.
Топология сетки определяет структуру индексного буфера, который, в свою очередь, описывает, как положения вершин объединяются в грани. Каждый тип топологии использует разное количество элементов в массиве индексов для определения одной грани.
Unity поддерживает следующие топологии сетки:
- Triangle
- Quad
- Lines
- LineStrip
- Points
Примечание. Топология Points не создает грани; вместо этого Unity отображает одну точку в каждой позиции. Все остальные топологии сетки используют более одного индекса для создания граней или ребер.
В классе Mesh
можно получить топологию с помощью Mesh.GetTopology и установите его как параметр Mesh.SetIndices.
Дополнительную информацию о поддерживаемых топологиях сетки см. в документации по перечислению MeshTopology.
Примечание. Вы должны преобразовать любые сетки, в которых используются другие методы моделирования (такие как NURBS или NURMS/Subdivision Surfaces), в поддерживаемые форматы в вашем программном обеспечении для моделирования, прежде чем вы сможете использовать их в Unity. р>
Индексировать данные
Массив индексов содержит целые числа, которые относятся к элементам в массиве позиций вершин. Эти целые числа называются индексами.
Unity использует индексы для соединения позиций вершин с гранями. Количество индексов, составляющих каждую грань, зависит от топологии сетки.
В классе Mesh
вы можете получить эти данные с помощью Mesh.GetIndices и установите его с помощью Mesh.SetIndices. Unity также хранит эти данные в Mesh.triangles, но это более старое свойство менее эффективно и удобно для пользователя.
Примечание. Топология Points не создает грани; вместо этого Unity отображает одну точку в каждой позиции. Все остальные топологии сетки используют более одного индекса для создания граней или ребер.
Например, для сетки с массивом индексов, содержащим следующие значения:
0,1,2,3,4,5
Если сетка имеет треугольную топологию, то первые три элемента (0,1,2) определяют один треугольник, а следующие три элемента (3, 4, 5) определяют другой треугольник. Нет ограничений на количество граней, в которые может вносить свой вклад вершина. Это означает, что одна и та же вершина может появляться в массиве индексов несколько раз. Например, индексный массив может содержать следующие значения:
0,1,2,1,2,3
Если сетка имеет треугольную топологию, то первые три элемента (0,1,2) определяют один треугольник, а следующие три элемента (1,2,3) определяют другой треугольник, который имеет общие вершины с первым.
Порядок намотки
Порядок вершин в каждой группе в индексном массиве называется порядком намотки. Unity использует порядок намотки, чтобы определить, обращено ли лицо вперед или назад, и, в свою очередь, следует ли рендерить лицо или отбрасывать его (исключать из рендеринга). По умолчанию Unity визуализирует многоугольники, обращенные вперед, и отбрасывает многоугольники, обращенные назад. Unity использует порядок намотки по часовой стрелке, что означает, что Unity считает любую грань, где индексы соединяются по часовой стрелке, лицевой стороной.

На приведенной выше диаграмме показано, как Unity использует порядок намотки. Порядок вершин на каждой грани определяет направление нормали для этой грани, и Unity сравнивает его с прямым направлением текущей камерыКомпонент, который создает изображение определенной точки обзора в вашей сцене. Вывод либо рисуется на экране, либо фиксируется в виде текстуры. Подробнее
Просмотр в Словарь. Если нормаль указывает в сторону от прямого направления текущей камеры, она обращена назад.
Ближний треугольник упорядочен (1, 2, 3), что является направлением по часовой стрелке по отношению к текущей перспективе, поэтому треугольник обращен вперед. Следующий треугольник упорядочен (4, 5, 6), что с этой точки зрения является направлением против часовой стрелки, поэтому треугольник обращен назад.
Смешение фигур
Фигуры смешения описывают версии сетки, которые деформируются в разные формы. Unity выполняет интерполяцию между этими формами. Вы используете плавные формы для преобразования целевой анимации, что является распространенным приемом для лицевой анимации.
Дополнительную информацию о формах перехода см. в разделе Работа с фигурами перехода.
Эти данные являются необязательными.
Связать позы
В скелетной сетке положение привязки кости описывает ее положение, когда скелет находится в положении по умолчанию (также называемом его позой привязки или позой покоя).
В классе Mesh
вы можете получить эти данные с помощью Mesh.GetBindposes и установить с помощью Mesh.SetBindposes. Unity также хранит эти данные в Mesh.bindPoses, но это более старое свойство менее эффективно и удобно для пользователя. Каждый элемент содержит данные для кости с тем же индексом.
Эти данные необходимы для каркасных сеток.