Artikel TOPAN33
Node 01 / Platform Overview
TOPAN33 | Procedural Animation Bikin Gerakan Objek Game Bisa Dibentuk Langsung dari Aturan tanpa Semua Gerakan Direkam dari Awal
Bayangkan ada benda menggantung di dalam game. Ketika karakter bergerak benda itu ikut bergoyang. Saat karakter berhenti gerakannya nggak langsung membeku tetapi masih berayun sebentar sebelum kembali tenang. Developer sebenarnya bisa membuat animasi khusus untuk setiap keadaan tersebut tetapi jumlah variasinya bakal cepat membengkak. Di TOPAN33 ada pendekatan teknologi lain yang menarik dibahas yaitu Procedural Animation.
Gampangnya Procedural Animation membuat sebagian gerakan berdasarkan aturan dan kondisi yang sedang terjadi ketika game berjalan. Jadi komputer nggak cuma memutar rekaman animasi yang sudah mempunyai urutan tetap. Sistem dapat menghitung posisi rotasi arah atau parameter lain secara real-time lalu menggunakan hasil perhitungan itu untuk membentuk gerakan.
Animasi Game Nggak Selalu Berupa Tumpukan Frame
Kalau dengar kata animasi orang gampang membayangkan banyak gambar yang diputar cepat. Konsep tersebut memang ada tetapi game modern punya banyak cara lain untuk menghasilkan gerakan.
Sebuah objek 3D misalnya dapat mempunyai posisi rotasi dan skala. Ketika nilai-nilai tersebut berubah dari waktu ke waktu objek terlihat bergerak meskipun developer nggak menggambar ulang setiap frame secara manual.
Keyframe Animation Punya Jalur yang Sudah Disiapkan
Pada keyframe animation animator menentukan pose atau nilai penting pada titik waktu tertentu. Software kemudian membantu membuat transisi di antara titik tersebut.
Teknik ini cocok ketika gerakan memang perlu mempunyai bentuk yang terkontrol seperti karakter melakukan gestur tertentu atau sebuah pintu menjalankan animasi pembukaan.
Procedural Animation Mengambil Pendekatan Berbeda
Daripada menentukan seluruh perjalanan gerakan sebelumnya developer membuat aturan tentang bagaimana objek harus bereaksi terhadap kondisi tertentu.
Saat kondisi berubah hasil gerakannya ikut berubah. Inilah alasan procedural animation bisa menghasilkan variasi yang terasa lebih dinamis.
Satu Rumus Bisa Menghasilkan Banyak Posisi
Misalnya sebuah objek perlu bergerak naik turun secara halus. Developer dapat menggunakan fungsi matematika yang nilainya berubah mengikuti waktu.
Selama game berjalan posisi objek terus dihitung dari fungsi tersebut. Developer nggak perlu menyimpan ratusan koordinat satu per satu.
Waktu Menjadi Salah Satu Input Penting
Banyak procedural animation membutuhkan nilai waktu. Dengan mengetahui berapa lama game sudah berjalan atau berapa waktu yang berlalu sejak frame sebelumnya sistem dapat menentukan kondisi gerakan berikutnya.
Karena itu konsep delta time sering muncul ketika membahas animasi real-time.
Delta Time Bikin Perhitungan Nggak Bergantung Mentah pada Jumlah Frame
Kalau objek digeser lima pixel setiap frame kecepatannya akan berbeda pada perangkat 30 FPS dan 120 FPS. Perangkat yang menghasilkan lebih banyak frame bakal menggerakkan objek jauh lebih cepat.
Dengan memasukkan waktu ke dalam perhitungan gerakan dapat dibuat mengikuti detik bukan sekadar jumlah frame yang berhasil digambar.
Sine Wave Bisa Membuat Gerakan Berulang yang Halus
Fungsi sinus sering dipakai sebagai contoh sederhana. Nilainya bergerak naik dan turun secara berulang sehingga cocok untuk membuat efek mengambang bergoyang atau perubahan kecil yang ritmis.
Amplitude dapat menentukan seberapa jauh gerakannya sementara frequency menentukan seberapa cepat pola tersebut berulang.
Gerakan Procedural Nggak Harus Terus Berulang
Walaupun contoh sine wave gampang dipahami procedural animation jauh lebih luas daripada objek yang terus bergoyang.
Aturan bisa bergantung pada kecepatan karakter arah pandangan posisi target permukaan yang diinjak sampai interaksi dengan objek lain.
TOPAN33 Bisa Melihat Transform sebagai Dasar Gerakan
Dalam pembahasan TOPAN33 game online kita bisa mulai dari transform. Banyak engine memakai transform untuk menyimpan informasi posisi rotasi dan skala sebuah objek.
Procedural animation kemudian dapat mengubah sebagian nilai tersebut berdasarkan kondisi game tanpa harus mengganti seluruh animasi utama.
Position Mengatur Lokasi Objek
Ini bagian paling gampang dilihat. Kalau nilai posisi berubah objek berpindah dari satu titik menuju titik lain.
Perhitungan procedural dapat menentukan arah dan jarak perpindahan berdasarkan aturan yang sedang aktif.
Rotation Mengubah Arah Hadap
Gerakan bukan cuma berpindah tempat. Kamera kepala karakter senjata dekorasi atau berbagai objek lain dapat berputar mengikuti target.
Sistem dapat menghitung arah menuju target kemudian mengubah rotasi secara bertahap supaya objek nggak langsung membalik secara kasar.
Interpolation Bikin Perubahan Nggak Terasa Lompat
Kalau posisi sekarang berada di titik A dan target mendadak pindah ke titik B sistem bisa saja langsung memindahkan objek. Secara teknis benar tetapi secara visual terasa patah.
Interpolation membantu menghasilkan nilai di antara posisi awal dan target sehingga perubahan terlihat lebih halus.
Lerp Sering Dipakai untuk Nilai Linear
Linear interpolation atau Lerp menghasilkan nilai di antara dua titik berdasarkan faktor tertentu. Konsepnya sederhana tetapi sangat berguna untuk banyak gerakan.
Walaupun begitu penggunaan Lerp tetap perlu memahami bagaimana faktor waktunya dihitung supaya hasilnya sesuai dengan karakter gerakan yang diinginkan.
Rotasi 3D Punya Tantangan Sendiri
Interpolasi rotasi tiga dimensi nggak selalu sesederhana menginterpolasi tiga angka sudut secara terpisah. Karena itu engine 3D sering menggunakan quaternion untuk merepresentasikan rotasi.
Quaternion memang kelihatan kurang ramah kalau baru pertama dilihat tetapi berguna untuk menangani banyak operasi rotasi dengan lebih konsisten.
Slerp Bisa Dipakai untuk Transisi Rotasi
Spherical linear interpolation atau Slerp merupakan salah satu teknik yang sering muncul ketika dua orientasi perlu diinterpolasi.
Hasilnya dapat membantu objek berputar menuju arah baru secara bertahap daripada langsung berpindah orientasi.
Look At Membuat Objek Menghadap Target
Bayangkan karakter perlu melihat objek yang bergerak di depannya. Sistem mengetahui posisi kepala dan posisi target lalu menghitung arah di antara keduanya.
Rotasi yang dihasilkan kemudian dapat dicampur dengan animasi dasar sehingga kepala mengikuti target tanpa seluruh tubuh harus memakai animasi khusus.
Di Sini Procedural Mulai Terasa Lebih Berguna
Animator nggak perlu membuat satu animasi melihat kiri satu melihat kanan lalu puluhan variasi untuk setiap sudut di antaranya.
Sistem dapat mengambil posisi target aktual lalu menghasilkan penyesuaian gerakan berdasarkan data tersebut.
Inverse Kinematics Bawa Konsep Ini Lebih Jauh
Inverse Kinematics atau IK digunakan ketika sistem mengetahui posisi akhir yang diinginkan lalu perlu menentukan bagaimana rangkaian joint harus bergerak untuk mencapainya.
Contoh paling gampang adalah kaki karakter yang perlu menapak di permukaan tertentu atau tangan yang perlu mencapai sebuah titik.
Tanpa IK Kaki Bisa Terlihat Melayang
Animasi berjalan yang dibuat untuk lantai rata bisa terlihat aneh ketika karakter berdiri di permukaan miring. Salah satu kaki mungkin masuk ke lantai sementara yang lain menggantung.
IK dapat membantu menyesuaikan posisi kaki berdasarkan permukaan aktual.
Raycast Bisa Membantu Mencari Posisi Permukaan
Game dapat mengirim ray ke arah bawah dari sekitar kaki karakter untuk mencari titik tempat permukaan berada.
Informasi titik dan normal permukaan tersebut kemudian dapat dipakai sebagai input untuk menyesuaikan posisi serta orientasi kaki.
Normal Permukaan Memberi Tahu Arah Kemiringan
Mengetahui tinggi tanah saja belum selalu cukup. Kalau permukaannya miring kaki juga perlu mengetahui arah kemiringannya.
Surface normal memberikan informasi tersebut sehingga orientasi kaki dapat disesuaikan lebih masuk akal.
IK Nggak Berarti Animator Jadi Nggak Dibutuhkan
Procedural animation bukan pengganti otomatis untuk seluruh pekerjaan animasi. Animasi dasar tetap sangat penting untuk membentuk karakter gerakan.
IK biasanya bekerja sebagai lapisan tambahan yang menyesuaikan bagian tertentu berdasarkan kondisi nyata di dalam game.
Animation Layer Membuat Dua Pendekatan Bisa Digabung
Karakter dapat menjalankan animasi berjalan dari animator sementara procedural layer mengatur kepala tangan atau kaki.
Dengan begitu gerakan utama tetap mempunyai karakter yang dirancang manusia tetapi detailnya bisa beradaptasi dengan keadaan.
Weight Menentukan Seberapa Kuat Pengaruh Procedural
Pengaruh procedural nggak harus langsung seratus persen. Sistem dapat mempunyai weight dari nol sampai satu untuk menentukan seberapa banyak hasil perhitungan memengaruhi pose akhir.
Weight yang berubah perlahan juga membantu transisi masuk dan keluar dari procedural animation terasa lebih natural.
Blend Menghindari Perubahan Pose Mendadak
Misalnya karakter baru saja mulai memperhatikan target. Kalau kepala langsung berputar penuh pada satu frame hasilnya terasa seperti patah.
Blend membuat pengaruh tracking bertambah secara bertahap sampai mencapai nilai yang diinginkan.
Spring Simulation Bisa Membuat Gerakan Ikutan
Rambut aksesori kain atau benda yang menggantung sering membutuhkan gerakan lanjutan setelah tubuh utama berubah arah.
Model spring sederhana dapat dipakai untuk menghasilkan efek tertinggal lalu kembali menuju posisi keseimbangan.
Damping Mencegah Gerakan Terus Memantul
Pegas tanpa redaman bisa terus berosilasi terlalu lama. Damping mengurangi energi gerakan dari waktu ke waktu sehingga objek akhirnya kembali tenang.
Kombinasi stiffness dan damping menentukan apakah gerakannya terasa lembut berat atau cepat kembali ke posisi semula.
Noise Bisa Membuat Gerakan Nggak Terlalu Sempurna
Gerakan yang benar-benar identik setiap saat kadang terlihat terlalu mekanis. Noise dapat memberikan variasi kecil yang berubah secara halus.
Teknik ini bisa dipakai pada gerakan kamera objek lingkungan atau detail visual lain selama penggunaannya sesuai desain.
Random Murni dan Noise Nggak Sama
Kalau setiap frame mengambil angka random baru objek bisa bergerak sangat kasar karena nilainya melompat tanpa hubungan dengan frame sebelumnya.
Noise yang kontinu dapat menghasilkan perubahan yang lebih halus sehingga cocok untuk gerakan organik tertentu.
Procedural Animation Bisa Bereaksi pada Kecepatan
Objek dapat membaca velocity karakter lalu mengubah kemiringan atau amplitudo gerak berdasarkan kecepatannya.
Saat karakter bergerak cepat efeknya lebih kuat. Ketika melambat procedural layer ikut kembali tenang.
Arah Gerak Juga Bisa Menjadi Input
Kalau karakter mendadak berbelok ke kiri aksesori bisa sedikit tertinggal ke kanan sebelum mengikuti tubuh.
Gerakan seperti ini dapat dihitung dari perubahan arah tanpa membutuhkan animasi terpisah untuk setiap kemungkinan sudut belokan.
Kamera Juga Bisa Memakai Gerakan Procedural
Procedural animation nggak terbatas pada karakter. Kamera dapat mempunyai efek sway kecil ketika bergerak atau mengikuti target dengan smoothing tertentu.
Yang perlu dijaga adalah intensitasnya karena gerakan kamera berlebihan justru dapat membuat pengalaman nggak nyaman.
Camera Shake Bisa Dibangun dari Parameter
Daripada mempunyai satu animasi shake tetap sistem dapat menerima parameter seperti intensity duration dan frequency.
Efek yang sama kemudian bisa menghasilkan variasi berbeda sesuai kejadian yang sedang divisualisasikan.
TOPAN33 Bisa Punya Nama yang Pas untuk Efek Angin
Kalau mengambil nama TOPAN33 sebagai inspirasi visual kita bisa membayangkan dekorasi kain daun partikel atau objek ringan yang bereaksi terhadap arah angin virtual. Tapi ini hanya contoh konsep desain bukan klaim bahwa TOPAN33 benar-benar memakai implementasi tertentu.
Arah dan kekuatan angin dapat dijadikan parameter lalu setiap objek menghitung responsnya sendiri sesuai karakter yang diberikan developer.
Satu Wind Vector Bisa Dipakai Banyak Objek
Sistem dapat mempunyai vector yang menyatakan arah dan kekuatan angin. Objek tertentu membaca vector tersebut lalu menghitung seberapa besar pengaruhnya.
Benda berat bisa hampir nggak bergerak sementara benda ringan bereaksi lebih kuat walaupun keduanya membaca sumber data yang sama.
Parameter Membuat Sistem Lebih Mudah Diatur
Daripada menulis ulang kode untuk setiap objek developer dapat mengekspos parameter seperti stiffness damping amplitude speed dan response.
Designer kemudian bisa mengubah karakter gerakan tanpa harus membangun algoritma baru dari nol.
Procedural Nggak Berarti Semuanya Harus Dihitung Rumit
Kadang aturan sederhana sudah cukup. Rotasi kecil berdasarkan kecepatan atau posisi naik turun berdasarkan fungsi waktu juga termasuk ide procedural.
Kerumitannya sebaiknya mengikuti kebutuhan visual bukan sekadar mengejar sistem yang kelihatan canggih.
CPU Cost Tetap Perlu Dipikirkan
Karena perhitungan dilakukan saat game berjalan terlalu banyak procedural controller dapat menambah beban CPU.
Satu objek mungkin ringan tetapi kalau aturan yang sama dijalankan pada ribuan objek setiap frame bebannya bisa berubah signifikan.
Update Nggak Selalu Harus Dilakukan Setiap Frame
Beberapa efek membutuhkan respons sangat cepat tetapi yang lain masih terlihat baik walaupun diperbarui lebih jarang.
Developer dapat menyesuaikan frekuensi update berdasarkan kebutuhan dan jarak objek dari kamera.
LOD Bisa Berlaku pada Animasi Juga
Level of Detail sering dikaitkan dengan model 3D tetapi gagasan serupa dapat diterapkan pada animasi.
Karakter yang sangat jauh mungkin nggak membutuhkan IK dan secondary motion sedetail karakter yang berada tepat di depan kamera.
Off-Screen Object Nggak Selalu Perlu Update Penuh
Kalau sebuah objek sedang berada jauh di luar area pandang sebagian pekerjaan visualnya dapat dikurangi atau dihentikan sementara.
Saat objek kembali mendekati kamera state dapat disinkronkan lagi sesuai kebutuhan.
GPU Juga Bisa Membantu Procedural Motion Tertentu
Nggak semua perhitungan harus dilakukan CPU. Shader dapat menghasilkan perubahan posisi vertex atau efek visual berdasarkan waktu dan parameter lain langsung di GPU.
Pendekatan tersebut sering berguna untuk banyak elemen visual yang mengikuti aturan serupa.
Vertex Animation Bisa Membuat Permukaan Bergerak
Posisi vertex pada sebuah mesh dapat digeser menggunakan fungsi tertentu sehingga permukaan terlihat bergelombang atau bergetar.
Karena perhitungannya terjadi pada shader efek seperti ini dapat diterapkan tanpa harus menggerakkan setiap bagian melalui object transform terpisah.
CPU dan GPU Punya Jenis Pekerjaan yang Berbeda
Procedural animation untuk keputusan karakter dan IK mungkin lebih cocok berada pada logic CPU sementara deformasi visual massal tertentu bisa lebih cocok dikerjakan GPU.
Pembagian tersebut bergantung pada engine perangkat target dan kebutuhan game.
Physics dan Procedural Animation Bisa Saling Bertemu
Gerakan berbasis physics juga menghasilkan state saat runtime tetapi nggak semua procedural animation harus menggunakan simulasi physics penuh.
Kadang rumus sederhana lebih stabil murah dan mudah diarahkan secara artistik daripada simulasi fisika lengkap.
Developer Perlu Memilih Mana yang Harus Realistis
Game nggak selalu membutuhkan hukum fisika dunia nyata secara sempurna. Yang dicari sering kali justru gerakan yang terasa benar di mata pemain.
Karena itu procedural animation bisa sengaja dilebihkan atau dikurangi demi gaya visual.
Deterministic Behavior Berguna untuk Pengujian
Kalau input dan kondisi awal sama developer kadang ingin procedural system menghasilkan perilaku yang dapat direproduksi.
Ini mempermudah debugging karena bug tertentu dapat dijalankan ulang dengan keadaan yang mirip.
Randomness Perlu Dikendalikan kalau Reproduksi Dibutuhkan
Kalau procedural animation memakai random value developer dapat menggunakan seed tertentu untuk pengujian sehingga urutan variasinya dapat diulang.
Randomness visual seperti ini tetap berbeda dari mekanisme yang menentukan hasil permainan.
Procedural Visual Jangan Dicampur dengan Probabilitas Hasil
Objek bergoyang lebih kuat cahaya bergerak lebih cepat atau kamera menghasilkan shake tertentu bukan petunjuk bahwa hasil game berikutnya akan berubah.
Lapisan animasi bertugas menyajikan gerakan sedangkan aturan hasil berada pada bagian logika yang berbeda sesuai desain masing-masing permainan.
Testing Bisa Memeriksa Batas Gerakan
Procedural system berpotensi menghasilkan nilai ekstrem kalau inputnya berada di luar perkiraan. Karena itu parameter dapat diberi clamp atau batas tertentu.
Test kemudian memeriksa apakah objek tetap berada dalam rentang gerakan yang dianggap aman.
Debug Gizmo Membantu Melihat Perhitungan yang Nggak Kelihatan
Vector target arah permukaan dan posisi IK kadang susah dipahami hanya dari animasi akhir.
Developer dapat menggambar garis titik atau bentuk bantuan pada mode debug untuk melihat data yang sedang dipakai sistem.
Profiler Menjawab Apakah Efeknya Terlalu Mahal
Kalau frame mulai berat setelah banyak karakter masuk layar profiler dapat menunjukkan berapa waktu yang dihabiskan oleh animation update IK physics atau script lainnya.
Dari sana optimasi dilakukan berdasarkan data bukan sekadar menonaktifkan fitur secara acak.
Procedural Animation Bikin Gerakan Lebih Adaptif
Kekuatan utama pendekatan ini bukan karena procedural selalu lebih bagus daripada keyframe. Keduanya justru sering saling melengkapi.
Keyframe memberikan kontrol artistik yang kuat sementara procedural layer memberi kemampuan beradaptasi terhadap kondisi yang sulit diprediksi animator sebelumnya.
Satu Animasi Dasar Bisa Punya Banyak Variasi
Karakter dapat memakai animasi dasar yang sama tetapi arah kepala posisi kaki gerakan aksesori dan respons lingkungan berubah mengikuti situasi.
Hasilnya game nggak perlu menyimpan animasi unik untuk setiap kombinasi kecil yang mungkin terjadi.
TOPAN33 Membahas Teknologi yang Baru Terlihat saat Game Bergerak
Lewat TOPAN33 Procedural Animation kita bisa melihat bahwa gerakan di layar nggak selalu datang dari satu file animasi yang tinggal diputar. Ada gerakan yang baru benar-benar terbentuk setelah game mengetahui waktu posisi kecepatan arah target atau kondisi lingkungan.
Itulah yang membuat teknologi ini menarik. Aturan dasarnya bisa sederhana tetapi ketika beberapa parameter saling berhubungan hasil visualnya dapat terus berubah mengikuti keadaan permainan.
Aturan yang Tepat Bisa Lebih Berguna daripada Ribuan Gerakan Terpisah
Animator tetap menentukan karakter visual dan developer tetap menentukan batas sistemnya. Procedural Animation berada di tengah keduanya dengan mengambil data runtime lalu mengubahnya menjadi gerakan yang sesuai.
Dari objek kecil yang bergoyang sampai kaki karakter yang menyesuaikan permukaan konsepnya tetap sama: jangan simpan semua kemungkinan gerakan satu per satu kalau sebagian di antaranya bisa dibentuk secara masuk akal dari aturan yang berjalan langsung di dalam game.