Slide 1

Slide 1 text

Confidential - Do Not Share !1 OculusQuest ׬શʹཧղͨ͠ xR Tech Tokyo #16 @DMM.com ɹɹpresented by ɹ@nkjzm

Slide 2

Slide 2 text

!2 Who is @nkjzm ? Nakaji Kohki / ϦϦΧͪΌΜ
 Mercari, Inc. R4D XR Engineer ೔ຊόʔνϟϧϦΞϦςΟֶձೝఆ VRٕज़ऀ ΞϛϡʔζϝϯτϝσΟΞ૯߹ֶӃ ήʔϜϓϩάϥϚʔֶՊ VRઐ߈ ߨࢣ ஶॻ: ٕज़ධ࿦ࣾʰVRΤϯδχΞཆ੒ಡຊʱڞஶ ࡞඼: ʰCrevasseʱʰࢸۙڑ཭ΨʔϧVRʱ #xRStreetStyle #xRfm #ϞʔγϣϯΩϟετ Twitter: @nkjzm

Slide 3

Slide 3 text

!3 #xRStreetStyle

Slide 4

Slide 4 text

!4 ൃදͷ໨త OculusQuestͷ ։ൃऀΛ૿΍͢

Slide 5

Slide 5 text

!5 ݕূ࣌ͷόʔδϣϯ ● Unity 2018.3.14f1 ● Oculus Integration for Unity - 1.37 ● Oculus Utilities Plugin 1.32.0 ● Mac OSX 10.14.4ʢ18E226ʣ ● Windows 10 Home (1809)

Slide 6

Slide 6 text

!6 ຊ೔ͷൃද಺༰ 01 VRλϫʔσΟϑΣϯε 02 OculusQuest։ൃͷجຊ 03 OculusQuestͷ։ൃTIPS 04 OculusQuest׬શཧղʹཧղͨ͠

Slide 7

Slide 7 text

!7 VRλϫʔσΟϑΣϯε

Slide 8

Slide 8 text

!8 ຊ೔ͷൃද಺༰ 01 VRλϫʔσΟϑΣϯε 02 OculusQuest։ൃͷجຊ 03 OculusQuestͷ։ൃTIPS 04 OculusQuest׬શཧղʹཧղͨ͠

Slide 9

Slide 9 text

!9 OculusQuest։ൃͷجຊ ͜Ε͔Β։ൃΛ͸͡ΊΔਓ΁

Slide 10

Slide 10 text

!10 - OculusQuestຊମ - ໿5ສԁ~ - Android ϕʔεͷVRHMD - PC - Mac / Win - Unity - 2017.4 LTS - 2018.4 LTS - 2019.1.2f1 - Android SDK - Oculus Integration ։ൃʹඞཁͳ΋ͷ ಋೖ͸͜ͷهࣄ͕෼͔Γ΍͍͢Ͱ͢ʂ UnityʴOculus Quest ։ൃϝϞ - ϑϨʔϜγϯηγε https://framesynthesis.jp/tech/unity/oculusquest/

Slide 11

Slide 11 text

!11 1. Unity্Ͱ։ൃ 2. AndroidΞϓϦ(*.apk)ͱͯ͠Ϗϧυ 3. QuestΛ༗ઢ઀ଓ(type-c) 4. adbίϚϯυͰΠϯετʔϧ
 
 5. Quest্Ͱىಈ
 ϥΠϒϥϦ>ෆ໌ͳΞϓϦΑΓ ։ൃ͔Β࣮ػىಈ·ͰͷྲྀΕ $ adb install -r hoge.apk

Slide 12

Slide 12 text

!12 QuestͷήʔϜ͸า͖ճΕΔͷͰɺϏϧυͷ౓ʹ༗ઢ઀ଓ͢Δͷ͕໘౗ʹͳΔ
 ↓↓↓ ϦϞʔτͰͷΠϯετʔϧ͕Մೳ
 
 tcpϞʔυͰϩʔΧϧωοτϫʔΫܦ༝ͰadbίϚϯυ͕ଧͯΔ έʔεελσΟᶃ ༗ઢ઀ଓ͕໘౗͍͘͞ʂ $ adb tcpip 5555
 $ adb connect 192.168.0.0:5555

Slide 13

Slide 13 text

!13 VRͰͷݟ͑ํ΍ಈ࡞Λ֬ೝ͢ΔͨͼʹϏϧυ͢Δͷ͕໘౗͍͘͞
 ↓↓↓ Rift / Vive / ALVRͰϓϨϏϡʔ͕Մೳʂ - OculusͷSDK͸શOculus੡඼ڞ௨ͳͷͰɺQuestͷػೳ͸RiftͰ΋ಈ͘ - ΫϩεϓϥοτϑΥʔϜରԠͳͷͰVive΍WinMRͰ΋ಈ͘(ޙड़) - ALVRͰετϦʔϛϯάϓϨϏϡʔͱ͍͏ख΋ έʔεελσΟᶄ ։ൃதʹVRϓϨϏϡʔ͍ͨ͠ʂ

Slide 14

Slide 14 text

!14 - ALVRͰετϦʔϛϯάϓϨϏϡʔͱ͍͏ख΋ - PCVR(SteamVR)ΛϦϞʔτͰϓϨΠ͢Δ͜ͱͷͰ͖ΔOSS - SteamVRͷήʔϜΛOculus Go/QuestͰϓϨΠ͢Δ͜ͱ΋Մೳ - ϦϙδτϦ
 https://github.com/polygraphene/ALVR/blob/master/README-ja.md έʔεελσΟᶄ ։ൃதʹVRϓϨϏϡʔ͍ͨ͠ʂ

Slide 15

Slide 15 text

!15 ຊ೔ͷൃද಺༰ 01 VRλϫʔσΟϑΣϯε 02 OculusQuest։ൃͷجຊ 03 OculusQuestͷ։ൃTIPS 04 OculusQuest׬શཧղʹཧղͨ͠

Slide 16

Slide 16 text

!16 OculusQuestͷ։ൃTIPS ࣮ࡍʹ։ൃͯ͠Έͯ෼͔ͬͨ஌ݟ

Slide 17

Slide 17 text

!17 VRͰ΍Γ͍ͨجຊతͳػೳ͕
 ͢΂ͯἧ͍ͬͯΔঢ়ଶ - खͰϞϊΛ௫Ή - ςϨϙʔτҠಈ - UIΛૢ࡞͢Δ(uGUI) σϝϦοτ: Ҡ২͸େมʹ
 1.31͔Β͸
 ΫϩεϓϥοτϑΥʔϜʹରԠ Oculus Integration͕௒ศརʂʂ OculusͷSampleFrameworkશγʔϯΛQuest࣮ػͰಈ͔ͯ͠Έͨ https://qiita.com/nkjzm/items/58a696f66c4989e5a35c

Slide 18

Slide 18 text

!18 - OVR Grabbable - ௫·ΕΔΫϥε - OVR Grabber - ௫ΉΫϥε खͰϞϊΛ௫Ή

Slide 19

Slide 19 text

!19 - OVR Grabbable (ӈਤ͸ܧঝͨ͠Ϋϥε) - Snapػೳ: ௫Ή৔ॴΛఆٛՄೳ - Snap Offsetʹ஫ҙ - GameObjectͷWorld࠲ඪܥ Ͱͷݪ఺ͱͷڑ཭ = Offset - ͔ͭͬ͑ɾɾɾ - nullͩͱݪ఺ѻ͍ʹͳΔͷͰ ϓϨϋϒࣗମͰҐஔ߹Θͤ खͰϞϊΛ௫Ή

Slide 20

Slide 20 text

!20 - 2छྨͷΩʔόΠϯυ͕ଘࡏ - Combined - OVRInput.Get(OVRInput.But ton.PrimaryIndexTrigger); - OVRInput.Get(OVRInput.But ton.SecondaryIndexTrigger); - Individual - OVRInput.Get(Button.PrimaryIndexTr igger, Controller.LTouch); - OVRInput.Get(Button.PrimaryIndexTr igger, Controller.RTouch); Combined Individual Touchίϯτϩʔϥʔͷࢥ૝

Slide 21

Slide 21 text

Touchίϯτϩʔϥʔͷࢥ૝ !21 - Individual - OVRInput.Get(Button.PrimaryIndexTrigger, Controller.LTouch); - OVRInput.Get(Button.PrimaryIndexTrigger, Controller.RTouch); - ୈೋҾ਺Λ variableʹ͢Δ͜ͱ Ͱɺࠨӈͷ۠ผ͕ͳ͘ͳΔ
 → ϞϊࣗମʹτϦΨʔΛ࣋ͨͤΔ - OVRInputશൠ͕ଟ෼ͦ͏͍͏ࢥ૝ - Hapticsػೳ ͳͲ Individual

Slide 22

Slide 22 text

Oculusͷ Hapticsػೳ !22 - OVRHaptics (deprecated) - OVRInput Haptics - Haptics- Oculus Developers
 https://developer.oculus.com/documentation/unity/latest/concepts/ unity-haptics/ // Start
 OVRInput.SetControllerVibration ( 1, 1, OVRInput.Controller.RTouch); // End
 OVRInput.SetControllerVibration ( 0, 0, OVRInput.Controller.RTouch); hapticsClip = new OVRHapticsClip(audioClip); OVRHaptics.LeftChannel.Mix(hapticsClip)

Slide 23

Slide 23 text

Touchίϯτϩʔϥʔͷࢥ૝ !23 - Individual - OVRInput.Get(Button.PrimaryIndexTrigger, Controller.LTouch); - OVRInput.Get(Button.PrimaryIndexTrigger, Controller.RTouch); - ୈೋҾ਺Λ variableʹ͢Δ͜ͱ Ͱɺࠨӈͷ۠ผ͕ͳ͘ͳΔ
 → ϞϊࣗମʹτϦΨʔΛ࣋ͨͤΔ - OVRInputશൠ͕ଟ෼ͦ͏͍͏ࢥ૝ - Hapticsػೳ ͳͲ Individual

Slide 24

Slide 24 text

ϞϊࣗମʹτϦΨʔΛ࣋ͨͤΔ ॐͷ࣮૷ !24 public class Gun : OVRGrabbable, IGrabbable { OVRInput.Controller currentController; public void GrabBegin(OVRInput.Controller controller) { currentController = controller; } void Update() { if (isGrabbed && OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger, currentController)) { // implement } } }

Slide 25

Slide 25 text

ϞϊࣗମʹτϦΨʔΛ࣋ͨͤΔ ॐͷ࣮૷ !25 public interface IGrabbable { void GrabBegin(OVRInput.Controller controller); } public class CustomOVRGrabbable : OVRGrabber { protected override void GrabBegin() { base.GrabBegin(); if (m_grabbedObj is IGrabbable) { ((IGrabbable)m_grabbedObj).GrabBegin(m_controller); } } }

Slide 26

Slide 26 text

!26 VRͰ΍Γ͍ͨجຊతͳػೳ͕
 ͢΂ͯἧ͍ͬͯΔঢ়ଶ - खͰϞϊΛ௫Ή - ςϨϙʔτҠಈ - UIΛૢ࡞͢Δ(uGUI) σϝϦοτ: Ҡ২͸େมʹ
 1.31͔Β͸
 ΫϩεϓϥοτϑΥʔϜʹରԠ Oculus Integration͕௒ศརʂʂ OculusͷSampleFrameworkશγʔϯΛQuest࣮ػͰಈ͔ͯ͠Έͨ https://qiita.com/nkjzm/items/58a696f66c4989e5a35c

Slide 27

Slide 27 text

!27 Oculus Integration੡ΞϓϦ͕
 (΄΅)ͦͷ··Vive ProͰಈ͍ͨʂ
 །ҰඞཁͳରԠ • Open VRͷΠϯϙʔτ • ίϯτϩʔϥʔରԠ ΫϩεϓϥοτϑΥʔϜʹରԠ

Slide 28

Slide 28 text

!28 • Open VRͷΠϯϙʔτ • [Player Settings]-[XR Settings]-[Virtual Reality SDKs]Ͱʮ+ʯΛԡͯ͠OpenVRΛ௥Ճ • [Window]-[Package Manager]ΑΓ[OpenVR (Desktop)]ΛInstall (όʔδϣϯ͸1.0.5) • ίϯτϩʔϥʔରԠ ΫϩεϓϥοτϑΥʔϜʹରԠ

Slide 29

Slide 29 text

!29 • Open VRͷΠϯϙʔτ • ίϯτϩʔϥʔରԠ • ֓Ͷ௚ײతͳରԠ෇͚ • Touch, AxisXDʹ΋ରԠ • ෺ཧతʹରԠ͍ͯ͠ͳ͍Ωʔ • A,X,Start,Back • ΫϩεϓϥοτϑΥʔϜରԠ͢Δ ͳΒࣄલͷ૝ఆΛ͓͢͢Ί ΫϩεϓϥοτϑΥʔϜʹରԠ Oculus IntegrationΛ༻͍ͨVive։ൃ࣌ͷίϯτϩʔϥʔରԠʹ͍ͭͯ - Qiita https://qiita.com/nkjzm/items/45112ef07f7d946e3521

Slide 30

Slide 30 text

!30 Ҡ২ʹ͍ͭͯ Standalone VR Meetup #02 - connpass https://standalone-vr.connpass.com/event/132070/ Standalone VR MeetupͰฉ͍ͨײ͡ ૯ͯ͡؆୯ͦ͏…ʂ • OculusϓϥοτϑΥʔϜܥ • ౦ژΫϩϊε • EXOS_DEMO • SteamVR • ϦϦʔεࡁΈSteamVRήʔϜΛQuestʹҠ২ͨ͠࿩
 https://qiita.com/GONBEEE_project/items/ 590405a1f514559712c5

Slide 31

Slide 31 text

!31 τΡʔϯௐͷ3DϞσϧ͕
 CC-BY3.0ͰखʹೖΔʂ - Poly Toolkit͕ศར
 https://developers.google.com/poly/ develop/toolkit-unity - Object2TerrainͰ
 ܰྔίϦδϣϯΛੜ੒ Google PolyͰ؆୯Ϩϕϧ੍࡞ʂ

Slide 32

Slide 32 text

!32 Google PolyͰ؆୯Ϩϕϧ੍࡞ʂ ΦϒδΣΫτʹ߹ΘͤͯTerrainΛ࡞ΔʲUnityʳʲΤσΟλ֦ுʳ http://kan-kikuchi.hatenablog.com/entry/ObjectToTerrain - Poly Toolkit͕ศར - Object2TerrainͰ
 ܰྔίϦδϣϯΛੜ੒

Slide 33

Slide 33 text

!33 ϩέʔγϣϯϕʔεVRϨϕϧͷମݧ͕ࣗ୐Ͱؾܰʹग़དྷΔ - 5ສԁͷσόΠεͰา͖ճΕΔͷ࠷ߴ͗͢Δ - ൣғ֎ʹߦ͚ͳ͍͜ͱ͕෼͔Δݟͨ໨ ͩͱҰؾʹ޿͕Γ͕૿͢ ϧʔϜεέʔϧ͕௒ָ͍͠ʂʂʂ

Slide 34

Slide 34 text

!34 ൣғ֎ʹߦ͚ͳ͍͜ͱ͕෼͔Δݟͨ໨

Slide 35

Slide 35 text

!35 ຊ೔ͷൃද಺༰ 01 VRλϫʔσΟϑΣϯε 02 OculusQuest։ൃͷجຊ 03 OculusQuestͷ։ൃTIPS 04 OculusQuest׬શཧղʹཧղͨ͠

Slide 36

Slide 36 text

!36 OculusQuest׬શཧղʹཧղͨ͠ Ҿ༻ݩ: https://twitter.com/kaitendaentai/status/1052689241744896001

Slide 37

Slide 37 text

!37 OculusQuest׬શཧղʹཧղͨ͠ Ҿ༻ݩ: https://twitter.com/kaitendaentai/status/1052689241744896001 ೳྗͷ௿͍ਓ෺͕
 ࣗΒͷ༰࢟΍ൃݴɾߦಈͳͲʹ͍ͭͯɺ
 ࣮ࡍΑΓ΋ߴ͍ධՁΛߦͬͯ͠·͏
 ༏ӽͷࡨ֮ΛੜΈग़͢ೝ஌όΠΞε Ҿ༻ݩ: μχϯάʹΫϧʔΨʔޮՌ - Wikipedia

Slide 38

Slide 38 text

!38 OculusQuest׬શཧղʹཧղͨ͠ Ҿ༻ݩ: https://twitter.com/kaitendaentai/status/1052689241744896001

Slide 39

Slide 39 text

!39 OculusQuest׬શཧղʹཧղͨ͠ Ҿ༻ݩ: https://twitter.com/kaitendaentai/status/1052689241744896001 ͜Ε͔Βٸܹʹࣗ৴Λࣦ͍ͬͯ͘༧ఆͳͷͰɺ Twitterͱ͔Qiitaͱ͔ϒϩάͱ͔Ͱ஌ݟڞ༗ͭͭ͠ɺ
 ΈΜͳͰ੝Γ্͍͖͛ͯ·͠ΐ͏

Slide 40

Slide 40 text

!40 ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠—

Slide 41

Slide 41 text

!41

Slide 42

Slide 42 text

!42