Мона Лиза на 250 байт

Совершенно феерическое творение для Atari XL — MONA by Ilmenit. Используя недокументированные возможности работы с памятью на Atari XL OS Revision 2 автор реализовал в 250 байтах процедурную графику с «Моной Лизой». Сам Леонардо хлопает стоя!

mona 250b intro for Atari 8-bit

Скачать интро + исходный код.

Эту работу Ilmenit посвятил своей жене Iza [09.08.1983-15.02.2014]. Сам автор так описывает структуру эффекта на Pouet:

There are 64 pseudo random brush strokes of cycling color. Each stroke is shorter than previous to increase details. Intro code generates set of random numbers starting from initial 32bit seed with Galois LFSRs as a PRNG. This set is used to control direction of brush movement and and starting position. Each stroke has initial 16bit value that influences the seed. Therefore data is 4 bytes (initial seed) + 64*2 bytes of stroke PRNG seeds. Picture of Mona Lisa (3072 bytes) was compressed to those random brush strokes by external optimization program (a few days of work for modern CPU/GPU combo). The process can be seen as lossy compression (23x) of picture into random brush movements.

The seeds were found with iterative brute-force approach. Each brush stroke is a layer which covers the previous one, therefore is mostly independent in calculations. For each layer there is a 16bit seed to be found that generates the best picture possible. Therefore there are 64 layers * 65536 possible values per layer and the program iterates through all of them (4 million of combinations — acceptable). This should be done for each initial 32bit seed (means *4 billion combinations) but can be performed in parallel. I’ve checked only a few thousands of randomly chosen initial seeds to find a nice looking picture. Details mask had to be used to multiply difference error on critical parts of the picture (eyes, nose, mouth). Otherwise too many details were put in the background.
Thank you all for the kind words.