Войти
ПрограммированиеФорумОбщее

Нахождение ближайших точек 2-х объектов (2 стр)

Страницы: 1 2
#15
3:49, 22 апр. 2018

Delfigamer
> Вывод - триангулированным мешам не место в физсимуляции.

Пару лет назад тест проводил в Unity, когда там Physx только-только обновился до третей версии:

Если на сцене ~50000 боксовых и простейших статических меш-коллайдеров (боксовых сильно больше), то добавление/удаление нового коллайдера загружало все ядра процессора, и fps на секунду проваливался до неприличных значений. Заменил отдельные простые коллайдеры на сложные меш-коллайдеры, в которые была запечена та же самая геометрия (коллайдеров в штуках стало в сто раз меньше), — все изменения стали мгновенные.


#16
4:07, 22 апр. 2018

alexzzzz
> Если на сцене ~50000 боксовых и простейших статических меш-коллайдеров
значит, ты уже что-то делаешь не так, лол

#17
16:24, 22 апр. 2018

Delfigamer

Прям по пунктам и отвечу:
- ограничить скорость вращения можно, это даже изначально сделано. В целом сделано из соображений, что до космических, быстро вращающихся объектов, типа квазаров, черных дыр и пульсаров не 1 объект целым не долетит. Его разорвет гравитацией (в прямом смысле. движок игры разорвет в рамках обычных вычислений целостности конструкции). Обычные же объекты, если попытаться их раскрутить резко, также будут разорваны, а плавно раскручивать до бешеных скоростей движок не позволит.
- упростить форму можно, и в сложных объектах в среднем около 1000-2000 полигонов, на более простых (астероиды, снаряды и т.п.) от 100 до 300 полигонов в среднем. Вопрос был не в сложности моделей, а в том, что хотел найти удобный метод считать коллизии и расстояния. Можно конечно перебрать все вершины со всеми для пары тройки объектов, но я думал о масштабируемости способа расчета.
- закрыть глаза на небольшие промахи нельзя, т.к. движок не импульсный, с разрешением коллизий пост-фактум, а силовой, с прогностическим расчетом. Если неверно определить расстояния или неверно определить место столкновения, то результаты будут отличаться очень сильно. Пример, снаряд типа "неуничтожимая болванка" пролетает в упор к поверхности корабля, на котором в ряд стоят несколько пушек. Если рассчитать все верно, то снаряд задевает каждую из них, уничтожая её и при каждом "столкновении" корабль получает соответствующий "толчек", изменяя его полет. Если считать не точно, то снаряд может пролететь сквозь несколько пушек, не задев их, но уничтожив остальные. Это не только даст неверное изменение движения корабля от столкновений, но и будет выглядеть глупо (все же видели ролики в Counter Strike, когда несколько человек вставали в ряд, им в голову стреляли с AWP и умирали скажем 1-ый, 2-ой, 3-ий и 5-ый, при этом 4-ому урон не наносился вообще).
- про особенные объекты вообще не понял. Что вы понимаете под "особенным объектом"?
В игре есть:
1) простые объекты (крупные небесные тела), аппроксимированные сферами;
2) объекты средней сложности (снаряды, ракеты, астероиды и т.п.) представленные единым объектом с мешем разной степени простоты, но в большинстве своем довольно простые.
3) сложные объекты (корабли, базы и т.п.) представленные в виде модулей, соединенных между собой. Число модулей в плане 3д моделей не очень велико, но т.к. их можно соединять между собой в разные конструкции, то число уникальных конструкций велико. Часть из них могут по внешним вершинам быть выпуклыми, часть нет (как уж построит игрок).

#18
16:38, 22 апр. 2018

xXxBlackbirdxXx
> в среднем около 1000-2000 полигонов
Уже много раз говорили, что физику не надо считать полигонами. Во всех нормальных движках меш для рендера и коллайдер для физики - это два разных объекта, которые не обязаны иметь ничего общего. Во всех нормальных играх, коллайдеры значительно менее детализованы, чем меши.

xXxBlackbirdxXx
> Если считать не точно, то снаряд может пролететь сквозь несколько пушек, не
> задев их, но уничтожив остальные.
Что мешает считать снаряды тщательно, а астероиды - как попало? Или у тебя каждый первый объект движется квантами длиннее, чем свой собственный коллайдер?

xXxBlackbirdxXx
> Что вы понимаете под "особенным объектом"?
Который считается по особенному алгоритму. Вовсе не обязательно уделять каждой мусорной банке столько же процессорного времени, сколько заслуживает снаряд.

xXxBlackbirdxXx
> все же видели ролики в Counter Strike, когда несколько человек вставали в ряд,
> им в голову стреляли с AWP и умирали скажем 1-ый, 2-ой, 3-ий и 5-ый, при этом
> 4-ому урон не наносился вообще
Я не видел, а даже если такие и есть, хитскан не имеет к коллизиям объектов никакого отношения, поскольку происходит одномоментно, а не в течение целого кванта времени.

#19
21:40, 22 апр. 2018

Suslik
> > Если на сцене ~50000 боксовых и простейших статических меш-коллайдеров
> значит, ты уже что-то делаешь не так, лол

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

#20
21:58, 22 апр. 2018

alexzzzz
Речь шла о том, что 50К коллайдеров в сцене в принципе не нужны. Если одна резиновая утка занимает куб 10см, то 50К резиновых уток - это 50 кубических метров уток. Это пять камазов, доверху заполненных резиновыми утками! Это уже не не коллайдеры получаются, а целая жидкость. Зачем тебе 5 камазов жидких уток? Неужели ты делаешь игру про жидких уток?
Причём, в которой жидкие утки постоянно возникают из ниоткуда и исчезают в никуда.

alexzzzz
> Результаты теста говорят
Вот ты тестил добавление/удаление, а что на счёт собственно симуляции?

#21
23:12, 22 апр. 2018

Delfigamer
> Речь шла о том, что 50К коллайдеров в сцене в принципе не нужны.

Ну результаты стресс-теста это и показали: усложнение геометрии сцены через усложнение небольшого количества меш-коллайдеров проблем не вызывает; а усложнение геометрии до того же уровня путём увеличения количества примитивных коллайдеров вызывает и ещё какие. Хотя, за три года могли починить.

> Это уже не не коллайдеры получаются, а целая жидкость.

Из 50000 уточек действительно получается жидкость, но из других объектов может получиться район города или деревня или детализированное большое здание.

> Вот ты тестил добавление/удаление, а что на счёт собственно симуляции?

Рейкасты рейкастятся, брошенные шарики отскакивают, отличий на глаз было не видно, а секундные провалы fps от большого количества коллайдеров видно было.

#22
23:29, 22 апр. 2018

alexzzzz
> из других объектов может получиться район города или деревня или
> детализированное большое здание
Тебе прям надо всегда все столбы в районе симулировать?
Вот буквально сегодня заметил, как в ДваСоулсе иногда возникает звук шлёпающейся плоти, причём в одних и тех же местах. Оказалось, это игра по ошибке спавнит трупы уже убитых мобов где-то в воздухе, из-за чего физдвижку приходится при каждой прогрузке по-новой дошлёпывать их до земли.
Что мешает тебе точно так же выгружать коллайдеры вместе с мешами по occlusion culling?

alexzzzz
> отличий на глаз было не видно
В смысле, без добавлений фпс в обоих случаях одинаковый?

#23
0:38, 23 апр. 2018

Delfigamer
> В смысле, без добавлений фпс в обоих случаях одинаковый?

Ну там была не жидкость из уточек, было четыре сотни одинаковых домов в нескольких вариантах:

1) 440 домов из сложных меш-коллайдеров
2) 440 домов из 120 простых коллайдеров каждый

Дома просто стоят. Загрузка процессора физикой околонулевая, пока в втором варианте не пытаешься добавить на сцену новый физический объект.

> Тебе прям надо всегда все столбы в районе симулировать?

Мне нужно было понять, что нельзя, а что можно и до какой степени можно. Оказалось, что с меш-коллайдерами можно больше. По крайней мере, в Physx в Unity три года назад.

#24
1:56, 23 апр. 2018

alexzzzz
> 1) 440 домов из сложных меш-коллайдеров
> 2) 440 домов из 120 простых коллайдеров каждый
>
> Дома просто стоят. Загрузка процессора физикой околонулевая, пока в втором
> варианте не пытаешься добавить на сцену новый физический объект.
лол, у тебя ни в том, ни в другом случае собственно физика не считается, потому что динамических объектов практически нет. ты фактически замерял время добавления геометрии в октри, которое, сюрприз, пропорционально количеству геометрий и в твоём случае занимает в 120 раз больше времени. производительность определяется явно не этим, а тем, с какой скоростью считается взаимодействие со всем этим счастьем, причём в случае "всё взаимодействует со всем".

#25
12:21, 23 апр. 2018

alexzzzz
> Мне нужно было понять, что нельзя, а что можно и до какой степени можно.
> Оказалось, что с меш-коллайдерами можно больше. По крайней мере, в Physx в
> Unity три года назад.
Delfigamer
> Во всех нормальных играх, коллайдеры значительно менее детализованы, чем меши.
Ну я так скажу, твой эксперимент - это всё равно, что сравнивать эффективность отвёртки и микроскопа по забиванию гвоздей. Микроскоп победил за счёт своей массы.

#26
15:56, 23 апр. 2018

Suslik
> производительность определяется явно не этим, а тем, с какой скоростью
> считается взаимодействие со всем этим счастьем, причём в случае "всё
> взаимодействует со всем".

Какой юзкейс у такого теста? Жидкость из уточек. У домиков же юзкейс понятный: статичное или условно статичное окружение, с которым происходит взаимодействие, есть в каждой второй игре. И спаун нового объекта, тоже типичное явление, не должен вызывать тормозов.

#27
16:55, 23 апр. 2018

alexzzzz
> У домиков же юзкейс понятный: наивная реализация статичного или условно статичного окружения
я исправил, не благодари. то, что ты сейчас делаешь — это примерно как все графические ассеты игры одновременно в видеокарту затолкать и измерять время добавления ещё одного. в смысле ты, конечно, получишь какие-то данные по поводу производительности менеджера ресурсов твоего драйвера, но в условиях, в которых его всё равно применять нельзя. например, если ты помимо своего одного динамического объекта добавишь хотя бы десяток(не десяток сотен, просто десяток) автомобилей, то как они будут взаимодействовать с твоими мешами по миллиону треугольников, остаётся только догадываться. подобные ресурсы надо точно так же стримить, как все остальные, использовать точно такие же приближённые LoD'ы как для графики для упрощения физики удалённых объектов и так далее. нельзя просто в физически движок запихать всю игровую вселенную и надеяться, что он её перемолотит.

например, если игра про езду на автомобилях, то вместо домиков из миллиона треугольников и даже вместо домиков и тысячи боксов, детальный collision mesh нужен всё равно только для первого этажа, с которым, собственно, автомобили будут взаимодействовать. всё остальное вообще можно даже не строить, либо сделать очень грубо. и вот уже не 1000 боксов на домик, а 10, а это уже на два порядка быстрее.

#28
17:44, 23 апр. 2018
Мне тяжело представить, что такого важного для автомобиля есть у обычного домика, на что нужно ещё 9 дополнительных боксов.

У излишне детальных коллайдеров есть даже конкретно геймплейный недостаток - в них легко застрять.
В поисках иллюстраций нашёл вот эту статейку. Обратите особое внимание на предпоследнюю картинку в самом конце статьи, там наглядно показано, как выглядит коллайдер по сравнению с мешем.
Страницы: 1 2
ПрограммированиеФорумОбщее

Тема в архиве.