2015-09-12 2 views
1

У меня есть игра, основанная на вокселе, сейчас я создаю свой мир, используя Simplex Noise. Теперь я хочу создать некоторые другие структуры, такие как реки, города и другие вещи, которые не могут быть легко сгенерированы, потому что я разбил свой мир (который практически бесконечен) на куски 64x128x64. Я уже сгенерировал деревья (листья могут вырасти в соседние куски), генерируя деревья для куска, плюс деревья для 8 кусков, окружающих его, поэтому листья не пропадут. Но если я перейду в более высокие измерения, которые могут стать трудными, когда я должен вычислить один кусок, рассматривая куски в радиусе 16 других кусков.Получение процедурной структуры

Есть ли способ сделать это лучше?

+0

Если я хорошо понял, когда вы создаете дерево (например), вы должны проверить 8 кусков соседей в случае, если дерево выросло внутри соседнего куска, не так ли? чего я до сих пор не понимаю, так это то, что «если я войду в более высокие измерения, которые могут стать трудными ...», не могли бы вы уточнить? возможно, вы имели в виду объекты с более высоким размером? – alesegdia

+0

Ну, когда я создаю город, например, который может распространяться в 8х8 кусках, мне придется вычислить 64 куска, чтобы создать один кусок. И мне нужно вычислить 64 из них, что означает, что я бы вычислил 4096 кусков для генерации 64 (если бы я сделал это так же, как деревья). – user3088126

ответ

1

В зависимости от желаемой сложности сгенерированной структуры вы можете сперва сгенерировать ее в отдельном массиве, возможно, даже в карте (словарь с привязкой к содержимому, полезный в случае высокой разреженности) и затем передать структуру миру?

Что касается природных объектов земли, вы можете захотеть, как фракталы используются в ландшафтной генерации.

+0

Я предполагаю, что имея смещение объекта в мире и размер куска, вы можете легко срезать объект, а затем обновлять вокселы в двигателе с помощью нарезанных частей, верно? – alesegdia

+0

Кажется хорошим подходом. Я также посмотрел на фракталы, но они, похоже, не работают, так как мой мир практически бесконечно большой. Остается один вопрос: как насчет рек Лонг? – user3088126

+0

Сама река может быть очень четко определена фрактально, то есть «взять прямую линию от одного озера (А) к другому (В), добавить несколько точек между ними, повторить до достижения желаемого уровня детализации», нет? – Thehx

0

Я прочитал что-то об этом в книге, и то, что они сделали в этих случаях, заключалось в том, чтобы сделать более тонкое разделение кусков в зависимости от приложения, то есть: если вы собираетесь выращивать очень большие объекты, может быть полезно иметь другое разделенное разделение логики, например, 128x128x128, только для этого конкретного приложения.

По существу, данные находятся в одном и том же месте, вы просто используете разные логические подразделения.

Если честно, никогда не делал вокселя, поэтому не принимайте мой ответ слишком серьезно, просто бросая идеи. Кстати, книга - это игровые движки 1, у них есть жемчужина на воксельных двигателях.

О реках, разве вы не можете просто установить уровень воды и позволить рекам автогенерировать в горных горных лестницах? Чтобы избежать попадания воды в горные оговорки, вы можете выполнить рейхаст, чтобы проверить, не блокирует ли он N блоков.

+0

Ну, может быть, это подход, но я вижу предел, основанный на том, насколько велика структура. Если структура имеет радиус 8 кусков, мне нужно будет проверить, прежде чем создавать кусок, если поблизости есть структуры, которые нужно будет создать. Я понял, как бороться с такими городами, но как насчет длинных рек? – user3088126

Смежные вопросы