Библиотека Oimo.js предназначена для физического моделирования в браузере на основе JavaScript, обеспечивая симуляцию твердых тел, столкновений и динамики объектов. Одной из ключевых возможностей является сбор статистики текущего состояния физического мира через объект WorldInfo. Этот объект предоставляет подробную информацию о численности объектов, состоянии симуляции и производительности, что важно для оптимизации и отладки сложных сцен.
Объект WorldInfo доступен через свойство
world.info, где world — это экземпляр класса
OIMO.World. Ключевые свойства включают:
Пример доступа к этим свойствам:
let world = new OIMO.World({ timestep: 1/60, iterations: 8 });
console.log("Количество тел:", world.info.numRigidBodies);
console.log("Количество контактов:", world.info.numContacts);
console.log("Количество соединений:", world.info.numJoints);
console.log("Время последнего шага:", world.info.stepTime);
Объект WorldInfo обновляется автоматически при
каждом вызове метода world.step(). Это обеспечивает
актуальность данных без необходимости ручного пересчета.
world.step();
console.log("Контакты после шага:", world.info.numContacts);
world.step() принимает один необязательный параметр —
timeStep. Если параметр не задан, используется значение
timestep, указанный при создании мира.step() даст данные предыдущего цикла.Мониторинг производительности С помощью свойства
stepTime можно определять нагрузку на CPU и корректировать
параметры мира, такие как iterations и
timestep.
Оптимизация количества объектов Свойства
numRigidBodies и numContacts позволяют
отслеживать увеличение числа тел и столкновений, что важно для крупных
сцен. Если количество контактов растет слишком быстро, можно
пересмотреть физические параметры объектов или объединять мелкие
тела.
Диагностика соединений Использование
numJoints помогает контролировать сложные механизмы,
проверять корректность прикрепления объектов и предотвращать
нестабильность сцены.
WorldInfo предоставляет также внутренние свойства, не всегда документируемые официально, такие как:
numSleepingBodies — количество тел, находящихся в
состоянии покоя (sleeping), что позволяет оптимизировать расчеты.numActiveBodies — активные тела, участвующие в
симуляции, отражающие текущую динамическую нагрузку.gravity — сила гравитации, актуальная для текущего
мира. Полезно для проверки, правильно ли установлена физическая
среда.console.log("Спящие тела:", world.info.numSleepingBodies);
console.log("Активные тела:", world.info.numActiveBodies);
console.log("Гравитация:", world.info.gravity);
Эти значения позволяют не только следить за текущим состоянием, но и динамически изменять параметры физики для достижения стабильной симуляции при высокой нагрузке.
console.log в цикле
requestAnimationFrame может влиять на производительность.
Рекомендуется собирать статистику раз в несколько шагов.numContacts как индикатора сложных
столкновений помогает выявлять потенциальные проблемные зоны сцены.numActiveBodies и
numSleepingBodies позволяет анализировать эффективность
механизма сна и потенциально отключать ненужные вычисления.WorldInfo является мощным инструментом для получения подробной информации о состоянии мира в Oimo.js, позволяя анализировать производительность, оптимизировать сцену и поддерживать стабильность физики даже в больших и сложных симуляциях.