З'єднання моделювання фізики з різними системами координат


9

Я хочу, щоб об'єкти рухалися між двома фізичними моделюваннями через "вікно" і стикалися з тими з обох моделей, якщо вони перетинаються площиною вікна.

Системи координат моделювання не мають одного походження та можуть мати різну орієнтацію. Прив’язувати моделювання до себе не потрібно, але це буде плюсом.

Як я можу ефективно підключити системи без клонування окремих об'єктів?

Редагувати:

Розрахунки повинні бути максимально точними, щоб об'єкти не застрягли, якщо вони перетинають вікно одночасно з протилежних сторін.


Першим питанням було б, чи фізичне моделювання має бути точним через вікно? Через те, що зміни орієнтації роблять правильне підмітання дуже неможливим. Це ніби як портали, що змінюють масштаб - світ можливого болю. Друге питання: Різна орієнтація, як у довільній чи, принаймні, під кутом 90 градусів, просто розміщення осі?
Кай

Тепер це звучить як проблема, з якою вони мали вирішити на порталі. Якщо я добре пам'ятаю, вони згадують ці проблеми та те, як вони їх вирішували в деяких ігрових коментарях. Напевно, їх можна десь знайти в Інтернеті.
Nailer

@Kaj Я думаю, що було б найкраще розділити шлях обчислення для довільних і прямокутних переходів. Таким чином, прямокутні можуть мати більш високу точність і швидкість, тоді як інші кути також будуть можливі.
Тамщі

@Nailer Якщо я добре пам’ятаю, вони створили нове фізичне середовище під час відкриття порталу, а потім клонували кожен фізичний об’єкт, який наблизився до цього додаткового моделювання. Вони сказали, що якимось чином обмежують об'єкти, але, швидше за все, вони просто перетворюють сили та позиціонують кожен крок фізики. <br> Я повністю впевнений, що вони створюють третій клон у пункті призначення через те, як рухається гравець імітується в Джерело.
Тамщі

Відповіді:


2

Є цей класний проект під назвою Псевдоформа, раніше відомий як «Порталізований», який обробляє фізичні симуляції, використовуючи портали, таким чином:

Псевдоформ

Перевір!

Особливо відео - це приголомшливо круто.

Це відкритий код, тому ви можете побачити, як вони це роблять.

Б'юсь об заклад, що ви цього хочете. :)


2
Я просто прочитав код: Те, як вони це роблять, майже як рішення Вальва, але без додаткового фізичного середовища. Портали в механізмі Portalized створюють дублікат об’єкта, коли він торкається поверхні порталу, а потім видаляють його, як тільки він покинув портал на певний час. Ця відповідь все ще є дещо корисною: спільний пристрій для обмеження дублікатів показує, як об’єкт трансформується на порталі.
Тамщі

0

Гаразд - я не знаю, чи спрацювало б це.
Виходячи з вищенаведеної інформації, я ставлю тригери на «вікна», щоб я міг виявити, коли об’єкт виходить із світу. Вектор захоплення струму в момент зіткнення. Обчисліть лівий часовий крок, виходячи з того, де він потрапив на тригер і де він опинився в цьому кадрі (поза межами світу, для того, щоб це допустити, потрібен віртуальний кордон). У цей момент ви знаєте швидкість і часовий крок, що залишився, і ви можете змінити її на межі світу, в який він має ввійти, і відхилити швидкість. Однак для цього знадобиться два оновлення фізики в одному кадрі, і там буде межа одного об'єкта, що переходить від a до b, а інший переходить від b до a в тому самому положенні - зіткнення не було б виявлено взагалі.
Якийсь схематичний,


Це здається найшвидшим способом, але є проблема, якщо два об'єкти перетинають вікно з тієї ж сторони: Якщо перший об'єкт застряг посередині кордону, другий не зіткнеться, поки не досягне межі, також з’являються всередині першого в пункті призначення.
Тамщі

Відредаговано трохи, коли ви це вводили, і це справді було проблемою, яку я додав: o \
Kaj

Я повинен навчитися читати. Моє доповнення було ще одним прикордонним випадком. Буде розмірковувати.
Кай

Ні, кордон знаходиться поза світом. Таким чином, об’єкт один буде вистрілений у світ 2 (від кордону світу 2 - не у положенні вікна) з власною швидкістю, як і об'єкт b. Вони належним чином зіткнулись у світі 2 на кордоні .... Я думаю: о? Однак мій власний прикордонний випадок все ще є.
Кай

Здається, я неправильно прочитав частину про віртуальний кордон. У будь-якому випадку є інша проблема, якщо предмет застряє. Частина на зворотному боці вікна призначення все одно буде надана у вихідному положенні, але об'єкти, які не торкаються межі, не зіткнуться з нею. Одним із способів вирішити ці проблеми було б уніфікація моделювання, але я не впевнений, як це можна зробити ефективно.
Тамщі

0

Я прочитав деякі відомості про фізичні симуляції і знайшов можливе рішення. Він працює, розділяючи кожен крок фізики на три фази:

1. Попередній крок:

Кожен крок фізики, вікно створює чотири перетворення, по дві для кожної сторони з'єднання:

  • вхідне перетворення, яке перетворює положення об'єкта, швидкість (і, можливо, розмір і вагу) в систему координат призначення та
  • вихідне перетворення, яке перетворює сили назад у вихідну систему об'єкта.

(Статичні вікна повинні зробити це лише один раз.)

Крім того, об'єкти в кожній системі координат поділяються на три групи:

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

  1. Об'єкти перед вікном (зелений).
    Об'єкт також зараховується до цієї групи, якщо він перетинає площину вікна або, ймовірно, перетне його з-за вікна (не показано).

  2. Об'єкти, що перетинають вікно, або, ймовірно, перетинають його на цьому кроці фізики (помаранчевий).

  3. Об'єкти за вікном (синій). Якщо об’єкти пролітають до задньої сторони вікна, він все одно позначається як член третьої групи.

Групування можна спростити, якщо вікно знаходиться на межі моделювання.

2. Основний крок:

Фізика обчислюється в основному як зазвичай, за кількома винятками:

  • Об'єкти з другої групи ніколи не стикаються з об’єктами третьої і навпаки.

  • Перетворення вхідного вікна використовується для об'єктів з другої групи, а результати оцінюються по відношенню до переднього та пересічного об'єктів із системи призначення. Отримана сила перетворюється за допомогою вихідного перетворення і застосовується до вихідного об'єкта.

(Якщо об’єкт потрапив під час обчислення, його потрібно перегрупувати!)

3. Покроковий крок:

Якщо об’єкт з другої групи перетнув вікно, він переміщується в систему призначення за допомогою вхідного перетворення.

Додаткові думки:

Якщо перетворення збереглися після обчислення фізики, їх можна використовувати для прискорення візуалізації та для більш легкого обчислення ШІ. Групування може бути використане для видалення площин кліпу з процесу візуалізації.

Мінус цього рішення полягає в тому, що вікна потрібно додавати безпосередньо до фізичного двигуна.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.