Когда-то давно я уже описывал простые физические модели, которые можно построить с помощью доступных физических движков. Для 7ой демки glVehicles я выбрал жидкость. Конечно, вводить какие-то новомодные частицы для простой демки я не стал. А вот смоделировать поверхность жидкости стандартными способами (плавание и погружение тел) всегда приятно, быстро и красиво! Итак, еще одно обновление в физических демках: на этот раз демонстрируется, как можно дешево добавить уровень воды в игру, разнообразив тем самым уровни и тайлы карты. Итак, встречайте... |
Вообще, эту демку я только начал делать. 19-ый коммит как раз и содержит основу моделирования поверхности жидкости. Текущий результат можно наблюдать на видео:
Как происходит расчет?
В тело набрасываются контрольные точки, для каждой из которых определяется: выше или ниже раздела жидкость-воздух она находится. Если ниже - тогда к телу в этой контрольной точке применяется Архимедова сила. В итоге на каждое тело будут действовать несколько выталкивающих сил, которые заставят тело всплывать, погружаться, поворачиваться и так далее, результатом чего будет более-менее физическое поведение объектов в жидкости.
Что еще нужно сделать?
Да много чего. Сейчас я бы обозначил два пункта:
- перенести построение контрольных точек для тел в самое начало программы, выполняя эти расчеты единожды - при добавлении объектов в физический мир.Сейчас же эти построения контрольных точек происходят каждый кадр, что сильно понижает фпс.
- добавить какие-нибудь ползунки-настройки, позволяющие менять параметры среды и тел в ходе выполнения программы. Это добавило бы интерактивности, и увеличило бы продолжительность одной запущенной сессии демки. Что мешает сделать это уже сейчас? Отсутствие штатных ползунков. Надо сделать, а для этого нужно хотя бы часок времени...
Что вообще здесь происходит?
Если ничего из вышесказанного неясно, тогда следует сначала прочесть сообщения в данном журнале с тегом glVehicles, а затем, если ничего так и не прояснилось - спросить у меня лично :)
Что вообще интересного можно почерпнуть из этой демки?
Это уже на усмотрение каждого... вообще, стандартная поверхность жидкости постоянно "мусолится" в шутерах:
плавающие коробки, обломки, аптечки, трупы... Все это добавляет немалого реализма игре. Где-то нам даже дают возможность прокатиться с ветерком на быстроходном средстве:
А физика-то у него довольно простая! Правда вот над глиссеровкой (эффект подпрыгивания на высоких скоростях) нужно немного подумать, но в целом, мне кажется, особых хитростей быть не должно...
Построить целый геймплей на этом трудно. Слишком простенько, согласен... Но, если додумать, расширить, добавить вышеупомянутые частицы, пожертвовать производительностью, прооптимизировать, подкрутить и много чего еще, то из такого:
вполне можно скрутить hi-tech игру, где основой станет жидкость, её свойства и поведение (как-то раз я уже говорил об этой игре под названием PixelJunk, но здесь как нельзя кстати подойдет видео из нее):
Какие еще планируются демки?
Пока не знаю, думаю довести их число до десяти и немного отойти от этой темы, ибо фантазия на механизмы подходит к концу... еще на три-четыре идеи наскребу, а вот дальше будет туго...
Наверно, на этом все... следите за обновлениями!
Как вы компилируете GLScene? :)
ОтветитьУдалитьПопробовал в 2007-й версии - много глюков. Попробовал в 2010-й версии - также немеряно глюков. Качество репозитория - просто ужасающее...
Сейчас ругается на:
модуль GLSCUDAGraphics
там 384-я строка:
FSceneObject.BuiltProperties.
этого метода действительно нет...
Впринципе, мне было бы достаточно промоделировать жидкость типа этого:
http://www.youtube.com/watch?v=nSwASbUzt0s
Не подскажете куда нажимать, чтобы эта птичка получилась? :)
Заранее спасибо! :)
Fanatic, спасибо за комментарий!
ОтветитьУдалитьОбо всем по порядку:
если не компилируется GLScene - тебе на форум glscene.ru, там обычно доступно объясняют, с чем могут быть связаны те или иные ошибки!
какой именно репозиторий не понравился? glVehicles? что именно не нравится? как бы ты хотел изменить его устройство к лучшему?
Насчет жидкости из твоего видео... насколько я понял там как раз используется физика частиц, SPH:
http://en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics
это более сложная тема, ее я пока не рассматривал... ибо считать это нужно на GPU, потому что CPU не выдержит такого в real-time.
p.s. какую версию glscene пытаешься скомпилировать?
GLScene At revision: 5425
ОтветитьУдалитьhttps://glscene.svn.sourceforge.net/svnroot/glscene/trunk
Дело не в понравился/не понравился. Просто мне нужен именно полный 3D. Надо замоделировать натуральную физику. С видеокартой не вопрос - надо будет самую крутую - деньги заказчик будет платить. Это планирую для НИОКР замоделировать, но для начала хоть какой-нибудь результат получить.
Да - сейчас пытаюсь зарегистрироваться на glscene.ru, но там эти дурацкие неоднозначные вопросы при регистрации - никак подобрать правильные ответы не могу :) Чёрт бы этих админов-составителей побрал! :)
Вижу там в GLScene\Demos\GPUComputing\StableFluids есть - надеюсь это то, о чём я думаю? Если удасться запустить и откомпилить - то наступит светлое будущее, практически коммунизм :)
http://glscene.ru/forum_viewtopic.php?7.60556 - вот создал тему
ОтветитьУдалитьлично мне пока интересно только 2д :)
ОтветитьУдалитьпо поводу видеокарты - дело не в деньгах, а в изучении технологии... одно дело пичкать код if-ами, если у тебя все на CPU, другое - писать код изначально ориентированный под GPU, там свои тонкости...
по поводу glscene.ru - дерзай! ребята там хорошие, должны помочь! и я тебе ссылочку одну полезную закину туда...
буду следить за твоей темой :)
Очень заинтересовала ваша реализация поведения тел в жидкости!!! Можно ли увидеть подробную реализацию, я как раз изучаю box2d. или на мыло tafedorov@gmail.com заранее благодарю!
ОтветитьУдалитьArtem, благодарю))..
ОтветитьУдалитьисходные коды открыты и лежат доступно в svn... как настраивать описано здесь:
http://lampogolovii.blogspot.com/2010/12/glvehicle-svn.html