技术解读
基于unity平台,使用Brust编译器的体素建模插件。
体素引擎
体素引擎是一种尝试模拟原子的软件。每个原子或“体素”都占据一个定义的空间并具有特定的属性。
体素最基本的属性是固体或非固体。这些还可以包含其他值以定义其他属性,例如颜色或材料。每个体素的属性都非常适合应用程序的要求,因为内存需求是巨大的。
最常见的样本是[Minecraft](一个成功的游戏)。这些块可以使用各种工具雕刻。当然有许多用例,例如游戏,但也包括任何体积数据集的可视化,例如计算机断层扫描。
引擎开发原理
1.实现数据结构:稀疏八叉树,每当修改体素时,细分和合并体素,减少内存消耗。
2.可视化系统:检查数据结构是否有效,使用立方体进行构造。
3.体素的修改:简单的工具进行修改体素数据,例如碰撞去除。
4.体素的优化:多线程,Brust和ECS。C#的unsafe。float的精度误差。算法对模型平滑。
软件及功能简介
1.无限世界生成。
2.切片扫描的图片直接生成体素模型。
3.网格,地形直接生成体素模型。
4.多个体素模块叠加。
5.灵活的实时修改。
6.多个贴图支持。
7.不受渲染管线影响,全平台兼容。
8.灵活的加载和保存系统。
限制
1.体素分层限制,正常不应该超过32层,会带来很大的锯齿。
2.消除锯齿需要平滑算法,设置边缘体素块的大小。插件自带有算法,还未研究。
2.运行电脑的内存应大于4G。
3.32位电脑运行Brust有兼容性问题。
代码解析
VoxelGeneral
体素生成主要组成部分,为体素数据提供层次和的数据结构。
--VoxelSize:体素块的物理尺寸,占据的空间。蓝色方块表示,不接收负值,1-100是理想的性能。
--InitialValue:新生成块的初始值。255表示实心,0表示空心。真正值取决于附加的Hull Generators
--Depth:深度是体积⼤⼩。深度越⾼,体素变得越⼩。
--Subdivision Power:定义了底层数据结构的布局(等于3时候具有最佳的内存/性能比)。
--Dimension Count:体素⽣成器具有第四维度。如果此值⼤于 1,则 Voxel Generator 将同时管理多个 Voxel Data。第⼀维总是⽤来描述哪些区域是实⼼的。附加维度是隐藏的,除⾮船体⽣成器将附加维度⽤于某些恶作剧,例如多纹理⽀持,其中第⼆个维度描述材料类型。
--Rebuild():重新⽣成外壳⽣成器。
--SetVoxels()/SetvoxelsAdditive():提供直接或以附加⽅式修改体素的直接功能。基本参数通常是局部位置、⽬标深度和ID。
--SetRegionsDirty():将区域标记为脏,因此必须更新视觉效果。
--SetNeighbor(int ID, VoxelGenerator generator):将体素⽣成器与另⼀个体素⽣成器连接起来。 ID是位置,0为左
下前,26为右上后。
VoxelSaveSystem
提供⽤于保存体积数据集的选项,并在保存场景本⾝时⾃动保存体素数据。
--ApplyRawVoxelData:将 RawVoxelData 应⽤于⽬标 VoxelGenerator。
--DynamicLoad():在不中断游戏玩法的情况下从任何来源加载任何体素贴图的实时⽅法。可以在加载期间修改 VoxelGenerator,但在加载完成之前抑制外壳⽣成器。
--DynamicSave():不会导致性能峰值的实时保存选项。将体素贴图作为⼆进制⽂件保存到持久数据路径中,应在不中断游戏玩法的情况下调⽤。 VoxelGenerators 在保存过程中被锁定。
--Load():加载体素数据并重建VoxelGenerator。
--Save():⽴即保存体素数据。 (导致性能飙升)。
VoxelModifier
修改体素的主要⼯具。该脚本允许在编辑模式下进⾏绘画,并提供其他功能来修改数据集。
--TargetDimension:修改的维度,标准为0。最终取决于Hull生成器。大于0可以用于温度,适度,压力等。
--Depth:修改的目标分辨率,大小。
--VoxelModifyPosition是⽤于修改程序定位的组件。⽰例场景 Marching
Cubes 包含⼀个使⽤此类组件的雪⽣成器 GameObject。
ColliderToVoxel
--Tolerance:公差,体素离碰撞器多近才能转化为实体。
--Falloffdist:定义距离不够近时的强度衰减。大的值会导致急剧衰减,是结果块状,理想在1000,10000之间,可以创建平滑的结果。
--FinalMultiplier:是一个乘法器,值为负时材料会被移除。