Bagaimana desainer game membuat pola getaran?


13

Saya ingin tahu tentang membuat dan menerapkan pola getaran untuk pengontrol konsol (untuk pengontrol PS4, jika ada bedanya).

Ada parameter delay dan kecepatan motor kan? Tetapi juga kita dapat memudar dari motor kiri ke kanan, atau membuat mereka bekerja bersama ....

Apakah ada cara standar untuk membuat pola-pola itu?

Sebagai contoh saya berpikir tentang membuat mereka dengan stereo wav audio dalam editor audio dan membaca file wav dalam kode saya untuk mengubahnya menjadi penundaan dan kecepatan.

Bagaimana ini dilakukan di industri game?


Saya telah melihat sistem gemuruh didorong melalui saluran audio permainan, sehingga Anda mungkin berada di jalur di sana. Saya tidak dapat berbicara dari pengalaman pribadi tentang detailnya - apakah ada trek gemuruh spesifik atau jika gemuruh disimpulkan dari volume efek suara, atau jika koneksi itu murni untuk memicu suara & gemuruh melalui antarmuka yang konsisten sementara mereka menggunakan sepenuhnya terpisah format data sumber.
DMGregory

Anda tidak memiliki kontrol yang tepat atas keributan. Juga, dalam DualShock, rumbler kiri berat dan yang kanan ringan, sehingga Anda mendapatkan frekuensi rendah dari yang di sebelah kiri. (Saya mungkin memiliki kiri / kanan mundur, tetapi Anda mendapatkan idenya).
Almo

@Almo Bagaimana dengan sistem gemuruh HD Nintendo. Anda pasti memiliki beberapa bentuk kontrol atas hal itu
Bálint

Yang akan mengungkapkan pertanyaan itu terlalu luas. Saya sebenarnya tidak tahu tentang sistem mereka.
Almo

1
@ DMGregory Mesin audio yang saya tahu itu menangani gemuruh / haptics hanya menggunakan pemicu, amplop, dll yang sama - bukan bentuk gelombang audio. Seperti kata Almo, Anda tidak benar-benar memiliki tingkat kontrol di tingkat API. Saya tidak dapat membayangkan sistem Nintendo jauh berbeda - Anda tidak ingin harus memperbarui sistem gemuruh pada frekuensi tinggi di mana data audio yang sebenarnya adalah pilihan yang baik.
Richard Byron

Jawaban:


8

Kontroler dualshock PS4 memiliki nilai 1 byte untuk paket gemuruh kiri dan kanan, jadi ini pada dasarnya berfungsi seperti musik 8 bit.

Sebagian besar berada di belakang NDA, jadi sangat sulit untuk mendapatkan informasi tentang ini (bahkan informasi di atas sulit didapat, saya hanya mengetahuinya dari SDK pihak ketiga untuk node.js). Ini adalah informasi yang saya kumpulkan bersama:

Prosesnya secara harfiah seperti membuat musik stereo 1 byte (dan seharusnya dibuat oleh artis musik). Ini melibatkan menghubungkan pengontrol PS4 ke komputer dan menggunakan program untuk membuat pola gemuruh. Mereka membuat satu berdasarkan menebak, kemudian menjalankannya, kemudian men-tweak dan ulangi langkah-langkah ini sampai polanya terasa baik.

Beberapa keributan dihasilkan secara terprogram (seperti ketika mobil keluar dari jalan), tetapi ini biasanya berupa fungsi sederhana (seperti sinus) atau nilai konstan yang serupa dengan cara ponsel melakukannya. Bahkan efek yang paling kompleks terdiri dari mengalikan pola gemuruh yang dinormalisasi dengan kekuatan yang Anda inginkan.

SDK PS4 juga dilengkapi dengan beberapa pola yang telah ditentukan. Beberapa contoh adalah: pola gigi gergaji (terus meningkat, kemudian berubah dari 255 menjadi 0), gelombang sinus dan segitiga (meningkat menjadi 255 linear, kemudian kembali turun ke 0 linear).

Saya tidak dapat menemukan rincian tentang pengontrol lain (terutama HD Switch yang bergemuruh, bahkan patennya tidak menjelaskan cara kerjanya). Tapi mereka mungkin menggunakan pendekatan yang sama dengan paket gemuruh yang lebih tepat.

Sumber:


Saya menemukan artikel ini beberapa waktu lalu yang memaparkan struktur laporan untuk berkomunikasi bolak-balik ke controller , termasuk offset byte dari saluran yang bergemuruh dan bendera yang mengendalikannya. Ini mungkin yang paling komprehensif yang tersedia di Internet publik, tanpa akses ke dokumentasi & API Sony sendiri.
DMGregory

@DMGregory Apakah Anda keberatan jika saya menambahkannya ke bagian sumber?
Bálint

Silakan lakukan. :) Saya membagikannya dengan harapan bisa berguna.
DMGregory

4

Tidak ada cara standar.

Perangkat yang berbeda memiliki kemampuan dan keterbatasan gemuruh yang berbeda.

Sebagian besar perangkat tidak mendukung "umpan balik kekuatan" yang sebenarnya (misalnya: roda kemudi yang ketika menekan trotoar / lubang akan memungkinkan programmer untuk mendorong kembali ke sudut tertentu) tetapi hanya bergemuruh di beberapa arah yang tidak terkendali / sewenang-wenang.

Jadi sebagian besar fitur Force Feedback yang disebutkan di MSDN / DirectX dan API lainnya tidak pernah benar-benar terwujud dalam praktik di pasar pengguna atau memiliki fitur yang buruk dan / atau tidak portabel. implementasi dari kontrol "pintar" (amplop, ulangi, dll) sebagai menjadi sangat tidak dapat digunakan sehingga dalam praktiknya pengembang sering dipaksa untuk hanya menggunakan kontrol ON / OFF secara langsung dengan implementasi efek mereka sendiri.

Perangkat yang lebih maju yang memungkinkan umpan balik kekuatan yang dikendalikan servo membutuhkan API khusus karena API input umum tidak mendukung parameter yang diperlukan (sudut yang tepat, gaya yang tepat, batas, dll.).

Menambahkan teknologi yang muncul seperti VR sarung tangan perasaan ke dalam campuran membuat API generik itu bahkan lebih kurang.


Implementasi yang paling umum adalah dengan dua motor DC dengan masing-masing beban yang tidak seimbang, satu berbobot lebih berat dari yang lain dan tanpa kontrol kecepatan yang tepat.

Minimal Anda memiliki kontrol on / off atas mereka dan dapat melakukan beberapa kontrol daya PWM terbatas tetapi tidak kontrol kecepatan yang tepat. Anda tidak tahu berapa kecepatan dan getaran yang dihasilkan sebenarnya. Pengontrol yang berbeda memiliki motor dan bobot yang berbeda yang akan berjalan pada kecepatan yang berbeda untuk pengaturan yang sama.

Motor harus berputar pertama dan membutuhkan daya penuh untuk sedikit waktu kemudian dapat PWM ke pengaturan yang lebih rendah. Penundaan spin up sangat membatasi daya tanggap.

Kontroler sering diperbarui sekali per frame yang memberi Anda frekuensi pembaruan sekitar 20Hz hingga 100Hz. Ini membatasi resolusi kontrol PWM Anda karena Anda tidak ingin motor berhenti pada pengaturan terendah. Dan Anda tidak tahu seberapa rendah motor pengontrol pengguna akhir dapat pergi sebelum berhenti (berhenti) sehingga Anda membutuhkan margin keamanan yang baik.

Beberapa persyaratan sistem membatasi apa yang dapat Anda lakukan dengannya.

Perangkat seluler biasanya hanya memiliki 1 motor getaran dan PWM mungkin tidak dapat dilakukan karena inersia rendah dari ukuran bobot dan laju pembaruan yang lambat. Sistem dapat memfilternya lebih lanjut untuk mencegah penyalahgunaan atau bahkan kerusakan (batas transistor driver daya dan lonjakan induksi) atau hanya subsistem GPIO yang sangat lambat.

Di ponsel, Anda mungkin terbatas atau ingin membatasi diri untuk "bergetar sekitar X * 50 milidetik" tanpa PWM.

Beberapa perangkat dan pengontrol yang lebih baru memiliki solenoid yang digerakkan seperti speaker oleh gelombang audio sampel tingkat rendah. Ini memberi Anda lebih banyak kontrol tetapi sama sekali berbeda dari pengendali yang lebih umum.


Karena semua perbedaan ini Anda mungkin ingin abstrak sistem getaran untuk memainkan sejumlah tingkat tinggi makro-efek dengan nama dalam tembak-dan-lupa mode: PlayVibration(player, "Got Loot");, PlayVibration(player, "Heavy Fall");, StopAllVibrationFor(player);, ...

Maka Anda harus membuat efek getaran level rendah dan kode kontrol getaran yang disesuaikan untuk setiap platform secara individual .

Bahkan untuk gim musik yang memanggil satu-shot PlayVibrationuntuk setiap ketukan lebih mudah untuk dikelola dan dikontrol ketika mempertimbangkan menghentikan permainan dan masalah sinkronisasi ulang generator efek periodik calon cerdas.

Sementara perangkat dengan gemuruh yang didorong solenoid yang sebenarnya dapat diperlakukan seperti perangkat audio dan menggunakan API audio karena masalah baterai, hal ini dapat bertentangan dengan peraturan sistem jika solenoid terus-menerus diaktifkan / aktif . "Level Daya 0" mungkin tidak sama dengan "Solenoid Off" sehingga dibutuhkan perawatan khusus.


3

Dari André LaMothe dalam Trik Guru Pemrograman Game Windows:

Pemrograman perangkat ini sangat kompleks. Tidak hanya pemahaman yang baik tentang kekuatan, pegas, dan gerakan yang dibutuhkan, tetapi perangkat dan peristiwa gaya, atau efek, memiliki hubungan yang sangat dekat dengan not musik. Artinya, mereka dapat memiliki amplop yang memodulasi gaya saat mereka diterapkan pada berbagai motor dan aktuator pada joystick. Dengan demikian, nilai-nilai seperti kecepatan, frekuensi, waktu, dan sebagainya semuanya memainkan peran dalam menggunakan dan memprogram umpan balik kekuatan.

Sementara teks itu agak tua, pencarian cepat melalui MSDN untuk umpan balik paksa menunjukkan konsep yang disebutkan tidak banyak berubah; inilah ringkasan topik yang dibahas dalam Konsep Dasar Umpan Balik :

  • Gaya konstan: Gaya stabil dalam satu arah
  • Gaya ramp: Gaya yang terus meningkat atau menurun dalam besarnya.
  • Efek periodik: Gaya yang berdenyut sesuai dengan pola gelombang yang ditentukan.
  • Kondisi: Reaksi terhadap gerakan atau posisi sepanjang sumbu.
  • Amplop: Amplop menentukan nilai serangan dan nilai pudar, yang mengubah besarnya efek awal dan akhir.
  • Offset: Menentukan jumlah perpindahan gelombang naik atau turun dari level dasar.
  • Skala: Nilai perolehan tunggal dapat diterapkan ke semua efek untuk perangkat.

Dalam hal PS4, satu-satunya hal yang saya temukan adalah beberapa dokumentasi Unreal Engine 4 , yang menyatakan:

Ini (pengidentifikasi) akan dipetakan sesuai dengan implementasi spesifik platform. Misalnya, PS4 hanya mendengarkan saluran XXX_LARGE dan mengabaikan sisanya, sedangkan XBox One dapat memetakan XXX_LARGE ke motor pegangan dan XXX_SMALL ke motor pemicu. Dan iOS dapat memetakan LEFT_SMALL ke motor tunggal.

Seperti yang ditunjukkan oleh Stephane Hockenhull, setiap platform berbeda. Dan seperti yang disarankan dalam obrolan GDSE , mungkin detail untuk umpan balik kekuatan PS4 dibatasi NDA.

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.