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
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
v
LEMBARPENGESAHAN
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
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:
viii
KATAPENGANTAR
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
x
DAFTARISI
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
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 UIINTERACTIVE 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
xii
DAFTARGAMBAR
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
DAFTARTABEL
Tabel 4.1 Kebutuhan Fungsional………..14 Tabel 4.2 Kebutuhan Non-Fungsional……….. 16
xiv
1
BABI 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.
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
8
BABII PROFILTIMRISET 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
10
BABIII
TINJAUANPUSTAKA
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
13
BABIV
ANALISISDANDESAIN 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 sebagai alat bantu ukur penggaris 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
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.
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
24
BABV
IMPLEMENTASISISTEM
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) && playe r.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) && play er.transform.position.x < 1.5f)
{
player.transform.Translate(Vector3.right * Time.deltaTime); }
if (OVRInput.Get(OVRInput.Button.PrimaryThumbstickLeft) && playe r.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, Vec tor3.up, 100.0f * Time.deltaTime); //player.transform.Translate(Vector3.back * Time.deltaTime); } if (OVRInput.Get(OVRInput.Button.SecondaryThumbstickLeft)) { player.transform.RotateAround(target.transform.position, Vec tor3.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); }
}
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() {
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.v alue, 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, num berY, 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("Coordi
nate " + (coor.index + 1)));
} }
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/TransparentD
iffuse 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<LineRend erer>(); 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(s liderX1.value, sliderY1.value, sliderZ1.value);
SelectedLine.pointB.point.transform.position = new Vector3(s liderX2.value, sliderY2.value, sliderZ2.value);
SelectedLine = LineList.ElementAt(LineDropdown.value); SelectedLineRender = linearr.ElementAt(LineDropdown.value); LineRenderer SelGOren = SelectedLineRender.GetComponent<Line Renderer>(); 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() {
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, n umberY, numberZ), Quaternion.identity);
PointList.Add(new Point(CreatedPoint, totalPoints)); totalPoints += 1;
if (totalPoints % 2 == 0) {
LineList.Add(new Line(PointList[totalPoints - 2], PointL ist[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("Li
ne " + (line.index + 1)));
} } } }
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 constfloat 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>().GetPositio n(1);
Vector3 posv3_start = line.GetComponent<LineRenderer>().GetPosit ion(0);
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(Pri mitiveType.Sphere);
sphere.name = "start";
sphere.transform.localScale = new Vector3(0.03f, 0 .03f, 0.03f);
sphere.transform.position = hit.point;
sphere.GetComponent<MeshRenderer>().material = Res ources.Load("Materials/red", typeof(Material)) as Material;
vertices.Add(hit.point -p_obj.transform.position); vertices.Add(hit2.point
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 = vert ices.ToArray(); gob.GetComponent<MeshFilter>().mesh.triangles = tri angles.ToArray(); } count++; }
hit2 = new RaycastHit(); }
}
hit = new RaycastHit(); }
Kode sumber 5.6 Implementasi Pemotongan Objek Bedah
37
5.3. Tampilan Antarmuka
38
39
BABVI
PENGUJIANDANEVALUASI
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
41
BABVII
KESIMPULANDANSARAN
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
DAFTARPUSTAKA
[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
BIODATAPENULISI
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 : irshadrasyidi@gmail.com 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)
44
BIODATAPENULISII
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 : zicoritonda@gmail.com 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)