[UE4] MetaQuest(旧OculusQuest)のUE向けのPassthroughのサンプルの紹介

# はじめに
MetaQuest(旧OculusQuest)の開発者向けのページに[Unrealのサンプル](https://developer.oculus.com/documentation/unreal/unreal-samples/?locale=ja_JP)の情報が記載されています。
最近の更新でPassthroughのサンプルが追加されているのですが、まだ情報が反映されていないので紹介します。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">OculusのサンプルのPassthroughSampleのPTLightning<br>ライトで照らした箇所だけPassthroughになりました<a href="https://twitter.com/hashtag/UnrealEngine?src=hash&amp;ref_src=twsrc%5Etfw">#UnrealEngine</a> <a href="https://twitter.com/hashtag/MetaQuest2?src=hash&amp;ref_src=twsrc%5Etfw">#MetaQuest2</a> <a href="https://t.co/TCabRYnElL">pic.twitter.com/TCabRYnElL</a></p>&mdash; 高浜 (@SatoshiTakahama) <a href="https://twitter.com/SatoshiTakahama/status/1494796392359170049?ref_src=twsrc%5Etfw">February 18, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

(2022/06/04追記)
開発者向けのページにPassthrough関連の説明が追加されています。
[Passthrough API Overview](https://developer.oculus.com/documentation/unreal/unreal-passthrough-overview/)
[Customize Passthrough](https://developer.oculus.com/documentation/unreal/unreal-customize-passthrough/)

# 環境
MetaQuest2(旧OculusQuest2)
Windows10
UnrealEngine 4.27.2(エンジンビルド必要)
サンプルのVR関連プラグインは以下参照
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/bab3d887-976a-e22d-c07d-3ab28e876c3b.png)

~~Passthroughの機能を利用するためには、Experimental Modeを有効に設定する必要があります。~~
~~自分はSideQuestを使用して設定しています。~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/f258ab00-3967-8099-20de-2f510fdb0d68.png)
(2022/06/04追記)
MetaQuest2のFWが更新されて、上記設定をしなくてもPassthroughの機能を利用できるようになっていました。

# サンプルの紹介
たくさんフォルダがありますが、Passthroughのサンプルは赤枠で示したフォルダです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/c4e5fc19-cc4c-a37e-0920-80e2a32f0c49.png)

Passthroughのプロジェクトを開くと、以下のレベルがあります。デフォルトで開かれるのはPTStylesです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/687feae1-61dd-fd0b-59f8-5deaee6125e8.png)

以下順番に各レベルを簡単に紹介します。
・PTBackground
全面Passthroughの画面で、オブジェクトが2個配置されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/0fa64b26-71f6-fdf3-643c-53893f798398.png)

・PTLightning
ライトで照らした箇所だけPassthroughになります。
ライトは手でつかんでON/OFFの操作ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/862c0298-dc62-cf1e-854a-9908aaf6ded8.png)

・PTMasking
右手のコントローラーを中心にPassthroughになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/c909e0c7-8d7e-5f16-04d2-b2391b7956ae.png)

・PTOverlay
全面Passthroughで、床と文字が透過で表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/a6ee761f-bbc4-e7e7-76fa-58d9c786a845.png)

・PTStyles
全面Passthroughで、床とメニューが表示されています。
メニューを操作すると見え方が変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/95a73191-a473-15eb-2ca9-498440bc1c9d.png)

・PTSurfaceProjected
中央にテレビのような板が表示されて、そこにPassthroughの画面が投影されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/17073eec-237e-bd01-b160-62d13870a5fd.png)

PTSurfaceProjectedのレベルBPを見ると、起動時にPassthroughLayer Componentを追加して、さらにAddSurfaceGeometryを実行することで、PlaneにPassthroughが投影されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/63b09554-b78b-7f83-d95f-30e9b1a0c524.png)


# 参考資料
・[Unreal Engine のソースコードをダウンロードする](https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/ProgrammingWithCPP/DownloadingSourceCode/)
・[ソースから Unreal Engine をビルドする](https://docs.unrealengine.com/4.27/ja/ProductionPipelines/DevelopmentSetup/BuildingUnrealEngine/)
公式のドキュメントです。エンジンビルドするときに参照しました。

・[Precompiled Header (PCH) issues and recommendations](https://devblogs.microsoft.com/cppblog/precompiled-header-pch-issues-and-recommendations/)
自分の環境では、エンジンビルドするとき"エラーC3859 PCHの仮想メモリを作成できませんでした"が発生したので、上記ページを参考に仮想メモリの設定を変更しました。

・[Unity + Oculus Quest（Meta Quest）開発メモ](https://framesynthesis.jp/tech/unity/oculusquest/#動画をキャプチャするには)
Passthroughの画面は普通にはキャプチャできないのですが、上記ページにキャプチャする方法について情報がありました。