Однажды наступает такое время, когда понимаешь, что все идеи которые приходили в голову и пробуждали энтузиазм вот-вот окажутся навсегда в забвении, погребенные под грузом повседневности и скуки. И этот чемодан идей и бросить жалко, и открывать уже не хочется... Может быть стоило воспользоваться хотя бы одной искрой из тех многих, что проскакивали в мгновения озарений, ухватиться, бережно раздуть пламя творческого задора. Но душа не зажглась. Отсырела, промозгла...
Все что остается - это вытряхнуть заметки из форточки своего фейсбука, авось кому-нибудь пригодятся.
Вот например сценарии.
Этот пришел мне в голову очень давно, еще в школьные годы, когда я играл в одну из тех компьютерных игр, где приходилось часто сохраняться и загружаться, пытаясь выполнить задачу. Были ли это Проклятые Земли, где я раз по десять загружался, пытаясь убить гораздо более сильного противника одним ударом "со спины в голову"? Или ранняя колда, в которой запоминал, куда с упреждением бросить гранату чтобы убить пачку только что народившихся фашистов?.. Все это наталкивало меня на мысль - ведь герой, получается, своего рода провидец! Или путешественник меж параллельных миров, умирающий тысячи раз на разных вероятностных рельсах, но умеющий найти наконец ту невероятную линию, на которой он чудесным образом всегда достигает успеха, увернувшись от мириады опасностей. Он делает, порой, необъяснимые и чудаковатые вещи со стороны гипотетического наблюдателя, но парадоксальным образом побеждает. К счастью, совсем недавно эту идею воплотили в сценарии фильма Грань Будущего. Но я вижу в ней и больший потенциал, в первую очередь, разумеется, в компьютерных играх. Что если сама возможность сохранения и загрузки станет частью мира игры и его сеттинга, а не мета-игровым инструментом?.. Так родился концепт Пророка.
А вот другая идея, тоже о путешествиях во времени и линиях истории. Я, вообще-то, не очень люблю этот жанр, но почему-то привиделось следующее: фальшивые времена.
Опять же в развитие первой идеи, более конкретный сценарий для сетевой компьютерной игры, вдохновленный просмотром трилогии Властелина Колец и Хоббита: Пробуждение героев.
Это только начало, дальше постараюсь привести в читаемый вид еще около дюжины различных концептов. Stay tunned, как говорится.
Синглы приучили нас к историям об «избранных», и ммо, слепо следуя этой традиции, привели в тупик.
Надо заново учиться писать интересный сюжет, повествуя не столько о героях, сколько о личностях, человеческих отношениях, мыслях и чувствах.
Дать игроку прожить интересную жизнь, становясь не героем в привычном смысле, а личностью, переживаюшей интересный опыт пребывания в непривычной для себя роли.
Герои явятся сами собой, было бы место их подвигам.
После публикаций первых скриншотов Fallout 4 публика многих интернет-ресурсов справедливо отметила недостаточный прогресс уровня графики. Последующие видеозаписи игрового процесса только усилили это впечатление. Так как я не мало работал с графикой, мне захотелось поделиться своими наблюдениями и размышлениями относительно того, что помешало разработчикам Fallout 4 добиться столь же впечатляющих результатов в графике, как в других современных ААА-тайтлах.Взгляните на парочку скриншотов сами. ( Collapse )
Гигантомания и тяга к непреодолимому это либо какая-то психологическая защита от реальной работы, либо следствие заражения восприятия мегапроектами крупнейших студий, заполнивших медиапространство до горизонта своей продукцией. Не тянет делать что-то малое. Невозможно на это найти вдохновение. Испытываю прямо тошноту и головную боль когда заставляю себя делать что-то одноразовое и ограниченное. Тянет на подвиги. Если уж делать что-то, то обязательно универсальное, масштабное, новаторское. Если делать игру, то уж если не ммо, то как минимум онлайновый мир. Мультиплатформенный. С изменяемым процедурным ландшафтом планетарных масштабов. И графикой ААА-класса. Самому смешно, а все же "маловато будет! Маловато!". Такие мечты конечно заставляют учиться, копаться в самых мудреных технических трюках, разбираться в том, как устроены флагманские проекты компаний с мировыми именами; не сидеть годами за рутинными делами; расти. Но стоит разобраться как же устроены brdf функции в physically based шейдинге и как нужно правильно делать для него материалы, тут же становится скучно. Ведь дальше начинается рутина. Принцип ясен - шаблон в руки и копай от забора и до обеда... Лень и неусидчивость тут же толкают на преследование какой-нибудь новой цели: непонятной, загадочной, манящей сказочными перспективами. Все мысли в конечном итоге устремляются туда, и погоня за несбыточным начинается снова. Процедурная геометрия, физическая анимация, сетевые трюкачества, реймаршинг и волюметрик эффекты, адаптивный искусственный интеллект, кроссплатформенные технологии! Вокруг целая вселенная для изучения. И пока копаешься в чем-то, приходит конференция siggraph и обрушивает на голову тонны новых невероятно заманчивых технологий при постижения которых можно ненароком получить пару phd по математике и computer science. И что же делать? Все еще храню надежду, что увлекусь какой-то ограниченной задачей и кропотливо и с любовью доведу ее до конца. Но нужен прочный задор, подкрепляемый чьим-то еще интересом или собственной верой в правильность выбора задачи. Или просто драйв. А его все нет и нет.
Существует достаточно обширный мир предназначенный для длительной игровой сессии. В нем есть своя предыстория и набор потенциальных героев. Каждый герой принадлежит некоторой сюжетной линии, предусмотренной в мире игры. У всех героев уникальная роль и способности, позволяющие внести вклад в историю мира в будущем. Героями управляют игроки, однако не все герои одновременно активны. Герои пробуждаются в несколько этапов. На первом этапе в игру попадают немногочисленные игроки, занимающие наиболее значительные позиции. Грубо говоря, главные злодеи и их антагонисты (напр. Смауг, Саурон, майары, Гендальф). Но никто кроме самих игроков не знает, какие именно из возможных вариантов пробуждены. У пробужденных есть уникальная способность открывать новые вакансии для других игроков или блокировать их появление.
Также у них есть масштабная сюжетная кампания, подталкивающая к развитию действий и поиску союзников.
Второй этап растянут во времени и зависит от первого. Когда игрок первого этапа выполняет некоторую сюжетную ветку, открывается доступ в игру определенным героям. Эти персонажи обладают уникальными способностями, а их сюжетная линия определена союзом с тем, кто осуществил пробуждение. Эти герои не могут пробуждать новых героев, но могут заблокировать потенциальное пробуждение антагонистов. Пробуждения героев идут на протяжение всей сессии игры пока не будут исчерпаны возможности для этого или очередь игроков, желающих принять участие в сессии. Число активных героев второго этапа может быть искусственно ограничено, хотя я полагаю их должно быть много, причем с "запасом" повторяющихся ролей. Тогда при гибели или дисконнекте одного из участников можно призывать нового героя из оставшихся нереализованными вакансий.
Третий этап открывает доступ в игру нейтральным персонажам когда исчерпан некоторый лимит времени или событий первых двух этапов. Их сюжетные линии проходимы разными способами, но их прохождение невозможно без выбора могучего союзника из героев первого этапа, с которым необходимо рано или поздно определиться чтобы выжить и помочь союзнику выполнить свою миссию.
(напр. короли Эльфов, людей, гномов)
Можно рассматривать этот концепт даже в масштабе ММО игры с долговременными, но не вечными сессиями. Тогда можно добавить в игру четвертый этап в котором могут поучаствовать простые игроки, принимающие классические роли. Те из них, кто добился большего успеха (например в пылу битвы нанес последний удар Назгулу или застрелил наконец живучего Боромира), получают шанс быть выбранными для более значительных ролей в будущих сессиях. ( А может вообще аукцион устраивать за право получить билет в первые ряды? ;) )
Существует прибыльный туристический бизнес путешествий во времени, но проблема в том, что существует множество параллельных исторических линий, и в нашу собственную вмешиваться нельзя по понятным причинам, так как можно вызвать парадоксы, негативные изменения и из-за этого никогда не вернуться в привычную реальность. Однако именно эта линия наиболее привлекательна для путешественников, желающих собственными глазами увидеть, исследовать или поучаствовать в произошедшем. Чтобы заработать на этом, организуются фирмы, создающие фальшивые времена путем реконструкции нашей истории в альтернативных ветвях времени, пошедших не в то русло или испорченных вмешательством путешественников. Реконструкторы пользуются разными средствами для форсирования истории: применяют высокие технологии и просто разыгрывают сцены из истории при помощи статистов. Принимают роли исторических персонажей, подстегивают или замедляют развитие местной цивилизации и т.п.
Интрига может заключаться в том, что и наше настоящее время оказывается поддельным, а вся человеческая история, известная нам, лишь эксперимент, имеющий мало общего с истинной историей первых изобретателей машины времени, разветвивших исторические линии (например, падения Римской Империи не происходило и прогресс цивилизации привел к появлению машины времени еще в периоде нашего "средневековья", а наша история это следствие неосторожного вмешательства путешественников из этой реальности).
Все начинается со смерти героя. Он прожил долгую, но тяжелую жизнь. Вокруг него творились беды, да и он сам делал ошибки о которых горячо сожалеет. Вот уже он закрывает глаза и морально готовится умереть, как вдруг просыпается в юности...
Возможно, в момент какого-то катарсиса или экзистенциального, особого события. И осознает, что вернулся в свою молодость, сохранив память, а жизнь продолжается вновь, как с момента сохранения игры. Так герой превращается в пророка. Ему известно будущее. Но стоит ему что-то значительное изменить, как он теряет свой дар, так как события начинают развиваться по новому, уже не известному ему сценарию.
Чем влиятельнее он становится, тем сложнее предсказывать. И так он совершает ошибку за ошибкой в попытке изменить мир и судьбу, делает все только хуже и гибнет раньше чем в первый раз. Но вновь возвращается. И так многократно, пока не научается жить, не вмешиваясь в происходящее без точного понимания того, что нужно сделать. Пытается сделать мир идеальным. Становится "колдуном" который знает как можно изменить ход истории совершенно казалось бы незначительным вмешательством в происходящее. Путешествует по миру, постоянно спеша, как Гендальф, и стараясь все предусмотреть и совершить все необходимые вмешательства: вдохновить будущих героев на подвиги, уберечь людей от роковых ошибок и злых поступков и пр... Но главное - ищет смысл того, зачем и почему ему открыт этот дар.
Я давно искал способ повысить интерактивность виртуального мира при помощи изменяемого ландшафта. Воронки в ландшафте от взрывов в Worms3D и тоннели в марсианской почве Red Faction впечатляли еще много лет назад, но я всегда хотел видеть подобное и в других играх и в более крупном масштабе. Но увы, антураж игр по сей день остается все таким же застывшим и декоративным, хоть и прибавил пикселей в разрешении.
Существует очевидная возможность изменять геометрию ландшафта путем модификации карты высот по которой он построен. Но такой метод имеет очевидные топологические ограничения так как заперт лишь в одном изменении и поэтому годится лишь для небольших ям и насыпей. Вот когда я обнаружил в одном блоге демонстрацию геометрического шейдера, строящего сложную поверхность из поля по алгоритму marching cubes, я почувствовал, что реализовать подобное теперь и в моих силах. Как я потом выяснил, существует фантастически крутой проект Voxel Farm который реализует именно эту технологию, создавая бесконечный процедурный измеряемый мир с фотореалистичной графикой. Но несмотря на это, попыток применения такой технологии в играх до сих пор еще нет. Первая серьезная попытка, насколько мне известно, это очень любопытный проект SOE: Everquest Next. В нем некоторые участки воксельного мира будут доступны игрокам для изменения. Однако я предчувствую, что ничего кроме декоративных изменений в игру он не привнесет, хотя и это уже большой шаг навстречу физически достоверному миру.
Но, несмотря на некоторое разочарование и упущенную перспективу новаторства, я все же решил догнать флагманов индустрии и сделать свой воксельный мир. Перед глазами возникла картина целой вселенной, созданной подобной технологией с масштабными уровнями детализации, позволяющими подгружать только актуальные элементы.
Принцип марширующих кубиков довольно прост: делим трехмерное поле плотности (где каждое значение характеризует расстояние до поверхности) на кубики, и проверяем для каждого из них, не принимает ли поле внутри кубика значение, соответствующее уровню поверхности. Для этого проверяются значения плотности во всех вершинах куба, и если значения на вершинах какого-то ребра оказываются по обе стороны от уровня поверхности, значит она пересекает данное ребро куба. Далее по заранее вычисленному трафарету (в котором записаны все 256 возможных случаев пересечения ребер) выбирается конфигурация поверхности, проходящей через данный воксель. Это создает до пяти полигонов внутри него, которые и выводятся как результат.
Спасибо NVIDIA за бесценные уроки и примеры реализации этого алгоритма на GPU. Оставалось его реализовать в Unity, используя Compute Shader'ы. Это потребовалось мне для того, чтобы вывести информацию о вершинах в область памяти, доступную центральному процессору, рассчитывающему коллизии и физику тел. Обычный геометрический шейдер, реализацию которого я встретил в сети, для такого трюка годился плохо. Затем я добавил разбиение пространства на мега воксели, «чанки», чтобы создавать поле в любом объеме, и написал модификаторы поля для воздействия на него. Получилось вот так:
Однако что меня сейчас беспокоит, так это существование гораздо более оптимальных вариантов данного алгоритма. Я уже воспользовался советом из статьи от NVIDIA и избавил алгоритм от генерации повторных вершин для соседствующих треугольников. Однако само построение поверхности на монотонных участках поля (плоскости) создает множество ненужных треугольников. В сети я обнаружил информацию об улучшенных вариантах алгоритма: macet, повышающий качество репрезентации объекта путем трансформации граней воксельной сетки перед проходом mc, и dual marching cubes, создающий адаптивную сетку для деталей поля разных масштабов. Мои попытки понять до конца их принцип пока не увенчались успехом, но мне страстно хочется добиться сходных результатов. Потому что сейчас поверхность хоть и выглядит сносно, имеет огромное количество лишних полигонов и "тощих треугольников", создающих ступеньки и уродливые тени... Особенно интересен двойной marching cubes который подразумевает рекурсивное построение октодерева, адаптивно разделяющегося на участках с высокой неоднородностью поля, и подобное стандартному мс применение трафарета к построенным ячейкам, топологически идентичным кубу...
В качестве бонуса осилившим этот текст до конца, выкладываю проект Unity для построения поверхности из поля по алгоритму марширующих кубов, использующего GPU: https://dl.dropboxusercontent.com/u/4986831/Unity/GPUVOX.rar (требуется поддержка SM5.0 то есть DX10.1 и выше). Буду рад если кто-то сочтёт это полезным и пойдет вместе со мной по проторенной теоретиками, но еще не освоенной практиками дороге.
Последние месяцы увлеченно изучаю игровой движок Unity. После UDK его редактор кажется более ясным, логичным, свободным, хотя и менее оснащенным по-умолчанию. Простые вещи тут делаются просто, сложные — ровно настолько сложно, насколько этого ожидаешь. Если что-то хочется сделать, то просто берешь и делаешь, а не ищешь часами в документации как именно это подразумевается делать, какие волшебные нативные функции и свойства для этого в движке имеются (или отсутствуют), и какими инструментами нужно пользоваться. Компиляция скриптов и подгрузка новых ассетов происходит "на лету", также как и изменение публичных параметров объектов на сцене. К UDK после этого возвращаться совсем не хочется. Хотя скучаю по его встроенной физике мягких тел и симплигону. Но богатство ассет стора с плагинами, реализующими практические любые прихоти разработчика, с лиховой это ощущение компенсирует. Там и визуальные редакторы шейдеров на любой вкус, и полноценный 3д редактор внутри движка, и куча полезных скриптов, стартер паков и просто материалов из которых можно лепить всё, что пожелаешь: от двумерного платформера до мморпг.
Самая распространенная претензия у начинающих разработчиков к Unity это отсталая графика. Но я скажу, что это претензия дилетантов. В UDK и CryEngine с которыми его принято сравнивать, за вас поработали мозговитые коллеги из именитых компаний: написали на свой вкус кучу крутых встроенных шейдеров для материалов и постобработки изображения. В Unity же все в ваших руках, и проекты вроде Contract Wars, шейдеры Marmoset IBL и подобные, наглядно показывают, что претензии к движку никак не относятся. Более того, недавно появившийся плагин глобального освещения делает просто потрясающие вещи с визуальной атмосферой сцен. Реализованный при помощи "вычислительных шейдеров" (compute shaders) плагин позволяет симулировать на экране практически качество рейтрейсера, просчитывая в реальном времени отражение света от освещенных поверхностей. UDK кусает локти.
Использование подобных шейдеров стало доступно обладателям gpu с поддержкой sm5.0 и открывает для разработчиков волшебный мир скоростных многопотоковых вычислений. Нынче идут активные разработки потрясающих вещей вроде симуляции жидкостей, поверхности океана, объемных эффектов и физических частиц. Все это значительно повышает уровень интерактивности мира, прогресса в котором лично мне давно не хватало...
Вот и я, также, не преминул этим функционалом воспользоваться, и собрал трехмерный генератор изоповерхности из скалярного поля. А чуть проще говоря, воксельный редактор на marching cubes:
Скоро расскажу подробнее о том, как я это смастерил, в каком направлении собираюсь развивать, и, наверное, покажу интерактивную демку.
Мир опять ждет конца. Ждет, как ждал столетиями, тысячами лет прежде этого. Так, будто на горизонте что-то новое, пугающе значимое. “Ну и бред, ты слышал?” - переспросит очередной человек, и с упоением примется пересказывать байку, выплюнутую кем-то из коллективного бессознательного. И лавина бредовых баек, подгоняемая СМИ, покатится дальше; продолжит пережевываться обывателями, застревая в душевно раненых и психически нездоровых умах. Почему так хорошо “выстреливают” лишь столь бредовые домыслы? Нет бы взять, и переспросить протрезвевшим голосом: