PrimitiveMesh
База процедурных примитивов с одной поверхностью.
PrimitiveMesh создаёт одну поверхность из параметров конкретного примитива. Для обычной формы используйте BoxMesh, PlaneMesh, SphereMesh и другие подклассы; для своей формы переопределите _CreateMeshArray. Несколько экземпляров MeshInstance3D могут использовать один ресурс: изменение параметров ресурса общее для них.
AddUV2 подготавливает второй UV-канал, но не означает успешное запекание света. Подготовка Static, нормалей и пригодной развёртки описана в LightmapGI. Для многоповерхностной или произвольной топологии рассмотрите ArrayMesh вместо имитации нескольких поверхностей в этом классе.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
PrimitiveMeshКонструктор
public PrimitiveMesh();Создаёт базовый ресурс PrimitiveMesh, но не готовую форму. Используйте BoxMesh, SphereMesh и другие конкретные примитивы либо переопределите _CreateMeshArray. Базовый класс без вершин не создаст пригодную поверхность. Начальные AddUV2 и FlipFaces равны false, UV2Padding = 2.
Свойства5
AddUV2Свойство
public bool AddUV2 { get; set; }Генерировать второй UV-канал, по умолчанию false. У встроенных примитивов используется их генератор; для собственного массива без UV2 базовый путь масштабирует существующие UV1 с отступом. Это не автоматическая развёртка произвольной геометрии: перекрытия UV1 так не исчезнут. Изменение обновляет геометрию и размер карты, где это поддерживает конкретный примитив; готовую LightmapGI затем нужно запечь заново.
CustomAabbСвойство
public Aabb CustomAabb { get; set; }Пользовательская коробка отсечения меша; по умолчанию пустой Aabb. Не перемещает вершины и не меняет возвращаемую GetAabb() коробку сгенерированной CPU-геометрии. Нужна, например, для учёта смещения вершин шейдером; задайте границы, покрывающие результат анимации.
FlipFacesСвойство
public bool FlipFaces { get; set; }Инвертировать ориентацию индексированных треугольников. В базовой реализации нормали меняют знак, а первые два индекса каждого треугольника меняются местами, когда присутствуют нормали и индексы. По умолчанию false. Не включает двусторонний материал и не заменяет настройку cull mode.
MaterialСвойство
public Material Material { get; set; }Материал единственной поверхности примитива. Назначение меняет ресурс меша и влияет на использующие его экземпляры; это не MeshInstance3D.MaterialOverride. Если геометрия уже создана, материал применяется к поверхности сразу; иначе — при генерации. null очищает назначение. Возвращается ссылка на материал, не независимая копия.
UV2PaddingСвойство
public float UV2Padding { get; set; }Отступы UV2, по умолчанию 2. Конкретный генератор использует их вместе с размером карты и плотностью текселей. Изменение вызывает пересчёт размера карты и геометрии. Подсказка инспектора 0…10 допускает большее значение и не ограничивает сеттер; используйте конечное неотрицательное число. Большой padding не исправляет перекрывающуюся развёртку и не гарантирует отсутствие утечек.
Методы13
GetAddUV2bool
public bool GetAddUV2();Возвращает AddUV2. Генерировать второй UV-канал, по умолчанию false. У встроенных примитивов используется их генератор; для собственного массива без UV2 базовый путь масштабирует существующие UV1 с отступом. Это не автоматическая развёртка произвольной геометрии: перекрытия UV1 так не исчезнут. Изменение обновляет геометрию и размер карты, где это поддерживает конкретный примитив; готовую LightmapGI затем нужно запечь заново.
boolТекущее значение AddUV2.
GetCustomAabbAabb
public Aabb GetCustomAabb();Возвращает CustomAabb. Пользовательская коробка отсечения меша; по умолчанию пустой Aabb. Не перемещает вершины и не меняет возвращаемую GetAabb() коробку сгенерированной CPU-геометрии. Нужна, например, для учёта смещения вершин шейдером; задайте границы, покрывающие результат анимации.
AabbТекущее значение CustomAabb.
GetFlipFacesbool
public bool GetFlipFaces();Возвращает FlipFaces. Инвертировать ориентацию индексированных треугольников. В базовой реализации нормали меняют знак, а первые два индекса каждого треугольника меняются местами, когда присутствуют нормали и индексы. По умолчанию false. Не включает двусторонний материал и не заменяет настройку cull mode.
boolТекущее значение FlipFaces.
GetMaterialMaterial
public Material GetMaterial();Возвращает Material. Материал единственной поверхности примитива. Назначение меняет ресурс меша и влияет на использующие его экземпляры; это не MeshInstance3D.MaterialOverride. Если геометрия уже создана, материал применяется к поверхности сразу; иначе — при генерации. null очищает назначение. Возвращается ссылка на материал, не независимая копия.
MaterialТекущее значение Material.
GetMeshArraysReckfell.Collections.Array
public Reckfell.Collections.Array GetMeshArrays();Возвращает массив каналов единственной поверхности 0, индексируемый Mesh.ArrayType. При необходимости сначала генерирует геометрию. Слоты могут содержать Nil, если канала нет; при AddUV2 = false не ожидайте готовый второй UV-канал. Полученные C#-массивы вершин — копии, их изменение не загружает новую геометрию в ресурс. Для собственной формы измените параметры и вызовите RequestUpdate.
Reckfell.Collections.ArrayМассив слотов Mesh.ArrayType.Max с каналами поверхности.
GetUV2Paddingfloat
public float GetUV2Padding();Возвращает UV2Padding. Отступы UV2, по умолчанию 2. Конкретный генератор использует их вместе с размером карты и плотностью текселей. Изменение вызывает пересчёт размера карты и геометрии. Подсказка инспектора 0…10 допускает большее значение и не ограничивает сеттер; используйте конечное неотрицательное число. Большой padding не исправляет перекрывающуюся развёртку и не гарантирует отсутствие утечек.
floatТекущее значение UV2Padding.
RequestUpdatevoid
public void RequestUpdate();Запрашивает пересборку геометрии после изменения собственных параметров примитива. Если первая генерация ещё ожидается, она произойдёт при первом чтении поверхности или RID. Для уже созданной геометрии вызов запускает обновление и сигнал Changed. Не создаёт UV-развёртку для импортированного меша, не запускает LightmapGI и не обновляет автоматически любой вручную изменённый C#-массив.
SetAddUV2void
public void SetAddUV2(bool addUV2);Устанавливает AddUV2. Генерировать второй UV-канал, по умолчанию false. У встроенных примитивов используется их генератор; для собственного массива без UV2 базовый путь масштабирует существующие UV1 с отступом. Это не автоматическая развёртка произвольной геометрии: перекрытия UV1 так не исчезнут. Изменение обновляет геометрию и размер карты, где это поддерживает конкретный примитив; готовую LightmapGI затем нужно запечь заново.
| Имя | Тип | По умолчанию |
|---|---|---|
addUV2 | bool | — |
addUV2Новое значение AddUV2; учитывайте правила свойства.
SetCustomAabbvoid
public void SetCustomAabb(Aabb aabb);Устанавливает CustomAabb. Пользовательская коробка отсечения меша; по умолчанию пустой Aabb. Не перемещает вершины и не меняет возвращаемую GetAabb() коробку сгенерированной CPU-геометрии. Нужна, например, для учёта смещения вершин шейдером; задайте границы, покрывающие результат анимации.
| Имя | Тип | По умолчанию |
|---|---|---|
aabb | Aabb | — |
aabbНовое значение CustomAabb; учитывайте правила свойства.
SetFlipFacesvoid
public void SetFlipFaces(bool flipFaces);Устанавливает FlipFaces. Инвертировать ориентацию индексированных треугольников. В базовой реализации нормали меняют знак, а первые два индекса каждого треугольника меняются местами, когда присутствуют нормали и индексы. По умолчанию false. Не включает двусторонний материал и не заменяет настройку cull mode.
| Имя | Тип | По умолчанию |
|---|---|---|
flipFaces | bool | — |
flipFacesНовое значение FlipFaces; учитывайте правила свойства.
SetMaterialvoid
public void SetMaterial(Material material);Устанавливает Material. Материал единственной поверхности примитива. Назначение меняет ресурс меша и влияет на использующие его экземпляры; это не MeshInstance3D.MaterialOverride. Если геометрия уже создана, материал применяется к поверхности сразу; иначе — при генерации. null очищает назначение. Возвращается ссылка на материал, не независимая копия.
| Имя | Тип | По умолчанию |
|---|---|---|
material | Material | — |
materialНовое значение Material; учитывайте правила свойства.
SetUV2Paddingvoid
public void SetUV2Padding(float uV2Padding);Устанавливает UV2Padding. Отступы UV2, по умолчанию 2. Конкретный генератор использует их вместе с размером карты и плотностью текселей. Изменение вызывает пересчёт размера карты и геометрии. Подсказка инспектора 0…10 допускает большее значение и не ограничивает сеттер; используйте конечное неотрицательное число. Большой padding не исправляет перекрывающуюся развёртку и не гарантирует отсутствие утечек.
| Имя | Тип | По умолчанию |
|---|---|---|
uV2Padding | float | — |
uV2PaddingНовое значение UV2Padding; учитывайте правила свойства.
_CreateMeshArrayReckfell.Collections.Array
public virtual Reckfell.Collections.Array _CreateMeshArray();Переопределяемый генератор одной поверхности. Верните Array ровно из Mesh.ArrayType.Max слотов с непустым массивом Vertex; заполните необходимые Normal/TexUV/Index и другие каналы согласованно. База проверяет размер Array и наличие вершин, но это не полная проверка произвольной топологии. Обновляйте собственные параметры через RequestUpdate, а не ручной вызов генератора.
Пример индексированного треугольника с проверкой ширины; это геометрия для обучения API, не готовая демонстрационная сцена:
using System;
using Reckfell;
using Array = Reckfell.Collections.Array;
public partial class TrianglePrimitive : PrimitiveMesh
{
private float _width = 1f;
public TrianglePrimitive()
{
LightmapSizeHint = new Vector2I(32, 32);
}
public void SetWidth(float width)
{
if (!float.IsFinite(width) || width <= 0f)
throw new ArgumentOutOfRangeException(nameof(width));
_width = width;
RequestUpdate();
}
public override Array _CreateMeshArray()
{
var arrays = new Array();
arrays.Resize((int)Mesh.ArrayType.Max);
arrays[(int)Mesh.ArrayType.Vertex] = new Vector3[]
{ Vector3.Zero, new(_width, 0, 0), new(0, 0, 1) };
arrays[(int)Mesh.ArrayType.Normal] = new Vector3[]
{ Vector3.Up, Vector3.Up, Vector3.Up };
arrays[(int)Mesh.ArrayType.TexUV] = new Vector2[]
{ Vector2.Zero, Vector2.Right, Vector2.Down };
arrays[(int)Mesh.ArrayType.Index] = new int[] { 0, 2, 1 };
return arrays;
}
}Reckfell.Collections.ArrayМассив каналов новой единственной поверхности.