pleroma.debian.social

pleroma.debian.social

i arranged paint(1)'s default color palette by approximate value and function

EDIT: the paint(1) default color palette is the C64 color palette! :O

The default color palette of paint(1), laid out in approximate order of value and hue similarity, as observed on my contemporary laptop which has an uncalibrated screen with a more neutral gamut than my old tablet PC's weird screen.  The 50% gray background is not part of the default palette, and was chosen so that all swatches are visible.  The mid tones and dark values in the palette are closer together in apparent brightness, which creates something resembling a 2D region in the spectrum where you can push the lower value colors warmer and cooler in saturation.  The mid tones quickly bottleneck and the higher value colors are further apart in value.  The higher value colors are also much colder with the exception of the weird desaturated mustard color.

The colors are primarily pastels and earthy tones with an incomplete gray ramp.  This would be good for painting natural scenes, though it lacks the saturation you'd see in nature, and the green selection is conspicuously lacking in the low range.  I think the inclusion of #000000 and #FFFFFF in the palette is an odd contrast, as you can't blend colors in paint(1), but they work nicely as special effect colors e.g. deep shadows, harsh silhouettes, and glossy bright highlights.

@aeva that’s the c64 palette!

@maia ah! so it is! cool :O

finding out that this was the C64 color palette has me now wondering what are the qualities that give a color palette a retrocomputing vibe, because i haven't significantly interacted with the C64 ecosystem before, but i did find the palette to be charmingly quaint.

my current theory is a small constrained set of arbitrary colors with gamut gaps that require substitutions

from looking at various wikipedia lists the other night, most old systems with constrained color pallets did not put a lot of thought into the selection of the colors (with some notable counter examples) and most went for a mathematically convenient distribution that mostly involves the unbroken primaries, their secondaries, etc

so i think the specific hues don't matter quite so much (though pico8 somehow manages to completely nail the vibe while looking totally ahistorical) as being constrained to a very low number of colors.

i also suspect that larger adaptive palettes can be fine provided one sticks to construction rules that feel more or less accurate to weird 8 and 16 bit graphics hardware

so for the project i'm considering all this for, i'm thinking i'm going to produce a common palette of hopefully no more than 64 colors, and design the sprites such that they could be plausibly implemented as a low fixed number of layers with no more than 4 colors per layer. i'm drawing some inspiration from the super gameboy here, but i'm not going to have a fixed tile size. I'll work out the exact rules for layering later

i might also pick the common palette from an existing catalog such as the x11 colors or common art paint colors as a starting point and nudge as needed. i think not having total control over the color (or at least looking like you don't) will also help

@aeva I wonder if that approach was cheaper somehow.

@aeva if you want a true challenge, the MagicWB palette.

Color overview of MagicWB: the background is grey, black and white for high-contrast items, "half black" and "half white" between background and black/white for smoother gradients, a toned down blue and a very bright orange/red pastel that is offensive and looks out of place, and a brown that is about half between the background and the offensive orange.

@GyrosGeier looks like fun to play with

i made a color palette

Color swatches for a 32-color palette that tries to bring the C64 color palette a little closer to what you'd find in a catalog of traditional oil paint colors.  I tweaked the new colors to be a little off in the way that the C64 colors feel a bit off.

The top half of the image is the 32 colors arranged in a grid.  The bottom half is the same colors arranged the way I'd arrange them if I was painting; they're arranged in a spectrum of hue and value.  I also added some redundancies as smaller dots to show where the non-linearities are in the palette for the sake of clarity.

This palette has some extra purples that I might replace for other colors as I experiment with it and get a feel for what is missing.  The blue spectrum is a bit weak, but the greens and earthy colors are well represented.

@aeva lovely cluster of purples in there.

flaming hands is a lot easier to cast when your hands are made out of wood

(test painting using the new palette)

A digital painting of a dryad wading through dark waters.  Her right hand is held ahead to light the way as if she were holding a torch, but it's just her hand that's on fire.  The light of the flame casts a warm light upon her and the waters around.  Her skin is like twisted bark resembling the musculature of a human, and her hair is like long blades of grass.  This was drawn from my imagination without references, and I'm a bit meh about how the anatomy worked out, but I'm way out of practice with figure drawing so go easy on me lol.

@aeva is that how you evolve a flame atronach

@pupxel if you're not careful, that's one way

@aeva *buys potion of resist fire*

@pupxel *lights u on fire* :3

@aeva dont know why but this taste c64-ish

@eniko i started with the C64 palette, and some of the original colors are still in there

@aeva really like how vibrant and cohesive it is. You did a great job with it.

Unrelated. But tried getting 9front/qemu going but either this particular arm64 variant isn't supported or there's still some arguments I need. Gonna put it on the back burner for the week though. Its a busy one for me.

@fullywoolly ty! sorry to hear the emulator didn't work out

@p noice. i hacked mine up to read an override palette from stdin, expand the palette to 32 slots, and use a circular cursor.

@aeva it seems like the colors all have pretty low saturation - like the entire palette is being seen in twilight. Is that the intention?

@nicklockwood yup. I'm going to be using it to draw the art for a dungeon crawl game

@aeva ah, then it's perfect 👌

@p i wonder if they'd be likely to take any of these improvements (your palette stuff and my cursor changes) upstream

ooh, sorry, i didnt make this, this was made by ori

I helped you out a little.

@mcc
I think it's more technical than price. Remember these are 8 bit machines, so it's easier to express colors in ways that fit inside a single byte, otherwise you have to do three instructions per pixel, which slows your calculations down significantly.

That limitation gives you 2 bits per color (or 2/3/3 if you want to get fancy), which means you do not have that many options for color gradients.
@aeva
replies
1
announces
0
likes
0

@wouter @aeva I think we are not asking why so few colors, but rather why the colors are so evenly spaced, which both creates unattractive color combinations and results in perceptual "bunching" because humans don't see all colors equally well.

In this era the palettes are set by hardware designs rather than CPU math, so it's not to save cycles specifically.

@aeva I haven't given up completely just yet!

@fullywoolly huzzah!

@mcc I saw someone speculating that the color spaces of old graphics chipsets were probably in some part determined by what components were cheapest at the time. I think picking at least the additive primaries and secondaries makes sense as they're the colors that will generally look the most striking. I also get the feeling that system palettes have some amount of "we don't know what you will want, so we'll try to provide as much variety as we can"

I made some new tiles using the new color palette. I'm pretty happy with how they turned out!

A screenshot of Tiled the map editor with a simple isometric level to see how these tiles look together.  One of the new tiles is a pit trap, where the top of the pit has a deteriorating stone border outlining the hole.  The side of the pit are exposed earth.  The other tile is a teal and not-quite-blue-not-quite-purple checker pattern with a star pattern in the middle.  This is meant to look like ornamental stonework but it's probably cheap sodalite.  The test map is a 4x4 room with the star tile stamped to border the upper edges of the room and the pit trap tile stamped in the center tiles and bottom corner.  Suffice to say, this is a room that would look fancy and be deadly.

anyone know if there's a way to set an arbitrary pixel offset for a given tile within a tileset in ?

ah, the problem was i punched in the grid wrong. per-image offsets would still be nice, but this is fine for now. i love that this style is pretty resilient to things not lining up quite right :D

Another screenshot of the Tiled map editor where I'm playing with the tiles some more.  I had the grid slightly off before, but now everything more or less lines up as expected.

@bitinn by a fixed value

@aeva Thank you, I'm gonna use this for future arts

@NullTheFool that would be rad :D

@NullTheFool these are the html color codes for the palette and a krita palette file for it
https://zone.dog/fnord/palette.txt
https://zone.dog/fnord/palette.kpl

@aeva @NullTheFool the html color code reminded me of [1]. It's a CSS that define variable for the xkcd colors [2]. So if you add [1] to your page, you can write css like `background: var(--xkcd-sea-green);` instead of `background: ;`.

[1] https://git.hatspace.net/nycki/nycki.net/raw/branch/main/static/xkcd.css
[2] https://xkcd.com/color/rgb/

@gkrnours @NullTheFool this is why webpages take forever to load these days

@aeva @NullTheFool :O
I mean, it's true, especially when a slop bot is hammering the poor website. But 👉👈