Bagikan melalui


Grafik 2D untuk game DirectX

Kami membahas penggunaan grafik dan efek bitmap 2D, dan cara menggunakannya dalam permainan Anda.

Grafik 2D adalah subset grafik 3D yang berhubungan dengan primitif atau bitmap 2D. Lebih umumnya, mereka tidak menggunakan koordinat z dalam cara permainan 3D mungkin, karena permainan biasanya terbatas pada bidang x-y. Mereka kadang-kadang menggunakan teknik grafis 3D untuk membuat komponen visual mereka, dan mereka umumnya lebih sederhana untuk dikembangkan. Jika Anda baru bermain game, game 2D adalah tempat yang bagus untuk memulai, dan pengembangan grafis 2D bisa menjadi tempat yang baik bagi Anda untuk mendapatkan handel di DirectX.

Anda dapat mengembangkan grafis game 2D di DirectX menggunakan Direct2D atau Direct3D, atau beberapa kombinasi. Banyak kelas yang lebih berguna untuk pengembangan game 2D ada di Direct3D, seperti kelas Sprite. Direct2D adalah sekumpulan API yang terutama menargetkan antarmuka pengguna dan aplikasi yang memerlukan dukungan untuk menggambar primitif (seperti lingkaran, garis, dan bentuk poligon datar). Dengan mengingat hal itu, ia masih menyediakan sekumpulan kelas dan metode yang kuat dan berkinerja untuk membuat grafik game juga, terutama ketika membuat overlay, antarmuka, dan tampilan heads-up (HUD) yang kuat dan berkinerja baik -- atau untuk membuat berbagai game 2D, dari yang sederhana hingga cukup rinci. Pendekatan yang paling efektif saat membuat game 2D, adalah menggunakan elemen dari kedua pustaka, dan itulah cara kita akan mendekati pengembangan grafis 2D dalam topik ini.

Sekilas konsep

Sebelum munculnya grafis 3D modern dan perangkat keras yang mendukungnya, game terutama 2D, dan banyak teknik grafis mereka melibatkan memindahkan blok memori di sekitar -- biasanya array data warna yang akan diterjemahkan atau diubah menjadi piksel di layar dengan cara 1:1.

Di DirectX, grafik 2D adalah bagian dari alur 3D. Ada berbagai resolusi layar dan perangkat keras grafis yang jauh lebih besar yang tersedia, dan mesin grafis 2D Anda harus dapat mendukungnya tanpa perubahan keakuratan yang signifikan.

Berikut adalah beberapa konsep dasar yang harus Anda kenal saat memulai pengembangan grafis 2D.

  • Piksel dan koordinat raster. Piksel adalah satu titik pada layar raster, dan memiliki pasangan koordinat (x, y) sendiri yang menunjukkan lokasinya pada layar. (Istilah "piksel" sering digunakan secara bergantian antara piksel fisik yang terdiri dari tampilan dan elemen memori yang dapat diatasi yang digunakan untuk menahan warna dan nilai alfa piksel sebelum dikirim ke layar.) Raster diperlakukan oleh API sebagai kisi persegi panjang elemen piksel, yang sering memiliki korespondensi 1:1 dengan kisi piksel fisik layar. Sistem koordinat Raster dimulai dari kiri atas, dengan piksel pada (0, 0) di sudut kiri atas kisi.
  • Grafik bitmap (kadang-kadang disebut grafik raster) adalah elemen grafis yang direpresentasikan sebagai kisi persegi panjang dari nilai piksel. Sprite -- array piksel komputasi yang dikelola independen dari raster -- adalah salah satu jenis grafik bitmap, umumnya digunakan untuk karakter aktif atau objek animasi independen latar belakang dalam sebuah game. Berbagai bingkai animasi untuk sprite diwakili sebagai koleksi bitmap yang disebut "lembar" atau "batch." Latar belakang adalah objek bitmap yang lebih besar yang memiliki resolusi yang sama atau lebih besar dari raster layar, dan sering berfungsi sebagai latar belakang untuk lapangan bermain game.
  • Grafik vektor adalah grafik yang menggunakan primitif geometris, seperti titik, garis, lingkaran, dan poligon untuk menentukan objek 2D. Mereka direpresentasikan bukan sebagai array piksel, tetapi sebagai persamaan matematika yang menentukannya dalam ruang 2D. Mereka tidak selalu memiliki korespondensi 1:1 dengan kisi piksel layar, dan harus diubah dari sistem koordinat yang Anda render ke dalam sistem koordinat raster tampilan.
  • Terjemahan adalah ketika Anda mengambil titik atau puncak dan menghitung lokasi barunya dalam sistem koordinat yang sama.
  • Penskalaan adalah ketika Anda memperbesar atau menyusutkan objek dengan faktor skala tertentu. Dengan gambar vektor, Anda menyusut dan memperbesar simpul komponennya; dengan bitmap, Anda memperbesar elemen piksel atau menguranginya. Dengan gambar bitmap, Anda kehilangan data piksel saat gambar menyusut, dan Anda memperbesar piksel individual saat gambar diskalakan lebih dekat. Untuk yang terakhir, Anda dapat menggunakan operasi interpolasi warna piksel, seperti pemfilteran bilinear, untuk menghaluskan batas warna keras antara piksel yang diperbesar.
  • Rotasi adalah ketika Anda memutar objek tentang sumbu atau sumbu tertentu. Dengan gambar vektor, simpul geometri dikalikan dengan matriks rotasi untuk mendapatkan verteks yang diputar; dengan gambar bitmap, algoritma yang berbeda dapat digunakan, masing-masing dengan tingkat keakuratan yang lebih rendah atau lebih besar dalam hasilnya. Seperti halnya penskalaan dan terjemahan, ada API khusus untuk operasi rotasi.
  • Transformasi adalah ketika Anda mengambil satu titik atau puncak dalam satu sistem koordinat dan menghitung titik atau vertex yang sesuai dalam sistem koordinat lain. Ini termasuk terjemahan, penskalaan, dan rotasi, serta operasi penghitungan koordinat lainnya.
  • Kliping adalah ketika Anda menghapus bagian bitmap atau geometri yang tidak berada dalam area tampilan yang dapat dilihat, atau disembunyikan oleh objek dengan prioritas tampilan yang lebih tinggi.
  • Buffer bingkai adalah area dalam memori -- seringkali dalam memori perangkat keras grafis itu sendiri -- yang berisi peta raster akhir yang akan Anda gambar ke layar. Rantai pertukaran adalah kumpulan buffer, di mana Anda menggambar buffer belakang dan, ketika gambar siap, Anda "menukar" ke depan dan menampilkannya.

Pertimbangan Desain

Pengembangan grafis 2D adalah cara yang bagus untuk terbiasa berkembang dengan Direct3D, dan akan memungkinkan Anda untuk menghabiskan lebih banyak waktu pada aspek penting lainnya dari pengembangan game: audio, kontrol, dan mekanika game.

Selalu gambar ke buffer belakang. Menggambar langsung ke buffer bingkai Anda berarti bahwa gambar Anda akan ditampilkan ketika sinyal untuk tampilan diterima (biasanya setiap 1/60 detik), bahkan jika operasi menggambar Anda belum selesai!

Desain mesin grafis Anda untuk mendukung pilihan resolusi yang baik, dari 1024x600 hingga 1920x1080 (atau lebih tinggi). Audiens Anda akan berterima kasih jika Anda mendukung resolusi asli monitor LCD mereka, terutama dengan grafik 2D.

Karya seni yang hebat akan menjadi aset terbesar Anda, dalam hal visual. Meskipun grafik bitmap Anda mungkin tidak memiliki pukulan visual fotorealistik 3D menggunakan fitur model shader terbaru, karya seni resolusi tinggi yang hebat sering dapat menyampaikan sebanyak atau lebih banyak gaya dan kepribadian -- dan dengan penalti performa yang jauh lebih sedikit.

Referensi