Bagaimana cara kerja peluru di video game?

Game FPS (first-person shooter, first-person shooter) telah menjadi bagian integral dari industri video game sejak munculnya Wolfenstein 3D paling populer pada tahun 1992. Sejak itu, genre telah berevolusi: grafik telah meningkat, anggaran pembangunan telah meningkat, dan ekosistem e-sports telah berkembang. Tapi bagaimana dengan yayasan mereka - mekanik menembak? Bagaimana perkembangan di bagian depan ini? Mengapa senjata tampak nyata di beberapa gim, dan seperti mainan di gim lain?

Hitscan


Di era sebelumnya, banyak game untuk merender adegan 3D menjadi gambar 2D menggunakan teknik yang disebut raycasting . Raycasting memungkinkan mesin untuk menentukan objek pertama yang bersinggungan dengan balok. Tetapi kemudian para pengembang mengajukan pertanyaan: "Bagaimana jika Anda melepaskan sinar dari laras senjata untuk mensimulasikan peluru?" Berkat ide ini, hitcan telah lahir ("pemindaian hit").


Contoh raycasting

Dalam sebagian besar implementasi senjata dengan hitscan, ketika pemain menembak, mesin fisik melakukan operasi berikut:

  • Menentukan arah penunjuk senjata.
  • Rilis sinar dari laras senjata pada jarak yang telah ditentukan.
  • Menggunakan raycasting untuk menentukan apakah suatu sinar telah mengenai objek.

Jika mesin menentukan bahwa benda itu ada di garis api, maka dia akan memberitahukan kepadanya tentang hal ini, dengan mengatakan bahwa peluru itu β€œmengenai” dia. Kemudian target dapat melakukan semua perhitungan yang diperlukan untuk mencatat kerusakan.


Dari Unity . Titik A menunjukkan senjata yang memancarkan sinar ke titik maksimum B. Balok bertabrakan dengan kubus yang dilaporkan oleh mesin bahwa benda itu ditabrak.

Hitscan pada dasarnya sederhana, tetapi banyak modifikasi dapat dibuat untuk menambahkan logika lain:

  • Jika kita melanjutkan sinar di luar objek pertama yang terkena, kita dapat menembus beberapa objek di garis, seperti railgun di Quake
  • Jika kami menghapus rentang maksimum dari sinar, maka kami mendapatkan laser yang akan terbang selamanya hingga menyentuh sesuatu
  • Anda secara terprogram dapat membuat beberapa permukaan reflektif sehingga peluru memantul darinya


Overwatch. Kemampuan membelokkan karakter Genji adalah contoh permukaan reflektif.

Keuntungan utama dari raycasting adalah kecepatan pemrosesan yang luar biasa. Ini dengan cepat dihitung dan tidak memerlukan memori tambahan atau waktu prosesor untuk membuat objek fisik baru. Ini berarti bahwa kode jaringan yang diperlukan untuk menyinkronkan banyak klien akan minimal, karena server hanya perlu melacak arah berkas. Recoil juga disadari secara sederhana, untuk mensimulasikan efek ini, cukup dengan menambahkan sedikit penyimpangan dalam pandangan senjata.

Oleh karena itu, tidak mengherankan bahwa hitscan digunakan dalam logika penembakan banyak game. Contoh klasik adalah Wolfenstein 3D dan Doom , tetapi teknologi ini juga digunakan dalam game modern. Karakter seperti Soldier 76, McCree, dan Overwatch Doom Widow menggunakan senjata dengan Hitscan, dan sebagian besar senjata di Call of Duty juga didasarkan pada Hitscan.




Overwatch, Call of Duty, Wolfenstein 3D

Jadi mengapa pendekatan ini tidak digunakan di semua gim?

Pertama, seperti yang mungkin Anda perhatikan, sinar memiliki kecepatan gerakan yang sangat tinggi, yaitu, mereka langsung mencapai titik akhir. Tidak ada waktu untuk pergerakan peluru antara peluru yang ditembakkan dan mengenai suatu benda. Ini berarti bahwa jika sebuah sinar menabrak sebuah benda, mustahil untuk menghindari peluru, bahkan jika targetnya beberapa kilometer dari pemain.


Halo. Perhatikan bahwa moncong flash dan efek dari memukul tanah terjadi secara bersamaan.

Kedua, sebagian besar implementasi hitcan menggunakan sinar langsung. Ini berarti sulit untuk memperhitungkan angin, gravitasi, dan faktor eksternal lainnya yang dapat memengaruhi peluru setelah terbang keluar dari bagasi. Pemrogram dapat menambahkan segala macam trik sehingga balok meniru peluru nyata, tetapi begitu pemain "menembak" balok, tidak ada cara untuk mengubah jalurnya di tengah.

Dalam banyak game kasual, hitscan masih digunakan karena menyederhanakan kurva belajar untuk sebagian besar pemain baru. Tapi bagaimana dengan game yang ingin menyampaikan sensasi pemotretan yang "nyata"? Dengan pembatasan seperti itu, ini tidak mungkin dicapai, sehingga diperlukan metode yang berbeda.

Balistik Objek Terbang


Istilah ini mungkin tampak rumit, tetapi pada tingkat abstrak, idenya cukup sederhana. Setiap peluru atau peluru yang ditembakkan dari senjata menciptakan objek fisik baru di TKP. Ini memiliki massa sendiri, kecepatan dan kotak pembatas dari kontak (hitbox), yang dilacak oleh mesin permainan.


Max Payne 3

Manfaat balistik dimanifestasikan sepenuhnya dalam permainan di mana realisme memiliki prioritas tertinggi. Karena setiap objek terbang ada dengan sendirinya, kita dapat memperhitungkan pengaruh angin, gesekan, gravitasi, suhu - segala kekuatan yang seharusnya bekerja pada peluru. Sekarang kita dapat mengubah fisika, pemain dapat menggunakan senjata yang lebih beragam, bukan hanya pistol dan laser sederhana; kita bisa menambahkan granat dan roket ke gudang senjata kita.

Karena peluru dalam sistem semacam itu tidak bergerak dengan kecepatan cahaya, juga dimungkinkan untuk mewujudkan sifat-sifat duniawi:

  • Bullet Time digunakan oleh Max Payne , Sniper Elite dan Superhot .
  • Waktu tempuh peluru, yaitu, ketika menembakkan jarak jauh (atau ketika menembakkan proyektil yang bergerak lambat), preemption menjadi kritis.
  • Ledakan shell yang tertunda, seperti granat

Karena perhitungan tambahan ini, pemrosesan menjadi lebih mahal daripada menggunakan hitscan. Untuk memastikan sinkronisasi, server harus melakukan lebih banyak pekerjaan, perlu untuk menghilangkan perbedaan atau konflik dalam logika di sisi klien, sehingga semua pemain dalam server yang sama berada dalam kondisi yang sama.




Superhot, Battlefield 1, Overwatch

Ada banyak solusi untuk memaksimalkan produktivitas. Misalnya, mesin dapat menyimpan kumpulan benda yang dimuat sebelum dimulainya permainan dan "nyalakan" jika diperlukan. Setelah menyentuh permukaan, Anda dapat memainkan animasi balistik dan mematikan peluru, menyimpannya untuk masa depan. Metode ini memungkinkan Anda untuk menghemat sumber daya komputasi dan memori yang ditempati oleh banyak penciptaan dan penghancuran objek.

Ada juga banyak cara untuk melakukan perhitungan, tetapi pada tingkat tinggi, perbedaannya terletak pada di mana mereka memutuskan untuk memproses "kebijaksanaan" permainan - satu unit waktu:

  • Jam dihitung secara terpisah dari logika render, yaitu, gim akan memiliki reproduksi objek yang lebih akurat bahkan ketika bingkai dilewati. Lebih banyak logika diperlukan untuk menghitung waktu yang tepat berlalu sejak rendering sebelumnya.
  • Perhitungan ukuran di setiap frame; mengikat fisika ke frame rate. Jika Anda menonaktifkan batasan pada frame rate maksimum atau jika game mulai melewatkan frame, maka fisika dunia akan mempercepat atau memperlambat.

Efek dari mengaitkan gerakan dengan tindakan terlihat jelas ketika cangkang bergerak cukup cepat untuk menempuh jarak yang cukup besar antar langkah. Situasi mungkin muncul ketika benda "melewati" satu sama lain, karena dalam mesin mereka tidak pernah berpotongan.

Ini semua tampaknya rumit, begitu banyak orang berpikir ini adalah metode yang relatif baru; Namun, itu sebenarnya terjadi sebelum hitscan! Sebelum game FPS, ada banyak penembak top-down seperti Asteroid , Space Invaders atau Galaxian . Ini adalah game arcade tahun 70-an, di mana balistik cangkang telah diterapkan, meskipun cukup primitif.


Asteroid. Kerang cukup sulit untuk dilihat, tetapi mereka!

Tetapi bahkan dengan semua fitur ini, kita tidak dapat menciptakan model realistis dari dunia nyata. Apakah ada cara untuk memanfaatkan kedua metode ini?

Sistem hibrida


Sebagian besar mesin gim mampu menangani kedua jenis simulasi peluru: hitscan dan balistik. Ini memungkinkan Anda untuk mewujudkan banyak pilihan senjata; game seperti Halo , GTA, dan Half-Life memiliki senjata yang dapat mendukung kedua jenis fisika.



Halo. Assault Rifle menggunakan Hitscan; Needler menggunakan proyektil balistik

Pengembang juga dapat menggabungkan kedua teknik untuk menutupi kelemahan masing-masing sistem dan memberikan perilaku yang lebih realistis. Misalnya, untuk menghilangkan masalah benda yang saling melintas, setiap peluru di setiap siklus mesin dapat memancarkan sinar. Ini memungkinkan mesin untuk melihat apakah ada sinar yang berpotongan di antara langkah-langkah, bertabrakan di udara.

Mereka juga dapat digabungkan untuk meningkatkan fitur permainan. Sebuah contoh bagus dari ini adalah seri Sniper Elite ; setelah menarik pelatuk, mesin menggunakan hitcan untuk menentukan apakah tembakan dibuat cukup dekat dengan objek yang dapat dideteksi untuk memicu gerakan lambat. Jika demikian, maka peluru ditembakkan dengan perhitungan balistik dalam mode "waktu-peluru".


Elite penembak jitu

Jadi, kami memeriksa dasar-dasar perilaku peluru di video game! Menariknya, perbaikan di bidang ini terutama dalam optimasi dan perbaikan kecil, dan tidak dalam pemrosesan skala besar. Setelah merilis beberapa game revolusioner pertama, kami tidak membuat langkah atau terobosan signifikan.

Apa selanjutnya Bagaimana bidang ini akan berkembang di masa depan?

Saya tidak berpikir bahwa dalam waktu dekat pendekatan hybrid akan hilang, karena memberikan manfaat tambahan. Tetapi saya memperkirakan bahwa akan ada banyak perbaikan pada bagian balistik cangkang. Frekuensi perhitungan jam terus meningkat (karena daya CPU tumbuh), dan kita bisa lebih dekat dengan batas asimtotik dari simulasi peluru "dunia nyata".

Source: https://habr.com/ru/post/id475420/


All Articles