-- Package of geometric operations on SDF objects local function union(sdfs) return function (location) local p = sdfs[1](location) local pp = nil for i=2,#sdfs do pp = sdfs[i](location) if pp.dist < p.dist then p = pp end end return p end end local function diff(sdfs) return function (location) local p = sdfs[1](location) local pp = nil for i=2,#sdfs do pp = sdfs[i](location) p.dist = math.max(p.dist, -pp.dist) end return p end end Operations = { union = union, diff = diff } return Operations