Introducing ies-tools: Making IES Light Files Easy to Use
An IES file captures the shape of a real light, but opening it gives you a wall of numbers. I built ies-tools to make seeing that light as easy as opening an image.
An IES file captures the shape of a real light, but opening it gives you a wall of numbers. I built ies-tools to make seeing that light as easy as opening an image.
Move the camera closer and the bumps get flatter: Three.js can change a material’s apparent depth without changing the material. The missing convention is simple—height needs a unit and a space.
My AI-guided search for better blue noise began with a spectacular result that failed broader tests. The eventual sampler reduced filtered error by 10.7% in a Three.js reflection scene—but lost to FAST on rectangular-light shadows.
My texture-free sampler looked fine in real time, then made a light map bake 2.4× grainier. The failure exposed a trap in multi-dimensional sampling—and fixing it also uncovered an older bug in Three.js.
I built Vitest and Jest environments that give your tests real, GPU-backed WebGL and WebGPU contexts directly in Node.js. They use the same ANGLE and Dawn implementations as Chrome, so you get the same pixels without the overhead of launching a browser.
A GPU supporting half precision doesn't tell you whether it will make your shader faster. I built WebGPU-Bench to put numbers behind that choice—and let coding agents test their performance assumptions, too.
You can put a phone-captured object into Three.js without building a mesh or unwrapping a single UV. Here is the route from a raw scan to a compact SPZ file—and the few lines that render it.
Three.js can draw a scene and run the language model that describes it. I built Three-LLM to test that—and found that batching GPU submissions made one small model generate text 4.7× faster.
Two Gaussian splat clouds can each render correctly and still produce a popping seam where they overlap. Here is how I made Three.js sort them together without rewriting millions of splats when an object moves.
A material's color, roughness, and normal maps describe the same surface, yet ordinary compression treats them as unrelated images. I built a Three.js decoder that exploits those shared details and reconstructs the texture stack inside the shader.
A shader can render a convincing image while its math is wrong. Numeric GPU tests exposed six bugs in Three.js's TSL foundations in a day, from NaNs to reversed rotations.
If you can fit a curve or tune a GGX lobe, neural-network training is less unfamiliar than it sounds. This reference connects MLPs, Adam, latent grids, and decoders to functions and math graphics programmers already use.