Еще одной темой, которая меня волнует в сфере генераций мира для игры,
это картина его целостности. Вот взять случайно сгенерированный
бесконечный мир Minecraft - в лучшем случае, существует мод, который
позволяет как-то разместить на нем "климатические" пояса, то есть,
скажем, есть экватор, полный сухих пустынь, из которых, двигаясь на юг
или север можно попасть в тропики, умеренные широты, затем тундры и,
наконец, в заснеженные места. И потом - в обратном порядке. Если такой
мир замкнуть, появится полное ощущение движения по сферической планете.
Это полностью соответствует ожиданиям. Однако.
У мира всегда есть
история. Когда-то на нем могла быть весьма бурная геологическая жизнь с
вулканами, были какие-то места обитания древних существ, где они умерли и
как-то их следы должны находиться. В подходе с полной случайностью это
обычно проявляется в виде плавно размазанных по миру древних шахт и
сокровищниц, каких-то, таких же случайных, пещер и все такое прочее. Мне
это не очень нравится, потому что "целостность" пропадает. Было бы куда
интереснее находить заброшенные деревни, рядом с которыми можно найти
следы деятельности жителей в виде тех же шахт и т.п.
В этом смысле
интресно выделяется, как наиболее яркий пример, Dwarf Fortress, где
случайно сгенерированный мир перед, собственно, игрой, длительное время
переживает в ускоренном темпе какой-то исторический процесс. Появляются и
исчезают цивилизации, народы, цари и герои, свидетельства о которых
оказываются закопаны где-то в глубинах в виде древних легендарных
артефактов, руин старых городов и такого прочего. И практически никогда у
вас не будет двух одинаковых историй. Это по-своему интересно, но
ставит сложный вопрос - как не генерировать весь мир полностью, и в то
же время создать для него последовательную и целостную историю, которая
может быть получена путем изучения мира? И, конечно, просто поставить
вопрос, не пытаясь ответить на него, я не могу :)
Во-первых, можно
пытаться сделать вид, что история была, но создать только ее конечные
результаты. Скажем, изначально вписать в некоторые переменные для всего
мира его возраст и уровень, до которого что-то там развилось и умерло.
Можно там же создать и записать функцию, которая сможет вычислить
распределение останков этого прошлого в чанках/кубиках этого мира и
потом генерировать чанки, как это и предполагается - только там, где
кто-то на это смотрит.
Второй вариант - это повторить DwarfFortress,
но если детализовать это до уровня каждого мелкого блока, ваш
сгенерированный мир превратится в многотерабайтный ужас для вашего
жесткого диска. Это, как по мне, совсем не круто.
Ну и третий вариант
это нечто смешанное. Мне давно приходит на ум, что любители писать игры
в мир из кубиков могли бы сделать его более динамичным и интересным, не
рассматривая его только на уровне "блоков" и "загруженный/выгруженный
чанк - как набор блоков". Я имею в виду, что можно постепенно, по мере
удаления от наблюдателя, уменьшать детализацию мира. Ведь, по сути,
кусок 2х2х2 блока есть сущность, которая состоит из 8 блоков, и, при
правильном подходе, наверняка можно смоделировать процессы внутри более
крупных "блоков" так, чтобы при обратном преобразовании в отдельные
части создавалась иллюзия правдоподобности процессов. По мере удаления
можно сжимать эти "двублоковые" блоки дальше, вплоть до уровня чанков,
2х2-чанков и т.п. И, наверняка, на таком уровне можно даже моделировать
какие-то процессы глобального уровня, не загружая каждый чанк в память
для рассчетов, а только представления этих групп. И кто-то мне уже
подсказывал, что для вокселей есть какой-то такой алгоритм, который
работает примерно так же. Для теста этой концепции, конечно же, надо
было бы сначала написать такой себе маленький кубический движок и найти
пример такого процесса, чтобы оценить производительность. Да, кстати,
это могло бы позволить обеспечить очень широкую область видимости не
вызывая загрузку в x^2 большего количества чанков/блоков целиком, просто
чтобы нарисовать их. Ведь давно применяется метод уменьшения
детализации с расстоянием, почему бы и тут не поступать так? :) Мне даже
кажется, что для проверки концепта не нужно даже писать рендерер, можно
ограничиться простейшей моделью без всякой визуализации, чем и
собираюсь заняться в ближайшее свободное время.
воскресенье, 5 июля 2015 г.
Подписаться на:
Комментарии к сообщению (Atom)
Этот комментарий был удален автором.
ОтветитьУдалитьИ таки шо
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалить