Aplikasi Simulasi Bedah Otak Berbasis Virtual Reality
Transcript of Aplikasi Simulasi Bedah Otak Berbasis Virtual Reality
Oleh:
Irshad Mohammad Rasyidi
Zico Ritonda Bahen
05111740000046
05111740000064
Pembimbing Departemen Ary Mazharuddin Shiddiqi, S.Kom., M.Comp.Sc., Ph.D Pembimbing Lapangan Prof. Drs.Ec. Ir. Riyanarto Sarno, M.Sc., Ph.D. DEPARTEMEN INFORMATIKA
Fakultas Teknologi Informasi dan Komunikasi Institut Teknologi Sepuluh Nopember Surabaya 2020
Aplikasi Simulasi Bedah Otak Berbasis Virtual Reality Riset Laboratorium Manajemen Informasi Informatika ITS Gedung Informatika Jl. Teknik Kimia, ITS, Surabaya Periode: 24 Februari 2020 – 24 April 2020
KERJA PRAKTIK – IF184801
ii
[Halaman ini sengaja dikosongkan]
iii
Oleh:
Irshad Mohammad Rasyidi 05111740000046
Zico Ritonda Bahen 05111740000064
Pembimbing Departemen
Ary Mazharuddin Shiddiqi, S.Kom., M.Comp.Sc., Ph.D
Pembimbing Lapangan
Prof. Drs.Ec. Ir. Riyanarto Sarno, M.Sc., Ph.D.
DEPARTEMEN INFORMATIKA
Fakultas Teknologi Informasi dan Komunikasi
Institut Teknologi Sepuluh Nopember
Surabaya 2019
Aplikasi Simulasi Bedah Otak Berbasis Virtual Reality Riset Laboratorium Manajemen Infoarmasi Informatika ITS Gedung Informatika Jl. Teknik Kimia, ITS, Surabaya Periode: 10 Februari 2020 – 10 April 2020
KERJA PRAKTIK – IF184801
iv
[Halaman ini sengaja dikosongkan]
v
LEMBAR PENGESAHAN KERJA PRAKTIK
Aplikasi Simulasi Bedah Otak Berbasi Virtual Reality
Oleh:
Irshad Mohammad Rasyidi 05111740000046 Zico Ritonda Bahen 05111740000064
Disetujui oleh Pembimbing Kerja Praktik:
1. Ary Mazharuddin Shiddiqi, S.Kom., M.Comp.Sc., Ph.D
…………………….
(Pembimbing Departemen)
2. Prof. Drs.Ec. Ir.
Riyanarto Sarno,
M.Sc., Ph.D.
…………………….
(Pembimbing Lapangan)
Surabaya
Juli, 2020
vi
[Halaman ini sengaja dikosongkan]
vii
Aplikasi Pemasangan Stereotaktik untuk Menentukan Lokasi Bedah
Nama Mahasiswa : Irshad Mohammad Rasyidi NRP : 05111740000046 Nama Mahasiswa : Zico Ritonda Bahen NRP : 05111740000064 Departemen : Informatika ELECTICS-ITS Pembimbing Jurusan : Ary Mazharuddin Shiddiqi, S.Kom.,
M.Comp.Sc., Ph.D
ABSTRAK
Riset ini merupakan riset yang menggabungkan teknologi virtual reality dengan kebutuhan medis untuk membantu dokter dalam melakukan perencanaan operasi. Saat ini kami sedang mengerjakan aplikasi Simulasi Bedah Otak Berbasis Virtual Reality.
Aplikasi ini diperuntukan untuk dokter bedah sara untuk memudahkan dokter dalam memlakukan perencanaan sebelum dilakukan operasi bedah kepada pasien.
Aplikasi ini dibangun menggunakan pemrograman berbasis Unity3d.
Kata kunci: Alat Kesehatan, Unity3d, Virtual Reality
viii
KATA PENGANTAR
Puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Esa karena atas berkat limpahan rahmat dan lindungan-Nya penulis dapat melaksanakan salah satu kewajiban sebagai mahasiswa Informatika ITS yaitu Kerja Praktik.
Penulis menyadari masih terdapat banyak kekurangan baik dalam pelaksanaan kerja praktik maupun penyusunan buku laporan ini, namun kami berharap buku laporan ini dapat menambah wawasan pembaca dan dapat menjadi sumber referensi. Penulis mengharapkan kritik dan saran yang membangun untuk kesempurnaan penulisan buku laporan ini.
Melalui laporan ini penulis juga ingin menyampaikan rasa terima kasih kepada kepada orang-orang yang telah membantu dalam pelaksanaan kerja praktik hingga penyusunan laporan Kerja praktik baik secara langsung maupun tidak langsung. Orang-orang tersebut antara lain adalah:
1. Orang tua penulis, 2. Bapak Ary Mazharuddin Shiddiqi, S.Kom., M.Comp.Sc.,
Ph.D selaku dosen pembimbing kerja praktik yang telah membimbing penulis selama kerja praktik berlangsung.
3. Prof. Drs.Ec. Ir. Riyanarto Sarno, M.Sc., Ph.D. selaku pembimbing lapangan selama kerja praktik yang telah memberikan bimbingan serta ilmunya kepada penulis.
Surabaya, April 2020
Penulis
ix
[Halaman ini sengaja dikosongkan]
x
DAFTAR ISI
LEMBAR PENGESAHAN ......................................................... V
ABSTRAK ............................................................................ VII
KATA PENGANTAR ............................................................. VIII
DAFTAR ISI ............................................................................ X
DAFTAR GAMBAR ............................................................... XII
DAFTAR TABEL ................................................................... XIII
BAB I PENDAHULUAN ........................................................... 1
1.1. LATAR BELAKANG ............................................................... 1
1.2. TUJUAN ............................................................................ 1
1.3. MANFAAT ......................................................................... 2
1.4. RUMUSAN PERMASALAHAN .................................................. 2
1.5. LOKASI DAN WAKTU KERJA PRAKTIK ....................................... 2
1.6. METODOLOGI KERJA PRAKTIK ............................................... 2
1.7. SISTEMATIKA LAPORAN ........................................................ 5
BAB II PROFIL TIM RISET ....................................................... 8
2.1. PROFIL TIM RISET ............................................................... 8
2.2. LOKASI ............................................................................. 8
BAB III TINJAUAN PUSTAKA ................................................ 10
3.1. UNITY3D ........................................................................ 10
3.2. VIRTUAL REALITY .............................................................. 10
3.3. OCULUS RIFT ................................................................... 11
3.4. CONSTRUCTIVE SOLID GEOMETRY ........................................ 11
BAB IV ANALISIS DAN DESAIN ............................................. 13
xi
4.1. ANALISIS SISTEM .............................................................. 13
4.1.1. DEFINISI UMUM APLIKASI ............................................... 13
4.1.2. ANALISIS KEBUTUHAN .................................................... 14
4.1.2.1. KEBUTUHAN FUNGSIONAL ........................................ 14
4.1.2.2. KEBUTUHAN NON FUNGSIONAL ................................ 16
4.2. PERANCANGAN SISTEM ...................................................... 16
4.2.1. DESAIN SISTEM ............................................................. 16
BAB V IMPLEMENTASI SISTEM ............................................ 24
5.1. IMPLEMENTASI KONTROL DAN PANEL UI ............................... 24
5.1.1. KONTROL ORBITAL ......................................................... 25
5.1.2. PANEL UI INTERACTIVE TOOLBAR ...................................... 27
5.2. IMPLEMENTASI TOOL......................................................... 28
5.2.1. IMPLEMENTASI TITIK KOORDINAT...................................... 28
5.2.2. IMPLEMENTASI TRANSPARANSI ......................................... 30
5.2.3. IMPLEMENTASI PENGGARIS .............................................. 30
5.2.4. IMPLEMENTASI PEMOTONGAN OBJEK BEDAH ...................... 34
5.3. TAMPILAN ANTARMUKA .................................................... 37
BAB VI PENGUJIAN DAN EVALUASI ..................................... 39
6.1. TUJUAN PENGUJIAN .......................................................... 39
6.2. SKENARIO PENGUJIAN ....................................................... 39
BAB VII KESIMPULAN DAN SARAN ...................................... 41
DAFTAR PUSTAKA ............................................................... 42
BIODATA PENULIS I ............................................................. 43
BIODATA PENULIS II ............................................................ 44
xii
DAFTAR GAMBAR
Gambar 4.1. Use-Case Diagram……………………………………….. 17 Gambar 4.2. Activity Diagram Mengobservasi Objek Bedah
secara Menyeluruh……………………………………….18 Gambar 4.3. Activity Diagram Mengatur Transparansi Objek
Bedah...............................................................19 Gambar 4.4. Activity Diagram Meletakan Titik Koordinat....20 Gambar 4.5. Activity Diagram Memproyeksikan Penggaris
sebagai Alat Bantu Ukur…….………………………….21 Gambar 4.6. Activity Diagram Melakukan Pemotongan
Kepada Objek ……………………………………........….22 Gambar 5.1 Tampilan aplikasi…………………………………………. 37
xiii
DAFTAR TABEL
Tabel 4.1 Kebutuhan Fungsional…………………………………..14 Tabel 4.2 Kebutuhan Non-Fungsional………………………….. 16
xiv
[Halaman ini sengaja dikosongkan]
1
BAB I PENDAHULUAN
1.1. Latar Belakang Kebutuhan dalam persiapan pra-operasi dalam
dunia medis merupakan hal yang sangat krusial serta perlu untuk dilakukan agar kemungkinan keberhasilan operasi dapat tercapai. Pada saat ini banyak pengembangan yang sedang dilakukan untuk mengatasi permasalahan ini. Salah satu teknologi yang dikembangan dalam dunia medis saat ini adalah virtual reality. Teknologi ini memungkinkan tenaga medis untuk mengamati secara langsung dan merencanakan proses operasi melalui data yang tersedia. Dengan memvisualkan data medis secara 3 dimensi dan berinteraksi melalui visualisasi tersebut, tentunya akan memudahkan tenaga medis dalam proses perencanaannya.
Oleh karena itu, tim peneliti pada riset ini mengembangkan sebuah aplikasi yang memungkinkan tenaga medis untuk memvisualisasikan dan mensimulasikan perencanaan operasi.
1.2. Tujuan Tujuan kerja praktik kali ini adalah
menyelesaikan kewajiban nilai kerja praktik sebesar 2 SKS dan membantu tim peneliti untuk menyelesaikan riset.
2
1.3. Manfaat Berikut manfaat yang diperoleh melalui kerja
praktik ini adalah membantu peneliti di dalam riset ini untuk menyelesaikan aplikasi yang dapat membantu dokter dalam melakukan simulasi dan perencanaan bedah secara virtual.
1.4. Rumusan Permasalahan Berikut rumusan masalah dalam pelaksanaan
kerja praktik pembuatan fitur-fitur sesuai kebutuhan: 1. Bagaimana membangun fitur-fitur pada aplikasi
ini?
1.5. Lokasi dan Waktu Kerja Praktik Lokasi kerja praktik kali ini dilaksanakan di Ruang
Tata Usaha Gedung Informatika di ruang 215 bersama dengan tim peneliti lainnya. Adapun kerja praktik dimulai pada tanggal 24 Februari 2020 s.d. 24 April 2020.
1.6. Metodologi Kerja Praktik
1. Perumusan Masalah Untuk mengetahui kebutuhan aplikasi ini,
informasi kami dapatkan melalui salah satu dokter, yang telah bekerja sama dalam melaksanakan riset yang sedang dilakukan, yaitu memungkinkan seorang dokter untuk melakukan visualisasi dan simulasi secara real-time melalui teknologi virtual reality.
3
Prof. Drs.Ec. Ir. Riyanarto Sarno, M.Sc., Ph.D. selaku pembimbing lapangan dan ketua tim riset membagi tugas kepada kami tentang apa saja yang harus dikerjakan.
2. Studi Literatur
Setelah mengetahui kebutuhan dokter sebelum, selama, dan sesudah operasi berlangsung, kami mencoba untuk mempelajari kebutuhan fungsional aplikasi yang akan dibuat. Kami mulai untuk melihat framework serta perangkat keras yang akan kami gunakan dalam membangun aplikasi ini, seperti Unity3d dan perangkat keras Oculus Rift. Kami juga melakukan riset dalam metode yang akan digunakan untuk memenuhi kebutuhan tersebut.
3. Analisis dan Perancangan Aplikasi
Setelah mendesain kerangka aplikasi, kami butuh untuk menentukan detil fungsional serta metode yang perlu untuk dimasukan sebagai fitur aplikasi.
4. Implementasi Aplikasi
Implementasi merupakan realisasi dari tahap perancangan. Pada tahap ini, kami mengerjakan desain sesuai yang telah dibahas tim riset.
5. Pengujian dan Evaluasi
4
Pengujian yang dilakukan dengan cara melakukan percobaan melalui data pasien asli.
5
1.7. Sistematika Laporan Laporan kerja praktik ini terdiri dari 7 bab
dengan rincian sebagai berikut :
1. Bab I: Pendahuluan
Bab ini berisi tentang latar belakan masalah, tujuan, manfaat, rumusan masalah, lokasi dan waktu kerja praktik, metodologi, dan sistematika laporan.
2. Bab II: Profil Tim Riset
Bab ini berisi sekilas tentang profil Tim Riset yang dikepalai oleh Prof. Drs.Ec. Ir. Riyanarto Sarno, M.Sc., Ph.D.
3. Bab III: Tinjauan Pustaka
Dalam bab ini dibahas mengenai konsep-konsep pembuatan model, dasar teori, teknologi yang dipakai dalam pembuatan model.
4. Bab IV: Analisis dan Perancangan Sistem
Dalam bab ini dibahas tentang proses analisis kebutuhan berdasarkan kondisi yang sesungguhnya dan perancangannya yang meliputi desain aplikasi yang akan dikembangkan. Proses analisis dan desain aplikasi menghasilkan daftar fitur yang dibutuhkan.
6
5. Bab V: Desain Model dan Implementasi Sistem
Dalam bab ini dibahas tentang desain model dan implementasi secara keseluruhan.
6. Bab VI: Pengujian dan Evaluasi
Dalam bab ini dibahas tentang skenario pengujian, dan evaluasi pengujian setelah model selesai dibangun.
7. Bab VII: Kesimpulan dan Saran
Bab ini berisi tentang kesimpulan dan saran yang didapatkan dari tugas selama kerja praktik.
7
[Halaman ini sengaja dikosongkan]
8
BAB II PROFIL TIM RISET
2.1. Profil Tim Riset Tim riset ini dibentuk oleh Prof. Drs.Ec. Ir.
Riyanarto Sarno, M.Sc., Ph.D. atas diskusi dengan salah satu dokter bedah saraf. Diskusi ini menghasilkan sebuah riset baru di bidang alat kesehatan. Mengingat mahalnya harga alat kesehatan berupa perangkat lunak yang dibeli dari luar Indonesia, Prof. Drs.Ec. Ir. Riyanarto Sarno, M.Sc., Ph.D. menginisiasi untuk membangun perangkat lunak ini sebagai salah satu riset yang beliau lakukan.
2.2. Lokasi Riset ini dilakukan di R-215, Tata Usaha Gedung
Informatika, ITS di Jalan Teknik Kimia, Surabaya 60111.
9
[Halaman ini sengaja dikosongkan]
10
BAB III TINJAUAN PUSTAKA
3.1. Unity3d Unity3d adalah sebuah aplikasi Game Engine
yang cukup populer di kalangan Game Developer, untuk mengembangkan permainan 2 dimensi dan 3 dimensi. Selain itu, Unity3d juga dapat digunakan untuk mengembangkan aplikasi berbasis Virtual Reality dan Augmented Reality. Hasil aplikasi akhir yang dapat dikembangkan menggunakan Unity3d tidak sebatas game saja, namun sudah mulai meluas ke ranah animasi, otomotif, engineering, dan konstruksi.
3.2. Virtual Reality Virtual Reality atau VR adalah sebuah teknologi
yang dapat membuat simulasi sebuah lingkungan digital. Penggunanya dapat merasakan pengalaman seperti masuk ke dunia yang benar-benar berbeda dari dunia nyata, dengan bantuan perangkat keras VR Headset yang digunakan di kepala. Aplikasi berbasis VR yang sudah ada cukup beragam, mulai dari aplikasi hiburan, edukasi, desain, hingga simulasi.
11
3.3. Oculus Rift Oculus Rift adalah seperangkat VR Headset yang
dikembangkan oleh sebuah divisi dalam perusahaan teknologi Facebook, bernama Oculus, dengan fokus yang berada pada Hardware & Software Virtual Reality.
3.4. Constructive Solid Geometry Constructive Solid Geometry merupakan metode
yang dilakukan dalam melakukan pemodelan suatu geometri. Melalui metode CSG dibentuk melalui objek-objek primitif yang digabungkan menggunakan Boolean operators, seperti union, intersection, dan difference agar dapat membentuk objek yang tebih kompleks. Melalui operator tersebut kita dapat menghasilkan dan memanipulasi objek primitif, seperti kotak, bola, silinder, dengan melakukan operasi boolean.
12
[Halaman ini sengaja dikosongkan]
13
BAB IV ANALISIS DAN DESAIN
Analisis Sistem Pada bab ini akan dijelaskan mengenai tahapan
dalam membangun Aplikasi Simulasi Bedah Otak berbasi Virtual Reality yaitu analisis dari sistem yang akan dibangun. Hal tersebut dijelaskan ke dalam dua bagian, definisi umum aplikasi dan analisis kebutuhan.
4.1.1. Definisi Umum Aplikasi
Aplikasi Simulasi Bedah otak secara Virtual Reality merupakan aplikasi perencanaan serta simulasi bedah secara virtual. Perencanaan akan dilakukan oleh pengguna dengan mengobservasi objek yang akan dibedah dengan berbagai fitur yang telah dirancang dalam virtual reality sebelum melakukan proses operasi.
14
4.1.2. Analisis Kebutuhan Dalam aplikasi ini, terdapat fungsi-fungsi yang
harus dipenuhi oleh sistem. Fungsi-fungsi tersebut adalah hasil diskusi antara tim riset dengan klien (dokter bedah). Kebutuhan ini terbagi ke dalam dua jenis, yakni kebutuhan fungsional dan kebutuhan non-fungsional.
4.1.2.1. Kebutuhan Fungsional
Kebutuhan fungsional pada aplikasi ini menjelaskan bagaimana sistem ini bekerja yang akan dijelaskan pada Tabel 4.1
Tabel 4.1 Kebutuhan Fungsional
Kode Deskripsi Kebutuhan
F-001 Mengobservasi objek bedah secara menyeluruh
F-002 Mengatur transparansi objek bedah
F-003 Meletakkan titik koordinat dalam objek bedah
F-004 Memproyeksikan penggaris sebagai alat bantu ukur
F-005 Melakukan pemotongan kepada objek bedah
15
Untuk penjelasan dari masing-masing kebutuhan fungsional dapat dilihat pada penjelasan berikut :
F-001. Mengobservasi objek bedah secara menyeluruh
Objek bedah 3 dimensi dapat diamati dengan memutar dan menggeser objek.
F-002. Mengatur transparansi objek bedah
Objek bedah 3 dimensi dapat diatur transparansinya melalui tombol antar muka sehingga objek didalamnya dapat terlihat.
F-003. Meletakkan titik koordinat dalam objek bedah
Meletakan titik koordinat yang akan menjadi titik acuan dokter untuk titik koordinat alat yang digunakan dalam proses operasi.
F-004. Memproyeksikan penggaris sebagai alat bantu ukur
Meletakan 2 titik untuk mengukur jarak antara 2 titik tersebut.
F-005. Melakukan pemotongan kepada objek bedah
Melakukan simulasi pemotongan bedah kepada objek bedah 3 dimensi.
16
4.1.2.2. Kebutuhan Non Fungsional Kebutuhan non-fungsional adalah kebutuhan
pengguna untuk mendefinisikan bagaimana Batasan dan karakteristik dari sebuah sistem yang dibangun. Kebutuhan non-fungsional dari Aplikasi Simulasi Bedah berbasis Virtual Reality ini terdapat pada tabel 4.2.
Tabel 4.2 Kebutuhan Non-fungsional
Perancangan Sistem 4.2.1. Desain Sistem
Desain sistem digunakan untuk mengetahui jalannya penggunaan aplikasi oleh user sehingga pengembangan aplikasi dapat dengan mudah dilakukan. Desain sistem yang digunakan adalah Use-Case Diagram, Context Diagram, dan Activity Diagram.
Kode Deskripsi Kebutuhan NF-001
Aplikasi mudah digunakan
17
Gambar 4.1. merupakan Use-Case Diagram yang menunjukkan proses penggunaan aplikasi apa saja dan siapa saja yang terlibat dalam proses tersebut. Kemudian Activity Diagram menunjukkan bagaimana sistem berinteraksi dengan user.
Gambar 4.1. Use-Case Diagram
18
F-001. Mengobservasi Objek Bedah Secara Menyeluruh User dapat menggerakan objek bedah pada virtual
reality dengan memberikan input pada controller VR. Gambar 4.2. di bawah ini merupakan diagram aktifitas yang menunjukkan alur untuk melakukan observasi pada objek.
Gambar 4.2. Activity Diagram Mengobservasi Objek Bedah secara Menyeluruh
19
F-002. Mengatur Transparansi Objek Bedah User dapat mengatur transparansi dari objek bedah
yang diinginkan dengan cara mengatur parameter warna dari objek tersebut. Gambar 4.3. di bawah ini merupakan diagram aktivitas yang menunjukkan alur dalam mengatur transparansi objek.
Gambar 4.3. Activity Diagram Mengatur Transparansi Objek Bedah
20
F-003. Meletakan Titik Koordinat Dalam Objek Bedah User dapat meletakan titik-titik koordinat pada
workspace. Titik ini akan digunakan dalam menyiapkan alat yang digunakan pada proses operasi. Gambar 4.4. dibawah merupakan diagram aktivitas yang menunjukkan alur user dalam meletakan titik koordinat.
Gambar 4.4. Activity Diagram Meletakan Titik Koordinat
21
F-004. Memproyeksikan Penggaris sebagai Alat Bantu Ukur User dapat membuat suatu penggaris virtual dengan
cara menempatkan dua titik di tempat yang berbeda dan akan menghasilkan jarak antara kedua jarak tersebut. Gambar 4.5. di bawah merupakan diagram aktivitas yang menunjukkan alur user dalam memproyeksikan penggaris sebagai alat bantu ukur.
Gambar 4.5. Activity Diagram Memproyeksikan Penggaris sebagai Alat Bantu Ukur
22
F-005. Melakukan Pemotongan Kepada Objek Bedah Terakhir, user dapat melakukan pemotongan objek
bedah pada worksapce dengan cara menentukan titik awal dan titik akhir dan menekan tombol pada controller. Gambar 4.6. di bawah merupakan diagram aktivitas yang menunjukkan alur user dalam melakukan pemotongan pada objek bedah.
Gambar 4.6. Activity Diagram Melakukan Pemotongan Kepada Objek
23
[Halaman ini sengaja dikosongkan]
24
BAB V IMPLEMENTASI SISTEM
Bab ini membahas tentang implementasi dari sistem yang kami buat. Implementasi ini akan dijelaskan bagian implementasi antarmuka pengguna yang kami gunakan. Namun, sesuai dengan permintaan tim peneliti pada saat buku ini ditulis, penulis tidak diperkenankan untuk menyampaikan beberapa bagian dari implementasi riset yang telah dilakukan.
Sistem ini dirancang berupa aplikasi desktop, yang dibangun dengan menggunakan Unity3d menggunakan Bahasa C# untuk membangun sistemnya.
Penulis menggunakan Unity3d sebagai framework dari aplikasi ini. Unity3d dapat digunakan untuk mengembangkan aplikasi Virtual Reality. Dalam program ini, Unity3d diintegrasikan dengan package dari Oculus, yaitu Oculus Integration, agar Unity3d dapat berinteraksi dengan Headset Oculus Rift serta Touch Controllers-nya.
5.1. Implementasi Kontrol dan Panel UI Kontrol pergerakan kamera pengguna
menggunakan kontrol orbital, yang mengitari objek bedah, dengan kemampuan gerak rotasi, panning, dan zoom in-out.
Panel UI berfungsi sebagai tempat pengguna berinteraksi dengan tool-tool yang ada.
25
5.1.1. Kontrol Orbital Bagian dari implementasi untuk kontrol orbital
diimplementasikan pada Kode Sumber 5.1 berikut:
public GameObject player; public Transform rightHand; public Transform leftHand; public GameObject target; public GameObject light; public float speed = 0.1f; public GameObject Toolbar; bool toolbarIsOn = true; private RaycastHit CreateForwardRaycast(string hand) { RaycastHit hit; Ray ray; if(hand == "right") { ray = new Ray(rightHand.position, rightHand.forward); } else { ray = new Ray(leftHand.position, leftHand.forward); } Physics.Raycast(ray, out hit, 3.0f); return hit; } private Vector3 DefaultEnd(float length, string hand) { if (hand == "right") { return rightHand.position + (transform.forward * length); } else { return leftHand.position + (transform.forward * length); } } // Update is called once per frame void Update() {
26
//Left controller //Pan control (L Control) if (OVRInput.Get(OVRInput.Button.PrimaryThumbstickUp) && player.transform.position.y < 1.5f) { player.transform.Translate(Vector3.up * Time.deltaTime); //toobar.transform.Translate(Vector3.up * Time.deltaTime); } if (OVRInput.Get(OVRInput.Button.PrimaryThumbstickDown) && player.transform.position.y > -1.5f) { player.transform.Translate(Vector3.down * Time.deltaTime); //toobar.transform.Translate(Vector3.down * Time.deltaTime); } if (OVRInput.Get(OVRInput.Button.PrimaryThumbstickRight) && player.transform.position.x < 1.5f) { player.transform.Translate(Vector3.right * Time.deltaTime); } if (OVRInput.Get(OVRInput.Button.PrimaryThumbstickLeft) && player.transform.position.x > -1.5f) { player.transform.Translate(Vector3.left * Time.deltaTime); } // Reset View (L Control: Y) if (OVRInput.Get(OVRInput.Button.Four)) { player.transform.position = new Vector3(0f, 0f, -2.5f); player.transform.LookAt(target.transform); } // Toggle Toolbar View (L Control: X) if (OVRInput.GetUp(OVRInput.Button.Three)) { if(Toolbar != null) { bool isActive = Toolbar.activeSelf; Toolbar.SetActive(!isActive); } } //Zoom & Rotate (R controller) if (OVRInput.Get(OVRInput.Button.SecondaryThumbstickUp)) { player.transform.Translate(Vector3.forward * Time.deltaTime); } if (OVRInput.Get(OVRInput.Button.SecondaryThumbstickDown))
27
{ player.transform.Translate(Vector3.back * Time.deltaTime); } if (OVRInput.Get(OVRInput.Button.SecondaryThumbstickRight)) { player.transform.RotateAround(target.transform.position, Vector3.up, 100.0f * Time.deltaTime); //player.transform.Translate(Vector3.back * Time.deltaTime); } if (OVRInput.Get(OVRInput.Button.SecondaryThumbstickLeft)) { player.transform.RotateAround(target.transform.position, Vector3.down, 100.0f * Time.deltaTime); //player.transform.Translate(Vector3.back * Time.deltaTime); } }
Kode Sumber 5.1 Kontrol Orbital
5.1.2. Panel UI Interactive Toolbar Bagian dari implementasi untuk
diimplementasikan pada Kode Sumber 5.2 berikut:
public List<GameObject> objectsToHide; public GameObject pageToShow; // Submenu Panel Interaction public void ShowSubMenu() { if(pageToShow != null) { for (int i = 0; i < objectsToHide.Count; i++) { objectsToHide[i].SetActive(false); } pageToShow.SetActive(true); } }
Kode sumber 5.2 Implementasi Panel UI
28
5.2. Implementasi Tool Pada bagian ini, kami akan menjelaskan tool atau
fitur yang ada dalam program VR ini.
5.2.1. Implementasi Titik Koordinat Bagian dari implementasi Tool Titik Koordinat
diimplementasikan pada Kode Sumber 5.3 berikut:
public GameObject CoorDots; public Dropdown CoorDropdown; private class Coordinate { public GameObject coor; public int index; public Coordinate(GameObject x, int y) { this.coor = x; this.index = y; } } List<Coordinate> CoorList = new List<Coordinate>(); int totalCoors = 0; int SelectedCoorIndex; int SelectedCoorIndexToMove; public Slider sliderX; public Slider sliderY; public Slider sliderZ; Coordinate SelectedCoor; bool xyz; bool TouchFlag; void Start() { xyz = false; } // Update Slider Value void Update() { xyz = false;
29
SelectedCoor = CoorList.ElementAt(CoorDropdown.value); sliderZ.value = SelectedCoor.coor.transform.position.z; sliderX.value = SelectedCoor.coor.transform.position.x; sliderY.value = SelectedCoor.coor.transform.position.y; xyz = true; } // Update Coordinate Location public void UpdateCoorLocs() { if(xyz == true) { SelectedCoor.coor.transform.position = new Vector3(sliderX.value, sliderY.value, sliderZ.value); xyz = false; } } // Spawn Coordinate public void SpawnCoor() { GameObject CreatedCoor; float numberX = Random.Range(-0.4f, 0.4f); float numberY = Random.Range(-0.4f, 0.4f); float numberZ = Random.Range(-0.4f, 0.4f); if (CoorDots != null) { CreatedCoor = Instantiate(CoorDots, new Vector3(numberX, numberY, numberZ), Quaternion.identity); CoorList.Add(new Coordinate(CreatedCoor, totalCoors)); totalCoors += 1; CoorDropdown.options.Clear(); foreach(Coordinate coor in CoorList) { CoorDropdown.options.Add(new Dropdown.OptionData("Coordinate " + (coor.index + 1))); } }
Kode Sumber 5.3 Implementasi Tool Titik Koordinat
30
5.2.2. Implementasi Transparansi Bagian dari implementasi Tool Transparansi
diimplementasikan pada Kode Sumber 5.4 berikut:
public Slider slider; public GameObject obj; Renderer rend; void Awake() { rend = obj.GetComponent<Renderer>(); // Set Transparancy Shader rend.material.shader = Shader.Find("Custom/TransparentDiffuse ZWrite"); } // Set new Tranparancy value public void UpdateObject() { for (int i = 0; i < rend.materials.Length; i++) { rend.materials[i].SetVector("_Color", new Vector4(1, 1, 1, slider.value)); } }
Kode sumber 5.4 Implementasi Transparansi
5.2.3. Implementasi Penggaris Bagian dari implementasi Tool Penggaris
diimplementasikan pada Kode Sumber 5.5 berikut:
public List<GameObject> linearr = new List<GameObject>(); public GameObject LineRulerCtrl; public GameObject EmptyLine; public GameObject PointDots; public Dropdown LineDropdown; private class Point {
31
public GameObject point; public int index; public Point(GameObject point, int y) { this.point = point; this.index = y; } } private class Line { public Point pointA; public Point pointB; public LineRenderer lineren; public int index; public Line(Point point1, Point point2, int y) { this.pointA = point1; this.pointB = point2; this.index = y; } } List<Line> LineList = new List<Line>(); List<Point> PointList = new List<Point>(); static int totalPoints = 0; static int totalLines = 0; int SelectedPointIndex; int SelectedPointIndexToMove; int SelectedLineIndex; int SelectedLineIndexToMove; public Slider sliderX1; public Slider sliderY1; public Slider sliderZ1; public Slider sliderX2; public Slider sliderY2; public Slider sliderZ2; Point SelectedPointA; Point SelectedPointB; Line SelectedLine; GameObject SelectedLineRender; bool xyz; bool TouchFlag; // Start is called before the first frame update void Start() { xyz = false; }
32
// Update is called once per frame void Update() { xyz = false; SelectedLine = LineList.ElementAt(LineDropdown.value); SelectedLineRender = linearr.ElementAt(LineDropdown.value); LineRenderer SelGOren = SelectedLineRender.GetComponent<LineRenderer>(); sliderX1.value = SelectedLine.pointA.point.transform.position.x; sliderY1.value = SelectedLine.pointA.point.transform.position.y; sliderZ1.value = SelectedLine.pointA.point.transform.position.z; sliderX2.value = SelectedLine.pointB.point.transform.position.x; sliderY2.value = SelectedLine.pointB.point.transform.position.y; sliderZ2.value = SelectedLine.pointB.point.transform.position.z; xyz = true; } // Update Line's Points Location public void UpdateLineLocs() { if (xyz == true) { SelectedLine.pointA.point.transform.position = new Vector3(sliderX1.value, sliderY1.value, sliderZ1.value); SelectedLine.pointB.point.transform.position = new Vector3(sliderX2.value, sliderY2.value, sliderZ2.value); SelectedLine = LineList.ElementAt(LineDropdown.value); SelectedLineRender = linearr.ElementAt(LineDropdown.value); LineRenderer SelGOren = SelectedLineRender.GetComponent<LineRenderer>(); SelGOren.SetPosition(0, LineList[LineDropdown.value].pointA.point.transform.position); SelGOren.SetPosition(1, LineList[LineDropdown.value].pointB.point.transform.position); xyz = false; } } // Spawn Point for Line public void SpawnPoint() { GameObject CreatedPoint;
33
GameObject CreatedLine; float numberX = Random.Range(-0.4f, 0.4f); float numberY = Random.Range(-0.4f, 0.4f); float numberZ = Random.Range(-0.4f, 0.4f); if (PointDots != null) { CreatedPoint = Instantiate(PointDots, new Vector3(numberX, numberY, numberZ), Quaternion.identity); PointList.Add(new Point(CreatedPoint, totalPoints)); totalPoints += 1; if (totalPoints % 2 == 0) { LineList.Add(new Line(PointList[totalPoints - 2], PointList[totalPoints - 1], totalLines)); totalLines += 1; GameObject newGO = Instantiate(EmptyLine, LineRulerCtrl.transform) as GameObject; newGO.name = "lineRuler" + totalLines; newGO.AddComponent<LineRenderer>(); LineRenderer newGOren = newGO.GetComponent<LineRenderer>(); newGOren.SetWidth(0.02f, 0.02f); newGOren.SetPosition(0, LineList[totalLines - 1].pointA.point.transform.position); newGOren.SetPosition(1, LineList[totalLines - 1].pointB.point.transform.position); linearr.Add(newGO); LineDropdown.options.Clear(); foreach (Line line in LineList) { LineDropdown.options.Add(new Dropdown.OptionData("Line " + (line.index + 1))); } } } }
Kode sumber 5.5 Implementasi Tool Penggaris
34
5.2.4. Implementasi Pemotongan Objek Bedah Bagian dari implementasi Tool Pemotongan
Objek Bedah diimplementasikan pada Kode Sumber 5.6 berikut:
GameObject p_obj; int count = 0; List<Vector3> vertices = new List<Vector3>(); List<Vector3> down = new List<Vector3>(); List<int> triangles = new List<int>(); GameObject gob; GameObject obj2; GameObject ng; CSG_Model csg_model_a; CSG_Model csg_model_b; CSG_Model csg_model_c; int obj = 0; int n_obj = 0; string objname; string gobname; public float length = 2.0f; public GameObject image; bool status = false; public const float k_Epsilon = 0.0001f; Vector3 Substractor; public GameObject line; // Update is called once per frame void Update() { //Scroll Value (knife length) length += Input.mouseScrollDelta.y * 0.5f; if (OVRInput.Get(OVRInput.Button.One) && status == false) { RaycastHit hit; Vector3 posv3_end = line.GetComponent<LineRenderer>().GetPosition(1); Vector3 posv3_start = line.GetComponent<LineRenderer>().GetPosition(0); Debug.Log("ini " + posv3_start + posv3_end);
35
//Ray ray = Camera.main.ScreenPointToRay(posv3); var heading = posv3_end - posv3_start; var distance = heading.magnitude; var direction = heading / distance; Ray ray = new Ray(posv3_start, direction); if (Physics.Raycast(ray, out hit, 100.0f)) { if (hit.transform != null) { Vector3 newSpot = hit.point + (ray.direction.normalized * length); RaycastHit hit2; Ray ray2 = new Ray(newSpot, -ray.direction); if (Physics.Raycast(ray2, out hit2, 100.0f)) { Debug.Log(hit.point + "->" + hit2.point); //Create Mesh if (count == 0) { p_obj = hit.transform.gameObject; objname = hit.transform.gameObject.name; Debug.Log(p_obj.name); gob = new GameObject(); gob.name = "New Object " + obj; gobname = gob.name; gob.transform.position = p_obj.transform.position; obj++; gob.AddComponent<MeshRenderer>().material = p_obj.GetComponent<MeshRenderer>().material; MeshFilter filter =gob.AddComponent<MeshFilter>(); Debug.Log("Create Object"); //Create Starting Sphere Gizmos GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); sphere.name = "start"; sphere.transform.localScale = new Vector3(0.03f, 0.03f, 0.03f); sphere.transform.position = hit.point; sphere.GetComponent<MeshRenderer>().material = Resources.Load("Materials/red", typeof(Material)) as Material; vertices.Add(hit.point -p_obj.transform.position); vertices.Add(hit2.point -p_obj.transform.position);
36
down.Add(hit2.point); } else if (count > 0) { Debug.Log("gimana si " + count); vertices.Add(hit.point - p_obj.transform.position); vertices.Add(hit2.point -p_obj.transform.position); //down down.Add(hit2.point); //First triangle triangles.Add(vertices.Count - 4); triangles.Add(vertices.Count - 2); triangles.Add(vertices.Count - 3); //Second triangle triangles.Add(vertices.Count - 2); triangles.Add(vertices.Count - 1); triangles.Add(vertices.Count - 3); gob.GetComponent<MeshFilter>().mesh.vertices = vertices.ToArray(); gob.GetComponent<MeshFilter>().mesh.triangles = triangles.ToArray(); } count++; } hit2 = new RaycastHit(); } } hit = new RaycastHit(); }
Kode sumber 5.6 Implementasi Pemotongan Objek Bedah
37
5.3. Tampilan Antarmuka
Gambar 5.1 Tampilan aplikasi
38
[Halaman ini sengaja dikosongkan]
39
BAB VI PENGUJIAN DAN EVALUASI
Bab ini menjelaskan tahap uji coba terhadap Aplikasi Simulasi Bedah Otak berbasi Virtual Reality. Pengujian dilakukan untuk memastikan kualitas perangkat lunak yang dibangun dan kesesuaian hasil eksekusi perangkat lunak dengan analisis dan perancangan perangkat lunak. Pengujian ini adalah tahap pengujian awal. 6.1. Tujuan Pengujian
Tujuan pengujian Aplikasi Simulasi Bedah Otak berbasis Virtual Reality adalah untuk memastikan fungsionalitas dari aplikasi ini berjalan dengan baik, dan memiliki fungsionalitas yang sesuai dengan yang diharapkan oleh user (dokter bedah saraf).
6.2. Skenario Pengujian
Skenario pengujian tahap awal ini dilakukan dengan menyiapkan data yang telah dimiliki sebagai bahan uji coba. Data yang disiapkan merupakan data 3 dimensi yang telah dihasilkan melalui aplikasi lainnya. Langkah-langkah yang dilakukan adalah melakukan fungionalitas yang tersedia pada data yang disiapkan sebelumnya. Kami akan melihat hasil dari masing-masing fitur menghasilkan luaran yang sesuai atau tidak. Setelah melakukan pengujian tahap awal ini akan dilakukan pengembangan lanjutan pada aplikasi ini.
40
[Halaman ini sengaja dikosongkan]
41
BAB VII KESIMPULAN DAN SARAN
Kesimpulan dan saran yang didapat setelah melakukan pengembangan Aplikasi Simulasi Bedah Otak berbasis Virtual Reality pada kegiatan kerja praktek adalah sebagai berikut:
a. Aplikasi yang dibangun masih dalam tahap riset yang berkepanjangan.
b. Dengan adanya aplikasi ini, dokter bedah saraf dapat lebih dipermudah dalam melakukan perencanaan operasi.
c. Kode basis yang kami kembangkan dalam proses pembangunan aplikasi ini mempermudah pengembang berikutnya dalam melakukan pengembangan lanjutan.
d. Platform Unity3d memungkinkan pengembangan teknologi Virtual Reality untuk aplikasi ini.
42
DAFTAR PUSTAKA
[1] Wikipedia (2020). Unity. [online] Available at: https://en.wikipedia.org/wiki/Unity_(game_engine) [Accessed 16 Mei 2020]. [2] Wikipedia (2020). Virtual Reality. [online] Available at: https://en.wikipedia.org/wiki/Virtual_reality [Accessed 16 Mei 2020]. [3] Oculus (2020). Oculus Rift. [online] Available at: https://www.oculus.com/rift/ [Accessed 16 Mei 2020]. [4] Wikipedia (2020). Constructive Solid Geometry. [online] Available at: https://en.wikipedia.org/wiki/Constructive_solid_geometry [Accessed 20 Juni 2020].
43
BIODATA PENULIS I
Nama : Irshad Mohammad Rasyidi Tempat, Tanggal Lahir : Surabaya, 4 Februari 1999 Jenis Kelamin : Laki-laki Agama : Islam Status : Belum Menikah Alamat Asal : Rungkut Mejoyo Utara V blok AF/2,
Surabaya Alamat Surabaya : Rungkut Mejoyo Utara V blok AF/2,
Surabaya Telepon : +6287857115380 Email : [email protected] PENDIDIKAN FORMAL 2017-sekarang : Mahasiswa S1 Informatika ITS 2014-2017 : SMAN 2 Surabaya 2011-2014 : SMP Al-Hikmah Surabaya KEMAMPUAN - Programming (C#, Python) - Software Perkantoran ( Ms. Office Word , Excel , Powerpoint) - Bahasa ( Indonesia, Inggris ) AKADEMIS Kuliah : Departemen Informatika - FTEIC, ITS Angkatan : 2017 Semester : 6 (Enam) IPK : 3.6 (Semester 6)
44
BIODATA PENULIS II
Nama : Zico Ritonda Bahen Tempat, Tanggal Lahir : Sampit, 1 Oktober 1999 Jenis Kelamin : Laki-laki Agama : Kristen Protestan Status : Belum Menikah Alamat Asal : Jln. Merbabu I No. 147, Kasongan,
Kalimantan Tengah Alamat Surabaya : Jln. Teknik Komputer I No. 4 Telepon : +6285252733886 Email : [email protected] PENDIDIKAN FORMAL 2017-sekarang : Mahasiswa S1 Informatika ITS 2014-2017 : SMAK Kolese Santo Yusup Malang 2011-2014 : SMP Bina Cita Utama KEMAMPUAN - Programming (C#, Python) - Software Perkantoran ( Ms. Office Word , Excel , Powerpoint) - Bahasa ( Indonesia, Inggris ) AKADEMIS Kuliah : Departemen Informatika - FTEIC, ITS Angkatan : 2017 Semester : 6 (Enam) IPK : 3.54 (Semester 6)