reckfellENGINE

PrimitiveMesh

База процедурных примитивов с одной поверхностью.

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

PrimitiveMesh создаёт одну поверхность из параметров конкретного примитива. Для обычной формы используйте BoxMesh, PlaneMesh, SphereMesh и другие подклассы; для своей формы переопределите _CreateMeshArray. Несколько экземпляров MeshInstance3D могут использовать один ресурс: изменение параметров ресурса общее для них.

AddUV2 подготавливает второй UV-канал, но не означает успешное запекание света. Подготовка Static, нормалей и пригодной развёртки описана в LightmapGI. Для многоповерхностной или произвольной топологии рассмотрите ArrayMesh вместо имитации нескольких поверхностей в этом классе.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

PrimitiveMeshКонструктор
# PrimitiveMesh
C#
public PrimitiveMesh();

Создаёт базовый ресурс PrimitiveMesh, но не готовую форму. Используйте BoxMesh, SphereMesh и другие конкретные примитивы либо переопределите _CreateMeshArray. Базовый класс без вершин не создаст пригодную поверхность. Начальные AddUV2 и FlipFaces равны false, UV2Padding = 2.

Свойства5

AddUV2Свойство
# AddUV2
C#
public bool AddUV2 { get; set; }

Генерировать второй UV-канал, по умолчанию false. У встроенных примитивов используется их генератор; для собственного массива без UV2 базовый путь масштабирует существующие UV1 с отступом. Это не автоматическая развёртка произвольной геометрии: перекрытия UV1 так не исчезнут. Изменение обновляет геометрию и размер карты, где это поддерживает конкретный примитив; готовую LightmapGI затем нужно запечь заново.

CustomAabbСвойство
# CustomAabb
C#
public Aabb CustomAabb { get; set; }

Пользовательская коробка отсечения меша; по умолчанию пустой Aabb. Не перемещает вершины и не меняет возвращаемую GetAabb() коробку сгенерированной CPU-геометрии. Нужна, например, для учёта смещения вершин шейдером; задайте границы, покрывающие результат анимации.

FlipFacesСвойство
# FlipFaces
C#
public bool FlipFaces { get; set; }

Инвертировать ориентацию индексированных треугольников. В базовой реализации нормали меняют знак, а первые два индекса каждого треугольника меняются местами, когда присутствуют нормали и индексы. По умолчанию false. Не включает двусторонний материал и не заменяет настройку cull mode.

MaterialСвойство
# Material
C#
public Material Material { get; set; }

Материал единственной поверхности примитива. Назначение меняет ресурс меша и влияет на использующие его экземпляры; это не MeshInstance3D.MaterialOverride. Если геометрия уже создана, материал применяется к поверхности сразу; иначе — при генерации. null очищает назначение. Возвращается ссылка на материал, не независимая копия.

UV2PaddingСвойство
# UV2Padding
C#
public float UV2Padding { get; set; }

Отступы UV2, по умолчанию 2. Конкретный генератор использует их вместе с размером карты и плотностью текселей. Изменение вызывает пересчёт размера карты и геометрии. Подсказка инспектора 0…10 допускает большее значение и не ограничивает сеттер; используйте конечное неотрицательное число. Большой padding не исправляет перекрывающуюся развёртку и не гарантирует отсутствие утечек.

Методы13

GetAddUV2bool
# GetAddUV2
C#
public bool GetAddUV2();

Возвращает AddUV2. Генерировать второй UV-канал, по умолчанию false. У встроенных примитивов используется их генератор; для собственного массива без UV2 базовый путь масштабирует существующие UV1 с отступом. Это не автоматическая развёртка произвольной геометрии: перекрытия UV1 так не исчезнут. Изменение обновляет геометрию и размер карты, где это поддерживает конкретный примитив; готовую LightmapGI затем нужно запечь заново.

Возвращает bool

Текущее значение AddUV2.

GetCustomAabbAabb
# GetCustomAabb
C#
public Aabb GetCustomAabb();

Возвращает CustomAabb. Пользовательская коробка отсечения меша; по умолчанию пустой Aabb. Не перемещает вершины и не меняет возвращаемую GetAabb() коробку сгенерированной CPU-геометрии. Нужна, например, для учёта смещения вершин шейдером; задайте границы, покрывающие результат анимации.

Возвращает Aabb

Текущее значение CustomAabb.

GetFlipFacesbool
# GetFlipFaces
C#
public bool GetFlipFaces();

Возвращает FlipFaces. Инвертировать ориентацию индексированных треугольников. В базовой реализации нормали меняют знак, а первые два индекса каждого треугольника меняются местами, когда присутствуют нормали и индексы. По умолчанию false. Не включает двусторонний материал и не заменяет настройку cull mode.

Возвращает bool

Текущее значение FlipFaces.

GetMaterialMaterial
# GetMaterial
C#
public Material GetMaterial();

Возвращает Material. Материал единственной поверхности примитива. Назначение меняет ресурс меша и влияет на использующие его экземпляры; это не MeshInstance3D.MaterialOverride. Если геометрия уже создана, материал применяется к поверхности сразу; иначе — при генерации. null очищает назначение. Возвращается ссылка на материал, не независимая копия.

Возвращает Material

Текущее значение Material.

GetMeshArraysReckfell.Collections.Array
# GetMeshArrays
C#
public Reckfell.Collections.Array GetMeshArrays();

Возвращает массив каналов единственной поверхности 0, индексируемый Mesh.ArrayType. При необходимости сначала генерирует геометрию. Слоты могут содержать Nil, если канала нет; при AddUV2 = false не ожидайте готовый второй UV-канал. Полученные C#-массивы вершин — копии, их изменение не загружает новую геометрию в ресурс. Для собственной формы измените параметры и вызовите RequestUpdate.

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

Массив слотов Mesh.ArrayType.Max с каналами поверхности.

GetUV2Paddingfloat
# GetUV2Padding
C#
public float GetUV2Padding();

Возвращает UV2Padding. Отступы UV2, по умолчанию 2. Конкретный генератор использует их вместе с размером карты и плотностью текселей. Изменение вызывает пересчёт размера карты и геометрии. Подсказка инспектора 0…10 допускает большее значение и не ограничивает сеттер; используйте конечное неотрицательное число. Большой padding не исправляет перекрывающуюся развёртку и не гарантирует отсутствие утечек.

Возвращает float

Текущее значение UV2Padding.

RequestUpdatevoid
# RequestUpdate
C#
public void RequestUpdate();

Запрашивает пересборку геометрии после изменения собственных параметров примитива. Если первая генерация ещё ожидается, она произойдёт при первом чтении поверхности или RID. Для уже созданной геометрии вызов запускает обновление и сигнал Changed. Не создаёт UV-развёртку для импортированного меша, не запускает LightmapGI и не обновляет автоматически любой вручную изменённый C#-массив.

SetAddUV2void
# SetAddUV2
C#
public void SetAddUV2(bool addUV2);

Устанавливает AddUV2. Генерировать второй UV-канал, по умолчанию false. У встроенных примитивов используется их генератор; для собственного массива без UV2 базовый путь масштабирует существующие UV1 с отступом. Это не автоматическая развёртка произвольной геометрии: перекрытия UV1 так не исчезнут. Изменение обновляет геометрию и размер карты, где это поддерживает конкретный примитив; готовую LightmapGI затем нужно запечь заново.

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

Новое значение AddUV2; учитывайте правила свойства.

SetCustomAabbvoid
# SetCustomAabb
C#
public void SetCustomAabb(Aabb aabb);

Устанавливает CustomAabb. Пользовательская коробка отсечения меша; по умолчанию пустой Aabb. Не перемещает вершины и не меняет возвращаемую GetAabb() коробку сгенерированной CPU-геометрии. Нужна, например, для учёта смещения вершин шейдером; задайте границы, покрывающие результат анимации.

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

Новое значение CustomAabb; учитывайте правила свойства.

SetFlipFacesvoid
# SetFlipFaces
C#
public void SetFlipFaces(bool flipFaces);

Устанавливает FlipFaces. Инвертировать ориентацию индексированных треугольников. В базовой реализации нормали меняют знак, а первые два индекса каждого треугольника меняются местами, когда присутствуют нормали и индексы. По умолчанию false. Не включает двусторонний материал и не заменяет настройку cull mode.

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

Новое значение FlipFaces; учитывайте правила свойства.

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

Устанавливает Material. Материал единственной поверхности примитива. Назначение меняет ресурс меша и влияет на использующие его экземпляры; это не MeshInstance3D.MaterialOverride. Если геометрия уже создана, материал применяется к поверхности сразу; иначе — при генерации. null очищает назначение. Возвращается ссылка на материал, не независимая копия.

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

Новое значение Material; учитывайте правила свойства.

SetUV2Paddingvoid
# SetUV2Padding
C#
public void SetUV2Padding(float uV2Padding);

Устанавливает UV2Padding. Отступы UV2, по умолчанию 2. Конкретный генератор использует их вместе с размером карты и плотностью текселей. Изменение вызывает пересчёт размера карты и геометрии. Подсказка инспектора 0…10 допускает большее значение и не ограничивает сеттер; используйте конечное неотрицательное число. Большой padding не исправляет перекрывающуюся развёртку и не гарантирует отсутствие утечек.

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

Новое значение UV2Padding; учитывайте правила свойства.

_CreateMeshArrayReckfell.Collections.Array
# _CreateMeshArray
C#
public virtual Reckfell.Collections.Array _CreateMeshArray();

Переопределяемый генератор одной поверхности. Верните Array ровно из Mesh.ArrayType.Max слотов с непустым массивом Vertex; заполните необходимые Normal/TexUV/Index и другие каналы согласованно. База проверяет размер Array и наличие вершин, но это не полная проверка произвольной топологии. Обновляйте собственные параметры через RequestUpdate, а не ручной вызов генератора.

Пример индексированного треугольника с проверкой ширины; это геометрия для обучения API, не готовая демонстрационная сцена:

C#
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

Массив каналов новой единственной поверхности.

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

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

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

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