VoxelBuffer
3D-сеть, хранящая данные о вокселе.
3D-сеть, хранящая данные о вокселе.
Она содержит плотное хранение данных о вокселях (каждая одиночная ячейка содержит данные, отсутствует низкая оптимизация пространства). Работает как нормальная трехмерная сетка, содержащая значение вокселя в каждой клетке. Организованная в каналах конвейерной глубины бита. Значения могут интерпретироваться либо как неподписавшиеся целые числа, фиксированная точка или поплавки. См. VoxelBuffer.Depth для дополнительной информации.
Произвольные метаданные также могут храниться либо для всего буфера, либо для каждого вокселя при более высоких затратах. Эти метаданные могут быть сохранены и загружены по вокселям, однако вы должны убедиться, что данные являются серийными (т.е. они не должны содержать узлы или произвольные объекты).
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
VoxelBufferКонструктор
public VoxelBuffer();Методы50
Clearvoid
public void Clear();Стирает все содержимое буфера и меняет его размер на ноль. Глубины канала и значения по умолчанию сохранены.
ClearVoxelMetadatavoid
public void ClearVoxelMetadata();Стирает все метаданные на одного вокселя.
ClearVoxelMetadataInAreavoid
public void ClearVoxelMetadataInArea(Vector3I minPos, Vector3I maxPos);Стирать метаданные по каждому вокселю в пределах конкретной области.
| Имя | Тип | По умолчанию |
|---|---|---|
minPos | Vector3I | — |
maxPos | Vector3I | — |
CompressUniformChannelsvoid
public void CompressUniformChannels();Найти каналы, которые имеют одинаковую ценность во всех их вокселях, и сократить использование памяти, сохранив вместо этого только одно значение. Это эффективно, например, когда большая часть местности заполнена воздухом.
CopyChannelFromvoid
public void CopyChannelFrom(VoxelBuffer other, uint channel);Копировать все значения с канала другой VoxelBuffer в один и тот же канал для текущего буфера. Форматы глубин должны соответствовать.
| Имя | Тип | По умолчанию |
|---|---|---|
other | VoxelBuffer | — |
channel | uint | — |
CopyChannelFromAreavoid
public void CopyChannelFromArea(VoxelBuffer other, Vector3I srcMin, Vector3I srcMax, Vector3I dstMin, uint channel);Экземпляры значений из субрегиона канала VoxelBuffer в один и тот же канал для текущего буфера, в конкретном месте. Форматы глубин должны соответствовать.
Если углы района представляют собой зону с отрицательным размером, они будут сортироваться обратно.
Если координаты полностью или частично выходят за рамки, то они будут отрезаны автоматически.
Скопирование через один и тот же буфер в перекрывающихся районах не поддерживается. В этом случае вы можете использовать промежуточный буфер.
| Имя | Тип | По умолчанию |
|---|---|---|
other | VoxelBuffer | — |
srcMin | Vector3I | — |
srcMax | Vector3I | — |
dstMin | Vector3I | — |
channel | uint | — |
CopyVoxelMetadataInAreavoid
public void CopyVoxelMetadataInArea(VoxelBuffer srcBuffer, Vector3I srcMinPos, Vector3I srcMaxPos, Vector3I dstMinPos);Экземпляры метаданных из одного субрегиона другого VoxelBuffer Значения будут неглубокой копией.
Если углы района представляют собой зону с отрицательным размером, они будут сортироваться обратно.
Если координаты полностью или частично выходят за рамки, то они будут отрезаны автоматически.
Скопирование через один и тот же буфер в перекрывающихся районах не поддерживается. В этом случае вы можете использовать промежуточный буфер.
| Имя | Тип | По умолчанию |
|---|---|---|
srcBuffer | VoxelBuffer | — |
srcMinPos | Vector3I | — |
srcMaxPos | Vector3I | — |
dstMinPos | Vector3I | — |
Createvoid
public void Create(int sx, int sy, int sz);Очистить буфер и дать ему определенный размер.
| Имя | Тип | По умолчанию |
|---|---|---|
sx | int | — |
sy | int | — |
sz | int | — |
Create3DTextureFromSdfZxyImageTexture3D
public ImageTexture3D Create3DTextureFromSdfZxy(Image.Format outputFormat);Создаёт трёхмерную текстуру с канала SDF.
Если output_format 8-битный пиксельный формат, текстура будет содержать нормализованные поставленные расстояния, где 0,5 - это изоуровень, 0 - самый удаленный от поверхности и 1 - наиболее удаленный от поверхности.
Поддерживается только 16-битный канал SDF.
Только Image.Format.R8 и Image.Format.L8 Форматы выходных данных не учитываются.
Примечание: при отборе проб этой текстуры в тендере нужно скручивать 3D координаты с .yxz. Именно таким образом воксель хранится внутри страны, и эта функция не изменяет эту конвенцию.
| Имя | Тип | По умолчанию |
|---|---|---|
outputFormat | Image.Format | — |
ImageTexture3DDebugPrintSdfYSlicesReckfell.Collections.Array<Image>
public Reckfell.Collections.Array<Image> DebugPrintSdfYSlices(float scale = 1f);Оформляет содержимое канала SDF в виде изображений, где синие градиенты являются отрицательными значениями (низкая поверхность) и желтые градиенты - положительными (выше поверхности). Каждое изображение соответствует кусочке буфера XZ.
:: scale параметр может использоваться для изменения контраста изображений путем масштабирования SDF.
| Имя | Тип | По умолчанию |
|---|---|---|
scale | float | 1f |
Reckfell.Collections.Array<Image>DecompressChannelvoid
public void DecompressChannel(int channel);Если данный канал в настоящее время сжимается, он декомпрессирует таким образом, чтобы все значения воксела хранились в полном объеме. Это будет использовать больше памяти.
| Имя | Тип | По умолчанию |
|---|---|---|
channel | int | — |
DownscaleTovoid
public void DownscaleTo(VoxelBuffer dst, Vector3I srcMin, Vector3I srcMax, Vector3I dstMin);Производит пониженную версию этого буфера в 2 раза без какой-либо интерполяции (т.е. с использованием ближайшего соседа). Метаданные не копируются.
| Имя | Тип | По умолчанию |
|---|---|---|
dst | VoxelBuffer | — |
srcMin | Vector3I | — |
srcMax | Vector3I | — |
dstMin | Vector3I | — |
Fillvoid
public void Fill(ulong value, int channel = 0);Заполняет один канал этого буфера конкретной сырой стоимостью.
| Имя | Тип | По умолчанию |
|---|---|---|
value | ulong | — |
channel | int | 0 |
FillAreavoid
public void FillArea(ulong value, Vector3I min, Vector3I max, uint channel = 0);Заполняет зону канала в этом буфере конкретной сырой стоимостью.
| Имя | Тип | По умолчанию |
|---|---|---|
value | ulong | — |
min | Vector3I | — |
max | Vector3I | — |
channel | uint | 0 |
FillAreaFvoid
public void FillAreaF(float value, Vector3I min, Vector3I max, uint channel);Заполняет зону канала в этом буфере конкретным значением SDF.
| Имя | Тип | По умолчанию |
|---|---|---|
value | float | — |
min | Vector3I | — |
max | Vector3I | — |
channel | uint | — |
FillFvoid
public void FillF(float value, int channel = 0);Заполняется один канал этого буфера конкретным значением SDF.
| Имя | Тип | По умолчанию |
|---|---|---|
value | float | — |
channel | int | 0 |
ForEachVoxelMetadatavoid
public void ForEachVoxelMetadata(Callable callback);Выполняет функцию на каждом вокселе в этом буфере, который имеет соответствующие метаданные. Аргументы функции должны быть (позиция: Vector3i, метаданные: Variant). ВАЖНЕЙШИЙ: Вводить новые или удалять метаданные внутри этой функции не разрешается.
| Имя | Тип | По умолчанию |
|---|---|---|
callback | Callable | — |
ForEachVoxelMetadataInAreavoid
public void ForEachVoxelMetadataInArea(Callable callback, Vector3I minPos, Vector3I maxPos);Выполняет функцию на каждом вокселе в этом буфере, который имеет соответствующие метаданные в пределах указанной области. ВАЖНЕЙШИЙ: Вводить новые или удалять метаданные внутри этой функции не разрешается.
| Имя | Тип | По умолчанию |
|---|---|---|
callback | Callable | — |
minPos | Vector3I | — |
maxPos | Vector3I | — |
GetAllocatorVoxelBuffer.Allocator
public VoxelBuffer.Allocator GetAllocator();Узнает, какой генератор памяти используется этим буфером.
VoxelBuffer.AllocatorGetBlockMetadataVariant
public Variant GetBlockMetadata();Получает метаданные, связанные с этим VoxelBuffer.
VariantGetChannelAsByteArraybyte[]
public byte[] GetChannelAsByteArray(VoxelBuffer.ChannelId channelIndex);Получает данные о вокселе с канала в качестве незажатых необработанных байтов. Проверить VoxelBuffer.Depth для информации о формате данных.
Примечание: если канал сжат, то он будет декомпрессирован на мухе в обратном массиве. Если вы хотите другое поведение в этом случае, проверьте VoxelBuffer.GetChannelCompression до того, как позвонить по этому методу.
| Имя | Тип | По умолчанию |
|---|---|---|
channelIndex | VoxelBuffer.ChannelId | — |
byte[]GetChannelCompressionVoxelBuffer.Compression
public VoxelBuffer.Compression GetChannelCompression(int channel);Получает режим сжатия указанного канала.
| Имя | Тип | По умолчанию |
|---|---|---|
channel | int | — |
VoxelBuffer.CompressionGetChannelDepthVoxelBuffer.Depth
public VoxelBuffer.Depth GetChannelDepth(uint channel);Получает глубину указанного канала.
| Имя | Тип | По умолчанию |
|---|---|---|
channel | uint | — |
VoxelBuffer.DepthGetSizeVector3I
public Vector3I GetSize();Получает 3D размер буфера во вокселях.
Vector3IGetVoxelulong
public ulong GetVoxel(int x, int y, int z, uint channel = 0);Получает сырую стоимость вокселя в этом буфере.
| Имя | Тип | По умолчанию |
|---|---|---|
x | int | — |
y | int | — |
z | int | — |
channel | uint | 0 |
ulongGetVoxelFfloat
public float GetVoxelF(int x, int y, int z, uint channel = 0);Получил float Значение вокселя в этом буфере. Вы можете использовать эту функцию, если вы работаете с SDF томами (cmoth voxels).
| Имя | Тип | По умолчанию |
|---|---|---|
x | int | — |
y | int | — |
z | int | — |
channel | uint | 0 |
floatGetVoxelMetadataVariant
public Variant GetVoxelMetadata(Vector3I pos);Прикрепляет метаданные к конкретному вокселю в этом буфере.
| Имя | Тип | По умолчанию |
|---|---|---|
pos | Vector3I | — |
VariantGetVoxelToolVoxelTool
public VoxelTool GetVoxelTool();Строит a VoxelTool Это обеспечивает доступ к некоторым дополнительным общим функциям.
VoxelToolGetVoxelVulong
public ulong GetVoxelV(Vector3I pos, uint channel = 0);Получает сырую стоимость вокселя в этом буфере.
| Имя | Тип | По умолчанию |
|---|---|---|
pos | Vector3I | — |
channel | uint | 0 |
ulongIsUniformbool
public bool IsUniform(int channel);Проверяет, имеет ли каждый воксел внутри канала одинаковое значение.
| Имя | Тип | По умолчанию |
|---|---|---|
channel | int | — |
boolMirrorvoid
public void Mirror(Vector3I.Axis axis);Зеркала Вокселя вдоль указанной оси.
| Имя | Тип | По умолчанию |
|---|---|---|
axis | Vector3I.Axis | — |
OpAddBufferFvoid
public void OpAddBufferF(VoxelBuffer other, VoxelBuffer.ChannelId channel);Вычисляет сумму соответствующих воксел между нынешним буфером и другим буфером и храните результат в текущем буфере. Voxels интерпретируются как подписанные расстояния (как правило, VoxelBuffer.ChannelId.ChannelSdf Канал).
| Имя | Тип | По умолчанию |
|---|---|---|
other | VoxelBuffer | — |
channel | VoxelBuffer.ChannelId | — |
OpMaxBufferFvoid
public void OpMaxBufferF(VoxelBuffer other, VoxelBuffer.ChannelId channel);Вычисляет максимальное количество соответствующих воксел между нынешним буфером и другим буфером и храните результат в текущем буфере. Воксель интерпретируется как подписанные расстояния (как правило, VoxelBuffer.ChannelId.ChannelSdf Канал).
| Имя | Тип | По умолчанию |
|---|---|---|
other | VoxelBuffer | — |
channel | VoxelBuffer.ChannelId | — |
OpMinBufferFvoid
public void OpMinBufferF(VoxelBuffer other, VoxelBuffer.ChannelId channel);Вычисляет минимальное количество соответствующих воксел между нынешним буфером и другим буфером и храните результат в текущем буфере. Воксели интерпретируются как подписанные расстояния (как правило, VoxelBuffer.ChannelId.ChannelSdf Канал).
| Имя | Тип | По умолчанию |
|---|---|---|
other | VoxelBuffer | — |
channel | VoxelBuffer.ChannelId | — |
OpMulBufferFvoid
public void OpMulBufferF(VoxelBuffer other, VoxelBuffer.ChannelId channel);Вычисляет умножение соответствующих воксел между нынешним буфером и другим буфером и храните результат в текущем буфере. Воксели интерпретируются как подписанные расстояния (как правило, VoxelBuffer.ChannelId.ChannelSdf Канал).
| Имя | Тип | По умолчанию |
|---|---|---|
other | VoxelBuffer | — |
channel | VoxelBuffer.ChannelId | — |
OpMulValueFvoid
public void OpMulValueF(float other, VoxelBuffer.ChannelId channel);Все воксели в буфере перемножаются по заданному значению. VoxelBuffer.ChannelId.ChannelSdf Канал).
| Имя | Тип | По умолчанию |
|---|---|---|
other | float | — |
channel | VoxelBuffer.ChannelId | — |
OpSelectLessSrcFDstIValuesvoid
public void OpSelectLessSrcFDstIValues(VoxelBuffer src, VoxelBuffer.ChannelId srcChannel, float threshold, int valueIfLess, int valueIfMore, VoxelBuffer.ChannelId dstChannel);Для каждого вокселя в исходном буфере, если значение ниже порогового значения, установить соответствующий воксель в текущем буфере на конкретное целое значение или другое значение. VoxelBuffer.ChannelId.ChannelSdf Канал).
| Имя | Тип | По умолчанию |
|---|---|---|
src | VoxelBuffer | — |
srcChannel | VoxelBuffer.ChannelId | — |
threshold | float | — |
valueIfLess | int | — |
valueIfMore | int | — |
dstChannel | VoxelBuffer.ChannelId | — |
OpSubBufferFvoid
public void OpSubBufferF(VoxelBuffer other, VoxelBuffer.ChannelId channel);Вычитает вычитание соответствующих воксел между нынешним буфером и другим буфером ().current - other), и хранит результат в текущем буфере. VoxelBuffer.ChannelId.ChannelSdf Канал).
| Имя | Тип | По умолчанию |
|---|---|---|
other | VoxelBuffer | — |
channel | VoxelBuffer.ChannelId | — |
RemapValues2 перегрузки
public void RemapValues(uint channel, int[] map);Пересчитать все значения на канале с использованием перешедшего map Таблица просмотра. map соответствует первоначальному значению и заменяется на map[original].
| Имя | Тип | По умолчанию |
|---|---|---|
channel | uint | — |
map | int[] | — |
public void RemapValues(uint channel, ReadOnlySpan<int> map);Пересчитать все значения на канале с использованием перешедшего map Таблица просмотра. map соответствует первоначальному значению и заменяется на map[original].
| Имя | Тип | По умолчанию |
|---|---|---|
channel | uint | — |
map | ReadOnlySpan<int> | — |
Rotate90void
public void Rotate90(Vector3I.Axis axis, int turns);Поворачивается значение вокселя на 90 градусов по указанной оси. 1 поворот - 90 градусов, 2 поворота - 180 градусов, 3 поворота - 270 градусов (или -90), 4 поворота - ничего не делают. Отрицательные повороты идут в другую сторону. Это также может повернуть размер буфера, если он не кубический.
| Имя | Тип | По умолчанию |
|---|---|---|
axis | Vector3I.Axis | — |
turns | int | — |
SetBlockMetadatavoid
public void SetBlockMetadata(Variant meta);Устанавливает произвольные данные на этом буфере. Старые данные заменяются. Примечание, это отдельное хранилище от метаданных на каждого вокселя.
Если это VoxelBuffer , сохранен, эти метаданные также будут сохранены вдоль вокселей, так что убедитесь, что данные поддерживают серийную регистрацию (т.е. вы не можете поместить узлы или произвольные объекты в них).
| Имя | Тип | По умолчанию |
|---|---|---|
meta | Variant | — |
SetChannelDepthvoid
public void SetChannelDepth(uint channel, VoxelBuffer.Depth depth);Изменяет глубину бита данного канала. Это контролирует диапазон значений, которые может держать канал. VoxelBuffer.Depth для дополнительной информации.
| Имя | Тип | По умолчанию |
|---|---|---|
channel | uint | — |
depth | VoxelBuffer.Depth | — |
SetChannelFromByteArray2 перегрузки
public void SetChannelFromByteArray(VoxelBuffer.ChannelId channelIndex, byte[] data);Перезаписывает содержимое канала из первичных данных вокселя. Проверьте VoxelBuffer.Depth для информации о предполагаемом формате данных.
| Имя | Тип | По умолчанию |
|---|---|---|
channelIndex | VoxelBuffer.ChannelId | — |
data | byte[] | — |
public void SetChannelFromByteArray(VoxelBuffer.ChannelId channelIndex, ReadOnlySpan<byte> data);Перезаписывает содержимое канала из первичных данных вокселя. Проверьте VoxelBuffer.Depth для информации о предполагаемом формате данных.
| Имя | Тип | По умолчанию |
|---|---|---|
channelIndex | VoxelBuffer.ChannelId | — |
data | ReadOnlySpan<byte> | — |
SetVoxelvoid
public void SetVoxel(ulong value, int x, int y, int z, uint channel = 0);Если вы используете гладкие воксели, вы можете предпочесть использовать VoxelBuffer.SetVoxelF.
| Имя | Тип | По умолчанию |
|---|---|---|
value | ulong | — |
x | int | — |
y | int | — |
z | int | — |
channel | uint | 0 |
SetVoxelFvoid
public void SetVoxelF(float value, int x, int y, int z, uint channel = 0);Устанавливает float Значение вокселя. Этот метод следует использовать, если вы работаете с данными SDF (смойные вокселы).
| Имя | Тип | По умолчанию |
|---|---|---|
value | float | — |
x | int | — |
y | int | — |
z | int | — |
channel | uint | 0 |
SetVoxelMetadatavoid
public void SetVoxelMetadata(Vector3I pos, Variant value);Применяет произвольные данные по конкретному вокселю. Старые данные заменены. null будет стирать метаданные.
Если это VoxelBuffer , сохранен, эти метаданные также будут сохранены вдоль вокселей, так что убедитесь, что данные поддерживают серийную регистрацию (т.е. вы не можете поместить узлы или произвольные объекты в них).
| Имя | Тип | По умолчанию |
|---|---|---|
pos | Vector3I | — |
value | Variant | — |
SetVoxelVvoid
public void SetVoxelV(ulong value, Vector3I pos, uint channel = 0);| Имя | Тип | По умолчанию |
|---|---|---|
value | ulong | — |
pos | Vector3I | — |
channel | uint | 0 |
Update3DTextureFromSdfZxyvoid
public void Update3DTextureFromSdfZxy(ImageTexture3D existingTexture);Обновляет существующую трёхмерную текстуру с канала SDF. VoxelBuffer.Create3DTextureFromSdfZxy для дополнительной информации.
| Имя | Тип | По умолчанию |
|---|---|---|
existingTexture | ImageTexture3D | — |
Поля и константы1
MaxSizeПоле
public const long MaxSize = 65535;Максимальный размер буфера, который может быть при серийном использовании. Бафферы, содержащие однородные воксели, могут достичь его, но на практике предел гораздо ниже и зависит от имеющейся памяти.
VoxelBuffer.Allocator
| Значение | Описание |
|---|---|
Count = 2 | |
Default = 0 | Использовать распределение памяти по умолчанию Reckfell (во время написания) |
Pool = 1 | Использует распределительный распределительный генератор. Может быть быстрее, чем буферы по умолчанию, которые создаются очень часто с одинаковым размером. Эта память останется в силе после использования при условии, что другие буферы будут нуждаться в ней вскоре после. Не поддерживает очень большие буферы (больше чем 2 мегабайта) |
VoxelBuffer.ChannelId
| Значение | Описание |
|---|---|
ChannelColor = 2 | Канал, используемый для хранения цветовых данных. |
ChannelData5 = 5 | Свободный канал, еще не используется двигателем. |
ChannelData6 = 6 | Свободный канал, еще не используется двигателем. |
ChannelData7 = 7 | Свободный канал, еще не используется двигателем. |
ChannelIndices = 3 | Канал хранил индексы материала, а также гладкие воксели. Чаннель |
ChannelSdf = 1 | Канал, используемый для хранения данных SDF (подписанное поле расстояния). |
ChannelType = 0 | Канал, используемый для хранения вокселя. |
ChannelWeights = 4 | Канал, используемый для хранения веса материала, когда можно хранить несколько индексов на вокселе. Используется с гладкими вокселями. |
MaxChannels = 8 | Максимальное число каналовa |
VoxelBuffer.ChannelMask
| Значение | Описание |
|---|---|
AllChannelsMask = 255 | Битмаск со всеми кусочками канала. |
ChannelColorBit = 4 | Битмаск с одним битом, установленным в положении, соответствующем |
ChannelData5Bit = 32 | Битмаск с одним битом, установленным в положении, соответствующем |
ChannelData6Bit = 64 | Битмаск с одним битом, установленным в положении, соответствующем |
ChannelData7Bit = 128 | Битмаск с одним битом, установленным в положении, соответствующем |
ChannelIndicesBit = 8 | Битмаск с одним битом, установленным в положении, соответствующем |
ChannelSdfBit = 2 | Битмаск с одним битом, установленным в положении, соответствующем |
ChannelTypeBit = 1 | Битмаск с одним битом, установленным в положении, соответствующем |
ChannelWeightsBit = 16 | Битмаск с одним битом, установленным в положении, соответствующем |
VoxelBuffer.Compression
| Значение | Описание |
|---|---|
Count = 2 | Сколько есть режимов сжатия.
|
None = 0 | Канал не сжат. Каждое значение хранится внутри массива в памяти. |
Uniform = 1 | Все воксели канала имеют одинаковое значение, поэтому они хранятся как одно единственное значение, чтобы сохранить пространство. |
VoxelBuffer.Depth
| Значение | Описание |
|---|---|
Count = 4 | Сколько там глубинных конфигураций. |
Depth16Bit = 1 | Воксель будет храниться с 16 битами. Первичные значения будут варьироваться от 0 до 65 535. Значения поплавка могут принимать 65 535 значений, распределенных от -500,0 до 500,0. Значения за пределами диапазона будут зажиматься. |
Depth32Bit = 2 | Первичные значения будут варьироваться от 0 до 4 294 967 295 и float Значения будут использоваться для регулярного представления IEEE 754 (показатель IEEE 754) |
Depth64Bit = 3 | Воксель будет храниться с 64 битами. Первичные значения будут варьироваться от 0 до 18 446 744 073 709 551 615 и float Значения будут использоваться для регулярного представления IEEE 754 (показатель IEEE 754) |
Depth8Bit = 0 | Воксель будет храниться с 8 битами. Первичные значения будут варьироваться от 0 до 255. Значения поплавка могут принимать 255 значений, распределенных от -10,0 до 10,0. Значения за пределами диапазона будут зажиматься. |