Anatomi falcon


Baru-baru ini, kami mengumumkan pengembangan permainan Falcon Age tentang menumbuhkan seekor burung dewasa dari seekor cewek elang dan bersama-sama melawan pasukan yang berupaya menjajah planet ini. Falcon Age akan dirilis pada 2019 di PS4 dan PS VR.

Minggu lalu kami menunjukkan game di PAX dan menerima ulasan bagus, terutama tentang elang itu sendiri. Mari kita lihat lebih dekat desainnya, tweaker animasi dan rig, AI dan navigasi, teknologi bulu, dan suara predator.

Desain falcon


Memberitahu Chandan Ekanayake dan Darran Herlbat.


Desain elang menggabungkan berbagai jenis burung pemangsa. Elang kami, ukuran elang emas, berkelahi seperti elang, tampak seperti elang dan elang, memiliki puncak, seperti burung hantu, dan perawatannya dilakukan seperti elang. Dia adalah salah satu perwakilan terakhir dari penampilannya di dunia kita, dan kami ingin membuat penampilannya unik dan cocok untuk plotnya. Pada saat yang sama, selama bermain game, itu harus menonjol melawan langit dan gurun.


Salah satu sumber inspirasi pertama untuk menciptakan Falcon Age adalah video elang emas yang berburu kambing gunung besar. Kami mulai melakukan penelitian tentang elang, dan kami memiliki ide menjinakkan elang dan menciptakan mekanik dan gameplay berdasarkan ini. Pada tahap awal pengembangan, kami menciptakan prototipe mentah untuk menguji konsep kami. Segera setelah kami pertama kali bersiul burung di VR, dan melihat bagaimana skalanya berubah, ia mendekati kami dan duduk, menjadi jelas bagi kami bahwa ini bisa menjadi dasar dari permainan yang unik.

Animasi dan rig


Memberitahu Aung Zau Oo.


Pelacakan Falcon Paw

Ada banyak opsi untuk menjiwai, tetapi tidak ada yang bisa menyelesaikan tugas kita melacak kaki elang dengan cara sederhana. Sistem dengan kinematika terbalik, gerakan root, dan plugin kompleks lainnya akan memungkinkan kami untuk mengatasi pekerjaan jika kami memiliki tim yang lebih besar dan waktu yang cukup. Kami ingin mencapai hasil yang lebih dapat diprediksi, jadi kami memilih solusi berdasarkan banyak pose yang dibuat dalam 3dsmax.

Namun, alasan paling penting untuk meninggalkan IK adalah bahwa itu adalah solusi terbaik yang saya temukan dalam beberapa hari. Pada awal proyek, kami membuat prototipe dengan sangat cepat sehingga kami tidak punya waktu untuk mempertimbangkan solusi lain yang tersedia. Itu adalah cara yang paling dapat diandalkan dan paling canggung yang saya temukan, jadi kami terus melakukannya sejak saat itu. Tidak perlu memperbaiki apa yang tidak rusak.

Ini adalah bagaimana saya membayangkan mencampur pergerakan cakar burung dalam kehidupan nyata. Bola adalah kepalan yang menempel pada perangkat kontrol gerak VR. Metode ini memiliki keterbatasan. Cakar harus mampu membengkokkan sebagian besar kepalan tangan, dan pose kepalan tangan harus berbentuk bola mungkin.



Perhatikan bahwa kepala dan tungkai berada pada tingkat hierarki yang sama di panggul. Ini membuatnya lebih mudah untuk menutupi tulang dan membuat pohon campuran yang terpisah. Abaikan kata "elang" di judulnya. Itu hanya nama aset sementara sebelum kami memutuskan desain burung itu.


Versi singkat tentang bagaimana hal ini dilakukan: tinju adalah bola, dan cakarnya berputar di sekitar bola menggunakan 30 pose mencampur dan menjiwai cakarnya untuk membawanya kembali ke tengah ketika bola (lengan yang bergerak) berputar terlalu jauh.


30 Blend Poses on a Ball


Animasi Crossover memungkinkan Anda mengembalikan cakarnya ke tengah

Pencampuran dimulai lagi setelah animasi pendek transisi dari pergantian tangan baru. Menurut programmer kami Justin, ia menerapkan ini dengan rumus angka empat dan aljabar linear biasa. Dan saya menggunakan tiga nilai float yang dia berikan kepada saya dan meneruskannya ke kondisi campuran animasi ini.

Pada anak ayam, sendi kedua jari telunjuk diperlakukan seperti bola.


Satu-satunya kasus garis batas di mana ide dengan bola tidak bekerja adalah ketika sarung tangan menunjuk lurus ke bawah, seperti yang ditunjukkan pada gambar di bawah ini.


Kami bisa menangani kasus ini dengan berbagai cara. Satu solusi: tambahkan collider ke bagian sarung tangan di lengan collider sehingga burung lepas landas ketika terjadi tabrakan. Tetapi pada akhirnya mereka memutuskan untuk meninggalkan semuanya apa adanya. Ini lebih ramah untuk pemain: Anda dapat menggaruk paha kiri Anda, dan burung di VR tidak akan terbang. Selain itu, kebanyakan orang tidak pernah menundukkan lengan mereka seperti itu selama pertandingan.

Hanya jika karena alasan tertentu mereka tidak bermain, berdiri di atas kepala mereka.

Di headstand, semua animasi akan terlihat salah atau rusak.



Pelacakan kepala Falcon


Saya akan menjelaskan secara singkat bagaimana kami mencapai ini; kepala (bone_Head) adalah anak pertama dari objek paling atas dalam hierarki kerangka burung (bone_Root).

Posisi (bukan rotasi) dari Bone_Root mengikuti posisi pengontrol gerakan dan bone_Head melawan gerakan ini. Ini pada dasarnya adalah hierarki dua objek di mana pencampuran posisi digunakan untuk menetralkan pergerakan orang tua untuk menjaga posisi global anak. Sisa tubuh burung menggunakan campuran 27 postur untuk posisi burung yang paling alami.


Mengingat ukuran burung dewasa, bergerak sepanjang 12 cm di semua sumbu (kubus 24x24x24) ideal untuk menstabilkan tanpa meregangkan leher terlalu banyak. Kepala akan bergerak di perbatasan kisaran ini, dan ketika lengan lacak berhenti bergerak, posisi baru akan dianggap sebagai pusat baru di mana kubus lain dengan sisi 24 cm dibuat. Dari sudut pandang matematika, stabilisasi kepala hanyalah transformasi vektor dengan banyak tambahan add-ons untuk membatasi kecepatan, awal dan akhir transisi, pindahkan titik stabilisasi ketika terlalu jauh dari tubuh, dan burung masih berada di area tersebut.


Navigasi dan Burung AI


Diceritakan oleh Justin Lalone.

Saat burung itu bosan

Paling sering, elang mematuhi perintah Ara (karakter utama permainan) dan mengikutinya. Jika Anda berdiri di satu area terlalu lama sementara burung itu terbang berputar-putar, atau jika Anda membiarkannya pergi tanpa memberi perintah, maka ia akan mulai mencari sesuatu untuk dilakukan di daerah tersebut - biasanya berburu atau mendarat di berbagai titik bantuan yang berbeda. Dia juga mengambil inisiatif ketika dia duduk di Are dan seseorang mencoba meraihnya, dan suka menunjukkan Are the hole berikutnya ketika bermain golf petir.

Matahari membutakan korban

Beberapa spesies mangsa, seperti kelinci, sangat pemalu, dan ketika mereka melihat elang menyelam di udara, mencoba menangkap mereka, mereka lari ke lubang terdekat. Jauh lebih sulit bagi mereka untuk memperhatikan burung Ara ketika mendekati dari sisi yang cerah, sehingga Anda dapat menyederhanakan penangkapan mangsa jika Anda memperhatikan dari mana cahaya itu berasal dan mengirim burung itu dari arah ini. Di sisi lain, bisa sangat sederhana dan sederhana untuk menyelam dari ketinggian, karena burung akan dapat memperoleh kecepatan lebih sebelum diketahui, memberi korban lebih sedikit waktu untuk melarikan diri.


Kami pergi dengan cepat dan dari sisi matahari untuk menangkap mangsa secara akurat.



Navigasi elang 3D

Biasanya dalam set standar mesin gim tidak ada mekanisme untuk memindahkan hewan terbang yang andal dalam ruang 3D, yang akan terlihat alami dalam kasus ini. Kami memiliki sekitar tiga tingkat logika navigasi burung, yang dilakukan untuk memindahkan burung dari titik A ke titik B, yang memungkinkan kami untuk tidak terlalu menyulitkan sistem dan tidak terjebak di sudut-sudut.


Untuk navigasi tingkat tinggi yang memungkinkan Anda menemukan rute di seluruh dunia, kami membuat grafik navigasi 3D dan menggunakan algoritma A * untuk menemukan jalur. Dalam implementasi ini, cukup unik bahwa, untuk melakukan semua operasi untuk menemukan path menggunakan algoritma A *, kami menggunakan sistem tugas Unity yang cukup baru. Ini menyediakan pencarian cepat yang tidak memuat aliran utama, yang menyisakan lebih banyak waktu untuk AI, fisika, dan aspek lainnya. Sebagian besar grafik dihasilkan secara otomatis, dan untuk terbang melalui celah sempit, misalnya melalui jendela, koneksi ditempatkan secara manual karena kecil atau memerlukan pendekatan pada sudut kanan.


Garis ungu adalah jalur perkiraan untuk terbang di sekitar batu besar di tengah, di mana elang mulai terbang dan Ara berdiri. Burung itu tidak berusaha keras untuk mengikuti garis ini; jika demikian, dia akan membuat belokan yang sangat aneh dan tajam, jadi jika Anda dapat mencapai bagian jalan yang berikutnya tanpa gangguan, maka dia pergi ke sana.


Terkadang dalam perjalanan dia menemukan benda-benda kecil atau bergerak. Elang melihat ke depan dan terbang di atas atau di dekat benda-benda ini. Batu itu cukup besar untuk dinavigasi dengan algoritma A * biasa, tapi saya membuatnya melupakannya untuk saat ini. Di sini, untuk mengelilingi batu, burung itu berbelok ke kiri - garis merah menunjukkan di mana ia terlihat selama beberapa frame terakhir. Biasanya saya mencoba untuk tidak melakukan ini, tetapi navigasi A * dapat membuat burung terbang di bawah lengkungan atau jembatan.

Level terakhir dari logika penerbangan burung adalah logika manuver itu sendiri, pilihan seberapa cepat burung memutuskan untuk terbang, berapa banyak yang dibutuhkan untuk naik atau turun, bagaimana berbelok dengan cepat, bagaimana ia menerapkan akselerasi fisik, batasan apa yang dikenakan pada tindakannya untuk mencapai titik akhir. Data ini ditransmisikan ke sistem animasi, menginformasikan seberapa aktif burung itu bekerja, dalam bentuk postur seperti apa, apakah ia harus menekuk, dll. Penghindaran objek agak sangat terhubung dengan sistem ini, tetapi semua navigasi A * dilakukan sepenuhnya secara terpisah. Ini menggunakan sejumlah besar matematika dan logika.

Bulu dan rendering


Memberitahu Ben Golus.

Bulu-bulu kecil di tubuh, atau bulu-bulu kontur burung kita, bergoyang-goyang dari angin dan bereaksi terhadap tangan pemain yang menghaluskan mereka untuk menambah rasa interaktivitas sentuhan yang lebih dalam. Cara menerapkan bulu-bulu di demo PAX adalah hack, jadi saya berharap untuk menggantinya sebelum rilis game. (Tentu saja, ini berarti bahwa solusi ini akan diimplementasikan dalam permainan yang selesai.) Singkatnya, setiap bulu kecil burung dianggap beberapa shaders rumput atau tumbuh-tumbuhan. Untuk menghitung kebisingan sederhana dari getaran bulu, beberapa sinusoid yang tumpang tindih dihitung, yang memberikan tampilan alami pada bulu. Perubahan sementara mereka digeser ke nilai acak untuk setiap pena, disimpan dalam warna verteks, dan gerakan goyangan juga bersisik sesuai dengan warna verteks. Ini berarti bahwa pangkal bulu, tidak seperti ujungnya, tidak bergerak. Ini juga berarti bahwa bulu panjang bergerak lebih dari yang pendek.


Kami ingin bulu-bulu tidak bergerak ke arah acak, seperti di sebagian besar bayangan rumput, jadi Anda tidak bisa menggunakan arah dunia atau ruang lokal. Plus, mereka berada di jala dengan menguliti, yang membuat arah lebih dinamis. Oleh karena itu, saya menggunakan kombinasi normal dan simpul singgung bulu, sehingga bulu-bulu bergoyang masuk dan keluar, serta dalam arah yang berbeda relatif terhadap orientasi mereka. Sistem ini tidak terlalu akurat, tetapi dengan gerakan sekecil itu, kesalahan hampir tidak akan terlihat.

Untuk memproses interaksi dengan tangan di tangan pemain, ada skrip yang melacak tulang dan membuat daftar kapsul mengikuti bentuk setiap jari, dan bola digunakan sebagai telapak tangan. Jika tangan berada dalam jangkauan, maka vertex shader mengelilingi daftar kapsul dan menemukan jarak terkecil ke salah satunya, dan kemudian dengan lancar menimbang goyangan jika kapsul melewatinya. Selain itu, bulu-bulu ditekan ke tubuh. Kapsul terlalu besar karena pemeriksaan yang tumpang tindih lunak, yaitu, mereka tidak beralih tiba-tiba, tetapi dengan transisi yang lancar. Semua ini dikonfigurasi kira-kira sehingga ketika jari yang terlihat menyentuh pena, itu akan benar-benar berhenti dan menggantung.


Berikut ini adalah pengujian versi sebelumnya dari sistem ini. Anda dapat melihat bagaimana bulu bereaksi terhadap bola bahkan sebelum menyentuhnya, tetapi interaksi masih terlihat meyakinkan.



Untuk rilis final permainan, saya ingin membuat sistem dengan geometri atau komputasi shader yang akan menyelesaikan beberapa masalah yang muncul ketika menyentuh hanya satu titik bulu, dan menghilangkan fakta bahwa normals untuk penerangan bulu tidak berubah ketika disentuh.

Informasi Luka Falcon

Kami ingin menunjukkan kapan burung itu terluka, dan pada saat yang sama tidak menggunakan pita kesehatan atau mekanik serupa. Untuk menunjukkan bahwa burung itu lelah atau terluka, animasi digunakan, tetapi kami masih tidak dapat berkomunikasi dengan jelas kepada pengguna bahwa ia menerima kerusakan. Untuk menyampaikan kondisinya dengan jelas, kami memutuskan untuk menunjukkan luka fisiknya dengan darah dan bulu yang acak-acakan. Solusi yang jelas adalah mengganti bahan. Namun, kami ingin menunjukkan peningkatan kerusakan secara bertahap, dan bukan hanya "makan / tidak" yang sulit, dan tidak ingin membuat banyak kartu yang berbeda. Kami juga memiliki masalah dengan fakta bahwa sebagian besar bulu menggunakan koordinat UV yang sama, yaitu, seluruh burung akan ditutupi dengan bercak darah.

Akibatnya, kami sampai pada solusi dua bagian. Yang pertama adalah kerusakan bulu dan acak-acakan. Saluran alfa setiap pena disetel dengan cara khusus, sehingga versi yang rusak dan tidak rusak berada di alfa dengan opacity yang berbeda. Untuk beralih di antara dua kondisi bulu, digunakan pemeriksaan nilai alfa (sebenarnya, alfa untuk cakupan). 50% opacity mengindikasikan kesehatan normal, dan 25% opacity mengindikasikan luka.


Untuk noda darah, burung memiliki koordinat UV kedua dari tekstur darah, jadi kami tidak perlu menggunakan kembali koordinat UV dari tekstur pena. Darah dicampur di atas tekstur dasar. Akibatnya, kita hanya perlu satu set tekstur dasar, satu set tekstur darah, dan ini cukup untuk mendapatkan efek luka yang berbeda pada burung.




Suara predator


Diceritakan oleh Rob Piersall.


Kami tidak ingin burung berbeda (misalnya, futuristik atau magis) dari burung lain di dunia, tetapi hanya menggabungkan fitur yang berbeda dari beberapa predator terbang di dalamnya (cukup tambahkan topi untuk itu). Oleh karena itu, tidak ada gunanya menciptakan baginya suara yang terdengar "dengan kualitas sinematik" - cukup untuk membuatnya bekerja dan dapat dipercaya.

Dengan kata lain, saya bisa "meminjam" jeritan predator mana pun yang akan mengirimkan informasi kepada pemain tentang suasana hati, perasaan, dan respons burung yang berbeda. Saya mendengarkan suara yang dibuat oleh predator. Yang mengejutkan saya, predator terbesar dan paling mengesankan - elang - adalah yang terburuk dari semuanya dalam hal suara. Ternyata menjadi yang pertama dalam daftar "lebih baik tidak menggunakan."

Elang selalu merupakan pilihan bagus. Semua orang suka teriakan elang. Dulu saya berpikir bahwa semua insinyur suara memiliki satu rekaman teriakan elang, dan bahwa semua elang memiliki suara yang sama di semua film. Tapi ini tidak benar. Ternyata, semua elang ini terdengar sama. Hampir tidak ada perbedaan. Jangan salah paham, suaranya sangat bagus, jadi ... ya, untuk burung kami, kami juga menggunakannya. Tapi itu belum semuanya.

Yang terbaik dari semuanya, saya tidak harus membatasi diri pada satu spesies elang tertentu; dan ada banyak spesies ini. Oleh karena itu, saya dapat memilih suara yang cocok yang dipancarkan oleh elang yang akan menjadi semacam pernyataan emosional seekor burung sesuai selera saya.

Sangat nyaman bahwa spektrum emosi terbatas. Saya akan memanggil mereka pesan burung:

  • Semuanya tenang, semuanya baik
  • Saya mendengar bahwa Anda memanggil saya
  • Menyerang
  • Saya terluka, tetapi masih bisa terbang
  • Itu menyakitkan

Merekam suara predator yang kesal sangat sederhana; sudah cukup untuk muncul di wilayahnya dengan peralatan rekaman, dan dia sudah akan kesal. Karena itu, ada banyak bahan di mana predator terdengar marah dan jahat. Mereka cocok untuk suara "rasa sakit." Suara elang cocok untuk umpan balik dalam penerbangan dan laporan serangan. Dengan suara "semuanya tenang," ada kesulitan. Beberapa jenis twitter menghampiri saya, tetapi kemudian saya harus mengedit banyak jenis pesan yang berbeda untuk mendapatkan parsial, jeritan singkat yang berhubungan dengan twitter, dan mereka muncul untuk permainan.

Melacak seekor burung dalam permainan dengan suara adalah cerita yang sangat berbeda untuk artikel lain.

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


All Articles