animasi gerak benda 3 dimensi menggunakan java 3d...
TRANSCRIPT
1
Makalah Seminar Tugas Akhir
Animasi Gerak Benda 3 Dimensi Menggunakan Java 3D API Mufti Ali 1 , Agung B.P. 2 , Aghus sofwan 2
1 Mahasiswa dan 2 Dosen Jurusan Teknik Elektro, Fakultas Teknik, Universitas Diponegoro, Jl. Prof. Sudharto, Tembalang, Semarang, Indonesia
Abstrak Dalam dunia grafika komputer khususnya 3D, transformasi, pencahayaan, pewarnaan dan texturing merupakan
hal yang yang mendasar untuk membuat suatu animasi. Dengan transformasi, suatu objek dapat dipindahkan dari suatu titik ke titik yang lain. Namun objek tersebut tidak akan nampak apabila tidak ada pencahayaan. Kemudian, diperlukan juga pewarnaan dan texturing agar objek tersebut terlihat lebih nyata.
Tugas akhir ini mencoba untuk mengimplentasikan fungsifungsi transformasi, pencahayaan, pewarnaan dan texturing kedalam bentuk suatu animasi gerak benda 3D. Analisis dan desain aplikasi menggunakan pendekatan berorientasi objek. Aplikasi dibuat menggunakan bahasa pemrograman Java dan Java3D API (Application Programming Interface).
Kata kunci: transformasi, pencahayaan, pewarnaan, texturin
1. Pendahuluan 1.1 Latar Belakang Masalah
Pengenalan mengenai konsep animasi sangat diperlukan untuk pengembangan 3D. Transformasi , pewarnaan , pencahayaan, texturing dan ray tracing merupakan dasar yang sangat penting dalam pengembangan animasi 3D.
1.2 Identifikasi Masalah Dalam mengimplementasikan aplikasi grafika komputer untuk animasi gerak benda 3 dimensi dapat diidentifikasi beberapa masalah utama, yaitu: 1. Melakukan transformasi pada objek 3 dimensi. 2. Pencahayaan. 3. Pewarnaan terhadap objek 3 dimensi. 4. Texturing yang diimplementasikan pada objek agar
terlihat lebih nyata. 5. Antarmuka pengguna dengan program.
1.3 Batasan Masalah 1. Transformasi yang dibahas terdiri atas translasi, skala
dan rotasi. 2. Pencahayaan, pewarnaan dan texturing. 3. Bahasa pemrograman yang digunakan J2SE dan Java 3D
API.
1.4 Tujuan Penelitian Tujuan dalam tugas akhir ini adalah membuat program
yang bertemakan grafis 3D yang dapat digunakan sebagai kajian tentang transformasi, pencahayaan, pewarnaan dan texturing.
1.5 Kegunaan Hasil Penelitian Kegunaan dari Tugas Akhir Animasi Gerak Benda 3
Dimensi Menggunakan Java 3D API ini adalah: 1. Mengetahui bagaimana mengimplementasikan
transformasi 3 dimensi, pencahayaan, pewarnaan dan texturing pada aplikasi 3 dimensi menggunakan Java 3D API dan J2SE dengan pendekatan berorientasi objek.
2. Menghasilkan suatu aplikasi yang dapat melakukan animasi gerak benda 3 dimensi.
2. Java 3D API Java 3D API adalah sebuah interface untuk membuat
program atau aplikasi grafika 3 dimensi.
2.1 Java 3D API Java 3D API adalah hirarki dari classclass Java yang
menyediakan interface untuk 3D graphics rendering, manipulasi objek geometri, pencahayaan dan sound rendering system.
2.2 Membuat Scene Graph Suatu virtual universe dalam Java 3D, dibuat dengan
menggunakan scene graph. Scene graph dibuat dengan instances dari kelaskelas Java 3D. Scene graph adalah suatu susunan dari objekobjek. Objek tersebut bisa berupa suatu objek geometri, sound, cahaya, lokasi, orientasi, tampilan suatu objek , objek audio, atau gabungan dari objek tersebut yang disusun ke dalam suatu scene garph.
Untuk mendesain suatu scene graph, digunakan simbol grafik standar seperti ditunjukan pada gambar 2.1
Gambar 2.1 Simbol untuk menggambarkan objek dalam scene graph Gambar 2.2 merupakan contoh sederhana scene
graph.
2
Gambar 2.2 Contoh bentuk scene graph
2.3 Transformasi Transformasi terdiri atas translasi, rotasi, dan skala.
Pada Java 3D API, class Transform3D digunakan untuk menampilkan transformasi 3D seperti translasi, rotasi, dan skala. Class Transform3D digunakan untuk pembuatan objek TransformGroup. Langkah pertama adalah membuat objek Transform3D, dapat juga kombinasi dari dua atau lebih Transform3D, lalu TransformGroup dibuat menggunakan objek Transform3D tersebut.
2.4 Pencahayaan Dalam dunia nyata, warna yang kita lihat adalah
kombinasi dari sifat fisik dari suatu objek, karakteristik dari sumber cahaya, posisi terhadap sumber cahaya, dan sudut dari mana objek dilihat [3] .
Menurut Bouvier [3] , persamaan dari model cahaya tergantung pada tiga vektor, yaitu Normal permukaan bidang (N), arah cahaya (L), dan sudut pandang mata terhadap bidang atau (E) ditambah dengan karakteristik material objek dan karakteristik dari cahaya. Gambar 2.3 menunjukan tiga buah vektor dari vertex pada sebuah permukaan bidang berbentuk bola.
N L
E
Gambar 2.3 Permukaan bidang (N), arah cahaya(L), dan sudut pandang terhadap benda(E)
Model cahaya menggabungkan tiga bentuk refleksi cahaya pada dunia nyata, yaitu : ambient reflection, diffuse reflection, dan specular reflection. Ambient reflection merupakan refleksi cahaya dengan intensitas yang rendah yang dihasilkan oleh ambient light, diffuse reflection adalah refleksi normal dari sumber cahaya terhadap benda tertentu (warna dari benda tersebut), dan specular reflection adalah refleksi cahaya dengan intensitas yang tinggi dari sumber cahaya.
DirectionalLight merupakan cahaya yang bertindak seperti matahari (sumber cahaya sangat jauh), mempunyai
satu arah sinar cahaya, intensitas cahayanya tidak melemah, dengan arah vektor cahaya konstan.
PointLight merupakan lawan dari DirectionalLight. Bila intensitas sinar dari DirectionalLight tidak terpengaruh oleh jarak, maka intensitas sinar dari PointLight berpengaruh terhadap jarak dan lokasi.
SpotLight adalah subclass dari PointLight. Class SpotLight menambahkan arah dan konsentrasi pada parameter posisi dan pelemahan (attenuation) dari PointLight. Contoh SpotLight adalah lampu senter.
2.5 Pewarnaan Untuk mengimplementasikan pewarnaan dalam
java3D, dilakukan oleh objek appearance. Informasi mengenai penampakan visual dari objek geometri, disimpan dalam “bundle appearance,” seperti yang ditunjukan pada gambar 2.5.
Gambar 2.5. Bundle Objek Appearance.
2.6 Texturing Texturing adalah suatu cara untuk menambahkan
suatu penampakan visual dari suatu objek tanpa menambahkan suatu geometri secara detail. Penampakan ini berupa suatu image (gambar) atau disebut dengan texture, yang diimplentasikan dalam suatu objek, sehingga objek tersebut mempunyai penampakan visual dari image tersebut.
3. Pemodelan Animasi Gerak Benda 3 Dimensi Menggunakan Java 3D API Pemodelan animasi gerak benda 3 dimensi
menggunakan Java 3D API menggunakan pendekatan berorientasi objek (objek oriented analysis and design). Langkahlangkah yang dilakukan seperti model yang diutarakan oleh Pressman [9] , yaitu: 1. Use case, 2. Kartu Index CRC, 3. Diagram Kelas, 4. Model Hubungan Objek (Object Relationship), dan 5. Model Tingkah Laku Objek (Object Behaviour). Langkahlangkah tersebut kemudian dibuat dalam bentuk diagram UML seperti berikut.
3.1. Use Case Use case merupakan rangkaian skenario yang
mengidentifikasikan urutan pemakaian aplikasi yang akan dibangun. Skenario penggunaan animasi gerak benda 3 dimensi menggunakan java 3D API adalah sebagai berikut: 1. Pengguna mengemudikan objek mobil. 2. Pengguna memilih posisi kamera relatif terhadap
objek mobil. Skenario di atas kemudian diubah ke dalam bentuk
diagram use case yang bentuknya seperti gambar 3.1.
3
Turn Left
Turn Right
Accelerate
Brake
Steering Pengguna
Load Objek Mobil
<<include>>
Ubah Posisi Kamera
<<include>>
Gambar 3.1 Diagram use case untuk animasi gerak benda 3 dimensi menggunakan java 3D API.
3.2 Kartu Index CRC Pemodelan CRC memberikan cara sederhana
untuk mengidentifikasi dan mengumpulkan kelaskelas yang relevan [9] yang akan digunakan untuk animasi gerak benda 3 dimensi menggunakan java 3D API.
Dari analisis use case, dapat diidentifikasi kelas kelas yang relevan dengan persyaratan sistem. Sebagai kelas utama dipilih kelas RacingGame.
Tabel 3.1 Kartu index CRC kelas RacingGame Kelas: RacingGame Tanggung Jawab: Atribut: DEFAULT_FPS Operasi: • RacingGame
Kolaborator:
•
Tabel 3.2 Kartu index CRC kelas GamePanel Kelas: GamePanel Tanggung Jawab: Atribut: • BOUNDSIZE • NO_DELAYS_PER_YIELD • MAX_FRAME_SKIPS • Running • isPaused • period • gameOver Operasi: • processKey • createSceneGraph • addCircuit • addSprite • lightScene • initUserPosition • addCamera • addNotify • startGame • resumeGame • pauseGame • stopGame • run • gameUpdate
Kolaborator:
•
Tabel 3.3 Kartu index CRC kelas LoadObject Kelas: LoadObject Tanggung Jawab: Atribut: filename Operasi: • loadFile • getExtension • getTG • getSceneGroup • getRadius • scale
Kolaborator:
•
Tabel 3.4 Kartu index CRC Circuit Kelas: Circuit Tanggung Jawab: Atribut: Operasi: • nearObstacle • getTG()
Kolaborator:
• AppManager
Tabel 3.5 Kartu index CRC kelas CarSprite Kelas: RacingGame Tanggung Jawab: Atribut: • MAX_SPEED • MIN_SPEED • Delta • pos • speed Operasi: • getTG • gettime • moveBy • doMove • tryMove • rotate • doRotateY • accelerate • getspeed • breaking • update
Kolaborator:
• KeyBehavior • AppManager
Tabel 3.6 Kartu index CRC kelas KeyBehavior
Tabel 3.7 Kartu index CRC kelas AppManager Kelas: AppManager Tanggung Jawab: Atribut: • ap Operasi: • createTexture • createFixTexture • texApp • stampTexCoords • makeAlmostTransparent • setMaterial
Kolaborator:
•
Kelas: KeyBehavior Tanggung Jawab: Atribut: • keyPress • ROTATE • car Operasi: • initialize • processStimulus • keyPressed
Kolaborator:
• CarSprite
4
3.3 Diagram Kelas Dari kartu index CRC pada subbab 3.2, penyusun
membuat diagram kelasnya seperti pada gambar 3.2.
RacingGame DEFAULT_FPS : int
windowActivated() windowDeactivated() windowDeiconified() windowClosing() windowClosed() windowOpened()
BGCanvas backIm : BufferedImage render2D : J3DGraphics2D
loadImage() preRender() postRender() clearSurface() loc()
LoadObject filename : String
opname() loadFile() getExtension() setBSPosn() getTG() getSceneGroup() getRadius() scale() getBoundingSphere()
Circuit cRadius
nearObstacle() getTG()
GamePanel BOUNDSIZE : int running : boolean isPaused : boolean period : Long gameOver : boolean car : String
processKey() createSceneGraph() addCircuit() addSprite() initUserPosition() addCamera() startGame() resumeGame() pauseGame() stopGame() run() gameUpdate()
AppManager ap : Appearance
createTexture() createFixTexture() texApp() stampTexCoords() stampFixTexCoords() makeAlmostTransparent() setMaterial()
CarSprite radius : double MAX_SPEED : double MIN_SPEED : double delta : double pos : double breakingMultiplier : double lastt ime : long
getTG() opname2() gettime() moveBy() doMove() doMove() tryMove() brake() getspeed() rotate() update() rotate()
KeyBehavior
initialize() processStimulus() postProcessKeyEvent() keyReleased() keyPressed()
Gambar 3.2 Diagram kelas animasi gerak benda 3 dimensi menggunakan java3D API.
3.4 Model Hubungan Objek (Object Relationship) Model hubungan objek dapat digambarkan dengan
menggunakan diagram runtun (sequence diagram). Dengan diagram runtun, interaksi antar objek dapar diperlihatkan dengan baik. Pada gambar 3.3 pengguna melakukan transformasi pada objek. Transformasi tersebut meliputi translasi dan rotasi pada sumbu XZ.
: Pengguna Transformasi Layar
Transformasi terhadap objek
Tampilkan objek pada layar
Update layar
Gambar 3.3 Diagram runtun animasi gerak benda 3 dimensi menggunakan java3D API
3.5 Model Tingkah Laku Objek (Object Behaviour) Gambar 3.4 merupakan diagram statechart yang
menggambarkan perilaku objek. Model tingkah laku objek menunjukkan bagaimana system akan merespon kejadian atau stimulus eksternal.
Objek tercipta
Mulai
Menunggu transformasi selanjutnya
Load Object
Mentransformasi objek
Selesai
Gambar 3.4 Diagram statechart animasi gerak benda 3 dimensi menggunakan java 3D API
4.0. Implementasi dan Pengujian Animasi Gerak Benda 3 Dimensi Menggunakan Java 3D API
4.1 Implementasi 4.1.1. Implementasi Tampilan Aplikasi
Gambar 4.1(a) menunjukan tampilan utama animasi gerak benda 3 dimensi menggunakan java 3D API. Gambar 4.1(b) juga merupakan tampilan utama apilikasi, namun untuk gambar 4.1(b) sudut pandang (posisi user atau kamera) terletak di atas.
(a) (b) Gambar 4.1 Tampilan utama animasi gerak benda 3 dimensi menggunakan
java 3D API: (a) sudut pandang normal; (b) sudut pandang dari atas
Gambar 4.2 merupakan menu untuk keluar dari animasi. Menu ini akan muncul ketika proses animasi sedang berlangsung, kemudian user menginput tombol escape pada keyboard.
Gambar 4.2 Menu untuk keluar dari animasi.
4.1.2. Implementasi Objek Geometri a. Mobil
Untuk menciptakan objek mobil, dilakukan dengan cara meload model objek mobil yang berekstensi 3ds ke dalam canvas3D. Proses load objek ini dilakukan oleh kelas LoadObject
b. Circuit Untuk menciptakan objek circuit, caranya sama dengan
penciptaan objek mobil. Hanya saja pada objek circuit, perlu dilakukan penskalaan sebesar 15 kali karena model circuit terlalu kecil. Penskalaan ini perlu dilakukan agar besar objek circuit sesuai dengan besar mobil.
4.2. Pengujian Transformasi 4.2.1. Pengujian Transformasi Translasi
Saat tombol panah atas (up) ditekan, objek mobil mengalami perpindahan dari titik asal menuju titik di depanya searah laju objek mobil dan kelajuan objek mobil juga bertambah. Sedangkan saat tombol panah arah ke bawah (down) ditekan, kelajuan objek mobil akan berkurang, kemudian dalam selang waktu tertentu, objek mobil berhenti, setelah itu, objek mobil bergerak mundur.
5
(a) (b) Gambar 4.3 Posisi mobil: (a) sebelum translasi (pada posisi(0,3.7,30));
(b) sesudah translasi (pada posisi (129.08,3.7,186.86))
Tabel 4.1 Menunjukan translasi yang terjadi pada objek mobil saat penekanan tombol pada keyboard. Tombol yang ditekan Gerakan yang terjadi pada objek mobil
UP Terjadi perpindahan ke arah depan mobil, kelajuan mobil bertambah
DOWN Selang waktu tertentu objek mobil berhenti, setelah berhenti, terjadi perpindahan ke arah belakang mobil
4.2.2 Pengujian Transformasi Skala Pengujian penskalaan dilakukan dengan cara
membandingkan objek antara sebelum dan sesudah dilakukan penskalaan. Objek yang diimplementasikan penskalaan adalah objek circuit, yaitu dengan penskalaan sebesar 15 kali.
(a) (b) Gambar 4.4 Objek circuit: (a) sebelum diperbesar
(b) sesudah diperbesar (15 kali)
4.2.3 Pengujian Transformasi Rotasi Pengujian transformasi rotasi dilakukan dengan
cara menjalankan aplikasi dan melakukan penekanan tombol pada keyboard. Hasil dari rotasi ini seperti ditunjukan pada gambar 4.8.
(a) (b) Gambar 4.5 Objek mobil: (a) sebelum rotasi;
(b) sesudah rotasi
Tabel 4.2 Rotasi yang terjadi pada objek mobil saat penekanan tombol pada keyboard.
Tombol yang ditekan Gerakan yang terjadi pada objek mobil
LEFT Terjadi rotasi dengan arah rotasi berlawanan dengan arah jarum jam sebesar 1 derajat.
RIGHT Terjadi rotasi dengan arah rotasi searah dengan arah jarum jam sebesar 1 derajat.
4.3. Pengujian Pencahayaan Pengujian pencahayaan dilakukan dengan
membandingkan visual objek sebelum diberi cahaya dengan visual objek setelah diberi cahaya. Gambar 4.9 menunjukan tampilan yang dihasilkan aplikasi sebelum dan sesudah diberi cahaya.
(a) (b)
(c) Gambar 4.6 Objek mobil: (a) sebelum diberi cahaya;
(b) sesudah diberi cahaya; (c) sesudah diberi cahaya dengan nilai parameter yang berbeda
Tabel 4.3 Parameterparameter yang dipakai dalam pencahayaan pada gambar 4.6 (b)
Warna Arah Jenis sumber cahaya
merah hijau biru x y z
AmbientLight 0.5f 0.5f 0.5
DirectionalLight1 0.5f 0.56f 0.5f 1.0f 1.0f 1.0f
DirectionalLight2 0.5f 0.56f 0.5f 1.0f 1.0f 1.0f
Tabel 4.4 menunjukan parameterparameter yang dipakai dalam implementasi pencahayaan gambar pada 4.9 (c)
Warna Arah Jenis sumber cahaya merah hijau biru x y z
AmbientLight 0.75f 0.75f 0.7f
DirectionalLight1 0.7 0.7 0.5f 1.0f 1.0f 1.0f
DirectionalLight2 0.7 0.7 0.5f 1.0f 1.0f 1.0f
4.4. Pengujian Pewarnaan Pengujian pewarnaan dilakukan dengan
membandingkan visual objek sebelum diberi warna dengan sesudah diberi warna. Gambar 4.10 menunjukan tampilan yang dihasilkan aplikasi sebelum dan sesudah diberi warna.
(a) (b)
6
(c) Gambar 4.7 Objek mobil: (a) sebelum diberi warna;
(b) sesudah diberi warna merah; (c) sesudah diberi warna biru.
4.5. Pengujian Texturing Pengujian texturing dilakukan dengan
membandingkan visual objek sebelum diberi texture dengan visual objek setelah diberi texture. Gambar 4.11 menunjukan tampilan yang dihasilkan aplikasi sebelum dan sesudah diberi texture.
Gambar 4.11 Objek mobil: (a) sebelum diberi texture; (b) sesudah diberi texture
5. Kesimpulan dan Saran Kesimpulan 1. Java3D API telah menyediakan fungsifungsi standar
untuk mengembangkan aplikasi grafika 3 dimensi, fungsifungsi tersebut meliputi fungsi untuk keperluan pembuatan objek 3 dimensi, transformasi, pencahayaan, pewarnaan dan texture mapping.
2. Fungsifungsi transformasi pada java 3D API yang digunakan dalam aplikasi ini meliputi translasi, rotasi dan dilatasi, dapat bekerja sesuai dengan yang diharapkan.
3. Dalam java 3D API, terdapat fungsifungsi untuk keperluan pencahayaan yang dapat digunakan untuk memodelkan objek seperti dalam dunia nyata.
4. Java 3D API sudah menyediakan fungsi untuk melakukan pewarnaan pada objek 3 dimensi. Pewarnaan pada objek 3 dimensi ini tidak akan terlihat hasilnya apabila tidak diimplementasikan pencahayaan pada objek tersebut.
5. Fungsifungsi untuk keperluan texture mapping yang disediakan java 3D API sudah cukup memadai. Objek yang mengimentasikan texturing akan tetap terlihat hasilnya meskipun belum diberi objek cahaya.
Saran 1. Seiring dengan perkembangan hardware yang
mendukung grafika komputer, aplikasi dapat dikembangkan lebih lanjut dengan meningkatkan kualitas grafis 3D yang dihasilkan.
2. Aplikasi dapat dikembangkan lebih lanjut dengan menerapkan kecerdasan buatan seperti terrain following, path following dan collission detection serta memodelkan bentuk fisik tiap objek sehingga dapat tercipta video game.
6. Referensi
[1] Adjie, Bayu, Modeling dan Animasi dengan 3D Studio Max 7.x, Elex Media Komputindo, Jakarta, 2005.
[2] Boughen, Nicholas, 3ds Max Lighting, Wordware Publishing, 2005.
[3] Bouvier, Dennis J, Getting Started with the Java 3D API, Sun microsystems, 1999.
[4] Chandra, Handi, 3ds max 6 Untuk Orang Awam, Maxicom, Palembang, 2004.
[5] Clingman, Dustin, Kendall Shawn, Mesdaghi, Syrus, Practical Java Game Programming, Charles River Media, 2004.
[6] Davison, Andrew, Killer Game Programming in Java, O’Reilly, 2005
[7] Deitel, H, Java How To Program, PrenticeHall, 1999.
[8] Hong Zhang, Y. Daniel Liang, Computer Graphics Using Java™ 2D and 3D, Prentice Hall Publishing, 2006.
[9] Pressman, R.S., Rekayasa Perangkat Lunak Pendekatan Praktisi, Buku Satu dan Dua, McGrawHil Book Co., Penerbit ANDI, 2003.
[10] Selman, Daniel, Java 3D Programming, Manning Publishing, 2003.
[11] , http://www.gamelan.com/, 2007.
BIOGRAFI PENULIS
Mufti Ali, mahasiswa Jurusan Teknik Elektro Universitas Diponegoro, mengambil konsentrasi teknik informatika dan komputer.
Menyetujui dan mengesahkan,
Dosen Pembimbing I
Agung B. P., S.T., M.I.T. NIP. 132 137 932
Tanggal………………...
Dosen Pembimbing II
Aghus Sofwan, S.T., M.T. NIP. 132 163 757
Tanggal………………...