ASCII Clouds
It's such a fabulous tool as the generated images can be used for effects like glass/ice displacements, cheap water-like effects, but you can also generate terrains from it or just cool visual effects that benefit from random patterns. The core property to me is that it feels very organic/natural.
This was such a common tool in Flash AS3 back in the days to create stunning effects, games and such. I'm not active in building visual stuff like that anymore but I bet it's still very common in this field, because why not?
https://github.com/caidanw/caidanw.github.io/blob/main/src/p...
Was an initial experiment with Claude Code, but kind of a cool result that's pretty close to what I want.
WebGL warning: drawArraysInstanced: Framebuffer not complete. (status: 0x8cd6) COLOR_ATTACHMENT0: Attachment has no width or height. ascii_clouds.astro_astro_type_script_index_0_lang.iEVYfoCC.js:274:3430
WebGL warning: drawArraysInstanced: Framebuffer must be complete. ascii_clouds.astro_astro_type_script_index_0_lang.iEVYfoCC.js:274:3430
WebGL warning: drawArraysInstanced: TEXTURE_2D at unit 0 is incomplete: The dimensions of `level_base` are not all positive. ascii_clouds.astro_astro_type_script_index_0_lang.iEVYfoCC.js:274:3980
…
[repeat]
…
WebGL: No further warnings will be reported for this WebGL context. (already reported 32 warnings) ascii_clouds.astro_astro_type_script_index_0_lang.iEVYfoCC.js:274:3430For example, if you only want the dash, set the dot and dash to 0.0. Then set 1.1 for the plus, ring, and cross characters.
The infamous MCGA/"VGA" mode 13h had pixels with an aspect ratio 6:5, while 320 x 240 Mode X was square (1:1).
I still remember the unchained offset calculation for the memory offset for pixel memory access before the era of U and V pipes and many optimizing compiler passes:
unsigned short offset = (((y << 2) + y) << 6) + x;
unsigned char far *ptr = (unsigned char far*)MK_FP(0xA000, offset);
// IIRC: #define MK_FP(seg, off) ((void far *)((unsigned long)(seg) << 16 | (unsigned long)(off))) // far pointers != linear address
In real-mode (linear): 0xa0000 + (320 * y) + xYes you're right in that it's not real ASCII, but more ASCII-esque. I took some artistic liberty to do everything on the GPU, if I had done true ASCII I would have had to move data back to the CPU and render the glyphs there. However it was too slow and didn't have the desired effect I was seeking.
I am considering building out an additional feature set where it allows for true ASCII rendering, but we'll see if I get around to that.
Many of us have that mode 13h stuff memorised too, including the 0x3c8 and 0x3c9 palette registers etc. And since 320x200 bytes is less than 65536 you don't need to do any segment stuff to access the full frame buffer.
https://github.com/pj4533/asciidelic https://asciidelic.com
I should go back and add mobile support, maybe fullscreen support.
and the code: https://github.com/kristopolous/ascsee
I just updated it so it compiles on modern systems.
I also found the original version if you like being an archaeologist: https://9ol.es/tmp/gol.c
https://post-processing.tresjs.org/guide/pmndrs/ascii
https://forum.babylonjs.com/t/ascii-shader-using-glsl-postpr...
https://threejs.org/examples/?q=ascii#webgl_effects_ascii
https://codesandbox.io/p/sandbox/ascii-postprocessing-n628p8...
https://hg.sr.ht/~oofoe/shademacs/browse/sdf.el?rev=tip
(shade 10 2 (lambda (x y) x)) ; Horizontal ramp.
;; @ # & % * = + : - ·
;; @ # & % * = + : - ·It's a fun experiment into WebGL and graphics programming. I intended it to be a cool tool for getting inspiration for designing and creating other art in general. I do eventually want to build this out into a larger set of tools that would allow you to quickly iterate and build out various aesthetics for designing.
In it's current state, it's mostly practical for creating pretty images and videos that you could use in other projects. If there's more interest I could possibly turn it into more, would love to hear ideas and suggestions!
If you're interested in seeing more of what I work on, follow me on my socials where I post everyday.
Bluesky: https://bsky.app/profile/caidan.dev Twitter: https://x.com/caidanwilliams Threads: https://www.threads.com/@ancientsunshine