Setelah rilis
Uncharted 4, saya sudah dapat berbicara tentang apa yang saya kerjakan dalam proyek ini. Pada dasarnya, saya mengembangkan AI untuk rekan satu tim pemain dalam mode pemain tunggal dan asisten dalam banyak pemain, dan juga bekerja sedikit pada logika gameplay. Saya akan menghilangkan aspek-aspek yang tidak sampai ke permainan selesai dan beberapa detail kecil.
Jadi, kami melanjutkan:
Sistem pos
Sebelum memulai, saya ingin berbicara tentang sistem pos yang digunakan oleh NPC. Saya tidak bekerja pada logika inti dari sistem ini, tetapi membantu menulis kode klien yang menggunakannya.
Posting adalah posisi terpisah di ruang navigasi NPC, terutama dibuat oleh alat pengembangan dan ditempatkan secara manual oleh desainer. Bergantung pada kebutuhan kami, kami dapat membuat penyeleksi pos yang berbeda untuk mengevaluasi berbagai jenis pos (misalnya, pemilih pos siluman, pemilih pos tempur) dan memilih pos berperingkat tertinggi untuk mengirim NPC di sana.
Rekan tim mengikuti pemain
Sistem untuk mengikuti rekan satu tim untuk pemain diambil dari
The Last of Us .
Gagasan utama adalah bahwa rekan tim memilih di sekitar pemain posisi yang akan diikuti. Posisi potensial ini berbeda dari pemain dan harus memenuhi pemeriksaan berikut untuk kebebasan jalur lurus: dari pemain ke posisi, dari posisi ke posisi yang diproyeksikan ke depan, dari posisi yang diproyeksikan ke pemain.
Tidak seperti The Last of Us, Uncharted 4 memiliki aspek memanjat. Untuk mengintegrasikan pendakian ke dalam sistem tindak lanjut pemain, kami telah menambahkan pemilih pos pendakian yang memilih titik di mana rekan satu tim harus bergerak ketika pemain memanjat batu.
Tugas ini lebih sulit dari yang kami harapkan. Itu tidak cukup hanya dengan memesan mitra untuk menggunakan logika mengikuti berikut ketika pemain tidak naik, dan mengubah posting ketika pemain merangkak di sepanjang dinding. Jika seorang pemain dengan cepat beralih antara keadaan normal dan memanjat, mitra mulai terombang-ambing di antara kedua kondisi ini. Oleh karena itu, kami menambahkan histeresis: mitra sekarang dapat mengubah status hanya ketika pemain telah mengubah status dan bergerak cukup jauh di status ini. Secara umum, histeresis adalah teknik yang baik untuk menghindari "lompatan perilaku".
Berjalan di depan rekan setim
Kami ingin rekan tim menunjukkan pemain jalan di beberapa titik dalam permainan. Sistem ini diambil dari The Last of Us dan ditingkatkan: desainer menggunakan splines untuk menguraikan jalur umum di mana rekan satu tim harus memimpin pemain ke depan.
Jika ada beberapa jalur pada level tersebut, para desainer mengatur beberapa spline dan menghidupkan / mematikannya menggunakan skrip.
Posisi pemain diproyeksikan ke spline, dan titik referensi pelacakan pemain ada di depan, pada jarak yang dapat disesuaikan oleh para desainer. Ketika titik referensi pelacakan ini melewati titik referensi spline, ditandai sebagai titik tunggu, mitra mulai bergerak ke titik tunggu lain. Jika pemain memutuskan untuk kembali, maka pasangan mulai kembali hanya ketika titik pelacakan dukungan terlalu jauh dari titik tunggu yang paling jauh, dilewati dalam proses gerakan maju terakhir. Dengan demikian, histeresis terbentuk lagi, menghindari perubahan tajam dalam keadaan.
Kami juga membangun kecepatan dinamis sistem pelacakan. Berdasarkan jarak antara mitra dan pemain, "pesawat kecepatan" terletak di sepanjang spline. NPC dapat menggunakan tiga jenis gerakan: berjalan, berlari, dan berlari. Bergantung pada bidang kecepatan di mana pemain berada, mitra memilih jenis gerakan yang sesuai untuk menjaga jarak yang diperlukan ke pemain. Sesuai dengan visi mereka, desainer dapat mengaktifkan dan menonaktifkan pesawat kecepatan. Selain itu, tergantung pada jarak ke pemain, kecepatan animasi gerakan mitra sedikit meningkat atau menurun untuk menghindari perubahan tajam dalam kecepatan gerakan saat beralih di antara jenis gerakan.
Berbagi Tempat Tinggal
Dalam The Last of Us, pemain dapat bergerak relatif terhadap pasangannya, sambil tetap menutupinya. Ini disebut tempat penampungan umum.
Dalam The Last of Us, Joel lebih jauh dari dinding tempat perlindungan daripada Ellie atau Tess, dan ini masuk akal karena mereka lebih kecil dari Joel. Tetapi bagi Nate, Sam, Sally dan Elena, ini akan terlihat tidak alami, karena mereka memiliki ketinggian yang hampir sama. Selain itu, Uncharted 4 adalah game yang jauh lebih cepat, dan jika Nate mengulurkan lengannya bergerak di belakang rintangan, itu akan merusak kelancaran gerakan. Karena itu, kami memutuskan bahwa para mitra hanya akan bersandar di dinding tempat penampungan, dan Nate akan sedikit membungkuk di sekitar mereka ketika bergerak.
Di sini kami menggunakan logika yang sangat sederhana. Jika posisi pemain diproyeksikan, dengan mempertimbangkan kecepatannya, jatuh ke perbatasan persegi panjang di sekitar pos perlindungan mitra, maka mitra menyelesaikan perilaku saat ini di belakang rintangan dan ditekan ke dinding shelter.
Asisten medis
Asisten medis dalam mode multi-pengguna memerlukan perilaku yang sama sekali baru yang tidak tersedia dalam mode single-user: mereka harus membangkitkan teman yang kalah dan menyalin perilaku pemain di belakang tempat penampungan.
Dokter mencoba untuk meniru perilaku pemain di belakang tempat penampungan dan sedekat mungkin dengan pemain, sehingga jika seorang pemain cedera mereka akan berada di dekatnya dan membangkitkannya. Jika sekutu terdekat terluka, mereka juga akan membangkitkan sekutu, asalkan pemain masih hidup. Jika pemain dilengkapi dengan mod RevivePak untuk petugas medis, maka sebelum mereka lari ke sekutu untuk kebangkitan, mereka akan mencoba untuk melemparkan RevivePak pada sekutu (beberapa kebangkitan yang dilakukan secara bersamaan mempercepat proses kebangkitan); saat melempar RevivePak, logika melempar granat digunakan, khususnya, memeriksa kebebasan lintasan dan memainkan animasi, hanya granat yang digantikan oleh RevivePak.
Rumput untuk diam-diam
Mekanik baru Uncharted 4 juga gerakan rahasia di rumput. Untuk mengimplementasikannya, kami perlu menandai lingkungan sehingga logika permainan pemain akan mengetahui apakah pemain ada di rumput. Awalnya, kami ingin seniman latar belakang untuk menandai permukaan tabrakan rumput di Maya, tetapi menemukan bahwa komunikasi antara seniman dan desainer memperlambat iterasi terlalu banyak. Oleh karena itu, kami menemukan cara lain untuk menandai area dengan rumput untuk diam-diam. Khusus untuk desainer, tag rumput baru untuk stealth ditambahkan ke editor sehingga mereka dapat secara akurat menandai rentang navigasi sehingga pemain harus mempertimbangkan rumput untuk stealth. Berkat informasi tambahan ini, kami juga dapat mengevaluasi posting siluman tergantung pada apakah mereka berada di rumput atau tidak. Ini ternyata berguna untuk rekan satu tim bergerak ketika pemain dalam mode sembunyi-sembunyi.
Organ sensorik
Karena, tidak seperti The Last of Us, di Uncharted 4 tidak ada mode mendengarkan, kami harus memberi tahu pemain tentang ancaman yang akan datang sehingga lokasi musuh yang tidak diketahui tidak akan mengganggunya. Menggunakan data tentang persepsi musuh, kami menambahkan indikator ancaman warna yang menginformasikan pemain bahwa musuh akan segera melihatnya sebagai faktor pengalih perhatian (indikator putih), menganggapnya sebagai faktor pengalih perhatian (indikator kuning) dan sepenuhnya menyadari kehadirannya (indikator oranye). Selain itu, kami membuat indikator ancaman memperkuat kebisingan latar belakang untuk meningkatkan ketegangan, dan mengeluarkan sinyal keras ketika musuh sepenuhnya memahami kehadiran pemain, seperti dalam The Last of Us.
Penelitian
Ini adalah bagian utama terakhir dari permainan, dalam pengembangan yang saya ambil bagian sebelum permainan pergi ke "emas". Saya biasanya tidak menghadiri pertemuan formal di Dog Nakal, tetapi beberapa bulan sebelum "emas" kami memiliki setidaknya satu pertemuan seminggu di bawah arahan
Bruce Streley atau
Neil Drackmann . Pertemuan tersebut didedikasikan untuk game AI. Setelah hampir setiap pertemuan ini, ada sesuatu dalam sistem penelitian untuk perubahan atau pemrosesan. Sebelum merilis game yang sudah jadi, kami melewati banyak tahap iterasi.
Ada dua aspek yang mengalihkan perhatian musuh dan mendorong mereka untuk mengeksplorasi: keberadaan pemain dan mayat. Ketika musuh mendeteksi gangguan, ia mencoba menarik sekutu terdekat untuk mengeksplorasi penyebabnya bersama. Musuh yang lebih dekat menjadi penjelajah, dan yang kedua sebagai pengamat. Musuh yang menemukan pengalih perhatian dapat menjadi peneliti atau pengamat, dan kami menyiapkan dua rangkaian dialog yang berbeda untuk kasus ini ("Ada sesuatu di sana. Aku akan memeriksanya." Dan "Ada sesuatu di sana. Pergi memeriksanya.").
Untuk membuat awal dan akhir penelitian lebih alami, kami menyesuaikan waktu gerakan musuh dan penurunan indikator indikator kecemasan sehingga beberapa peneliti tidak akan melakukan tindakan yang sama secara mekanis pada saat yang sama.
Jika mayat itu adalah gangguan, maka peneliti dapat belajar tentang keberadaan pemain dan memerintahkan semua orang untuk mulai mencarinya, meninggalkan keadaan yang tenang. Mayat yang ditemukan juga ditandai sehingga pemain memiliki kesempatan untuk memahami apa yang diberikan.
Pada beberapa tingkat kesulitan, beberapa penelitian, satu demi satu, memaksa musuh untuk menyelidiki lebih agresif, yang meningkatkan kemungkinan menemukan pemain bersembunyi di rumput. Pada kesulitan Crushing, musuh agresif melakukan riset secara konstan.
Pandangan Dialog
Ini juga salah satu aspek terakhir yang saya tangani dalam proyek ini.
Pandangan dalam dialog adalah logika yang membuat karakter bereaksi terhadap percakapan, misalnya, melihat orang lain dan membuat gerakan. Dalam The Last of Us, selama berbulan-bulan, desainer secara manual memberi anotasi semua dialog dalam game, menandai momen penampilan dan gerakan. Kami tidak ingin mengulang ini. Kami memiliki beberapa dialog skrip yang sudah ditandai secara manual, tetapi kami membutuhkan sistem yang mampu menangani dialog tanpa anotasi. Animator diberi parameter untuk mengatur kecepatan memutar kepala, sudut rotasi maksimum kepala, durasi pandangan, waktu jeda, dan sebagainya.
Menyimpan kecepatan jip
Dari tahap awal pengembangan, kami memiliki masalah dengan tahap balapan jip di tingkat dengan kota di Madakaskar: jika jip pemain melayang dan ia kehilangan kecepatan setelah menabrak dinding atau mobil musuh, pemain terlempar jauh dari konvoi dan ia gagal menyelesaikan level.
Saya datang dengan solusi ini: sementara membatasi kecepatan sudut dan perubahan kecepatan linear dari atas ketika bertabrakan dengan dinding dan kendaraan musuh. Solusi sederhana ini ternyata sangat efektif - itu menjadi jauh lebih sulit bagi pemain untuk gagal bagian karena drift.
Kehancuran kendaraan
Uncharted 4 mesin pertama yang dikontrol pemain diperkenalkan. Dalam game seri sebelumnya, hanya NPC yang bisa mengendarai mobil, dan mobil-mobil ini bergerak di sepanjang rel spline. Saya membantu dalam pelaksanaan penghancuran transportasi.
Ada beberapa cara untuk menghancurkan kendaraan musuh: membunuh pengemudi, menembak mobil, menabrak sepeda motor musuh dengan jip Anda, tekan jip musuh untuk meluncur. Tergantung pada penyebab kehancuran, sebuah animasi dari transportasi yang hancur dan penumpangnya dipilih. Animasi ini bercampur dengan ragdolls yang dikontrol secara fisik, sehingga animasi membunuh transisi mulus menjadi kecelakaan disimulasikan secara fisik.
Untuk menghancurkan sepeda motor dengan seekor domba jantan, sebuah persegi panjang pembatas di pesawat XZ dan titik kontak digunakan untuk memilih satu dari empat animasi penghancuran ram yang diarahkan.
Dalam hal drift jip, pemeriksaan dilakukan untuk melihat apakah penyimpangan rotasi jip dari arah gerakan yang diinginkan melebihi nilai ambang drift.
Saat memainkan animasi pemusnahan, ada kemungkinan transportasi yang dihancurkan dapat melewati dinding. Ia menggunakan sphere cast (sphere yang diproyeksikan seperti sinar) dari posisi ideal mesin di sepanjang "rail", jika belum dihancurkan, ke posisi di mana tubuhnya berada. Jika kontak diperbaiki selama pembuatan bola sphere, mesin bergeser ke arah kontak normal dengan sebagian kecil dari nilai penetrasi, oleh karena itu, proses menghilangkan bagian melalui dinding terjadi secara bertahap pada beberapa frame, yang menghindari perubahan tajam dalam posisi.

Kami menciptakan jenis khusus kerusakan kendaraan yang disebut petunjuk kematian kendaraan. Ini adalah animasi pembunuhan yang peka terhadap konteks yang berinteraksi dengan lingkungan. Animator dan desainer menempatkan posisi animasi ini di sepanjang "rel" spline dan menunjukkan jendela input pada spline. Jika kendaraan dihancurkan dalam jendela ini, animasi penghancuran yang sesuai mulai diputar. Awalnya, fungsi ini dibuat sebagai alat untuk mengimplementasikan ledakan jip epik untuk demo, dipresentasikan di E3 pada tahun 2015.
Filter Bayer untuk dithering
Kami ingin menyingkirkan kliping geometri ketika kamera terlalu dekat dengan objek lingkungan, terutama ke dedaunan. Oleh karena itu, kami memutuskan untuk menaungi piksel dalam shader piksel berdasarkan seberapa dekat pikselnya dengan kamera. Kami tidak bisa memanfaatkan transparansi karena terlalu mahal dan terlalu banyak dedaunan. Sebaliknya, kami menerapkan
dithering , menggabungkan jarak dari piksel ke kamera dan pola dalam bentuk
filter Bayer - beberapa piksel benar-benar dibuang, yang menciptakan ilusi transparansi.
Filter Bayer asli kami adalah matriks 8 × 8 yang ditampilkan pada
halaman Wikipedia ini . Saya memutuskan bahwa itu terlalu kecil dan mengarah pada penciptaan artefak dalam bentuk garis-garis. Saya ingin menggunakan filter Bayer 16 × 16, tetapi di Internet saya tidak dapat menemukannya di mana pun. Jadi saya mencoba untuk merekayasa balik pola filter Bayer 8 × 8 dan memperhatikan pola rekursif. Saya hanya bisa mempelajarinya dan menulis matriks 16 × 16 dengan tangan, tetapi demi kepentingan saya menulis alat yang dapat menghasilkan matriks Bayesian dari kekuatan dua.
Setelah beralih ke filter Bayesian 16 × 16, artefak dengan garis menurun secara signifikan.
Suara ledakan ledakan
Ini sebenarnya detail yang sangat kecil, tetapi saya ingin menyebutkannya. Beberapa minggu sebelum demo ditampilkan pada E3 pada tahun 2015, saya perhatikan bahwa ledakan menara terlihat dan terdengar pada saat yang sama, yang tidak masuk akal. Nate dan Sally sangat jauh dari menara, jadi mereka harus terlebih dahulu melihat ledakan, dan kemudian mendengarnya. Dalam demo yang telah selesai, tim artis menambahkan sedikit keterlambatan dalam suara ledakan.
Lokalisasi dalam bahasa Cina Tradisional
Saya menyalakan teks dan subtitle dalam bahasa Mandarin tradisional hanya dua minggu sebelum rilis game pada "emas", dan saya menemukan kesalahan terjemahan. Sebagian besar kesalahan adalah terjemahan literal dari bahasa Inggris ke bahasa Mandarin tradisional yang di luar konteks. Saya memutuskan bahwa saya tidak akan memiliki waktu untuk menjalani seluruh permainan sendiri, sambil secara bersamaan mencari kesalahan terjemahan. Oleh karena itu, saya meminta beberapa orang dari departemen pengujian untuk memainkan berbagai bagian permainan dalam bahasa Cina tradisional dan menonton video rekaman bagian itu. Ini ternyata menjadi langkah yang cukup efektif; Saya berhasil memperbaiki semua kesalahan terjemahan yang terdeteksi, dan tim localizers mampu memperbaikinya sebelum batas waktu.
Itu semua
Itu hampir semua yang saya kerjakan untuk Uncharted 4 dari apa yang layak disebut. Saya harap artikel itu menarik bagi Anda.