1 puan yazan GN⁺ 3 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 3 시간 전
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-...

    • Bu, Rovio'da (Angry Birds'ün yapımcısı) çalışırken duyduğum bir hikâye: Pazarlama şefi Peter Vesterbacka bir konuşma sırasında soru alırken seyircilerden biri oyunda hangi fizik motorunu kullandıklarını sormuş, Vesterbacka da doğru şekilde Box2D diye yanıtlamış. Bunun üzerine o kişi, “Neden jenerikte yok? Bu arada ben Box2D'nin yaratıcısı Erin Catto'yum” demiş
      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

    • Zaten ücretsiz açık kaynaklı 3D fizik motoru sayısı çok fazla değildi. Eski öncüller olarak ODE, Bullet ve Newton Dynamics var; hepsi ilk kez 2000'lerin başında çıktı. Sonra neredeyse 20 yıl boyunca ortalık boş kaldı, 2021'de Jolt geldi, şimdi de Box3D gelmiş gibi görünüyor
      Bu kadar küçük ve kapalı bir listeye yeni bir öğe eklenmesi her zaman sevindirici
    • Incredibots'a bağımlı olduğum günleri hatırlıyorum. Box2D'yi ilk kez o zaman öğrenmiştim
    • Box2D hâlâ gayet harika. 2D fizik oyunu projeleri için kesinlikle tavsiye ederim
      Box2D'nin ve artık Box3D'nin C API'si ile çalışmak gerçekten çok keyifli
    • Eskiden Chipmunk2D'yi biraz kullanmıştım; yaptığım tuhaf işler için kullanması daha kolaydı
  • 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

    • Ben de aynı şeyi arıyordum. Replay mekanizması olduğu için deterministikmiş gibi görünüyor. Ama kayan noktalı fizik kullanıyorsa platformlar arasında öyle olmayabilir
      Belgelerde -ffast-math desteklenmiyor denmiş, dolayısıyla belki de platformlar arası determinizm hedefleniyordur: https://box2d.org/documentation3d/recording.html
      Düzenleme: ffast-math ile ne kastedildiğini netleştirdim
  • Makine öğ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ş

    • Benim de aklıma hep Tanarus geliyor ama bundan bahseden neredeyse kimseyi görmüyorum
  • 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…

    • Fazla umutlanmamak lazım. Muhtemelen Deadlock'un voleybol oyun modunda kullanılacaktır
    • Valve'ın kod adı HLX olan bir oyun yaptığı ve fizik özelliklerini çok yoğun kullandığı söyleniyor. Ama “HLX”in ne anlama geldiğine dair hiçbir fikrim yok
    • Valve
      Box3D
      3D
      3
      Umut!
    • Half-Life 2D kesinleşti mi?
    • Day of Defeat Source 2.1'e tam bir hafta kaldı!