Apa sebenarnya mesin fisika itu?


57

Suatu program harus mengambil input, memprosesnya dan memberikan output. Jadi apa sebenarnya yang diambil mesin fisika sebagai input dan berikan sebagai output?


36
Banyak pertanyaan terminologi orang. Tidak perlu meng-downvote pertanyaan dasar hanya karena itu dasar.
MichaelHouse

16
Deskripsi suatu program sebagai sesuatu yang "harus mengambil input, mengolahnya, dan memberikan keluaran" adalah cara berpikir yang disederhanakan dan reduksionis tentang hal itu sebagai sesuatu yang tidak berguna. Pikirkan bagaimana Anda akan menjawab pertanyaan "Sebuah program harus mengambil input, memprosesnya dan memberikan output. Jadi apa sebenarnya yang diambil game sebagai input dan berikan sebagai output?", Anda bisa menjawabnya tetapi itu bukan cara yang berguna untuk memikirkan suatu permainan.
Jack Aidley

10
@JackAidley Saya mengerti maksud Anda, tapi sungguh, permainan sangat mirip: input: penekanan tombol & gerakan mouse / joystick, output: gambar menyenangkan di layar & suara menghibur dari speaker. Ini sederhana, ya, tetapi membantu memahami apa "permainan" secara komputasi, dan dalam pengalaman saya juga merupakan cara yang sangat berguna (tapi tentu saja bukan satu-satunya cara) untuk berpikir tentang arsitektur kode, desain aset, manajemen proyek, dll.
wjl

Jawaban:


58

Sebuah mesin fisika bertanggung jawab untuk mensimulasikan gerakan dan reaksi benda-benda seolah-olah mereka berada di bawah batasan fisika dunia nyata (atau mirip dengan dunia nyata). Saya perhatikan, ini biasanya bukan program mandiri, melainkan komponen dari program yang lebih besar dan lebih menarik (seperti game).

Input untuk simulasi fisika umumnya kumpulan benda ("benda") dengan sifat (seperti apakah benda itu kaku atau lunak, massa, bentuk, dan sebagainya) serta kumpulan gaya yang bekerja pada benda itu.

Berdasarkan input itu, mesin mensimulasikan posisi dan orientasi tubuh yang diperbarui dan menerapkan ("output") mereka. Secara umum, ketika objek bertabrakan atau tumpang tindih, yang termasuk dalam output dari langkah simulasi dalam bentuk panggilan balik yang kode klien dapat menghubungkan ke dalam untuk menangani logika gameplay spesifik yang relevan dengan tabrakan.


6

Input itu kecepatan, massa, dan waktu, output adalah kecepatan baru. Kadang-kadang momentum rotasi / sudut juga merupakan input dan output.

Mesin Fisika pada dasarnya mencoba mensimulasikan efek gravitasi dan tabrakan. Untuk mesin fisika yang lebih baik, itu berarti mereka mencakup deformasi objek permanen dan sementara, termasuk membelah objek menjadi beberapa objek, dan momentum sudut objek. Idealnya mereka juga mensimulasikan stres, misalnya berapa banyak truk yang dapat menyeberangi jembatan itu sampai runtuh, tetapi itu cukup langka. Variabel simulasi lebih lanjut seperti hambatan udara juga akan dihitung sebagai mesin fisika, tetapi sejauh yang saya tahu ini belum membuatnya menjadi game apa pun.

Sebagian besar mesin fisika dikhususkan untuk tingkat tertentu dan akan mensimulasikan fisika ke titik yang diperlukan untuk permainan. Mesin fisika untuk permainan mobil seringkali sangat berbeda dari mesin fisika untuk penembak 3D. Dan mesin fisika dari permainan golf mungkin memiliki perhitungan yang berlebihan dari interaksi bola golf dan daun rumput individu, sementara benar-benar kehilangan penanganan tabrakan kecepatan tinggi dan deformasi mobil (kalau-kalau terkena bola golf) .


1
Saya ingin menunjukkan bahwa hambatan udara sebenarnya merupakan karakteristik umum dari mesin fisika. Game apa pun yang menerapkan kecepatan terminal ke benda yang jatuh memodelkan hambatan udara.
Patrick Roberts

@ PatrickRoberts Terminal Velocity tidak persis seperti yang saya pikirkan ketika menyebutkan hambatan udara. Itu seperti mengatakan Pong memiliki mesin fisika yang memodelkan dampak kinetik.
Peter

12
baik untuk bersikap adil, dalam arti longgar itu. Ini model tumbukan elastis sempurna dalam lingkungan tanpa bobot. Saya mengerti bahwa model bisa disederhanakan, tetapi itu sebabnya mereka disebut model karena mereka adalah perkiraan praktis dari fenomena yang kita alami dalam kenyataan.
Patrick Roberts

4

Biasanya mesin fisika digunakan untuk membuat objek dalam permainan berperilaku secara realistis relatif terhadap lingkungan mereka tanpa harus merancang animasi spesifik untuk setiap skenario yang mungkin.

Khususnya mesin fisika akan mengambil model dengan seperangkat properti (massa, sendi dll) dan membuatnya dalam game sesuai dengan serangkaian parameter.

Contoh awal dari hal ini adalah mesin raggdoll (misalnya di Unreal) yang memodelkan cara tubuh yang pincang akan jatuh ke bawah, dll.

Dalam teknologi saat ini, mesin fisika akan sering diintegrasikan secara erat dalam paket keseluruhan permainan bersama dengan AI, UI dalam game, generasi cutscene dll.

Anda tentu bisa berpendapat bahwa mesin fisika kembali ke awal desain game misalnya pong dapat dianggap sebagai mesin fisika mentah. Namun poin utamanya adalah bahwa mesin fisika mampu menghasilkan titik-titik animasi dengan cepat berdasarkan pada serangkaian parameter daripada hanya menggunakan urutan animasi yang telah ditentukan dari penangkapan gerak atau animasi manual.

Seperti yang disebutkan dalam jawaban lain, di beberapa kelas atau permainan seperti mengemudi atau simulasi penerbangan, mesin fisika mungkin sangat penting untuk permainan dan dengan demikian akan menjadi input utama yang mendorong animasi di layar. Meskipun biasanya istilah ini digunakan untuk alat tujuan umum yang dapat diterapkan pada berbagai situasi tanpa memerlukan pengetahuan yang sangat spesifik atau analisis konteks yang bersangkutan di pihak pengembang, daripada simulator yang sangat spesifik yang dibangun dari tanah. untuk aplikasi tertentu.


4

Mesin fisika bertanggung jawab untuk mensimulasikan gerak benda di "dunia" (apa pun artinya dalam konteks mesin). Sebagian besar mesin fisika saat ini menggunakan mekanika Newton untuk melakukan ini, karena mereka relatif sederhana untuk disimulasikan dan "cukup akurat" untuk sebagian besar tujuan kecuali Anda sedang melakukan sim ruang.

Secara teori, mesin fisika "murni" akan mengambil tiga input:

  • Keadaan dunia (objek, posisi, dan kecepatannya) pada "centang" terakhir (saat terakhir dalam waktu yang harus dimodelkan oleh mesin)
  • Berapa banyak waktu telah berlalu sejak kutu terakhir terjadi
  • Daftar kekuatan yang telah bekerja pada berbagai objek di dunia sejak kutu terakhir

Memperhatikan inersia dan kekuatan, engine menggerakkan benda-benda di sekitarnya. Output dari mesin fisika hanyalah keadaan baru "dunia" , yang kemudian dapat dibaca dan dimodifikasi oleh game.

Dalam praktiknya, mesin fisika belum tentu begitu "murni" . Benda-benda perlu dibuat dan dihancurkan, dan kadang-kadang benda itu perlu dipindahkan dengan cara yang tidak diizinkan oleh hukum mesin fisika. Ini kadang-kadang dapat dilakukan di luar mesin, tetapi kadang-kadang dilakukan di dalam, dan untuk itu, mesin membutuhkan lebih banyak input. Tetapi ketiga input yang disebutkan di atas mencakup dasar-dasarnya.

Sebagai contoh, katakanlah Anda perlu memindahkan karakter dalam game menggunakan joystick. Jika Anda tidak menggunakan mesin fisika, ini cukup mudah: ketika Anda melihat bahwa pengguna menggerakkan joystick, Anda memindahkan objek sesuai. Dengan mesin fisika, Anda tidak memindahkan objek secara langsung: Anda menerapkan gaya padanya, sesuai dengan arah yang Anda inginkan, dan membiarkan pegangan mesin benar-benar memindahkannya .

Apa bedanya? Bahkan jika tidak ada yang lain di dunia, objek tersebut tidak mungkin bergerak dengan cara yang sama, karena mesin fisika akan menangani hal-hal seperti akselerasi yang realistis. Tetapi ada juga kemungkinan bahwa kekuatan lain mungkin bertindak pada objek pada saat yang sama, seperti mungkin inersia, dan mesin akan memperhitungkan semuanya . Misalnya, jika Anda menerapkan gaya utara pada objek, tetapi sesuatu yang lain menerapkan gaya barat (atau objek sudah bergerak ke barat dan tidak ada yang memperlambatnya), maka mesin akan memindahkan objek ke barat laut.

Itulah yang membuat mesin fisika Anda: Ia melacak objek, posisi dan kecepatannya, dan gaya yang bekerja pada mereka. Berkat hukum mekanika, ia bahkan dapat membuat beberapa kekuatan sendiri, untuk secara otomatis menangani hal-hal seperti tabrakan, gesekan, dan gravitasi, semua tanpa Anda, pengembang game, harus melakukan sesuatu yang ekstra.


1

Mesin Fisika pada dasarnya adalah simulator tubuh fisika.

Memasukkan

Hal ini memungkinkan Anda membuat tubuh (atau beberapa yang) menentukan sifat-sifat fisika seperti massa, ukuran, kepadatan, dll ...

Ini juga memungkinkan Anda untuk menentukan sifat-sifat dunia fisika tempat simulasi terjadi (misalnya gravitasi).

Akhirnya memungkinkan Anda untuk menerapkan kekuatan atau membuat sendi di antara tubuh.

Keluaran

Setelah Anda mendefinisikan semua hal ini Anda dapat mulai simulasi dan Fisika Engine akan memberitahu Anda di mana setiap tubuh akan ditempatkan di depan timestep (yang biasanya sesuai dengan frame berikutnya dalam permainan Anda). Dan yang berikutnya, dan seterusnya ...

Anda melihat Sprite bergerak di layar karena setiap frame Game Engine meminta Mesin Fisika

Di mana tubuh ini sekarang?

dan Game Engine memperbarui representasi grafis sesuai.

Pertimbangan

Saya biasanya suka melihat Mesin Fisika seperti alat untuk menerapkan hukum fisika dalam cara deklaratif .

Infact alih-alih menulis kode untuk menggambarkan komputasi mana yang harus dilakukan untuk menentukan di mana tubuh akan berada di timestep berikutnya, saya hanya menggambarkan dunia fisika yang menetapkan atribut tubuh (dan dunia fisika itu sendiri) dan saya membiarkan mesin fisika menjawab pertanyaan itu untuk saya.


Bagian 'pertimbangan' Anda sama sekali tidak jelas (bagi saya). Jika Anda meningkatkannya menjadi lebih jelas dan konkret / praktis (misalnya, berikan contoh sistem aktual yang telah Anda amati, bangun, dll.), Maka saya akan memberi Anda +1.
code_dredd

@ray: Terima kasih atas saran Anda. Saya akan memperbaikinya ASAP!
Luca Angeletti

Pastikan untuk memberikan saya komentar setelah selesai dan jangan terburu-buru. Ini harus bermanfaat bagi orang lain di kemudian hari.
code_dredd
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.