Belajar Membuat Game dengan Blender: Dasar-dasar 3D

Bagus Aji Santoso 3 Januari 2018

Belajar Membuat Game dengan Blender: Dasar-dasar 3D

Artikel ini merupakan salah satu bagian dari terjemahan buku The Complete "Game Development with Blender" Book. Baca artikel lain dari buku ini dari tag blendergameenginebook.

Dasar-dasar 3D

Jika pembaca belum pernah menggunakan aplikasi 3D sebelumnya, istilah modeling, animasi, dan rendering mungkin terdengar asing. Jadi sebelum mulai membuat game spektakuler yang selalu ingin pembaca buat, mari kita pelajari dulu dasar-dasar grafika komputer. Pembaca tidak perlu menyelami pembahasan di bawah ini jika sudah paham apa maksud RGB dan perbedaan antara Cartesian dan Gaussian.

Pengetahuan di bagian ini bersifat umum dan dapat diaplikasikan ke semua aplikasi 3D lainnya. Jadi meskipun pembaca datang dari aplikasi yang berbeda, konsep dasarnya tetap sama.

Sistem Koordinat

The three axes illustrated

Point, Edge, Triangle, dan Mesh

Meskipun kita menentukan sebuah posisi di ruang menggunakan koordinat XYZ, satu titik (atau sebuah "vertex," istilah yang paling sering digunakan di grafika komputer) tidak lah begitu berguna karena satu titik terlalu kecil. Akan tetapi, kita bisa menggabungkan vertex ini dengan vertex lain untuk membuat sebuah garis (yang dikenal juga dengan istilah "edge"). Sebuah edge juga tidak begitu terlihat, sehingga kita membuat vertex baru kemudian menggabungkan ketiganya dengan baris lain lalu mengisi bagian tengahnya. Sekarang, ada sesuatu yang lebih menarik muncul, sebuah triangle (juga dikenal dengan istilah "face"). Dengan menghubungkan beberapa face kita dapat membuat bentuk lain yang menghasilkan bentuk dengan istilah "mesh" atau "model". Gambar di bawah menunjukkan bagaimana sebuah mes dapat dipecah menjadi face, lalu edges, dan terakhir, vertices.

Teapot, cube, face, edge and vertex.

Mengapa triangle sangat penting? Ternyata, grafik komputer modern menggunakan triangle sebagai dasar untuk hampir semua jenis bentuk alias shape. Sebuah persegi panjang (dikenal juga dengan istilah quadrangle atau quad) sebetulnya terdiri dari dua triangle. Sebuah kotak/kubus/dadu terdiri dari enam persegi yang saling terhubung.

Di Blender, sebuah mesh dapat dibuat dengan kombinasi triangle, quad, atau n-gon. Keuntungan menggunakan n-gon adalah kemampuan untuk mengambil topologi yang rapi saat modeling. Tanpa n-gon, beberapa area dari sebuah model (seperti jendela atau dinding) akan membutuhkan lebih banyak triangle atau quad seperti pada gambar di bawah. Meski n-gon memudahkan proses modeling, Blender tetap mengubahnya menjadi triangle saat game dijalankan.

The same cylinder cap can be made up of triangles, quads, or an n-gon.

Proses membuat sebuah mesh dengan menyusun vertice, edge, dan face disebut dengan modeling. Blender memiliki banyak tool untuk membantu kita membuat bentuk geometri yang diinginkan.

Perlu dicatat bahwa tidak seperti di dunia nyata, model-model poligonal tidak memiliki volume. Mereka hanya kulit yang terdiri dari face yang saling terhubung dan membentuk suatu objek, tapi di dalamnya selalu kosong.

Surface normals are displayed as cyan lines protruding from the faces.

Konsep lain yang mungkin akan ditemukan seorang modeler adalah "surface normal", atau "normal" saja. Normal adalah properti setiap face yang mengindikasikan arah yang dihadapi oleh sebuah poligon. Karena normal dipakai untuk melakukan shading computation dari sebuah permukaan/surface, idealnya semua normal untuk sebuah mesh harus bernilai "outward". Salah mengarahkan normal dapat membuat mesh menampilkan warna hitam atau tidak terlihat. Untungnya, ada fungsi Make Normals Consistent di Blender yang biasanya akan menyelesaikan permasalahan ini. Gambar 1.8 menunjukkan bagaimana normal ditampilkan di Blender.

Beyond Polygons

Secara teknis ada beberapa pendekatan untuk grafika komputer yang tidak bergantung pada triangle atau poligon seperti NURBS (Non-uniform rational B-spline) dan voxel (singkatan dari VOlumetric piXEL). Tapi polygon modeling dan rendering masih menjadih solusi yang paling umum dan menjadi satu-satunya metode yang didukung oleh game engine ini.

Transformasi Sederhana

Ada tiga basic transform yang perlu diketahui yaitu:

  • Translation: Menggeser sebuah objek ke arah manapun tanpa memutarnya.
  • Scaling: Mengubah ukuran suatu objek dari satu titik.
  • Rotation: Memutar sebuah objek dari satu titik.

Ketiganya merupakan manipulasi paling sering yang akan kita temui. Perhatikan ilustrasi di bawah.

Translation, scaling, and rotation.

Material dan Texture

Menggunakan poligon, kita bisa mendefinisikan bentuk dari sebuah mesh. Untuk mengubah warna dan tapilannya, kita perlu menggaplikasikan material ke objek tersebut. Material mengontrol warna, terang, pantulan, bahkan transparansi sebuah objek. Variabel-variabel ini menambahkan detail ke objek tersebut.

Seringkali, mengubah warna tidak cukup untuk membuat sebuah permukaan terlihat realistis. Disinilah dimana texture datang. Texturing merupakan teknik yang umum dipakai untuk menambah warna dan detail ke sebuah mes dengan membungkus mesh tersebut dengan sebuah gambar, seperti stiker. Bayangkan sebuah globe mainan, jika pembaca menyobek kertas yang membungkus globe tersebut secara hati-hati, maka akan terlihat bahwa kertas tersebut adalah sebuah texture dengan bolanya sebagai mesh. Proyeksi gambar 2D menjadi mesh 3D disebut dengan texture mapping. Texture mapping dapat dioperasikan secara otomatis menggunakan fungsi proyeksi yang sudah ada atu dilakukan secara manual yang menggunakan UV layout untuk memetakan gambar 2D ke mesh 3D. Gambar 1.10 mengilustrasikan bagaimana sebuah gambar dipetakan ke sebuah model.

Meshes with texture applied.

Secara tradisional, sebuah texture akan mengubah warna sebuah permukaan. Tapi bukan hanya itu saja yang ia bisa lakukan, texture juga bisa mengubah properti lain dari sebuah permukaan misalnya transparansi, daya pantul, bahkan daya pantulnya untuk membuat ilusi sebuah permukaan yang lebih detail.

From left to right: diffuse map, normal map, and specular map.

Sebuah diffuse map mengontrol warna dasar sebuah permukaan. Sebuah normal map mengontrol permukaan normal sebuah objek, membuat efek pantul dengan mengubah bagaimana sebuah cahaya direfleksikan dari objek tersebut. Sebuah specular map mengontrol refleksi specular dari sebuah objek, membuatnya terlihat terang ditempat tertentu dan redup ditempat lain. Sebuah texture map juga bisa memiliki pixel yang transparan, merender bagian tertentu dari objek menjadi transparan.

Secara umum, texture adalah file gambar. Tapi ada juga cara lain untuk membentuk sebuah permukaan, misalnya dengan menggunakan procedural texture. Procedural texture berbeda dengan sebuah gambar karena ia dibuat oleh sebuah algoritma secara real time, bukan dari gambar yang sudah jadi. Blender game engine belum mendukung fitur procedural textures.

Lights/Pencahayaan

Semua yang pembaca lihat merupakan hasil dari cahaya yang masuk ke dalam mata, tanpa cahaya, dunia akan kelam. Seperti itu pula pentingnya sebuah cahaya di dunia maya. Dengan adanya cahaya, maka akan ada pula sebuah bayangan. Bayangan mungkin bukan sesuatu yang penting untuk dipikirkan sehari-hari, tapi peran sebuah bayangan dan gambar membuat sebuah perbedaan yang amat besar untuk sebuah scene yang ditampilkan.

Disebagian besar aplikasi 3D, ada beberapa jenis pencahayaan yang tersedia, setiap tipe memiliki keuntungan dan kekurangan. Contoh, sebuah Spot lamp meniru sebuah lampu dengan arah cahaya yang kerucut, sebuah sun lamp meniru sumber cahaya dari jarak yang jauh. Lamp di blender diperlakukan seperti objek biasa, mereka bisa diposisikan dan diputar seperti objek lain. Gambar 1.12 menunjukkan bagainana perbedaan lamp yang ada di Blender.

From left: Lamp, Sun, Spot lamp, Hemi lamp, and Area lamp.

Anggap pencahayaan/lighting sebagai sesuatu yang membuat sebuah scene terlihat. Pencahayaan yang baik dapat menampilkan bagian yang penting dan menyembunyikan bagian yang tidak terlalu penting dengan bayangan sehingga terlihat lebih realitastis.

Camera/Kamera

Camera objects

Saat membuat tampilan 3D, kita melihat sebuah dunia virtual dari sudut pandang serba tahu. Dalam mode ini kita bisa melihat dan mengubah dunia 3D ini dari sudut manapun seperti seorang sutradara film berjalan keliling untuk mengatur sesuatu. Setelah game dimulai, pemain harus melihat game tersebut dari predetermined camera/sebuah kamera yang sudah ditentukan. Catat bahwa predetermined camera bukan berarti kamera tersebut sudah fixed alias tidak akan berubah-ubah. Hampir semua jenis game memiliki kamera yang bereaksi terhadap masukan pemain. Dalam game action, camera akan mengikuti gerakan karakter dari belakang, dalam game straetegi, kamera mungkin melihat dari atas, di game platformer, kamera biasanya mengikuti dari sisi samping.

Kamera juga dianggap sebagai sebuah objek biasa oleh Blender sehingga kita bisa memanipulasi lokasi dan posisi seperti objek lain.

Drawing and Composition for Visual Storytellers

Berbicara tentang pencahayaan dan kamera, ada buku berjudul Framed Ink yang ditulis oleh Marcos Mateu-Mestre. Buku ini menggunakan banyak gambar untuk enjelaskan prinsip-prinsip visual storytelling.

Animation/Animasi

Dalam konteks buku ini, animation merujuk pada teknik yang membuat sesuatu berubah seiring dengan berjalannya waktu. Misal, animasi dapat terdiri dari menggeser objek, mengubah bentuknya, atau mengubah wanrnya. Untuk mengatur sebuah animasi, kita akan membuat "keyframe", yang merupakan snapshot disatu waktu yang menyimpan nilai tertentu yang berkaitan dengan animasi tadi. Software lalu dapat menambahkan sesuatu diantara nilai-nilai tadi untuk melakukan transisi yang halus. Gambar di bawha menujukan Dopesheet Editor milik Blender. Dopesheet memungkinkan kita untuk melihat beberapa properti yang berubah saat sebuah animasi terjadi, sumbu horisontal merepresentasikan waktu sedangkan sumbu vertikal menampilkan properti-properti, misal lokasi dan rotasi.

Dopesheet Editor: each diamond shape is a keyframe.

LocRotScale animation

Armature animation

Shape keys animation.

Cara ketiga untuk menganimasi ialah menggunakan shape keys. Shape keys adalah snapshot dari mesh di beberapa bentuk. Cara ini biasanay dipakai untuk menganimasikan perubahan yang tidak bisa dianimasikan dengan cara biasa.

Procedural physics-based motion.

Game

Sejauh ii, kita sudah cukup banyak membahas tentang 3D. Tapi bagaimana game engine memanfaatkan teori-teori tadi? Jadi, sebuah game engine sebetulnya hanya mengambil aset 3D yang sudah ada lalu memberikan "otak" ke objek tersebut sehingga mereka tahu bagaimana merespon suatu event. "Otak" ini dapat berubah logic bricks (melakukan akse berdasarkan input user), skrip (yang dapat menambah fungsionalitas logic bricks), atau properti fisik dari sebuah objek (misal memberikan pengaturan rigid body sehingga sebuah objek dapat jatuh secara realistis).

Game = Object + Logic.

Sebuah game engine terdiri dari beberapa komponen:

  • Rendering Engine : Mengubah tampilan 3D yang sudah dibuat (termasuk models, lights, dan camera) menjadi gambar yang ditampilkan di layar.
  • Physics : Menangani simulasi fisika seperti tabrakan dari objek-objek yang ada.
  • Logic/Scripting : Otak dibelakang sebuah game yang bereaksi pada masukan pengguna, menentukan arah, dan mengingat apa yang terjadi di dalam game.
  • Sound : Memproduksi event audio.

Daftar di atas belum lengkap tapi dapat memberikan ide dasar apa yang dilakukan sebuah game engine. Blender game engine memberikan kita kontrol setiap komponen-komponen ini yang akan kita pelajari satu per satu.

Quality vs. Performance

Membuat sebuah video game akan menyeimbangkan antara kualitas dan performa. Sebagai seorang desainer, kita ingin membuat dunia virtual yang kaya dan sedetail mungkin, disisi lain, kita juga harus memastikan game berjalan dengan halus bagi orang yang mungkin tidak memiliki komputer berspesifikasi tinggi.

Sepanjang proses pembuatan game, kita akan menemui kasus dimana kita harus mengambil keputusan untuk memprioritaskan kualitas visual atau performa game. Kita juga akan mempelajari trik untuk mencapai visual yang bagus tnapa mengorbankan performa juga bagaimana mengoptimalkan bagian game yang lambat.

Artikel selanjutnya, kita akan mulai menggunakan aplikasi Blender