Если ваша геометрия основана на сетке, то я предлагаю вам попробовать сгенерировать нелинейные преобразования (назовем их «деформациями»).
Например, вы можете вставить N точек разворота в вашем трехмерном мире, а затем определить для каждой вершины (точки) в вашей сетке, насколько сильно на нее влияет какой-либо данный разворот. Вы можете использовать, например, обратный квадратный вес, или спад по Гауссу, или что-то вроде трехмерного Вороного, или ... Затем вы перемещаете точки поворота и деформируете вершины сетки на основе вашей карты весов.
Если вы делаете это для всех вершин во всех сетках, и ваши сетки хорошо построены, вы никогда не должны заканчиваться пробелами или нежелательными пересечениями.
Другой подход заключается в использовании локальных деформаций с отступлением. Возьмите 3D масштабирование, например. Вы определяете центральную точку C операции масштабирования, но масштабный коэффициент зависит от расстояния от этой базовой точки. Таким образом, части сетки, близкие к C, будут масштабироваться очень сильно, а части, расположенные далеко, будут масштабироваться очень мало или не масштабироваться вообще.