Salam pembaca! Bagian pertama dari artikel tentang pengembangan The Light Remake menguraikan proses porting game ke versi baru Unity. Saya berbicara sedikit tentang shader dan efek yang digunakan, solusi apa yang diterapkan dalam bekerja dengan cahaya, konten tambahan apa yang dibuat, konten apa dari versi lama yang dikerjakan ulang, dll. Pada bagian kedua kita akan berbicara tentang aspek pengembangan lainnya, tentang efek pasca, struktur proyek, bekerja dengan suara, pengoptimalan, dan nuansa lainnya.
Bagian 2
Efek posting
Saat mentransfer proyek ke mesin baru, diputuskan untuk meninggalkan metode lama untuk mengimplementasikan pasca-efek yang digunakan di versi sebelumnya dari Unity. Bekerja dengan mereka lebih mudah dimengerti bagi saya dan saya dapat membuat perubahan yang diperlukan pada proses pemrosesan gambar itu sendiri.
Gamma
Tidak banyak efek pasca dalam game aslinya, tetapi salah satu yang paling menonjol adalah koreksi warna dan kecerahan. Kemudian saya berhasil secara acak mendapatkan kilau putih yang menyenangkan dan skema warna yang agak dingin. Gambarnya kontras dan menekankan suasana fantastis di lokasi tersebut. Gaya visualnya agak mengingatkan pada palet warna Battlefield 3 pada saat itu, yang menurut saya merupakan kebetulan yang sangat menguntungkan.
Nuansa yang menarik adalah di masa depan, setelah game aslinya, saya tidak berhasil mengulangi efek ini sepenuhnya, selalu ada beberapa kehalusan yang membuat gambar tidak terlihat seperti aslinya. Dalam hal ini, saya memutuskan untuk mengubah skema warna dalam pembuatan ulang menjadi yang lebih hangat dan lebih positif. Tanaman hijau menjadi lebih cerah dan lebih ekspresif, dan suasananya menjadi lebih terkait dengan hari musim panas yang pengap. Sebagai bonus, setelah menyelesaikan permainan, saya menambahkan kemampuan untuk mengaktifkan koreksi warna, mirip dengan aslinya.
Cahaya volumetrik
Elemen yang sangat penting dalam pembuatan ulang ini adalah efek pasca yang terkait dengan cahaya. Versi lama Unity memiliki efek sunburst Sun Shaft yang sangat imut. Namun, fungsinya terbatas, karena hanya dapat dikaitkan ke satu sumber cahaya di tempat kejadian.
Pada titik tertentu, efek pencahayaan volumetrik yang sangat menghibur dari lampu Volumetrik menarik perhatian sayaIni memungkinkan Anda untuk menciptakan cahaya dan sinar yang sangat bagus dan padat yang dapat berasal dari berbagai sumber. Suasana di pemandangan menjadi lebih bervolume, objek mulai tenggelam ke dalam kabut tipis udara, yang sangat mengesankan saya. Satu-satunya kelemahan adalah intensitas efek yang tinggi. Namun demikian, saya memutuskan untuk menggunakannya dan berkat cahaya Volumetrik, saya berhasil menciptakan cahaya matahari yang menyenangkan di seluruh pemandangan, serta berkas cahaya mistik di tempat-tempat tertentu: di lorong di awal permainan, di ruangan dengan burung pipit. Efeknya juga digunakan untuk menekankan aksen pada tiang lampu yang bersinar di malam hari, dalam episode dengan proyektor, di ruang ketel untuk memperkuat cahaya dari jendela, di adegan terakhir kenaikan karakter ke cahaya.
SSAO dan SSR
Efek terberat lainnya adalah SSAO (Ambient Occlusion), yang menciptakan bayangan lembut di sudut dan bawah permukaan, tanpa itu. SSR (Screen Space Reflections) juga ditambahkan, yang menyebabkan banyak masalah bahkan pada tahap pengembangan. SSR mensimulasikan refleksi pada permukaan glossy, menghasilkan pantulan yang bagus pada ubin, logam, dll. Masalahnya adalah efeknya sangat berat dan hampir separuh FPS pada perangkat keras saya. Melalui beberapa manipulasi dalam kode pasca-efek, saya berhasil sedikit mengurangi kualitas penghitungan dan sedikit meningkatkan kinerja. Secara umum, frekuensi gambar menjadi dapat diterima, tetapi dalam beberapa kondisi (misalnya, dengan Vsync diaktifkan) SSR menyebabkan berhenti dan tersentak secara berkala saat karakter dipindahkan.
Lainnya
Selain efek yang terdaftar, proyek ini juga menggunakan Vignette, chromatic aberration, tone mapping, antialiasing, global fog and bloom. Untuk optimasi, vignette, aberration dan tone mapping telah digabungkan menjadi satu proses.
Ngomong-ngomong, sekarang, saat bekerja dengan grafik, saya sering mengingat pengalaman pribadi saya belajar di sekolah seni, di mana kami diajari untuk menekankan bayangan yang kontras di bawah objek, menampilkan refleks pada permukaan objek, dan menerapkan kabut di cakrawala saat bekerja dengan lanskap untuk menekankan perspektif udara. Sekarang saya tahu itu semua SSAO, SSR dan Global Fog!
Bagaimana itu bekerja?
Proyek asli dirakit secara harfiah di atas lutut. Pada saat itu, saya tidak memiliki keahlian pemrograman apa pun dan semua fungsionalitas permainan dibangun di atas beberapa skrip sederhana. Yang utama adalah skrip pemicu Aktifkan yang saya temukan di aset Unity standar. Semua fungsi didasarkan pada fakta bahwa karakter masuk ke pemicu, mengaktifkan atau menonaktifkan objek tertentu dan menyebabkan tindakan yang diperlukan. Tidak ada pertanyaan tentang menyimpan atau pengaturan dalam game.
Sistem
Tentu saja, untuk mengimplementasikan pembuatan ulang, perlu untuk menulis seluruh sistem game dari awal: sistem kontrol, penyimpanan, pengaturan, dan mekanisme dalam game. Secara umum, pembangunan sistem proyek yang kompeten masih merupakan tugas yang sulit bagi saya. Biasanya, saya membuat objek sistem dasar dengan beberapa objek anak. Masing-masing menjalankan kelompok fungsinya sendiri-sendiri dan semuanya saling berhubungan.
Karena permainan pada dasarnya terdiri dari satu lokasi, saya memutuskan untuk tidak repot-repot memuat adegan, prefab, dan komponen, saya menempatkan semua yang saya butuhkan dalam satu adegan utama. Pengontrol dibuat yang mengelola semua yang Anda butuhkan, mengganti pengaturan, menyimpan game dan membaca data yang disimpan, membaca teks untuk subtitle dan catatan dari file khusus di root game, dll. Untuk kemudahan implementasi, seperti pada game sebelumnya, diputuskan untuk menggunakan sistem penyimpanan di pos pemeriksaan. Lokasinya berisi puluhan objek interaktif seperti pintu, item permainan, lampu minyak tanah, dll. Untuk setiap penyimpanan, perlu untuk merekam pengenal status objek, yang biasanya berupa variabel Int. Misalnya, pintu ditutup dan dikunci dengan kunci: DoorOpen - o, DoorLocked - 1.Saya tidak akan membahas secara rinci tentang topik pemrograman, karena keterampilan saya di bidang ini agak spesifik dan dangkal, namun cukup memadai untuk mengimplementasikan proyek saya sendiri.
Dua final
Tugas yang menarik bagi saya adalah penerapan penilaian virtual untuk mencapai salah satu opsi akhir. Saya ingin memperkenalkan beberapa elemen tantangan ke dalam gameplay dari remake, dan saya mendapat ide untuk menghubungkan ide ini dengan simbol utama game - dengan cahaya. Diputuskan untuk membuat penghitung yang akan menganalisis tingkat cahaya sekitar dengan beberapa parameter. Akhir permainan akan tergantung pada berapa lama pemain tetap berada di tempat yang terang atau di bawah sinar matahari terbuka. Tahap pertama adalah mengumpulkan informasi dari probe cahaya yang ditempatkan di tempat kejadian dan tingkat luminositasnya. Parameter ini diterjemahkan menjadi rata-rata dan ditulis ke variabel float.
Selanjutnya, skrip memperhitungkan keberadaan sumber cahaya tambahan di sekitar, misalnya lampu, cahaya dari jendela, lentera yang dinyalakan, atau korek api di tangan. Adanya salah satu kondisi menambah nilai tertentu pada indikator lampu yang sudah dihitung. Dan terakhir, sinar matahari langsung memiliki efek paling kuat pada karakter. Dari sumber sinar matahari, siaran sinar ditembakkan ke karakter, yang memberi tahu sistem jika pemain berada di bawah sinar matahari terbuka.
Semua nilai ini dijumlahkan dan dihitung dengan penghitung, yang pada akhir permainan menentukan seperti apa finalnya. Jika pemain jarang mengunjungi langit terbuka, di bawah sinar langsung, jarang menggunakan lentera dan korek api, maka parameter terakhir akan rendah. Sistem tidak selalu secara akurat menentukan tingkat iluminasi, tetapi secara umum dapat mengatasi tugasnya. Untuk debugging dan sebagai elemen tambahan, terdapat bintik-bintik cat reflektif pada pipa logam di tangan karakter, yang merupakan indikator iluminasi.
Penerjemahan dan pelokalan
Untuk pembuatan ulang, pendekatan baru untuk pelokalan dan, secara umum, tampilan teks dan pesan telah berhasil. Lebih tepatnya, pendekatan ini telah digunakan dalam proyek Sektor ke-7, namun, volume konten di sana jauh lebih sedikit. Metode penyimpanan data ke dalam dokumen hml diambil sebagai dasar. Semua informasi teks untuk pelokalan awalnya disimpan dalam file xml di root game. Pesan dibagi menjadi beberapa kelompok dan diberi tag individual, termasuk dalam kategori tertentu dan bahasa tertentu. Untuk jeda baris, saya memutuskan untuk menggunakan karakter (*), dan memulai pesan baru (#).
Pada saat yang tepat (saat memilih bahasa dan memulai adegan), pengontrol membaca semua informasi teks, membaginya menjadi beberapa baris dan kelompok terpisah, dan menulisnya ke semacam perpustakaan atau kamus. Kemudian, skrip individu membaca informasi ini, misalnya, saat membuka menu atau mengaktifkan subtitle di layar. Sistem itu bagi saya secara pribadi nyaman dan, yang paling penting, dapat dimengerti. Ini memungkinkan Anda untuk dengan mudah memasukkan bahasa baru dan membuat perubahan pada teks yang ada.
Suara
Beberapa suara dasar dibawa dari sumber aslinya. Ambien, kicau burung, suara proyektor film, dll. diputuskan untuk pergi untuk mempertahankan pengakuan proyek. Namun, banyak konten baru yang dibutuhkan. Suara karakter itu sendiri, langkah-langkah, objek yang diaktifkan, napas pahlawan pada saat-saat tertentu, efek detak jantung, dll. Telah ditambahkan. Lebih banyak variasi ditambahkan ke rangkaian suara sekitar, kicauan belalang, suara acak dari benda-benda yang jatuh dan pintu yang dibanting ditambahkan. Ngomong-ngomong, saya terinspirasi oleh pemandangan Half Life Alyx yang baru untuk menambahkan suara jangkrik atau belalang, di mana suasana hari musim panas yang terik sangat sejuk. Saya menikmati mendengarkan dan menonton rekaman Ambient dari City17 di Youtube untuk sementara waktu.
Sebagian besar suara dipinjam dari perpustakaan gratis. Fragmen digabungkan satu sama lain, efek diterapkan, kecepatan diubah, dll.
Penciptaan soundtrack menjadi keseluruhan lapisan pekerjaan yang bertanggung jawab dan melelahkan. Komposisi dalam proyek aslinya tidak dilisensikan, itu adalah kumpulan lagu oleh Ludovico Einaudi, komposer Thomas Newman dan OST dari game "Takut monster". Namun demikian, biasanya kita masuk ke dalam jiwa dari apa yang pertama kali kita dengar, misalnya, lagu aslinya sering kali tampak lebih menyenangkan daripada remixnya, setidaknya bagi saya. Dalam kasus ini, saat membuat komposisi baru, saya benar-benar ingin mempertahankan gaya dan suasana trek aslinya. Bagi saya, komposer Dmitry Nikolaev, yang sebelumnya bekerja dengan kami pada game 35MM, melakukan pekerjaan yang sangat baik dengan tugas ini. Saya sangat terkesan dengan tampilan baru pada komposisi dinamis yang terdengar selama pemutaran film di ruang kuliah. Lagu ini mempertahankan gaya energik dan sedikit psikedelik asli,mulai terdengar segar, tapi bisa dikenali. Ngomong-ngomong, film itu sendiri juga banyak direvisi dan menyertakan banyak materi baru. Konten video dipilih dengan lebih hati-hati untuk menghindari pelanggaran hak cipta, dan beberapa fragmen dibuat secara terpisah.
Tautan menunjukkan video asli yang digunakan dalam game asli tahun 2012.
Meski tidak ada dialog dalam game, ada tempat untuk akting suara. Rekaman ini dibantu oleh Vsevolod Petrykin, yang telah berpartisipasi dalam proyek 35MM dan memberikan suaranya kepada karakter utama Petrovich. Pidatonya dapat didengar dari pengeras suara pada saat pesawat muncul, dari penerima telepon dalam episode peluncuran rudal dan di radio, di lantai dua gedung utama.
Optimasi
Pengoptimalan telah menjadi salah satu topik dan tugas paling menyakitkan dalam pekerjaan pembuatan ulang. Kebetulan hampir semua proyek yang saya buat sebelumnya pada versi lama Unity (4.6) cukup sederhana dalam hal beban pada perangkat keras. Memutar 35MM di GTX 970 saya di beberapa tempat menghasilkan 200-300 fps dalam adegan yang cukup rumit dan sibuk. Light asli, yang dibangun di atas versi mesin yang lebih awal, menunjukkan FPS yang lebih tinggi. Namun saat beralih ke Unity 2017, frekuensi gambar turun 2-3 kali lipat. Jelas bahwa pemandangan menjadi jauh lebih kompleks, kesalahan perhitungan cahaya dan pantulan, efek pasca tambahan, dll. Telah ditambahkan. tetapi saya tidak mengharapkan penurunan kinerja yang dramatis. Hasil tangkapannya adalah bahwa bahkan setelah menghapus hampir semua konten dari tempat kejadian, FPS saya tidak naik di atas 200-300. Ini adalah panggung yang setengah kosong, Karl!Banyak pekerjaan yang telah dilakukan untuk menyederhanakan beberapa geometri, membuat grup Lod, menyiapkan pemusnahan Oklusi, dll.
Selain itu, dengan menggunakan skrip, kamera diberi jarak kliping untuk lapisan tertentu. Untuk implementasi, contoh dari manual Unity digunakan. Objek dengan ukuran berbeda ditetapkan ke lapisan terpisah, yang menghentikan rendering jika kamera terlalu jauh. Benda kecil seperti kaleng, sampah, puing kayu, buku dipotong setelah jarak 20-30 meter. Yang lebih besar - setelah 60-80. Semua tindakan di atas telah mengurangi jumlah Drawcall secara signifikan. Rata-rata, jumlah panggilan seri dalam satu adegan berkisar antara 800 hingga 2000 DC. Jumlah poligon dalam satu bingkai tidak melebihi 1 juta.
Pemotongan luminer
Sebagai bagian dari pengoptimalan, skrip khusus dibuat yang, setiap 2-3 detik, menentukan jarak ke sumber cahaya dinamis kecil, seperti lampu minyak tanah. Saat kamera dilepas dari lampu, skrip mematikannya agar tidak memuat sistem dengan proses yang tidak perlu. Juga, saat karakter turun ke ruang bawah tanah, sumber sinar matahari dimatikan. Ini secara signifikan mengurangi jumlah DrawCalls.
Sedikit detail
- Di koridor ruang bawah tanah, berdiri di bawah saluran pembuangan beton dengan air yang menetes, Anda dapat melihat tetesan keruh muncul di layar (mata / kacamata karakter). Dibuat sederhana - asalkan pahlawan mengenai pelatuk dan ketika kamera diarahkan ke atas, sistem partikel prefab dengan bahan Grabpass berlumpur diaktifkan. Juga pada saat ini, tetesan dapat diamati di permukaan kartu jika Anda mengambilnya di tangan Anda.
- . . « », . . , .
- , .
- , , .
- . “STALKER ” , . , , . , . , / .
- , — 3 . , , . . .
Seperti yang Anda lihat dari artikel, mengembangkan proyek Anda sendiri adalah proses yang sangat melelahkan. Ini adalah malam tanpa tidur, pencarian solusi yang konstan, pencarian inspirasi, kekalahan dan kemenangan. Tapi, itu membawa kesenangan besar dan rasa realisasi diri. Saya akan mengatakan bahwa ini lebih dari sekedar pekerjaan - ini adalah cara hidup. Pikiran kita luar biasa dan mampu menciptakan hal-hal menakjubkan yang terkadang tidak bisa dibandingkan dengan kenyataan. Ada seluruh alam semesta di dalam tengkorak setiap orang, dan sungguh menakjubkan, sungguh menakjubkan bahwa alam semesta ini entah bagaimana dapat ditampilkan melalui aktivitas Anda, baik itu film atau permainan komputer. Setiap pekerjaan adalah sesuatu yang personal, diciptakan melalui kerja keras dan melelahkan, sesuatu yang sangat penting dan berharga, pertama-tama untuk diri sendiri.
Semoga sukses, inspirasi kreatif, dan FPS tinggi untuk Anda semua!