最近三个星期,我一直在努力提高我的微小立方体引擎(Micro Voxel Engine)的渲染距离和地形生成,特别是由于N64视距的反馈😅
我对增加渲染距离从300米到~10-15公里,运行在Apple M1 Pro上,45-50 FPS的结果感到很满意。
注:此引擎使用网格化(meshing)而不是光线追踪(RT)和分层差值(DDA)。
——宏块(Macro chunks)——
所有块生成函数现在都包含一个筛选函数,自动可以在1/N分辨率下生成块,没有任何变化。这也应用于生成的特征和标记,使块可以在任何分辨率下生成而不需要降采样。
宏块独立记录和解决本地编辑。它们独立保存(和缓存),以便维持地形编辑而不需要维持完整分辨率的副本在内存中。
低分辨率的宏块很快就能生成。在这个阶段,我可以添加更多的分辨率段,并且1/64分辨率的块生成时间与高分辨率的块相同,但覆盖了巨大的距离。
——LOD转换和自适应雾——
我主要使用瞬态转换,细节级别在每个转换之间淡化一次,而不是连续渐变转换,因为这在GPU上约为30%更便宜,而且在大多数场景中看起来几乎是平滑的。
自适应雾根据加载的分辨率动态调整有效绘制距离。分辨率从高到低生成,所以在快速运动时,如果需要,我们可以暂时减少绘制距离,直到块加载。
——宏块卡片和道具——
这也是最困难的一部分,保持相同的树和道具覆盖而不需要实例化数百万个实体:
-宏块保留一个列表,包含基于位置和类型的ID确定的道具ID。如果真实的实体被销毁,我们可以将其映射到宏块集并删除。同样,对于新生成的道具。
-草和植被不与实际加载的道具1:1映射,但遵循相同的生成模式,所以技术上会有差异,但这是避免跟踪数百万个草叶的好处。
评论 (0)