Из того, что я понимаю, типичная интерактивная ферменная система потребует существенных вычислений, поскольку каждый компонент влияет на всю систему. Я думаю, что вы могли бы произвольно остановиться на данном количестве итераций за счет точности в симуляции, но я не знаю, используется ли в этих играх такой подход (игры для построения мостов являются примером систем ферменных конструкций). С другой стороны, игры, такие как Dig или Die, имеют довольно сложную структурную систему, которая также учитывает крутящий момент (я считаю) и сжатие, и очень быстрая и работает на очень обширных системах. Я предполагаю, что основные расчеты могут быть похожими, но если нет, меня интересуют оба подхода.
Ребята, вы знаете, как они сделаны? Есть ли у них произвольные ограничения или они используют другой алгоритм в целом? Кроме того, я думаю, что все, что вы, ребята, можете придумать, может быть применено к 3D-системам, но если нет или если это не очевидно, пожалуйста, по крайней мере, дайте представление о том, как вы могли бы использовать его для 3D, так как я заинтересован в этом как для 2D, так и для 3D игры.
Я знаю, что я не должен благодарить здесь, но я нахожу несправедливым, чтобы, по крайней мере, поблагодарить вас за ваше время заранее, я надеюсь, что этот параграф не будет удален.
РЕДАКТИРОВАТЬ: Если бы я должен был сделать предположение, я бы сказал, что Dig или Die хранит векторы для каждого блока, а затем запускает итерационный алгоритм до такой степени, что дополнительная точность в моделировании не имеет смысла для ограничений системы (например, система была бы слишком большой, чтобы не потерпеть крах в любом случае), поэтому она ограничена полу-произвольным (потому что основано на приложении) количеством итераций. Но я могу ошибаться.
Ответы:
Я разработчик Dig или Die, поэтому я могу немного подробнее рассказать об игровой физике
Действительно, самым важным моментом были характеристики, так как в игре вы можете построить тысячи физических блоков, и очень важно, что у меня есть другие вещи, более сложные для симуляции (дождь / вода), поэтому я могу сэкономить очень мало процессорного времени для физики здания. ,
Так что я на самом деле сделал что-то вроде ... я не знаю, собственный персональный алгоритм не очень точный, но он работает достаточно хорошо для игры. У меня есть 1 вектор для каждого пересечения блоков (таким образом, каждый блок связан до 4 векторами, по одному на каждой стороне от него). Каждый блок имеет «вес» и «выталкивает» векторы вокруг себя (одинаково), поэтому общая величина векторов равна его высоте. Когда блок привязан к земле, все силы / вес, которые толкаются в него, никогда не "отталкиваются" назад, поэтому, естественно, при достаточном количестве итераций вся система находит баланс. Вес / сила будет как бы «течь» к точкам крепления и очень хорошо управлять изменениями в конструкции. Вы можете увидеть результат здесь (с игрой "Eiffel Glasses"):
Что касается крутящих моментов, я имитирую это, умножая силы, которые передаются по горизонтали. Это не идеально, но достаточно, чтобы почувствовать большую разницу между горизонтальным и вертикальным строительством
Но, честно говоря, мне не очень нравится моя система, в некоторых случаях она не очень точна; главным образом потому, что я не управляю сжатием и расширением. Вероятно, есть способ сделать более точное моделирование, чем у меня, без большего количества процессоров, но мои навыки (и время) в этом отношении были очень ограничены, поэтому я сделал все, что мог :-)
(PS: вы догадались, были очень хороши :-))
источник
Лично у меня был хороший успех с Iterative Relaxation . Я думаю, что это очень хорошо следует законам физики, когда имеешь дело с объектами, составленными из блоков блоков. Я считаю, что серия BridgeBuilder основана на таком методе, хотя у меня нет источника, чтобы подтвердить это.
Итеративная релаксация широко используется для ферм , но я успешно имитировал крупные твердые объекты (бетон): это просто ферма, чьи соединения несут нагрузку, а не вращаются свободно.
Что интересно, так это то, что релаксация - это метод разрешения статических ферм, поэтому он точный. В связи с этим он используется для итеративного вычисления смещения, которое приводит структуру к равновесию.
Но дополнительная ценность для игры (где нас интересуют динамические среды, потому что статические структуры с равновесным равновесием скучны) заключается в том, что мы получаем возможность фактически перемещать соединения структуры между каждой итерацией, основываясь на ограничениях, вычисленных до сих пор. , Вы получаете два основных преимущества:
правило , статический анализ выдвигает гипотезу о небольшой деформации , когда структура не отходит далеко от своего исходного состояния. В этих пределах статический анализ является правильным, потому что суставы на самом деле не сильно смещены . Но так как структура деформируется под разрушающимся весом, вы получите точные результаты до конца с помощью нелинейного моделирования, тогда как вы просто получите недопустимое состояние из линейного решателя
Итеративная релаксация довольно проста для определения численной устойчивости . Я успешно использовал схему RK4 для достижения устойчивости с большими бетонными конструкциями. Недостатком является то, что он обычно имеет довольно небольшую жесткость по соображениям производительности, поэтому иногда может ощущаться как мягкое желе.
источник