Bagaimana simulasi fisika Box2d dan Bullet bekerja secara internal?

8

Saya telah melihat box2d dan bulling porting ke JavaScript, tetapi tidak satu pun dari mereka yang menarik saya, kecuali untuk kode sumber. Semuanya tampak sederhana, begitu saya melihat ke dalam.

Apa yang mereka lakukan di masing-masing perpustakaan untuk mendapatkan simulasi fisika yang bagus? Saya tidak dapat menemukan penjelasan apa pun.

Riang
sumber
Saya akhirnya akan menjawab pertanyaan itu sendiri karena saya sedang mempelajari sumbernya. Jika Anda berhasil mempersingkat upaya saya akan menghargainya.
Ceria

Jawaban:

10

Fisika tubuh kaku sebenarnya cukup sederhana dalam konsep - yaitu, perilaku yang coba dibuat oleh mesin tidak terlalu rumit. Mungkin itulah sebabnya perpustakaan yang Anda lihat tampak sederhana bagi Anda.

Kuncinya adalah membuat sim yang kuat , stabil , dan cepat , bahkan di hadapan hal-hal seperti floating-point error dan rendah, framerates variabel, cukup sulit dan biasanya melibatkan banyak tweaker dan mengutak-atik. Yang semakin memperumit masalah ini adalah kenyataan bahwa banyak orang yang sangat pintar telah melakukan upaya heroik untuk menemukan solusi yang lebih baik, dan telah datang dengan algoritma yang indah dan kuat tetapi sulit dipahami yang telah memberikan lapangan reputasi untuk ilmu hitam.

Secara umum, mesin fisika akan memusatkan perhatian pada tiga hal (urutan di mana mereka melakukannya dalam loop internal bervariasi):

  1. Integrasi (mendekati persamaan gerak Newton),
  2. Deteksi tabrakan, dan
  3. Penyelesaian kendala (memperbarui posisi dan kecepatan untuk memenuhi nonpenetrasi atau kendala yang ditentukan pengguna lainnya).

Untuk sebagian besar dari ini, ada algoritma sederhana tetapi tidak begitu akurat dan algoritma kompleks tetapi lebih akurat. Untuk membantu Anda memulai:

  1. Untuk integrasi, kebanyakan orang menggunakan Symplectic Euler atau Verlet (yang sebenarnya setara. Anda dapat membaca tentang integrasi numerik jika Anda suka, tetapi konsensus tampaknya bahwa metode first-order murah baik-baik saja.
  2. Anda dapat menemukan semua referensi deteksi tabrakan yang Anda inginkan di halaman sumber daya Rendering Real-Time .
  3. Untuk pemecahan kendala, metode impuls berurutan sangat mudah dipahami. Erin Catto (penulis Box2D) memberikan presentasi di GDC setiap tahun - slide dihubungkan dari halaman utama Box2D . The 2006 slide menutupi impuls berurutan cukup baik. Anda juga dapat melihat metode yang lebih bagus seperti Featherstone atau proyeksi Gauss-Seidel.

Ada pengantar yang sangat baik untuk metode sederhana dan apa yang bisa salah dalam bab-bab awal dari buku yang baru saja diterbitkan Game Physics Pearls.

Charlie
sumber
6

Baca seri fisika permainan Glenn Fiedler: http://gafferongames.com/game-physics/

Juga, Erin Catto (penulis Box2D) memiliki makalah tentang dinamika terbatas .

Untuk deteksi tabrakan, baca Deteksi Tabrakan Real-Time oleh Christer Ericson

David
sumber
1
Tautan pertama itu rusak, tetapi saya pikir artikel yang sama sekarang dapat ditemukan di sini: gafferongames.com/game-physics/integration-basics (tapi saya tidak yakin karena saya tidak pernah melihat aslinya)
Justin
2

http://en.wikipedia.org/wiki/Rigid_body_dynamics mungkin merupakan tempat yang baik untuk memulai. Gim-gim yang berbeda akan membagi berbagai benda menjadi berbagai badan, tetapi secara umum Anda memiliki sejumlah benda tegar terpisah yang dihubungkan oleh sambungan dengan properti tertentu. Setiap putaran melalui permainan Anda menghitung kekuatan pada setiap tubuh dan menghitung parameter baru (posisi, kecepatan, dll). Anda juga harus mentransmisikan kekuatan dari masing-masing tubuh ke tubuh lain yang berbagi dengan dan faktor kekuatan global (gravitasi).

Ini tidak mencakup hal-hal seperti fisika cair atau kain, itu semua omong kosong bagiku. Ada persamaan diferensial yang terlibat dan itu tentang titik di mana mata saya berkaca-kaca.

pembuat kode
sumber
Yah .. wikipedia akan menjadi tempat pertama yang terlihat jelas. Juga semua orang sejauh ini mungkin tahu bahwa mereka cenderung mensimulasikan gerakan tubuh melalui kekuatan. Ada lebih banyak di box2d dari itu. Inilah beberapa hal yang saya minati: Pemecahan kendala dan beberapa hal lain yang mencegah simulasi meledak. Algoritma pendeteksian tabrakan. Optimalisasi penyelesaian kendala dan deteksi tabrakan. Algoritma respons gabungan / tumbukan. Simulasi gesekan.
Ceria
Itu mendekati wilayah "terlalu lama untuk jawaban yang sebenarnya". Misalnya, redaman untuk mencegah artefak simulasi adalah matematika yang rumit . Adapun hal-hal seperti transfer gaya bersama, versi sederhana adalah bahwa setiap sambungan memiliki sumbu khusus yang akan mentransfer gaya dengan persentase energi tubuh yang dihitung terhadap sambungan tergantung pada sudut antara keduanya. Sambungan yang paling sederhana adalah tautan tetap, di mana semua gaya dari kedua sisi diterjemahkan.
coderanger
Seperti yang saya katakan dalam pertanyaan: Tidak apa-apa untuk hanya mengatakan ada matematika yang rumit di sana-sini dan memberikan tautan untuk membaca lebih lanjut.
Ceria
Nah, ini dia :-)
coderanger
1

OpenCloth merinci semua teknik integrasi dengan cara sesederhana mungkin. Banyak yang ada di dalam pipa.

Detail: http://code.google.com/p/opencloth/

Mobeen
sumber
0

Satu hal penting selain persamaan fisika adalah melacak semua objek, sehingga memeriksa deteksi tabrakan dan interaksi secepat mungkin. Hashing Spasial adalah teknik yang digunakan mesin fisika Chipmunk .

ASHelly
sumber
0

Hanya untuk menambah daftar tautan, saya menemukan catatan SIGGRAPH Baraff sangat membantu.

selion
sumber