Gamedev Vasily Milov
5 802

Сделал игру, работающую на видеокарте

Достоинства и недостатки вычислений на GPU.

В закладки

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

И вот, полтора года экспериментов и разработки миновало, игра выпущена. Основной код игры — это огромный compute shader, 6 тысяч строк на HLSL. Десятки тысяч взаимодействующих частиц обрабатываются параллельно, и выходит довольно быстро. И игра получилась именно такой, какой я её задумал. Всё в ней сделано из физических частиц. Вот видео, в котором показано, как это работает.

В этой своей заметке я хочу просуммировать опыт разработки такого рода игры. Зачем? Я убеждён, что разработчикам есть смысл некоторые алгоритмы переносить на видеокарту. Он есть уже давно, но редко кто это делает. Несмотря на наличие подводных камней, чудовищная производительность видеокарт может здорово помочь в реализации алгоритмов, в сторону которых раньше разработчики даже не смотрели.

Какие достоинства и недостатки у вычислений на видеокарте?

Достоинства:

Производительность GPU в 10-100 раз выше, чем у процессора, когда дело касается параллельных вычислений. Это очень много, так что на видеокарте можно делать принципиально другие игры, чем на процессоре. Моя игра просто не работала бы на CPU (то есть, была бы слишком медленной).

Недостатки:

Мало туториалов. Я потратил довольно много времени, чтобы всё изучить. И ещё больше — чтобы решить возникавшие проблемы.

Программировать для графического ядра в принципе сложнее. Привычные для процессорного вычисления вещи могут не работать. Например, вместо трёхмерного цикла на трёхмерном массиве я должен был организовать трёхмерное пространство потоков, одновременно обрабатывающих одномерный массив (в который пришлось разложить исходный трёхмерный). Кроме того, надо заботиться, чтобы параллельные потоки работали с общими данными в защищённом режиме. В целом всё это решаемо, но требует больше времени.

Проблемы возникли и при чтении данных из видеопамяти. Это приходилось делать на каждом цикле, но работало оно слишком медленно. Потому что в Unity не было асинхронного чтения в удобное для графического конвейера время, и он постоянно блокировался при чтении данных. В итоге fps падал вдвое. Пришлось использовать нативный плагин для асинхронного чтения из видеопамяти средствами DirectX, но во-первых, это не работало вне Windows, а во-вторых, по неизвестным причинам, это не работало на некоторых видеокартах, игроки жаловались.

Не у всех есть достаточно современные видеокарты, поддерживающие шейдеры и обладающие достаточной производительностью. Это ограничивало круг игроков, способных поиграть в мою игру. А те, у кого тормозило, были не прочь написать в Steam негативный отзыв.

Графические API на разных платформах немного отличаются друг от друга. В простых случаях они совместимы со стандартом directX, но у меня — не простой случай, я приблизился ко многим лимитам вплотную. К примеру, в DX11 один кернел может работать только с восемью буферами. А андроидный API — только с четырьмя. У Metal тоже свои ограничения, вроде отсутствия защищённой записи в общую для потоков текстуру, у Vulkan — ещё какие-то ограничения. В итоге, игра работает только на Windows.

Не удалось сделать вычисления детерминированными, так что пришлось обойтись без мультиплеера. Хотя, теоретически понятно: надо всё сделать на int-ах, и результаты на каждом цикле не должны зависеть от очерёдности потоков (которая может отличаться от раза к разу в одинаковых условиях). Но мои эксперименты пока не привели к детерминированности вычислений.Но по итогам, я всё-таки доволен, что сделал что хотел.Как игроку мне очень интересно было посмотреть, каково это — поиграть в игре, полностью физичной, чтоб всё было разрушаемым.

Как видите, трудности есть, но они решаемы. Кроме того, графические API постепенно развиваются, делая вычисления на видеокарты более практичными.

Что касается самой игры, то мне пришлось войти в эту область и попытаться придумать геймплей, который бы имел смысл именно в физическом мире, использовал бы эту особенность и давал игроку уникальные игровые впечатления. Так что как гейм-дизайнеру, мне было интересно поиграть с физикой, поэксперимениторвать. Изначально игра планировалась как римейк Scorched Earth с физической симуляцией, но в итоге я создал аркадную кампанию, эдакий платформер, в котором всё можно разрушить и нужно много копать.

А как программисту мне было полезно приобрести навык вычислений на GPU. Думаю, постепенно всё больше разработчиков будут использовать видеокарты для вычислений, слишком уж хороший выигрыш в производительности. Вовсе не обязательно делать на GPU целую игру, как сделал я. Можно перенести некоторые части игры на обработку в видеопроцессор. Например, поиск пути в стратегиях. По сути сейчас основное препятстве к этой практике состоит в том, что не любой разработчик будет готов писать compute shader, если всё равно его придётся дублировать, на случай, если игра запущена на платформе, не поддерживающей вычисления на видеокарте. Но уже сегодня можно написать compute shader таким образом, чтобы он работал на любой платформе.

Так что остаётся лишь попробовать свои силы в этой области.

Тут среди читателей много разработчиков игр, и если вы, волею случая, имеете опыт работы в Unity, и хотите выйти на разведку в мир вычислений на GPU, то у меня для вас хорошая новость. Я написал пару туториалов о том, как в юнити писать компьют шейдеры.

Вот ссылка на основной туториал, в котором рассматривается, как сделать физическую симуляцию, вычисляемую на видеокарте. В этом руководстве есть ссылка на второй, совсем простенький туториал, к которому вы сможете перейти, если первый покажется сложным.

Ну и напоследок, если кому будет интересно взглянуть поближе на получившуюся у меня игру-симуляцию, то вот ссылка на её страницу в Steam

На этом у меня всё, и я с удовольствие отвечу на ваши вопросы про вычисления на видеокарте, физические симуляции и инди-геймдев.

Если вы хотите поделиться своим опытом создания игры или рассказать какую-то историю, связанную с геймдевом, то смело нажимайте кнопку «Написать» и делитесь опытом. А мы, отредактировав текст (если это потребуется), перенесём его в раздел Gamedev.

#опыт #инди

Материал дополнен редакцией

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Vasily Milov", "author_type": "self", "tags": ["\u043e\u043f\u044b\u0442","\u0438\u043d\u0434\u0438"], "comments": 77, "likes": 191, "favorites": 42, "is_advertisement": false, "subsite_label": "gamedev", "id": 15190, "is_wide": false, "is_ugc": true, "date": "Thu, 25 Jan 2018 01:39:00 +0300" }
{ "id": 15190, "author_id": 16905, "diff_limit": 1000, "urls": {"diff":"\/comments\/15190\/get","add":"\/comments\/15190\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/15190"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "possessions": [] }

77 комментариев 77 комм.

Популярные

По порядку

Написать комментарий...
43

Когда сделал игру выполняемую на видеокарте, а все видеокарты исчезли из продажи, или подорожали в три раза...<тут мем "человек с песком" :)>

Ответить
12

Не благодарите

Ответить
8

На самом деле всё отлично. Всплеск спроса со стороны майнеров и диплёрнеров дал кучу бабла производителям. Они это бабло пускают в развитие технологии, что в итоге приводит к удешевлению терафлопса. Кроме того, запрос на видеокарты как на вычислитель стимулирут развитие архитектуры, она эволюционирует в сторону большей дружественности к произвольным вычислениям, хотя изначально была заточена только на графику.

Так что через 2-3 года вычисления на видеокарте перестанут быть проблемой, а станут инструментом для повышения конкурентоспособности игр, и все начнут их использовать.

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

Ответить
2

Майнинг всё-таки не очень здоровая вещь, если бы в качестве поддерживающих сеть алгоритмов были какие-нибудь осмысленные задачи, типа тех что решали FoldigHome и SETI@Home а не расчет контрольных сумм и занимающие всё больше видеопамяти задачи, призванные обойти недостатки изначального алгоритма с точки зрения невозможности создания ASIC-подобных майнеров, было бы гораздо лучше для прогресса. :)
На самом деле игра у меня в желаемом стоит, причем поставил ещё до того как почитал здесь и на других ресурсах. Я обязательно приобрету, жаль не успел на зимней, слишком много всего нужно было купить :)
Посматриваю за обновлениями, хорошо что Вы продолжаете поддерживать игру.

Ответить
9

Я просто уверен, что майнинг со временем превратится в вычисления планетарного искусственного интеллекта. А токенами будет оплачиваться время работы этого интеллекта. Это будет валюта, построенная не на криптографии, а интеллектуальных вычислениях.

Диапазон задач, которые этот планетарный ИИ сможет решать будет постепенно расти, пока не покроет всё, что человечество способно делать. Управлять бульдозером, чтоб выкопал яму? Пожалуйста, купили время ИИ, яма копается. Преподать детям историю европейской литературы двадцатого века и проследить, чтоб всё выучили? То же самое, совем не дорого. Вести бухгалтерию компании и заниматься стратегическим планированием? Пожалуста. Организовать аренду оборудования, добыть с его помощью сто тонн лития и привезти на склад? Без вопросов. Управлять роем нанороботов, и построить с их помощью солнечную электростанцию в пустыне? Без проблем.

Планетарный ИИ будет эквивалентом производственного потенциала, квинтэссенцией экономической деятельности, то есть наилучшим обеспечением валюты. И единственный ресурс, который этот ИИ будет потреблять — вычислительные мощности новых майнеров, которые будут вырабатывать эти ИИ-коины. Эта валюта вытеснит все остальные валюты, как современные деньги вытеснили ракушки с дырочкой.

Ответить
1

Вашими бы устами, да мёд пить.
Сейчас, к сожалению, криптовалюты, как мне кажется, используются по большей части как очередной способ честного отъёма денег у населения.

Ответить
2

Если увеличить масштаб и посмотреть на человечество в целом, то увидим, что авантюра с криптовалютами простимулировала производство вычислительных можностей.

Можно провести параллель: несколько миллионов лет назад у наших обезьяноподобных предков начал очень быстро расти и развиваться мозг. Точно неизвестно, почему эволюция пошла в эту сторону. Но в результате мозг позволил обезьянам поумнеть и превратиться в людей.

Человечество как система тоже эволюционирует. В двадцатом веке оно наращивало "мышцы" - вооружения. А в двадцать первом ситуация поменялась, человечество наращивает "мозг", развивается вычислительная техника.

И вот забавно, спрос создают не слишком интеллектуальные направления хозяйства. Последние двадцать лет геймеры оплачивали прогресс процессорной техники. Суммарная вычислительная мощность используемых в науке компьютеров не велика по сравнению с суммой производительности видеокарт геймеров.

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

И это в конечном итоге приводит к удешевлению единицы производительности, это неизбежно. В вычислительной технике цена складывается из стоимости исследований и строительства новых фабрик, а также стоимости материалов. Материалы дёшевы, а стоимость исследований и фабрик распределяется по всем выпущенным видеокартам. Большой объём производства и продаж уменьшает долю распределённых затрат в стоимости каждой железяки.

Плюс, в стоимости есть вклад ситуации на рынке. Сейчас карты идут подороже из-за спроса, но пики спроса заканчиваются, цена падает, это неизбежно. Через пару лет железка с производительностью сегодняшней GTX 1080 будет стоить $300-400 и потреблять 100 ватт.

И каков результат? Расцветёт семейство вычислительноёмких алгоритмов - физические симуляции, и все направления искусственного интеллекта.

Изменятся комьютерные игры, их миры станут физически реалистичными. Изменится сама парадигма использования компьютеров людьми. Сейчас то инструмент для сохранения данных и управления ими. А через некоторое время компьютеры научатся думать, начнут создавать данные и знания, начнут подменять человека в интеллектуальной деятельности, человечество поумнеет, как система, из космической обезьяны превратится в космического человека.

Ответить
0

до физически реалистичных игр человечеству как до луны пешком.) имею мнение что не доживу до визического реализма на домашнем пк. тепловыделение не обойти.

разве что случится какаянибудь революция типа квантовых вычислений.. но это уже другая из тория.)

Ответить
0

С каждым новым шагом по уменьшению размера транзистора уменьшается удельное энергопотребение - "тепловая стоимость" вычислений.

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

Уже сегодня при наличии карточки производительностью примерно как две-три GTX 1080 вполне можно вычислять полностью физический мир для 3д-шутера. Конечно, от программистов тоже потребуется работа по оптимизации, чтоб вычислять не всю карту одновременно, а только видимые игроку участки. Но в принципе это вопрос сегодняшнего дня. А через 2-3 года такие карточки будут на рынке по $1000.

Прямо сейчас в Стиме есть 3 полностью физиеских игры, две из них - трёхмерные. Через год таких игр будет 10, а через три года это будет мощный тренд.

Ответить
0

"физические игры через три года" красивая ложь не более.

Ответить
0

браво! роскошная визионерская конструкция :)
все на своих местах )

а скажите по игре. насколько трудоемким является создание контента? ну вот окружение или объект типа противника или персонажа. в обычном 2D это спрайт + хитбокс, здесь я так понимаю много отдельных "пикселей" (шейдеры/воксели/не уверен как называется). как сложно создать объект и в чем заключается сам процесс?

Ответить
0

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

Ответить
0

Кто отнимает?)

Ответить
0

А зачем отнимать, они сами несут :D

Ответить
30

Как же приятно что есть такие извращенцы как Вы, сударь:)

Ответить
0

Ставлю лайк за трек аргонова в стима.

Ответить
18

Чувааааак! А я, было дело, следил за твоими постами по этой игре на хабре! Ты таки допилил и выпустил игру! Красава!

Ответить
9

Я так понимаю, вы слишком программист и недостаточно геймдизайнер.

Если вы делаете геймплей, ориентированный на стрельбу из классных пушек и разрушение окружения, то вам не стоит превращать каждый уровень в головоломку. Ваш продукт позиционирует себя тем, чем не является. Отсюда и огромное количество отрицательных отзывов. Эта игра неоправданно сложна, и при этом сложность проистекает не из челленджа разнообразными врагами, а из неудобства передвижения и стрельбы.

Игра разбита на уровни, и на старте каждого уровня даётся скудное количество боеприпасов, которые необходимо тратить на прорыв через препятствия и очень толстых врагов. Если ты не сумел справиться с колонной с трёх выстрелов, то боеприпасов на следующего врага не хватит. Сами враги впитывают выстрелы так, как будто это боссы. К примеру, я не смог убить летающего суицидного дрона за несколько выстрелов. Танк постоянно качается на резиновом террейне, за счёт чего стрельба становится непредсказуемой (к слову, AI обладает 100% точностью). Таким образом можно легко попасть по дополнительным боеприпасам, которые лежат на уровне (тоже в скудном количестве), и они, конечно же, вызрываются. После этого приходится перезапускать уровень. Таким образом, каждый уровень превращается в головоломку, сдобренную издевательсским передвижением наподобие Getting Over It.

Сама стрельба тоже из рук вон плоха. Нет трассеров: я не могу как следует прицелиться в условиях скудных боеприпасов. Пулемёт не даёт очередь, и приходится как можно чаще клацать мышкой. И раз уж это физическая симуляция, то почему нет отдачи?

Я надеялся на отпрыска Cortex Command, но получил неуклюжий танк, продирающийся через резиновый террейн. Я застрял на втором уровне, бросив после восьмого-десятого рестарта. При всём уважении к вашей работе я ставлю минус и делаю рефанд.

Ответить
5

Спасибо за критику, для меня она — самый полезный результат публикации, всё учту.

Ответить
4

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

Большинство уже написал выше, но ради психики игроков, дайте больше боеприпасов. Превращать уровень в кашу гораздо веселее, чем пытаться экономить, просчитать траекторию, а потом рестартить. Ещё хорошо бы, чтобы малый калибр хоть немного повреждал террейн (см. Worms).

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

Главное, что у вас есть необычная игра, осталось её немного дополировать. Успехов!

Ответить
5

Подумываю добавить танку четвёртое колесо, тогда он будет пошире, поустойчивей и попроходимей.

Ответить
6

правда было интересно! а еще интересная идея реализации в любом случае это выгодно отличается самоизданых игр в стиме. и вообще я не в праве раздавать советы это дело вкуса однако для меня музыка в трейлере ну вообще не в тему(в стиме вообще атас). и геймпад геймпад прикрутииииить огонь. anyway good luck!

Ответить
1

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

нынче любая игра должна мочь в геймпад.

Ответить
0

вот вот тем более и геймпады стали дружить с пк как никогда раньше
в этом смыле какой нравится выбирай хоть хбокс хошь пс4 или стимовский и даже новый нинтендовский и то работает!)

Ответить
7

Я не погромист, но почитать было интересно, песши есчо

Ответить
3

Давно считаю что будущее за "воксельными" физическими песочницами. А вы не связывались с производителями видеокарт? По моему они будут очень рады продвижению своих технологий (как минимум попиарят ваш проект через свои "сми", а может и сотрудничать захотят).

Ответить
1

Я связался с сотрудником nvidia, он показывал проект ещё кому-то, но больше реакции не было, видимо, не очень заинтересовались.

Ответить
0

Насколько я знаю, HLSL - язык, работающий и на картах AMD, и на картах NVIDIA. Была бы игра написана на той же CUDA (платформа для параллельных вычислений от NVIDIA), то можно было бы попробовать

Ответить
1

Да, если б на CUDA, шансов на реакцию со стороны nvidia было бы больше.

Ответить

–2

Почесал голову. Я явно вижу что игра явно 2х мерная. А в статье говориться о 3х мерных массивах и потоках...это очепятка или я чего то не понял?

Ответить
14

Лол, трёхмерные массивы - это несколько про другое.

Ответить
0

Да, речь о данных. В данном случае, например, так: пространство разбито на квадратики, и в каждом хранится список ближайших частиц. Чтобы каждая частица вычисляла взаимоействие не со всеми частицами, а только соседями. И это уже 3д-массив.

А в одной из внешне простых 2д игр (гибриде 2048 и тетриса) у меня были 12-ти мерные массивы.

Ответить
0

Т.е. 2D массив имеет ещё один слой 2D массива? На "задний" слой переходят пиксели, потому что не могут налезать на "переднем" слое на своих соседей (получится суммирование-аннигиляция), а потому каждый пиксель проверяет не только соседей по слою, но и "сзади"?

Ответить
1

Немного другая система. Частицы-пиксели летают в недискретном 2д пространстве, там нет слоёв. Но каждая должна взаимодействовать с соседями (притягиваться-отталкиваться). Соседей надо вычислить, но обойтись без измерения расстояний до всех остальных десятков тысяч частиц.

Поэтому, поверх пространства есть дискретная 2д-сетка 256х256 ячеек. На каждом шагу каждая частица добавляется в свою ячейку. Получается 2д массив одномерных массивов, то есть 3д массив.

И теперь при взаимодействии каждая частица проверяет расстояния только до частиц в пределах 3х3 ячеек, а не по всему полю.

Ответить
0

Теперь ясно. Понятно. Спасибо.

Ответить
2

чудовищная производительность видеокарт

Не хочу сильно придираться, но это звучит как нечто чудовищно плохое)

А вообще было очень интересно и здорово увидеть что-то действительно новое)

Ответить
0

Ага :)

Ответить
2

Василий, отредактировали чутка текст и переместили его в геймдев. Спасибо!

Ответить
0

Отлично, спасибо.

Ответить
1

Это ж практически Cortex Command, если бы он не тормозил! Круто!

Ответить
1

Ох, как же ты мне напомнил про него. Наверное окунусь снова на вечерок.

Ответить
0

Кортекс к червям вроде ближе - ландшафт не падает, в лучшем случае песочком "осыпается". Или я уже всё забыл?

Ответить
0

Да, примерно как с червями, но с попиксельной физикой ландшафта. Сами солдатики и прочие актёры полностью на физике работают, включая всякие мелкие детальки, которые от них отрываются.

Ответить
0

А видеокарты, работающей на играх, нет? А то апгрейдиться не хочу, дорого. :(

Ответить
2

Это отличная идея для стартапа. Написать игру, которая будет шерить вычислительные ресурсы. Если у человека мощный компьютер, для игры всё не требуется, но избыток мощностей не простаивает, а вычисляет запросы, получаемые по сети, а эти запросы посылает слабый компьютер другого игрока. В итоге у обоих 60 fps.

Ответить
0

Не получится. Сети слишком медленные.

Ответить
0

Согласен, для графики и для данных, которые нужны в пределах десятков-сотни миллисекунд — не получится. А для менее срочного — вполне, особенно если входные-выходные данные не слишком велики.

Ответить
0

И что более страшно - они недетерминированно медленные))

Ответить
0

А как работает та же .kkrieger? Там вообще 3д шутан процедурно генерируемый. Тоже только на видеокарте?

Ответить
0

Ну, "Vangers", "Hammerfight" и т.д. свидетельствует о том, что делать подобные проекты можно было еще на 486х. Просто автор говорит о том, что у него существует "внутриигровая материя" т.е. все объекты состоят из виртуальных пикселей-атомов со своими физическими свойствами. Грубо говоря это такой микроаналог нашего мира (есть материя и есть физические законы ее взаимодействия).

Ответить
3

Вангеры были шедевром кодинга. Заставить выдавать подобное на желез того времени с адекватной производительностью - мастерство. Если Кранк сделает вангеры с "живыми" (перетекающими, обваливающимися, разлетающимися по ветру) вокселями, то я первый встану в очередь.

Ответить
0

У них основная фича - процедурная генерация контента. Это не слишком тяжёлые алгоритмы, которые быть выполнены один раз на процессоре при загрузке игры. А дальше всё как у всех, на видеокарте - только графика.

Ответить
0

А есть тут какие-нибудь альтернативные способы вынести вычисления на GPU, кроме как использовать шейдеры? И как вообще в данной ситуации CPU был задействован?
Сам только CUDA да OpenCL использовал, интересно что на той стороне реки, в геймдеве.

Ответить
1

Да вот эти способы и есть, на любом нативном API можно вычислять в GPU — CUDA, OpenCL, DirectX, Metal, Vulkan.

Юнити умеет код компьют шейдера переводить в один из этих API, в зависимости от платформы.

А в моей игре CPU задействован только для управления танком и vfx/sfx. Ну и код шейдера на каждом цикле запускается со стороны процессора.

Ответить
0

О, автор - разработчик! Я помню, когда гифки постились на реддит, эти посты занимали главную страницу и все были были так взолнованы. Что случилось? Что пошло не так, Почему только 67 отзывов, да еще и Смешанные. Где онлайн мультиплеер?

Ответить
0

В статье написано, где мультиплеер.

Ответить
0

Так надо было применить другой подход. Чтобы клиенту передавались "физические" данные (где и что взорвалось), а обработка выполняется локально. Можно вообще поделить по зонам приоритета, данные. Чем ближе к игроку, тем выше приоритет вычисления.

Ответить
0

Так автор и пишет, что результаты не детерменированы, и каждый игрок получит отличный от другого результат. Как это всё потом синхронизировать? К концу уровня каждый уже по своему миру будет гонять, где один игрок завалил пару верхних проходов, а другой пару нижних. С таким же успехом можно и с записанными "призраками" играть.

Ответить
0

Ну тогда через сервер-клиент. Тогда данные будут синхронизироваться через сервер. Правда, тогда фишка игры пропадает. Видимо поэтому никто этого и не делает...

Ответить
1

Да, я обдумал все варианты и решил, что попытка сделать мультиплеер потребует большого объёма работы с не гарантированным результатом. Так что я решил с мультиплеером повременить, изучить networking на простых детерминированных играх, набрать опыта, и попозже сделать попытку скрестить физику и online.

Ответить
0

То есть... Из одинаковых начальных данных у 2х игроков при одинаковом алгоритме физики - получиться разный результат воздействия на мир? Это странно. Очень много команды на генерацию рандома кто то вписал?

Ответить
0

Там нет явного рандома, но параллельные потоки модифицируют данные в разной очерёдности всякий раз. Плюс, влияет округление величин с плавающей точкой. Возможно, ещё какие-то факторы. Я пробовал это пофиксить, но пока не получилось сдлать детерминированную модель.

Ответить
0

В основном минусы ставят те, кому управление не нравится. Кроме того, у многих карточка либо слишком медленная, и игра тормозит, либо слишком быстрая, и игра слишком быстро работает, из-за чего управлять сложнее. Ещё один фактор - игра не работает ни на чём, кроме виндоус, поскольку я придерживался directx api, так что много игроков отсечены. Ну и интерфейс не всем нравится. Так что в сумме получились смшаные отзывы, при том, что есть люди, которым очень зашло, они в восторге от физического мира и наиграли десятки часов.

Ответить
0

Отличный материал ) и очень прикольные эксперименты. Если честно, как я начинаю представлять что игру надо сделать на шейдерах, начинает голова болеть )

ЗЫ но это в принципе сложно назвать игрой.

Ответить
0

Интересно. Геймплей не без недостатков, но выглядит неплохо. Не говоря уже про саму концепцию.

Ответить
0

Левелдизайн неплох

Ответить
0

Интересная статья. Спасибо

Ответить
0

Музыка в ролике стима - огонь

Ответить
0

Это из техно-перы Виктора Аргонова "2032": http://argonov.ru/2032.html

Ответить
0

Супер! Успехов в дальнейшем творчестве.

Ответить
0

Спасибо.

Ответить
0

Liero напомнило

Ответить
0

Да, Liero частенько вспоминают, когда видят мою игру. Ещё Cortex Command. Хотя я ни в одну из них не играл.

Ответить
0

отличный материал, спасибо!)

Ответить
0

Да, там тоже симуляция жидкости с помощью частиц используется.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Невероятно! Skyrim портировали на...
Подписаться на push-уведомления