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

image

image

image

Хочется просуммировать опыт разработки такого рода игры. Какие достоинства и недостатки у вычислений на видеокарте.

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

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

Недостатки:

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

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

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

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

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

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

Но по итогам, я всё-таки доволен, что сделал что хотел.

Как игроку мне очень интересно было посмотреть, каково это — поиграть в игре, полностью физичной, чтоб всё было разрушаемо. Возможно, в будущем сделаю попытку что-то подобное изобразить в 3д.

Как гейм-дизайнеру, было интересно поиграть с физикой, попытаться создать уникальный геймплей, невозможный вне физической симуляции.

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

Ну и если кто-то вдруг захочет попробовать свои силы в этой области, вот парочка туториалов, они мне в своё время открыли путь в эту область:

Первый
Второй

Комментарии (168)


  1. greabock
    19.12.2017 19:26
    +3

    Автор, конечно, молодец. Но материал — какой-то сумбур.


    1. Vest
      19.12.2017 22:05

      Если я не ошибаюсь, то эту статью я видел здесь: https://m.pikabu.ru/story/dodelal_igru_rabotayushchuyu_na_videokarte_5552510


      Там тоже нет технических деталей.


      1. MasMaX
        20.12.2017 09:46

        Так это он же и есть


    1. izzholtik
      19.12.2017 22:43

      del


      1. izzholtik
        21.12.2017 12:26

        минусовать случайно оставленные комментарии — это конструктивно, да


        1. mayorovp
          22.12.2017 16:41

          Заминусованный комментарий бледнеет и становится почти невидимым. Это как раз то что нужно случайно оставленному комментарию.

          Кстати, почему вас беспокоят минусы к случайно оставленным комментариям? Вам же за них ничего не снимается.


          1. izzholtik
            22.12.2017 16:43
            +1

            Рейтинг снимается, хотя для чего он мне — ума не приложу.
            А «как раз то, что нужно» — это наконец реализовать удаление комментария.


  1. iWheelBuy
    19.12.2017 19:26

    Я не увидел сколько времени вы потратили… Пропустил или действительно вы не упомянули?


    1. ThisIsZolden Автор
      19.12.2017 19:35

      Примерно полтора года неторопливо делал. В рабочем режиме можно было за полгода управиться.


    1. marapper
      19.12.2017 19:36

      Почитайте его старые публикации


  1. Vladal
    19.12.2017 19:44

    Восхитительно.


    1. ThisIsZolden Автор
      19.12.2017 20:56

      Рад, что нравится.


      1. AlexanderZh
        20.12.2017 15:38

        Вы пишите «если б все графические API были совместимы со стандартом directx11» — это значит, что игра будет доступна только владельцам win10?


        1. ivanius
          21.12.2017 11:19

          Если верить тому что тут написано и моим данным (играя в игры на Win7) DX11 прекрасно работает на 7рке и как пишут на вики, даже на висте, еще в далеком 2009.


        1. ThisIsZolden Автор
          21.12.2017 11:20

          Возможно, моя игра соответствует стандарту directx10, я помню, что компилятор предупреждал о выходе за границы directx10, и я их соблюдал. Так что игра работает и на восьмёрке и на 32 битных версиях.


          1. AlexanderZh
            21.12.2017 13:33

            Это меня переклинило. В 10-ке 12 директ, я с ним спутал. А игрушка ничего, вчера даже в неё немного поиграл. Расслабляет.


  1. Aingis
    19.12.2017 20:05

    Это вам не CryptoKitties.

    P.S. А PhysX на что-то такое не способен?


    1. ThisIsZolden Автор
      19.12.2017 20:50

      PhysX вроде бы заточен на размерные тела в 3д, взаимодействующие ударениями, а я сделал для точек в 2д, чтоб взаимодействовали полями. Так-то в Юнити есть физика, но десятки тысяч тел тормозят изрядно. А у меня к своему движку полный доступ, оптимизировал где мог, так что десятки тысяч частиц работают с пристойной скоростью.


      1. anprs
        21.12.2017 09:57

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


        1. ThisIsZolden Автор
          21.12.2017 11:23

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

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


  1. DaylightIsBurning
    19.12.2017 20:47

    Рассматривались ли OpenGL/opencl в качестве платформы?


    1. ThisIsZolden Автор
      19.12.2017 20:52

      Нет, я в этом деле совсем ничего не понимал, и взялся за первый вариант, попавшийся под руку, которым оказался compute shader под юнити. Я могу билдить в openGLCore, но почему-то оно не работает, тоже какое-то насовпадение API. Пытаюсь разобраться, хочется и под другие платыормы выпустить.


      1. Nokta_strigo
        19.12.2017 22:24

        Когда-то начинал изучать CUDA (примерно когда OpenCl только ещё был в проекте), тьюториалов по CUDA было в избытке. При этом использование «вычислительных шейдеров» звучит как-то странно в эпоху GPGPU. Сам никогда на Юнити ничего не делал, могу ошибаться ;-)
        P.S. Понятно, что проблемы с портабельностью могут быть большие, но если удастся портировать на Линукс — будет здорово!


      1. RomanArzumanyan
        20.12.2017 17:34

        У CUDA и OpenCL есть interoperability c DirectX и OpenGL, да и писать на них вычислительные ядра будет гораздо удобнее. А связка OpenCL + DirectX поддерживается почти всем актуальным железом.


  1. denzill
    19.12.2017 20:48

    хм, еще бы ссылку на саму игру…


    1. ThisIsZolden Автор
      19.12.2017 20:54
      +1

      Вот ссылка, пожалуйста.


  1. d_spd62
    19.12.2017 20:48

    А ссылки на игру-то и нет!


    1. ThisIsZolden Автор
      19.12.2017 20:54
      +1

      Вот ссылка на игру, если кому хочется попробовать.


      1. voidptr0
        20.12.2017 15:38

        Саундтрек, как-бы это правильно сказать, не совсем привычен для такого рода игр, по крайней мере это так в видео на страничке магазина. Тут по идее ожидается хардкор и рубилово, но внимание постоянно соскальзывает на слова песни. Вместо того, чтобы работать в унисон, саундтрек перетягивает на себя излишнее внимание. А так, да — весело!


        1. infrapro
          20.12.2017 18:03

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


          1. TheShock
            20.12.2017 19:21

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


            1. ThisIsZolden Автор
              20.12.2017 20:42

              С музыкой в игре ситуация такая: я переписывался с несколькими композиторами, слушал их музыку, но мне ничего не понравилось настолько, чтобы сотрудничать. У меня очень высокие требования к эмоциональному содержимому музыки. А в трейлере — просто хорошая песня.


              1. TheShock
                21.12.2017 19:12

                Выглядит так:
                — Ребят, я тут новый рецепт мороженого придумал, зацените. Правда, я окрошку люблю, потому налил в него окрошку, но вы не обращайте на это внимание и оценивайте мороженое без окрошки.


          1. ThisIsZolden Автор
            20.12.2017 20:39

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


        1. ThisIsZolden Автор
          20.12.2017 20:43

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


  1. tanchu
    19.12.2017 20:48

    Планируется ли выход под mac os?


    1. ThisIsZolden Автор
      19.12.2017 20:53

      Было бы неплохо, пытаюсь разобраться в различии directX и Metal2, чтоб под Мак тоже работало, а пока что не работает, к сожалению.


      1. tanchu
        19.12.2017 23:58

        Надеемся, ждем.
        Выглядит уморительно.


  1. impetus
    19.12.2017 20:49

    Залип над гифками. Шедевр. Да ещё с хорошим юмором. Автор, Вы извините, но играть наверное не рискну — если над гифками-то залип и не сразу очнулся…


    1. ThisIsZolden Автор
      19.12.2017 20:55
      +1

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


      1. impetus
        19.12.2017 20:59

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


        1. ThisIsZolden Автор
          19.12.2017 21:12
          +1

          Эта упомянутая игра — мод для старкрафта2, в неё эдак запросто не поиграешь.


          1. Kolegg
            19.12.2017 21:38

            Мод режим всегда был бесплатен, от чего бы не показать? или там есть какие-то трюки с запуском модов не из батлнета?


            1. Xandrmoro
              19.12.2017 22:32

              Кроме того, сам старкрафт уже тоже бесплатный (или вот-вот сделают?)


              1. Kolegg
                20.12.2017 09:10

                Бесплатно все кроме кампаний.


                1. Frankenstine
                  20.12.2017 11:27

                  Компания за терранов уже бесплатная.


            1. ThisIsZolden Автор
              20.12.2017 18:00
              +1

              Ок, мод называется «Mines and Magic». Найти его можно в батлнете в разделе «Arcade» (не знаю, как по-русски называется), в общем, там где все пользовательские игры находятся. Старкрафт 2, действительно, бесплатный, и моды тоже бесплатные, заходи-играй. Жанр моего мода — Tower Defense, но с большим экономическим уклоном. Это жанровый наследник довольно ивестного мода из Warcraft3 — LegionTD, но я сильно переработал идею, например, добавил контроль над территориями. Если есть любители залипнуть над неторопливой, но стратегичной игрой — рекомендую поиграть, игра реально очень интересная, удовольствие получите. Она уже четыре года держится в топ5 батлнета, у некоторых игроков больше тысячи сыгранных игр, хотя одна игра может и час длиться.


  1. ValdikSS
    19.12.2017 21:42
    +2

    Пожалуйста, не используйте GIF там, где должно быть видео.
    Ваша первая GIF занимает 8.5 МБ. Ее можно превратить в 800 КБ видеофайл в контейнере mp4 с видео, сжатым кодеком H.264:
    files.catbox.moe/js61z9.mp4


    1. ValdikSS
      19.12.2017 21:58

      Вторая 19-мегабайтная GIF превратилась в 880 КБ видеофайл:
      files.catbox.moe/5hyavn.mp4

      А третья 16-мегабайтная — в 1.8 МБ:
      files.catbox.moe/a3k7ar.mp4


      1. impetus
        19.12.2017 23:48

        о, спасибо, а то я на тех гиф-ках так ничего толком не успевал рассмотреть (я немного IT-чайник).
        И там всё оказывается ещё более замечательно в плане мелких деталей.


    1. anprs
      20.12.2017 09:11
      +1

      Поддерживаю!
      Плюс к тому: с видеофайлом у меня есть выбор, могу нажать «Play», могу и проигнорировать. Гифка же начинает жрать мой трафик сразу, причём за счёт КПДВ даже с главной страницы


    1. LoadRunner
      20.12.2017 10:02

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


      1. Meklon
        20.12.2017 11:37

        Не поможет. Они все равно подгружаются.


        1. LoadRunner
          20.12.2017 12:15

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


    1. zedalert
      20.12.2017 14:03

      А ведь ещё год назад вас минусили за подобное, а теперь вдруг все стали переживать за мегабайты трафика)


    1. rrrrex
      20.12.2017 14:52
      +2

      Вы гифки в кулинарных пабликах не видели, там они по 100-200 мбайт весят.


      1. rexen
        20.12.2017 20:44

        image


    1. ThisIsZolden Автор
      20.12.2017 18:01

      Спасибо, согласен, надо было видосами ставить, учту на будущее.


  1. KirEv
    19.12.2017 21:49

    классная игра, жаль в стиме нет публичной статистики о популярности игры


    1. EvilFox
      19.12.2017 22:23
      +1

      Зато есть steamspy.


  1. Nokta_strigo
    19.12.2017 22:27

    Кстати, а разместить игру на www.gog.com не думали?


    1. Px2
      20.12.2017 09:36
      -2

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


      1. KoToSveen
        20.12.2017 09:53
        +1

        А чем Вам Steam не угодил? Можно по-подробнее? А то у меня основная масса игр из Steam.


        1. Px2
          20.12.2017 11:06

          Пользовался им давно, поэтому всего не помню. Если вкратце, то:

          1. Без клиента игру запустить нельзя.
          2. Тормозной.
          3. Странный, неудобный интерфейс. Случайно переключился в другой режим, потом не мог найти, как вернуться обратно.
          4. Автообновления. Каждый, с.а, раз запускаются обновления. Я просто хочу поиграть, почему надо пользователя заставлять ждать, пока ваш клиент изволит обновиться? И это не одна и не две минуты.
          5. Однажды я купил Call of Duty. В магазине, на дисках, лицензионный. Пришел и начал играть. А нет, не начал. COD привязан к стиму. После запуска инсталлятора стим начал выкачивать игру ПОЛНОСТЬЮ со своих серверов по очень небыстрому соединению. С дисков не было установлено ни одного байта. Вот зачем так делать? Зачем раздражать пользователя?

          В противовес этому, на GOG:
          1. Зашел на сайт, заплатил, скачал, установил. У игры есть exe, который можно запустить. Нет клиентов, нет обновлений, нет проблем.
          2. Все игры хранятся у меня и принадлежат мне, а не стиму. Я свободно могу переносить их на новый компьютер без необходимости выкачивать все заново.

          Нет, пользоваться стимом должно стать моветоном. Лучше перечислить деньги разработчику и получить от него нормальный дистрибутив. Беда в том, что разработчики предпочитают размещаться исключительно на этой платформе и standalone-сайтов у большинства из них нет.


          1. RiseOfDeath
            20.12.2017 11:12

            1. Если игра не прибита гвоздями к стиму — можно (пример — Broforce)
            2. Не без этого.
            3. Не представляю как можно случайно включить Big Picture.
            4. Хотите просто поиграть — есть автономный режим. В нем стим не качает ничего вообще.
            5. Это вопрос к тому, кто диск делал. Стим-то тут причем?

            По поводу переноса — на стиме тоже можно переносить игры без выкачивания заново.


            1. Px2
              20.12.2017 12:25

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


            1. aikixd
              20.12.2017 16:08

              1. В автономном режиме не работают моды.


            1. Areso
              21.12.2017 11:35

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


          1. rdifb0
            20.12.2017 12:51

            1,4,5 — Steam это не только магазин, но и DRM.
            2 — Все относительно, это вы еще PlayStation Store не пользовались.
            3 — Вкусовщина.
            4 — У меня только проверка обновлений, на пару секунд. Может вы подписались на бету что у вас каждый раз обновления?

            Беда в том, что разработчики предпочитают размещаться исключительно на этой платформе и standalone-сайтов у большинства из них нет.

            Ох уж эти разработчики (издатели) не хотят чтобы их игру покупало полтора геймера. Хотят чтобы пользователи получали форум, CDN, облачное хранилище, торговую площадку, возможность оплачивать внутриигровые покупки из кошелька.


            1. Px2
              20.12.2017 13:24

              > 3 — Вкусовщина.

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

              > Ох уж эти разработчики (издатели) не хотят

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


              1. AllexIn
                20.12.2017 14:42

                Не в лени дело.
                Поддерживать сто тыщ пятьсот площадок — геморой еще тот.
                В стиме — удобный стимворкс, удобный контроль апдейтов, удобные настройки магазина. И всё это приправлено 99% продаж.
                ДОбавлять еще сто магазинов с кривыми инструментами, ради одного процента? Ну большая компания может на это пойти. А инди нет. Потому что этот один процент даже заморочек с оформлением документов не окупит.


                1. Px2
                  20.12.2017 15:40

                  Там что-то надо поддерживать? И GOG тоже крупная площадка.


                  1. AllexIn
                    20.12.2017 15:42

                    Там много чего надо поддерживать.
                    Публикация не сводится к клику одной кнопки.


                1. khim
                  20.12.2017 18:19

                  И всё это приправлено 99% продаж.
                  Порядка 50%. GoG — да, только 10%, но с учётом того, что игр там меньше для конкретной игры можно получить увеличение продаж на 20-30% легко, если одновременно начать продавать.


                  1. AllexIn
                    20.12.2017 20:08

                    А откуда инфа, если не секрет?


              1. Shersh
                20.12.2017 14:44

                Все проще. Steam не продает вам игру, он продает вам право использования. Другими словами дает её вам в аренду на неопределенный срок. Но в любой момент может отобрать его у вас.


                1. Px2
                  20.12.2017 15:42

                  Вот именно. Выбор очевиден: или GOG или торренты.
                  Ну, или Стим, если очень хочется поддержать разработчика, который выкладывается только в нем.


        1. tartarelin
          20.12.2017 15:39

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


          1. Px2
            20.12.2017 15:44

            Подозреваю, что так и будет. Была одна нехорошая история с Амазон Киндл, где человеку то-ли заблокировали, то-ли почистили всю библиотеку.


            1. Idot
              20.12.2017 19:14

              Ему на Амазоне почистили ВСЮ библиотеку при поездке в другую страну, издевательски вернув деньги, из-за того, что книги были куплены в другой зоне.


          1. mayorovp
            20.12.2017 16:04

            У Steam есть автономный режим, в многие игры можно играть в этом режиме.


    1. ThisIsZolden Автор
      20.12.2017 18:04

      Не думал, так что спасибо за идею, рассмотрю эту возможность.


  1. KiloLeo
    20.12.2017 00:37
    -1

    Наверное я чего-то не понимаю и вообще отстал от жизни. Но в подобное играли на IBM PC-AT 286 флопы косые… с таким же качеством графики. Только бетонные блоки не пружинили…


    1. andreymal
      20.12.2017 09:21
      +1

      Очень интересно посмотреть на игру для IBM PC-AT 286, в которой можно делать то же, что на первой гифке


      1. RiseOfDeath
        20.12.2017 09:27

        Вероятно тут обычное «У меня комп супер, адже крузис не тормозит. А тут графика как в первом вормс, и тормозит.»

        P.S.

        К стати, игрушка классная, но компанию я не осилил :)


      1. Ndochp
        20.12.2017 13:21

        Тут на первый взгляд Scorched eath с графикой апгрейженной до леммингов. Гнущиеся балки конечно прикольно, и наверное действительно положат ЦПУ если их разложить на 1ККК частиц, но вот увидеть, что это невозможно сделать иначе, обойдясь парой десятков боксов и чуть чуть частиц из ролика не получилось.


        1. andreymal
          20.12.2017 13:27

          Как я понял по роликам на ютубе, в Scorched eath физика намного более примитивная и ещё более далёкая от реальности чем даже желейный сабж


          сделать иначе, обойдясь парой десятков боксов и чуть чуть частиц

          Очень интересно посмотреть и на это тоже, особенно для объектов вроде https://i.imgur.com/qcGOQgW.gif


          1. Ndochp
            20.12.2017 14:02

            Скорчед естественно примитивна до безобразия — там собственно нет объектов кроме танков, любая «земля» падает вертикально вниз.
            То что на вашей гифке — вы думаете, если в энгри бёрдс добавить возможность перебивать снарядом блоки на несколько и добавить «гнущиеся» (и ломающиеся при перенапряжении) блоки, то выйдет непохоже?
            Навскидку я не могу предложить как нарезать на блоки сплошной «утёс» в который долбимся сбоку, а потом оно падает (первая гифка в статье) Но всё равно, я бы пошёл по пути термеха с динамически меняющимся приближением объектов примитивами. Так что у меня бы с начала не гнулось, а потом сразу ломалось ;)

            Правда у меня есть важное отличие от автора статьи — он написал игру, а я — нет. Так что ясно, кого стоит больше слушать.


            1. AllexIn
              20.12.2017 14:44

              Навскидку я не могу предложить как нарезать на блоки сплошной «утёс» в который долбимся сбоку

              Просто: утей это один объект. При попадании разрезаем на два. Так везде это обычно и работает.


            1. ThisIsZolden Автор
              20.12.2017 16:36

              Знаете, сейчас я бы пошёл по указанному вами пути. У гибрида «разрушаемые твёрдые тела + частицы» есть свои сложности, но есть и достоинства. И хотя начинал я с принципа «только частицы, только хардкор», но оказалось, что превратить такую симуляцию в хорошую игру сложней, чем гибрид.


              1. AllexIn
                20.12.2017 16:41
                +1

                Ну и получили бы совершенно непримечательный проект.
                А так — достаточно уникальное и интересное решение.


                1. ThisIsZolden Автор
                  20.12.2017 18:20

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

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

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

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

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


                  1. VaalKIA
                    22.12.2017 09:34

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


    1. iKest
      20.12.2017 15:39

      Во времена IBM PC-AT 286 вы в подобное могли играть если только на каком-нибудь Крее в НАСА или в Министерстве Обороны...


      1. KiloLeo
        21.12.2017 22:49

        Да, именно так оно и было. Крей, флопы косые…


  1. Petrenuk
    20.12.2017 01:03

    У вас что, музыка Аргонова в игре? Вот это да! Что, прям и Inevitability где-то играет?


    1. ThisIsZolden Автор
      20.12.2017 16:24

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


  1. riky
    20.12.2017 04:59

    а с готовыми воксельными движками не сравнивали? свой движок вы публиковать не собираетесь, я так понимаю, но может что-то готовое есть с чем поиграться так же можно?


    1. RiseOfDeath
      20.12.2017 09:18

      А что из воксельных движков вообще существует? Я слышал только про движок от Voxlap (на нем сделаны Voxelstein3D и, если не ошибаюсь, Ace of Spades) и об Atomontage Engine (но ничего кроме демороликов с ним я не видел, не знаю есть-ли вообще в природе что-то сделаное на нем).

      Как-то «Обычные» движки больше распеарены.


    1. ThisIsZolden Автор
      20.12.2017 16:29

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

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


      1. riky
        20.12.2017 16:34

        Я думаю многие были бы вам признательны, если бы вы описали основные принципы как такое делается. И ваш опыт — сложности с которыми пришлось столкнуться.

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

        Поэтому считаю статьи на такую тему важнее даже чем готовый движок. Если все таки найдете время — то почитал бы.


        1. ThisIsZolden Автор
          20.12.2017 18:27

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


  1. ur002
    20.12.2017 09:58

    Купил игру, поддержал разработчика )


    1. AllexIn
      20.12.2017 11:24
      +1

      Игра классная, но разработчика не хочется поддерживать.
      Потому что игра конечно классная, но зачем здесь откровенно пустая статья, да еще нарушающая правила хабра по поводу дублирования материала?
      Не плохо, если разрабочик использует хабр как промо для своего продкута, но не плохо бы еще и какую-то полезную и интересную инфу в статью запихать, если это платный продукт. Кроме как «я сделал».


      1. suppa-duppa
        20.12.2017 15:39
        -2

        Не бомби, плиз. Ты вообще собеседование на анрил-макаку не прошел.


        1. AllexIn
          20.12.2017 15:43
          -1

          ЛОЛ. Глупо пытаться стыдить меня тем, о чём я сам рассказываю.


      1. ThisIsZolden Автор
        20.12.2017 16:20

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


  1. AllexIn
    20.12.2017 10:00

    Совсем не понятно зачем здесь Unity.


    1. ThisIsZolden Автор
      20.12.2017 16:15

      Вроде можно писать компьют шейдер из-под С++, Используя api dirctx. Но так вышло, что я писал его из-под юнити.


  1. Alex_ME
    20.12.2017 10:37

    Очень рад за вас, что вы это сделали! Даже в прошлую версию играть было довольно увлекательно.


  1. aslepov78
    20.12.2017 11:24

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


    1. zartarn
      20.12.2017 14:50

      Думаю каждый пиксель у вас наделен состоянием, которое обновляется дальше исходя из состояния его и соседних. И тогда это можно делать пиксельным шейдером, в том числе и на openGL.
      Зачем предполагать, если можно посомтреть прошлые статьи автора?


    1. ThisIsZolden Автор
      20.12.2017 16:14

      Коммерческий результат таков, что если заработанное разделить на затраченное на разработку время, получится что-то около прожиточного минимума :)


      1. Shultc
        20.12.2017 17:06

        На самом деле тоже совсем неплохо, если проект делался в удовольствие.


  1. rubyrabbit
    20.12.2017 12:30

    я что-то все глаза поломал, но не пойму: где ссылка на игру?


    1. Shultc
      20.12.2017 14:52

      В комментариях.


    1. ThisIsZolden Автор
      20.12.2017 16:11

  1. tmnhy
    20.12.2017 13:13

    Странно, платформер и без параллакса. Почему?


    1. ThisIsZolden Автор
      20.12.2017 16:10

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


  1. maaGames
    20.12.2017 14:00

    Это просто шикарно!
    Напоминает древнюю досовскую игру для двух игроков, где нужно было стрелять из пушки по замку противника. И замки так же «попиксельно» взрывались и рассыпались. Т.к. игра пошаговая, то и на видюхе забацать можно :) Там помимо физики разрушения была физика полёта ядра в зависимости от силы и направления ветра. Название не помню, даже сейчас бы поиграл…



    1. Ivla
      20.12.2017 18:27

      Castle


      1. maaGames
        20.12.2017 18:30

        Логично! Игра про замки называлась Castle :)
        Даже графика похожа на GPU-шную.
        image


  1. Dzen1
    20.12.2017 14:26

    По графике и движению напоминает мне одну игру, в которую я заигрывался в своё время, — Trash It (молоточники).


  1. dmpalets70
    20.12.2017 15:39

    Очень интересно и познавательно


  1. tiss42rus
    20.12.2017 15:39

    Продажи от игры пошли хоть?


    1. ThisIsZolden Автор
      20.12.2017 16:08

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


      1. RiseOfDeath
        20.12.2017 16:45

        А пробовали всяким «обзорщикам» и «летсплеерам» рассылать ключи?


        1. ThisIsZolden Автор
          20.12.2017 18:30

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

          Попробую ещё игровым журналистам написать.


          1. impetus
            20.12.2017 23:46

            А от этой статьи тут «хабраффект» есть?


            1. ThisIsZolden Автор
              21.12.2017 11:24

              Да, есть.


  1. Politura
    20.12.2017 15:39

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


    1. ThisIsZolden Автор
      20.12.2017 15:40

      Изначально я ориентировался на Scorched Earth, а там клавой управлялось. Я попробовал и привык.

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


      1. Politura
        21.12.2017 00:10

        Мне кажется, мышку стоит сделать прицеливанием по-умолчанию, как, например, в той-же Terraria, очень удобно выходит, да и более интуитивно для большинства. Тогда новых негативных отзывов будет меньше, ведь мало кто лезет в настройки.
        А для существующих отзывов можно добавлять комментарии? Вы можете им написать про настройки, возможно они изменят оценку.


        1. ThisIsZolden Автор
          21.12.2017 11:26

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

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


          1. RiseOfDeath
            21.12.2017 11:45
            +1

            Вот к стати еще и движение мышкой ни к чему. Народ имел ввиду именно «классическое» управление — WASD для движения + Mouse для прицеливания и трельбы (ну и циферки на клаве для выбора оружия).


          1. KodyWiremane
            21.12.2017 18:43

            Или, например, в серии «Decision» (если не ошибаюсь) игроку предлагают выбрать вариант управления на старте игры, на intro-уровне. Так человек и выбрать сможет, и будет знать, что можно переключиться, если не попрёт.


  1. andriy_vityk
    20.12.2017 15:43

    Интересно, можно ли на видеокартах типа Nvidia Titan V перенести физические вычисления на TPU? И на графическое ядро меньше лишней нагрузки, и, по идее, на тензорном процессоре не должно быть проблем с многомерными массивами. Или я что-то не так понимаю?


    1. ThisIsZolden Автор
      20.12.2017 15:51

      В Titan V есть дополнительные вычислительные мощности, заточенные на определённые задачи? Если к ним доступ через API, значит их можно использовать. Основной тренд состоит в том, что видеокарты больше не графическое железо, а параллельный вычислитель общего назначения. Уверен, новые мощности будут легко доступны в первую очередь для вычислений.

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


      1. andriy_vityk
        20.12.2017 16:11

        В Titan V есть TPU-ядра (Tensor Processing Unit), рассчитанные на задачи машинного обучения, то есть на тензорную алгебру. Доступ через API, думаю, есть — tensorflow же их как-то использует.
        Вот я и думаю: если использовать такую видеокарту для игр (хоть она и стоит 3k$, но мы же оптимистично смотрим в будущее), будут ли тензорные ядра простаивать без дела? Можно ведь рисовать картинку за счёт GPU-ядер а считать физику за счёт TPU-ядер — там их на 110 TeraFLOPS (только не знаю, это отдельно для TPU, или вместе с CUDA).


        1. ThisIsZolden Автор
          20.12.2017 18:54

          Если tensorflow их использует, значит есть какой-то инерфейс, значит и для физики сгодится. Но всё равно, очень сложно загрузить современный GPU под завязку одной только графикой. Там всегда останется место для физики.


          1. andriy_vityk
            20.12.2017 19:04

            Ясно, спасибо. Мне чисто концептуально интересно)


  1. yesasha
    20.12.2017 15:51

    Идём дальше и пишем игру на ПЛИС.


    1. tyomitch
      20.12.2017 17:46

      Это не «идём дальше», это возврат ко временам Pong.


      1. yesasha
        20.12.2017 22:57

        Может ли ASIC или ПЛИС как-то помочь в симуляции физики в реальном времени? Если да, то такие игры могли бы от такого выиграть. Да и просто задачи по симуляции при проектировании. Вопрос насколько мы сможем обогнать GPU?


  1. shram1488
    20.12.2017 15:51

    Выглядит интерестно)) Как руки дойдут, куплю и оценю)))


  1. ZaitsXL
    20.12.2017 15:51
    +1

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


    1. ThisIsZolden Автор
      20.12.2017 15:57

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


  1. Wicron
    20.12.2017 15:55

    Выглядит очень интересно, а можно автора попросить скинуть ссылку на игру?



  1. arTk_ev
    20.12.2017 15:59

    тоже сейчас занимаюсь gpu-side рендерингом. После окаменевшего говна мамонта(gles2.0), dx11 — это нечто. Но уже всплывают вопросы совместимости и непонимания некоторых внутренних процессов.
    Как вы именно профелировали и дебажили эти вычислительные шейдеры и командные буферы?
    И очень бы хотелось бы увидеть аналитику устройств, которые поддерживают вашу игру.


    1. ThisIsZolden Автор
      20.12.2017 16:03

      Дебажить посложней, чем на cpu. Я кодировал интересующую меня информацию в цвете пикселей. Хотя, вроде бы есть более традиционные методы, но мне лень было изучать вопрос, и так слишком много информации впитывал, когда начинал, так что по-простому всё делал: чуть что-то не работает — начинаю последовательно проверять содержимое буфферов и кодировать его цветом пикселей.


    1. ThisIsZolden Автор
      20.12.2017 16:04

      А насчёт устройств — это машины на Windows, с видеокарточками поддерживающими shader model 5, и в которых как минимум 256 вычислительных ядер.


  1. saluev
    20.12.2017 16:20

    А вы планируете более детальное изложение технической стороны проекта?


    1. ThisIsZolden Автор
      20.12.2017 20:51

      Кое-что изложено здесь. А для более детального изложения я решил сделать отдельную детальную статью-руководство, которая помогла бы войти в мир компьют шейдеров. Там будет объяснено, как всё настроить в Юнити, и как на HLSL накодить простеньку физ-симуляцию.


  1. HarryBurns
    20.12.2017 18:30

    Напомнило игру Cortex Command, там тоже пиксельная физика. Напишите им, может возьмут в команду =)


    1. ThisIsZolden Автор
      20.12.2017 18:34

      Cortex Command — это игра, которую чаще всего вспоминают, когда видят мою игру. Один из её разработчиков, кстати, на реддите отписывался в моей ветке, хвалил задумку. Но идти к кому-то в команду что-то не хочется, больше нравится самому свои идеи воплощать.


  1. SH42913
    20.12.2017 18:44

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


    1. ThisIsZolden Автор
      20.12.2017 18:46

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


  1. ababo
    20.12.2017 23:59

    Почему не OpenCL?


    1. ThisIsZolden Автор
      21.12.2017 11:27

      Я не рассматривал эту возможность потому, что был в начале не опытен, и использовал первый попавшийся инструмент.


  1. epsonic
    21.12.2017 10:36

    Либо можно взять готовый физический фреймворк nVidia PhysX FleX. Главная фишка в том, что это particle-based physics framework, который появился именно благодаря тому, что карты стали настолько быстрыми, что в состоянии параллельно считать взаимодействия между десятками и даже сотни тысяч частиц. Чего уж там, даже fluid simulation во FleX — это не SPH, а полноценный Particle-Based Fluid (PBF)-солвер. Тут инфа по теме: cgicoffee.com/blog/2016/11/nvidia-physx-flex-fluid-simulation-and-other-solvers
    Последняя версия работает на всех картах, которые поддерживают DX11/12, а не только на картих nVidia через CUDA.
    Есть тесная «официальная» интеграция с UE4. Для Unity есть сторонние плагины типа этого.
    Ну и FleX совершенно бесплатен, да.


    1. ThisIsZolden Автор
      21.12.2017 11:30

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


    1. splav_asv
      21.12.2017 12:29

      А в чем именно с вашей точки зрения разница между SPH и PBF? SPH вроде бы это вид PBF.


      1. epsonic
        21.12.2017 12:55

        Проблема с несжимаемыми жидкостями, поверхностным натяжением и стабильностью.

        The problem lies in SPH method's inability to do surface tension effects very well as well as maintain fluid incompressibility and energy conservation when there aren't too many substeps used. In general you need about 5-10x more substeps to achieve the same level of incompressibility using SPH than with the Position Based Fluids (PBF) method.

        Есть, конечно, работы, в которых описываются способы решить проблему симуляции несжимаемых жидкостей с помощью SPH, например, Divergence-FreeSPH, но я сталкивался с такими реализациями (не то, чтобы у меня прям такой богатый опыт...)

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

        PBF считает столкновения между частицами честно. В этом его сила и слабость, т.к., обычно, в PBF-солвере у частиц одинаковый радиус. Т.е. океан не симулируешь, ибо частицы на поверхности должны чем-то поддерживаться. А вот у FLIP такой проблемы нет, но он уже не годится для мелких точных симуляций, где PBF на коне. Но, опять-таки, у PBF свои проблемы, вроде потерь энергии при взаимодействии частиц (бывают такие, что требуется вносить дополнительно, чтобы симуляция не затухала слишком быстро). Зато стабильность и возможность смены фаз веществ (это же просто куча частиц, с ними можно что угодно делать на ходу). Ну и параллелится хорошо, отсюда и целый particle-based FleX появился.

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


        1. splav_asv
          21.12.2017 13:51

          Возможно в задачах иллюстративных чуть другое состояние, по сравнению с научно-инженерными.
          Я просто недавно видел очень неплохие результаты по SPH на CFD-weekend, к примеру.
          Вот ещё сходу ссылка на кандидатскую работу с SPH: docplayer.ru/63025692-Chislennyy-metod-sph-ispolzuyushchiy-sootnosheniya-raspada-razryvov-i-ego-primenenie-v-mehanike-deformiruemyh-geterogennyh-sred.html

          P.S. сам я ни игровыми движками, ни частицами не занимаюсь — у меня в основном гиперзвуковое обтекание газом (в т.ч. с химией) и методы конечного объёма или DG. Просто интересно, что ещё в мире происходит.


          1. epsonic
            21.12.2017 14:00

            Ну, это круто =) У меня просто хобби — 3D CG и прочая визуализация. Цель, обычно, добиться «красивого» результата побыстрее и желательно подешевле.


  1. splav_asv
    21.12.2017 13:51

    del