Войти
ПрограммированиеФорумФизика

[2D Шарики, src на 27стр] Производительность (27 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 126 27 28 29 30 Следующая »
#390
21:25, 6 июня 2011

исходники, бинарники


#391
0:22, 7 июня 2011

2D_Physics_src

#392
0:34, 7 июня 2011

Огромное вам Спасибо!
Будем копать =)

#393
0:45, 8 июня 2011

И от меня огромное спасибо!
Очень интересная тема, узнал много нового. Почти доделал небольшой проэкт на основе идей из этого топика, правда с оптимизацией cache misses вышел курьёз - умудрился написать так, что производительность одинаковая для обоих версий. С исходниками надеюсь разобраться где проблема.

Также решил сделать геометрию. Не знаю как этот подход правильно называется, но смысл такой - геометрия хранится в виде плоскостей (точка + нормаль), всё из замкнутых фигур и вхождение проверяется расстояниями до всех плоскостей фигуры. Если все расстояния отрицательные - частица внутри, выталкивается по нормали к ближайшей плоскости на дистанцию вхождения + радиус частицы. Всё работает быстро, но по непонятной причине точность хромает и частицы иногда проваливаются внутрь если сильно кинуть их в фигуру или притянуть мышкой внутрь неё. В цикле ставил проверку в самый конец, после обсчёта столкновений и аттрактора, прямо перед отрисовкой - всё равно проскакивают. Если после обсчёта столкновения и после попадания в  зону притяжения делать проверку, проваливания почти пропадают, но не до конца - если у границы лежит кучка и аттрактор активный, на определённом расстоянии это опять происходит.

Вопросы: ошибка в реализации или сам метод не подходит для этой задачи? По скорости - его можно применять, или со сложной геометрией он не справится?

#394
9:55, 23 июня 2011

какой подход был использован для моделирования?

можно ли сделать так чтобы симуляция меньше походила на песок?

#395
23:14, 6 сен. 2011

В ходе изучения программирования под Android написал демку с шариками: FreeBalls for Android :)

#396
20:56, 7 сен. 2011

Синтаксическая ошибка - При синтаксическом анализе пакета возникла неполадка.
Acer Liquid E - Android 2.2

#397
10:52, 3 окт. 2011

В версию под Android прикрутил SPH, сделал небольшой бенчмарк, исправил кучу ошибок. У кого не работало, надеюсь, пойдет нормально.
Качать тут: FreeBalls for Android 2.3 или в Маркете: FreeBalls for Android 2.3

#398
23:49, 12 ноя. 2011

>FreeBalls for Android 2.3
Optimus x2 (2.3) - 14007

#399
14:34, 10 янв. 2012

Suslik
пусть соревнование и кончилось: 350 фпс.

Прошло более 9 месяцев
#400
3:32, 7 окт. 2012

Привет всем!
Тоже решил заняться шариками, т.к. вещь очень нужная для моей будущей игры =)))
Целую неделю реализовывал это дело, сделал spatial hashing, и еще пару раз переделывал, оптимизировал... До сих пор не уверен, правильно ли его реализовал, но меня устраивает =)
Довел код уже до такого состояния, что не вижу, как еще его ускорить.

Вот единственная, как я полагаю, вещь, которую я еще могу оптимизировать - это сделать сортировку частиц по данным из хеш-таблицы - думаю, этим можно будет еще поднять производительность на 5-10%
Но когда пытался сегодня сделать ее, то это приводило к каким-то странным результатам - все частицы начинали как-то странно мигать. Если кто-нибудь сталкивался с подобным, буду рад любым советам! Сортировку я проверил и перепроверил - работает правильно. Делаю я ее перед перезаполнением хеш-таблицы, т.е. шарики сортируются по данным хеш-таблицы с прошлой итерации.

---
Дальше мое приложение (для мака), скрин, видео (я балдею с него =)) и некоторые тесты...
Тут 30000 шариков, рендеринг - в главном потоке, физика - во втором. Проц Core2Duo 2.93GHz.
http://dl.dropbox.com/u/8247035/Soft/ProjectXM-1-1.zip

+ Показать
+ Показать
+ Показать

#401
3:38, 7 окт. 2012

maniagl
гравитация больно мелкая - чит. поставь хоть в 5 раз больше что ли..

> Тут 30000 шариков, рендеринг - в главном потоке, физика - во втором.
физика всего в одном потоке? и ты борешься за какие-то 5-10% процентов мелких оптимизаций, когда можешь получить буст 700%, нормально распараллелив на современный процессор?

//цвета подобрал хорошо, шаришь

#402
4:03, 7 окт. 2012

Suslik
> гравитация больно мелкая - чит. поставь хоть в 5 раз больше что ли..
Так все будет взрываться. Нужен либо fps больше, либо размеры шариков больше, ну ты и сам это знаешь =)
Кстати, в демках Alexander K и HumMan я тоже не заметил, чтоб гравитация была большой, хотя уже плохо помню...

> физика всего в одном потоке? и ты борешься за какие-то 5-10% процентов мелких оптимизаций, когда можешь получить буст 700%, нормально распараллелив на современный процессор?
Я не силен в теории потоков, но мне кажется, что именно на моем проце я не шибко выиграю (у меня сейчас итак fps просел до 30).
Да и дело в том, что я ориентируюсь на iOS (мой проект сейчас уже универсальный под мак, айпэд и айфон), поэтому нужно по-максимуму оптимизировать, и хочу физикой нагружать чисто второе ядро, а в первом.... ВОТ Я ГОНЮ! Собрался графику считать на первом ядре, забыл, что этим видеокарта занимается =)))
Ну все. Буду распараллеливать...

Кстати интересное наблюдение: на iPad 2 с тем же значением фпс запускается 5000 шариков, т.е. можно сделать вывод, что проц айпэда в 6 раз медленнее моего Core2Duo =)

>//цвета подобрал хорошо, шаришь
Спасибо =)
Совет: иногда помогает тупо рандомайзером удивительно-клевые сочетания подбирать! ;)

#403
4:38, 7 окт. 2012

maniagl
> Так все будет взрываться. Нужен либо fps больше, либо размеры шариков больше,
> ну ты и сам это знаешь =)
..либо метод точнее. аккуратно реализованный position-based прекрасно себя ведёт с человеческой гравитацией и 30к шариков.

maniagl
> Кстати интересное наблюдение: на iPad 2 с тем же значением фпс запускается 5000
> шариков, т.е. можно сделать вывод, что проц айпэда в 6 раз медленнее моего
> Core2Duo =)
интересное наблюдение. давай более подробные спеки своей машины - точная модель проца, сколько занимает солвер, сколько графика(точнее, в двух потоках кто кого ждёт). можешь ещё на каких-нибудь эпплодевайсах потестить?

цвета делаешь, используя какой-то фаел с палитрой, или цифрами задаёшь? если фаел, то тож скинь, если цифры, то запость. надо будет куда-нибудь впилить, мне реально нравится, как выглядит.

если будет не лень, надо будет как-нибудь попробовать запилить интегратор высокого порядка точности с адаптивной сходимостью. и свергнуть, наконец, position-based с престола самых быстрых и точных методов в геймдеве, муааахаха! если будет не лень.

#404
9:58, 7 окт. 2012

Suslik
> ..либо метод точнее. аккуратно реализованный position-based прекрасно себя
> ведёт с человеческой гравитацией и 30к шариков
Ну у меня как раз таки position-based... Пользуясь случаем, выражаю благодарность за статью, которая и стала моим "вектором"! =))
Метод расталкивания сейчас максимально прост:

      float damping = 0.4;
      Vector2 delta = V2Mult(penetrationDirection, -damping * penetrationDepth);
      
      pushParticleWithDelta(index, delta);
      delta.x = -delta.x;
      delta.y = -delta.y;
      pushParticleWithDelta(index2, delta);
Небольшая сжимаемость с таким damping'ом меня даже устраивает.
Плюс еще я ограничиваю скорость частицы константой =)

Сейчас нет никакого трения в системе. Пробовал вводить какое-то фейковое трение в том же метоже, где частицы рассталкиваются:

      float kFriction = 0.997;  //< песок
      psys->deltaPositions[index].x *= kFriction;
      psys->deltaPositions[index].y *= kFriction;
      psys->deltaPositions[index2].x *= kFriction;
      psys->deltaPositions[index2].y *= kFriction;
Тогда частицы ведут себя намного стабильней! Но и выглядят, словно песок, это даже больше похоже на липкость, а не на трение - при kFriction = 0.95, можно пизанские башни строить :D
+ Показать

Нужно сделать нормальное трение. Вчера пришла мысль, что оно должно быть взаимосвязано между двумя частицами...
Просто у меня в приоритете сначала были задачи ускорить алгоритмы по-максимуму. Но вот теперь уже можно заниматься доведением до ума солверов.

---
Решил сразу приделать трение, придумал вот такой код:

      float kFriction = 0.995;
      Vector2 sum = V2Sum(psys->deltaPositions[index], psys->deltaPositions[index2]);
      Vector2 sum_2 = V2Mult(sum, 0.5);
      // векторы стремятся к их общему усредненному вектору
      psys->deltaPositions[index] = VInterpolate(sum_2, psys->deltaPositions[index], kFriction);  // (from, to, factor)
      psys->deltaPositions[index2] = VInterpolate(sum_2, psys->deltaPositions[index2], kFriction);  // (from, to, factor)
Увеличил гравитацию в 5 раз! И никаких взрывов! Более того, месиво начало себя, словно жижа! =))
Но все-таки из-за большой гравитации и маленького размера частиц, где-то не успевают срабатывать коллизии (см правый край =))
+ Показать

И FPS уменьшился в 1.5 раза :( но это естесственно...

Update: Что-то я прогнал со своим трением... И без него все нормально работает при увелицении гравитации %) Только частицы на дне кипят, но наверху спокойны. А вот выглядит все не так эпично с большой гравитацией =)

Страницы: 126 27 28 29 30 Следующая »
ПрограммированиеФорумФизика