Erin Catto, autor projektu Box2D, oznámil vytvoření nového enginu simulace fyzikálních procesů Box3D, který představuje fork Box2D, má identickou architekturu, ale je přepracován a rozšířen pro použití ve 3D hrách. Kód projektu je napsán v jazyce C a je distribuován pod licencí MIT. Podporována je sestava pro Linux, Windows a macOS.
Engine Box3D byl vytvořen během vývoje studiem Kintsugiyama nového 3D střílečky The Legend of California, na jejímž vývoji se podílí Erin. Ve hře je použit herní engine Unreal Engine, ale vývojáře neuspokojil nabízený fyzikální engine Chaos. Problémy vznikly z důvodu absence zohlednění gyroskopických momentů točivého pohybu (tenké objekty se nepřirozeně dlouho otáčely), kontinuální detekce kolizí (nerealistické chování padajících stromů) a nízkého výkonu při zpracování stovek tisíců objektů.
Zpočátku plánovali problémy vyřešit vytvořením forku fyzického enginu Jolt, ale pak na doporučení tvůrce enginu Rubikon, zapojeného do hry Half-Life, jako základ vzali zjednodušenou verzi Rubikon-Lite, která byla vytvořena jako koníček. Ta byla přepracována s využitím kódu a optimalizací z Box2D k kombinaci existujících 3D funkcí s vývojovými poznatky z enginu Box2D. Nakonec byly téměř všechny API, datové struktury a algoritmy v Rubikon-Lite nahrazeny kódem z Box2D, a z Rubikon-Lite zůstaly pouze algoritmy pro konstrukci konvexního obalu a zpracování 3D kolizí. Výsledný engine, s vědomím autora Rubikon-Lite a společnosti Kintsugiyama, bylo rozhodnuto publikovat jako samostatný otevřený projekt Box3D.
V současné době byl vydán první release Box3D 0.1, který je označen jako alfa verze. Hlavní plánovaná funkčnost je realizována, ale je potřeba doladit dokumentaci a testování. Kromě hry The Legend of California je nový engine již využíván v herní platformě s&box, otevřeném herním enginu Esoterica a vícero hráčské vesmírné hře Space Game, určené pro 1000 hráčů.
Pro 3D hry v novém enginu byly přidány možnosti, jako je výpočet kolizí s polygonální mřížkou (meshem) a výškovými mapami používanými při generování krajiny, což umožnilo implementovat v hře The Legend of California realistické efekty pádu stromů na voxelové povrchy. Přidána podpora předem vypočtených (baked) složených kolizí, sestavených z několika jednoduchých tvarů, což výrazně snížilo spotřebu zdrojů při simulaci kolizí ohromného počtu typových drobných objektů.
Mezi přenesené možnosti do Box3D, které byly dříve v Box2D:
- Nepřetržité určení kolizí (zpracování pohybu objektu jako nepřetržité trajektorie), filtr kolizí a generování událostí při kontaktu objektů. Podpora sférických, kapsulových a plášťových tvarů pro určení kolizí. Optimalizovaný pomocí SIMD instrukcí zpracovatel kontaktů objektů.
- Sub-stepping solver pro zvýšení přesnosti simulace díky rozdělení fází simulace na několik menších kroků.
- Použití metody barvení grafů pro zpracování velkých skupin propojených objektů.
- Ovladač postavy, který zajišťuje zpracování pohybu, kolizí a interakce postavy s okolními objekty.
- Podpora sledování paprsků, sledování tvarů a kontroly průniků při skenování okolního prostoru. Systém senzorů pro detekci objektů v prostoru.
- Soft Step Solver pro výpočet fyziky tuhé hmoty při složitých interakcích.
- Podpora mrazení stavu skupin neaktivních nebo statických objektů pro úsporu zdrojů.
- Podpora různých spojení a typů vazeb mezi objekty, včetně kloubů, pružin, motorů, svařování a kol, s možností flexibilního nastavení každého spojení. Výpočet sil komprese a protažení, s kterými objekty vzájemně působí.
- Možnost generovat události při zahájení pohybu, zastavení nebo stabilizaci objektu.
- Hooky pro vícerozměrné zpracování s volitelným interním plánovačem.
- Použití pro souřadnice typu double, což umožňuje vytváření obrovských světů.
- Křížový determinismus, který zajišťuje totožný výsledek na různých hardwarových platformách.
- Podpora záznamu a přehrávání simulace.
- C API a kód v C odpovídající standardu C17.
Mezi plány do budoucna se zmiňuje rozšíření funkcí souvisejících s pohyby postav, vylepšení mechanismů prevence „duchových“ kolizí (ghost collision), provedení optimalizací a zlepšení zpracování spojů (joint solver). V repozitáři plánují poskytnout možnost odesílání pull requestů se změnami od zástupců komunity po podpisu dohody o převodu majetkových práv na kód (CLA).


Zdroj: opennet.ru
