VoxelTool
Класс помощника для беспрепятственного доступа и модификации вокселей
Класс помощника для беспрепятственного доступа и модификации вокселей
Обобщающий интерфейс для доступа и редактирования вокселей. Он позволяет получать доступ к индивидуальным вокселям или осуществлять оптовые операции, такие как вырезать большие кусочки или копировать/пастовые ящики. Это не класс, чтобы замедлиться в одиночестве, вы можете получить его из воксельских объектов, с которыми вы хотите работать, потому что он имеет несколько производных реализаций. По умолчанию, если операция пересекает нередактируемую область (если, например, она еще не загружена), операция отменяется. Такое поведение может варьироваться в производных классах.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Свойства9
ChannelСвойство
public VoxelBuffer.ChannelId Channel { get; set; }Установите, какой канал будет отредактирован. Если он будет использоваться на площадном узле, он будет по умолчанию установлен на первом доступном канале на основе потока и генератора.
EraserValueСвойство
public ulong EraserValue { get; set; }Установки, которые будут использованы для стирания вокселей при редактировании VoxelBuffer.ChannelId.ChannelType канал в VoxelTool.ModeEnum.Remove Относится только к закупоренным вокселям.
ModeСвойство
public VoxelTool.ModeEnum Mode { get; set; }Устанавливает, как do_* Это может варьироваться в зависимости от канала.
SdfScaleСвойство
public float SdfScale { get; set; }При работе с гладкими вокселями шкала применяется к подписанных полям дистанции. Высокая шкала (одна или более) будет, как правило, давать запутанные результаты, а низкая шкала (менее 1, но не слишком близко к нулю) будет, как правило, более гладкой.
Это связано с VoxelBuffer.Depth Конфигурация на вокселях. Для 8-битных и 16-битных значений существует ограниченный диапазон значений, которые может взять Подпись Дистанционное Поле, и по умолчанию он зажимается до -1, так что градиент может варьироваться только через 2 воксела. Но когда используется LOD, лучше растянуть этот диапазон на более длительном расстоянии, и это достигается путем масштабирования значений SDF.
SdfStrengthСвойство
public float SdfStrength { get; set; }При редактировании VoxelBuffer.ChannelId.ChannelSdf гладких хребтов в VoxelTool.ModeEnum.Add или VoxelTool.ModeEnum.Remove, определяет этап интерполяции между текущими значениями и значениями, установленными инструментом.
TextureFalloffСвойство
public float TextureFalloff { get; set; }Range VoxelTool.ModeEnum.TexturePaintБолее низкие значения дают более резкие изменения. Можно сравнить с щеткой мягкости в программе редактирования изображений. Это имеет значение только в случае гладких вокселей и текстовых режимов, которые поддерживают длинные градиенты.
TextureIndexСвойство
public int TextureIndex { get; set; }Индекс текстуры, используемый в нормальном режиме текстуры voxel. Выбор этого индекса зависит от того, как вы настроите текстурированный воксель meshes (например, индекс слоя в массиве текстуры).
TextureOpacityСвойство
public float TextureOpacity { get; set; }Range VoxelTool.TextureIndex когда инструмент установлен в VoxelTool.ModeEnum.TexturePaint. Можно сравнить с непрозрачностью в программе редактирования изображений.
ValueСвойство
public ulong Value { get; set; }Установки, в которых будет использоваться значение voxel. Это не имеет значения при редактировании VoxelBuffer.ChannelId.ChannelSdf.
Методы47
ColorToU16int
public static int ColorToU16(Color color);Коды нормализованы 4-float Цвет в 16-битные целые данные. Он используется каналом COLOR, в тех случаях, когда канал представляет прямые цвета (без использования палитры).
| Имя | Тип | По умолчанию |
|---|---|---|
color | Color | — |
intColorToU16Weightsint
public static int ColorToU16Weights(Color _UnnamedArg0);Коды нормализованы 4-float Цвет в 16-битные целые данные для использования каналом WEIGHTS.
| Имя | Тип | По умолчанию |
|---|---|---|
_UnnamedArg0 | Color | — |
intColorToU32uint
public static uint ColorToU32(Color color);Коды нормализованы 4-float Раскрасить в 32-битные целые данные для использования каналом COLOR.
| Имя | Тип | По умолчанию |
|---|---|---|
color | Color | — |
uintCopyvoid
public void Copy(Vector3I srcPos, VoxelBuffer dstBuffer, int channelsMask = 255, bool withMetadata = true);Копировать воксели в коробке и хранить их в прошедшем буфере. Исходный формат перезаписать пункт назначения.
src_pos - самый низкий угол ящика, и его размер определяется размером dst_buffer.
channels_mask bitmask, где каждый бит указывает, какие каналы будут копироваться. Пример: 1 << VoxelBuffer.CHANNEL_SDF для получения только данных SDF. VoxelBuffer.ChannelMask.AllChannelsMask Если ты хочешь их всех.
| Имя | Тип | По умолчанию |
|---|---|---|
srcPos | Vector3I | — |
dstBuffer | VoxelBuffer | — |
channelsMask | int | 255 |
withMetadata | bool | true |
DoBoxvoid
public void DoBox(Vector3I begin, Vector3I end);Оперируйте на прямоугольном кубоидном участке местности.
С закупоренными вокселями, begin и end являются всеохватными.
с гладкими вокселями, end эксклюзивный.
Вы можете выбрать, какую операцию сделать до вызова этой функции, настроить VoxelTool.Mode. С закупоренными вокселями вы также можете установить VoxelTool.Value чтобы выбрать, какой воксель следует использовать.
| Имя | Тип | По умолчанию |
|---|---|---|
begin | Vector3I | — |
end | Vector3I | — |
DoMeshvoid
public void DoMesh(VoxelMeshSdf meshSdf, Transform3D transform, float isolevel = 0f);Применяется форма сетки к местности. Модель должна быть запечена в подписанное поле дистанции VoxelMeshSdf. transform Неунифицированная шкала может привести к появлению артефактов. isolevel Качество зависит от разрешения SDF модели, и эффективность будет ниже, чем примитивные формы, такие как: VoxelTool.DoSphere.
| Имя | Тип | По умолчанию |
|---|---|---|
meshSdf | VoxelMeshSdf | — |
transform | Transform3D | — |
isolevel | float | 0f |
DoPath2 перегрузки
public void DoPath(Vector3[] points, float[] radii);Отслеживает "трубу", определенную перечнем точек, каждая из которых имеет соответствующий радиус для контроля ширины трубы в каждой точке. Начало и конец пути округлены. Это эквивалентно установке/извлечению нескольких подключенных капсул с изменяющимся верхним/нижним радиусом. Путь не использует безье или сплин, каждая точка соединена линейно с следующей. Если вам нужна более гладкая, вы можете добавить точки в области, которые в них нуждаются. Чем больше точек, тем медленнее она.
| Имя | Тип | По умолчанию |
|---|---|---|
points | Vector3[] | — |
radii | float[] | — |
public void DoPath(ReadOnlySpan<Vector3> points, ReadOnlySpan<float> radii);Отслеживает "трубу", определенную перечнем точек, каждая из которых имеет соответствующий радиус для контроля ширины трубы в каждой точке. Начало и конец пути округлены. Это эквивалентно установке/извлечению нескольких подключенных капсул с изменяющимся верхним/нижним радиусом. Путь не использует безье или сплин, каждая точка соединена линейно с следующей. Если вам нужна более гладкая, вы можете добавить точки в области, которые в них нуждаются. Чем больше точек, тем медленнее она.
| Имя | Тип | По умолчанию |
|---|---|---|
points | ReadOnlySpan<Vector3> | — |
radii | ReadOnlySpan<float> | — |
DoPointvoid
public void DoPoint(Vector3I pos);Оперирует на одном вокселе.
Вы можете выбрать, какую операцию сделать до вызова этой функции, настроить VoxelTool.Mode. С закупоренными вокселями вы также можете установить VoxelTool.Value чтобы выбрать, какой воксель следует использовать.
Эта функция не очень хорошо приспособлена к гладким вокселям, и она может создать блокировку.
| Имя | Тип | По умолчанию |
|---|---|---|
pos | Vector3I | — |
DoSpherevoid
public void DoSphere(Vector3 center, float radius);Оперируйте на вокселях внутри сферы.
Вы можете выбрать, какую операцию сделать до вызова этой функции, настроить VoxelTool.Mode. С закупоренными вокселями вы также можете установить VoxelTool.Value чтобы выбрать, какой воксель следует использовать.
| Имя | Тип | По умолчанию |
|---|---|---|
center | Vector3 | — |
radius | float | — |
GetChannelVoxelBuffer.ChannelId
public VoxelBuffer.ChannelId GetChannel();VoxelBuffer.ChannelIdGetEraserValueulong
public ulong GetEraserValue();ulongGetModeVoxelTool.ModeEnum
public VoxelTool.ModeEnum GetMode();VoxelTool.ModeEnumGetSdfScalefloat
public float GetSdfScale();floatGetSdfStrengthfloat
public float GetSdfStrength();floatGetTextureFallofffloat
public float GetTextureFalloff();floatGetTextureIndexint
public int GetTextureIndex();intGetTextureOpacityfloat
public float GetTextureOpacity();floatGetValueulong
public ulong GetValue();ulongGetVoxelulong
public ulong GetVoxel(Vector3I pos);Получает данные от Вокселя по адресу: pos Координаты. Возвращенное значение будет неподписанным целым числом. Значение значения зависит от VoxelTool.Channel инструмент установлен.
При использовании VoxelBuffer.ChannelId.ChannelSdf Для гладких вокселей возвращаемое значение будет кодировано, так что вы можете использовать VoxelTool.GetVoxelF чтобы получить float Вместо этого стоимость.
| Имя | Тип | По умолчанию |
|---|---|---|
pos | Vector3I | — |
ulongGetVoxelFfloat
public float GetVoxelF(Vector3I pos);Получает данные от Вокселя по адресу: pos Координаты, интерпретирующие его как значение SDF в плавающей точке. VoxelBuffer.ChannelId.ChannelSdf канал для гладких вокселей.
| Имя | Тип | По умолчанию |
|---|---|---|
pos | Vector3I | — |
floatGetVoxelMetadataVariant
public Variant GetVoxelMetadata(Vector3I pos);Получает произвольные данные, прикрепляемые к конкретному вокселю.
| Имя | Тип | По умолчанию |
|---|---|---|
pos | Vector3I | — |
VariantGrowSpherevoid
public void GrowSphere(Vector3 sphereCenter, float sphereRadius, float strength);Добавления/изменения (в зависимости от VoxelTool.Mode) значение по отношению ко всем вокселям в пределах сферы. strength В центре сферы и линейно уменьшаются до нуля на поверхности сферы.
sphere_center Это положение на местности, которое будет сглажено.
sphere_radius радиус сферы от center где будут затронуты значения вокселя, должны быть больше нуля.
strength - значение, которое контролирует максимальную стоимость, добавляемую/отменяемую к воксам/из них. [0, 10].
Примечание 1: В настоящее время эта система применяется только в отношении местности, где используются данные СФР (сможные воксели).
Примечание 2: Предполагалось, что это будет аналогично инструменту для покрытия поверхности из Unreal Engine Воксель Плугин.
Примечание 3: Этот метод предполагает, что SDF местности непротиворечива. Если это не так, вы можете заметить различия в скорости, при которой рельеф разрушается или растет. Например, некоторые генераторы отступают к постоянному SDF, когда они находятся далеко от поверхности, чтобы ускорить расчеты (см. VoxelGeneratorGraph.SdfClipThreshold).
Примечание 4: Если вы хотите использовать этот метод для раскопок местности «мягко», назвав ее «каждая рама», альтернативой является использование VoxelTool.DoSphere Но вместо того, чтобы центр находился на поверхности, отнесите его назад примерно на 0,95% радиуса, так что только небольшая часть сферы проникнет внутрь, постепенно выкапывая дыру.
| Имя | Тип | По умолчанию |
|---|---|---|
sphereCenter | Vector3 | — |
sphereRadius | float | — |
strength | float | — |
IsAreaEditablebool
public bool IsAreaEditable(Aabb box);Returns (Возврат) true - при использовании LOD можно редактировать только ближайший LOD (0).
| Имя | Тип | По умолчанию |
|---|---|---|
box | Aabb | — |
boolNormalizeColorColor
public static Color NormalizeColor(Color _UnnamedArg0);Метод помощи для определения суммы каналов Color к 1.
| Имя | Тип | По умолчанию |
|---|---|---|
_UnnamedArg0 | Color | — |
ColorPastevoid
public void Paste(Vector3I dstPos, VoxelBuffer srcBuffer, int channelsMask = 255);Вставить воксель в коробку из данного буфера в определенном месте.
dst_pos - самый низкий угол ящика, и его размер определяется размером src_buffer.
channels_mask bitmask, где каждый бит указывает, какие каналы будут изменены. Пример: 1 << VoxelBuffer.CHANNEL_SDF Записать только данные SDF. VoxelBuffer.ChannelMask.AllChannelsMask Если ты хочешь их всех.
| Имя | Тип | По умолчанию |
|---|---|---|
dstPos | Vector3I | — |
srcBuffer | VoxelBuffer | — |
channelsMask | int | 255 |
PasteMaskedvoid
public void PasteMasked(Vector3I dstPos, VoxelBuffer srcBuffer, int channelsMask, int maskChannel, long maskValue);Воксель, имеющий особое значение в канале маски, не будет вставляться.
dst_pos - самый низкий угол ящика, и его размер определяется размером src_buffer.
channels_mask bitmask, где каждый бит указывает, какие каналы будут изменены. Пример: 1 << VoxelBuffer.CHANNEL_SDF Записать только данные SDF. VoxelBuffer.ChannelMask.AllChannelsMask Если ты хочешь их всех.
src_mask_channel канал из буфера источника, который будет использоваться для поиска значений маскировки.
src_mask_value Если волки буфера источника имеют это значение в канале, указанном для маскировки, то они не будут вставляться.
| Имя | Тип | По умолчанию |
|---|---|---|
dstPos | Vector3I | — |
srcBuffer | VoxelBuffer | — |
channelsMask | int | — |
maskChannel | int | — |
maskValue | long | — |
PasteMaskedWritableList2 перегрузки
public void PasteMaskedWritableList(Vector3I position, VoxelBuffer voxels, byte channelsMask, byte srcMaskChannel, ulong srcMaskValue, byte dstMaskChannel, int[] dstWritableList);Вставить воксель в ящике из данного буфера в определенном месте. Воксели, имеющие конкретное значение в канале маски буфера источника, не будут вставляться, а существующие воксели в пункте назначения будут модифицироваться только в том случае, если они имеют конкретные значения.
dst_pos - самый низкий угол ящика, и его размер определяется размером src_buffer.
channels_mask bitmask, где каждый бит указывает, какие каналы будут изменены. Пример: 1 << VoxelBuffer.CHANNEL_SDF Записать только данные SDF. VoxelBuffer.ChannelMask.AllChannelsMask Если ты хочешь их всех.
src_mask_channel канал из буфера источника, который будет использоваться для поиска значений маскировки.
src_mask_value Если волки буфера источника имеют это значение в канале, указанном для маскировки, то они не будут вставляться.
dst_mask_channel канал из пункта назначения, который будет использоваться для отбора запрограммируемых вокселей.
dst_writable_list Список значений, которые должны быть указаны в вокселях места назначения, должен составлять от 0 до 65535.
| Имя | Тип | По умолчанию |
|---|---|---|
position | Vector3I | — |
voxels | VoxelBuffer | — |
channelsMask | byte | — |
srcMaskChannel | byte | — |
srcMaskValue | ulong | — |
dstMaskChannel | byte | — |
dstWritableList | int[] | — |
public void PasteMaskedWritableList(Vector3I position, VoxelBuffer voxels, byte channelsMask, byte srcMaskChannel, ulong srcMaskValue, byte dstMaskChannel, ReadOnlySpan<int> dstWritableList);Вставить воксель в ящике из данного буфера в определенном месте. Воксели, имеющие конкретное значение в канале маски буфера источника, не будут вставляться, а существующие воксели в пункте назначения будут модифицироваться только в том случае, если они имеют конкретные значения.
dst_pos - самый низкий угол ящика, и его размер определяется размером src_buffer.
channels_mask bitmask, где каждый бит указывает, какие каналы будут изменены. Пример: 1 << VoxelBuffer.CHANNEL_SDF Записать только данные SDF. VoxelBuffer.ChannelMask.AllChannelsMask Если ты хочешь их всех.
src_mask_channel канал из буфера источника, который будет использоваться для поиска значений маскировки.
src_mask_value Если волки буфера источника имеют это значение в канале, указанном для маскировки, то они не будут вставляться.
dst_mask_channel канал из пункта назначения, который будет использоваться для отбора запрограммируемых вокселей.
dst_writable_list Список значений, которые должны быть указаны в вокселях места назначения, должен составлять от 0 до 65535.
| Имя | Тип | По умолчанию |
|---|---|---|
position | Vector3I | — |
voxels | VoxelBuffer | — |
channelsMask | byte | — |
srcMaskChannel | byte | — |
srcMaskValue | ulong | — |
dstMaskChannel | byte | — |
dstWritableList | ReadOnlySpan<int> | — |
RaycastVoxelRaycastResult
public VoxelRaycastResult Raycast(Vector3 origin, Vector3 direction, float maxDistance = 10f, uint collisionMask = 4294967295);Запустит воксельский луч, чтобы найти первый удар от источника и направления. Координаты находятся в мировом пространстве.
Возвращает объект результата, если воксель попал в него, в противном случае возвращает null.
Это полезно в тех случаях, когда нельзя полагаться на коллайдеры. Он также может быть быстрее (по крайней мере на коротком расстоянии) и более точен для определения того, на кого бьет воксель. Он использует алгоритм ДВР.
collision_mask в настоящее время используется только с закупорочными вокселями. VoxelBlockyModel.CollisionMask чтобы решить, с каким вокселем может столкнуться луч.
| Имя | Тип | По умолчанию |
|---|---|---|
origin | Vector3 | — |
direction | Vector3 | — |
maxDistance | float | 10f |
collisionMask | uint | 4294967295 |
VoxelRaycastResultSetChannelvoid
public void SetChannel(VoxelBuffer.ChannelId v);| Имя | Тип | По умолчанию |
|---|---|---|
v | VoxelBuffer.ChannelId | — |
SetEraserValuevoid
public void SetEraserValue(ulong v);| Имя | Тип | По умолчанию |
|---|---|---|
v | ulong | — |
SetModevoid
public void SetMode(VoxelTool.ModeEnum m);| Имя | Тип | По умолчанию |
|---|---|---|
m | VoxelTool.ModeEnum | — |
SetRaycastNormalEnabledvoid
public void SetRaycastNormalEnabled(bool enabled);Устанавливает ли VoxelTool.Raycast Вычислить нормальные хиты. Это правда по умолчанию.
| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetSdfScalevoid
public void SetSdfScale(float scale);| Имя | Тип | По умолчанию |
|---|---|---|
scale | float | — |
SetSdfStrengthvoid
public void SetSdfStrength(float strength);| Имя | Тип | По умолчанию |
|---|---|---|
strength | float | — |
SetTextureFalloffvoid
public void SetTextureFalloff(float falloff);| Имя | Тип | По умолчанию |
|---|---|---|
falloff | float | — |
SetTextureIndexvoid
public void SetTextureIndex(int index);| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
SetTextureOpacityvoid
public void SetTextureOpacity(float opacity);| Имя | Тип | По умолчанию |
|---|---|---|
opacity | float | — |
SetValuevoid
public void SetValue(ulong v);| Имя | Тип | По умолчанию |
|---|---|---|
v | ulong | — |
SetVoxelvoid
public void SetVoxel(Vector3I pos, ulong v);Устанавливает первичное целое значение конкретного вокселя на текущем канале.
| Имя | Тип | По умолчанию |
|---|---|---|
pos | Vector3I | — |
v | ulong | — |
SetVoxelFvoid
public void SetVoxelF(Vector3I pos, float v);Устанавливает значение подписанных дистанционных полей (SDF) для конкретного воксела. Предпочтительно это следует использовать на канале SDF.
| Имя | Тип | По умолчанию |
|---|---|---|
pos | Vector3I | — |
v | float | — |
SetVoxelMetadatavoid
public void SetVoxelMetadata(Vector3I pos, Variant meta);Применяет произвольные данные по конкретному вокселю. Старые данные заменены. null будет стирать метаданные.
Если ключевые вокселы могут быть сохранены, эти метаданные также будут сохранены, так что убедитесь, что данные поддерживают серийный процесс (т.е. вы не можете поместить узлы или произвольные объекты в него).
| Имя | Тип | По умолчанию |
|---|---|---|
pos | Vector3I | — |
meta | Variant | — |
SmoothSpherevoid
public void SmoothSphere(Vector3 sphereCenter, float sphereRadius, int blurRadius);Противопоглощает местность, делая коробку размытой в сферической области. Прочность будет максимальной в центре сферы и линейно уменьшаться до нуля на поверхности сферы. Воксели за пределами сферы не будут затронуты.
sphere_center Это положение на местности, которое будет сглажено.
sphere_radius радиус сферы от center где будут затронуты значения вокселя, должны быть больше нуля.
blur_radius - половина длины пятна в ящике, которая будет взята для расчета средних значений voxel. Более высокие значения приводят к более агрессивному сглаживанию.
Примечание 1: В настоящее время эта система применяется только в отношении местности, где используются данные СФР (сможные воксели).
Примечание 2: Остерегайтесь использования высоких sphere_radius и высокие blur_radius так как производительность может быстро падать, если это называется 60 раз в секунду.
| Имя | Тип | По умолчанию |
|---|---|---|
sphereCenter | Vector3 | — |
sphereRadius | float | — |
blurRadius | int | — |
U16IndicesToVec4IVector4I
public static Vector4I U16IndicesToVec4I(int _UnnamedArg0);Декодирует первичные воксель-полные данные с канала INDICES в четырехинтегерный вектор.
| Имя | Тип | По умолчанию |
|---|---|---|
_UnnamedArg0 | int | — |
Vector4IU16WeightsToColorColor
public static Color U16WeightsToColor(int _UnnamedArg0);Декодирует первичные данные вокселя с канала WEIGHTS в нормализованный 4--float Цвет.
| Имя | Тип | По умолчанию |
|---|---|---|
_UnnamedArg0 | int | — |
ColorVec4IToU16Indicesint
public static int Vec4IToU16Indices(Vector4I _UnnamedArg0);Кодирует 4-интегерный вектор в 16-битные целые воксельные данные для использования на канале INDICES.
| Имя | Тип | По умолчанию |
|---|---|---|
_UnnamedArg0 | Vector4I | — |
intVoxelTool.ModeEnum
| Значение | Описание |
|---|---|
Add = 0 | При редактировании |
Remove = 1 | При редактировании |
Set = 2 | Заменить воксель без смешивания. Полезно для закупорочных воксел. |
TexturePaint = 3 | При редактировании |