資料模型
詞彙表
Shard(分片):一個 32x32x32 的張量。BlockId(方塊 ID):對應到特定方塊類型的整數值,例如1: 草地,2: 泥土。所有方塊類型在 terrain.json 中定義。Seed(種子):地形的初始狀態。Voxel(體素):單一方塊。Subvoxel(次體素):大小為完整方塊 1/8 的單一方塊。每個完整方塊包含8x8x8個次體素。
分片 (Shards)
整個體素 3D 世界被分割成分片。 分片資料儲存為緩衝區,需要解壓縮才能讀取。
每個分片包含以下資料。
注意:除
Box外,所有位置都是相對於分片最低點座標定義的。例如:
[0, 0, 0]對應最低點座標,[31, 31, 31]對應最高點座標,而[10, 16, 19]位於最低點和最高點座標之間。
Box
v0:分片的最低點座標。
v1:分片的最高點座標。
ShardSeed
Biomes 地形具有一些我們稱之為 seed(種子)的初始狀態。世界中的每個體素都有一些初始方塊類型,
儲存在 ShardSeed 中。ShardSeed(x, y, z) 儲存該位置初始方塊類型的 BlockId。
種子分片由 galois 中定義的腳本生成。
ShardDiff
當體素的方塊類型被修改並與種子分片不同時,我們將此差異儲存在 diff 分片中。由於大多數方塊不會被更新,這些是稀疏張量——它們最多儲存 32x32x32 個條目。換句話說,我們只儲存更新。
與 ShardSeed 一樣,這些分片定義了位置到 BlockId 的對應關係。
ShardShape
地形主要由完整的方塊(完美的立方體)構成。然而,所有體素都可以使用塑形工具轉換為不同的形狀, 例如樓梯、柵欄、窗戶、桌子等。形狀分片儲存有關每個體素當前形狀的資訊。
形狀資料編碼為一個整數,包含兩個部分:
ShapeId:例如樓梯。形狀在 shapes.json 中定義。IsomorphismId:例如垂直翻轉且朝北的樓梯。
ShardPlacer
每個使用者都有一個 BiomesId 作為其唯一識別碼。放置者分片將體素與最後修改它的使用者的 BiomesId 對應起來。
ShardOccupancy
可放置物品(例如音響、電視或花朵)不是體素,但它們仍然佔據空間。佔用張量記錄了非體素物品所佔據的空間,以便其他物品不會放置在它們佔據的空間中。每個位置對應到佔據該位置的實體的 BiomesId(如果有的話)。