跳转至

子区块

子区块(Subchunk)是区块在垂直方向上划分出的16×16×16方块数据单元。子区块使游戏能够按高度分段存储和处理方块数据,而不必将整个区块柱体作为一个不可拆分的数据块。

概述

区块在水平方向上覆盖16×16个方块。随着世界高度扩展,单个区块柱体包含的方块数量很大,因此基岩版将其进一步拆分为多个子区块。每个子区块覆盖16格高度,包含4096个方块位置。

在主世界建筑高度为Y=-64到Y=319时,一个完整区块柱体覆盖24个子区块。不同维度或不同版本的高度范围可能影响实际可用的子区块索引范围。

方块存储

子区块是方块数据存储的重要粒度。基岩版使用调色板化存储记录子区块中的方块置换:调色板保存该子区块实际出现过的方块置换,方块位置则保存指向调色板条目的索引。

这种方式可以减少重复数据。例如,一个几乎全部由石头构成的地下子区块只需要在调色板中保存少数几种方块置换,再用较小的索引记录每个位置。

存储层

子区块可以包含多个存储层。常见情况下,第一层记录主要方块,另一层可用于记录与方块共存的液体等信息。含水方块等机制需要这种分层能力来表达同一位置上的宿主方块与水状态。

并非所有子区块都必须写入存档。当某个子区块完全为空气且没有需要保存的数据时,游戏可以省略该子区块,以降低存档体积。

与加载和渲染

子区块有助于游戏更细粒度地处理光照、渲染和方块数据变更。客户端渲染区块时通常也会按垂直分段构建网格,从而只重建发生变化的部分区域。

对于存档修改、区块解析和底层工具开发而言,理解子区块结构非常重要。错误理解子区块高度或索引范围,可能导致方块写入到错误高度或造成区块数据损坏。