Пятница, 29 Марта 2024, 02:46

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Ваши проекты » Идеи для реализации » Демонстрация попиксельной физики
Демонстрация попиксельной физики
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 распространяется). laugh
Но спасибо за ссылки, посмотрю обязательно!
Сам использовал 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 же придётся только рисовать и перерисовывать. laugh

Ну это исходя из моего небольшого опыта, могу и ошибаться. :)

Цитата puksus4 ()
Тока осторожно, по первой ссылке просто лютая дикция у чувака)) Но тем не менее объяснения максимально внятные.

Я думал это какой-то TTS. :D
Но мне, лично, больше нравится слушать таких дикторов, нежели с идеальной дикцией, от вторых меня почему-то тошнит.


Сообщение отредактировал 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, а что кап не сделаешь? Я как запускаю у себя что-нибудь без ограничения количества кадров в секунду, мне процессор жалко становится. laugh
Не является ли это издевательством над процессором (или, в твоём случае, — над видеокартой)?
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 бы такую точность. laugh
А то я пока что только микросекундами оперировать могу. Даже чёткий кап на 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, да, перепутал. Оперирую миллисекундами максимум, отсюда и погрешность. :D
Да я тоже стал использовать SDL_GetPerformanceFrequency() и SDL_GetPerformanceCounter(), но что толку. Да, я могу получить весьма точный показатель кадров в секунду, но вот выставить точный кап возможности так и не появилось. (

Не слипом капаю, а делеем; но оно, по сути, одно и то же. laugh

Хотя, вот если делать ограничение в 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, чот я не понял суть вопроса тогда, задай его заново другими словами)
Форум игроделов » Ваши проекты » Идеи для реализации » Демонстрация попиксельной физики
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг