Smooth minimum functions for GLSL
Last updated 6 years ago by hughsk .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install glsl-smooth-min 
SYNC missed versions from official npm registry.



Smooth minimum functions for GLSL, sourced from Iñigo Quílez's article.

Particularly useful when doing Shadertoy-style raymarching with distance fields: you can smoothly blend between two volumes, instead of doing a hard union with min(a, b).

Check it out in action



smin(float a, float b, float k)

Blends smoothly between a and b, with a smoothing amount determined by the value of k. For example:

#pragma glslify: smin = require(glsl-smooth-min)

float doModel(vec3 position) {
  // Take two sphere volumes
  float a = length(position + 0.5) - 0.7;
  float b = length(position - 0.5) - 0.7;

  // And smooth them together
  return smin(a, b, 0.8);

There are three variants of this function available, all with the same function signature:

#pragma glslify: poly = require(glsl-smooth-min/poly)
#pragma glslify: pow = require(glsl-smooth-min/pow)
#pragma glslify: exp = require(glsl-smooth-min/exp)

// Exports `poly` by default
#pragma glslify: poly = require(glsl-smooth-min)

Each of these variants differ somewhat in their results, and some are more appropriate in specific situations:

These three functions produce smooth results, with different qualities. The three accept a paramter k that controls the radious/distance of the smoothness. From these three, probably the polynomial is the fastest, and also the easiest to control, for k maps directly to a blending band size/distance. Unlike the other two, it probably suffers from second order discontinuities (derivatives), but visually is pleasing enough for most applications.


See stackgl/contributing for details.


MIT. See for details.

Current Tags

  • 1.0.0                                ...           latest (6 years ago)

1 Versions

  • 1.0.0                                ...           6 years ago
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 1
Dependencies (0)
Dev Dependencies (5)
Dependents (1)

Copyright 2014 - 2017 © |