reckfellENGINE

VoxelMeshSdf

Подписано дистанционное поле сетки как воксель.

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

Подписано дистанционное поле сетки как воксель.

Этот ресурс может быть использован для того, чтобы испечь сетку в подписанное поле дистанции (SDF). Данные хранятся как внутренний воксельный буфер. Затем они могут использоваться как форма или щетка в операциях на основе вокселя.

Примечание: Если вы можете, предпочтите использовать процедурные формы (например, сферу или коробку) для повышения качества и эффективности. VoxelMeshSdf Она является более дорогостоящей и в настоящее время имеет более низкое качество по сравнению с процедурными эквивалентами.

Примечание 2: не все печься.

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

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

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

Свойства7

BakeModeСвойство
# BakeMode
C#
public VoxelMeshSdf.BakeModeEnum BakeMode { get; set; }

Выберите алгоритм, который будет использован для вычисления SDF из сетки.

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

Некоторые алгоритмы не могут правильно рассчитать признаки расстояния сами по себе. Обычно за пределами формы есть положительный знак, а внутри формы - отрицательный знак. Ошибка может привести к тому, что неправильный знак "откажется" и распространится за пределами формы. Этот вариант пытается исправить это, если исходить из предположения о том, что граница пекущегося района всегда снаружи, и распространяет позитивные сигналы внутри, чтобы исключить утечку негативных знаков.

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

Контроль за разрешением выпечки SDF пропорционально одной стороне трехмерного воксельного буфера. Более высокое качество, но медленнее печь и использует больше памяти.

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

Контроль за дополнительным пространством вокруг печки в сети. Для улавливания внешних градиентов должны быть предусмотрены соответствующие буферы SDF. Это имущество добавляет наценку, основанную на соотношении размера сетки. Например, если сетка имеет ширину в 100 единиц, то разница в 0,1 добавит к ней 10 дополнительных единиц пространства.

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

Mesh который будет печься, когда он позвонит VoxelMeshSdf.Bake функции, или при нажатии кнопки Бэйк в редакторе. Возвращение этой свойства в пустоту не стирает печёный результат, так что вам не нужно, чтобы оригинальная сетка была загружена, чтобы использовать SDF.

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

Контроль за количеством подразделов, которые будут использоваться в зоне выпечки при использовании VoxelMeshSdf.BakeModeEnum.AccuratePartitioned и VoxelMeshSdf.BakeModeEnum.ApproxFloodfill Режимы. При использовании VoxelMeshSdf.BakeModeEnum.AccuratePartitioned, это значение может быть пропорционально отрегулировано на основе количества треугольников, имеющихся в сети, из-за несовершенства алгоритма. Если сетка имеет несколько треугольников, то более низкие значения будут работать лучше. Если она имеет много маленьких треугольников, то более высокие значения будут работать лучше. Однако, если треугольники большие или немногочисленные и значение большие, это также потенциально создаст артефакты.

_DataСвойство
# _Data
C#
public Reckfell.Collections.Dictionary _Data { get; set; }

Методы19

Bakevoid
# Bake
C#
public void Bake();

Прикрепляет SDF к звонку с использованием назначенного в настоящее время VoxelMeshSdf.MeshЭто может затормозить игру, если она будет сделана на главной нити.

BakeAsyncvoid
# BakeAsync
C#
public void BakeAsync(EntityTree sceneTree);

Запитывает SDF на отдельной нитью с использованием назначенного в настоящее время VoxelMeshSdf.MeshСм. также VoxelMeshSdf.IsBaking, VoxelMeshSdf.IsBaked и VoxelMeshSdf.Baked.

Параметры
ИмяТипПо умолчанию
sceneTreeEntityTree—
DebugCheckSdfReckfell.Collections.Array
# DebugCheckSdf
C#
public Reckfell.Collections.Array DebugCheckSdf(Mesh mesh);

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

Текст
[
    cell0_position: Vector3,
    cell0_triangle_v0: Vector3,
    cell0_triangle_v1: Vector3,
    cell0_triangle_v2: Vector3,
    cell1_position: Vector3,
    cell1_triangle_v0: Vector3,
    cell1_triangle_v1: Vector3,
    cell1_triangle_v2: Vector3,
]

Если нет ошибок, возвращенный массив будет пустым. Этот метод является остаточным с момента первоначального внедрения этого ресурса в качестве попытки автоматизировать проверки при отладке. Ошибки могут не всегда указывать на непригодность SDF в зависимости от варианта использования. Он может быть удален или изменен в будущем.

Параметры
ИмяТипПо умолчанию
meshMesh—
Возвращает Reckfell.Collections.Array
GetAabbAabb
# GetAabb
C#
public Aabb GetAabb();

Найдите ограничивающую коробку печёной формы. Она может быть немного больше, чем оригинальная сетка. AABB из-за VoxelMeshSdf.MarginRatio - свойство.

Возвращает Aabb
GetBakeModeVoxelMeshSdf.BakeModeEnum
# GetBakeMode
C#
public VoxelMeshSdf.BakeModeEnum GetBakeMode();
Возвращает VoxelMeshSdf.BakeModeEnum
GetCellCountint
# GetCellCount
C#
public int GetCellCount();
Возвращает int
GetMarginRatiofloat
# GetMarginRatio
C#
public float GetMarginRatio();
Возвращает float
GetMeshMesh
# GetMesh
C#
public Mesh GetMesh();
Возвращает Mesh
GetPartitionSubdivint
# GetPartitionSubdiv
C#
public int GetPartitionSubdiv();
Возвращает int
GetVoxelBufferVoxelBuffer
# GetVoxelBuffer
C#
public VoxelBuffer GetVoxelBuffer();

Возьми VoxelBuffer Результаты будут храниться в канале SDF. Этот буфер не следует модифицировать.

Возвращает VoxelBuffer
IsBakedbool
# IsBaked
C#
public bool IsBaked();

Получает, содержит ли ресурс данные SDF в выпечке.

Возвращает bool
IsBakingbool
# IsBaking
C#
public bool IsBaking();

Получается, что асинхронная операция по выпечке еще не закончена.

Возвращает bool
IsBoundarySignFixEnabledbool
# IsBoundarySignFixEnabled
C#
public bool IsBoundarySignFixEnabled();
Возвращает bool
SetBakeModevoid
# SetBakeMode
C#
public void SetBakeMode(VoxelMeshSdf.BakeModeEnum mode);
Параметры
ИмяТипПо умолчанию
modeVoxelMeshSdf.BakeModeEnum—
SetBoundarySignFixEnabledvoid
# SetBoundarySignFixEnabled
C#
public void SetBoundarySignFixEnabled(bool enable);
Параметры
ИмяТипПо умолчанию
enablebool—
SetCellCountvoid
# SetCellCount
C#
public void SetCellCount(int cellCount);
Параметры
ИмяТипПо умолчанию
cellCountint—
SetMarginRatiovoid
# SetMarginRatio
C#
public void SetMarginRatio(float ratio);
Параметры
ИмяТипПо умолчанию
ratiofloat—
SetMeshvoid
# SetMesh
C#
public void SetMesh(Mesh mesh);
Параметры
ИмяТипПо умолчанию
meshMesh—
SetPartitionSubdivvoid
# SetPartitionSubdiv
C#
public void SetPartitionSubdiv(int subdiv);
Параметры
ИмяТипПо умолчанию
subdivint—

Сигналы и события1

BakedСобытие
# Baked
C#
public event Action Baked;

Приемлемо, когда асинхронное пекание завершено.

VoxelMeshSdf.BakeModeEnum

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

Проверяет каждый треугольник из каждой клетки для определения ближайших расстояний. Он пытается быть точным, но гораздо медленнее других способов. Сетка должна быть закрыта, иначе SDF будет содержать ошибки. Знаки рассчитываются путем получения ближайшего треугольника и проверки того, какая сторона треугольника находится в центре клетки.

AccuratePartitioned = 1

Как и наивный метод, но разделяет пространство на перегородки, чтобы легче пропустить треугольники, которые не нуждаются в проверке. Быстрее, чем наивный метод, но все же относительно медленно.

ApproxFloodfill = 3

Приблизляет SDF к нему, вычисляя тонкий "корпус" точных значений вблизи треугольников, затем распространяет эти значения с помощью 26-ступенчатого наливного фильтра. Знаки рассчитываются только на начальном корпусе с помощью нескольких лучей из центра каждой клетки: если луч попадает в спину, то предполагается, что ячейка находится внутри. В противном случае предполагается, что она находится снаружи. Знаки распространяются как часть затопления. Хотя технически это не так, в настоящее время это самый быстрый метод и результаты зачастую достаточно хороши.

ApproxInterp = 2

Экспериментальный метод подвода пространства в 4x4x4, и пропуск вычислений SDF путем интерполяции 8 углов, если в этих клетках нет треугольников. Быстрее, чем наивный, но не очень интересный. Может быть удален.

Count = 4

Сколько есть способов выпечки.

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

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

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

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