• Tidak ada hasil yang ditemukan

Aplikasi Simulasi Bedah Otak Berbasis Virtual Reality

N/A
N/A
Protected

Academic year: 2021

Membagikan "Aplikasi Simulasi Bedah Otak Berbasis Virtual Reality"

Copied!
58
0
0

Teks penuh

(1)

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

(2)

ii

(3)

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

(4)

iv

(5)

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

(6)

vi

(7)

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:

(8)

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

(9)

ix

(10)

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

(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

(12)

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

(13)

xiii

DAFTARTABEL

Tabel 4.1 Kebutuhan Fungsional………..14 Tabel 4.2 Kebutuhan Non-Fungsional……….. 16

(14)

xiv

(15)

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.

(16)

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.

(17)

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.

(18)

4

Pengujian yang dilakukan dengan cara melakukan percobaan melalui data pasien asli.

(19)

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.

(20)

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.

(21)

7

(22)

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.

(23)

9

(24)

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.

(25)

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.

(26)

12

(27)

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.

(28)

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

(29)

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.

(30)

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

(31)

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.

(32)

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

(33)

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

(34)

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

(35)

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

(36)

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

(37)

23

(38)

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.

(39)

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() {

(40)

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))

(41)

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); }

}

(42)

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() {

(43)

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)));

} }

(44)

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

(45)

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; }

(46)

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() {

(47)

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)));

} } } }

(48)

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);

(49)

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

(50)

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

(51)

37

5.3. Tampilan Antarmuka

(52)

38

(53)

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.

(54)

40

(55)

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.

(56)

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].

(57)

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)

(58)

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)

Gambar

Tabel 4.1 Kebutuhan Fungsional  Kode  Deskripsi Kebutuhan
Gambar 4.1. Use-Case Diagram
Gambar 4.2. di bawah ini merupakan diagram aktifitas yang  menunjukkan alur untuk melakukan observasi pada objek
Gambar 4.3. Activity Diagram Mengatur Transparansi  Objek Bedah
+5

Referensi

Dokumen terkait

Hasil optimasi menunjukkan bahwa perlu dilakukan penambahan elemen baru pada ruang serbaguna Salle France yang bersifat tidak permanen dan masih dapat dikembalikan ke

Hasil perhitungan rasio variasi model regresi (Jumlah Kuadrat Regresi) dan variasi efisiensi (Jumlah Kuadrat Total) menunjukkan bahwa nilai koefisien determinasi yang

Berdasarkan ayat diatas dapat disimpulkan bahwa Islam sangat memperhatikan hak-hak seorang istri. Perhatian Islam terhadap hak istri ini merupakan upaya untuk

Dalam beberapa upaya peningkatan kesejahteraan sosial bagi lansia tidak potensial sebagaimana telah disebutkan di atas, BAZNAS kabupaten Tulungagung hanya

• Ketepatan menentukan konduktivitas panas pada silinder dan silinder komposit ; • Ketepatan menghitung perpindahan Kriteria: Ketepatan dan penguasaan Bentuk non-test :

Terlibat Keterangan A. Pelatihan membuat Kerajinan Tangan a. Penyelenggaraan Kegiatan Olahraga Bulutangkis.. Subbidang, Program, dan Kegiatan Frek &amp; Durasi..

[r]

Pakarta (2015) Analisis Faktor-Faktor Yang Mempengaruhi Kualitas Informasi Pelaporan Keuangan Pemerintah Daerah Kota Medan Sumber daya manusia (SDM), Sistem