Colours of the Boundless worlds

We’re working on it…

22 Likes

Procedural palettes! That’s honestly unexpected, and super exciting :smiley:


preemptive request: LAB color space!

edit: no scratch that, I need to read up more about HSLuv—seems to have a lot of the same perceptive properties as LAB

2 Likes

Spoiler^^ decorative woods :grin:

2 Likes

Oh man, so much excitement about this!

2 Likes

No - unscratch that!

We are using a range of colour spaces including CIEL*a*b* to generate the base palette. Then CIELAB Delta E* to maximise the distance between all the colours. It’s all about perception!! The base palette is then manipulated to create the variations per block as show the in screenshot. Then the World Builder has another structure that procedurally selects from the palettes to colour a new world. There is a degree of discretisation in the result but our tests show it’s not noticeable. Each world can generate it’s own set of block colours. This means that we can dramatically vary the visual theme and result, still allow block transitions between worlds, universally name colours, and (in the future) colour transmogrification between block types.

(Never thought I’d get to use that word in a post!)

16 Likes

Are you generating a set # of steps along that spectrum? Aka will the base palette eventually wrap around with enough worlds? (also see: cubehelix, and chroma-js’s great interactive demo of it)

Then again, if each world’s palette chooses multiple colors from the base one, that’s a hell of a lot of combinations


The nerding out about color spaces is great with this one.


Man, there are going to be some cool looking worlds & builds at launch. The Sand Box may have to grow a smidge :stuck_out_tongue:

10 Likes

Wow, nice!! Bring out your inner thesaurus!!!

2 Likes

A smidge… hahaha funny :stuck_out_tongue:

1 Like

The palette per block is finite at 255 colours, as we need to efficiently pack the blocks in the voxel chunks. So players will have 255 colours per block to play with. (Which is actually a lot!) But the combination of block colours selected per world is huge. So yes - ultimately there will be multiple worlds with (say) Red Gleam, but no - there should not be 2 worlds with the same final palette.

More interestingly from a gameplay perspective, with a shared palette ordering per block (Red Gleam is the same index as Red Rock) there might be some block colours that don’t get procedurally used during generation. So players would only be able to use these by (some future) dying process.

The non-block colours (time of day sky gradients, sun / night-sun, etc) can be selected uniquely per world as they can’t be transferred, so we can use absolute values rather than a predetermined palette.


The Sandbox will need expanding … slightly.

13 Likes

I also had a plan of using a storage slot for each item/color pair; I may need to rethink that…

2 Likes

Thanks for these links.

As a fellow nerd, I notice that chroma-js is using the X11 → SVG → CSS3 colour names. These are considered pretty crappy. This analysis captures the range of various named colour palettes. And comically the space has finally gone full circle when an XKCD comic is considered one of the best public domain options available.

I’ve maybe spent too much time making sure that we name the blocks in Boundless correctly… :rainbow:

2 Likes

You could try storing them more horizontally. Imagine more of a library :slight_smile:

Edit: I meant vertically.

Surely the only valid option is beaconing the world between [0, 0, 0] and [255, 255, 255], and storing each block at it’s unique RGB coordinate…

5 Likes

Surely you do not doubt the community and our ability to collect 16 million different blocks of each block type! It will be a joint force. Some say we may even span these blocks throughout the planet uniformally in a road. We will call it the rainbow road and it will be marvelous.

/sarcasm :slight_smile:

6 Likes

…I think we might need to have a talk about bumping the number of plots we get per level :stuck_out_tongue:

3 Likes

well… there are 255 colours in the palette, so for “coloured” blocks, there will be 255 different versions of them.
now, not “every” block is coloured, but “assuming” they all were, then there are “up to” 32768 block ids we can allocate (we are “no where near” that) but many of them are range-allocations, where the 8bit metadata is insufficient to encode all variations of the block, eg we have 3 block-ids for any chiselled block, one for “sloped” one for “bevel” and one for “square” chiselled, and there are larger ranges where the textures of the block can also be rotated 4 ways, and very large range allocations for things like the resource blocks and grass, where a copper-ore block is actually one of 4 blocks, because it can be embedded in one of 4 rock types, and grass where we have huge ranges of thousands of block-ids, because apart from the sloped-grass (which uses all the metadata already) we also have 4 heights of grass * 3 soil types * 255 colours of soil independent from the colour of the grass…

but at a very rough calculation, you “could” say, you need a cube of 255x255x255 to have 1 colour of every single block… and WAY bigger than that, if you want 1 colour of every single block in every single “shape” ;p

6 Likes

Totally feasible!


Idea for an expansion to the game—introduce a 4th dimension—Boundless: Hypercube Edition™

4 Likes

It’s only 2 ^ 15 plots! Just buy the game a few more times… :moneybag: :dollar: :gem:

8 Likes

Lol, I’ll do so right after I buy the game for the first time.

we currently generate a somewhat restricted range of colours into the base 255 colour palette (we dont have black or super dark colours, or white or super bright colours. based on HSLuv the luminance is restricted to the [20, 90] range) because we need space to generate highlights/shadows of each, and perfect black colours would be terrible to use in the game (no amount of light could make it visible…). I have a feeling we may need to restrict the dark end even further once can test in the game fully (which would help make the palette “better” too since it would better represent the colours we want).

currently, based on the 2000 version of Delta*E color-distance metric, the closest-distance between any 2 colours within the 255 colour palette is within the range [7.99394, 9.75728] with an average closest-distance of 8.28018, so there is some work to try and make the distribution a little bit more uniform. More importantly, testing the HSLuv range that the palette is generated against to get a better metric for “how good are these 255 colours”, testing a uniform spread in HSLuv in the range we care about, of about 2.4 million colours, the distance to the closest colour in the 255 palette is no greater than 8.3797 and averages 4.23279 (so again, some improvements could be made to bring the maximum closer to the average).

No palette of 255 colours is “ever” going to be good enough to take a high quality photo and accurately represent the complex gradients of colour etc, but thats not what we’re trying to do :). What we do have, is a set of 255 colours that cover a full (*based on the restricted luminance range) set of colours that we can assign actual names to, and are “different enough” that it is not impossible to tell the difference between any 2 of them (though saying that, its pretty hard sometimes still!) whilst being dense enough that we can use it for “procedural” world palettes.

5 Likes