3034
2
1
Игра Jelly in the Sky, работающая на видеокарте, уже доступна для пользователей. Сперва разработчик представил ее на стиме. Поговорим о плюсах и минусах подобной затеи.
Главная фишка новинки – это физическая симуляция, выполняющаяся на графическом процессоре. Шесть тысяч строк написано на HLSL, основной же код - compute shader. Здесь взаимодействуют десятки тысяч частиц, обрабатывающихся параллельно и при этом довольно шустро. В игре вообще все создано из таких частиц.
Видеосюжет с проигрышем ее части можно посмотреть на YouTube. Здесь же хотелось бы просуммировать полученный опыт. И подвести итоги: с плюсами и минусами вычислений прямо на видеокарте.
Видеосюжет с проигрышем ее части можно посмотреть на YouTube. Здесь же хотелось бы просуммировать полученный опыт. И подвести итоги: с плюсами и минусами вычислений прямо на видеокарте.
О плюсах и минусах
Плюс один, но очень существенный. У GPU производительность в десятки, а то и в сотни раз превышает показатели процессора, если речь идет о параллельных вычислениях. Это невероятно важно, поскольку видеокарта позволяет делать принципиально иные игры, нежели процессор. В нашем примере игра на CPU вообще не работала бы – или велась бы слишком медленно.
Из минусов – нехватка информация в сети. Разработчикам требуется слишком много времени на изучение даже основ, а также на исправление появляющихся проблем. Технология программирования в данном случае вообще сложнее. Вещи, которые привычны для процессорного вычисления, на графическом ядре не всегда работают.
Скажем, 3-мерный цикл с 3-мерным массивом приходится заменять на 3-мерное пространство потоков, которые одновременно обрабатывают 1-мерный массив. В последний приходится раскладывать исходный 3-мерный. Приходится думать и о работе в защищенном режиме параллельных потоков с общими данными. Решить все это можно, но сложно и долго.
Не так уж и просто также читать данные из видеопамяти. Делать это нужно на каждом цикле, однако работает все слишком медленно. Дело в том, что в юнити не имелось асинхронного чтения в моменты времени, которые удобны графическому конвейеру. При чтении данных он все время блокировался.
Как результат – падение fps вдвое. В такой ситуации выручает нативный плагин, позволяющий средствами directX читать асинхронно прямо из видеопамяти. Правда, вне Windows это не работало. Равно как и на ряде видеокарт – по непонятным даже для разработчиков причинам.
Кроме того, не все имеют видеокарты, которые достаточно современны: поддерживают шейдеры, а также обладают должной производительностью. Круг людей, способных поучаствовать в разработанной таким образом игре, при этом существенно ограничивается.
На различных платформах есть несколько разные графические API. В ситуациях попроще они стыкуются со стандартом directX. Но так везет не всем. Скажем, на андроиде, Vulkan, Metal – везде свои собственные ограничения. В результате игра может работать лишь на Windows.
И последнее: обеспечить детерминированность вычислений получается не всегда. А значит от мультиплеера придется отказаться.
Из минусов – нехватка информация в сети. Разработчикам требуется слишком много времени на изучение даже основ, а также на исправление появляющихся проблем. Технология программирования в данном случае вообще сложнее. Вещи, которые привычны для процессорного вычисления, на графическом ядре не всегда работают.
Скажем, 3-мерный цикл с 3-мерным массивом приходится заменять на 3-мерное пространство потоков, которые одновременно обрабатывают 1-мерный массив. В последний приходится раскладывать исходный 3-мерный. Приходится думать и о работе в защищенном режиме параллельных потоков с общими данными. Решить все это можно, но сложно и долго.
Не так уж и просто также читать данные из видеопамяти. Делать это нужно на каждом цикле, однако работает все слишком медленно. Дело в том, что в юнити не имелось асинхронного чтения в моменты времени, которые удобны графическому конвейеру. При чтении данных он все время блокировался.
Как результат – падение fps вдвое. В такой ситуации выручает нативный плагин, позволяющий средствами directX читать асинхронно прямо из видеопамяти. Правда, вне Windows это не работало. Равно как и на ряде видеокарт – по непонятным даже для разработчиков причинам.
Кроме того, не все имеют видеокарты, которые достаточно современны: поддерживают шейдеры, а также обладают должной производительностью. Круг людей, способных поучаствовать в разработанной таким образом игре, при этом существенно ограничивается.
На различных платформах есть несколько разные графические API. В ситуациях попроще они стыкуются со стандартом directX. Но так везет не всем. Скажем, на андроиде, Vulkan, Metal – везде свои собственные ограничения. В результате игра может работать лишь на Windows.
И последнее: обеспечить детерминированность вычислений получается не всегда. А значит от мультиплеера придется отказаться.
Подведем итог
По сути же, все не так уж и плохо. Весьма любопытно разобраться, как это – играть в абсолютно физической среде, подверженной разрушению. Конечно, в идеале должны быть совместимыми все графические API. Но есть надежда, что в будущем это произойдет.
Технология эта весьма полезна, так как дает невероятный выигрыш производительности. При этом делать по ней целую игру совсем необязательно. Часто достаточно перенести в видеопроцессор видеообработку лишь некоторых ее частей. Скажем, в стратегиях это может быть поиск пути.
Пока же далеко не все разработчики согласятся создавать compute shader. Ведь его все равно нужно дублировать – на случай, если игру запускают на платформе, которая не поддерживает вычисления на видеокарте. Если же кому-либо захочется испытать себя в новой области, несколько туториалов найти все-таки можно.
Технология эта весьма полезна, так как дает невероятный выигрыш производительности. При этом делать по ней целую игру совсем необязательно. Часто достаточно перенести в видеопроцессор видеообработку лишь некоторых ее частей. Скажем, в стратегиях это может быть поиск пути.
Пока же далеко не все разработчики согласятся создавать compute shader. Ведь его все равно нужно дублировать – на случай, если игру запускают на платформе, которая не поддерживает вычисления на видеокарте. Если же кому-либо захочется испытать себя в новой области, несколько туториалов найти все-таки можно.
Источник:
Ссылки по теме:
- Всем поклонникам World of Warcraft посвящается
- Теперь каждый, кто считает выборы честными, может побрить Грудинина
- Отец подключил игровую приставку к тренажёру-генератору
- Фотограф снимал 'жизнь' стола для пинг-понга в течение 5 лет, и там было всё, кроме игры
- Ностальгии пост: самые теплые, любимые и родные игры
реклама
Была когда-то игрушка для демонстрации этой технологии, бесплатная техно-демо CellFactor: Revolution. Там как раз вся физика принудительно считалась на видеокарте. Правда работало это только на карточках от Nvidia. Если карта была от Radeon. То физика считалась на процессоре и всё было крайне медленно, фпс падал до 10-15 что не играбельно.
Так что технологии разделения задач процессор/видеокарта существует давно. Но не все разработчики это используют и не всегда в полной мере. Как и качество физики, часто оставляет желать лучшего.
То что здесь применена технология когда объекты состоят из множества отдельных элементов и физика рассчитывается для каждого условного элемента отдельно. Это безусловно хорошо. Да только этой идее тоже много лет. В своё время эта технология упёрлась в производительность железа и создавать масштабные проекты на её основе стало затруднительно. Индустрия ушла в сторону вертексной графики.
Не так давно крупные разработчики задумались над возвращением идей и технологий прошлого, т.к для этого теперь хватает производительности железа.
Прообразом идеи показанной в видео можно считать Tank Wars(1990г) и чуть более поздняя и совершенная Scorched Earth(1991г)
В качестве рабочей версии - фигня(черезмерная сложность архитектуры для такой задачи).
А почему такую технологию до сих пор не применяют в обычных процессорах?
нипанятна......