浏览器物理模拟

Созданияприложенийссимуляциейфизики

Встатьебудутрассмотреныследующиедвижки:

Ammo.js
Cannon.js
Oimo.js
box2dweb
Unity3D WebGL

Основнойбельвыбратьнаиболеепроизводительный,

Ammo.js

子弹物理引擎使用 javascriptсиспользованиемкомпилятораEmscriptenипозаявлениюразработчикиобладаетп ФанкционалAmmo.jsдействительнообширен。 Дляработыснимпонадобитсяотдельнаябиблиотекадлявизуализации。 Three Three.js 。 Приэтомкаждыйциклперерисовкипридётсявручнуюсинхронизироватьположениеивращениекаждогообъектанасценесегофизическоймоделью,движокнеделаетэтоавтоматически。

Чтокасаетсяпроизводительности,оннеслишкомвысокая,ноизаметныхпросадокfpsвбольшинстве。

APIиногдаможетбовтдовольнозапутаннымидокументациянеособопомогает。
Вцеломоченьхорошийинструмент,которыйпродолжаетразвиватьсяидорабатываться。

Cannon.js

Cannon.js —是从движоксоткрытымисходнымкодом。 请使用javascriptипозволяетиспользоватьвотличиеотличиеотличиеотличиеотличиеотличиеотличие 。 Насамомделесложносказать, Темнеменееcannon.jsпосравнениюсammo.jsсчитаетсяболеекомпактным,болеепроизводительным,атакжеболеелегкимдляпонимания,ноприэтомоннеобладаеттакимколичеством функций 。 Напрактикеихпроизводительностьчастопримерноодинаковая。

Процессработысдвижкомдовольнопрост:

Дляработытакжетребуетсясторонняяграфическаябиблиотека,причёмпридётсякаждыйциклотрисовкивручнуюперемещатьсоответствующийобъектнасцененаместорасположенияфизическогообъекта。

Вданныймоментдвижокпрактическинеразвивается,последняяактивностьврепозиториипроектаболее2летназад,анатотмоментдвижокещётольконачиналразвиваться,такчтовнекоторыхместахонможетоказатьсянепроработан。

Oimo.js

Oimo.js —在OimoPhysics上使用javascript 标记 。 Всравнениисдругимирешениями,обладаеточеньхорошейпроизводительностьюиточностью,однакоподдерживаеттолькопримитивнуюгеометрию(кубыисферы)。 巴比伦(Babylon.js)的照片—从2D到3D的графики,поэтомукакихтодополоинетельны

Большимминусомдвижкаявляетсянеоченькачественнаядокументация,норазработчикипродолжатра。

Наданныймоментдвижокпродолжаетразвиваться。

box2dweb

box2dweb —使用javascript的 box2d。 Какпонятноизназвания,специализируетсянасимуляции2Dфизики。 Несмотрянаэто,box2dweb —довольномощныйинструмент,которыйнискольконеотстаётотсвоихтрёхмерных。 Напримердвижоквключаеткрайнеудобныесистемыобнаруженияколлизийиимитациисоединений( 约束 )。

токасаетсяпроизводительности,нужнооченьпостаратьсяписатьнеоптимальныйкод,чтобыпоявили。

ИзплюсовтакжестапростотуAPIиудобнуюдокументацию。

Unity3D

Unity3D —使用кросс-платформенныйигровойдвижок。 使用拖放3D-ки的Включаетудобный拖放редакториобширныйинструментарийинструментарий。 ПоследняяверсиядвижкадлянаписанияигровойлогикиподдерживаетC

统一 PhysX,PhysX和PhysX的 имеетвстроеннуюсимуляциюфизики NVIDIAPhysX物理 даётобширныйфункционалпосимуляциифизикитвёрдыхтел,жидкостейитканей,обладаеточеньхорошейпроизводительностью,хотямногиеплюсыаннулируютсяприработенаграфических ускорителяхнеот NVIDIA。 Крайнеприятнымфактомявляетсято,чтос3декабря2018исходныйкоддвижкадоступенподоткрытойлицензиейBSD-3,темнеменеедвижокслишкомсложный,чтобыпытатьсяпереписыватьегоподсебяилиразбиратьсявегоустройстве,такчтотутлучшепоможетдокументация。

使用Unity WebGL,Unityоказался,посколькусуществуетвозможностьсобратьпроектнанёмподWebGL。 Дляэтогодостаточновнастройкахсборкивыбратьсоответствующийпункт。

ТемнеменееWebGL的 версия 统一 всилуособенностейсвоейархитектуры(трансляциякодаизC#вС++идалеев 的JavaScript),имеетрядпроблемспроизводительностью,потреблениемпамятииработоспособностьюнамобильныхустройствах,инепохоже,чторазработчикисобираютсясэтимчто -тоделатьвближайшеевремя。 Поэтомуданныйвариантнепользуетсяпопулярностьюиянестануегоподробнорассматривать。

Сравнениепроизводительности

Сравнимпроизводительностьдвижковпотому,каконисправляютсясобработкойколлизийбольшогокок。 Используемыйбраузер— Firefox 64.0.2 x64。

ПорезультатамтестовOimo.jsпоказываетлучшуюпроизводительность。

Разумеется,этирезультатынедаютадекватнойоценкипроизводительности,таккакзависятотмножествастороннихфакторов,нополноценноеисследованиепотребовалобыкудабольшевременидаиятакойцелисебенеставил。 Крометогозаметно,чтопроизводительностьвсехсравниваемыхдвижковдовольноневелика,такчтоданныерешенияподойдутдлянаписаниядалеконекаждойигры,нозатохорошоподойдутдлясозданиянебольшихдемо。

Вывод

Вцелом,выборконкретногодвижказависитотпоставленнойзадачи。 Еслитребуетсяпростойвпониманииилегкоосваиваемыйдвижок— хорошоподходитСannon.jsилиOimo.js 。 Еслитребуетсябольшефункционала, лучшеиспользоватьAmmo.js 。 Вопределённыхситуациях,еслибольшаяпроизводительностьнетребуется,можнопопробоватьиспольз。