Вот техника, с которой я экспериментировал недавно. Мой прототип RenderMonkey показывает часть каньона в стиле бесплодных земель, но тот же принцип должен работать в пещерах.
Идея состоит в том, чтобы начать с плиток, которые являются общими, совершенно скучными, с простыми предсказуемыми краями, чтобы их было легко выстраивать без швов или разрывов:
Эти начальные плитки могут быть формами, которые вы смоделировали, или процедурно сгенерированными макаронными трубками цилиндрической геометрии (эта форма является вариантом по предложению bcrist и Steven Stadnicki). Использование созданных моделей упрощает обработку произвольной топологии, например путей ветвления, или точек интереса, таких как открытые каверны. Это все еще возможно с чисто процедурной (см. Предложение Gyroninja о методах metaball), но сложно.
Как только плитка помещена в мир, сместите ее вершины, используя шумовые функции, применяемые в мировом пространстве. Это сохраняет связь и бесшовность между плитками (поскольку совпадающие вершины имеют одинаковый входной сигнал в мировом пространстве и получают одинаковый выходной сигнал смещения), но при этом каждая плитка выглядит уникальной и органичной:
Текстура и нормали также применяются в мировом пространстве - здесь используется трипланарное картирование - так, чтобы соседние плитки были полностью бесшовными, без хитрых ограничений развертывания в УФ.
Надежда состоит в том, что подобная техника дает вам простоту планирования и управления дизайном уровня мозаичной карты без видимого повторения или механически выглядящей структуры в воспроизводимом результате.
Вы можете использовать сетку с низким разрешением, используя только компоненты низкочастотного шума, применяемые для создания представления столкновения. Как отмечает bcrist, вам необходимо контролировать максимальную амплитуду шума относительно радиуса и резкости поворотов туннеля, чтобы он никогда не сжимался полностью.
Еще одно замечание: если ваша пещера действительно бесконечна, вам, возможно, придется периодически «пересекать» ее, когда игрок продвигается все дальше и дальше от начала координат. Поскольку числа с плавающей запятой теряют точность при больших величинах, физические объекты и артефакты рендеринга могут заползать на огромные расстояния. Если вы сделаете это, вы захотите, чтобы ваш шум в мировом пространстве был периодическим в больших масштабах, с периодом, точно соответствующим вашему центрирующему смещению, чтобы вы не встретили швы после повторного центрирования.