09 января 2011

glVehicles, поверхность жидкости силами Box2d

Когда-то давно я уже описывал простые физические модели, которые можно построить с помощью доступных физических движков. Для 7ой демки glVehicles я выбрал жидкость. Конечно, вводить какие-то новомодные частицы для простой демки я не стал. А вот смоделировать поверхность жидкости стандартными способами (плавание и погружение тел) всегда приятно, быстро и красиво! Итак, еще одно обновление в физических демках: на этот раз демонстрируется, как можно дешево добавить уровень воды в игру, разнообразив тем самым уровни и тайлы карты. Итак, встречайте...

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


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

Что еще нужно сделать?
Да много чего. Сейчас я бы обозначил два пункта:
  • перенести построение контрольных точек для тел в самое начало программы, выполняя эти расчеты единожды - при добавлении объектов в физический мир.Сейчас же эти построения контрольных точек происходят каждый кадр, что сильно понижает фпс.
  • добавить какие-нибудь ползунки-настройки, позволяющие менять параметры среды и тел в ходе выполнения программы. Это добавило бы интерактивности, и увеличило бы продолжительность одной запущенной сессии демки. Что мешает сделать это уже сейчас? Отсутствие штатных ползунков. Надо сделать, а для этого нужно хотя бы часок времени...
Что вообще здесь происходит?
Если ничего из вышесказанного неясно, тогда следует сначала прочесть сообщения в данном журнале с тегом glVehicles, а затем, если ничего так и не прояснилось - спросить у меня лично :)

Что вообще интересного можно почерпнуть из этой демки?
Это уже на усмотрение каждого... вообще, стандартная поверхность жидкости постоянно "мусолится" в шутерах:
плавающие коробки, обломки, аптечки, трупы... Все это добавляет немалого реализма игре. Где-то нам даже дают возможность прокатиться с ветерком на быстроходном средстве:
А физика-то у него довольно простая! Правда вот над глиссеровкой (эффект подпрыгивания на высоких скоростях) нужно немного подумать, но в целом, мне кажется, особых хитростей быть не должно...
Построить целый геймплей на этом трудно. Слишком простенько, согласен... Но, если додумать, расширить, добавить вышеупомянутые частицы, пожертвовать производительностью, прооптимизировать, подкрутить и много чего еще, то из такого:



вполне можно скрутить hi-tech игру, где основой станет жидкость, её свойства и поведение (как-то раз я уже говорил об этой игре под названием PixelJunk, но здесь как нельзя кстати подойдет видео из нее):


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

Наверно, на этом все... следите за обновлениями!

Сообщения, схожие по тематике:

7 коммент.:

  1. Как вы компилируете GLScene? :)
    Попробовал в 2007-й версии - много глюков. Попробовал в 2010-й версии - также немеряно глюков. Качество репозитория - просто ужасающее...
    Сейчас ругается на:
    модуль GLSCUDAGraphics
    там 384-я строка:
    FSceneObject.BuiltProperties.
    этого метода действительно нет...

    Впринципе, мне было бы достаточно промоделировать жидкость типа этого:
    http://www.youtube.com/watch?v=nSwASbUzt0s

    Не подскажете куда нажимать, чтобы эта птичка получилась? :)
    Заранее спасибо! :)

    ОтветитьУдалить
  2. Fanatic, спасибо за комментарий!

    Обо всем по порядку:
    если не компилируется GLScene - тебе на форум glscene.ru, там обычно доступно объясняют, с чем могут быть связаны те или иные ошибки!

    какой именно репозиторий не понравился? glVehicles? что именно не нравится? как бы ты хотел изменить его устройство к лучшему?

    Насчет жидкости из твоего видео... насколько я понял там как раз используется физика частиц, SPH:
    http://en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics
    это более сложная тема, ее я пока не рассматривал... ибо считать это нужно на GPU, потому что CPU не выдержит такого в real-time.

    p.s. какую версию glscene пытаешься скомпилировать?

    ОтветитьУдалить
  3. GLScene At revision: 5425
    https://glscene.svn.sourceforge.net/svnroot/glscene/trunk

    Дело не в понравился/не понравился. Просто мне нужен именно полный 3D. Надо замоделировать натуральную физику. С видеокартой не вопрос - надо будет самую крутую - деньги заказчик будет платить. Это планирую для НИОКР замоделировать, но для начала хоть какой-нибудь результат получить.

    Да - сейчас пытаюсь зарегистрироваться на glscene.ru, но там эти дурацкие неоднозначные вопросы при регистрации - никак подобрать правильные ответы не могу :) Чёрт бы этих админов-составителей побрал! :)

    Вижу там в GLScene\Demos\GPUComputing\StableFluids есть - надеюсь это то, о чём я думаю? Если удасться запустить и откомпилить - то наступит светлое будущее, практически коммунизм :)

    ОтветитьУдалить
  4. http://glscene.ru/forum_viewtopic.php?7.60556 - вот создал тему

    ОтветитьУдалить
  5. лично мне пока интересно только 2д :)

    по поводу видеокарты - дело не в деньгах, а в изучении технологии... одно дело пичкать код if-ами, если у тебя все на CPU, другое - писать код изначально ориентированный под GPU, там свои тонкости...

    по поводу glscene.ru - дерзай! ребята там хорошие, должны помочь! и я тебе ссылочку одну полезную закину туда...

    буду следить за твоей темой :)

    ОтветитьУдалить
  6. Очень заинтересовала ваша реализация поведения тел в жидкости!!! Можно ли увидеть подробную реализацию, я как раз изучаю box2d. или на мыло tafedorov@gmail.com заранее благодарю!

    ОтветитьУдалить
  7. Artem, благодарю))..
    исходные коды открыты и лежат доступно в svn... как настраивать описано здесь:
    http://lampogolovii.blogspot.com/2010/12/glvehicle-svn.html

    ОтветитьУдалить