Box3D - Açık kaynaklı 3D fizik motoru duyuruldu
(box2d.org)- Oyun sunucularında büyük ölçekli 3D fizik simülasyonlarını doğrudan kontrol etme ihtiyacı artarken, Box3D Box2D çizgisinden gelen açık kaynaklı bir 3D fizik motoru olarak duyuruldu
- Yapısı Box2D'ye yakın ve C API, C17 kaynak kodu, alt adımlı çözücü, sürekli çarpışma, grafik boyama, wide SIMD temas çözücüsü ve çoklu iş parçacığı kancaları içeriyor
- Unreal Engine'in Chaos sisteminde jiroskopik tork, ağaç devrilmesi ve büyük ölçekli broad-phase ihtiyaçlarını karşılamanın zor olması, geliştirmenin doğrudan çıkış noktası oldu
- Üçgen mesh, yükseklik alanı, baked compound collision, double tabanlı büyük dünya desteği, platformlar arası determinizm ve kayıt/yeniden oynatma gibi 3D oyunlara yönelik özellikler eklendi
- Birden fazla oyun ve motorda hâlihazırda kullanılıyor olsa da henüz alfa yazılım durumunda; v0.1 etiketinden sonra v1.0'a kadar test ve dokümantasyonun güçlendirilmesi gerekiyor
Box3D'nin yapısı ve temel özellikleri
- Box3D, GitHub'da yayımlanan açık kaynaklı bir 3D fizik motoru ve Box2D tasarımını 3D oyun ihtiyaçlarına uyarlayıp genişleten bir proje olarak görülebilir
- Temel mimarisi Box2D ile neredeyse aynı ve kütüphanenin tüm kaynak kodu C17 ile yazılmış
- Başlıca motor özellikleri şöyle
-
C API
- Alt adımlı çözücü
- Sürekli çarpışma
- Büyük adalar için grafik boyama
- wide SIMD temas çözücüsü
- Çoklu iş parçacığı kancaları
- İsteğe bağlı dahili zamanlayıcı
- Konumlarda double kullanan büyük dünya desteği
- Platformlar arası determinizm
- Kayıt ve yeniden oynatma
- 3D oyunlar için eklenen çarpışma özellikleri de bulunuyor
- Üçgen mesh çarpışması
- Yükseklik alanı çarpışması
- baked compound collision
-
The Legend of California'da ortaya çıkan ihtiyaç
- Box3D'nin ilk geliştirme motivasyonu, Kintsugiyama tarafından geliştirilen The Legend of California oldu
- Bu oyun Unreal Engine ile yapılıyor ve proje Unreal 5.0 ile başladı
- Unreal'ın varsayılan fizik motoru Chaos ile yapılan denemelerde çeşitli sınırlamalar ortaya çıktı
- Jiroskopik tork simülasyonunu desteklemediği için, ince cisimlerin açısal hızını koruyarak uzun süre dönmesi gibi hareketleri ele almak zordu
- Geliştirici, 2015 GDC'de fizik motoruna jiroskopik tork ekleyen yaklaşık 10 satırlık tak-çalıştır bir algoritma sunmuştu
- Epic bu özelliği 2024 sonlarında Unreal Engine'e ekledi
- Daha büyük sorun, hayatta kalma oyununun temel özelliklerinden biri olan ağaç kesme sırasında ortaya çıktı
- Devrilen ağaçlar düzensiz hareket ediyor ve ekranda aniden sıçrıyordu
- Senaryo, büyük bir kapsülün pürüzsüz bir üçgen mesh üzerine düşmesi simülasyonuydu ve kolayca çözülebilmesi gereken bir durumdu
- Sunucuda yüz binlerce entity bulunduğu için hızlı bir broad-phase de gerekiyordu
- Bu unsur oyunun merkezinde yer aldığından, middleware'e bırakmak riskli görüldü
- Geliştiricinin broad-phase veri yapıları konusunda ciddi deneyimi vardı ve bu konuda GDC sunumları da yapmıştı
Rubikon-Lite'tan Box3D'ye
- Mevcut açık kaynaklı fizik motoru Jolt'un kullanımı da değerlendirildi, ancak Dirk Gregorius bunun yerine Rubikon-Lite'ı fork edip ihtiyaçlara göre değiştirmeyi önerdi
- Dirk Gregorius, Half-Life: Alyx'te kullanılan özel fizik motoru Rubikon'un fizik programcısı ve Rubikon'un hobi/ev sürümünü sürdürüyor
- Rubikon-Lite doğrudan Unreal'a bağlandığında jiroskopik tork çalıştı ve ağaçlar da düzgün şekilde devrildi
- Unreal'da fizik motorunu değiştirirken bazı kestirme yollar kullanılabildi
- Blueprint yerine özel bir scripting sistemi kullanılıyor
- Esoterica animation system, Unreal'a port edilerek kullanılıyor
- Doğrudan Box3D'ye bağlanan özel bir ECS kullanılıyor
- Box2D v3.0 optimizasyonlarını Rubikon-Lite fork'una taşımaya çalışırken, 2D ve 3D çalışmalarını mümkün olduğunca benzer tutma ihtiyacı doğdu
- Rubikon-Lite'ın neredeyse tüm API'leri, veri yapıları ve algoritmaları Box2D koduyla değiştirildi
- 2D ve 3D veri yapılarının önemli bir kısmı uzaysal boyuttan bağımsızdı
- Zamanla Rubikon-Lite fork'u Box3D'ye dönüştü
- Bugünkü Box3D'de dışbükey hull üretimi ve bazı çarpışma algoritmalarında Rubikon-Lite kodu hâlâ bulunuyor
- Geri kalanı Box2D kodu ve Box3D için yazılmış yeni kodlardan oluşuyor
- Valve tarafında Rubikon gelişmeye devam ederken, Dirk Box3D'ye benzer optimizasyonları yeni motor Ragnarok için geliştiriyor
Özel fizik motoruyla oyuna göre uyarlanmış ihtiyaçlar
- The Legend of California, büyük bir açık dünya ve sunucu otoritesine dayalı yapıya sahip bir proje
- Devrilen ağaçlar, ragdoll'lar, voxel'ler, saloon kapıları ve tumbleweed'ler sunucuda simüle ediliyor
- Özel bir fizik motoru kullanmak, özellikleri ve performansı oyunun ihtiyaçlarına göre doğrudan ayarlamayı mümkün kılıyor
- Performans çalışmasının önemli bölümü özellikle devrilen ağaçlar üzerinde yoğunlaştı
- Dev redwood ağaçları voxel arazi üzerine hızla düşüyor
- Mesh çarpışması ve CCD'nin kararlı çalışmasını sağlamak önemli bir iş yükü oluşturdu
- Voxel sistemi için çarpışma mesh'lerinin de çalışma anında hızlı biçimde üretilmesi gerekiyordu
- Voxel'ler ızgara yapısında olduğu için median split ile iyi organize ediliyor
- Streaming de önemli bir gereksinimdi
- Stronghold'lar kitbashing ile oluşturuluyor
- Büyük bir stronghold içinde yaklaşık 50.000 ayrı çarpışma mesh'i bulunabiliyor
- Bunları fizik motoruna tek tek yüklemek verimsiz ve bellek açısından pahalıydı
- Ayrı çarpışma şekillerini optimize edilmiş veri yapılarıyla pişirip tek bir uber shape olarak yükleyen bir compound collision sistemi geliştirildi
- Bu yaklaşım, binlerce body ve shape oluşturmanın getirdiği ek yükü ortadan kaldırdı
Neden açık kaynak yapıldı ve kimler için uygun
- Geliştirici 2004'ten beri oyunlar için fizik motorları geliştiriyor ve her iş değişikliğinde bu çalışmaları geride bırakmak zorunda kalıyordu
- Box2D, bilgi ve emeği açık kaynaklı bir projede biriktirip sonraki çalışmalar için temel oluşturma fikrinin bir ürünüydü
- 3D tarafında ise benzer işleri tekrar tekrar yapmanın yükü vardı
- Kintsugiyama, Box3D'nin açık kaynak olarak yayımlanmasına ve işin bir parçası olarak üzerinde çalışılmasına izin verdi
- Box3D, diğer fizik motorlarıyla rekabet etmek için geliştirilen bir proje değil; Box2D'nin tasarımını beğenen kullanıcıların Box3D'ye de yakın hissetmesi muhtemel
Başlangıç ve dokümantasyon
- Box3D ile başlamak için temel git ve CMake kurulumundan sonra Box3D repository klonlanabilir
- Derleme yöntemi README içinde yer alıyor
- Derleme sonrasında örnekler çalıştırılarak özellikler görülebilir ve örnek kodlarla geliştirmeye başlanabilir
- Motor başlıklarında tam Doxygen açıklamaları bulunuyor, yazılı kılavuz ise hâlen hazırlanıyor
- Barındırılan documentation sağlanıyor
- En küçük örnek kod HelloWorld test içinde görülebilir
Mevcut kullanım alanları ve gelecek planları
- Box3D, The Legend of California dışında da çeşitli yerlerde hâlihazırda kullanılıyor
- s&box: Facepunch Studios'un oyun platformu
- Esoterica: Bobby Anguelov liderliğinde geliştirilen açık kaynaklı oyun motoru
- A 1000-player space game: Glenn Fiedler'ın çok oyunculu oyunu
- Birden fazla oyunda kullanılıyor olsa da Box3D henüz alfa yazılım olarak değerlendiriliyor
- Yakında v0.1 etiketi oluşturulacak ve ardından v1.0 sürümüne doğru geliştirilecek
- Daha fazla test ve daha olgun dokümantasyon gerekiyor, ancak özellik seti şimdiden iyi bir noktada
- Değerlendirilen başlıklar şunlar
- Karakter hareketi özelliklerini güçlendirme
- ghost collision azaltımını iyileştirme
- Optimizasyon
- Joint solver geliştirmeleri
- Box2D ile birlikte Box3D'nin de süresiz olarak desteklenmesi bekleniyor
- Olgunluk aşamasına ulaştığında, özellik geliştirme tarafında bir süre durulabilir
- Box2D'den farklı olarak Box3D'nin pull request kabul etmesi bekleniyor ve CLA kullanılabilir
- Box3D için ayrı bir web sitesi veya Discord sunucusu açılmayacak
- Güncellemeler Box2D sitesi üzerinden paylaşılacak
- Sohbetler Box2D Discord server üzerinde yürütülecek
- Box3D'nin The Legend of California içinde nasıl çalıştığını görmek için home page ve Steam üzerinden takip edilebilir
1 yorum
Hacker News yorumları
Box2D her anıldığında, aynı yazarın kütüphanesi olan Box3D ile ilgili o bariz bağlantıyla birlikte eski bir hikâye aklıma geliyor
https://kotaku.com/this-guy-created-angry-birds-physics-and-...
Vesterbacka da “Etkinlikten sonra yanıma gelin” diye cevap vermiş; belki Erin o sırada bir hoodie bile almıştır. Sonrasında da kısa süre içinde adı jeneriğe eklenmiş
Herkesin şaşırdığı asıl şey, pazarlama sorumlusunun hangi fizik motorunu kullandıklarını biliyor olmasıymış
Box2D bir zamanlar fizik tabanlı bağımsız oyunların temel taşlarından biriydi
Şimdi ortam yeterince boşken yeniden canlanma şansı olup olmadığını merak ediyorum
Bu kadar küçük ve kapalı bir listeye yeni bir öğe eklenmesi her zaman sevindirici
Box2D'nin ve artık Box3D'nin C API'si ile çalışmak gerçekten çok keyifli
Bu gerçekten çok sevindirici. Erin Catto harika bir hacker ve kodunu açık kaynak topluluğuyla paylaştığı için minnettarım
Duyuruda determinism konusundan bahsedilmiyor ama o tarafta da daha fazlasını görmek isterim. Unity'nin yerleşik fiziğiyle ağ üzerinden çalışan bir bilardo oyunu yapmaya kalkarsanız, istemcilerin ne olduğunu birbirleriyle tutarlı şekilde eşleştirememesi epey baş ağrıtıcı oluyor
Belgelerde
-ffast-mathdesteklenmiyor denmiş, dolayısıyla belki de platformlar arası determinizm hedefleniyordur: https://box2d.org/documentation3d/recording.htmlDüzenleme:
ffast-mathile ne kastedildiğini netleştirdimMakine öğrenimi araştırmacısı olarak Box2D'ye pekiştirmeli öğrenme ortamı sayesinde aşinayım. OpenAI Gym'de Lunar Lander ve Car Racing gibi standart benchmark ortamlarının temelini oluşturuyor
https://gymnasium.farama.org/environments/box2d/car_racing/
Fizik simülasyonu tehlikeli bir tavşan deliğidir. Sadece rijit cisimlere ve fiziksel olarak inandırıcı davranışlara odaklansanız bile çarpışma tespiti ve çarpışma çözümünde hâlâ açık problemler var
Geometride konveks yaklaşım veya ayrıştırma kullanılır, çözücüler genelde elle ayarlanır ve sağlamlıkla hassasiyet sürekli hızla takas edilir
Bunu gerçekten bekliyordum. Eskiden Box2D ile epey başarılı olmuştum ve F/OSS dünyasında da kesinlikle üst sıralarda yer alan bir iş
Box3D tabanlı Spectre VR? Bunun kesinlikle çıkması lazım gibi geliyor. Biraz Tanarus havası da var
Düzenleme: Legend of California demosunda (Unreal Engine tabanlı) kayıt ve oynatmaya geçilen kısım oldukça sert bir sıçrama gibi görünüyor. İlk başta biraz temel gelebilir ama demo videosunda en az 18. dakikaya kadar mutlaka izleyin. Oldukça kaba ama ilgi çekici hâle geliyor ve kayıt/oynatma özelliği çok hoş
Rapier'ı, ondan önce de biraz Cannon ve Ammo'yu biliyorum; Box3D ile kıyaslandığında nasıldır merak ediyorum
Ayrıca birkaç hafta önce kendim de 3D uzay için bir fizik motoru yapıp burada paylaşmıştım. Aslında sabit aralıklarla nesneleri aşağı indiren tek satırlık bir şey ama şimdiden şaşırtıcı derecede iyi çalışıyor. Öğrenme açısından gerçekten çok eğlenceli; denemenizi öneririm
Birkaç gündür tarayıcı için Tron tarzı bir 3D oyun yapmak üzere Jolt kullanmaya başladım, o yüzden bunu görmek ilginç oldu. Şimdiye kadar Jolt oldukça iyi çalıştı ama buna da mutlaka bakacağım
1 - Bu domaine yıllardır sahibim: https://lightcycles.io
Jolt ile nasıl karşılaştırılacağını merak ediyorum. İkisinin de geçmişi güçlü görünüyor; biri Valve ve Erin Catto tarafından geliyor, diğeri ise Horizon oyunlarında kullanılmıştı
“Valve tarafında Rubikon gelişmeye devam ediyor ve Dirk, yeni motor Ragnarok için Box3D'ye benzer optimizasyonlar geliştirdi. Bunu gelecekteki Valve oyunlarında göreceksiniz.”
Bir dakika…
Box3D
3D
3
Umut!