Как сказал Unreason, World of Goo - это не столько форма, сколько физическое моделирование.
Но простой способ создания шарообразных неправильных форм может состоять в том, чтобы начать с n вершин (точек) V_1, V_2 ... V_n на круге и применить к нему некоторую случайную деформацию. Есть много способов сделать это, от простого перемещения по отдельным вершинам до сложных физических симуляций.
Некоторые идеи:
1) Выберите случайную вершину V_i, выберите случайный вектор T, примените этот вектор как перемещение (перемещение) к V_i, примените T ко всем остальным вершинам V_j, но уменьшите в зависимости от «расстояния» от V_i (где расстояние может быть абсолютной разностью между j и i или фактическим геометрическим расстоянием от V_j до V_i). Для коэффициента масштабирования вы можете использовать любую функцию f, которая равна 1 для f (0) и уменьшается для увеличения расстояния (в основном, радиальная базисная функция).
for each V_j
V_j = scalingFactor(distance(V_i, V_j)) * translationVector + V_j
2) Вы перемещаете V_i как в 1, но теперь вы моделируете пружинные связи между всеми соседними вершинами и итеративно перемещаете все вершины, основываясь на силах, созданных растянутыми пружинами.
3) Для более круглых форм вы можете выполнить 1) или 2) в контрольных точках кривой B-сплайна.
Остерегайтесь самопересечений, когда вы слишком много двигаете вершины.
Просто некоторые грубые идеи, не проверенные ...