Ke daftar artikel
06/08/20Pengembangan

Kondisi Registrasi Tembak

Bagikan:

Hai, aku Kevin Lee, Software Engineer di tim Game Systems VALORANT. Tim kami bertanggung jawab mengembangkan berbagai sistem inti yang mendukung permainan di VALORANT, termasuk pergerakan, kombat, dan masukan. Dalam artikel ini, aku akan membahas salah satu sistem yang menjadi inti dari permainan FPS: Registrasi Tembak.

Dalam game seperti VALORANT, registrasi tembak bisa dibilang salah satu sistem terpenting karena perbedaan menang dan kalah bisa ditentukan oleh sebuah tembakan kepala. Tujuan kami sebagai pengembang adalah memastikan bahwa saat pemain menembak, hasil tembakan tersebut jelas, terasa pas, dan yang terpenting, tepat.

Kami terkadang melihat postingan atau menerima pesan dari pemain berisi klip yang menunjukkan registrasi tembak bermasalah. Kami menanggapi semua laporan ini dengan serius dan meninjau tiap video frame demi frame untuk memastikan bahwa sistemnya berfungsi seperti seharusnya.

Meski begitu, menurut kami kondisi registrasi tembak di VALORANT saat ini cukup baik. Ya, bug pencilan memang masih ada dan kami akan selalu menanganinya dengan serius. Kami terus berusaha menyempurnakan kualitas dan kejelasan semua aspek di sistem kami.

KETEPATAN VS KEJELASAN

Dalam patch beta 0.50, kami melihat lonjakan laporan terkait masalah registrasi tembak. Setelah meninjau laporan pemain, video, dan pengujian internal secara saksama, kami berhasil menemukan sejumlah bug pencilan pada registrasi tembak, tetapi tak ada yang cukup parah untuk menjelaskan jumlah laporan yang kami terima. Dalam peninjauan lebih dalam, masalah pada sebagian besar klip tersebut ternyata bukan pada ketepatan, melainkan kejelasannya. Tembakannya diproses dengan benar, tetapi respons visual tembakan tersebut menampilkan hasil yang menyesatkan kepada pemain. Ini menyoroti perbedaan penting antara ketepatan dan kejelasan.

Meski keduanya penting dalam memastikan "rasa" suatu tembakan...

  • Ketepatan mengacu pada hasil tembakan yang salah (contohnya, peluru mengenai kepala tetapi diregistrasi sebagai tembakan badan, atau pemain musuh tampak berbeda di klien dengan di server)
  • Kejelasan mengacu pada presentasi tembakan yang sulit dikenali (contohnya, peluru mengenai pundak, tetapi respons visual membuat peluru seakan mengenai kepala)
  • Bug ketepatan lebih parah daripada bug kejelasan

Kami harap artikel ini akan memberi sedikit pencerahan tetang sistem ini agar semua bisa meninjau kembali permainan mereka dan memahami apa yang sebenarnya terjadi pada layar mereka terkait tembakan mereka. Aku akan membahas cara kerja sistem ini pada tingkat tinggi dan menjelaskan apa yang terjadi dari saat tombol tembak ditekan sampai saat tembakan kepala ditampilkan.

Untuk pembahasan teknis yang lebih mendalam, kunjungi artikel ini tentang netcode VALORANT di Blog Teknologi Riot.

Aku juga akan membahas sejumlah kasus umum yang bisa kita lihat terkait laporan "kerusakan registrasi tembak" dan mencoba menjelaskan apa yang terjadi serta apa yang kami lakukan untuk meningkatkan kejelasan dalam skenario tersebut.

DARI KLIK HINGGA TEMBAK KEPALA

Sebelum kami membahas apa yang terjadi saat peluru ditembakkan, penting untuk memahami cara game menyimulasikan kondisi yang terjadi. Permainan VALORANT disimulasikan dua kali: satu kali di server (otoritas atas bagaimana simulasi dijalankan) dan satu kali di klienmu (memprediksi hasil dari server untuk membuat game terasa lebih responsif).

Simulasi game mencakup segala aspek yang menghasilkan dunia yang bersangkutan, termasuk semua posisi pemain, semua kemampuan yang melayang di udara, dan semua asap di medan perang. Untuk tiap frame, game mengambil cuplikan dari simulasi tersebut dan menggunakannya untuk me-render frame di layarmu. Server juga melakukan ini untuk tiap frame di dalamnya (melewati tahap render karena tak ada yang menonton di server).

Bayangkan, seorang musuh mengintip dari sudut. Dengan penempatan penanda sasaranmu yang luar biasa, seketika bidikanmu sudah terkunci ke kepalanya, jadi kamu menekan tombol kiri mouse untuk menembak. Apa yang terjadi?

hit_reg_flow.jpg

Begitu kamu menekan tombol, masukan dikirim ke sistem masukan kami (tergantung pada sejumlah kecil latensi perangkat keras/sistem operasi). Untuk tiap frame dalam game, sistem masukan akan memproses semua masukan yang diterima sejak frame sebelumnya. Saat kamu menembak, masukan "tembak" tersebut dikirim ke server bersama dengan penanda waktu untuk frame mana di simulasi tersebut tembakan terjadi.

Penting untuk diperhatikan bahwa penanda waktu ini didasarkan pada apa yang saat itu di-render di layarmu saat masukan diterima oleh VALORANT. Kita sekarang harus mengikuti tembakan tersebut pada dua simulasi yang berbeda: di klien dan di server.

Mari mulai dengan klien, atau komputermu. Segera setelah tembakan dikirim ke server, klien mulai bekerja menampilkan kilat moncong dan pelacak tembakan. Dalam kondisi tercepat, hal ini akan terjadi satu frame setelah masukan darimu dijalankan karena game perlu me-render frame baru ke layarmu. Hal ini penting karena artinya frame tempat tembakan diproses BERBEDA dengan frame tempat pelacak ditampilkan, yang sebenarnya setidaknya satu frame sebelumnya.

Terkadang hal ini bisa menyebabkan masalah dalam kejelasan tembakan. Cara umum untuk mengatasi ketakselarasan ini adalah dengan memperlambat peluru. Kami tak melakukan ini karena memperlambat peluru meningkatkan latensi mauskan, yang ingin kami minimalkan di VALORANT. Mengenai konfirmasi tembakan, klien menunggu hasil respons dari server sebelum menampilkan konfirmasi tembakan. Untuk menjamin konsistensi bagi semua pengguna dan mencegah pemain curang meretas klien mereka untuk memberikan hasil tembakan palsu, hasil tembakan sepenuhnya server otoritatif.

Sementara itu, server pada akhirnya menerima pesan dari klien bahwa sebuah tembakan sudah dilakukan. Karena latensi internet, waktu sudah berlalu sejak tembakan ini dilakukan. Untuk memastikan bahwa tembakan ini dilakukan pada simulasi yang sama dengan yang ditampilkan kepada pemain, server memutar ulang simulasi ke penanda waktu yang diberikan oleh klien sebelum mengevaluasi registrasi tembak. Hal ini mencakup pemutaran ulang posisi pemain dan pose animasi. Selanjutnya, server mengirimkan hasil tembakannya kembali ke klien. Sebagai contoh, anggaplah hasilnya adalah tembak kepala!

Klien akan menerima pesan dari server tentang hasil tembakannya, lalu memutar VFX dan audio yang sesuai. Dalam kasus ini, VFX dan audio tembak kepala akan diputar. Karena klien harus menunggu server menjawab hasil tembakan, terdapat jeda antara pelacak dan efek tembakan dengan durasi sesuai round trip time koneksimu (contohnya, 40 md ke server = jeda 80 md antara pelacak dan VFX tembakan), ditambah sejumlah kecil waktu pemrosesan. Pada latensi yang lebih tinggi, jeda ini menjadi sangat terasa dalam waktu nyata.

Ini adalah sesuatu yang terus-menerus kami perbaiki dari sudut pandang kejelasan.

STUDI KASUS 1: Menembak target bergerak

Case_Study_1.gif


Dalam banyak laporan terkait registrasi tembak, kami melihat bahwa target tembakan sedang berlari. Mari lihat lebih dekat pada apa yang terjadi secara visual saat suatu tembakan berhasil mengenai target yang sedang berlari. Kita lihat pemain berhasil mendapatkan tembak kepala pada pemain yang berlari. Demi memudahkan ilustrasi masalah dalam contoh ini, klien berjalan di 60 FPS. Kamu bisa melihat bahwa di frame sebelum pelacak ditembakkan, penanda sasarannya sejajar dengan kepala musuh.

case-study-1_frame-1.jpgcase-study-1_frame-2.jpg

Walau begitu, pada frame saat pelacaknya keluar, kondisinya sudah berbeda.

case_study_1_part_2.gif

Klip kedua menampilkan skenario yang sama, tetapi tembakannya hampir meleset dari target. Saat melihat videonya frame demi frame, kamu bisa melihat bahwa yang terjadi adalah sebaliknya: penanda sasaran tak membidik kepala di frame sebelum pelacak keluar, tetapi membidik kepala di frame saat pelacaknya keluar. Sekilas, kamu mungkin berpikir untuk menunjuk ke frame dengan pelacak dan berkata, "Lihat, ini jelas-jelas tembakan kepala!" Saat meninjau video atau tayangan ulang, kita harus melihat ke frame sebelum pelacak keluar untuk mendapat gambaran akurat tentang kapan tembakan dilakukan.

case-study-1_part2_frame-1.jpgcase-study-1_part2_frame-2.jpg
case-study-1_part2_no-hit-vfx.jpg

Ayo kita kembali ke contoh saat tembakannya kena dan lihat frame saat VFX tembakan mengenai sasaran di-render. Terdapat jeda yang nyata antara lokasi pemain saat ini dan lokasi VFX tembakan mengenai sasaran karena jeda yang disebabkan oleh latensi internet. Hal ini mungkin membingungkan saat kamu berusaha memahami apa yang terjadi pada tembakanmu, karena kamu kemungkinan besar berfokus pada lokasi musuh saat itu, bukan lokasi saat tembakan dilakukan. Hal ini juga bisa mengakibatkan kebingungan lebih lanjut dalam skenario merunduk/berondongan (yang akan kita tinjau dalam Studi Kasus 2).

case-study-1_part2_frame-where-hit-vfx-rendered.jpg

Studi kasus ini mengilustrasikan kurangnya kejelasan pada sistem registrasi tembak saat ini. Idealnya, kamu seharusnya tak perlu memahami semua informasi latar belakang ini untuuk bisa membaca situasi dengan jelas. Sebagai pengembang, kami mengakui adanya masalah ini dan mencari cara untuk meningkatkan kejelasan dalam kasus tersebut.

STUDI KASUS 2: VFX merunduk lalu menembak

Jadi, kamu memasuki baku tembak jarak jauh. Hal ini nantinya kamu sesali, tetapi saat ini kamu menahan klik kiri dan memberondong senapanmu. Setidaknya salah satu peluru itu akan mengenai kepala, 'kan? Sayangnya tidak, kamu menghasilkan 3 tembak badan dengan Vandal, menghasilkan 117 kerusakan, sebelum menerima satu tembakan kepala dari lawan.

Merasa kesal, kamu meninjau kembali tayang ulangnya setelah game dan yakin terjadi registrasi tembakan yang buruk. Kamu melihat pemain musuh merunduk demi menghindari tembakanmu. Kamu pun terkejut saat melihat VFX tembakan kena di atas kepala lawan saat dia merunduk. Tetapi laporan kombatmu hanya menunjukkan tembakan badan! Ada apa ini??

Berikut ini tautan ke postingan tersebut di reddit berjudul "Headshots not registering when a player crouches (Tembakan kepala tak teregistrasi saat pemain merunduk)" dari kasus hipotetis ini.

Saat tim kami meninjau laporan registrasi tembakan yang buruk, situasi seperti ini adalah yang paling sering terjadi dalam kasus saat registrasi tembakan tampak tak benar. Faktanya, registrasi tembakan berfungsi dengan benar. Peluru mengarah ke tempat kamu membidik (mengabaikan sebaran atau masalah pergerakan) saat kamu menekan tombol tembak, dan tembakan tersebut teregistrasi dengan akurat di server

Namun, sejumlah faktor menyebabkan kasus seperti ini jadi menyesatkan secara visual:

  1. VFX tembakan kena mengalami jeda karena latensi internet
  2. VFX tembakan kena ditampilkan di lokasi awal tempat peluru kena
  3. Target sedang bergerak (biasanya merunduk)
Case_Study_2.gif

Sebagai contoh lain, anggap saja pemain memiliki 50 ping. Tembakan pemain mengenai bahu pemain musuh. Karena harus menunggu server mengonfirmasi tembakan, kita harus menunggu 100 md sebelum VFX tembakan kena diputar di lokasi tembak badan. Namun, selama 100 md tersebut, pemain musuh sudah mulai merunduk, menggerakkan kepalanya persis ke belakang VFX tembakan kena yang baru muncul. Pada jarak jauh dan dalam sengitnya baku tembak, VFX tembak badan bisa disalahartikan sebagai VFX tembak kepala.

case-study-2_cursor-on-body.jpg case-study-2_hit-VFX-on-body-correctly.jpg case-study-2_player-crouches-into-vfx.jpg

Kondisi ini sangat buruk selama patch beta 0.50 saat darah tak sengaja dinonaktifkan untuk semua pemain dan VFX percikan kami kurang jelas dalam membedakan VFX tembak kepala dan tembak badan. Kami selalu memiiki VFX yang berbeda untuk menandai tembak badan vs kepala, tetapi kami menyadari hal ini tak selalu terlihat jelas dalam kombat.

Hal ini adalah masalah dalam kejelasan registrasi tembakan yang secara aktif ingin kami perbaiki. Salah satu bagian yang sedang kami coba adalah mengaitkan VFX tembakan kena ke bagian tubuh karakter tempat tembakan tersebut bersarang agar terdapat keterkaitan yang jelas, meski pada latensi tinggi.

Perbandingan VFX tembak kepala dengan VFX tembak badan tanpa darah saat ini:

headshot-VFX.jpgbody-shot-VFX.jpg

RENCANA PERBAIKAN KEJELASAN

Dua studi kasus tadi menyoroti sejumlah area saat VFX konfirmasi tembakan kena saat ini kurang memadai. Salah satu perubahan yang sedang kami coba adalah memunculkan efek darah dan percikan di posisi karakter saat itu, sesuai dengan bagian tubuh mana yang tertembak, dan mengikutinya saat bergerak. Hal ini meningkatkan kejelasan dengan cukup tinggi dalam situasi seperti dalam studi kasus 2 pada musuh merunduk karena efek visual akan bergerak bersama gerakan tubuh.

Kekurangan dari pendekatan ini adalah kemungkinan VFX konfirmasi tembakan bergerak ke belakang objek penghalang bersama karakter yang terkait dengannya. Bayangkan saat seorang pemain dengan ping 100 md menembak ke pemain yang mengintip bolak-balik di suatu sudut. Jika mereka mendaratkan tembakan pada musuh tersebut dan segera kembali ke belakang penghalang sebelum konfirmasi tembakan dari server tiba, penembak mungkin tak akan melihat konfirmasi tembakan saat VFX tersebut muncul.

Kami mempertimbangkan penambahan beberapa partikel, di antaranya yang mengikuti karakter dan lainnya yang segera muncul di lokasi tembakan, berdasarkan simulasi klien, demi menangani masalah ini. Sebaliknya, hal ini mungkin membingungkan jika simulasi klien dan server tak menemukan kesepakatan terkait hasil tembakan: Efek harus jelas dalam merepresentasikan sesuatu agar mudah memahami hasil suatu tembakan.

Kami terus mengulik hal ini dan perbaikan lain di bidang kejelasan dan berharap akan memiliki pembaruan untuk kejelasan yang bisa segera disampaikan dalam patch mendatang.

TERUSLAH MENGIRIM VIDEO

Semoga artikel ini bisa membantumu lebih memahami cara kerja registrasi tembakan di VALORANT dan lebih memahami alasan tembakan berperilaku seperti saat ini. Teruslah mengirimkan video kepada kami kapan pun menurutmu registrasi tembakan terasa tidak benar dan kami akan berusaha sebisa kami untuk meninjaunya.

Kalau pun pada akhirnya tak ada masalah, videomu membantu kami memantau bug ketepatan registrasi tembakan dengan lebih cepat saat benar-benar terjadi (jantungku juga berdebar-debar tiap kali melihat tulisan "Hit Reg" di postingan reddit yang mendapat banyak vote).

Tautan ini berisi contoh bug registrasi tembak yang salah via reddit.

0