Thanks! There's surprisingly little material in textbooks too, usually an offhand mention of median cut and that's it.
01.03.2026 22:57 — 👍 1 🔁 0 💬 0 📌 0Thanks! There's surprisingly little material in textbooks too, usually an offhand mention of median cut and that's it.
01.03.2026 22:57 — 👍 1 🔁 0 💬 0 📌 0Thanks for the quick reply. Will be in my next game too, most likely😀
27.02.2026 23:30 — 👍 1 🔁 0 💬 1 📌 0Where is that sprite from? Looks a lot like an explosion animation I've seen in some 90's games, like C&C Red Alert.
27.02.2026 23:22 — 👍 1 🔁 0 💬 1 📌 0Morally under 64k then even if not technically!
25.02.2026 23:44 — 👍 1 🔁 0 💬 0 📌 0The video didn't mention any exe packer though :) I wonder if it's really uncompressed.
25.02.2026 23:40 — 👍 0 🔁 0 💬 1 📌 0The N64brew Game Jam #6 has come to an end, and we've had a total of 28 submissions this year! Our judge team is currently deliberating over each entry to decide which team will pick the charity to send the $3300+ donations we've received. While we wait, let's look through every entry! 🧵
25.02.2026 19:51 — 👍 13 🔁 9 💬 1 📌 0What a cool project. I was surprised that it's all lit by light probes!
21.02.2026 12:47 — 👍 1 🔁 0 💬 0 📌 0The topic of raycasting on MSX has come up. A while ago I made a renderer for MSX 1 which looks like a raycaster (so-called backwards projection) but in fact it's a rasterizer (forward projection). This reduces the per-column cost significantly. Doom worked this way. www.youtube.com/watch?v=8l52...
16.02.2026 17:43 — 👍 13 🔁 6 💬 2 📌 0I got "The Sprite Decade". It's such a relaxing read.
18.02.2026 21:12 — 👍 0 🔁 0 💬 0 📌 0All the work put in by the N64 homebrew and ROM hacking communities are starting to bear fruit :) In the past years there has been a steady improvement in hardware documentation, SDKs, emulators, Blender addons, and 3D graphics libraries (OpenGL and Tiny3D for libdragon, F3DEX3 for libultra).
18.02.2026 21:06 — 👍 9 🔁 0 💬 0 📌 0Left: Without error dampening. Right: with 0.8 error dampening when accumulated per-pixel error (squared magnitude) is greater than 0.02
The above had other changes too (serpentine scan order and a different gamma curve) so here's a comparison of only the error dampening's effect.
12.02.2026 19:01 — 👍 3 🔁 0 💬 0 📌 0Left: Original Floyd-Steinberg dithering. Sky gradients are reproduced with very distracting pixel patterns. Right: With large error dampening added, only moderate noise appears.
A cool trick to clean up error diffusion dithering: if the per-pixel accumulated error goes over a certain threshold, dampen it by a factor of 0.8. This suppresses bright, sparse pixels. Found this in libimagequant's code.
12.02.2026 18:56 — 👍 11 🔁 1 💬 1 📌 0Gimp's normal Floyd-Steinberg (left) and the same with reduced color bleeding turned on (right).
Surprisingly, my result looks better than the GIMP's original (attached) even though I used the same palette. The biggest difference is that I do closest color lookups in linear sRGB and they in CIELAB. Perhaps that works better for this image?
04.02.2026 08:32 — 👍 4 🔁 0 💬 0 📌 0Left: Floyd-Steinberg dithering. Right: Floyd-Steinberg with reduced color bleeding aka clamped error offset.
Error clamping function. Green: used by my code (tanh). Orange: GIMP's reduced color bleed, blue: GIMP's normal Floyd-Steinberg.
I tried imitating GIMP's "reduced color bleed" addition to Floyd-Steinberg dithering and it works! Maximum error offset allowed for a pixel gets clamped with a tanh-like function, hiding individual high-contrast pixels in solid regions. The clamping function is shown in green in the attached plot.
04.02.2026 08:32 — 👍 18 🔁 1 💬 1 📌 0Gamma bird
Linear bird
Somewhat broken 2x2 gamma bird
My first Floyd-Steinberg dithering routine! Still looks a bit broken. I've understood dithering should be done in the linear color space of the display device but with big pixels maybe that's not the best idea. At least the first bird Really Pops. The third was the first 2x2 matrix test.
02.02.2026 08:32 — 👍 4 🔁 0 💬 0 📌 0...Molez 2?!
01.02.2026 21:23 — 👍 1 🔁 0 💬 1 📌 0I've resorted to using VLC's iOS app's network share feature for this (on Linux). It's finicky but works in my home wifi.
01.02.2026 21:22 — 👍 0 🔁 0 💬 0 📌 0I discovered something interesting in the MSX2 version of Pac-Mania. The game has an isometric perspective just like the arcade original, but it first loads the background with an orthogonal perspective and then applies a shear effect to it in VRAM. The original simply loads pre-sheared tiles. #msx
01.02.2026 18:41 — 👍 21 🔁 4 💬 1 📌 0
Sure, color perception is too complex for a viewer's subjective experience to be losslessly compressed to a 3D point. Perhaps Oklab's usefulness comes from the fact it's optimized for gradients on a neutral solid-color backgrounds which often occur in graphic design.
I'll read the paper. Thanks!
Awesome writeup on the power of pre-splitting for producing high-quality BVHs:
github.com/BoyBaykiller...
One interesting quote: "You may notice PreSplitting improves performance but increases the SAH cost. SAH is not a perfect predictor of performance."
Hey thanks for this recommendation. I really loved Vermis and had managed missed this release! Looks sick.
23.01.2026 17:20 — 👍 2 🔁 0 💬 0 📌 0The diagram shows a matrix X with labeled points (1–6) representing an original image, and a matrix Y with corresponding labeled points with the name c (sub index 1–2) showing a reconstruction. Below each matrix is a point diagram: the left one for the original image with scattered colored dots divided in two classes, and the right one for the reconstruction with connected dots showing how the two clusters are represented by their mean positions. The formula between them indicates a difference squared, representing reconstruction error.
I'm starting to get attached to these fast & loose diagram sketches I'm doing for my book. But redrawing them as clean vector art allows easier editing so it's worth the trouble.
22.01.2026 08:32 — 👍 7 🔁 0 💬 0 📌 0Interesting how aliasing and dithering combine for a coherent look without any visible banding or patterns.
21.01.2026 20:03 — 👍 1 🔁 0 💬 0 📌 0Why is that?
19.01.2026 09:29 — 👍 0 🔁 0 💬 1 📌 0And it plays well on the controller too! We had an arcade cabinet with Liero on it in uni (of course), so I knew it would work.
18.01.2026 11:37 — 👍 1 🔁 0 💬 0 📌 0Glad to hear that:) There's still a ton of work left but I plan to put it on early access when there's enough material ready.
18.01.2026 11:20 — 👍 1 🔁 0 💬 0 📌 0
Here's a little project I've been working on: Liero64 - a port of the 1998 MS-DOS game for the Nintendo 64.
Gameplay video: youtu.be/aemLngAjEi8
ROM: codeberg.org/pekkavaa/Lie...
Super clean!
14.01.2026 20:52 — 👍 1 🔁 0 💬 1 📌 0a dreary sky, a lonely grey concrete tower in the center. there are chambers on the base that a person can enter with stairs leading up to them
a brutalist concrete lobby, with nice carpet, furniture, and plants hanging from suspended planters. the lighting is warm and welcoming
a cavernous gallery room, with a high ceiling and artificial sun panels pouring warm diffused light into the room. there is a statue of a floating octahedron in the center. plants and vines hang down from the walls. the room branches off into other chambers.
view of a tall, oddly shaped hallway. carpet down the whole length. on the left there is seating, a cabinet, and a large painting of some abstract rock formation.
screenshots of the startmap I built for qbj3 or Quake Brutalist Jam III
some fancy bits in here will be in the coming update, like the paintings and plaques
Four images of a red building scene, each resulting from different combinations of k-means refinement and dithering settings: top row (k-means, dithering), second row (k-means, dithering), third row (k-means, dithering), bottom row (k-means, dithering). Figure caption: Results of Pillow’s MAXCOVERAGE color quantizer (aka the maximin k-means initializer) with varying k-means refinement and dithering settings. The bottom “☒ k-means, ☒ dithering” result may appear the best at first glance but the “☐ k-means, ☒ dithering” (second from the top) image has more vibrant colors when viewed from afar.
A comparison of the Pillow library's Maximum Coverage color quantizer settings. A palette that works well for dithering may not look great on its own. Here the top result has garish colors but when it's used when dithering (second from top), it's actually quite OK.
12.01.2026 08:32 — 👍 9 🔁 1 💬 0 📌 0