Selasa, 10 Juli 2012

Cinematic Cameras: Algoritma Penempatan


Kita akan menyelesaikan bab ini dengan gambaran dari algoritma penempatan kamera untuk interaksi karakter. Pertimbangkan skenario ini : Kami memiliki dua orang yang berbicara, dan orang ketiga yang mendekati mereka. Dimana lokasi ideal untuk kamera? Pikirkan tentang hal ini sejenak, dan Anda akan melihat itu sebagai masalah trivial. Kita harus memberikan visibilitas untuk ketiga karakter sekaligus untuk menjaga kamera sedekat mungkin agar tidak ada detail hilang. Selain itu, kita perlu karakter untuk tidak menutup jalan sama lain, sehingga seluruh pemandangan ditularkan jelas. Kamera algoritma penempatan telah muncul dalam beberapa tahun terakhir karena kecenderungan nilai sinematik yang lebih besar. Banyak gelar yang menerapkan algoritma di atas dan telah banyak orang lain pasti akan bergabung dengan mereka dalam waktu dekat. Saya akan memberikan survei tentang cara menghitung sudut kamera yang bagus, terutama ketika beberapa item (baik karakter dan skenario) harus ditampilkan secara bersamaan.

Item pertama yang perlu diingat adalah bahwa kita tidak akan menggunakan karakter penuh melainkan akan menggunakan volume mereka berlari untuk perhitungan kamera. Karakter penuh menggunakan akan terlalu mahal, dan sejauh hasil pergi, upaya tidak akan melunasi. Dengan demikian, banyak algoritma akan bekerja pada bola atau kotak yang mewakili lokasi dan karakter. Kita kemudian perlu untuk menghitung posisi kamera dan orientasi vektor, yang membantu menyampaikan aksi TKP. Ada beberapa aturan umum bahwa kita akan perlu untuk mengimplementasikan dalam rangka untuk mencapai hasil yang realistis. Ini benar-benar mendidih ke tiga aturan dasar:


  • Kamera harus menunjukkan semuanya relevan dengan tempat kejadian.
  • Kamera harus ditempatkan sehingga obstruksi antara informasi relevan tidak terjadi.
  • Kamera harus diarahkan pada titik yang menarik di tempat kejadian.

Aturan-aturan ini meninggalkan banyak ruang untuk eksperimen. Menggunakan contoh sebelumnya, kita bisa memilih jarak di mana kita akan menempatkan kamera sehubungan dengan karakter. Jika mereka berada di area kosong, kami akan menempatkan kamera sedekat mungkin, sehingga kita bisa melihat aksi dengan rincian penuh. Tetapi jika skenario bagaimanapun relevan, kita mungkin memilih untuk kembali sedikit, sehingga beberapa informasi konteks termasuk dalam tembakan. Mari kita memperbaiki setiap bit pilihan kita.


Memilih Target Kamera
Kita akan mulai dengan mengarahkan kamera ke arah yang benar. Tapi apa yang "arah yang benar"? Ini pada dasarnya adalah sebuah konsep cerita: Dimana kamera seharusnya dihadapi untuk menutupi tembakan? Tidak ada aturan emas, jadi mari kita periksa beberapa kasus per kasus situasi.

Dalam kasus umum, kita akan mulai dengan menargetkan pemain, yang, setelah semua, layar mengubah ego gamer. Bertujuan pada dada dari karakter memastikan bahwa ia juga terletak di tengah layar, dan kami mendapatkan beberapa visibilitas lingkungannya.

Tapi bagaimana jika sebuah rakasa mendekati karakter? Mungkin kita harus berusaha di suatu tempat di garis bunga, yang ditentukan oleh karakter dan posisi rakasa itu, seperti memerangi permainan menargetkan kamera pada titik tengah antara kedua pejuang. Dengan cara ini karakter bergeser lebih dekat ke tepi layar, dan rakasa ditempatkan di sisi berlawanan. Jelas, setiap algoritma penempatan kamera yang bagus harus memastikan kita tidak hanya melihat karakter utama, tetapi juga semua yang melihat.

Kasus yang lebih kompleks muncul dari situasi kelompok, seperti percakapan antara beberapa rekan atau pertempuran kecil. Di sini tempat tujuan harus ditempatkan di sekitar barycenter dari tempat kejadian untuk memastikan semua orang bisa muat pada layar. Tidak masuk akal untuk membidik orang yang sedang berbicara karena negara ini akan berubah sering, dan kamera akan bergerak maju mundur sepanjang waktu, pasti mengganggu pemain. Untuk kasus ini, penempatan kamera netral lebih disukai.

Secara umum, kamera harus dipindahkan hanya bila diperlukan. Komputer grafis memiliki tingkat kontrol yang lebih tinggi atas penempatan kamera dari dunia nyata juru kamera lakukan. Kita bisa goyang kamera secepat kita bisa, mengubah permainan kami menjadi roller coaster virtual. Hal ini terlihat di banyak komputer berbasis grafis film pendek. Tetapi kita perlu memahami bahwa kamera harus sebagai unobstrusive mungkin, meningkatkan gameplay bukan merusaknya. Kamera bergerak dan bahkan beralih antara kamera yang berbeda harus disimpan ke minimum yang ketat.

Sebagai contoh, bayangkan sebuah permainan mobil balap di mana layar mengikuti tindakan dari berbagai tanah berbasis kamera, banyak seperti di transmisi ulang TV. Dalam satu kamera, mobil ini terlihat menyamping, maju ke arah kanan layar ketika bergerak di sepanjang arena balap. Kemudian, kita beralih ke kamera lain, yang membuat muka mobil di arah top-down pada layar. Jelas, pemain akan mendapatkan perasaan bahwa kontrol telah berubah, dan dengan demikian interaksi akan terdegradasi. Game tentang perasaan mengendalikan gameplay, dan switching kamera sering menghancurkan perasaan itu.


Memilih Informasi yang relevan
Kami tahu di mana kita ingin arahkan kamera. Sekarang, bagaimana kita dapat memastikan bahwa semua informasi yang menarik adalah di dalam kerucut pandang? Ini biasanya sebuah proses dua langkah yang mencakup 1) pemahaman apa yang relevan dan apa yang tidak relevan untuk adegan tertentu dan 2) menghitung sebuah frustum kamera yang memadai jadi semuanya cocok. Masalah pertama adalah sebagian besar permainan tergantung. Kami harus menandai elemen penting sehingga kita nantinya dapat menggunakannya untuk menempatkan kamera. Secara umum, berikut ini dianggap "relevan" item:


  • Karakter utama
  • Lain-lain karakter di sekitarnya
  • Item Pickable lebih dekat dari ambang batas yang ditetapkan
  • Relevan dengan gameplay Obyek, seperti kendala

Masing-masing item harus datang dengan volume berlari. Untuk algoritma ini, kotak lebih disukai untuk ketat properti mereka. Kita harus mengkonsolidasikan semua kotak berlari menjadi satu, yang merupakan kotak berlari dari informasi yang relevan yang ingin kita targetkan. Kemudian, semua yang kita butuhkan adalah setengah halaman dari trigonometri untuk menghitung, mengingat ukuran lobang kamera, jarak yang dibutuhkan untuk mencocokkan semua informasi di dalamnya. Perhatikan bagaimana kita harus mempertimbangkan parameter kamera optik (aperture, terutama), karakteristik skenario (dalam bentuk kotak berlari untuk informasi yang relevan), dan arah kamera pandang. Beberapa skenario akan lebih besar dalam satu dimensi yang berkaitan dengan orang lain, dan jarak di mana kita menempatkan kamera juga akan tergantung pada arah mana kami bertujuan dari. Sebagai contoh, bayangkan bahwa Anda sedang mencoba untuk mengambil gambar mobil dari depan atau samping. Jelas, situasi kedua membutuhkan lebih jarak karena objek yang Anda targetkan mencakup sudut yang lebih besar di gambar.
Dengan demikian, variabel untuk analisis adalah sebagai berikut:


  • B : kotak berlari.
  • V : vektor satuan yang mendefinisikan arah pandang.
  • P : Pusat perhatian. Kadang-kadang akan menjadi pusat dari kotak, kadang-kadang tidak akan.
  • Wapres : Sudut pandang kita mencoba untuk menghitung.
  • F : Aperture dari kamera dalam radian.

Kami kemudian perlu menghitung titik sepanjang garis yang melewati P dan V memiliki arah sehingga kotak B seluruh bounding terletak dalam jarak sudut didefinisikan oleh F. Algoritma ini sebagai berikut.

Kami pertama kali membuat jalur sepanjang garis yang berasal dari P dengan V sebagai arahnya. Sebut titik T. Kemudian, untuk setiap vertex dalam kotak berlari, kita menghitung QV vektor dari Q ke titik. Kami menghitung sudut dari QV ke V, dan menyimpan titik kotak berlari, yang pada pemisahan sudut maksimal dari V. Ini adalah titik yang akan menentukan ketika kita melihat seluruh pemandangan, jadi kami hanya perlu bekerja dengan titik ini dari sekarang. Mari kita menyebutnya kotak berlari titik R.

Sekarang kita perlu sebuah titik di sepanjang V yang memastikan bahwa titik R adalah pada pemisahan sudut dari V yang persis F. Ini adalah trigonometri hanya biasa. Intinya adalah dalam bentuk :

X = Px - Vx*t
Y = Pz - Vz*t
Z = Pz - Vz*t

Dan tes angular dapat dengan mudah ditambahkan: Sudut dari V (sumbu) untuk QR harus F:

V dot RQ = acos(F)

yang diperluas ke

Vx*(Qx-X) + Vy*(Qy-Y) + Vz*(Qz-Z) = acos(F)

atau

Vx*Qx - Vx*X + Vy*Qy - Vy*Y + Vz*Qz - Vz*Z = acos(F)

Perhatikan bagaimana kita memiliki empat persamaan dan empat variabel, sehingga kami dapat menyelesaikan sistem ini dengan mudah menggunakan metode aljabar. P, V, F, dan Q hanya konstanta kita perlu memberi makan ke dalam persamaan yang berbeda.

Sebuah kata nasihat: Tidak ada yang suka informasi yang relevan terletak pada sudut ekstrim layar. Ini adalah ide bijaksana untuk menyimpan zona aman, jadi ada margin antara item yang relevan dan tepi layar. Hal ini dapat dengan mudah ditambahkan dengan algoritma sebelumnya dengan menggantikan aperture nyata dari kamera dengan nilai yang menurun dalam persentase yang ditetapkan, seperti 10-15 persen. Dengan cara ini kamera akan bergerak kembali sedikit untuk memastikan kami mendapatkan beberapa ruang di sekitar objek yang berbeda di dunia permainan kami.

Tidak ada komentar:

Posting Komentar