I recently needed a texture for the skybox in a 3D space game.
I used this ImageMagick one-liner to generate a dotted canvas with some grey and white pixels. It displays well if the texture will be stretched.
convert -size 1600x900 xc: +noise Random -channel R -threshold 0.5% \ -negate -channel RG -separate +channel \ -compose multiply -composite stars.png
With a simple modification, the bright stars are made bigger, and the dull ones are made smaller, with only black and white used. This works well if the texture will be shrunk for display.
convert -size 800x450 xc: +noise Random -channel R -threshold 0.5% \ -negate -channel RG -separate +channel \ -compose multiply -composite -resize 200% \ -threshold 10% stars-rounded.png
Although these are great one-liners, the actual process is a bit hard to follow without some smaller steps.
Here, we will generate a 150×90 star field in several steps. I’ve scaled each of these pictures to 200% of their original size and converted them to PNG for display on the web. I’ve used BMP in the commands only because it saves some plumbing around colour spaces.
Start with a blank canvas:
convert -size 150x90 xc: stars-01.bmp
Add random RGB noise:
convert stars-01.bmp +noise Random stars-02.bmp
In the red channel of the image, apply a black/white threshold: If the red channel is greter than 0.5%, it is set to the maximum, otherwise it is set to the minimum.
Mostly the red channel is now 100%, with random dots of 0%. The blue and green channels are still completely random:
convert stars-02.bmp -channel R -threshold 0.5% stars-03.bmp
Negate the image, so that the red channel is mostly 0%, with dots of 100%:
convert stars-03.bmp -negate stars-04.bmp
Extract the red channel and green channel.
convert stars-04.bmp -channel RG -separate +channel stars-05.bmp
The red channel will be dots of white:
The green channel will be random:
Multiply the channels together, so that the white dots become grey dots, each with a random brightness:
convert stars-05-0.bmp stars-05-1.bmp -compose multiply -composite stars-06.bmp
For the alternative style, scale the image up, then apply a new threshold. Brighter dots will appear as larger patches of white, while dull stars will be smaller or invisible:
convert stars-06.bmp -resize 200% -threshold 10% stars-06-rounded.bmp