Skip to main content

Data Model

Glossary​

  • Shard: A 32x32x32 tensor.
  • BlockId: An integer value that corresponds to a given block type, e.g. 1: grass, 2: dirt. All block types are defined in terrain.json.
  • Seed: The initial state of the terrain.
  • Voxel: A single block.
  • Subvoxel: A single block that's 1/8th the size of a full block. Each full block contains 8x8x8 subvoxels.

Shards​

The entire voxel 3D world is split up into shards. The shard data is stored as a buffer, and need to be decompressed to be read.

Each shard contains the following data.

Note: all positions, will the exception of Box, are defined relative to the lowermost coordinate of the shard.

E.g. [0, 0, 0] corresponds to the lowestmost coordinate, [31, 31, 31] corresponds to the uppermost coordinate, and [10, 16, 19] lies somewhere between the lowest and highest most coordinates.

Box​

v0: lowermost coordinate of the shard.

v1: uppermost coordinate of the shard.

ShardSeed​

The Biomes terrain has some initial state we refer to as the seed. Each voxel in the world has some initial block type, which is stored in ShardSeeds. ShardSeed(x, y, z) stores the BlockId of the initial block type at that location.

The seed shards are generated by scripts defined in galois.

ShardDiff​

When a voxel's block type is modified and becomes different then the seed shard, we store this diff(erence) in the diff shards. Because most blocks will not be updated, these are sparse tensors - they store a maximum of 32x32x32 entries. In other words, we only store the updates.

Like the ShardSeed, these shards define a mapping for position to BlockId.

ShardShape​

The terrain is mostly occupied by full blocks, perfect cubes. However, all voxels can be transformed into a different shape, for example a stair, a fence, window, table, etcetera, using shaping tools. The shape shards store information about the current shape of each voxel.

The shape data is encoded as an integer and contains two things:

  1. ShapeId: e.g. stair. Shapes are defined in shapes.json.
  2. IsomorphismId: e.g. stair flipped vertically and facing north.

ShardPlacer​

Each user has a BiomesId which is their unique identifier. The placer shards correspond voxels with the user, BiomesId, that last modified it.

ShardOccupancy​

Placeables, like a boombox, TV, or flower, are not voxels however they still take up space. The occupancy tensor records the space occupied by non-voxel things so that other things are not placed in the space they occupy. Each position corresponds to the BiomesId of the entity that occupied the position, if there is one.