Демонстрация попиксельной физики
| |
puksus4 | Дата: Среда, 06 Мая 2020, 08:55 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Наконец почти докодил связку Bullet physics + кастомный код для попиксельной физики. Выглядит вот так:
06.05.2020 - первая демонстрация коллизий и уничтожения пикселей в метсах ударов 10.05.2020 - Модель распространения теплоты тела, эффекты горения, частицы 17.06.2020 - Первая стрельба и управляемый кораблик 24.06.2020 - Реализация дыма на GPU
Сообщение отредактировал puksus4 - Среда, 24 Июня 2020, 14:33 |
|
| |
LoneWolf06 | Дата: Среда, 06 Мая 2020, 11:22 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| Физика - нормальная, наркомания - полная.
|
|
| |
DivES | Дата: Среда, 06 Мая 2020, 12:25 | Сообщение # 3 |
заслуженный участник
Сейчас нет на сайте
| puksus4, а саму Bullet Physics вообще тяжело прикрутить к 2d проекту? Проект на SDL2, например, или на том же SFML.
Сообщение отредактировал DivES - Среда, 06 Мая 2020, 12:29 |
|
| |
puksus4 | Дата: Среда, 06 Мая 2020, 12:42 | Сообщение # 4 |
частый гость
Сейчас нет на сайте
| DivES, я прикрутил буллет физикс к 2д игре весьма легко: 1) все тела двигаются в плоскости xz, камера смотрит сверху вниз по оси y 2) всем телам запретил вращаться относительно осей xz и двигаться по оси y. В буллет это делается одной строчкой кода. 3) все формы тел сделал трёхмерными. Тойсть я рассчитал сначала двумерную форму тела, затем поднял её полностью по y, сдублировал, дубликат опустил по y - и все получившиеся точки добавил в тело. Возможно, неоптимально сделано, может быть можно проще.
4) Рендер отвязан от физики. Единственная связь - получить для рендера из физики матрицы для объектов после каждого шага симуляции, в чём сложности нет. А рендерить можете хоть директом, хоть опенгл, хоть sfml, хоть что угодно.
Вообще нахожу буллет довольно простым в освоении. Могу порекомендовать отличные уроки на начальный этап вот тут. + стоит вероятно глянуть вотэта
Добавлено (06 Мая 2020, 12:43) --------------------------------------------- Вообще, 2д - частный случай 3д, а посему всё что можно в 3д - можно перенести на 2д. Я свою игру рендерю самопальным движком, который, в общемто расчитан на 3д и умеет в 3д.
Сообщение отредактировал puksus4 - Среда, 06 Мая 2020, 12:43 |
|
| |
DivES | Дата: Среда, 06 Мая 2020, 12:50 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| puksus4, то есть движок изначально рассчитан на 3d физику? Просто и правда, наверное, избыточно его использовать для 2d проекта, когда есть Box2D (он, кстати, тоже по zlib распространяется). Но спасибо за ссылки, посмотрю обязательно! Сам использовал Bullet Physics в составе Blender Game Engine, кстати.
|
|
| |
puksus4 | Дата: Среда, 06 Мая 2020, 12:55 | Сообщение # 6 |
частый гость
Сейчас нет на сайте
| А ну ещё в моём случае связь с рендером - нужно постоянно обновлять текстуры тел после столкновений, и даже ещё чаще потому что я планирую сделать температуру пикселям. Они будут плавиться, с них будет слетать краска.
Добавлено (06 Мая 2020, 12:56) ---------------------------------------------
Цитата DivES ( ) движок изначально рассчитан на 3d физику? Просто и правда, наверное, избыточно его использовать для 2d проекта, когда есть Box2D Да. Но если достаточно просто и быстро - почему бы и нет?
К тому же разобравшись в буллете - сможешь юзать его и в 3д играх, которые я собираюсь делать в будущем.Добавлено (06 Мая 2020, 12:57) --------------------------------------------- Я ушёл в 2д по ц-м причинам: 1) сложность создания контента в 3д 2) очень хотел сделать именно ту игру которую собсно щас делаю - с попиксельной физикой
а так 3д меня не пугает Добавлено (06 Мая 2020, 13:04) ---------------------------------------------
Цитата DivES ( ) Но спасибо за ссылки, посмотрю обязательно! Тока осторожно, по первой ссылке просто лютая дикция у чувака)) Но тем не менее объяснения максимально внятные.
Сообщение отредактировал puksus4 - Среда, 06 Мая 2020, 12:56 |
|
| |
DivES | Дата: Среда, 06 Мая 2020, 13:08 | Сообщение # 7 |
заслуженный участник
Сейчас нет на сайте
| puksus4, хороший пиксель арт тоже достаточно сложный в создании ведь. А вот уже работать легче с 3d, создавать анимации или делать правки, настраивать освещение. В случае же с 2d же придётся только рисовать и перерисовывать.
Ну это исходя из моего небольшого опыта, могу и ошибаться.
Цитата puksus4 ( ) Тока осторожно, по первой ссылке просто лютая дикция у чувака)) Но тем не менее объяснения максимально внятные. Я думал это какой-то TTS. Но мне, лично, больше нравится слушать таких дикторов, нежели с идеальной дикцией, от вторых меня почему-то тошнит.
Сообщение отредактировал DivES - Среда, 06 Мая 2020, 13:10 |
|
| |
puksus4 | Дата: Среда, 06 Мая 2020, 13:13 | Сообщение # 8 |
частый гость
Сейчас нет на сайте
| DivES, Пиксель арт на достаточном уровне чтоб нарисовать кораблик из видео я поднял за 3 дня. Чтобы научиться моделить мне понадобится 3 месяца.
И даже на своём нубском уровне я нарисовал этот кораблик часа за 3. Модель нормальную я бы делал, уверен, дольше
А анимации создавать - я конечно не владею темой, но помоему полная жесть. Я когда моделил болванчика и загрузил в свой движок, прошёл на простейшем уровне все этапы, создание модели, развёртку, текстурирование, создание скелета, развесовку, анимирование. Мне показалось анимирование самым сложным этапомДобавлено (06 Мая 2020, 13:15) --------------------------------------------- Кроме того, пиксель арт рисуется из фиксированного набора цветов. Если не устраивает цветовая гамма картинки, эти цвета можно заменить, не тыкая индивидуально каждый пиксель Затем внести небольшие корректировки - это однозначно процесс быстрый.
Сообщение отредактировал puksus4 - Среда, 06 Мая 2020, 13:13 |
|
| |
DivES | Дата: Среда, 06 Мая 2020, 13:20 | Сообщение # 9 |
заслуженный участник
Сейчас нет на сайте
| puksus4, да, я тоже проходил эти этапы (развесовку я делал автоматически, правда). Просто конкретно сейчас я сам занимаюсь пиксель артом, и тут тоже анимация — самый ад. Перерисовывать практически всё каждый кадр, работать с пикселями. Может быть по неопытности, конечно, но пока что тяжело. В этом плане анимация 3d моделей легче: создал модель, скелет, создаёшь на этой основе сколько угодно анимаций. Можешь спокойно что-то изменить в модели с незначительными последствиями. Можно конечно и в пиксель арте использовать скелетную анимацию, но тут уже кто как хочет.
|
|
| |
puksus4 | Дата: Среда, 06 Мая 2020, 13:22 | Сообщение # 10 |
частый гость
Сейчас нет на сайте
| DivES, а, ну анимация пиксель арта - вероятно да, долгий процесс.Благо в моей игре не понадобится. И наверное я бы для начала попробовал бы даже для пиксель арта фигачить костяную анимацию, а не классическую, ибо ну нафиг столько работы. Но, классическая, конечно, красивее будет выглядеть.
Добавлено (10 Мая 2020, 00:11) --------------------------------------------- Новый видос! https://youtu.be/yM0U6-WOwL8
Добавлено: модель распространения теплоты по телу, частицы, поправлены баги, и эффект горения конечно же. Частицы теперь спамятся и при столкновениях тел, выглядит весьма примечательно, но видос бы вышел слишком похожим на первый, надо чонить новое туда всунуть)
Добавлено (17 Июня 2020, 04:05) --------------------------------------------- Нимножка стрельбы (о боже, шок контент) вЕдос
Пульки обрабатываются рей трейсингом, объёмные взрывы (в видосе нету) засчёт ghost objects из буллет физикса Мой компуктер на данной сцене показывает с кучей частиц и активным разрушением 2000 кадров в секунду. Планирую чтоб игора на самых сраных калькуляторах шла Кстати физику пиксельных тел считаю многопоточно.
Сообщение отредактировал puksus4 - Среда, 17 Июня 2020, 06:30 |
|
| |
DivES | Дата: Среда, 17 Июня 2020, 06:36 | Сообщение # 11 |
заслуженный участник
Сейчас нет на сайте
| puksus4, а что кап не сделаешь? Я как запускаю у себя что-нибудь без ограничения количества кадров в секунду, мне процессор жалко становится. Не является ли это издевательством над процессором (или, в твоём случае, — над видеокартой)?
|
|
| |
puksus4 | Дата: Среда, 17 Июня 2020, 06:44 | Сообщение # 12 |
частый гость
Сейчас нет на сайте
| DivES, В моём случае и над тем и над другим) Кап можно, но мне нужно знать актуальный перфоманс игры. Я себе метрики вывожу, что скока жрёт. Если закапить - всё это будет хуже заметно. А так я точно вижу когда какой перфоманс и если низкий - то глянуть что больше всего жре.
А в паблик релизе - да, сделаю ограничитель)
кортинка
Я кстати недавно троекратно повысил перфоманс - всётаки профайлинг - полезная вещь Нашёл что больше всего жрал перерасчёт мип уровней (и там был очень жирнющий баг который и жрал перфоманс). + Жрал, кто бы мог подумать, дебажная рисовка физики))) + улучшил многопоточность пиксель физики и вуаля +200% к фпс в худших случаях для симуляции.
Сообщение отредактировал puksus4 - Среда, 17 Июня 2020, 07:06 |
|
| |
DivES | Дата: Среда, 17 Июня 2020, 06:58 | Сообщение # 13 |
заслуженный участник
Сейчас нет на сайте
| puksus4, так у тебя на кадр приходится 0.38 ms, получается? То есть, 0.000038 секунды? В SDL бы такую точность. А то я пока что только микросекундами оперировать могу. Даже чёткий кап на 60 кадров сложно реализовать (всегда будет погрешность), если без вертикальной синхронизации.
|
|
| |
puksus4 | Дата: Среда, 17 Июня 2020, 07:02 | Сообщение # 14 |
частый гость
Сейчас нет на сайте
| Цитата DivES ( ) А то я пока что только микросекундами оперировать могу. Дык, микросекунда - это в 1000 раз меньше, чем ms)
Это у меня не ограничения, это замеры при максимальной работе железа Пользую ф-ции QueryPerformanceFrequency QueryPerformanceCounter
Цитата DivES ( ) Даже чёткий кап на 60 кадров сложно реализовать (всегда будет погрешность) Когда я пилил многопоток и синхронизировал потоки слипами - был лютый трешак с производительностью. Когда переписал под нормальный таск пул с std::conditional_variable стало на порядки лучше.
Даже не знаю как правильно капить перфоманс кроме как всинком. К слипам отношусь настороженно.
Сообщение отредактировал puksus4 - Среда, 17 Июня 2020, 07:06 |
|
| |
DivES | Дата: Среда, 17 Июня 2020, 07:06 | Сообщение # 15 |
заслуженный участник
Сейчас нет на сайте
| puksus4, да, перепутал. Оперирую миллисекундами максимум, отсюда и погрешность. Да я тоже стал использовать SDL_GetPerformanceFrequency() и SDL_GetPerformanceCounter(), но что толку. Да, я могу получить весьма точный показатель кадров в секунду, но вот выставить точный кап возможности так и не появилось. (
Не слипом капаю, а делеем; но оно, по сути, одно и то же.
Хотя, вот если делать ограничение в 100 кадров (тогда не будет дробной части у длительности кадра, как при тех же 60 fps — 16.666.., которую я как раз не могу реализовать), то получается довольно-таки неплохой результат.
Сообщение отредактировал DivES - Среда, 17 Июня 2020, 07:10 |
|
| |
puksus4 | Дата: Среда, 17 Июня 2020, 07:11 | Сообщение # 16 |
частый гость
Сейчас нет на сайте
| Насколько я знаю, с помощью std::this_thread::sleep_for можно задать интервал ожидания хоть с точностью до микросекунды, да толку мало, как я понимаю никаких гарантий сия ф-ция не даёт. И именно она корячила мне перфоманс со старой реализацией, когда я пытался ей в цикле ждать пока потоки не завершатся чтобы завершить кадр (Да, самому стыдно что писал такой трешак, но щас уже имею адекватную реализацию)
Сообщение отредактировал puksus4 - Среда, 17 Июня 2020, 07:12 |
|
| |
DivES | Дата: Среда, 17 Июня 2020, 07:15 | Сообщение # 17 |
заслуженный участник
Сейчас нет на сайте
| puksus4, да, там даже есть оговорка (у SDL_Delay()), что многое зависит от самой операционной системы:
Цитата This function waits a specified number of milliseconds before returning. It waits at least the specified time, but possibly longer due to OS scheduling. А как думаешь, есть вообще проекты, где VSync залочен во включенном положении изначально? У меня, на Linux, например, он не работал до определённых танцев с бубном, хотя сама дискретная карточка работала.
|
|
| |
puksus4 | Дата: Среда, 17 Июня 2020, 07:17 | Сообщение # 18 |
частый гость
Сейчас нет на сайте
| Лол, у меня вообще максимально просто)))) void Graphics::Renderer::present() { Graphics::dx11Graphics->getSwapChain()->Present(vSync ? 1 : 0, 0); }
Вызываем эту хрень в конце кадра. Включён флажочек - есть всинк, нет флажочка- не всинка
Сообщение отредактировал puksus4 - Среда, 17 Июня 2020, 07:18 |
|
| |
DivES | Дата: Среда, 17 Июня 2020, 07:21 | Сообщение # 19 |
заслуженный участник
Сейчас нет на сайте
| Ну нет, я имею в виду, когда кто-то не смог реализовать адекватный кап и такой «Залочу ка я VSync, пусть всегда будет включен.». И то есть дальше отталкивается уже от стабильных 60-ти кадров, которые ему даёт вертикальная синхронизация.
Сообщение отредактировал DivES - Среда, 17 Июня 2020, 07:22 |
|
| |
puksus4 | Дата: Среда, 17 Июня 2020, 07:24 | Сообщение # 20 |
частый гость
Сейчас нет на сайте
| DivES, чот я не понял суть вопроса тогда, задай его заново другими словами)
|
|
| |
|