reckfellENGINE

SurfaceTool

Пошаговое построение одной поверхности: вершины, атрибуты, индексы и массивы меша.

На этой странице
class SurfaceToolReckfellSharpНаследует RefCounted

SurfaceTool — собственный RefCounted-строитель, не Entity и не готовый Mesh. Обычный порядок: Begin → атрибуты перед AddVertex → нормали/тангенты → Index при необходимости → CommitToArrays либо Commit. Begin очищает прежнюю геометрию, material, custom formats и skin count; повторный Begin не добавляет вторую поверхность. Освобождайте собственный tool через Dispose.

C#
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Конструктор
# SurfaceTool
C#
public SurfaceTool();

Создаёт собственный RefCounted без вершин; начальный primitive Lines, skin count 4. Перед добавлением вершин вызовите Begin.

Методы38

AddIndexvoid
# AddIndex
C#
public void AddIndex(int index);

Добавляет неотрицательный индекс в текущий список. Setter не проверяет index < vertexCount: корректность верхней границы и кратность трём для triangles обеспечьте сами. Не создаёт новую вершину.

Параметры
ИмяТипПо умолчанию
indexint—
index

Неотрицательный индекс существующей вершины; должен быть меньше vertexCount.

AddTriangleFan3 перегрузки
# AddTriangleFan · 1/3
C#
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 требует все аргументы.

Параметры
ИмяТипПо умолчанию
verticesVector3[]—
uvsVector2[]—
colorsColor[]—
uv2SVector2[]—
normalsVector3[]—
tangentsReckfell.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.

# AddTriangleFan · 2/3
C#
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 требует все аргументы.

Параметры
ИмяТипПо умолчанию
verticesVector3[]—
uvsVector2[]null
colorsColor[]null
uv2SVector2[]null
normalsVector3[]null
tangentsReckfell.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.

# AddTriangleFan · 3/3
C#
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 требует все аргументы.

Параметры
ИмяТипПо умолчанию
verticesReadOnlySpan<Vector3>—
uvsReadOnlySpan<Vector2>—
colorsReadOnlySpan<Color>—
uv2SReadOnlySpan<Vector2>—
normalsReadOnlySpan<Vector3>—
tangentsReckfell.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
# AddVertex
C#
public void AddVertex(Vector3 vertex);

Копирует позицию и текущие latched-атрибуты в очередной угол. Нужен Begin; после первой вершины набор каналов фиксирован. При skinning bones/weights должны иметь одинаковую длину; предпочтительны ровно четыре заранее обработанных влияния.

Параметры
ИмяТипПо умолчанию
vertexVector3—
vertex

Позиция очередного угла в локальной системе создаваемой поверхности.

AppendFromvoid
# AppendFrom
C#
public void AppendFrom(Mesh existing, int surface, Transform3D transform);

Добавляет одну source surface, преобразуя позиции Transform3D и сдвигая индексы. Нормали преобразуются basis напрямую, не inverse transpose; при nonuniform scale это требует отдельной коррекции. Tangent handedness меняется при отражении. Не объединяйте несовместимые primitive/форматы и indexed/nonindexed данные без подготовки.

Параметры
ИмяТипПо умолчанию
existingMesh—
surfaceint—
transformTransform3D—
existing

Непустой Mesh с доступными данными выбранной surface.

surface

Существующий индекс поверхности исходного Mesh, не ID материала.

transform

Преобразование source→рабочая система; nonuniform basis не корректирует normals inverse-transpose автоматически.

Beginvoid
# Begin
C#
public void Begin(Mesh.PrimitiveType primitive);

Очищает текущее состояние, задаёт primitive и разрешает AddVertex. Сбрасывает material/custom formats/skin count, поэтому задавайте их в подходящий момент заново. Не добавляет поверхность к предыдущей геометрии.

Параметры
ИмяТипПо умолчанию
primitiveMesh.PrimitiveType—
primitive

Режим примитивов Mesh; normals/tangents/fan требуют Triangles.

Clearvoid
# Clear
C#
public void Clear();

Удаляет геометрию, индексы, материал и форматы; begun=false, primitive=Lines, skin count=4. Не является Begin. Перед следующей AddVertex нужен Begin. Явно задавайте атрибуты новой поверхности: не считайте все latched-значения автоматически обнулёнными.

Commit2 перегрузки
# Commit · 1/2
C#
public ArrayMesh Commit(ArrayMesh existing, uint flags);

Создаёт ArrayMesh либо добавляет новую поверхность в existing, сохраняя прежние поверхности. Пустой tool возвращает mesh без добавления. Использует текущий material; не очищает tool и не передаёт blend shapes/LOD. Не освобождайте возвращённый алиас existing отдельно от владельца. Рендер не проверен CPU-набором.

Параметры
ИмяТипПо умолчанию
existingArrayMesh—
flagsuint—
existing

ArrayMesh для добавления поверхности либо null для нового; результат может быть тем же объектом.

flags

Флаги поверхности/сжатия как целочисленная битовая маска; основной overload ulong, uint-вариант адаптер. Не shader/render feature switches.

Возвращает ArrayMesh

Новый собственный ArrayMesh либо тот же existing с добавленной поверхностью. Не отдельная копия existing.

# Commit · 2/2
C#
public ArrayMesh Commit(ArrayMesh existing = null, ulong flags = 0);

Создаёт ArrayMesh либо добавляет новую поверхность в existing, сохраняя прежние поверхности. Пустой tool возвращает mesh без добавления. Использует текущий material; не очищает tool и не передаёт blend shapes/LOD. Не освобождайте возвращённый алиас existing отдельно от владельца. Рендер не проверен CPU-набором.

Параметры
ИмяТипПо умолчанию
existingArrayMeshnull
flagsulong0
existing

ArrayMesh для добавления поверхности либо null для нового; результат может быть тем же объектом.

flags

Флаги поверхности/сжатия как целочисленная битовая маска; основной overload ulong, uint-вариант адаптер. Не shader/render feature switches.

Возвращает ArrayMesh

Новый собственный ArrayMesh либо тот же existing с добавленной поверхностью. Не отдельная копия existing.

CommitToArraysReckfell.Collections.Array
# CommitToArrays
C#
public Reckfell.Collections.Array CommitToArrays();

Создаёт отдельный не типизированный Array Mesh.ArrayType.Max слотов с packed-массивами активных каналов. Неиспользуемые слоты Nil. Не очищает tool и не создаёт GPU-поверхность; освободите возвращённый Array после работы.

Возвращает Reckfell.Collections.Array

Собственный Reckfell.Collections.Array фиксированных Mesh.ArrayType-слотов; освободите после работы.

CreateFromvoid
# CreateFrom
C#
public void CreateFrom(Mesh existing, int surface);

Заменяет данные одной surface исходного Mesh, primitive и material; нужны доступные массивы и корректный индекс. Не начинает AddVertex-режим и не переносит весь набор поверхностей/LOD. Следующий Begin очистит импорт.

Параметры
ИмяТипПо умолчанию
existingMesh—
surfaceint—
existing

Непустой Mesh с доступными данными выбранной surface.

surface

Существующий индекс поверхности исходного Mesh, не ID материала.

CreateFromArraysvoid
# CreateFromArrays
C#
public void CreateFromArrays(Reckfell.Collections.Array arrays, Mesh.PrimitiveType primitiveType = Mesh.PrimitiveType.Triangles);

Заменяет состояние согласованным набором Mesh.ArrayType-слотов; primitiveType по умолчанию Triangles. Это не произвольный список вершин. Длины и типы каналов должны соответствовать vertexCount. Не устанавливает begun для последующего AddVertex.

Параметры
ИмяТипПо умолчанию
arraysReckfell.Collections.Array—
primitiveTypeMesh.PrimitiveTypeMesh.PrimitiveType.Triangles
arrays

Согласованный Array слотов Mesh.ArrayType, как CommitToArrays; не произвольный список векторов.

primitiveType

Режим примитивов Mesh; normals/tangents/fan требуют Triangles.

CreateFromBlendShapevoid
# CreateFromBlendShape
C#
public void CreateFromBlendShape(Mesh existing, int surface, string blendShape);

Загружает один именованный blend shape одной surface. Позиции/нормали/тангенты берёт из shape, остальные каналы/индексы — из base surface. Не создаёт готовую анимацию всех shape; имя и индекс должны существовать. GPU-импорт здесь не проверен.

Параметры
ИмяТипПо умолчанию
existingMesh—
surfaceint—
blendShapestring—
existing

Непустой Mesh с доступными данными выбранной surface.

surface

Существующий индекс поверхности исходного Mesh, не ID материала.

blendShape

Точное имя существующего blend shape исходного Mesh.

Deindexvoid
# Deindex
C#
public void Deindex();

Разворачивает indexed-углы в полный vertex list и удаляет индексный канал. Без индексов ничего не меняет. Нужны корректные индексы: ошибка верхней границы диагностируется после начала операции.

GenerateLodint[] · Устарело
# GenerateLod
C#
public int[] GenerateLod(float ndThreshold, int targetIndexCount = 3);

Устаревший индексный simplifier; исходники рекомендуют ImporterMesh.GenerateLods. Нужны vertex/index arrays, кратность индексов трём, 0 ≤ targetIndexCount ≤ currentIndexCount. Сохраняет топологическую границу; не устанавливает LOD в Mesh и не меняет рабочую геометрию. Из-за deprecation-диагностики здесь не запускался.

Параметры
ИмяТипПо умолчанию
ndThresholdfloat—
targetIndexCountint3
ndThreshold

Допуск ошибки simplifier, не угол нормалей; текущий вызов передаёт его в Meshoptimizer и блокирует границу.

targetIndexCount

Целевое количество индексов, не треугольников; по умолчанию 3, фактический результат зависит от ограничений simplifier.

Возвращает int[]

int[] альтернативных треугольных индексов либо пустой/диагностический результат; не готовый LOD-ресурс.

GenerateNormalsvoid
# GenerateNormals
C#
public void GenerateNormals(bool flip = false);

Пересчитывает normals для Triangles с числом углов, кратным трём. Smooth groups используют совпадающую позицию; uint.MaxValue оставляет face normal. flip меняет направление нормалей, не порядок треугольников. Для indexed-входа временно deindex и затем index; число/порядок вершин может измениться.

Параметры
ИмяТипПо умолчанию
flipboolfalse
flip

true меняет направление генерируемых normals, не winding индексов.

GenerateTangentsvoid
# GenerateTangents
C#
public void GenerateTangents();

Генерирует tangent xyzw через текущий Meshoptimizer. Нужны Triangles, normals, UV и кратное трём число углов; вырожденные UV не исправляются созданием правдоподобной развёртки. Public binding вызывает режим без split; GPU/normal-map качество проверяйте отдельно.

GetAabbAabb
# GetAabb
C#
public Aabb GetAabb();

Вычисляет Aabb по всем сохранённым позициям, включая неиспользуемые индексами вершины. Пустой tool диагностируется с нулевым fallback. Не мировой bounding box MeshInstance3D.

Возвращает Aabb

Локальный Aabb рабочих вершин; для пустого tool диагностический нулевой fallback.

GetCustomFormatSurfaceTool.CustomFormat
# GetCustomFormat
C#
public SurfaceTool.CustomFormat GetCustomFormat(int channelIndex);

Возвращает формат custom-канала 0…3; Max означает не настроенный канал. Наличие выбранного формата не доказывает наличие данных SetCustom.

Параметры
ИмяТипПо умолчанию
channelIndexint—
channelIndex

Индекс custom-канала 0…3, не битовая маска.

Возвращает SurfaceTool.CustomFormat

CustomFormat канала; Max при отсутствии настройки или диагностике неверного индекса.

GetPrimitiveTypeMesh.PrimitiveType
# GetPrimitiveType
C#
public Mesh.PrimitiveType GetPrimitiveType();

Возвращает текущий primitive; новый/очищенный tool имеет Lines. Это не проверка корректности количества углов для режима.

Возвращает Mesh.PrimitiveType

Текущий Mesh.PrimitiveType; после Clear это Lines.

GetSkinWeightCountSurfaceTool.SkinWeightCount
# GetSkinWeightCount
C#
public SurfaceTool.SkinWeightCount GetSkinWeightCount();

Возвращает текущее выбранное число влияний, не длину последнего входного массива. Begin/Clear восстанавливают Skin4Weights. Getter=Skin8Weights до Begin не доказывает успешную 8-weight поверхность.

Возвращает SurfaceTool.SkinWeightCount

Текущий enum Skin4Weights/Skin8Weights; не подтверждение успешного GPU-skinning.

Indexvoid
# Index
C#
public void Index();

Если индексов ещё нет, объединяет точные полные Vertex-дубликаты и создаёт индексы. Сравнивает атрибуты/smooth group, не только позицию; не является weld с допуском. При уже имеющихся индексах ничего не делает.

OptimizeIndicesForCachevoid
# OptimizeIndicesForCache
C#
public void OptimizeIndicesForCache();

Переставляет треугольные индексы для vertex cache. Нужны непустые корректные индексы, Triangles, кратность трём и доступный Meshoptimizer. Не обещает снижение vertexCount или ускорение конкретного GPU.

SetBones2 перегрузки
# SetBones · 1/2
C#
public void SetBones(int[] bones);

Задаёт bone indices следующей вершины. Нужен парный SetWeights той же длины; короткие пары дополняются нулями, избыточные в текущем коде сохраняют меньшие веса. Передавайте ровно четыре корректных влияния в обычном Begin-маршруте.

Параметры
ИмяТипПо умолчанию
bonesint[]—
bones

Индексы костей, той же длины что weights; обычный безопасный маршрут использует ровно 4.

# SetBones · 2/2
C#
public void SetBones(ReadOnlySpan<int> bones);

Задаёт bone indices следующей вершины. Нужен парный SetWeights той же длины; короткие пары дополняются нулями, избыточные в текущем коде сохраняют меньшие веса. Передавайте ровно четыре корректных влияния в обычном Begin-маршруте.

Параметры
ИмяТипПо умолчанию
bonesReadOnlySpan<int>—
bones

Индексы костей, той же длины что weights; обычный безопасный маршрут использует ровно 4.

SetColorvoid
# SetColor
C#
public void SetColor(Color color);

Включает COLOR до первой вершины и задаёт цвет последующих AddVertex. После первой вершины допустимо менять только уже включённый канал. Сам по себе не включает использование цвета в материале.

Параметры
ИмяТипПо умолчанию
colorColor—
color

Цвет следующего угла; материал должен явно использовать vertex color.

SetCustomvoid
# SetCustom
C#
public void SetCustom(int channelIndex, Color customColor);

Задаёт компоненты следующей вершины через Color без обещания цветовой семантики. Нужен SetCustomFormat и включение канала до первой вершины. Формат определяет компоненты, точность и кодирование в массиве.

Параметры
ИмяТипПо умолчанию
channelIndexint—
customColorColor—
channelIndex

Индекс custom-канала 0…3, не битовая маска.

customColor

Компоненты custom-данных в RGBA-полях; формат задаёт кодирование, не цветовое пространство.

SetCustomFormatvoid
# SetCustomFormat
C#
public void SetCustomFormat(int channelIndex, SurfaceTool.CustomFormat format);

Задаёт формат custom-канала 0…3 после Begin и до первой вершины. Сам по себе не включает канал: вызовите SetCustom до AddVertex. Не меняйте интерпретацию уже заполненного канала; Max обозначает не настроенный формат.

Параметры
ИмяТипПо умолчанию
channelIndexint—
formatSurfaceTool.CustomFormat—
channelIndex

Индекс custom-канала 0…3, не битовая маска.

format

CustomFormat хранения; задавайте после Begin до включения/заполнения канала.

SetMaterialvoid
# SetMaterial
C#
public void SetMaterial(Material material);

Сохраняет общий Material для следующего Commit. Не добавляет канал COLOR/UV и не назначает материал уже существующим поверхностям. Begin/Clear сбрасывает ссылку.

Параметры
ИмяТипПо умолчанию
materialMaterial—
material

Общий Material либо null; назначается следующей поверхности при Commit.

SetNormalvoid
# SetNormal
C#
public void SetNormal(Vector3 normal);

Задаёт normal следующей вершины, не исправляя ранее добавленные. Нужен единичный вектор; setter не нормализует его автоматически. Канал должен быть включён до первой вершины либо создан GenerateNormals.

Параметры
ИмяТипПо умолчанию
normalVector3—
normal

Единичная нормаль следующего угла в системе позиций.

SetSkinWeightCountvoid
# SetSkinWeightCount
C#
public void SetSkinWeightCount(SurfaceTool.SkinWeightCount count);

Принимает enum только пока begun=false. Однако Begin вызывает Clear и сбрасывает выбор на Skin4Weights: вызов Skin8Weights перед Begin не обеспечивает восемь влияний. Этот дефект воспроизведён без правки движка; рабочий 8-weight маршрут не подтверждён.

Параметры
ИмяТипПо умолчанию
countSurfaceTool.SkinWeightCount—
count

SkinWeightCount enum; учтите сброс на 4 при Begin.

SetSmoothGroupvoid
# SetSmoothGroup
C#
public void SetSmoothGroup(uint index);

Задаёт uint-группу следующих вершин для GenerateNormals и точной индексации. По умолчанию 0, uint.MaxValue обозначает flat shading. Это не немедленное изменение normals или материала.

Параметры
ИмяТипПо умолчанию
indexuint—
index

uint smooth-group ID; uint.MaxValue отключает сглаживание.

SetTangentvoid
# SetTangent
C#
public void SetTangent(Plane tangent);

Plane используется как упаковка tangent: normal → xyz, D → handedness w, обычно ±1. Это не геометрическая плоскость поверхности. Включите канал до первой вершины.

Параметры
ИмяТипПо умолчанию
tangentPlane—
tangent

Plane: Normal — tangent xyz, D — знак handedness, обычно ±1.

SetUVvoid
# SetUV
C#
public void SetUV(Vector2 uV);

Задаёт UV следующей вершины; включите канал до первой AddVertex. Не создаёт автоматическую развёртку и не масштабирует позицию. UV обычно нормализованы, но setter не ограничивает их 0…1.

Параметры
ИмяТипПо умолчанию
uVVector2—
uV

UV следующего угла; не позиция вершины и не готовая развёртка.

SetUV2void
# SetUV2
C#
public void SetUV2(Vector2 uV2);

Задаёт второй UV-канал следующей вершины; включите до первой вершины. Не генерирует lightmap unwrap и не запекает свет.

Параметры
ИмяТипПо умолчанию
uV2Vector2—
uV2

UV следующего угла; не позиция вершины и не готовая развёртка.

SetWeights2 перегрузки
# SetWeights · 1/2
C#
public void SetWeights(ReadOnlySpan<float> weights);

Задаёт веса следующей вершины; не выбирает скелет и не нормализует автоматически точный/короткий список. Нужен SetBones той же длины. Предварительно нормализуйте ровно четыре влияния, не полагайтесь на ошибочный отбор избыточных.

Параметры
ИмяТипПо умолчанию
weightsReadOnlySpan<float>—
weights

Неотрицательные нормализованные веса в паре с bones, обычно ровно 4.

# SetWeights · 2/2
C#
public void SetWeights(float[] weights);

Задаёт веса следующей вершины; не выбирает скелет и не нормализует автоматически точный/короткий список. Нужен SetBones той же длины. Предварительно нормализуйте ровно четыре влияния, не полагайтесь на ошибочный отбор избыточных.

Параметры
ИмяТипПо умолчанию
weightsfloat[]—
weights

Неотрицательные нормализованные веса в паре с bones, обычно ровно 4.

SurfaceTool.CustomFormat

ЗначениеОписание
Max = 8

Используется для обозначения отключенного пользовательского канала.

RFloat = 4

Хранит данные, переданные SurfaceTool.SetCustom как полная точность плавает и использует только красный цвет канал. Mesh.ArrayCustomFormat.RFloat.

RgFloat = 5

Хранит данные, переданные SurfaceTool.SetCustom как полная точность плавает и использует только каналы красного и зеленого цвета. Mesh.ArrayCustomFormat.RgFloat.

RgHalf = 2

Хранит данные, переданные SurfaceTool.SetCustom как половина точности плавает, и использует только каналы красного и зеленого цвета. Mesh.ArrayCustomFormat.RgHalf.

RgbFloat = 6

Хранит данные, переданные SurfaceTool.SetCustom и использует только каналы красного, зеленого и синего цвета. Mesh.ArrayCustomFormat.RgbFloat.

Rgba8Snorm = 1

Ограничивает диапазон данных, передаваемых в SurfaceTool.SetCustom, до нормализованных со знаком от -1 до 1, хранящихся в 8 битах на канал. См. Mesh.ArrayCustomFormat.Rgba8Snorm.

Rgba8Unorm = 0

Ограничивает диапазон данных, передаваемых в SurfaceTool.SetCustom, беззнаковыми нормализованными значениями от 0 до 1, хранящимися в 8 битах на канал. См. Mesh.ArrayCustomFormat.Rgba8Unorm.

RgbaFloat = 7

Хранит данные, переданные SurfaceTool.SetCustom как полная точность плавает и использует все цветные каналы. Mesh.ArrayCustomFormat.RgbaFloat.

RgbaHalf = 3

Хранит данные, переданные SurfaceTool.SetCustom как половина точности плавает и использует все цветные каналы. Mesh.ArrayCustomFormat.RgbaHalf.

SurfaceTool.SkinWeightCount

ЗначениеОписание
Skin4Weights = 0

На каждую отдельную вершину могут влиять только 4 веса костей.

Skin8Weights = 1

На каждую отдельную вершину может влиять до 8 весов костей.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.