В библиотеке Oimo.js объект WorldConfig
отвечает за конфигурацию физического мира, в котором происходят все
симуляции. Он управляет базовыми параметрами физического движка, такими
как точность интеграции, сила гравитации, поведение столкновений и
ограничения производительности. Грамотная настройка
WorldConfig позволяет добиться баланс между
производительностью и реализмом моделирования.
WorldConfigОбъект создается с помощью конструктора:
let config = new OIMO.WorldConfig({
timestep: 1/60,
iterations: 8,
broadphase: 2,
worldscale: 1,
random: true,
gravity: [0, -9.8, 0]
});
Каждое поле имеет важное значение и может быть настроено индивидуально.
timestepОпределяет шаг симуляции, то есть интервал времени между обновлениями физического мира.
number1/60 (секунд)1/60 или 1/120.config.timestep = 1/120; // более точная симуляция
iterationsКоличество итераций для решения ограничений (constraints) и столкновений на один шаг симуляции.
integer810–15.config.iterations = 12;
broadphaseМетод предварительного поиска потенциальных столкновений.
Тип: integer
Значение по умолчанию: 2
Возможные значения:
0 — Brute Force (проверка всех объектов, низкая
эффективность при большом количестве тел)1 — Sweep and Prune (оптимизация по осям)2 — Dynamic AABB Tree (наиболее эффективный для
динамических сцен с большим количеством объектов)config.broadphase = 2; // оптимально для динамических сцен
worldscaleМасштаб мира, который влияет на расчёт физических сил и гравитации.
number1worldscale помогает поддерживать
физическую реалистичность.config.worldscale = 0.1; // уменьшение масштаба мира
randomПараметр, определяющий использование случайной генерации при распределении тел и столкновений для повышения стабильности.
booleantruetrue улучшает стабильность симуляции при
множественных столкновениях, false может ускорять расчёты в
предсказуемых сценах.config.random = false;
gravityВектор гравитации в мире.
Array<number> из трех элементов
[x, y, z][0, -9.8, 0]config.gravity = [0, -20, 0]; // усиленная гравитация
Баланс производительности и точности
iterations и маленький timestep
повышают реалистичность, но требуют больше ресурсов.broadphase особенно критична при сотнях и
тысячах тел.Стабильность симуляции
random уменьшает вероятность “зацикливания”
при множественных столкновениях.worldscale необходимо корректировать
массу и размеры объектов для сохранения физической корректности.Интеграция с другими объектами Oimo.js
WorldConfig используется при создании экземпляра
мира:
let world = new OIMO.World(config);Все динамические тела и constraints наследуют параметры конфигурации, что позволяет централизованно управлять симуляцией.
Для игр с быстрыми объектами:
let fastGameConfig = new OIMO.WorldConfig({
timestep: 1/120,
iterations: 10,
broadphase: 2,
worldscale: 1,
gravity: [0, -9.8, 0]
});
Для стабильной сцены с множеством мелких объектов:
let stableConfig = new OIMO.WorldConfig({
timestep: 1/60,
iterations: 12,
broadphase: 1,
worldscale: 1,
random: true,
gravity: [0, -9.8, 0]
});
Эти параметры задают основу для любых симуляций в Oimo.js и позволяют гибко настраивать физический мир под конкретные задачи, будь то игровой движок, интерактивная визуализация или образовательные эксперименты.