Bir fizik motoru için gerekli tavsiyeler


12

Kısa bir süre önce bir fizik motoru inşa ederek bir proje başlattım. Bunun için bazı belgeler ve / veya en iyi teknolojilerle ilgili bana tavsiyelerde bulunabilmeyi umuyordum.

Her şeyden önce, Oyun-Fizik-Motor-Geliştirme'nin eldeki görev için şiddetle tavsiye edildiğini gördüm ve bana ikinci bir fikir verebilir misiniz diye merak ediyordum. Ayrıca, Amazon'a göz atarken, Game Engine Mimarisine rastladım ve fizik motorumu oyunlar için inşa etmek istediğimden, bunun iyi bir okuma olabileceğini düşündüm.

İkincisi, fiziği simüle etmenin yüksek hesaplama yoğunluğu olduğunu biliyorum, bu yüzden CUDA veya OpenCL kullanmak istiyorum.

PS: Bunu Linux'ta C ++ ile uygulayacağım.

Yanıtlar:


10

İşte bir fizik motoru yazmayı öğrendim, hepsi ücretsiz ve son derece tavsiye edilir:

  1. David Baraff'ın makaleleri özellikle Fiziksel Tabanlı Modellemeye Giriş

  2. Brian Vincent Mirtich'in Rijit Beden Sistemlerinin Dürtü Tabanlı Dinamik Simülasyonu

  3. Kacic / Bullock "Pratik bir dinamik sistem" SIGRAPH 2003, EDIT: Link eklendi .

Bu kağıtlar Gems 4 "Verlet Tabanlı Bir Fizik Motoru Yazma" adlı değerli taş kitaplarından birinde Nick Porcino'dan (LucasArts) bir başka harika makalede bahsedildi . Onun özgür değil, ama onun her kuruşa değer.

Ayrıca diğer motorlara da bir göz atın, burada Bullet Physics Engine'in kaynağı .

CUDA / OpenCL uygulaması hakkında: önce CPU'da çalışmasını sağlayın, yeterince karmaşık :)

Muhtemelen bir süre sonra motorunuzu atacağınızın farkında olun, çünkü istikrarlı ve iyi entegre bir fizik motoru yapmak çok zor. kendi başınıza rekabetçi bir özellik listesi, ancak bu harika bir öğrenme deneyimi!

Basit bir motor çalışır çalışmaz, tavsiyem: motorunuzun sonucunu başka bir motorun sonucuyla karşılaştıracağınız test senaryoları yapın. Bu çok fazla hata bulmama yardımcı oldu ve arayüzünüzü geliştirecek; her iki motorda aynı gövdeye 1 saniye benzer bir kuvvet uygulamak gibi bir şey.

Son fakat en az değil: Başlarken çarpışmaları yok sayın, önce kararlı bir simülasyona odaklanın.


Harika bir yanıt gibi görünüyor, ancak biraz biçimlendirmek isteyebilirsiniz.
Komünist Ördek

Geri bildiriminiz için teşekkürler.Rekabetçi bir motor yapamayacağımı kabul ediyorum, ancak bununla ilgili temel hedefim öğrenme kısmı.
adivasile

1
@ Komünist Ördek ipucu için teşekkürler, tarafa
yeniydim

1
Kacic'in makalesine bağlantı eklendi, umarım doğru olan :)
Ray Dey

5

Maik haklı, Baraff'ın kağıtları mükemmel bir başlangıç, ancak sert vücut dinamikleri hakkında Chris Heckers'ın yazdığını unutmayın: http://chrishecker.com/Rigid_Body_Dynamics !

Ayrıca "[..] motorunuzu atacaksınız" hakkındaki tavsiyesi de tamamen doğrudur. Ama çok şey öğreneceksiniz!

Sorunuzun CUDA / OpenCL kısmı ile ilgili: CUDA'yı biliyorsanız OpenCL'ye geçmek çok kolaylaşır. İlk önce CUDA öğrenmeyi tavsiye ederim, çünkü orada çok iyi öğreticiler, örnek kod ve hesaplama kütüphaneleri var. Örneğin:

Ancak unutmayın: CUDA'ya başlamak kolaydır, fizik simülasyonuna başlamak biraz daha zordur, ancak ikisini birleştirmek oldukça zordur!


kesinlikle haklısın, bu belirtilmesi gereken başka bir harika kaynak, Chris
Hecker'ın

4

Ben de Baraff ile başladım ama şimdiye kadar biraz tarihli. İhtiyacınız olan şey yinelemeli çözücüler ve en iyi kağıt imo Erin Catto'nun Yinelemeli Dyanmics . Fizik motorunuzu uygulamak için orada ihtiyacınız olan her şey var. Daha fazla ayrıntıya (eklemler ve daha fazla matematik materyali gibi) ihtiyacınız varsa, Erleben'in doktora tezine biraz girebilirsiniz, ancak işte bu kadar. Keşke baştan beri bulmuş olsaydım - Bullet forumundan biraz geç, orada bol miktarda bilgi var (belki çok fazla).

Kitaplara gelince, kitapların çoğu hayal kırıklığı yaratıyor, ancak Kenny Erleben veya Game Physics Pearls tarafından Fizik Tabanlı Animasyon'u öneriyorum.

(Ben her zaman yapmak istedim rağmen) fazla CUDA / OpenCL bilmiyorum ama kesinlikle Takahiro Harada'nın çalışmalarını kontrol etmelisiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.