Showing posts with label game. Show all posts
Showing posts with label game. Show all posts

Sunday, November 15, 2009

Lima Tahun Penantian … Untuk DOOM III !

image

 

Doom adalah Legenda dalam Dunia Game 3D. Sebelum era Doom, dunia game tidak mengenal lingkungan 3D Virtual seperti yang dikenalnya sekarang ini. Semua game Doom merupakan evolusi, khusunya Doom II (malah saya ga inget ada Doom I… oh, mungkin cuma beda Level, bukan engine). Bahkan, gara-gara Doom II ini saya minta dibelikan komputer ke ayah saya (hehehe, jangan bilang2 yaaa…).

image

ID Software sebagai pengembang Doom, seakan-akan bekerja pada batasan-batasan terluar dari sistem, sehingga aplikasi yang dihasilkannya akan mengambil kemampuan maksimal hardware saat itu, dan lebih lagi. Sebagai contoh, di saat komputer masih berkutat pada grafis 2D yang sederhana, dengan sedikit tipuan grafis efek 3D, ID Software menyajikan dunia 3D yang nyaris sempurna. Tetep nyaris, karena beberapa elemen masih tipuan mata, semisal semua objek hanya memiliki satu sisi wajah. Misal, cobalah mengitari musuh baik yang sudah mati atau yang masih hidup, maka semuanya tidak akan punya sisi belakang : semuanya hanya punya sisi depan. Nah, bagi yang tidak jeli sih, ga akan ketahuan trik ini. Adapun tipuan tersebut untuk menyiasati performa sistem agar frame rate-nya tidak terlalu tertinggal.

Kemudian ID bergerak ke Game 3D yang sesungguhnya : Quake dan Quake II. Disini, tidak ada tipuan lagi. Semua object adalah 3D dalam arti sesungguhnya : Anda bisa mengitari suatu objek, dan akan melihat ke-360 derajat sisinya. Hanya, penambahan versi ke Quake III, bagi saya pribadi (yang tidak terlalu serius lah untuk nge-game, sampai kudu ke game center karena versi ini pindah ke model multi player, dan) karena mengutamakan modus multi player, jadi tidak terlalu menarik, plot cerita tidak ada lagi. Saya sering membayangkan versi Doom selanjutnya dengan grafik yang sudah sangat maju. Apa akibatnya jika kengerian atmosfer Doom II, diimplementasikan dengan engine 3D Quake???? Wah, ternyata….

…penantian terhadap Doom, terjawab di Tahun 2004 dengan dirilisnya Doom III !


Dari berbagai aspek yang mempesona, Doom III memiliki satu ciri khusus grafik yang (saat itu) spektakuler : Per-Pixel Lightnig. Jadi, Anda tahu bahwa setiap objek 3D dibangun berdasarkan gabungan polygon2 yang kontinyu, sehingga membentuk objek yang diinginkan. Nah, umumnya efek cahaya dihitung berdasarkan normal (garis tegak lurus, sehingga intensitas cahaya tertinggi adalah permukaan dengan sudut 90 derajat dengan penglihatan Anda) dari polygon tersebut. Efeknya, pencahayaan suatu objek tidak akan terlihat sempurna , tidak sebagaimana yang terlihat pada Grafis Doom III. Letak kekurangan pencahayaan yang tidak berbasis Per-Pixel Lighting, adalah objek tidak akan terlihat realistis saat bergerak di bawah kontras cahaya yang ekstrem. Misalnya, di saat lorong gelap dan hanya ada satu lampu, maka pencahayaan pergerakan objek di bawah lampu tersebut, hanya akan mengakibatkan objek terlihat kabur dan kemudian terang, tanpa ada perubahan cahaya pada permukaan objek yang berbeda2. Untuk lebih jelasnya, lihatlah gambar berikut:

image

Di atas staff UAC tersebut, terdapat kapal angkasa luar melayang-layang yang baru saja menurunkan tokoh utama. Cahaya dari kapal tersebut menyebabkan (tentu, secara alami) perbedaan cahaya pada permukaan objek-objek di bawahnya. Lihatlah bagaimana pencahayaan pada staff tersebut : tampak betapa cahaya terpantul titik demi titik, sehingga Anda akan bisa mendapatkan sensasi bentuk tubuh staff tersebut berdasarkan pengaruh cahaya yang terpantul (ooh, dan jangan lupa guratan ekspresi wajah yang tercipta akibat cahaya tersebut. Amazing…)

Huuuf, masih banyak sekali yang sangat-sangat menarik tentang grafis Doom III ini. Saya tunjukkan adegan saat terbukanya gerbang Neraka di markas UAC berikut ini :

image

Terbukanya portal tersebut, menyebabkan staff-staff berubah menjadi Zombi, seperti berikut :

image

Semoga bermanfaat!

NB:

  • Awalnya, saya sengaja membeli 3D Card yang lebih bertenaga (dari yang On Board yaah), yaitu GeForce 9400 GT. Well,  setelah dijelasin sama salah satu siswa, “Wah, itu sudah ketinggalan 3 generasi mas!”. Iya sih, tapi setidaknya di 3 generasi sebelumnya, dia yang lumayan Top kan? huehuehue
  • Dan, pembelian itu bukan untuk Doom III saja (apa iya?), tapi untuk salah satu bimbingan Skripsi yang mengharuskan saya mempelajari Autodesk Maya untuk pengembangan Model 3D-nya.
  • Smoga suatu saat ini saya bisa membuat Game 3D sendiri! AMIIIN!!!
  • Saya jadi inget, dulu pas jaman SMA (SMAN 3 Denpasar, Bali) saya sedang tergila2nya dengan Doom II, sampai2 saat jalan di lorong sekolah, wah, nuansa jalan2 di lorong2 Doom II terbawa2. Hehehe.
  • Ups, sampai lupa, rumor perkembangan terbaru adalah Doom 4!

Thursday, August 06, 2009

QuickStart Game 3D dengan Engine 3D TrueVision3D (FINAL)


Mencoba suatu produk/teknologi, bisa sangat memusingkan kalau tidak tau celah2 kegagalannya. Seperti halnya dengan produk TrueVision3D ini. Kalau Anda hanya mendownload paket TV3d 6.5 (versi terakhir saat artikel ini ditulis), maka kemungkinan sekali aplikasi tidak berjalan. Karena Anda harus juga mendownload DirectX SDK yang sesuai (terkini, meski saya agak ragu kalau aplikasi bisa jalan jika yang diinstal adalah versi DirectX terbaru). Nah, jadi, jika Anda sudah mendownload paket TrueVision3D ini, jangan lupa mendownload juga DirectX SDK Versi November 2008 yang juga disertakan pada situs tersebut, hanya agak tersembunyi :p
Nah, namun untuk segera membuat aplikasi dengan TV3D bisa mudah dan cepat sekali. Silahkan gunakan menu template pada start menu TV3D, dan pilih bahasa yang Anda pilih : C#, C++, Delphi, VB 6 dan VB.NET.



Aplikasi test yang saya buat menggunakan VB.NET. Dari aplikasi template tersebut, Anda dapatkan screenshot ini:


Layar blank, yang menyimpan misteri :)

Anda segera bisa modifikasi sehingga menghasilkan screenshot yang sudah saya sertakan.

Btw, sampai titik ini, saya belum bisa menganimasikan mesh yang di load. Wah, untuk itu, saya kudu wajib harus musti menguasai salah satu aplikasi Modeler 3D : 3DS Max, Maya atau MilkShape3D. Poser tidak bisa saya pergunakan, karena plugin exporter TV3D terbatas untuk aplikasi tersebut.

Sedikit preview tentang kode yang saya ubah dari template VB.NET tersebut adalah fungsi-fungsi baru berikut :


...
LoadTextureFile()
CreateWall()
CreateMesh()
SetCamera()
CheckInput()
...

Berikut cuplikkan fungsi CreateMesh.
Public Sub CreateMesh()
'person doing sholat
meshTable = Scene.CreateMeshBuilder("table")
meshTable.LoadTVM("meshes\sholat.tvm", True, True)
meshTable.SetPosition(80.0F, 0.0F, 100.0F)
meshTable.SetScale(300, 300, 300)
'meshTable.RotateY(25, True)
meshTable.SetTexture(Globals.GetTex("cinder"), -1)
End Sub

Satu fungsi yang kurang adalah LoadActor: nah, disinilah berbagai perihal tentang mesh yang teranimasi (tepatnya Actor) harus saya definisikan. Sudah ada gambaran, pun sudah melakukan uji coba di ModelViewer bawaan TV3D, hanya saya belum saya mulai di aplikasi ini. Secepatnyalah. Dan juga segera saya sharing.

Oya, satu fungsi yang penting adalah masalah input. Berikut saya paste, kode yang akan menggerakkan kamera dan satu2nya Mesh pada Scene tersebut:


Public Sub CheckInput()

If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTARROW) Then
' _rotateGlasses = false; // stop the glasses
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTSHIFT) Then
meshTable.RotateY(-5)
Else
meshTable.MoveRelative(0, 0, -5)
End If

ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_RIGHTARROW) Then
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTSHIFT) Then
meshTable.RotateY(5)
Else
meshTable.MoveRelative(0, 0, 5)
End If
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_UPARROW) Then
meshTable.MoveRelative(0, 5, 0)
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_DOWNARROW) Then
meshTable.MoveRelative(0, -5, 0)
End If

Dim increment As Integer
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTCONTROL) Then
Dim x As TV_3DVECTOR = TV.GetCamera.GetLookAt()
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTSHIFT) Then increment = 10 Else increment = 1
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_UPARROW) Then
TV.GetCamera.SetLookAt(x.x, x.y + increment, x.z)
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_DOWNARROW) Then
TV.GetCamera.SetLookAt(x.x, x.y - increment, x.z)
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTARROW) Then
TV.GetCamera.SetLookAt(x.x + increment, x.y, x.z)
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_RIGHTARROW) Then
TV.GetCamera.SetLookAt(x.x - increment, x.y, x.z)
End If

End If

End Sub


Nah, konsep dasar setiap Game, adalah merubah status dunia game berdasarkan input, dan menggambarkan kembali dunia yang telah berubah statusnya. Maka, efek interaktivitas dan pemain sebagai pengontrol dunia Game tercipta. Dan Anda pun terjebak ... dalam dunia Game 3D!

Semoga bermanfaat!

NB :

  • Temen saya, Aji Pamungkas yang-ga-terlalu-baik-karena-saya-ga-diundang-ke -pernikahannya-padahal-jaraknya-ga-sampai-4km, sarankan menggunakan JMonkeyEngine. Tapi berbasis Java. Belum bisa dipakai untuk kasus ini Ji!. hehe.
  • Juga tentang Away3D. Wah, game 3D di Flash pasti sangat komersial!
  • Perbandingan dengan Ogre 3D sebelumnya? saya bisa lebih cepat QuickStart di TrueVision3D. Juga, ... ya, jangan dibandingkan ding : wong Ogre fokus ke Rendering, sedangkan TV3D game engine. Ya bedalah. Fisik juga lengkap lho si TV3D : Anda bs segera gunakan NewtonPhysics yang sudah built-in
  • Hm... bisa segera dirampungkan ini.

Wednesday, August 05, 2009

QuickStart Game 3D dengan Engine 3D TrueVision3D

(draft - versi final artikel ini sedang dalam proses pengerjaan)

Mencoba suatu produk/teknologi, bisa sangat memusingkan kalau tidak tau celah2 kegagalannya. Seperti halnya dengan produk TrueVision3D ini. Kalau Anda hanya mendownload paket TV3d 6.5 (versi terakhir), maka kemungkinan sekali aplikasi tidak berjalan. Karena Anda harus juga mendownload DirectX SDK yang sesuai. Nah, jadi, jika Anda sudah mendownload paket TrueVision3D.com ini, jangan lupa mendownload juga DirectX SDK Versi November 2008 yang juga disertakan pada situs tersebut, hanya agak tersembunyi :p

Nah, namun untuk segera membuat aplikasi dengan TV3D mudah dan cepat sekali. Silahkan gunakan menu template pada start menu TV3D, dan pilih bahasa yang Anda pilih : C#, C++, Delphi, VB 6 dan VB.NET. Aplikasi test yang saya buat menggunakan VB.NET. Dari aplikasi template tersebut, Anda dapatkan screenshot ini:

Layar blank, yang menyimpan misteri :)

Anda segera bisa modifikasi sehingga menghasilkan screenshot yang sudah saya sertakan.
Btw, sampai titik ini, saya belum bisa menganimasikan mesh yang di load. Wah, untuk itu, saya kudu wajib harus musti menguasai salah satu aplikai Modeler 3D : 3DS Max, Maya atau MilkShape3D. Poser tidak bisa saya pergunakan, karena plugin exporter TV3D terbatas untuk aplikasi tersebut.

Sedikit preview tentang kode yang saya ubah dari template VB.NET tersebut adalah fungsi-fungsi baru berikut :


...
LoadTextureFile()
CreateWall()
CreateMesh()
SetCamera()
CheckInput()
...

Berikut cuplikkan fungsi CreateMesh.
Public Sub CreateMesh()
'person doing sholat
meshTable = Scene.CreateMeshBuilder("table")
meshTable.LoadTVM("meshes\sholat.tvm", True, True)
meshTable.SetPosition(80.0F, 0.0F, 100.0F)
meshTable.SetScale(300, 300, 300)
'meshTable.RotateY(25, True)
meshTable.SetTexture(Globals.GetTex("cinder"), -1)
End Sub

Satu fungsi yang kurang adalah LoadActor: nah, disinilah berbagai perihal tentang mesh yang teranimasi (tepatnya Actor) harus saya definisikan. Sudah ada gambaran, pun sudah melakukan uji coba di ModelViewer bawaan TV3D, hanya saya belum saya mulai di aplikasi ini. Secepatnyalah. Dan juga segera saya sharing.

Oya, satu fungsi yang penting adalah masalah input. Berikut saya paste, kode yang akan menggerakkan kamera dan satu2nya Mesh pada Scene tersebut:


Public Sub CheckInput()

If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTARROW) Then
' _rotateGlasses = false; // stop the glasses
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTSHIFT) Then
meshTable.RotateY(-5)
Else
meshTable.MoveRelative(0, 0, -5)
End If

ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_RIGHTARROW) Then
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTSHIFT) Then
meshTable.RotateY(5)
Else
meshTable.MoveRelative(0, 0, 5)
End If
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_UPARROW) Then
meshTable.MoveRelative(0, 5, 0)
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_DOWNARROW) Then
meshTable.MoveRelative(0, -5, 0)
End If

Dim increment As Integer
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTCONTROL) Then
Dim x As TV_3DVECTOR = TV.GetCamera.GetLookAt()
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTSHIFT) Then increment = 10 Else increment = 1
If Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_UPARROW) Then
TV.GetCamera.SetLookAt(x.x, x.y + increment, x.z)
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_DOWNARROW) Then
TV.GetCamera.SetLookAt(x.x, x.y - increment, x.z)
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_LEFTARROW) Then
TV.GetCamera.SetLookAt(x.x + increment, x.y, x.z)
ElseIf Inp.IsKeyPressed(CONST_TV_KEY.TV_KEY_RIGHTARROW) Then
TV.GetCamera.SetLookAt(x.x - increment, x.y, x.z)
End If

End If

End Sub


Nah, konsep dasar setiap Game, adalah merubah status dunia game berdasarkan input, dan menggambarkan kembali dunia yang telah berubah statusnya. Maka, efek interaktivitas dan pemain sebagai pengontrol dunia Game tercipta.

Dan Anda pun terjebak ... dalam dunia Game 3D!

Semoga bermanfaat!

NB :

  • Temen, Aji Pamungkas sarankan menggunakan JMonkeyEngine. Tapi berbasis Java. Belum bisa dipakai untuk kasus ini Ji!. hehe. Juga tentang Away3D. Wah, game 3D di Flash pasti sangat komersial!

  • Btw, malam ini saya harus download Cygwin, agar solusi aplikasi sampel yang didapat bisa dikompilasi. Berbasis Linux euy!