• Tidak ada hasil yang ditemukan

BAB 3 PERANCANGAN DAN PEMBUATAN. Engine akan dirancang agar memenuhi syarat maintainability, reusability dan

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB 3 PERANCANGAN DAN PEMBUATAN. Engine akan dirancang agar memenuhi syarat maintainability, reusability dan"

Copied!
11
0
0

Teks penuh

(1)

BAB 3

PERANCANGAN DAN PEMBUATAN

3.1 Perancangan Engine

Engine akan dirancang agar memenuhi syarat maintainability, reusability dan usability. Maintainability berarti kode program engine harus mudah dibaca, rapi dan terdokumentasi dengan baik. Reusability berarti engine harus dapat dipakai untuk membuat sebuah project – project game lainnya dan mampu memotong kinerja dalam sebuah pembuatan game. Usability berarti engine harus dapat digunakan dengan mudah oleh user dan untuk mencapai tujuan ini digunakanlah One Point Single Entry, yang berarti pemakai diberi kemudahan memakai engine hanya dengan satu buah jalan masuk, dalam hal ini include filenya.

3.2 Alternatif Pemecahan Masalah

Untuk memecahkan masalah kerumitan dalam pembuatan game skala besar yang telah dijelaskan di latar belakang, maka penulis mencoba untuk membuat sebuah engine game 3 dimensi yang bersifat open source dan sebuah aplikasi game yang dibuat berdasarkan engine ini. Engine ini dibuat untuk mampu menyesuaikan di lingkungan dengan hardware berspesifikasi menengah( middle end ). Engine ini menggunakan back face, viewing frustum dan occlusion culling dalam pengimplementasian teknik culling. Beberapa pertimbangan mengapa memakai algoritma culling tersebut :

(2)

Tabel 3.1. Tabel Keuntungan dan Kerugian Teknik Culling

Metoda Keuntungan Kerugian

Back Face di handle oleh DirectX dan

kita tinggal implementasikan saja

Hampir tidak ada karena performa disesuaikan dengan kekuatan kartu grafis

Viewing Frustum Mudah diimplementasikan dan ringan dalam pemrosesan sehingga tidak membebani CPU terlalu banyak

Kurang akurat, banyak polygon yang dalam perhitungan mendekati viewing frustum tetap dirender

Occlusion Akurat dalam membuang

polygon yang terletak di balik polygon lain yang lebih besar

Di lingkungan 3 dimensi yang kompleks dapat memakan kerja CPU yang banyak.

3.3 Rancangan Viewing Frustum Culling

Viewing frustum adalah bidang visibility yang membatasi dunia 3 dimensi yang luas hanya sebatas pandangan camera dan membentuk bangun piramid. Dalam menghitung rumusan bidang viewing frustum kita menggunakan matriks projection dan matriks view. Matriks projection digunakan untuk memproyeksikan benda yang telah berada di view space ( koordinat kamera ). Vertices yang akan dites dengan bidang akan terlebih dulu melewati perkalian matriks projection dan matriks view, maka pembuatan bidang memakai perhitungan matriks tersebut. Misalkan :

Vertex v = ( x y z w = 1 ) dan Matriks M ( Matriks Projection dan View ) 4x4

(

)

⎟⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎜ ⎜ ⎝ ⎛ • • • • = ⎟⎟ ⎟ ⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎜ ⎜ ⎝ ⎛ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ = ′ ′ ′ ′ ⇒ = ′ 4 3 2 1 44 34 24 14 43 33 23 13 42 32 22 12 41 31 21 11 , , , col col col col m w m z m y m x m w m z m y m x m w m z m y m x m w m z m y m x v v v v w z y x vM v ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ = j j j j j m m m m

(3)

Hasil dari v′ merupakan titik yang telah ditransformasi dengan matriks projection dan matriks view, selanjutnya kita tinggal mengecek persamaan apakah titik tersebut terletak di dalam 6 bidang apabila memenuhi persamaan berikut :

w z w y w w x w ′ < ′ < ′ < ′ < ′ − ′ < ′ < ′ − 0 x w′< ′

− x’ terletak di dalam setengah bidang bagian kiri w

x′< ′ x’ terletak di dalam setengah bidang bagian kanan y

w′< ′

− y’ terletak di dalam setengah bidang bagian bawah w

y′< ′ y’ terletak di dalam setengah bidang bagian atas z′

<

0 z’ terletak di dalam setengah bidang bagian near w

z′< ′ z’ terletak di dalam setengah bidang bagian far

Misalkan kita akan mengetes apakah x′ berada di dalam bagian bidang bagian kiri kita dengan syarat ini :

x w′< ′ −

(

col4

) (

< •col1

)

v v

(

) (

)

(

)

(

) (

) (

) (

)

(

) (

) (

) (

)

(

14 11

)

(

24 21

)

(

34 31

)

(

44 41

)

41 44 31 34 21 24 11 14 41 44 31 34 21 24 11 14 1 4 1 4 , , , 0 0 1 0 0 0 m m d m m c m m b m m a d cz by ax m m m m z m m y m m x w m m w m m z m m y m m x col col col col + = + = + = + = = + + + = + + + + + + + = = + + + + + + + + • < • + • < v v v

Persamaan bidang di atas belum normal, maka harus kita normalkan. Berikut ini adalah rumusan lengkap untuk bidang viewing frustum :

(4)

Tabel 3.2. Tabel Rumusan Bidang untuk Viewing Frustum

Clipping Plane Persamaan Koefisien

kiri

(

)

(

) (

)

(

4 1

)

1 4 1 4 0 0 col col v col v col v col v col v x w + • < • + • < • < • − ′ < ′ − 41 44 31 34 21 24 11 14 m m d m m c m m b m m a + = + = + = + = kanan

(

)

(

) (

)

(

4 1

)

1 4 4 1 0 0 col col v col v col v col v col v w x − • < • − • < • < • ′ < ′ 41 44 31 34 21 24 11 14 m m d m m c m m b m m a − = − = − = − = bawah

(

)

(

) (

)

(

4 2

)

2 4 2 4 0 0 col col v col v col v col v col v y w + • < • + • < • < • − ′ < ′ − 42 44 32 34 22 24 12 14 m m d m m c m m b m m a + = + = + = + = atas

(

)

(

) (

)

(

4 2

)

2 4 4 2 0 0 col col v col v col v col v col v w y + • < • + • < • < • ′ < ′ 42 44 32 34 22 24 12 14 m m d m m c m m b m m a − = − = − = − = near 3 0 0 col v z • < ′ < 43 33 23 13 m d m c m b m a = = = = far

(

) (

)

(

4 3

)

3 4 4 3 0 0 col col v col v col v col v col v w z − • < • − • < • < • ′ < ′ 43 44 33 34 23 24 13 14 m m d m m c m m b m m a − = − = − = − =

Setelah mendapatkan persamaan umum bidang, maka kita harus menormalkan vektor A, B, C di persamaan umum bidang, supaya vektor memiliki besaran bernilai 1.

(5)

3.4 Penggunaan Matriks Transformasi

Matriks tranformasi di sini digunakan untuk menyimpan posisi atau koordinat lokal dari masing – masing objek yang ada. Untuk perhitungan matriks transformasi seperti translasi, rotasi dan skala digunakan untuk memindahkan objek dari posisi lokal menuju posisi world, camera, perspective dan lain sebagainya dengan cara mengalikan matriks posisi objeck dengan matrik transformasi yang diiinginkan( matriks transformasi ini bisa merupakan gabungan antara transformasi world, camera, perspective dan lain – lainnya ).

Gambar 3.1 Local Space dan World Space

(6)

3.5 Perancangan Class

3.5.1 Class Engine Framework

Framework engine merupakan bagian class yang paling penting, karena memiliki fungsi – fungsi sebagai berikut :

• Menyediakan tempat dan support secara keseluruhan untuk semua komponen – komponen yang membangun engine.

• Mengontrol aliran proses game yang umum dalam satu loop

• Mengontrol komunikasi messaging dengan operating system ( windows ).

• Menyediakan class – class yang memiliki fungsi dasar ( Linked list, Resource Management, Geometry ).

Gambar 3.3 Rancangan Engine Framework

(7)

3.5.2 Class Engine Control

Engine yang dirancang haruslah dapat memfasilitasi segala yang dibutuhkan dalam game, jadi tidak hanya mampu merender gambar 3 dimensi saja. Salah satu aspek penting adalah engine control yang bertugas dalam mengontrol proses engine dan user input. Yang merupakan bagian dari engine control adalah class State ( Finite State Machine ) dan Input. Finite State Machine digunakan untuk membuat sebuah sistem di mana engine process akan memproses state yang aktif pada waktu itu dan menyediakan user kemampuan untuk melakukan transisi dari satu state ke state yang lain.

3.5.3 Class Scripting

Scripting adalah salah satu hal yang penting dalam aspek pemrograman game, karena dengan scripting kita dapat merubah sebagian besar game tanpa harus mengcompile ulang program kita, seperti misalnya perubahan level game, penyeimbangan game mechanics dan sebagainya. Engine ini akan menggunakan class Script yang sederhana berupa property scripting.

(8)

3.5.4 Class Rendering

Class yang memegang peranan sebagai komponen terpenting dalam engine kita. Class ini bertugas dalam menentukan kompatibilitas hardware dengan engine kita sekaligus menentukan dukungan dari DirectX terhadap video card yang akan digunakan dalam proses rendering engine. Yang merupakan bagian ini adalah class DeviceEnumeration, Fonts dan sebuah dialog window untuk seting awal sebuah video card.

3.5.5 Class Sound System

Game terasa belum lengkap jika tidak didukungan dengan suara – suara pendukung, maupun suara efek. Mengeluarkan suara dalam game adalah hal mudah, yang perlu kita lakukan hanyalah membungkus class dari Direct Music sehingga pemakaian suara akan dapat disinkronkan dengan engine kita. Class SoundSystem, class Sound dan class AudioPath3D akan terintegrasi sebagai class pendukung Sound System.

3.5.6 Class Networking

Memainkan game dengan dukungan Networking tentu sangat mengasyikkan, oleh karena itu engine ini akan dilengkapi dengan fasilitas Networking Server – Client dengan dukungan dari Direct Play.

3.5.7 Class Game Objects

Class Game Objects merupakan class pembungkus dari class Mesh dan Material kita. Tugas dari class ini adalah menyediakan interface pembungkus yang memotong kerumitan didalam menyatukan model mesh dan material sebagai satu kesatuan. Yang

(9)

termasuk dalam class ini adalah class Material, class BoundingVolumes, class Mesh, class RenderCache, class SceneObject, class SpawnObject dan class AnimatedObject.

3.5.8 Class Scene Management

Class Scene Management merupakan bagian paling penting dari engine karena memiliki kemampuan dalam memanage seluruh scene yang ditampilkan dalam monitor. Class ini memiliki tingkat kekompleksan yang paling tinggi untuk mendukung performansi hardware sehingga dapat berjalan maksimal, dan menyeimbangkan kerja CPU dan VGA dalam merender suatu gambar 3 dimensi / scene. Yang termasuk dalam bagian ini adalah class ViewFrustum, dan class SceneManager.

3.5.9 Penjelasan Rancangan Aplikasi

Berikut ini akan diberikan gambarang mengai isi dari class – class yang ada dalam pembuatan aplikasi game dengan menggunakan pseudocode.

• Modul Main Awal modul

Inisialisasi variabel untuk engine

Buat dua buah state untuk state game dan state menu Memanggil loop di engine agar engine mulai bekerja Jalankan state menu untuk pertama kalinya

Jalankan state game setelah state menu

Lakukan selama tidak ada penekanan tombol Escape Jalankan fungsi engine untuk looping

(10)

Bersihkan variabel – variabel yang dibuat di inisialisasi Tutup window aplikasi

Akhir modul • Modul Game

Awal Modul

Inisialisasi player object

Mempersiapkan file musik untuk dimainkan Mempersiapkan texture untuk crosshair

Mempersiapkan font untuk menulis teks di aplikasi Dalam fungsi update melakukan

Update posisi player

Update state terakhir dari player

Update skor terbaru tiap – tiap player yang ada

Cek jika ada penekanan tombol maka pindah ke state menu Akhir fungsi update

Dalam fungsi render melakukan

Cek jika tidak ada map yang diload maka keluar dari fungsi Render texture dari crosshair

Akhir fungsi render

Bersihkan variabel – variabel yang dibuat di inisialisasi Akhir Modul

• Modul Menu Awal Modul

(11)

Inisialisasi window untuk menu Isi nilai untuk nama player Isi nilai untuk nama map Pilih konfigurasi untuk vga Pilih next untuk keluar dari modul Akhir Modul

• Modul Player Awal Modul

Inisialisasi variabel untuk player Update posisi player

Update vektor up, right dan look

Gerakan posisi player di tempat yang diinginkan Gambar objek player

Gambar

Tabel 3.1. Tabel Keuntungan dan Kerugian Teknik Culling
Tabel 3.2. Tabel Rumusan Bidang untuk  Viewing Frustum
Gambar 3.1 Local Space dan World Space
Gambar 3.4 Aliran Proses Game
+2

Referensi

Dokumen terkait

pendapatan seperti umur, tingkat pendidikan terakhir, curahan waktu kerja dan pengalaman kerja dari hasil regeresi linear berganda menunjukkan bahwa keempat faktor

Sudah 23 tahun saya bekerja sebagai seorang guru dan selalu menerima hadiah dari para orangtua murid setiap kali.

Sejarah membuktikan bahwa bangsa Indonesia telah berabat silam lamanya membuktikan adanya kesinambungan inte- lektual dalam pemikiran yang diwariskan oleh Islam yang

Berangkat dari penjelasan di atas, maka tujuan penelitian ini adalah menganalisis pengaruh manajemen aset yang terdiri dariinventarisasi aset, legal audit aset,

Ada responden yang mengatakan setuju yakni sebanyak 2 responden atau 2.3%, untuk responden yang mengatakan setuju yakni responden yang sudah golongan menengah

MPO dari penelitian ini mempunyai nilai sensitivitas diagnostik 88,88%, spesifisitas diagnostik 69,23%, nilai ramal negatif 75% dan nilai ramal positif 85,71% sehingga MPO tidak

Adanya inkonsistensi dalam beberapa studi yang mencoba mencari hubungan antara PCT dengan dengan skor prognostik seperti PSI dan CURB-65 mendorong Kruger dkk melakukan suatu

Acute Respiratory Distress Syndrome: New Definition, Current and Future Therapeutic Options.. Raghavendran K, Napolitano