Not:

Bu blog için açmış olduğum Twitter feed hesabımı takip ederek, yeni yazılarımdan daha rahat haberdar olabilirsin!

Fizik Motoru Devlog #02: Rijit Nesneler ve Coulomb Sürtünmesi

--- ---

Bildiğiniz gibi verlet tabanlı, mass-spring ve volume tabanlı bir fizik motorum var. Fakat oyunlarda sıkça sert nesneler kullanırız. Mass-spring modeli ile sert cisimler yapmanız tabiki mümkün, fakat makul hassasiyette bir sert cisim fiziği uygulamanız için hem segment kısıtlamaları hem de çarpışmalar için çok fazla iterasyon kullanmanız gerekecektir. Bu yüzden simülasyon modellerime diğer simülasyon modelleriyle etkileşime girecek rigid body dynamics dediğimiz bir simülasyon modeli daha ekledim. Aşağıda farklı simülasyon modellerinin etkileşimlerini görebilirsiniz.

enter image description here
Rijit cisim simülasyonlarında(Box2d, Chipmunk gibi motorlarda) hız manipülasyonu dediğimiz bir metod uygulanır. Benim fizik motorumda asıl zorluk bunu pozisyon tabanlı dinamiklerle uygulayabilmekti. Bu nedenle birçok farklı yol denedim ve makul bir sonuca ulaştığımı düşünüyorum. Öncelikle rijit cisim simülasyonlarda pozisyon tabanlı dinamiklerin avanajları ve dezavantajları var. Avantajılarından biri direk pozisyonları manipüle ettiğiniz için motorun yineleme sayısını azaltmış oluyorsunuz, dolayısıyla çok daha optimize çalışıyor. Paylaştığım gifte 2 adım kullanılmaktadır. Yukarıdaki gördüğünüz örnek 2 iterasyon ile çalışır ve oldukça kararlıdır.

Şimdi sırada rijit cisimlerde Coulomb sürtünmesinin uygulaması var. Burada aslında varolan tek dezavantajı da size anlatmış olacağım.

enter image description herePozisyon tabanlı çözümümde üstüste dizilmiş nesnelerinizin sayısı ne kadar fazlaysa, geleneksel hız tabanlı motorlardaki görebileceğiniz zerafeti kaybedersiniz. Nesneleriniz gayet sağlam çarpışmalara sahip olsa da, çok ufak miktarda da olsa kıpırdamalar yaşar. Bunu önlemek için daha fazla iterasyona ihtiyaç duyabilirsiniz. iterasyon avantajınız tersine döner, Fakat güncel oyunlarda ve yapacağım oyunlarda beni sıkıntıya sokabilecek böyle bir senaryo olmadığını düşünüyorum.

Sırada ne var?

  • Joint uygulamaları
  • Render çalışmaları
  • Raycasting

Yorumlar