Соединение физических симуляций с различными системами координат

9

Я хочу, чтобы объекты перемещались между двумя физическими симуляциями через «окно» и сталкивались с объектами обеих симуляций в случае, если они пересекают плоскость окна.

Системы координат моделирования не имеют одинакового происхождения и могут иметь различную ориентацию. Заворачивать симуляцию в себя не нужно, но это будет плюсом.

Как эффективно подключить системы без клонирования отдельных объектов?

Редактировать:

Расчеты должны быть максимально точными, чтобы объекты не застревали, если они пересекают окно одновременно с противоположных сторон.

Tamschi
источник
Первый вопрос: будет ли физическая симуляция точной через окно? Потому что изменения ориентации делают правильный поворот довольно невозможным. Это похоже на порталы, меняющие масштаб, - мир возможной боли. Второй вопрос: другая ориентация, как в произвольных, или, по крайней мере, под углами 90 градусов, просто смена оси?
Кадж
Теперь это звучит как проблема, которую они должны были решить на портале. Если я правильно помню, они упоминают об этих проблемах и о том, как они решали их в некоторых игровых комментариях. Вы, вероятно, можете найти их онлайн где-нибудь.
Nailer
@Kaj Я думаю, что было бы лучше разделить путь вычисления для произвольных и прямоугольных переходов. Таким образом, прямоугольные могли бы иметь более высокую точность и скорость, тогда как другие углы также были бы возможны.
Тамши
@ Nailer Если я правильно помню, они создали новую физическую среду, когда открывался портал, а затем клонировали каждый физический объект, который приблизился к этой дополнительной симуляции. Они сказали, что каким-то образом ограничивают объекты, но, скорее всего, они просто трансформируют силы и позиции на каждом физическом шаге. <br> Я совершенно уверен, что они создают третьего клона в пункте назначения из-за способа движения игрока. смоделирован в Source.
Тамши

Ответы:

2

Есть такой классный проект под названием Pseudoform, ранее известный как «Portalized», который обрабатывает физические симуляции с использованием порталов в классной манере:

Pseudoform

Проверьте это!

Особенно видео - это потрясающе круто.

Это открытый исходный код, так что вы можете увидеть, как они это делают.

Бьюсь об заклад, это то, что вы хотите. :)

jacmoe
источник
2
Я просто прочитал код: то, как они это делают, похоже на решение Valve, но без дополнительной физической среды. Порталы в механизме Portalized создают копию объекта, как только он касается поверхности портала, а затем удаляют его, когда он покидает портал в течение определенного времени. Этот ответ все еще несколько полезен: соединение, используемое для ограничения дубликатов, показывает, как объект преобразуется в портале.
Тамши
0

Хорошо, я не знаю, сработает ли это.
Основываясь на вышеупомянутой информации, я бы поставил триггеры на «окна», чтобы я мог определить, когда объект выходит из мира. Захватить вектор скорости тока во время столкновения. Рассчитайте оставшееся время, основываясь на том, где он нажал на спусковой крючок и где он оказался в этом кадре (за пределами мира вашему миру для этого потребуется виртуальная граница). На данный момент вы знаете скорость и оставшееся время, поэтому вы можете переместить его на границу мира, в который он собирается войти, и перепроектировать скорость. Это, однако, потребовало бы двух обновлений физики в одном кадре, и был бы пограничный случай одного объекта, идущего от a до b, в то время как другой переходит от b к a в той же позиции - столкновения вообще не было бы обнаружено.
Какая отрывочная,

Кая
источник
Это кажется самым быстрым из возможных способов, но есть проблема, если два объекта пересекают окно с одной и той же стороны: если первый объект застрянет посередине границы, второй не будет сталкиваться, пока не достигнет границы, тоже, и появляются внутри первого в пункте назначения.
Тамши
Немного отредактировал, пока вы печатали это, и это была действительно проблема, которую я добавил: o \
Kaj
Я должен научиться читать. Мое дополнение было еще одним пограничным случаем. Буду обдумывать.
Кадж
Нет, граница за пределами мира. Таким образом, объект 1 будет застрелен в мир 2 (от границы мира 2 - не в позиции окна) со своей собственной скоростью, как объект b. Они столкнутся в мире 2 на границе правильно .... Я думаю: о? Однако мое собственное пограничное дело все еще имеет место.
Кадж
Похоже, я неправильно понял часть о виртуальной границе. Во всяком случае, есть другая проблема, если объект застревает. Часть на задней стороне окна назначения по-прежнему будет отображаться в исходном положении, но объекты, которые не касаются границы, не будут сталкиваться с ней. Одним из способов решения этих проблем было бы объединение симуляций, но я не уверен, как это можно сделать эффективно.
Тамши
0

Я прочитал некоторые сведения о физическом моделировании и нашел возможное решение. Он работает, разбивая каждый физический шаг на три фазы:

1. Предварительный шаг:

Каждый физический шаг, окно создает четыре преобразования, два для каждой стороны соединения:

  • входное преобразование, которое преобразует положение объекта, скорость (и, возможно, размер и вес) в целевую систему координат и
  • выходное преобразование, которое преобразует силы обратно в исходную систему объекта.

(Статические окна нужно сделать только один раз.)

Кроме того, объекты в каждой системе координат делятся на три группы:

Физическая группировка http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png

  1. Объекты перед окном (зеленые).
    Объект также считается в этой группе, если он пересекает плоскость окна или может пересечь его из-за окна (не показано).

  2. Объекты, которые пересекают окно или могут пересечь его на этом шаге физики (оранжевый).

  3. Объекты за окном (синие). Если объект летит к задней стороне окна, он все равно помечается как член группы три.

Группировка может быть упрощена, если окно находится на границе симуляции.

2. Main-Step:

Физика рассчитывается в основном как обычно, с некоторыми исключениями:

  • Объекты из второй группы никогда не сталкиваются с объектами из третьей и наоборот.

  • Входное преобразование окна используется для объектов из второй группы, и результаты сравниваются с передними и пересекающимися объектами из целевой системы. Результирующая сила преобразуется с использованием выходного преобразования и применяется к исходному объекту.

(Если объект попал в расчет, его необходимо перегруппировать!)

3. Пост-шаг:

Если объект из второй группы пересек окно, он перемещается в систему назначения с использованием преобразования ввода.

Дополнительные мысли:

Если преобразования сохраняются после вычисления физики, они могут использоваться для ускорения рендеринга и для более простых вычислений ИИ. Группировка может быть использована для удаления клип-плоскостей из процесса рендеринга.

Недостатком этого решения является то, что окна должны быть добавлены непосредственно в физический движок.

Tamschi
источник