A silly diffuse shading model

Half-light, full drama: devs cry 'Half-Lambert' while others vibe with 80s glow

TLDR: The author proposes a simple lighting tweak that keeps dark areas visible by remapping and squaring the light math. Commenters split: some nostalgic about its 80s look, others say it's basically Valve’s Half-Lambert from Half-Life, sparking a debate between quick, pretty hacks and physics-accurate rendering.

An artist-developer suggests a ‘silly’ fix for the classic lighting problem where half your scene goes pitch-black: remap the light angle to sit between 0 and 1, then square it for softer shading. The community didn’t just nod; they felt things. One user, dewitt, said the “sillier” look screams 80s fantasy, pointing straight to the Dragon Magazine #100 cover. Cue a flood of nostalgia and “bring back airbrushed chrome helmets” jokes.

But then came the plot twist: skocznymroczny asked if it’s simply Valve’s Half-Lambert from Half-Life—“add half, multiply half, square it.” Boom: accusations of reinventing the wheel vs cheers for rediscovering a classic. The physics purists grumbled about “not accurate,” PBR (physically based rendering) loyalists cited math and GTAO (a shading trick called ambient occlusion), while indie devs rallied behind the one-liner: “It looks good, ships fast.” The author’s cheeky “Happy Arbitrarily Chosen Point in Earth’s Orbit” line turned into a meme, with folks posting “new year, new shader.” Between retro vibes, game-engine pragmatism, and a dash of math flex about Hermite curves, this tiny tweak sparked big feelings—and a reminder that in graphics land, pretty + simple often beats perfect. And yes, the screenshots looked slick today.

Key Points

  • Lambertian diffuse shading max(0, dot(L, N)) can produce entirely black regions on surfaces facing away from a single light, hindering geometry visibility in quick demos.
  • Common fixes (multiple lights, textures, ambient occlusion like GTAO) are more complex than a simple one-line shader term.
  • A linear remap (1 + L·N)/2 avoids black areas but brightens the image compared to true Lambertian shading.
  • Squaring the remap, ((1 + L·N)/2)^2, yields results closer to Lambertian in lit areas while preserving gradients on the unlit side.
  • Matching values and slopes at x = ±1 suggests using Hermite interpolation to design functions approximating max(0, x) with smoother behavior.

Hottest takes

"The art style under 'A Sillier Solution' reminds me very much of the cover of Dragon Magazine #100" — dewitt
"Isn't that just Half-Lambert that Valve came up with for Half-Life?" — skocznymroczny
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.