Это перевод вот этой статьи. Автор — Майкл Кук.
Спасибо Атрону за наводку.
Процедурная генерация существует не первый день. Мы приближаемся к 40-летию Rogue, Elite уже отпраздновала 30-й День рождения, и даже бодрый Spelunky скоро начнёт считать возраст двузначными числами. Мы десятилетиями видели, как старые идеи переделываются и полируются, а с новыми экспериментируют и проверяют их на прочность. Однако одна вещь всегда оставалась прежней и пряталась от глаз всякий раз, когда приносила проблемы, в надежде, что потом о ней все забудут. С выходом No Man's Sky я считаю, что игнорировать это уже нельзя. Нам надо поговорить о том, как мы говорим о процедурной генерации.
Первый трейлер NMS вызвал большую шумиху, показав вибрирующие красками планеты с разнообразной живностью, заманивая всевозможными космическими приключениями. В трейлере я заметил несколько интересных фраз, которые выделил для себя. «Каждый атом процедурно сгенерирован, каждая планета уникальна.» Сам по себе такой язык не является чем-то уникальным в игровом маркетинге. Например страница игры The Binding of Isaac в Стиме обещает вам «Вы никогда не будете играть в одну и ту же игру дважды», но никто же и бровью не поведёт, внезапно осознав, что он раз за разом играет во всё одну и ту же The Binding of Isaac. Только одно было удивительно с трейлером NMS — с какой поразительной доверчивостью многие купились на все эти обещания ещё до того, как стали известны хоть какие-то подробности об игре, ещё даже до того, как сами разработчики отчётливо понимали что же они на самом деле создают.
Процедурная генерация говорит языком, в словаре которого есть много знакомых слов: разведывать, уникальный, бесконечный, вечно, переигрывать. Он пользуется числами со степенями десяти, а больше — значит лучше. Необязательно эти слова используются неверно, но намеренно или нет, они вводят людей в заблуждение просто потому, что их можно интерпретировать совершенно разными способами. «Каждая планета уникальна» можно понимать как если бы она обладала сложной фантастической предысторией, готовой для двухсерийного эпизода Стар Трек. Либо же, математически говоря, это может значить, что где-то на этой планете есть камень, непохожий на любой другой камень во вселенной. Уникальность почти всегда используется в слабейшем своём, однако наиболее технически правильном смысле. Как метко заметила Кейт Комптон в своём посте о процедурной генерации:
Мы редко разбираемся в деталях такого языка. В результате мы не привыкли обсуждать эти концепты и критически думать имеет ли это какой-то смысл в игре. Я не имею ввиду, что разработчики не понимают о чём говорят, я хочу сказать, что мы, как разработчики, не так уж умело можем рассудить насколько толковы наши заявления перед широкой публикой. Имеет ли вообще смысл владеть планетами и называть их, раз мы заявляем, что игроки вряд ли встретятся друг с другом? Насколько ценны «настоящие открытия» если мы утверждаем, что каждая планета уникальна и полна чудес? Не то чтобы эти идеи противоречивы сами по себе, просто мы даже не задаёмся такими вопросами, не говоря о том, чтобы делать выводы из них. Мы не можем проверить эти заявления на противоречивость, просто потому, что у нас нет общего понятного языка, чтоб говорить о процедурной генерации. Мы застряли со своими собственными представлениями, мысленными моделями и надеждой, что они совпадают с представлениями журналистов, чьи статьи мы читаем, или разработчиков, за чьими играми мы следим.
Может ли быть лучше? Когда мы пользуемся радикальными значениями слов при разговоре о процедурной генерации (или любой другой технологии), мы поощряем людей воображать радикальные же выводы. Возможно нам нужен другой подход, тот, который уходит от грандиозных заявлений и больших чисел. В последнее время я задаюсь вопросом, не было бы лучше, если бы процедурная генерация сосредоточилась на прямо противоположном — взять отдельный кусочек контента и объяснить, как он устроен. Вот мой генератор решает, куда спрятать плюшки. Вот так он рисует нужным оттенком закат. Вот откуда взялось это шуточное имя корпорации. Мы можем подключить людей к пониманию того, как работают наши генераторы, чтобы снять с них фантастический ореол невообразимой сложности.
Я не говорю, что каждый должен встать на этот путь. Некоторые генераторы извлекают пользу из своей необъятности, как например мистически нескончаемое поле для гольфа в Desert Golfing, где речь о его масштабе помогает донести нужные ощущения. Другим играм полезно совсем не говорить о своих «внутренностях». Мне не нужно знать как создаётся остров в Proteus, и я бы предпочёл это так и оставить. Наверное для многих генераторов вы бы нашли объяснение их работы немного… скучным? И вы были бы правы. Большинство из них и правда ужасно скучны, это одна из причин, почему мы скрываем эту правду за гигантскими цифрами и грандиозными заявлениями. Вместо этого мы, как дизайнеры и художники, должны уверенно понимать, что используем их для создания задуманного эффекта. И раз оно не стоит того, чтобы углубляться в детали, то и не надо его упоминать вовсе. У вас в игре, может, есть ещё шейдеры и физика, они тоже стоят упоминания как часть игры.
Вот поэтому мне кажется, такой подход будет полезен. Ведь рассказывая о том, чем занимаются генераторы, чтобы создать эту частичку игры, мы сами себе помогаем понять, что именно есть в наших генераторах, что делает их наиболее интересными. Большая часть обзора NMS сосредоточена на планетах и вселенной, что рисует широчайшие запросы. А на выходе это не получается ни особенно чем-то новым, ни инновационным. Сравните с тем, как эта статья в New Yorker описывает генерацию криков животных. Никаких громких заявлений, никакой двусмысленной лексики. Предметная история об интересной работе прикольного генератора рассказанная настолько понятно, что я, даже без доступа к аудио, смог влиться. Многозначительность — это не помощник, а барьер перед пониманием по-настоящему интересного материала.
Справедливо спросить, почему всё это важно. Разработчики могут говорить, что пожелают, ведь только им потом разгребать последствия. Ведь так? Но разработчик — не одинокий остров в океане, и то, как мы говорим о технологиях, влияет на информированность игроков и критиков. И то, как они воспримут новости о разработке новой процедурно-генерируемой игры. Если мы говорим с полной ясностью, объясняем работу нашей игры, стараемся впечатлить тем же, чем впечатляемся сами, то тогда мы помогаем понять не только нашу игру, но сразу все игры, использующие похожие идеи. А будем возвеличивать идею о том, что это некое сложное математическое колдовство, будем раздувать ожидания туманным языком, то получим отстранённую аудиторию, относящуюся с подозрением и скепсисом ко всем следующим проектам.
Нам надо покончить с прежним языком процедурной генерации, вместо него нам нужен новый способ рассказать о том, что мы делаем и почему это так интересно. Нужно развенчать миф о её природе, как какого-то тайного искусства, чтобы показать насколько она доступна, понятна и на самом деле интересна. Возможно, это сперва покажется страшным, может показаться, что мы раскрываем нашу работу с уязвимого места, тыкая пальцами во все трещины, но это не страшно. Люди любят трещинки, любят все эти глупые вещи, что производят генераторы. Им не нужны сразу все ответы сходу, я так не думаю, им просто надо, чтобы мы были честны и открыты с ними.
102 комментария
Когда знакомые начали рассказывать об анонсе NMS, я их спросил: «Что же там такого нового?» и получил в ответ множество фантазий об игре, в которой можно делать все. Верилось с трудом, но за отсутствием вменяемой информации только это и оставалось.
И вот релиз и множество восторженных отзывов не от геймплейной составляющей, а именно о технологии, которой якобы раньше не было. И либо разработчики NMS действительно сделали какой-то идеологический прорыв, либо просто это печальный пример того насколько важны пиар и реклама.
Вот ссылка на вики с описанием Space Engine, если кто-то о нем не слышал ru.m.wikipedia.org/wiki/Space_Engine. Уточню: бесплатного проекта от питерского разработчика с теми самыми квинтилионами сгенерированных звезд и планет, которые движутся по орбитам и физическим законам в сгенерированных вселенных.
А я забыл спросить, может кто знает?! Если вылететь с планеты, ВЫЙТИ ИЗ ИГРЫ, потом сесть на другую, потом вернутся на старую, она останется такой же как и раньше?
А если нормально сделаны сейв файлы, то и ваши действия тоже могут остаться.Там по сути планета это число, которое загружается в процедурный генератор, когда вы на нее садитесь. И если там нет лишнего рандома, то планета генерируется по нему, каждый раз одинаково.
Если есть, то это уже не процедурная генерация, а случайная. Что намного проще и гораздо старше.
Плюс некоторые изменения таки сохраняются. Например, нельзя 2 раза собрать один монолит.
Изменения сохраняются скорее всего через сейв (т.е. после генерации идет дополнительная корректировка результатами деятельности игрока)
Хоть сложный процедурный, хоть простой рандом может быть как детерминированным, так и нет.
В таких случаях вот это чувство «я здесь уже был», оно возникает уже минут через десять, тогда как в реальности можно час идти по лесу и такого чувства не возникает, конечно если не блукать кругами.
Аналогичная проблема однообразности/заезженности возникала и в процедурно-сгенерированных лабиринтах. Diablo, Hellgate London, Torchlight, PoE. Они используют генерацию и ограниченную библиотеку примитивов, в итоге шансы наткнуться на что-то уникальное есть только первые разы. И ни у кого не получилось подружить этот подход с китайским рандомом так, чтобы он не выдавал не жизнеспособных вариантов.
Вот мы решили делать процедурный лес. Нам нужны деревья. Мы можем заготовить 10 ассетов с деревьями и расставить их в определённых местах, покрутить и немного поиграть с размерами. И наверное игрок даже не заметит ограниченности, но мы хотим больше. А что если сделать несколько ассетов для стволов и несколько ассетов для ветвей, и внутри функции размещения деревьев написать функцию сборки деревьев из этих деталей. Тут можно тоже поиграть с размерами деталей, их густотой или цветом. Можно даже поизгибать их немного в разных местах, а можно подстраивать форму дерева под окружение, например убирать, укорачивать или изгибать ветви, растущие в сторону стены. А можно пойти дальше и внутри функции сборки деревьев вставить функцию сборки ветвей, которая точно делает каждое дерево точно уникальным. И чем больше таких вложенных итераций будет в генераторе, тем сложнее будет человеку найти паттерны и повторения, но и тем затратнее будет всё это генерировать и хранить, конечно.
А с животными видимо наш мозг приспособлен работать лучше и равный по сложности генератор для них нам будет казаться гораздо проще и закономерности мы будем находить чаще.
2. Кривое дерево — это норма. Кривое животное — это нежизнеспособный урод.
Поэтому генераторы ладшафта и деревьев получаются неплохие, а генераторы животных рождают чудовищ.
А осевую или центральную симметрию сгенерировать несложно. Я не понял к чему аргумент про кривизну.
В процедурной такого цикла не сделать без сопутствующих вычислений. Которые или будут достаточно сложными или приведут к тому же псевдослучайному генератору (как например в достаточно большом количестве языков программирования rnd(n) всегда будет выдавать одинаковую псевдослучайную последовательность для конкретного n (поэтому я Элиту и вспомнил с ее 256 галактиками — там похоже именно такой рандомайзер и стоял))
en.wikipedia.org/wiki/Procedural_generation
Возможно.
Хотя я бы все таки разделил рандом и процедуры. Чисто по принципу построения кода.
Даже если внутри процедуры есть 10 вызовов функции rand(), их можно (и даже нужно) заменить на входные параметры.
То что укладывается в количество до 1000 элементов естественно лучше генерировать
вручнуюбез лишнего рандома.Формально любое количество вызовов rand() можно свести к входным параметрам функции. Пусть у нас на вход подается массив из миллиона чисел, а генератор на основании этих чисел расставляет миллион травинок.
Как заполнить этот массив перед вызовом генератора?
Можно вызвать 1000000 раз настоящий рандом и заполнить.
А можно взять хороший генератор псевдослучайных чисел, проходящий все известные тесты, скормить ему одно 64-битное число в качестве сида, и заполнить им.
Да, формальная мощность второго генератора (жалких 18 квентиллионов) намного меньше, чем первого. Но для человека это не имеет значения.
генератору можно внутренний таймер тогда скармливать для простоты и надежности.
Что на этих входных данных будет реализовано — банальная комбинаторика или крутой генетический алгоритм? Зависит от разработчика генератора.
Если ты сам говоришь, что они приведут к тому же псевдослучайному генератору, то в чем смысл выделения «случайной генерации»?
Пример не понял. Я не большой знаток языков, во всех, что знаю, можно задать seed псевдослучайной последовательности. А то, что при одинаковом seed'е последовательность одинакова, это же ее тривиальное свойство, поэтому ее и называют псевдослучайной.
И почему нельзя сказать, что в Элите была процедурная генерация, я тоже не понимаю.
Чуть выше ты говорил «по принципу построения кода». Ты это на глаз видишь?
Вот в Элите они сильно были похожи именно на случайные.
Это разве не видно. Тогда возможно тоже мой глюк.
В героях тоже была процедурная генерация. Там наверняка (точно сейчас не вспомню) был один аргумент, по которому карта строилась.
А вопрос похожести на пользовательские — это не вопрос отличий процедурной генерации от «рандомной», а вопрос реализации процедурной генерации.
Ну я же говорю — слегка ступил и разделил способы реализации на детерменированный и рандомный с не совсем теми названиями.
На мой взгляд, во втором случае, когда есть рандом, планета генерируется не только в зависимости от вышеупомянутого числа, но и от выпавшего случайного числа. Таким образом, если взять два аргумента (или один, можно ведь преобразовать их к одному), то ими (им) планета полностью описывается. Разница только в том, откуда берется аргумент, полностью определяющий планету. Так что я не вижу особенной необходимости вводить два отдельных термина.
Но вообще походу я тоже немного не в ту степь ушел.
Процедурная генерация (еще в одном смысле) раньше противопоставлялась хранению данных. Т.е. планета не лежит у вас на диске в виде кучи рисунков. скелетов и текстур, а рисуется программой по числу или массиву, без участия кучи графических файлов. Что позволяло писать хорошие графические вещи размером в килобайты когда то. Даже конкурсы были. Может в этом смысле была процедурная генерация?
Я, может, попозже смогу как-то переформулировать, но пока как-то то же самое получается.
Функция, результат процедуры, зависит от двух аргументов — некоего числа, задаваемого извне, и числа, выпавшего из генератора. Можно тождественно преобразовать эту процедуру так, что результат зависит от двух аргументов задаваемых извне, но вторым задавать результат из генератора.
Два аргумента можно заменить одним побитово объединив их — из двух аргументов размером n и m бит получается один n+m бит.
Процедурная генерация, которая противопоставлялась хранению данных, не вижу чем отличается от процедурной генерации в NMS. По-моему это одно и то же.
разработчики скорее всего ее и имели в виду. Меня слегка занесло. Профдеформация — я все таки логику пишу по работе, а не графику вот мысль и свернула сразу в логические отличия. А про процедурную генерацию графики вспомнил сильно не сразу. %-)
Почему замены нет? Было две переменные, стала одна.
На C тоже вполне удобно было.
Вот и интересно, где здесь логические отличия.
Ну скажем так чистая процедура по числу или даже массиву в параметрах и случайная генерация у меня бы отличались в разы по объему кода.
даже с учетом ограничения на рандом.
Код рандомной генерации очень хорошо сжимается и структурируется без потери качества. Рандомную енерацию намного проще писать. И.т.д.
Потому что работать мы все равно будем с ними как с двумя переменными. с дополнительной проблемой по вытаскиванию и пониманию кода впоследствии(что после возвращения к коду через пару месяцев очень даже играет).
Передавать тогда можно хоть сотню переменных в строке через запятую, но от этого они не будут снова одной переменной. Строку придется разворачивать внутри функции обратно.
Но интересно ;-)
На мой взгляд все все эти отличия не логические. Это, скорее, вопросы реализации. Если кто-то на ассемблере будет писать — кода много — это же не значит, что метод другой.
И кстати, можно задавать переменную, которая станет seed'ом псевдослучайной последовательности, которая используется дальше. И это тоже будет процедурной генерацией.
На ассемблере надо реально немного по другому думать.
оффтоп но. Логика меняется в зависимости от типа языка.
Функциональные, объектно ориентированные, еще какие то
тысячи ихне помню сейчас всю теорию… каждый подразумевает свою логику и принципы реализации задачи.Вот игрок смотрит трейлер в стиме на страничке игры (
обещания, были или не были, об этом не будем) и, по идее, это результат работы генератора.Это только одна планета (та что с динозавриками на водопое), а их там 18 в 18 степени — бегу исследовать!
И вот по мере исследования появляются сильные сомнения, что в ролике, пусть даже редкая, но планета сгенерированная текущим генератором игры.
Мое скромное мнение, что основная проблема генератора в NMS — малая вариативность, в большинстве случаев.
Достаточно разнообразны, пожалуй, только животные и в чуть меньшей степени растительные формы.
Вторая проблема это равномерность распределения.
Да планет планет 18 в 18 степени, но ко всему остальному это не относится, вот в чем проблема.
Вот, например источники железа выглядят по разному на планетах, что мешало применить это правило ко всем ресурсам? Сделать генерируемые минералы из которых можно добыть, пусть одни и те же на всю вселенную, элементы для рецептов. Уже лучше, чем одни и те же «кристалы».
Маловато элементов… ну не надо всю таблицу Менделеева, но хотя бы 30-40.
Тоже самое и с рецептами. Ландшафтом. Мало разновидностей.
Почему так мало вариаций строений, которые, вроде как, одни и те же у разных рас, что за унификация?
Более того — всего три расы на галактику…
Да ладно, пусть три. В старкрафте 20 лет назад тоже было три, но у них ВСЁ различалось.
Вот если бы все это генерировалось в огромном числе вариаций…
Исходя из этого, где в игре большие числа сгенерированных вариантов о которых пишет автор статьи?
Проблема как раз в том, что их нет, кроме числа планет, ну животных/растений с натяжкой.
И вот тут еще по генерации животных/растений:
Температура, токсичность, радиация — отличаются только цветом полоски, минимально влияя на генерацию.
На радиактивных планетах можно было бы генерировать более нелепых обитателей.
На низкотемпературных живность с длинной шерстью. И Все в таком духе.
На благоприятных планетах более гармоничную живность.
Да как угодно, но по правилам — процедурно, а не случайно с ровным распределением.
В роликах игроков (не беру в расчет тех, кому «не завезли мультиплеер и обещания») одна и та же история. В первых роликах — восторг.
Но быстро все начинает повторятся и восторг сменяется скукой.
Хотя сколько я позитивных видео от игроков пересмотрел, многих даже так все устраивало, не начинай оно повторятся через не так уж много игровых часов.
Касательно процедурной генерации космоса — SpaceEngine, выглядит и правда волшебно.
Вот ты сгенерировал планету предположим с пятьюдесятью параметрами, в отличие от десяти. теперь тебе придётся генерировать весь контент на планете, беря в учёт все эти 50 параметров, иначе придёт какой-нибудь придирчивый игрок и скажет — а почему радиация на планете не влияет на распределение радиоактивных ресурсов? Или там ещё придумает что-нибудь вроде — а зачем глаза животным на тёмной планете? Или ещё что-нибудь такое, что разрабы просто не предусмотрели. Всегда найдётся что-нибудь, чего в этой игре нет. Но чем больше мы добавляем параметров, тем больше таких нюансов надо предусмотреть, тем дольше время разработки, шире бюджеты, и что самое поразительное — требования игроков.
Эдакая Uncanny Valley для планет, хехехе
Можно сделать квинтилион раз процедурно и получится красиво, разнообразно, правдоподобно и это не волшебство.
А то, так можно Вас понять — глупые наивные игроки ждали чего-то невозможного.
Да и НМС не так уж плоха, хотя немного больше разнообразия бы точно не помешало.
А чем больше разнообразие, тем меньше потенциальных ситуаций:
Они конечно придут, но их десятки придирчивых реплик просто потонут среди десятков тысяч реплик восхищенных.
Когда был двухмерный плоский Вольф, хотелось третьего измерения, чтобы прыгать еще. И чтобы рубиться с товарищами. В Думе уже можно прыгать, и с товарищами рубиться, но ток по локалке, и графика вся спрайтовая, кривая. В Кваче графика уже объёмная, но все еще кривая. В Халфе кортинка вроде стала получше, но физика еще печальная, и анимация вообще печаль.
И так по нарастающей. Становится более-менее реалистичной физика, начинает хотеться больше детализации, чтобы больше объектов этой физике подчинялось. Становится лучше графика, более похожими на человеческие лица персонажей — начинает хотеться более сложной лицевой анимации. Появиалсь скелетная анимация регдола, хочется более сложный регдол, и потому сейчас только в низкобюджетных совсем уж проектах анимируют модели вручную, а в основном моушн кепчер используется.
Чем больше есть, тем больше хочется, и это нормально.
Процедурная генерация сама по себе не может быть основной «фишкой» игры, фундаментом геймплея, она является инструментом, не больше ни меньше. Для определенных типов игры, видов геймплея, подобный инструмент имеет решающее значение, его использование является единственно возможным вариантом для воплощения идеи, но все равно он остается в подчиненном положении.
NMS предлагает нам геймплей основанный на исследовании, это является его основной идеей. Процедурная генерация в данном случае является главным инструментом, единственным, позволяющим предоставить для исследования мир достаточно большой, что бы заинтересовать игрока.
Но мир, предназначенный для игры основанной на исследовании, должен быть не только большим, но и разнообразным, непредсказуемым, просто красивым, в конце концов. И по всем этим остальным параметрам процедурный генератор NMS не вытягивает. В форме приведенного тобой примера, проблема NMS в том, что генератор игры создает планеты только с 10 параметрами, в то время как создания интересной для исследования планеты необходимо использовать минимум 50.
Грубо говоря, разработчики нагоняли хайп обещая в игре эти условные «50 переменных», а выдали продукт только с 10.
Да нет же. Основной геймплей, как верно заметил Ascend, заключается лишь в расширении инвентаря.
Собственно это я и имел ввиду.
Игроки могли бы получить то что навоображали, если бы у разработчиков было больше знаний естественных наук и воображения. Добавить широтность и высотность — и на планетах можно было бы дольше 5 минут сидеть. При триллионах планет никто бы и не заметил уменьшения вариативности.
Связать растения и животных в биомы, вписать в рандомайзер зависимость от температуры \ влажности \ освещенности. Генерить планету в несколько проходов, сначала высчитывая карты температур\влажности.
Идея довольно банальная, но почему-то её игнорируют. Чтобы игра была похожа на реальность, нужно выявить законы, которые определяют реальность. Особенно это касается процедурной генерации.
Конечно. И по 15 минут сидеть перед каждым прилётом в новую систему, когда генерируются планеты.
У них существует минимум 3 ландшафто-зависимых параметра генерации растений: градиент высоты, покрытие водными тайлами и расстояние до пещерных тайлов.
Плюс все это покрывается шумом Перлина с разным размером сетки и его амплитуда тоже идёт как дополнительный параметр.
Если кто-то возмётся утверждать, что высотность или широтность усложнит эти алгоритмы на несколько порядков — с радостью выслушаю аргументы ;)
Даже для температур и влажности наложить на высотность\широтность диаграмму Воронного от водоемов + результаты итерации с деревьями — и будет быстрое и достаточно реалистичное распределение.
В том-то и дело, что после всей их проделанной работы, такие фишки делаются на раз-два.
А другие скажут нет, нереалистично. Хотим чтоб ещё реки были настоящие, и чтоб влажность распределялась по доминирующим в регионе ветрам, чтоб горы ветровую тень ещё создавали. А ещё хотим чтоб вулканы были и чтоб альбедо считалось, а северные сияния чтоб зависели от магнитного поля. И всё это в окружении красивой графики и умного ИИ. Ведь это же всё так легко и просто сделать — в игре А это было уже 20 лет назад, а вот эти фичи были в игре Б, В и Г. Главное осталось в одно это совместить, и пожалуйста, желательно побыстрее. Лучше всего — вчера.
Вулканы из карты литосферных плит, которая является производной генератора материков. Заодно у нас появятся нормальные горные хребты (не берусь утверждать что их в NMS нет, но я пока не видел).
Северные сияния и магнитное поле вообще проблем не составляют) свяжем их с параметрами радиоактивности и температурной опасности.
Нормальные реки — это алгоритм поиска пути по хейтмапе. В NMS я встречал ручьи, но пока логику не понял. В любом случае, год назад тут была статейка по свежим алгоритмам в этой области «на лету» работают без проблем.
С ветрами согласен, это может быть тоже крутой инструмент. Алгоритм, на самом деле, очень похож на реки. Накидали температурную карту и просчитали «стекание» по ландшафту.
А если ресурсы останутся, то под конец набросили альбедо и сделали вторую итерацию расчетов)
Надо будет как-то на выходных набросать код, но уверен, что такие подготовительные этапы жрут мизерную часть ресурсов по сравнению с растительностью и животными.
Я только не видел никогда чтоб это всё вместе было, с быстрой генерацией, да ещё и на сфере, на которую красиво двумерную матрицу не натянешь, но в которой всё можно очень компактно хранить. Сфера вообще самая противная часть — её затайлить нельзя, а если будешь сшивать из квадратов или шести-пятиугольников, то надо как-то компенсировать возникающие при преобразовании в сферу артефакты. Ну или хранить случайный массив точек, который ещё надо придумать как сжимать для создания LOD. Бррррр короче :)
Ну дык, к чему тогда вообще эти споры?) Вот я глянул их презентацию — проделана огромная работа по генераторам локального ландшафта. Причём всё модульно и можно спокойно экспериментировать с 2-д генератором первичной поверхности. (хотя куб, это просто ахтунг!)
Сама ж разработчик сказала, что на первичный генератор у них полно ресурсов, это мол самая ненапряжная часть.
Эрозия, фрактальные речные системы и побережья — это нужно локальным генераторам.
Задача первичного генератора — просто раскидать типы биомов по поверхности.
Земля уже на 100 тысячах тайлах (500х200) начинает терять некоторые важные детали ландшафта. Но планеты в NMS в тысячи раз меньше, так что вполне можно обойтись генерацией карты в 125х50 тайлов, проецировать её цилиндрической проекцией и залепливать полярными шапками.
Это секундное дело. А дальше всё разруливают их крутецкие алгоритмы локальной генерации и LOD-а.
Больше похоже на то, что у них в команде никто не увлекался географией, и никому даже в голову не пришло усложнять первичную генерацию.
Ну вот я слышал жалобы, что летать между системами (когда генерится новая) долго, мол могли бы и побыстрее. Наверное не могли, и наверное потому планеты такие простые и однообразные, чтоб процесс их создания не затягивался.
Судя по видюшке, им пришлось выкинуть весь багаж накопленных за годы развития 3д-графики изобретений. И придумывать многие вещи «по-процедурному».
Мы их тут критикуем что игра не вышла. А они нас убеждают что это не техдемо. Но по сути, они как раз провели громадную работу в технологиях, но не дотянули геймплей.
Многие годы игры развивались экстенсивным путем — больше деталей\карта, больше худошников\дизайнеров уровней. 2-4-8 Гб видеопамяти! 8-20-50 Гб на жестком диске! Необходимость перемен давно назревает. Но никто не хочет рисковать.
Потому что все процедурные технологии сыроваты и требуют еще много работы. Которая может никуда и не вести. Плохое вложение денег.
Тут мы переходим ко второму вопросу.
LOD у них просто невероятный, но он всё ещё недоработанный. Игру нужно закрывать каждые пару часов для очистки кеша. Один и тот же перелет между планетами может занимать минуту, а может 10 — я так понимаю, это как раз зависит от успехов оптимизации генераторов.
У них там работает куча экспериментальных технологий, которые пытаются догнать десятки лет технологического отставания. Не удивительно, что половина из них хромает на обе ноги.
И при всех этих факторах, убеждать всех, что в NMS не сделали чего-то, потому что это нельзя было сделать в принципе — довольно сомнительное занятие)
Это всё задачки из серии с месяц поиграться на разных билдах с разным градиентом скорости корабля от высоты и разной скоростью входа\выхода из атмосферы.
Но да, их 13 человек и 3 месяца просрочки. Да ещё и мультиплатформенность. Результат закономерный.
А вообще тут история как с Терминаторами — твердый корпус плохо, жидкий металл плохо, а средний вариант самое оно.
Надеюсь, NMS выполнил главную функцию — поднял волну чтобы студии вроде Биоваров или Беседки захотели процедурную генерацию себе.
Первые пару планет можно сгенерировать во время установки игры. Остальные генерировать в фоне, пока игрок гриндит ;)
В текущем варианте NMS разницы между различными секторами галактики никакой, так что можно сделать и так.
Конечно, если ты сделаешь линейную игру, где есть всего один выбор — вперёд, ты точно знаешь куда он полетит дальше и сможешь генерировать на бэкграунде.
А если он летает по уже разведанным планетам?
А у нас процедурная генерация, то есть сгенерированная планета не хранится (если хранится будет проблема раздувания сейвов после долгой игры)
Если генерируется долго, но результат весит мало (генетический алгоритм на 1кк поколений, например), то можно и хранить.
Если и весит много, и генерируется долго, то конечно ничего не сделаешь, и нечего такому алгоритму в компьютерных играх делать.
Кстати, в NMS же проход через черную дыру является необратимым. В этот момент можно чистить кэш сгенерированных систем. И подобрать размер кластера систем, доступных без прыжка через черную дыру так, чтобы кэш не разрастался больше какого-то разумного значения.
Притянуло игроков, которые имеют совсем другие интересы, они ожидаемо вылили на игру и разработчиков свои тазики с отрицательными эмоциями.
Плюс там еще издатель, который, вероятно, торопил и вносил свои коррективы, а разрабы в итоге остались крайними.
В общем по человечески ребят жалко.
Надо иметь хорошую стойкость и волевые качества, чтобы после этого продолжать.
Вся надежда на модеров. Уже сделаны маленькие робкие шаги в этом направлении.
Нечейное небо страдает сразу от двух крайностей — из-за масштабов планет сложно наткнуться на интересное место, и чтобы наткнуться на другие интересные места — они утыканы частоколом по всей планете и постоянно повторяются.
Но в процедурных мирах без мультиплеера можно опираться не только на законы природы, но и на законы кинематографа.
Когда действие «провисает», можно влепить возле игрока интересное место или событие, которое потом больше никогда не встретится.
Ну и ещё важно не превращать это в аттракцион для слабоумных, как разработчики поступили с достижениями.
Я вот подумал, даже хорошо, с какой то стороны, что многие вещи не сразу бросаются в глаза.
archives.nucl.ai/recording/building-a-galaxy-procedural-generation-in-no-mans-sky/
А как описывать генератор? Слова вроде «18 квентиллионов планет» не говорят ни о чем. Разве что о том, что используется seed размером в 64 бита. Даже банальное «игра весит 6Гб» говорит гораздо больше.
Равно как и признавать-патчить косяки.
ИМХО, если бы авторы сразу признали косяки и назначили фич-лист «на реализацию», как тот же Жабейший, то негатива в отзывах было бы в 2-3 раза меньше.
Если для Вас лучше, просто поменяйте.
А если это совет для всех, то получается ерунда.
Это как купив аркадные гоночки, написать — «Надо не врать себе и купить гоночный симулятор».
Так и в этом случае.
NMS позволяет медитативное брожение/исследование планет, многие из которых никто, включая разработчиков, не видел до тебя.
Да, игра далеко не идеальна. Да, можно легко найти к чему придраться, составить длинный список недостатков.
Но. Лучшей альтернативы с таким геймплеем на данный момент просто нет.
Сабнаутика, Старбаунд, которые во многих статьях приводят как лучшую замену NMS, вызывают совсем другие ощущения от игры.
А Элита это вообще космосим, тоже, кстати, не идеальный, если судить по отзывам в Стиме. Да, это тоже игра про космос, но акценты в ней совсем другие.
Я спорить не хочу, с человеком, который не играл в Elite Dangerous хотя бы 100 часов! Вот ещё совет — купи, наиграй, вникни и потом приводи мне куда больше предметов спора! Одно и тоже слышу от людей, уже надоело, если честно.
И спора тут нет. Зачем спорить, что приятнее теплое или мягкое?
Если игра не нравится, можно просто напросто в нее не играть. Есть такая опция. Это касается и NMS и Элиты и чего угодно.
Наверное не в первый раз предлагаете вместо аркады симулятор?