-- Package of geometric operations on SDF objects local function union(s1, s2) return function (location) local p1 = s1(location) local p2 = s2(location) if p1.dist < p2.dist then return {dist = p1.dist, texture = p1.texture} else return {dist = p2.dist, texture = p2.texture} end end end local function diff(s1, s2) return function (location) local p1 = s1(location) local p2 = s2(location) return {dist = math.max(p1.dist, -p2.dist), texture = p1.texture} end end Operations = { union = union, diff = diff } return Operations