1 of 40

ARとMRとVRの境界を

なくしたい話

2 of 40

ARとMRとVRの境界を

なくしたい話

をしようと思ったけれど、Nrealは話していいことが少ないし、HoloLens 2来ないし、

普通に開発中で得たことを話します…

3 of 40

時間の許す範囲で…

本日のコース

1.Oculus QuestでVulkanビルドしてみた

2.UnityでVRオープンワールドを試みた

3.Unity 2019.3のすゝめ

4 of 40

自己紹介

Twitter:DBK(@00sya)

toB向けのXRソフトウェアを提供している会社に勤めています

5 of 40

We are hiring!!!

6 of 40

1.Oculus QuestでVulkanビルドしてみた

2月はじめ

7 of 40

Vulkanて?

・クロノスグループによって策定されたローレベルグラフィックスAPI

 → その他に、AMDの「Mantle」、Appleの「Metal」など

・直接GPUへアクセスでき、OpenGLに比べて無駄が少なく速い描画が可能

・並列処理の効率化、同期処理が不必要

 →CPUの負荷が格段に軽減され、描画のパフォーマンスが向上

・2016年にAndroid 7.0が対応

8 of 40

Vulkanて?

軽い

・クロノスグループによって策定されたローレベルグラフィックスAPI

 → その他に、AMDの「Mantle」、Appleの「Metal」など

・直接GPUへアクセスでき、OpenGLに比べて無駄が少なく速い描画が可能

・並列処理の効率化、同期処理が不必要

 →CPUの負荷が格段に軽減され、描画のパフォーマンスが向上

・2016年にAndroid 7.0が対応

9 of 40

10 of 40

やってみた

11 of 40

環境

・Unity 2019.3.2f1

・Oculus Integuration 13.0 (← Oculus Linkでハンドトラッキングも                                使えるようになったよ)

12 of 40

環境

※公式ではサポートしていない

・Unity 2019.3.2f1

・Oculus Integuration 13.0 (← Oculus Linkでハンドトラッキングも                                使えるようになったよ)

13 of 40

14 of 40

なぜやったのか

・公式では XR Management package でのVulkan対応開発を公表

・どのくらい軽いのか調べてみたい

・XR Management package はまだ未知数

・Oculus Integurationは現在のプロジェクトに組み込まれている

 → Oculus IntegurationでVulkan向けのビルドできたら色々良さそう

15 of 40

開発

・Project settings

  →XR Settings

   →Virtual Reality SupportedをON

    →SDKsOculusを追加

・Project settings

  →Other Settings

   →Graphics APIsでVulkanを追加

    →Vulkanを上位に

16 of 40

開発

・2つのclassのVulkanビルド時にthrowされるExceptionをコメントアウト

 1.OVRGradleGeneration ← Oculus Integuration

 2.OculusVulkanWarning ← UnityAPI

というか、VulkanでビルドしようとするとErrorがConsoleに出るので

そこをコメントアウトすれば ok

17 of 40

開発

1.OVRGradleGeneration.cs

18 of 40

開発

2.OculusVulkanWarning (OculusBuildProcessor.cs)

>Library/PackageCache/com.unity.xr.oculus.android@2.38.6/Editor/OculusBuildProcessor.cs

→ UnityのAPIなのでプロジェクトを開くたびにリロードされるので注意

19 of 40

ビルド

Oculus Integurationのサンプルシーンを以下2つのGraphic APIでビルド

1.OpenGLE3

2.Vulkan

20 of 40

結果

1.OpenGLE3

21 of 40

結果

1.OpenGLE3

約72FPS

22 of 40

結果

1.Vulkan

23 of 40

結果

1.Vulkan

約72FPS出ているが…

24 of 40

25 of 40

結論

現状、わざわざVulkanを利用する必要性は少ない

もう少し解析したらQiitaに載せます

Experimentalでは無くなるのを素直に待ちましょう

26 of 40

2.UnityでVRオープンワールドを試みた

27 of 40

2.UnityでVRオープンワールドを試みた

こんなシーンがあります

28 of 40

2.UnityでVRオープンワールドを試みた

大きさ:約3km × 約3km

29 of 40

2.UnityでVRオープンワールドを試みた

シーンをでかくしていくと何が起こるか

30 of 40

2.UnityでVRオープンワールドを試みた

シーンをでかくしていくと何が起こるか

原点からの距離

31 of 40

2.UnityでVRオープンワールドを試みた

原点から離れるほどに、Z-fightingが多く発生する

32 of 40

2.UnityでVRオープンワールドを試みた

  • 原点からの距離が離れるほど、計算精度が下がっているっぽい
  • Editorで実行した方が発生しやすい
  • シーン内に配置されているGameObjectが多いほど短い距離で発生しやすくなる(何もないシーンで同様のことを行っても発生しない)

対策:重なりのあるGameObjectは法線方向の距離を離して置く

※原点からの距離が離れるほど話す距離を大きくする必要がある� →uGUIなど、距離があるとおかしいものは注意

33 of 40

Unity 2019のすゝめ

34 of 40

3.Unity 2019.3のすゝめ

・TryGetComponent

 → GetComponentで取得して中身がNullかどうかを確認しなくて済む

・参照のシリアライズ

 → 抽象クラスやインターフェースをシリアライズできる

・Dots

・Profiler

 → フレーム数が設定可能になり、ガベージコレクターのトリガーを識別可能

と、色々ありますが…

35 of 40

3.Unity 2019.3のすゝめ

Andoroid開発をしているとき…

36 of 40

3.Unity 2019.3のすゝめ

Andoroid開発をしているとき…

adbでアンインストールするのめんどくさい…

Package Name変更するのめんどくさい…

37 of 40

3.Unity 2019.3のすゝめ

Unity 2019ならなんと…!

Package NameをProjectの名前に自動で変更してくれる…!!!

同じPackage Nameでも前にインストールしたアプリをアンインストールしなくて済む!!!

38 of 40

3.Unity 2019.3のすゝめ

Unity 2019ならなんと…!

Package NameをProjectの名前に自動で変更してくれる…!!!

同じPackage Nameでも前にインストールしたアプリをアンインストールしなくて済む!!!

 すごい!!!

新規プロジェクトを作るときは、Unity 2019待った無し

39 of 40

We are hiring!!!

40 of 40

ありがとうございました!