Минус функционального подхода заключается в том, что некоторые вещи просто нельзя просчитать без контекста. Допустим, в виртуальном мире есть река, которая течёт вниз по крутому склону. Учитывая математическую функцию, определяющую рельеф местности, обычно невозможно точно узнать, где будет протекать река. Для этого необходимо учитывать контекст окружения.
Комментарий недоступен
Спасибо! Я надеюсь, что мои тексты помогают узнать чуть больше о геймдеве. Для того и работаю :)
Зачастую такие миры очень не проработаны и пусты.
Лучше пусть будут делать миры аля КП2077, такие же проработанные и живые
Так процедурно-сгенерированные миры, по большей части, функциональны, а не эстетичны. И разработчик и не ставит перед собой цель "красоты", соответственно.
А когда ставит, получается генератор из minecraft, который часто может рождать очень неплохие пейзажи.
Тащем-то это всё очевидно, когда пытаешься хотя бы в уме продумать реализацию Майнкрафта
Самое подробное что я видел на эту тему - это вот этот доклад чувака из No Man's Sky
Если в кратце, то они выдрочили функцию для генерации вокселя до того, чтобы она была достаточно интересной
Поскольку мир генерируется кусками на лету, у конкретной точки может не быть нужных соседей, так как они ещё не сгенерированы.А как это работает поподробней? В minecraft есть понятия seed'а, разве это не значит, что заранее всё известно о ландшафте?
В No Man's Sky можно попасть разным людям на одинаковую планету, а значит seed общий один раз сгенерированный.
Само наличие сида не дает тебе "всю инфу о ландшафте" - ее нужно вычислить через функцию Перлина (или несколько ее прогонов). И тебе придется начинать с первого блока, и ты действительно не знаешь инфы о соседних блоках, потому что ты еще не вычислил, какой блок будет у соседа.
Функция генерации блока - это, если грубо
f (seed, x, y, z) => BlockType
И тебе нужно ее прогнать по всем блокам вокруг игрока, чтобы получить ландшафт