SurfaceTool
Пошаговое построение одной поверхности: вершины, атрибуты, индексы и массивы меша.
SurfaceTool — собственный RefCounted-строитель, не Entity и не готовый Mesh. Обычный порядок: Begin → атрибуты перед AddVertex → нормали/тангенты → Index при необходимости → CommitToArrays либо Commit. Begin очищает прежнюю геометрию, material, custom formats и skin count; повторный Begin не добавляет вторую поверхность. Освобождайте собственный tool через Dispose.
using var tool = new SurfaceTool();
tool.Begin(Mesh.PrimitiveType.Triangles);
tool.SetUV(Vector2.Zero);
tool.AddVertex(Vector3.Zero);
tool.SetUV(new Vector2(1, 0));
tool.AddVertex(new Vector3(1, 0, 0));
tool.SetUV(new Vector2(0, 1));
tool.AddVertex(new Vector3(0, 1, 0));
tool.GenerateNormals();
tool.GenerateTangents();
using var arrays = tool.CommitToArrays();SetUV/SetNormal/SetColor и другие атрибуты относятся к следующему AddVertex и сохраняются, пока их не заменили. Задайте все используемые каналы до первой вершины: после неё нельзя впервые добавить UV/цвет к уже начатому формату. Это не редактирование ранее добавленной вершины. Для треугольников каждая тройка углов задаёт грань; winding определяет нормаль и видимость лицевой стороны. GenerateNormals(true) меняет нормали, но не переставляет индексы.
CommitToArrays возвращает отдельный Array из Mesh.ArrayType.Max слотов; неиспользуемые содержат Nil, а не обязательно пустой typed array. В слотах лежат packed-массивы, не данные одного Vertex-объекта. Commit создаёт или дополняет ArrayMesh новой поверхностью и требует отдельной проверки рендера. Материал назначается через SetMaterial, а vertex color влияет на картинку только если его использует материал/шейдер.
Index объединяет только полностью совпадающие вершины с атрибутами и smooth group, а не любые одинаковые позиции. UV/normal/color seams сохраняют отдельные вершины. GenerateNormals усредняет по совпадающей позиции и smooth group; uint.MaxValue отключает сглаживание для угла. GenerateTangents требует triangles, UV и normals. Текущий public binding не включает split-режим тангенсов; проверяйте швы normal map на реальной модели.
Текущие ограничения skinning: SetSkinWeightCount принимает значение только до begun, но Begin вызывает Clear и снова устанавливает четыре влияния. Значит, рецепт «SetSkinWeightCount(SurfaceTool.SkinWeightCount.Skin8Weights), затем Begin» не сохраняет восемь. При избыточном списке код сортирует веса по возрастанию и оставляет меньшие. Передавайте заранее отобранные и нормализованные ровно четыре влияния, не полагаясь на автоматический отбор. Эти случаи воспроизведены, движок не исправлялся; анимация скелета здесь не проверена.
CreateFrom/CreateFromArrays заменяют рабочее состояние; следующий Begin сотрёт импорт. AppendFrom не копирует все возможности исходного меша: blend shapes, LOD и корректность нормалей при произвольном nonuniform transform не следует считать перенесёнными. GenerateLod устарел и лишь возвращает индексы; для нового процесса рассмотрите ImporterMesh.GenerateLods.
25 Windows headless-проверок подтвердили CPU-массивы, порядок атрибутов, normals/tangents, индексацию, простой импорт и ограничения skinning. GPU Commit/readback, видимая поверхность, normal-map швы, деформация скелета, LOD и производительность рендера не приняты этим набором.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
SurfaceToolКонструктор
public SurfaceTool();Создаёт собственный RefCounted без вершин; начальный primitive Lines, skin count 4. Перед добавлением вершин вызовите Begin.
Методы38
AddIndexvoid
public void AddIndex(int index);Добавляет неотрицательный индекс в текущий список. Setter не проверяет index < vertexCount: корректность верхней границы и кратность трём для triangles обеспечьте сами. Не создаёт новую вершину.
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
indexНеотрицательный индекс существующей вершины; должен быть меньше vertexCount.
AddTriangleFan3 перегрузки
public void AddTriangleFan(Vector3[] vertices, Vector2[] uvs, Color[] colors, Vector2[] uv2S, Vector3[] normals, Reckfell.Collections.Array tangents);Разворачивает веер (0,1,2), (0,2,3)… в независимые углы Triangles, без индексов. Нужны Begin(Triangles) и минимум 3 точки. Пустые дополнительные каналы используют текущие значения; короткие непустые могут оставлять latched-остатки — задавайте полную длину на каждую исходную вершину. Span-overload требует все аргументы.
| Имя | Тип | По умолчанию |
|---|---|---|
vertices | Vector3[] | — |
uvs | Vector2[] | — |
colors | Color[] | — |
uv2S | Vector2[] | — |
normals | Vector3[] | — |
tangents | Reckfell.Collections.Array | — |
verticesМинимум три вершины веера; последующие треугольники используют вершину 0.
uvsНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
colorsНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
uv2SНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
normalsНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
tangentsНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
public void AddTriangleFan(Vector3[] vertices, Vector2[] uvs = null, Color[] colors = null, Vector2[] uv2S = null, Vector3[] normals = null, Reckfell.Collections.Array<Plane> tangents = null);Разворачивает веер (0,1,2), (0,2,3)… в независимые углы Triangles, без индексов. Нужны Begin(Triangles) и минимум 3 точки. Пустые дополнительные каналы используют текущие значения; короткие непустые могут оставлять latched-остатки — задавайте полную длину на каждую исходную вершину. Span-overload требует все аргументы.
| Имя | Тип | По умолчанию |
|---|---|---|
vertices | Vector3[] | — |
uvs | Vector2[] | null |
colors | Color[] | null |
uv2S | Vector2[] | null |
normals | Vector3[] | null |
tangents | Reckfell.Collections.Array<Plane> | null |
verticesМинимум три вершины веера; последующие треугольники используют вершину 0.
uvsНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
colorsНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
uv2SНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
normalsНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
tangentsНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
public void AddTriangleFan(ReadOnlySpan<Vector3> vertices, ReadOnlySpan<Vector2> uvs, ReadOnlySpan<Color> colors, ReadOnlySpan<Vector2> uv2S, ReadOnlySpan<Vector3> normals, Reckfell.Collections.Array<Plane> tangents);Разворачивает веер (0,1,2), (0,2,3)… в независимые углы Triangles, без индексов. Нужны Begin(Triangles) и минимум 3 точки. Пустые дополнительные каналы используют текущие значения; короткие непустые могут оставлять latched-остатки — задавайте полную длину на каждую исходную вершину. Span-overload требует все аргументы.
| Имя | Тип | По умолчанию |
|---|---|---|
vertices | ReadOnlySpan<Vector3> | — |
uvs | ReadOnlySpan<Vector2> | — |
colors | ReadOnlySpan<Color> | — |
uv2S | ReadOnlySpan<Vector2> | — |
normals | ReadOnlySpan<Vector3> | — |
tangents | Reckfell.Collections.Array<Plane> | — |
verticesМинимум три вершины веера; последующие треугольники используют вершину 0.
uvsНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
colorsНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
uv2SНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
normalsНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
tangentsНеобязательный канал веера: пусто/допустимый null для latched-значений либо полное значение на каждую входную вершину. Tangents — Plane с xyz и handedness в D.
AddVertexvoid
public void AddVertex(Vector3 vertex);Копирует позицию и текущие latched-атрибуты в очередной угол. Нужен Begin; после первой вершины набор каналов фиксирован. При skinning bones/weights должны иметь одинаковую длину; предпочтительны ровно четыре заранее обработанных влияния.
| Имя | Тип | По умолчанию |
|---|---|---|
vertex | Vector3 | — |
vertexПозиция очередного угла в локальной системе создаваемой поверхности.
AppendFromvoid
public void AppendFrom(Mesh existing, int surface, Transform3D transform);Добавляет одну source surface, преобразуя позиции Transform3D и сдвигая индексы. Нормали преобразуются basis напрямую, не inverse transpose; при nonuniform scale это требует отдельной коррекции. Tangent handedness меняется при отражении. Не объединяйте несовместимые primitive/форматы и indexed/nonindexed данные без подготовки.
| Имя | Тип | По умолчанию |
|---|---|---|
existing | Mesh | — |
surface | int | — |
transform | Transform3D | — |
existingНепустой Mesh с доступными данными выбранной surface.
surfaceСуществующий индекс поверхности исходного Mesh, не ID материала.
transformПреобразование source→рабочая система; nonuniform basis не корректирует normals inverse-transpose автоматически.
Beginvoid
public void Begin(Mesh.PrimitiveType primitive);Очищает текущее состояние, задаёт primitive и разрешает AddVertex. Сбрасывает material/custom formats/skin count, поэтому задавайте их в подходящий момент заново. Не добавляет поверхность к предыдущей геометрии.
| Имя | Тип | По умолчанию |
|---|---|---|
primitive | Mesh.PrimitiveType | — |
primitiveРежим примитивов Mesh; normals/tangents/fan требуют Triangles.
Clearvoid
public void Clear();Удаляет геометрию, индексы, материал и форматы; begun=false, primitive=Lines, skin count=4. Не является Begin. Перед следующей AddVertex нужен Begin. Явно задавайте атрибуты новой поверхности: не считайте все latched-значения автоматически обнулёнными.
Commit2 перегрузки
public ArrayMesh Commit(ArrayMesh existing, uint flags);Создаёт ArrayMesh либо добавляет новую поверхность в existing, сохраняя прежние поверхности. Пустой tool возвращает mesh без добавления. Использует текущий material; не очищает tool и не передаёт blend shapes/LOD. Не освобождайте возвращённый алиас existing отдельно от владельца. Рендер не проверен CPU-набором.
| Имя | Тип | По умолчанию |
|---|---|---|
existing | ArrayMesh | — |
flags | uint | — |
existingArrayMesh для добавления поверхности либо null для нового; результат может быть тем же объектом.
flagsФлаги поверхности/сжатия как целочисленная битовая маска; основной overload ulong, uint-вариант адаптер. Не shader/render feature switches.
ArrayMeshНовый собственный ArrayMesh либо тот же existing с добавленной поверхностью. Не отдельная копия existing.
public ArrayMesh Commit(ArrayMesh existing = null, ulong flags = 0);Создаёт ArrayMesh либо добавляет новую поверхность в existing, сохраняя прежние поверхности. Пустой tool возвращает mesh без добавления. Использует текущий material; не очищает tool и не передаёт blend shapes/LOD. Не освобождайте возвращённый алиас existing отдельно от владельца. Рендер не проверен CPU-набором.
| Имя | Тип | По умолчанию |
|---|---|---|
existing | ArrayMesh | null |
flags | ulong | 0 |
existingArrayMesh для добавления поверхности либо null для нового; результат может быть тем же объектом.
flagsФлаги поверхности/сжатия как целочисленная битовая маска; основной overload ulong, uint-вариант адаптер. Не shader/render feature switches.
ArrayMeshНовый собственный ArrayMesh либо тот же existing с добавленной поверхностью. Не отдельная копия existing.
CommitToArraysReckfell.Collections.Array
public Reckfell.Collections.Array CommitToArrays();Создаёт отдельный не типизированный Array Mesh.ArrayType.Max слотов с packed-массивами активных каналов. Неиспользуемые слоты Nil. Не очищает tool и не создаёт GPU-поверхность; освободите возвращённый Array после работы.
Reckfell.Collections.ArrayСобственный Reckfell.Collections.Array фиксированных Mesh.ArrayType-слотов; освободите после работы.
CreateFromvoid
public void CreateFrom(Mesh existing, int surface);Заменяет данные одной surface исходного Mesh, primitive и material; нужны доступные массивы и корректный индекс. Не начинает AddVertex-режим и не переносит весь набор поверхностей/LOD. Следующий Begin очистит импорт.
| Имя | Тип | По умолчанию |
|---|---|---|
existing | Mesh | — |
surface | int | — |
existingНепустой Mesh с доступными данными выбранной surface.
surfaceСуществующий индекс поверхности исходного Mesh, не ID материала.
CreateFromArraysvoid
public void CreateFromArrays(Reckfell.Collections.Array arrays, Mesh.PrimitiveType primitiveType = Mesh.PrimitiveType.Triangles);Заменяет состояние согласованным набором Mesh.ArrayType-слотов; primitiveType по умолчанию Triangles. Это не произвольный список вершин. Длины и типы каналов должны соответствовать vertexCount. Не устанавливает begun для последующего AddVertex.
| Имя | Тип | По умолчанию |
|---|---|---|
arrays | Reckfell.Collections.Array | — |
primitiveType | Mesh.PrimitiveType | Mesh.PrimitiveType.Triangles |
arraysСогласованный Array слотов Mesh.ArrayType, как CommitToArrays; не произвольный список векторов.
primitiveTypeРежим примитивов Mesh; normals/tangents/fan требуют Triangles.
CreateFromBlendShapevoid
public void CreateFromBlendShape(Mesh existing, int surface, string blendShape);Загружает один именованный blend shape одной surface. Позиции/нормали/тангенты берёт из shape, остальные каналы/индексы — из base surface. Не создаёт готовую анимацию всех shape; имя и индекс должны существовать. GPU-импорт здесь не проверен.
| Имя | Тип | По умолчанию |
|---|---|---|
existing | Mesh | — |
surface | int | — |
blendShape | string | — |
existingНепустой Mesh с доступными данными выбранной surface.
surfaceСуществующий индекс поверхности исходного Mesh, не ID материала.
blendShapeТочное имя существующего blend shape исходного Mesh.
Deindexvoid
public void Deindex();Разворачивает indexed-углы в полный vertex list и удаляет индексный канал. Без индексов ничего не меняет. Нужны корректные индексы: ошибка верхней границы диагностируется после начала операции.
GenerateLodint[] · Устарело
public int[] GenerateLod(float ndThreshold, int targetIndexCount = 3);Устаревший индексный simplifier; исходники рекомендуют ImporterMesh.GenerateLods. Нужны vertex/index arrays, кратность индексов трём, 0 ≤ targetIndexCount ≤ currentIndexCount. Сохраняет топологическую границу; не устанавливает LOD в Mesh и не меняет рабочую геометрию. Из-за deprecation-диагностики здесь не запускался.
| Имя | Тип | По умолчанию |
|---|---|---|
ndThreshold | float | — |
targetIndexCount | int | 3 |
ndThresholdДопуск ошибки simplifier, не угол нормалей; текущий вызов передаёт его в Meshoptimizer и блокирует границу.
targetIndexCountЦелевое количество индексов, не треугольников; по умолчанию 3, фактический результат зависит от ограничений simplifier.
int[]int[] альтернативных треугольных индексов либо пустой/диагностический результат; не готовый LOD-ресурс.
GenerateNormalsvoid
public void GenerateNormals(bool flip = false);Пересчитывает normals для Triangles с числом углов, кратным трём. Smooth groups используют совпадающую позицию; uint.MaxValue оставляет face normal. flip меняет направление нормалей, не порядок треугольников. Для indexed-входа временно deindex и затем index; число/порядок вершин может измениться.
| Имя | Тип | По умолчанию |
|---|---|---|
flip | bool | false |
fliptrue меняет направление генерируемых normals, не winding индексов.
GenerateTangentsvoid
public void GenerateTangents();Генерирует tangent xyzw через текущий Meshoptimizer. Нужны Triangles, normals, UV и кратное трём число углов; вырожденные UV не исправляются созданием правдоподобной развёртки. Public binding вызывает режим без split; GPU/normal-map качество проверяйте отдельно.
GetAabbAabb
public Aabb GetAabb();Вычисляет Aabb по всем сохранённым позициям, включая неиспользуемые индексами вершины. Пустой tool диагностируется с нулевым fallback. Не мировой bounding box MeshInstance3D.
AabbЛокальный Aabb рабочих вершин; для пустого tool диагностический нулевой fallback.
GetCustomFormatSurfaceTool.CustomFormat
public SurfaceTool.CustomFormat GetCustomFormat(int channelIndex);Возвращает формат custom-канала 0…3; Max означает не настроенный канал. Наличие выбранного формата не доказывает наличие данных SetCustom.
| Имя | Тип | По умолчанию |
|---|---|---|
channelIndex | int | — |
channelIndexИндекс custom-канала 0…3, не битовая маска.
SurfaceTool.CustomFormatCustomFormat канала; Max при отсутствии настройки или диагностике неверного индекса.
GetPrimitiveTypeMesh.PrimitiveType
public Mesh.PrimitiveType GetPrimitiveType();Возвращает текущий primitive; новый/очищенный tool имеет Lines. Это не проверка корректности количества углов для режима.
Mesh.PrimitiveTypeТекущий Mesh.PrimitiveType; после Clear это Lines.
GetSkinWeightCountSurfaceTool.SkinWeightCount
public SurfaceTool.SkinWeightCount GetSkinWeightCount();Возвращает текущее выбранное число влияний, не длину последнего входного массива. Begin/Clear восстанавливают Skin4Weights. Getter=Skin8Weights до Begin не доказывает успешную 8-weight поверхность.
SurfaceTool.SkinWeightCountТекущий enum Skin4Weights/Skin8Weights; не подтверждение успешного GPU-skinning.
Indexvoid
public void Index();Если индексов ещё нет, объединяет точные полные Vertex-дубликаты и создаёт индексы. Сравнивает атрибуты/smooth group, не только позицию; не является weld с допуском. При уже имеющихся индексах ничего не делает.
OptimizeIndicesForCachevoid
public void OptimizeIndicesForCache();Переставляет треугольные индексы для vertex cache. Нужны непустые корректные индексы, Triangles, кратность трём и доступный Meshoptimizer. Не обещает снижение vertexCount или ускорение конкретного GPU.
SetBones2 перегрузки
public void SetBones(int[] bones);Задаёт bone indices следующей вершины. Нужен парный SetWeights той же длины; короткие пары дополняются нулями, избыточные в текущем коде сохраняют меньшие веса. Передавайте ровно четыре корректных влияния в обычном Begin-маршруте.
| Имя | Тип | По умолчанию |
|---|---|---|
bones | int[] | — |
bonesИндексы костей, той же длины что weights; обычный безопасный маршрут использует ровно 4.
public void SetBones(ReadOnlySpan<int> bones);Задаёт bone indices следующей вершины. Нужен парный SetWeights той же длины; короткие пары дополняются нулями, избыточные в текущем коде сохраняют меньшие веса. Передавайте ровно четыре корректных влияния в обычном Begin-маршруте.
| Имя | Тип | По умолчанию |
|---|---|---|
bones | ReadOnlySpan<int> | — |
bonesИндексы костей, той же длины что weights; обычный безопасный маршрут использует ровно 4.
SetColorvoid
public void SetColor(Color color);Включает COLOR до первой вершины и задаёт цвет последующих AddVertex. После первой вершины допустимо менять только уже включённый канал. Сам по себе не включает использование цвета в материале.
| Имя | Тип | По умолчанию |
|---|---|---|
color | Color | — |
colorЦвет следующего угла; материал должен явно использовать vertex color.
SetCustomvoid
public void SetCustom(int channelIndex, Color customColor);Задаёт компоненты следующей вершины через Color без обещания цветовой семантики. Нужен SetCustomFormat и включение канала до первой вершины. Формат определяет компоненты, точность и кодирование в массиве.
| Имя | Тип | По умолчанию |
|---|---|---|
channelIndex | int | — |
customColor | Color | — |
channelIndexИндекс custom-канала 0…3, не битовая маска.
customColorКомпоненты custom-данных в RGBA-полях; формат задаёт кодирование, не цветовое пространство.
SetCustomFormatvoid
public void SetCustomFormat(int channelIndex, SurfaceTool.CustomFormat format);Задаёт формат custom-канала 0…3 после Begin и до первой вершины. Сам по себе не включает канал: вызовите SetCustom до AddVertex. Не меняйте интерпретацию уже заполненного канала; Max обозначает не настроенный формат.
| Имя | Тип | По умолчанию |
|---|---|---|
channelIndex | int | — |
format | SurfaceTool.CustomFormat | — |
channelIndexИндекс custom-канала 0…3, не битовая маска.
formatCustomFormat хранения; задавайте после Begin до включения/заполнения канала.
SetMaterialvoid
public void SetMaterial(Material material);Сохраняет общий Material для следующего Commit. Не добавляет канал COLOR/UV и не назначает материал уже существующим поверхностям. Begin/Clear сбрасывает ссылку.
| Имя | Тип | По умолчанию |
|---|---|---|
material | Material | — |
materialОбщий Material либо null; назначается следующей поверхности при Commit.
SetNormalvoid
public void SetNormal(Vector3 normal);Задаёт normal следующей вершины, не исправляя ранее добавленные. Нужен единичный вектор; setter не нормализует его автоматически. Канал должен быть включён до первой вершины либо создан GenerateNormals.
| Имя | Тип | По умолчанию |
|---|---|---|
normal | Vector3 | — |
normalЕдиничная нормаль следующего угла в системе позиций.
SetSkinWeightCountvoid
public void SetSkinWeightCount(SurfaceTool.SkinWeightCount count);Принимает enum только пока begun=false. Однако Begin вызывает Clear и сбрасывает выбор на Skin4Weights: вызов Skin8Weights перед Begin не обеспечивает восемь влияний. Этот дефект воспроизведён без правки движка; рабочий 8-weight маршрут не подтверждён.
| Имя | Тип | По умолчанию |
|---|---|---|
count | SurfaceTool.SkinWeightCount | — |
countSkinWeightCount enum; учтите сброс на 4 при Begin.
SetSmoothGroupvoid
public void SetSmoothGroup(uint index);Задаёт uint-группу следующих вершин для GenerateNormals и точной индексации. По умолчанию 0, uint.MaxValue обозначает flat shading. Это не немедленное изменение normals или материала.
| Имя | Тип | По умолчанию |
|---|---|---|
index | uint | — |
indexuint smooth-group ID; uint.MaxValue отключает сглаживание.
SetTangentvoid
public void SetTangent(Plane tangent);Plane используется как упаковка tangent: normal → xyz, D → handedness w, обычно ±1. Это не геометрическая плоскость поверхности. Включите канал до первой вершины.
| Имя | Тип | По умолчанию |
|---|---|---|
tangent | Plane | — |
tangentPlane: Normal — tangent xyz, D — знак handedness, обычно ±1.
SetUVvoid
public void SetUV(Vector2 uV);Задаёт UV следующей вершины; включите канал до первой AddVertex. Не создаёт автоматическую развёртку и не масштабирует позицию. UV обычно нормализованы, но setter не ограничивает их 0…1.
| Имя | Тип | По умолчанию |
|---|---|---|
uV | Vector2 | — |
uVUV следующего угла; не позиция вершины и не готовая развёртка.
SetUV2void
public void SetUV2(Vector2 uV2);Задаёт второй UV-канал следующей вершины; включите до первой вершины. Не генерирует lightmap unwrap и не запекает свет.
| Имя | Тип | По умолчанию |
|---|---|---|
uV2 | Vector2 | — |
uV2UV следующего угла; не позиция вершины и не готовая развёртка.
SetWeights2 перегрузки
public void SetWeights(ReadOnlySpan<float> weights);Задаёт веса следующей вершины; не выбирает скелет и не нормализует автоматически точный/короткий список. Нужен SetBones той же длины. Предварительно нормализуйте ровно четыре влияния, не полагайтесь на ошибочный отбор избыточных.
| Имя | Тип | По умолчанию |
|---|---|---|
weights | ReadOnlySpan<float> | — |
weightsНеотрицательные нормализованные веса в паре с bones, обычно ровно 4.
public void SetWeights(float[] weights);Задаёт веса следующей вершины; не выбирает скелет и не нормализует автоматически точный/короткий список. Нужен SetBones той же длины. Предварительно нормализуйте ровно четыре влияния, не полагайтесь на ошибочный отбор избыточных.
| Имя | Тип | По умолчанию |
|---|---|---|
weights | float[] | — |
weightsНеотрицательные нормализованные веса в паре с bones, обычно ровно 4.
SurfaceTool.CustomFormat
| Значение | Описание |
|---|---|
Max = 8 | Используется для обозначения отключенного пользовательского канала. |
RFloat = 4 | Хранит данные, переданные |
RgFloat = 5 | Хранит данные, переданные |
RgHalf = 2 | Хранит данные, переданные |
RgbFloat = 6 | Хранит данные, переданные |
Rgba8Snorm = 1 | Ограничивает диапазон данных, передаваемых в |
Rgba8Unorm = 0 | Ограничивает диапазон данных, передаваемых в |
RgbaFloat = 7 | Хранит данные, переданные |
RgbaHalf = 3 | Хранит данные, переданные |
SurfaceTool.SkinWeightCount
| Значение | Описание |
|---|---|
Skin4Weights = 0 | На каждую отдельную вершину могут влиять только 4 веса костей. |
Skin8Weights = 1 | На каждую отдельную вершину может влиять до 8 весов костей. |