Rabu, 18 April 2012

Berbagi Pengalaman Visitasi Akreditasi

Visitasi akreditasi mungkin menjadi momen yang cukup melelahkan namun ditunggu-tunggu oleh perguruan tinggi. Kampus saya baru saja melalui proses visitasi selama 3 hari berturut-turut, selalu diakhiri hingga tengah malam, bahkan di hari terakhir kami baru selesai pukul 03.00 dini hari.
Asesor yang bertugas dari Politeknik Bandung (POLBAN) dan dari ITTelkom. Dari pengalaman visitasi akreditasi kemarin, saya ingin berbagi beberapa tips untk teman-teman yang sedang mempersiapkan diri sebagai objek visitasi:

  1. Setiap informasi yang dituliskan di borang harus ada bukti fisik yang lengkap. Saya katakan disini "setiap informasi", frase tersebut berlaku bahkan untuk setiap kata dan setiap angka yang telah kita cantumkan di borang. Salah satu contoh yang kami alami, ketika asesor menanyakan tentang keterserapan alumni di dunia kerja, referensi data yang kami gunakan adalah formulir alumni tracer. Asesor meminta untuk ditunjukkan formulir tersebut, dan menghitung tumpukan formulir tersebut satu-persatu untuk dicocokkan jumlahnya dengan angka di borang. Pelajaran berharga yang didapatkan adalah, setiap aktivitas sekecil apapun, harus kita dokumentasikan dari awal. Bahkan jika ada pertemuan kecil dengan mahasiswa, baiknya dibuat BAP. Penyusunan dokumennya-pun harus rapi dan terstruktur sehingga jika suatu saat dbutuhkan, mudah untuk dicari.
  2. Bagian penyaji data fisik, baiknya merupakan orang-orang yang memang sehari-hari bekerja dengan data-data yang terkait. Alhamdulillah tidak ada masalah dalam pencarian dan penyajian data fisik selama visitasi berlangsung di kampus saya. Para penyaji data fisik adalah orang-orang yang mewakili bagian akademik, kemahasiswaan, kepegawaian, logistik, olahta, LPM, LPPM, laboratorium, perpustakaan.
  3. Perlu diperhatikan layout ruangan visitasi. Layout meja di kampus saya membentuk huruf U. Pada dua sisi yang berhadapan adalah meja asesor berhadapan dengan meja Pengisi Borang, kemudian meja tempat penyajian data fisik ada di ujung meja asesor memanjang hingga ujung meja pengisi borang dan para penyaji data fisik duduk dibelakang meja tersebut. Ketika pengisi borang membutuhkan data fisik, bisa dengan mudah langsung memberikan kode kepada para penyaji data fisik.
  4. Siapkan akomodasi seperti tempat sholat, air minum, terutama konsumsi snack dan makanan besar sebaik mungkin, mengingat visitasi akan memakan banyak energi.
  5. Sebelum visitasi akreditasi dilaksanakan, lakukan simulasi visitasi dengan mengundang rekan sejawat yang faham seluk beluk akreditasi atau minimal pernah menjalani proses visitasi akreditasi. Hal ini perlu untuk mengetahui apa kira-kira poin yang kurang dalam borang milik kita dan apakah data-data fisik yang disediakan sudah lengkap.
  6. Lakukan pertemuan untuk mensosialisasikan visitasi ini kepada mahasiswa dan segenap civitas kampus, termasuk cleaning service. Pengalaman kemarin di kampus saya, ketika asesor melakukan kunjungan ke lab dan bertemu dengan mahasiswa, asesor menanyakan tentang visi misi institusi dan prodi.
  7. Terkait dengan poin 5, pemahaman tentang visi misi institusi dan prodi baiknya diberikan kepada dosen, karyawan dan mahasiswa jauh-jauh hari sebelum visitasi berlangsung. Komentar dari asesor di kampus saya adalah, mahasiswa dan karyawan baru sampai di tahap "hafal" namun belum sepenuhnya "paham" tentang visi misi institusi dan prodi.
  8. Selain pengisi borang, baiknya jangan bicara atau mengemukaan pendapat ke asesor sebelum diminta oleh pengisi borang.
  9. Selama visitasi, kita diperbolehkan mengajukan revisi dari borang yang sudah dibuat, revisi tentunya dapat dilakukan jika data atau bukti fisik revisi dapat kita sediakan.

Semoga bermanfaat..

Senin, 16 Januari 2012

Multimarker dengan in2AR v 2

File yang saya gunakan untuk mencoba adalah file SimpleDemo.as yang berada di dalam bundle SDK v2. Agar dapat mendeteksi beberapa buah marker, ada beberapa baris kode yang harus diubah yaitu:

Tambahkan (embed) source marker pada baris ini:
// embed your data file here
        [Embed(source = '../assets/def_data.ass', mimeType='application/octet-stream')]
        private static const data_ass:Class;
        [Embed(source = '../assets/bush_data.ass', mimeType='application/octet-stream')]

Tambahkan reference objek pada baris ini:
asfeatLib.addReferenceObject( ByteArray( new bush_data_ass ) );

Dalam fungsi onModelDetected ganti indeks array models dengan ref.id:
models[ref.id].setTransform( ref.rotationMatrix, ref.translationVector, ref.poseError, mirror );

Saya hanya ingin mencoba mendekteksi marker yang berbeda, untuk model 3d yang ditampilkan saya menggunakan model yang sama dengan file contoh jadi saya melakukan langkah ini: tambahkan instance dalam Away3DLiteWorld.as, kemudian dalam SimpleDemo.as panggil intance tersebut (dalam fungsi init3d() ):

models = Vector.<ARAway3DLiteContainer>([
                                                world3d.in2ar,world3d.in2ar2
                                                ]);

 dan jangan lupa... :-D ubah jumlah objek referensi pada baris ini:

 public var maxReferenceObjects:int=2;


Selamat mencoba..

Senin, 09 Januari 2012

in2AR versi 2

Berikut ini langkah-langkah yang saya gunakan untuk mencoba menggunakan in2AR versi 2, dengan catatan tanpa ada project yang ditambahkan, hanya mencoba file contoh yang disertakan di dalam SDK.

  1. Download SDK terbaru dari website in2AR
  2. Jalankan FlashDevelop, buat project baru, unzip SDK in2AR ke dalam folder project anda.
  3. Pada jendela Project di FlashDevelop, pastikan semua .swc di dalam folder lib telah di - "Add to library". Caranya klik kanan pada masing-masing .swc kemudian beri tanda cek pada "Add to library".
  4. Jika pada project in2AR versi sebelumnya anda menemukan file main.as, maka pada in2AR versi 2 ini anda tidak akan menemukan file main.as. Sebagai gantinya, di dalam folder examples ada 5 file .as, files inilah main.as yang anda cari. Anda dapat mencoba untuk menjalankan setiap .as tersebut satu persatu.
  5. Misal anda ingin mencoba SimpleDemo.as, pada jendela Project, klik kanan file SimpleDemo.as lalu beri tanda cek pada "Document Class". Selanjutnya klik "Test Project".

Terjadi error???

Coba sebelum mencoba menjalankan file .as klik Menu Project > Properties.
  1. Pada tab output, pada bagian General, arahkan Output file ke bin\SDK_SimpleDemo.swf.
  2. Pada Tab SDK di bagian Installed SDK(s) pilih SDK yang anda gunakan, setting yang saya gunakan Flex 4.5.1, AIR 2.6 karena kebetulan memang saya menggunakan Flex tersebut.
  3. Pada tab Classpaths, di bagian Project Classpath, tambahkan classpath examples, sesuai dengan nama folder tempat SimpleDemo.as berada.

Selamat Mencoba

Rabu, 28 Desember 2011

Mencoba Membangun AR Menggunakan D'Fusion Studio - Total Immersion

Setelah sekian lama akhirnya punya waktu juga untuk mencoba membangun AR menggunakan free software keluaran Total Immersion, D'Fusion Studio. D'Fusion bisa diunduh melalui website komunitas Total Immersion: https://community.t-immersion.com/. Tentunya anda perlu mendaftarkan diri terlebih dahulu. Selain bundle D'Fusion Studio, melalui website ini anda juga dapat mengunduh tools yang diperlukan, misalnya D'Fusion Exporter untuk 3D's MAX dan MAYA.
Dokumentasi/tutorial penggunaan D'Fusion Studio tersedia cukup lengkap di website komunitas tersebut.
Tapi ada yang perlu diperhatikan:
1. model 3D yang dapat digunakan adalah model dengan jenis file scenetta (.scene), Total Immersion baru menyediakan converter untuk 3D software modelling MAYA dan 3D's Max.
2. D'Fusion studio ditujukan untuk penggunaan non commercial, mereka tidak mencantumkan harga untuk yang versi commercial.. Untuk tau harga yang commercial harus menghubungi mereka via email.  



Jumat, 22 Juli 2011

My First Multi Marker Multi Collada (PV3D)



Saya sedang mencoba belajar tentang AR. Library yang saya coba pertama kali adalah ARToolKit. Tutorial ARToolKit yang cukup lengkap untuk pemula dapat ditemukan di sini. Tetapi melihat keterbatasan dari ARToolKit dan pengembangannya, akhirnya saya mencari-cari lib lain yang dapat saya pelajari. Akhirnya saya menemukan FLARToolKit.
Selanjutnya saya mulai mempelajari FLARManager, framework yang di dalamnya telah ada lib untuk tracking sekaligus ada 3D framework. FLARManager mendukung FLARToolKit sebagai tracking lib dan beberapa 3D framework untuk rendering model 3D yang ingin saya tampilkan.
Alat yang saya gunakan adalah:
  1. FlashDevelop sebagai IDE
  2. Adobe Flex sebagai compiler
  3. FLARManager sebagai framework untuk AR
Sesudah instalasi FlashDevelop, anda perlu meletakkan Adobe Flex di dalam direktori Tools yang ada di direktori tempat FlashDevelop terinstall (beri nama folder flexsdk). FLARManager yang saya gunakan saya dapatkan di sini. FLARManager tersebut telah mendukung multi marker dengan multi collada. Pemilik blog menggunakan Away3D.

Pada awalnya saya menggunakan source code yang saya dapatkan mentah-mentah, namun hasilnya tidak memuaskan. Warna dasar dari collada yang saya gunakan tidak dapat ditampilkan dengan baik. Solusinya harus membuat tekstur material untuk ditempelkan di collada.

Teman saya menganjurkan untuk menggunakan method load() yang dimiliki class DAE. Tetapi masalahnya, class DAE adalah milik Papervision (PV3D), sementara source code menggunakan Away3D. Setelah berpusing ria memodifikasi kode MultiMarkerMultiCollada.as yang awalnya menggunakan Away3D, untuk diubah menjadi menggunakan Papervison, akhirnya saya menyerah.

Saya mencoba solusi lain:
Di dalam folder Example dari FLARManager, ada contoh kode yang digunakan untuk papervision, yaitu FLARManagerTutorial_Collada_PV3D.as. Saya mencoba memodifikasi kode di dalamnya, yang awalnya hanya untuk 1 marker menjadi multimarker, menggunakan acuan kode di dalam MultiMarkerMultiCollada.as, dan berhasil... Akhirnya saya bisa menampilkan multi collada menggunakan multi marker dengan PaperVision.
Kode hasil modifikasi saya mirip dengan yang ada di lOOney dOOdle. Karena MultiMarkerMultiCollada.as yang saya jadikan acuan adalah hasil modifikasi dari kode lOOney dOOdle.

Kuncinya ada di fungsi-fungsi berikut:

        private function onMarkerAdded (evt:FLARMarkerEvent) :void
       {
            trace("["+evt.marker.patternId+"] added");
           
            //this.modelContainer.visible = true;
            //this.activeMarker = evt.marker;
           
            if (evt.marker.patternId == 0) {
                markerAdded(0);
                this.activeMarker = evt.marker;
            }
           
            if (evt.marker.patternId == 1) {
                markerAdded(1);
                this.activeMarker1 = evt.marker;
            }
           
            if (evt.marker.patternId == 2) {
                markerAdded(2);
                this.activeMarker2 = evt.marker;
            }
        }
       
        private function onMarkerUpdated (evt:FLARMarkerEvent) :void
       {
            trace("["+evt.marker.patternId+"] updated");
            //this.modelContainer.visible = true;
            //this.activeMarker = evt.marker;
           
            if (evt.marker.patternId == 0) {
                markerAdded(0);
                this.activeMarker = evt.marker;
            }
           
            if (evt.marker.patternId == 1) {
                markerAdded(1);
                this.activeMarker1 = evt.marker;
            }
           
            if (evt.marker.patternId == 2) {
                markerAdded(2);
                this.activeMarker2 = evt.marker;
            }
        }
       
        private function onMarkerRemoved (evt:FLARMarkerEvent) :void
       {
            trace("["+evt.marker.patternId+"] removed");
            //this.modelContainer.visible = false;
            //this.activeMarker = null;
           
            if (evt.marker.patternId == 0) {
                markerRemoved(0);
            }
           
            if (evt.marker.patternId == 1) {
                markerRemoved(1);
            }
           
            if (evt.marker.patternId == 2) {
                markerRemoved(2);
            }
           
            this.activeMarker = null;
            this.activeMarker1 = null;
            this.activeMarker2 = null;
        }
       
        private function onEnterFrame (evt:Event) :void {
            // apply the FLARToolkit transformation matrix to the Cube.
            if (this.activeMarker) {
                this.modelContainer.transform = PVGeomUtils.convertMatrixToPVMatrix(this.activeMarker.transformMatrix);
            }
           
            if (this.activeMarker1) {
                this.modelContainer1.transform = PVGeomUtils.convertMatrixToPVMatrix(this.activeMarker1.transformMatrix);
            }
           
            if (this.activeMarker2) {
                this.modelContainer2.transform = PVGeomUtils.convertMatrixToPVMatrix(this.activeMarker2.transformMatrix);
            }
           
            // update the Papervision3D view.
            this.renderEngine.render();
        }
       
        private function markerAdded(markerId:int):void
       {
            switch(markerId) {
                case 0: {
                    if (modelContainer.visible == false) {
                        modelContainer.visible = true;
                        break;
                    } else {
                        break;
                    }
                }
                case 1: {
                    if (modelContainer1.visible == false) {
                        modelContainer1.visible = true;
                        break;
                    } else {
                        break;
                    }
                }
                case 2: {
                    if (modelContainer2.visible == false) {
                        modelContainer2.visible = true;
                        break;
                    } else {
                        break;
                    }
                }
            }
        }
       
        private function markerRemoved(markerId:int):void
       {
            switch(markerId) {
                case 0: {
                    if (modelContainer.visible == true) {
                        modelContainer.visible = false;
                        break;
                    } else {
                        break;
                    }
                }
                case 1: {
                    if (modelContainer1.visible == true) {
                        modelContainer1.visible = false;
                        break;
                    } else {
                        break;
                    }
                }
                case 2: {
                    if (modelContainer2.visible == true) {
                        modelContainer2.visible = false;
                        break;
                    } else {
                        break;
                    }
                }
            }
        }

File collada yang saya gunakan sebagai contoh saya dapatkan dari internet, untuk objek mario saya masih menggunakan contoh collada dari sini

Thanks to: Phat Cool atas sharing ilmunya

Selasa, 28 Juni 2011

Cara Freeze Tampilan Game Saat Pengguna Memunculkan Menu (in Unity3d Engine)

Skenario:
Anda sedang memainkan game, kontrol game dilakukan dengan mouse dan keyboard, kemudian di tengah-tengah permainan anda memunculkan menu. Untuk memilih menu digunakan mouse, tentu cukup mengganggu jika mouse digerakkan dan tampilan game masih tetap ikut bergerak. Tampilan game dapat dibekukan sementara selama tampilan menu masih ada di layar. Dalam Unity3d, hal ini dapat dilakukan dengan cara disable component MouseLook yang dimiliki oleh Camera atau Character Controller (First Person Controller dan Third Person Controller).

Solusi:
Perlu diketahui bahwa Component Mouse Look ada di Component > Camera-Control > Mouse Look. Jika diperhatikan, setiap Character Controller di scene memiliki Mouse Look sebagai Component (dapat dilihat di panel Inspector).
Saya mendapatkan solusi ini dari UnityAnswer. Untuk freeze tampilan game, berikan nilai false untuk component Mouse Look dengan kode dibawah ini:

GameObject.Find("First Person Controller").GetComponent("MouseLook").enabled=false;
GameObject.Find("Main Camera").GetComponent("MouseLook").enabled=false;


Untuk kembali mengaktifkan  tampilan game (Unfreeze), beri nilai true untuk component Mouse Look dengan kode dibawah ini:
 

GameObject.Find("First Person Controller").GetComponent("MouseLook").enabled = true;
GameObject.Find("Main Camera").GetComponent("MouseLook").enabled = true;




Jumat, 24 Juni 2011

Membangun Game First Person Shooter (FPS) dengan Unity3d Engine ---- [part 1]

Tulisan ini merupakan terjemahan bebas dari tutorial membangun FPS yang disediakan oleh unity3d.com. Tutorial asli dalam versi bahasa Inggris dapat ditemukan di unity3d.com. Resource yang saya gunakan juga dapat didownload di unity3d.com/support/resources/tutorials/fpstutorial.html.

Berikut ini langkah-langkah membangun FPS dengan Unity3d:
  1. Download FPS_Tutorial.zip dari alamat diatas, Unzip kemudian buka project di dalamnya menggunakan Unity3d.
  2. Import standard assets milik Unity3d ke dalam project yang telah anda buka tersebut. Standard assets ada di folder Standard Packages yang ada di dalam folder dimana Unity3d terinstall.
  3. Prinsip game FPS adalah mengeksplorasi suatu area kemudian menembak musuh-musuh yang muncul. Jadi untuk membangun game FPS, pertama diperlukan objek area. Dalam tutorial FPSini, Unity3d telah menyediakan objek area yang dapat langsung digunakan.
    Pilih objek mainLevelMesh di panel Projects dengan cara: klik mainLevelMesh (Objects/mainLevelMesh/mainLevelMesh) yang ada di panel Projects.
    Perhatikan di panel Inspector, dibagian FBXImporter, pastikan option "Generate Colliders" aktif (dengan memberi tanda centang).
    Drag objek mainLevelMesh dari panel Projects ke dalam scene. Sekarang anda telah memiliki objek berupa area yang akan digunakan sebagai wilayah eksplorasi FPS anda.

  4. Selanjutnya adalah menambahkan karakter FPS itu sendiri. Karakter FPS yang akan digunakan adalah aset standar yang telah disediakan oleh Unity3d. Klik dan drag aset First Person Controller (jendela project, folder Standard Assets > Prefabs) ke scene. Di scene akan muncul objek berbentuk silinder yang merepresentasikan pemain game. Perhatikan penempatan objek silinder ini terutama nilai y, tempatkan First Person Controller di atas permukaan area game.

    jika penempatan benar maka ketika tampilan Play dijalankan, anda sudah dapat mengekplorasi area dengan menggunakan keyboard dan mouse sebagai alat gerak.
  5. Selanjutnya menambahkan senjata. Menambahkan peluncur granat: Buat game objek kosong, rename sebagai Launcher, tempatkan di tempat yang sama dengan aset FPS di scene dengan cara:
    Klik FPS di panel Hierarchy, letakkan kursor mouse di Scene, tekan tombol "F" di keyboard. Klik Launcher di panel Hierarchy lalu pilih menu Game Object > Move to view. Di scene akan terlihat launcher berpindah tempat ke tempat FPS asset.


    Tetapi ketika game dijalankan, objek launcher belum bergerak mengikuti objek FPS.


    Untuk mengatasi masalah ini, drag objek Launcher ke dalam Main camera yang dimiliki oleh FPS di jendela Hierarchy.


    Klik tombol Play, Ketika menjalankan objek FPS, perhatikan Scene View, objek Luncher akan ikut bergerak bersama objek FPS.
     
  6. Membuat objek granat sederhana: Buat prefab baru, rename sebagai Missile. Kemudian buat objek bola (klik menu GameObject > Create Other > Sphere). Objek bola ini akan ditampilkan di jendela Hierarchy dan Scene View. Drag objek bola ini dari panel Hierarchy ke prefab Missile yang ada di panel project. Hapus objek Sphere di panel Hierarchy.
  7. Membuat kode peluncur granat: Buat dokumen Javascript baru, beri nama MissileLauncher, isikan kode berikut:
    var projectile : Rigidbody;
    var speed = 20;

    function Update()
    {
        if( Input.GetButtonDown( "Fire1" ) )
       
        {
            var instantiatedProjectile : Rigidbody = Instantiate(projectile, transform.position, transform.rotation );
            instantiatedProjectile.velocity =transform.TransformDirection( Vector3( 0, 0, speed ) );
            Physics.IgnoreCollision( instantiatedProjectile. collider,
                transform.root.collider );
        }
    }

    Attach script ini kedalam objek Launcher yang ada di dalam objek FPS. Untuk memastikan bahwa objek FPS telah memiliki script Missile Launcher, klik objek Launcher di panel Hierarchy, di panel Inspector akan muncul Properti script Missile Launcher. Disini terlihat variabel projectile masih kosong.
  8. Klik prefab Missile di panel Project, klik Components > Physics > Rigidbody
  9. Klik Launcher di panel Hierarcy, drag prefab Missile dari panel Project ke variabel projectile di panel Inspector.
    Jalankan game, klik mouse, sekarang anda dapat menembakkan granat berbentuk bulat.


  10. Menambahkan efek ledakan. Buat javascript baru, beri nama Projectile. Isikan kode berikut:
    var explosion : GameObject;
    function OnCollisionEnter( collision : Collision )
    {

     var contact : ContactPoint = collision.contacts[0];
     var rotation = Quaternion.FromToRotation( Vector3.up, contact.normal );
     var instantiatedExplosion : GameObject = Instantiate(
     explosion, contact.point, rotation );
     Destroy( gameObject );
    }
    Attach script ini ke prefab Missile. Selanjutnya membuat ledakan, buat prefab baru,beri nama Explosion. Efek ledakan akan menggunakan aset Particle standar dari Unity3d. Drag prefab Explosion dari panel Project Standard Asets > Paticles > Explosion ke panel Hierarchy. Lakukan seting sesuka anda, kemudian drag Explosion dari panel Hierarchy ke prefab Explosion yang tadi telah dibuat.
  11. Klik prefab Missile di panel project, drag prefab Explosion dari panel Project ke variabel Explosion (script Projectile) di panel Inspector.

  12. Buat script baru, rename dengan Explosion, isikan kode:
    var explosionTime = 1.0;
    function Start()
    {
     Destroy( gameObject, explosionTime );
    }
    attach script Explosion ke prefab Explosion. Jalankan game, sekarang setiap klik mouse, granat akan muncul dengan efek ledakan.
  13. Menambahkan suara ledakan. Klik prefab Explosion di panel Project. Klik Component > Audio > Audio Source. Panel Inspector akan menampilkan Audio Source. Klik tanda bulatan kecil di samping kanan kotak Audio Clip. Pilih Rocket Launcher Impact.
    Jalankan game.

    Sumber: unity3d.com/support/resources/tutorials/fpstutorial.html