Новый 3D алгоритм симуляции воды



    Хотя 3D графика в компьютерных играх преуспела за последнее время, вода во многих симуляторах реальности пока выглядит неубедительно, особенно если в ней плавают другие объекты.

    Новый алгоритм «Position Based Fluids» (PBD) обещает это окончательно исправить. Всё об математической части разработанной сотрудниками компании NVIDIA Miles Macklin и Matthias Müller-Fischer можно почитать здесь. Поведение алгоритма при использовании различных параметров можно посмотреть на этом сравнительном видео.

    Будем ждать игрушек с такой вот водой:



    via
    Поделиться публикацией
    Комментарии 94
      +6
      Выглядит потрясно, но очень прокалываются на пене и отсутствии пузырей в воде. Хотя думаю это вещи относительно просто поправить.
        +61
        Главное чтобы отдельную видяшку под воду не пришлось покупать.
          +4
          Почему нет? Под воду, волосы и огонь. :)
            +1
            И под симуляцию одежды!
              +9
              А у кого не будет именно такой видяшки для симуляции одежды, все персонажи игрушки будут без одежды.
                +1
                И без волос =0
          +6
          Посмотрите в HD: http://mmacklin.com/pbf_lighthouse.mp4 (32 MB)
            0
            На этом видео уже заметны неточности модели.
              0
              а это не та же технология, что на презентации nVidia год назад? www.youtube.com/watch?v=h5mRRElXy-w
              +6
              Еще бы добавить смачивание и «намокание» объектов для демки (подозреваю, что сравнительно не сложно).
                +1
                Шейдеры. Это точно просто.
                  +2
                  Как и шейдерную пену
                    +2
                    Одно дело нарисовать а другое дело вычислить место, где необходимо рисование.
                      0
                      Я простой алгоритм придумал во время просмотра, думаю для тамошних спецов вообще никакого труда не составит придумать гораздо более уверенный алгоритм
                        +2
                        Простой?
                        Если действительно простой — реализуйте.
                        А так, идея без реализации стоят ровно столько-же, сколько разговоры за барной стойкой. Это уже избитая тут тема.
                          +1
                          Во первых я не в команде разработчиков, что бы реализовывать свои идеи в проекте к которому у меня нет доступа, во вторых если вы действительно сомневаетесь, я, дабы не разводить здесь флуд, могу вам в личку наипсать простейший алгоритм определение позиции генерации пены
                            0
                            Опишете ли вы его мне словесно тут или в личке, это так и останется пустословством. Если у вас есть алгоритм генерации пены, то вы знаете требования для его работы, и т.о. вы можете сами его реализовать, смоделировав условия. Даже если ваша симуляция будет медленнее чем на видео, она покажет что ваш алгоритм работает или не работает. И вовсе необязательно для этого быть в команде разработчиков NVidia.
                              +1
                              Называть пустословством то о чем вы вообще не вкурсе, такое же пустословство. Однако хватит разводить флуд ниочем
                0
                Мне еще понравилось как они аквариумы в реальном времени разрушали
                  +1
                  А вот с аквариумами как раз может и красиво, но совершенно не реалистично. Физика воды есть, а вот физика стекла крайне убога, да еще и нет влияния воды на стекло (есть только стекла на воду). Это если докапываться, конечно. А так, да, красиво.
                    –1
                    Все верно, но я о самом факте реалтамового обсчета разбиения обьекта
                +16
                Гидродинамика сглаженный частиц — очень мощный аппарат, позволяющий моделировать механическое поведение не только воды, но и почвы, кровеных сосудов, процессы роста растений, плазмотронов, металлов, обрабатываемых фрезами и др.

                Извиняюсь за ссылку на ВК, но вот тут можно посмотреть на результаты моделирования этим методом ССЫЛКА Сразу скажу, ресурс не мой.
                  +2
                  процессы роста растений, плазмотронов

                  Эх, хотел бы я посмотреть на процесс роста плазмотронов :)
                  +2
                  Офигенно!
                    +1
                    Момент с разбиванием аквариума, это… потрясающе!
                    Не терпится опробовать какую нибудь игру с использованием этой технологии ;D
                      +9
                      Симулятор ручейка! Как в детстве)
                        +13
                        А вот на симуляторе ручейка кто-то сделает свой первый миллион.
                        • НЛО прилетело и опубликовало эту надпись здесь
                          +2
                          … и пускать по нему бумажные кораблики.
                        +1
                        Чем больше унифицированных ядер в видео-карте — тем реалистичнее будут вода / дым / трассировка лучей / глобальное освещение / прочие красивые штуки. Именно эти вычисления прекрасно распараллеливаются.
                          +2
                          Мне кажется физику воды все же не так просто распараллелить, так как частицы с одного края могут зависеть от частиц с другого края.
                          Это если в одном сосуде и физика «честная».

                          Для игр конечно можно упрощенную модель сделать (с более вязкой водой).
                            +2
                            PhysX умеет самостоятельно работать через CUDA, для этого просто нужно поставить где надо «галочку».
                              +1
                              да вроде всю жизнь её параллелили
                            +7
                            До реальной воды далеко в плане намокания других объектов.
                              +2
                              Намокание объектов — это уже не к физике симуляции воды. Достаточно мокрую текстуру (со всеми слоями, шейдерами) наложить в тех местах, где жидкость соприкасалась с объектом. Если жидкости попало много, то она и так стекает согласно этой демке.
                                +1
                                Ещё нужно отнять объём впитанной воды от общего, если совсем быть точным.
                              +35
                              Раз уж такая пьянка, то вот ссылочка на видео с кафедры компьютерной графики моего универа. Я уже когда-то кидал, но может не видел кто. Вообще советую просмотреть весь канал.
                                +23
                                я думал что вуз российский, хотел удивиться, а потом прочитал название канала
                                  +2
                                  Потрясающе. Если не секрет, в чем создавалось и визуализировалось?
                                    +5
                                    Я учусь и работаю не на этой кафедре, но исходя из того, что я знаю, то симулятор называется Coin (Open Inventor). Это объектно-ориентированная библиотечка для программирования графики. Подробнее можно посмотреть во вводной лекции.

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

                                    Вообще, кому интересно вот сайт каферды со всеми лекциями, которые можно самостоятельно почитать и разобраться. Я недавно сдавал этот предмет, на лекции не ходил, учил неделю перед экзаменом и сдал на отлично, так что лекции вполне подъемные при должном желании.
                                    Вас интересуют разделы Advanced Computer Graphics и Simulation in Computer Graphics
                                    +2
                                    Впечатляет!
                                    +8
                                    Очень круто.
                                    Только кролике выглядит скорее как желе чем вода.
                                      0
                                      Мне показалось, что это очень жидкое масло. :)
                                      +4
                                      В принципе, вывод достаточно прост: хочешь красивую воду — пиши воксельный движок. А одна из основных их проблем – производительность. Даже учитывая уменьшение количества вокселей за счет увеличения их размера.
                                      Кстати, в варианте с маяком вспомнился последний биошок, но там море было до горизонта и оно съело бы всю мощность современного железа. Хотя, возможно, за счет отсечения невидимых планов и загрубления рассчетов при удалении получилось бы ничего.
                                        +1
                                        Вы случайно воксели с партиклами не перепутали?
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                          +6
                                          Почти уверен что у niosus не реалтайм рендер, потому можно более точно просчитывать частицы.
                                            +5
                                            Да, вы правы, то видео, что у меня — не реалтайм. И это объясняет так же почему вода более вязкая в видео в теме. Вязкость позволяет использовать более грубую разностную схему. Для того, чтобы запускать все это в реалтайм это важно.
                                            0
                                            В некоторых играх и реки крови симулировать уместно будет.
                                            +4
                                            У меня дежавю или я это пару лет назад уже видел.
                                              +7
                                              Меня в свое время поразил рендер в реальном времени на этом видео: www.youtube.com/watch?v=OiGADgezjC8 Да и до сих пор поражает…
                                                +3
                                                Ну тут все же шейдеры.
                                                0
                                                Наверно глупый вопрос: все просчитывается в реальном времени?
                                                  +1
                                                  В видосе указано число FPS, что было бы бессмысленно в случае пререндера. Но! Не понятно, на каком компе это дело…
                                                    +2
                                                    там указана видяха
                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                    +35
                                                    Люди, которые радовались переходу с CGA на EGA считают ваш комментарий немного напыщенным.
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                    +2
                                                    Остается надеется, что PhysX будет использоваться в большем количестве игр. Пока, к сожалению, их мало и большая часть из них не достойны внимания.
                                                      0
                                                      Насколько я понимаю PhysX работает только на видеокартах чипа Nvidia, могу ошибаться.
                                                        +1
                                                        Ошибаетесь, это кажется самый популярный кроссплатформенный физический движок, потом идёт Havok. На видеокартах от NVIDIA просто есть аппаратная поддержка.
                                                          +1
                                                          Уточню, PhysX самый популярный среди игр с большим бюджетом. Среди других популярен Bullet.
                                                            +1
                                                            Частично он прав. Полноценный PhysX с аппартным ускорением работает только на картах NVIDIA, причем даже заблокирована возможность просчитывать физику на карте Нвидиа, а графику на карте другого производителя. Раньше выпускались патчи для дров, позволяющие активизировать PhysX в системах с видеокартами от АМД, но давно уже новых версий патчей не появляется.
                                                            www.nvidia.ru/object/physx_faq_ru.html
                                                            То, что показано в демке явно будет только в системах с аппаратным ускорением, там где его не будет, все будет выглядеть гораздо проще. Что касается консолей, то судя по новостям у PlayStation4 вполне может быть и полноценная аппаратная поддержка PhysX, не смотря на железо на AMD. Т.к. в принципе с технической стороны препятствий нет никаких заставить PhysX аппаратно ускорятся на железе от AMD. Вопросы тут только финансовые.
                                                        +1
                                                        Жалко что они демки сами не выкладывают, я бы с аквариумом поигрался.
                                                        Кстати, вот тут тоже риалтайм на 1 GPU в 2010 году (кажется еще и в 3D) www.youtube.com/watch?v=1JrM4ujLY_A&hd=1
                                                          0
                                                          Круто. Но смущает подход, т.к. в игрушках объемы воды как правило куда больше, да и кроме воды — еще куча всякого разного…
                                                            +1
                                                            Почему капли воды не остаются на объектах?
                                                              +1
                                                              Думаю, потому, что тут моделируется вода, а не смачиваемость ею поверхностей.
                                                                +1
                                                                Капли воды движутся с одинаковой скоростью, особенно заметно на аквариуме с постаментом.
                                                                  +1
                                                                  Похоже, что смачивание вообще игнорируется.
                                                                  0
                                                                  В документе по ссылке не увидел ничего принципиально нового. А вот адекватно плавающие объекты было бы интересно увидеть. А сам алгоритм достаточно простой и 1300 раз реализованный, с небольшими модификациями, да вот хотя-бы http://wonderfl.net/c/pKTB.
                                                                    +1
                                                                    Тут смысл не в том, что разработан новый алгоритм, которого нигде не было и ничего подобного мы даже близко не видели. Видели и лучше, но не в играх. NVIDIA в данном случае показывает новые возможности своего физического движка для игр. Таким образом разработчики игр получают в руки готовый инструмент для создания подобной воды в своих играх.
                                                                      +2
                                                                      Адекватно плавающие объекты требуют просчета гидростатического давления. В показанных иллюстрациях его, похоже, нет.
                                                                      Ниже я обратил внимание на то, что при расстреле аквариума струя вытекающей воды не меняется с изменением уровня воды в аквариуме.
                                                                      +6
                                                                      Вот бы в Корсаров да с такой водой :)
                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                          +2
                                                                          Вблизи моделировать маленькими, вдали — большими. Этакий LOD для физики. Такие сцены надо или показывать издали, чтобы шло на большем числе компов и выглядело пафоснее, или рендерить заранее.
                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                              +3
                                                                              Шариков-то в демках на финальных визуализациях не видно. Они показываются скорее для демонстрации того, для каких объемов воды рассчитывается взаимодействие с другими единичными объемами и твердыми телами, а в итоге окончательное местоположение в тот или иной момент времени. Окончательно же каждый единичный объем в виде шарика не отрисовывается-то.
                                                                            +1
                                                                            Хватит-не хватит. Прежде чем об этом говорить, надо понять сколько этой памяти нужно. Так же моделирование и визуализация в играх должна быть качественной и подробной близкой к игроку, а чем дальше от него, тем проще они могут быть. Памяти же на видеокартах сейчас довольно много.
                                                                            Да и это просто очередное развитие физического движка для игр и призвано оно не сделать какие-то точные лабораторные расчеты, а показать более реалистичную воду в играх по сравнению с той, которую мы видим сейчас. Хотя сейчас PhysX и в текущем виде мало где где используется полностью. К слову, в Крайзисе 3 PhysX вообще не используется.

                                                                              +1
                                                                              Использовать тот же подход, что и при разбиении объектов на вокселы: крупные массы воды, не контактирующие с другими объектами (в т.ч. атмосферой) моделировать крупными субъединицами, мелкие порции воды, контактирующие с другими телами и/или отрывающиеся от основных масс — более мелкими субъединицами. Но при моделировании больших объемов все равно нужно будет на каком-то этапе переходить от частиц к геометрии+ текстурам (начиная с той дальности, где зритель разницы не заметит)
                                                                              +2
                                                                              Так и не понял, чем это лучше того, что нам уже показывали два года назад
                                                                                +1
                                                                                автор статьи написал же, почитайте там, вот и ответ! (
                                                                                0
                                                                                Может кто игру про серфинг напишет? м?
                                                                                  +7
                                                                                  Это выглядит «неплохо», но на воду похоже лишь отчасти. Сразу же бросается в глаза:
                                                                                  1) отсутствие поверхностного натяжения (в некоторых сценах вода разлетается не на брызги, а на «сопли»
                                                                                  2) отсутствие смачивания поверхностей
                                                                                  3) Отсутствие гидростатического давления (дальность полета и сила струи из разбитого аквариума не зависит от высоты столба оставшейся в аквариуме жидкости).
                                                                                    +1
                                                                                    Да и вязкость явно не соответствует воде. Сильно больше.
                                                                                    До развития воды в играх до уровня «несоответствия по сравнению с реальностью не бросаются в глаза» еще очень далеко. Но печально не это, а то, что в современных играх даже близко к демке ничего не встречается. Все очень и очень убого.
                                                                                      0
                                                                                      В Half-Life 2, вода на первый взгляд выглядела красиво, и объекты в ней плавали тоже очень реалистично, но вот брызги все портили, и вид на океан с высоты, когда было видно что волны рисуются квадратными полигонами. В каком-то томб райдере было реализовано намокание, но вот не помню только самой Лары ) или же всех объектов. Так в целом и получается, что где-то красиво выглядит, где-то красиво переливается, а все вместе так и нет (
                                                                                    –1
                                                                                    фу, в майнкрафте реалистичнее!
                                                                                      0
                                                                                      Удивительные люди… Как будто я им наврал.
                                                                                      +1
                                                                                      Насколько я понял, глянув статью по ссылке, это одна из модификаций SPH. Знаю ребят, которые смазочный слой в подшипниках скольжения этим методом пытаются моделировать.
                                                                                        +4
                                                                                        Эх, а я помню восторг от воды в Age of empires 3 — она тогда казалась такой реалистичной! Или даже раньше — в Morrowind.
                                                                                          +1
                                                                                          В Morrowind действительно хорошая вода была.
                                                                                            +1
                                                                                            Помню, начитался про воду, побежал за диском от 1С — а вода выглядит как говно. Потом только узнал, что такое пиксельные шейдеры и почему Geforce 2MX 400 не держит их :)
                                                                                          +1
                                                                                          Временами на кисель похожа эта вода
                                                                                            –2
                                                                                            Ооооо нет! Гигантский кролик из океана! Стивен Кинг came back!!!
                                                                                              +1
                                                                                              Самая красивая вода, что я видел в жизни — в Dear Esther. (Там и небо самое красивое, и скалы, и пещеры, и кристаллы и вообще природа)

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

                                                                                              Самое читаемое