Makalah Seminar Tugas Akhir
Animasi Gerak Benda 3 Dimensi Menggunakan Java 3D API
Mufti Ali 1 , Agung B.P. 2 , Aghus sofwan 21 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
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.
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
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 breakingM ultiplier : double lasttime : 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 terc ipta Mulai Menunggu transformasi selanjutnya Load Object Mentransformasi objek Selesai
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.
(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.
(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
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