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.
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.
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.
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
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.
Gambar 2.1 Simbol untuk menggambarkan objek dalam scene graph
Gambar 2.2 merupakan contoh sederhana scene graph.
1
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.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.
Gambar 2.5. Bundle Objek Appearance.
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
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.
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.
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.
DirectionalLight merupakan cahaya yang bertindak seperti matahari (sumber cahaya sangat jauh), mempunyai
2
Tabel 3.3 Kartu index CRC kelas LoadObject Kelas: LoadObject Tanggung Jawab: Kolaborator: Atribut: filename · Operasi: · loadFile · getExtension · getTG · getSceneGroup · getRadius · scale
Accelerate
Load Objek Mobil
<
> Turn Left
Steering
Pengguna
<>
Turn Right
Brake
Tabel 3.4 Kartu index CRC Circuit Kelas: Circuit Tanggung Jawab: Kolaborator: Atribut: · AppManager Operasi: · nearObstacle · getTG()
Ubah Posisi Kamera
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.5 Kartu index CRC kelas CarSprite Kelas: RacingGame Tanggung Jawab: Kolaborator: Atribut: · KeyBehavior · MAX_SPEED · AppManager · MIN_SPEED · Delta · pos · speed Operasi: · getTG · gettime · moveBy · doMove · tryMove · rotate · doRotateY · accelerate · getspeed · breaking · update
Tabel 3.1 Kartu index CRC kelas RacingGame Kelas: RacingGame Tanggung Jawab: Kolaborator: Atribut: · DEFAULT_FPS Operasi: · RacingGame Tabel 3.2 Kartu index CRC kelas GamePanel Kelas: GamePanel Tanggung Jawab: Kolaborator: 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
Tabel 3.6 Kartu index CRC kelas KeyBehavior Kelas: KeyBehavior Tanggung Jawab: Kolaborator: Atribut: · CarSprite · keyPress · ROTATE · car Operasi: · initialize · processStimulus · keyPressed
Tabel 3.7 Kartu index CRC kelas AppManager Kelas: AppManager Tanggung Jawab: Kolaborator: Atribut: · · ap Operasi: · createTexture · createFixTexture · texApp · stampTexCoords · makeAlmostTransparent · setMaterial
3
3.3 Diagram Kelas Dari kartu index CRC pada subbab 3.2, penyusun membuat diagram kelasnya seperti pada gambar 3.2.
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.
GamePanel BOUNDSIZE : int running : boolean isPaused : boolean period : Long gameOver : boolean car : String
RacingGame DEFAULT_FPS : int
BGCanvas backIm : BufferedImage render2D : J3DGraphics2D
processKey() createSceneGraph() addCircuit() addSprite() initUserPosition() addCamera() startGame() resumeGame() pauseGame() stopGame() run() gameUpdate()
windowActivated() windowDeactivated() windowDeiconified() windowClosing() windowClosed() windowOpened()
Circuit
AppManager
LoadObject filename : String
CarSprite
cRadius nearObstacle() getTG()
ap : Appearance
loadImage() preRender() postRender() clearSurface() loc()
createTexture() createFixTexture() texApp() stampTexCoords() stampFixTexCoords() makeAlmostTransparent() setMaterial()
radius : double MAX_SPEED : double MIN_SPEED : double delta : double pos : double breakingMultiplier : double lasttime : long
opname() loadFile() getExtension() setBSPosn() getTG() getSceneGroup() getRadius() scale() getBoundingSphere()
getTG() opname2() gettime() moveBy() doMove() doMove() tryMove() brake() getspeed() rotate() update() rotate()
KeyBehavior initialize() processStimulus() postProcessKeyEvent() keyReleased() keyPressed()
(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 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.
Transformasi
: Pengguna
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
Layar
Transformasi terhadap objek Tampilkan objek pada layar
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.
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.
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.
Mulai
Load Object Mentransformasi objek Objek tercipta
Menunggu transformasi selanjutnya
Selesai
Gambar 3.4 Diagram statechart animasi gerak benda 3 dimensi menggunakan java 3D API
4
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) 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 Terjadi perpindahan ke arah depan mobil, UP kelajuan mobil bertambah Selang waktu tertentu objek mobil berhenti, DOWN setelah berhenti, terjadi perpindahan ke arah belakang mobil
(a) (b)
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. (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) Jenis sumber cahaya
(a) (b) Gambar 4.4 Objek circuit: (a) sebelum diperbesar (b) sesudah diperbesar (15 kali)
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.
Warna
Arah
merah
hijau
biru
x
AmbientLight
0.5f
0.5f
0.5
y
z
DirectionalLight1
0.5f
0.56f
DirectionalLight2
0.5f
0.56f
0.5f
1.0f
1.0f
1.0f
0.5f
1.0f
1.0f
1.0f
4.2.3
Tabel 4.4 menunjukan parameterparameter yang dipakai dalam implementasi pencahayaan gambar pada 4.9 (c) Jenis sumber cahaya AmbientLight
merah 0.75f
Warna hijau 0.75f
biru 0.7f
x
Arah y
z
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) 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 Gerakan yang terjadi pada objek mobil ditekan Terjadi rotasi dengan arah rotasi berlawanan LEFT dengan arah jarum jam sebesar 1 derajat. Terjadi rotasi dengan arah rotasi searah RIGHT dengan arah jarum jam sebesar 1 derajat.
(a)
5
(b)
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.
(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.
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………………...
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.
Dosen Pembimbing II
Aghus Sofwan, S.T., M.T. NIP. 132 163 757 Tanggal………………...
6