2 poin oleh GN⁺ 2025-07-27 | 2 komentar | Bagikan ke WhatsApp
  • Implementasi kendaraan di dalam game lebih mengutamakan pengalaman bermain daripada mesin fisika yang benar-benar realistis
  • Tiap game balap dan simulator memiliki perbedaan pada cara kendaraan dikendalikan dan rasa imersinya
  • Simulasi kendaraan terdiri dari tiga komponen: mesin/gearbox, ban, dan sasis
  • Pemodelan ban dan konsep slip adalah kunci untuk mewujudkan sensasi berkendara yang realistis
  • Pengembang perlu menentukan sendiri tingkat penyederhanaan dan abstraksi yang sesuai dengan konsep game

Mengapa kendaraan itu spesial di dalam game

Kendaraan dalam game digunakan sebagai elemen pengalaman yang penting di berbagai genre
Baik kontrol yang tidak realistis maupun simulasi mengemudi yang realistis sama-sama menyampaikan “rasa mengemudi”
Sebagai contoh, Mario Kart dan Assetto Corsa mengarah pada pengalaman yang secara mendasar berbeda, tetapi esensi dari pemrograman kendaraan tetap sama
Daripada menerapkan hukum fisika dunia nyata secara akurat, fokus utamanya adalah bagaimana menyampaikan sensasi mengemudi yang diharapkan pengguna
Tujuan pengembang bukanlah simulasi yang akurat, melainkan merancang pengalaman yang diinginkan

Percobaan awal dan pelajaran: AV Racer

Pada tahap awal pengembangan AV Racer, kendaraan digerakkan dengan model mekanika Newton yang sederhana, tetapi tidak mampu memberikan sensasi seperti kendaraan nyata
Berbagai hardcoding dan tuning parameter untuk putaran, drift, kecepatan sudut, dan lain-lain dilakukan berulang kali
Walau berhasil menampilkan sensasi “meluncur” secara empiris, hasilnya masih kurang dalam situasi ekstrem maupun terhadap ekspektasi pengemudi nyata
Jika pemahaman tentang fisika kendaraan nyata dan pengalaman pengemudi kurang, akan muncul keterbatasan mendasar
Akhirnya, untuk mengimplementasikannya dengan benar, perlu mempelajari prinsip dinamika kendaraan di dunia nyata

Struktur simulasi kendaraan untuk game

Kendaraan dalam game dapat dibagi menjadi tiga elemen konseptual: mesin (beserta gearbox), roda/ban, dan sasis

Mesin (termasuk gearbox)

  • Menerima input seperti throttle dan perpindahan gigi
  • Menghasilkan torsi dan RPM, lalu mengubahnya sesuai rasio gigi
  • Memiliki umpan balik timbal balik dengan roda (yakni sinkronisasi dua arah antara mesin dan roda)

Ban (termasuk roda)

  • Menerima berbagai input seperti torsi mesin, rem, kemudi, beban, dan gesekan permukaan jalan
  • Semua gaya muncul di titik kontak ban dengan permukaan jalan
  • Gaya yang realistis diwujudkan melalui pemodelan ban (misalnya Pacejka Magic Formula)

Sasis

  • Berperan sebagai rigid body dalam mesin fisika
  • Bereaksi terhadap pengaruh eksternal seperti gaya ban, hambatan udara, gravitasi, dan tabrakan
  • Menentukan gerak keseluruhan kendaraan dan memengaruhi perubahan beban ban
Komponen Input utama Output utama
Mesin/gearbox Throttle, input transmisi, kecepatan roda Torsi putar, RPM
Ban Torsi mesin, rem, kemudi, beban, gesekan Gaya ke sasis, sinkronisasi mesin-roda
Sasis Gaya ban, hasil aerodinamika Beban roda, perpindahan total

Mewujudkan seluruh detail fisika secara 100% akurat seperti kendaraan nyata adalah hal yang tidak realistis
Kecuali di laboratorium riset produsen mobil sungguhan, sebagian besar game dan simulasi menggunakan model black box, rumus, dan pendekatan yang disederhanakan
Karena itu, yang penting adalah perancang memutuskan apa yang dihilangkan dan apa yang ditekankan

Desain mesin dan drivetrain

Mesin (inti perhitungan torsi)

  • Di dunia nyata sangat kompleks, tetapi dalam kode bisa dibentuk sebagai model black box sederhana berupa input (RPM, throttle) → output torsi
  • Kurva torsi/daya dapat diparameterkan sebagai angka atau grafik untuk mensimulasikan mesin dengan karakter yang berbeda-beda
  • Contoh: kurva dapat dirancang langsung dengan Desmos dan semacamnya untuk mengatur “karakter mesin”

Gearbox

  • Dapat diimplementasikan secara sederhana menggunakan tabel rasio gigi
  • Perpindahan gigi menentukan karakteristik akselerasi, kecepatan maksimum, dan sebagainya
  • Sederhana, tetapi sangat memengaruhi pengalaman bermain
Gigi Rasio
R -2.92
N 0
1 2.50
2 1.61
3 1.10
4 0.81
5 0.68

Sinkronisasi RPM mesin & roda

  • RPM mesin dan kecepatan sudut roda penggerak saling terhubung
  • Keduanya dihitung secara numerik dengan persamaan diferensial berdasarkan perbedaan dua variabel keadaan tersebut
  • Kecocokan diterapkan secara bertahap di setiap frame dalam bentuk “mengejar nilai target”

Dengan cara ini, model dapat dikembangkan baik untuk gaya arcade maupun simulator
Saat pemain menyesuaikan berbagai parameter mesin (misalnya profil cam, turbo, dan lain-lain), hal itu dapat dihubungkan dengan perubahan suara atau kurva output
Walau tidak meniru gerak mesin nyata secara persis, pendekatan ini tetap menyampaikan kejelasan hubungan sebab-akibat dan memperkuat pengalaman interaktif

Model ban

Peran ban

  • Satu-satunya bagian kendaraan yang bersentuhan langsung dengan jalan nyata
  • Semua gaya seperti akselerasi, pengereman, dan menikung dihasilkan pada area kontak ban
  • Gaya terbentuk terutama dari deformasi elastis dan karakteristik gesekan

Gaya longitudinal (akselerasi/pengereman) & slip ratio

  • Ban memberikan grip maksimum dalam kondisi gesekan statis, lalu beralih ke gesekan dinamis (slip) saat melewati batas
  • Slip ratio dihitung dari selisih antara kecepatan putar roda (saat menggerakkan/mengerem) dan kecepatan gerak di permukaan tanah
    • Slip ratio = (kecepatan sudut roda - kecepatan sudut putar bebas) / kecepatan sudut putar bebas
  • Secara umum, slip terjadi saat roda lebih cepat daripada permukaan tanah ketika berakselerasi, atau lebih lambat saat mengerem
  • Perubahan grip terhadap slip ratio dapat digambarkan dalam bentuk kurva
  • Grip biasanya meningkat hingga titik tertentu, lalu turun tajam setelah melewati puncaknya

Rumus perhitungan gaya yang mencerminkan slip ratio (Pacejka Magic Formula, dll.)

  • Menggunakan slip ratio sebagai input untuk rumus pembentuk kurva kompleks (sinus/arctangent yang diparameterkan)
  • Perlu perhitungan terpisah untuk tiap ban

Gaya lateral (menikung) & slip angle

  • Saat menikung, area kontak mengalami deformasi sehingga muncul slip angle
    • Slip angle = selisih sudut antara arah gerak aktual ban dan arah yang ditunjuk roda
  • Semakin besar slip angle, grip mula-mula bertambah, tetapi akan tergelincir setelah melewati batas tertentu
  • Hubungan antara slip angle dan grip juga membentuk kurva khas
  • Banyak parameter seperti beban, gesekan, dan perubahan dinamis ikut memengaruhi

Fenomena seperti understeer/oversteer

  • Understeer: ketika slip angle roda depan lebih besar daripada roda belakang, mobil berbelok lebih sedikit dari yang diinginkan
  • Oversteer: ketika slip angle roda belakang lebih besar, bagian belakang mobil meluncur ke luar
  • Jika model ban sudah tepat, karakteristik handling semacam ini akan muncul secara alami

Batas saling memengaruhi antara gaya longitudinal/lateral (Friction Circle)

  • Saat ban menggunakan gaya untuk akselerasi/pengereman dan menikung secara bersamaan, nilai maksimum di masing-masing arah akan saling memengaruhi
  • Lingkaran gesek (circle/ellipse): jumlah kedua vektor gaya tidak boleh melampaui batas
    • (F_{x}^2 + F_{y}^2 \le (\mu F_{z})^2)
  • Contoh: saat pengereman keras + belok tajam, kontrol lebih mudah hilang
  • Karena ban nyata bersifat melengkung/nonlinier, parameter perlu dikalibrasi agar sesuai dengan data nyata

Integrasi dalam kode

  • Gaya longitudinal/lateral dihitung secara terpisah untuk setiap ban
  • Kedua vektor dijumlahkan lalu dinormalisasi (scaling) agar tetap berada dalam lingkaran gesek virtual
  • Jika parameter disesuaikan secara dinamis, perubahan handling tingkat tinggi pun bisa diuji dengan mudah

Integrasi dengan mesin fisika kendaraan secara keseluruhan

  • Gaya ban + output suspensi + pengaruh eksternal (gravitasi, drag, dll.) diakumulasikan ke sasis
  • Akselerasi/kecepatan diperbarui di setiap frame menurut hukum gerak Newton

Elemen tambahan yang bisa diperluas

  • Geometri suspensi: camber, caster, dan sebagainya
  • Dinamika ban tingkat lanjut: suhu, keausan, pemuaian, perubahan beban, dan lain-lain
  • Aerodinamika: downforce, drag, spoiler yang menyesuaikan otomatis
  • Drivetrain/diferensial, ABS, ESP, batas kemudi, dan sebagainya
  • Bila perlu, rujuk beberapa buku: Race Car Vehicle Dynamics(Milliken), Mechanics of Pneumatic Tires(S.K. Clark)

Kesimpulan

Dengan model-model di atas saja, fondasi kendaraan game yang berperilaku mirip kendaraan nyata sudah dapat diimplementasikan
Detail tambahan dapat diperluas sesuai tujuan dan kebutuhan pengembangan
Intinya adalah penyederhanaan/abstraksi prinsip dasar dari dunia nyata dan filosofi desain yang berpusat pada pengalaman bermain
Jika ada pertanyaan, pendapat, atau usulan perbaikan, silakan hubungi

2 komentar

 
dogtree 2025-07-27

Saya salah membacanya sebagai 'memprogram kendaraan di dalam kendaraan', lalu sempat berpikir, bukannya ini agak berbahaya ya?

 
GN⁺ 2025-07-27
Komentar Hacker News
  • Hal yang menurutku menarik adalah, meskipun mesin secara fisik punya komponen bergerak paling banyak, di dalam kode justru itu bagian paling sederhana dari keseluruhan simulasi mobil. Ini karena peran utama mesin pada dasarnya adalah kalkulator torsi. Ia menerima banyak input lalu hanya mengeluarkan satu output berupa torsi putar, jadi terasa seperti kotak hitam. Aku sangat merekomendasikan seri video simulator mesin dari AngeTheGreat. Sangat mengagumkan melihat bagaimana itu dioptimalkan hingga bisa berjalan secara real-time, bahkan sampai menghasilkan suara mesin yang terasa nyata. Lihat video simulator mesin AngeTheGreat

    • Game Automation punya engine builder/simulation yang dibuat sangat mendalam. Bereksperimen dengan berbagai jenis mesin benar-benar menyenangkan, dan bagian simulasi suaranya juga meminjam sebagian konsep yang dibahas dalam video AngeTheGreat

    • Ini mengingatkanku pada contoh klasik menganimasikan kubus di Houdini. Ada kesenangan tersendiri saat hal tak terduga muncul dalam simulasi mesin pembakaran internal real-time. Contoh animasi kubus di Houdini

    • Alasan aku mulai belajar pemrograman adalah karena ayahku menulis simulator mesin dalam BASIC. Ayahku, seorang insinyur mekanik, ingin membandingkan kurva torsi dari berbagai desain mesin. Saat dia menggambar wireframe piston, rakitan crank, dan crankshaft yang bergerak dalam frame kurang dari satu detik dengan perintah CIRCLE dan LINE, aku sangat terkejut melihat bahwa komputer bisa digunakan untuk menggambar sesuatu lalu membuatnya bergerak. Fakta bahwa orang ini melakukan hal serupa demi menciptakan suara mobil balap yang lebih baik benar-benar mengesankan

    • Bukankah motor EV sebenarnya jauh lebih sederhana? Mesin pembakaran mahal dan rumit karena harus memanfaatkan ledakan-ledakan kecil untuk menghasilkan torsi. Jadi aku penasaran apakah sebagian besar mobil di game sebenarnya bergerak seperti EV, kecuali kalau ICE memang disimulasikan dengan lebih akurat

  • Aku pernah menangani seluruh simulasi kendaraan di Army of Two. Tulisan ini adalah pengantar yang bagus. Menerapkan model ban Pacejka dan diferensial transmisi sangat membantuku. Selain itu, cukup mengejutkan betapa pentingnya simulasi fisika anti-roll bar dan suspensi dalam menciptakan rasa berkendara yang “menyenangkan”. Kalau ini tidak ada, berkendaranya terasa licin dan sulit terasa imersif. Di video demonya pun terasa seperti itu. Jika anti-roll bar dan suspensi tidak diimplementasikan, mobil jadi mudah terguling, sehingga kita terus-terusan mengutak-atik slip ban atau pengaturan friksi permukaan, padahal itu justru memperburuk pengalaman berkendara

    • Terima kasih banyak untuk info ini! Aku tidak tahu anti-roll bar sepenting itu dalam model dasar. Aku berencana mempelajari ini lebih lanjut dan memperbarui tulisannya jika berhasil diimplementasikan dengan baik

    • Belakangan ini ada masalah pada suspensi mobilku, jadi aku jadi merasakan sendiri seperti apa “berkendara yang tidak menyenangkan”. Aku jadi makin paham maksudnya

  • Ini sangat mirip dengan hal yang kusadari sendiri saat membuat game Flightle. Aku membuat simulator penerbangan side-scrolling untuk mobile, dan gerakan pesawat terasa sangat janggal, jadi dalam frustrasi aku berpikir, “Memangnya sesulit apa sih?” lalu mulai membuatnya sendiri. Saat mempelajari prinsip terbang, aku sadar bahwa level abstraksi yang tepat itu penting. Kalau terlalu tidak realistis, tidak menyenangkan; kalau terlalu realistis, balancing gameplay jadi sulit. Tautan Flightle

    • Sudah terlambat untuk mengedit komentar asliku, tapi aku menuliskan rangkuman pengalaman yang lebih detail dalam tulisan terpisah. Silakan lihat kisah pembuatan simulator penerbangan side-scrolling. Sebagai catatan, belakangan aku mencoba mengubah pesawat dari bentuk titik menjadi struktur dua sayap yang dihubungkan batang, dan tuning-nya sangat sulit walaupun menyenangkan. Orang yang lebih ahli mungkin bisa melakukannya dengan lebih baik

    • Aku menikmati gamenya. Untuk pengguna desktop, mungkin bisa dipertimbangkan agar slider dapat dioperasikan dengan scroll wheel mouse

  • Dulu aku pernah membuat game untuk iOS yang mensimulasikan mobil dan drifting. Basisnya SpriteKit, tapi ini bisa dengan mudah diterapkan di engine game 2D mana pun. Ide dasarnya adalah menghubungkan dua roda depan ke bodi mobil berbentuk persegi panjang dengan pin joint, lalu memberi gaya pada roda. Sudut gayanya dihitung seperti ini: x = force * cos(bodyRotation + wheelRotation) y = force * sin(bodyRotation + wheelRotation) Aku juga menambahkan partikel skid. Drifting kuimplementasikan dengan mengatur nilai damping pada roda dan bodi mobil. Aplikasi Drift Mania Infinite Car Racer

    • Gamenya benar-benar terasa punya karakter! Aku suka karena langsung mulai seketika. Partikel skid-nya efektif. Visualnya juga bagus. Tapi buatku tingkat kesulitannya terlalu tinggi. Mungkin akan lebih sering kumainkan kalau ada semacam “mode zen” yang tidak me-reset saat menabrak dinding

    • Gamenya keren sekali. Dengan pasar aplikasi yang sekompetitif itu, luar biasa bisa mendapat 22 ulasan. Aku penasaran bagaimana kamu mempromosikannya

    • “Game ini menghadirkan grafis yang menakjubkan...” humor merendahkan dirinya lucu sekali. Aku langsung mengunduhnya

  • Tulisan ini sungguh menarik. Bagian model ban saja sudah cukup untuk kubaca berulang kali. Kalau bicara murni soal kesenangan tanpa perlu simulasi atau realisme, tidak ada yang menandingi game arcade 1980-an Super Sprint. Info game Super Sprint

  • Aku menyalin-tempel sebagian materi presentasi terkait yang kusimpan di catatanku: Hamish Young, fisika kendaraan dan dinamika ban di ‘Just Cause 4’ Vehicle Physics and Tire Dynamics in 'Just Cause 4' Jan Erik Steel & Patrick Donnelly, fisika kendaraan supercharged di ‘Skylanders’ Supercharged! Vehicle Physics in 'Skylanders' Edward Pereira, presentasi tentang ilmu off-roading The Science of Off-Roading Jared Cone, fisika ‘Rocket League’ It IS Rocket Science! The Physics of 'Rocket League' Detailed

  • Tulisan ini sendiri keren, tetapi bagian pembukanya agak membingungkanku. Dikatakan bahwa mobil memberi berbagai pengalaman tidak realistis dalam game, sementara senjata tidak demikian. Aku meragukan klaim itu. Faktanya, game penuh dengan senjata tidak realistis dari berbagai macam. Selain itu, disebutkan bahwa ekspektasi kita terhadap mengemudi berasal dari pengalaman tak langsung lewat media atau budaya, bukan dari pengalaman langsung; bukankah itu justru lebih berlaku untuk senjata? Hal seperti melompat pun ditangani dengan sangat beragam di game, tetapi ekspektasiku tentang lompatan justru jauh lebih banyak berasal dari pengalaman nyata “pernah melompat”

    • Sepertinya dia tidak punya banyak pengalaman membuat game FPS. Senjata sungguhan berbeda dari pengalaman di game. Kalau game menirukan senjata asli persis, hasilnya akan jauh lebih tidak menyenangkan dan lebih bikin frustrasi. Game balap juga sama, realitas perlu sedikit dipelintir demi kesenangan

    • Menurutku topik ini bukan soal ‘realisme’, melainkan soal ‘verisimilitude’ atau keterpercayaan. Yang penting adalah menciptakan pengalaman yang bisa “dipercaya” pemain. Senjata di game memang berbeda dari aslinya, tetapi memprioritaskan fantasi yang terasa kuat dan mengancam. Lompatan juga tidak punya landasan realistis, tetapi didesain dalam bentuk yang paling cocok untuk tujuan game. Sebaliknya, area seperti mobil—yang memungkinkan pemodelan sistematis dan keterikatan pada fakta fisik—cenderung mengarah ke penggambaran yang lebih realistis, sampai-sampai bisa dibandingkan dengan simulasi industri. Namun gerakan manusia, sistem ekonomi, alur pertempuran, dan sebagainya jauh lebih sulit didekati secara realistis pada tingkat itu, sehingga representasinya sering jauh lebih kartunal. Desainer game harus membuat kompromi yang sesuai dengan ekspektasi pemain dan tujuan keseluruhan game. Terlalu mengejar realisme detail sampai merusak struktur keseluruhan adalah jebakan yang sangat umum

    • Contoh FPS itu muncul spontan saat presentasi, tapi setelah kupikir-pikir memang itu bukan contoh yang bagus. Terima kasih sudah menunjukkan hal itu

  • Rasanya elemen seperti bukit, tanjakan, dan suspensi tidak dibahas. Unreal Engine punya demo kendaraan yang sangat sederhana, dan juga ada demo dengan model suspensi sungguhan

    • Di akhir presentasi dan tulisan ada video pendek yang menunjukkan kondisi engine sebenarnya, dan dalam video itu ada berbagai medan seperti bukit dan tanjakan. Dalam presentasi, saya menggunakan grid datar yang sederhana. Suspensi juga sudah diimplementasikan, tetapi itu bukan isu khusus mobil melainkan fitur umum agar benda bisa menopang beratnya sendiri, jadi tidak dibahas mendalam karena alur dan durasi presentasi

    • Seperti yang Wassim sebutkan saat sesi tanya jawab, suspensi ditangani otomatis oleh physics engine, dan pengaruhnya tercermin dalam beban ban sehingga secara alami juga memengaruhi gaya ban

  • Ada presentasi GDC yang bagus tentang fisika kendaraan di Rocket League. Lihat presentasi fisika Rocket League. Sebagai catatan, aku adalah anggota tim yang mengerjakan bagian lain, bukan klien game Rocket League itu sendiri

  • Saat membaca ini, aku jadi teringat sebuah presentasi bagus tentang fisika balap. Lihat Andre Marziali - Physics of Racing