local wea = worldeditadditions local wea_c = worldeditadditions_core local Vector3 = wea_c.Vector3 return function(size) local brush = {} local centre = (size / 2):floor() local minsize = math.floor(math.min(size.x, size.y) / 2) local border = 1 local kernel_size = 3 -- Make the circle -- We don't use 0 to 1 here, because we have to blur it and the existing convolutional -- system rounds values. for y = size.y - 1, 0, -1 do for x = size.x - 1, 0, -1 do local i = y*size.x + x if math.floor((centre - Vector3.new(x, y, 0)):length()) < minsize - border then brush[i] = 100000 else brush[i] = 0 end end end -- Make the kernel & blur it local success, kernel = wea.conv.kernel_gaussian(kernel_size, 2) if not success then return success, kernel end local success2, msg = wea.conv.convolve( brush, Vector3.new(size.x, 0, size.y), kernel, Vector3.new(kernel_size, 0, kernel_size) ) if not success2 then return success2, msg end -- Rescale to be between 0 and 1 local max_value = wea_c.max(brush) for i,value in pairs(brush) do brush[i] = brush[i] / max_value end return true, brush, size end