TouchDesignerでVR

[TouchDesigner Advent Calendar 2024](https://qiita.com/advent-calendar/2024/touchdesigner)の22日目です。
この記事ではTouchDesignerで作った空間をMetaQuestで体験する方法を書きたいと思います。

# はじめに
TouchDesignerのPaletteには**TDVR**という、VRのためのOperatorがまとまっています。
今回はそのOperatorをフルに使った方法と、簡易的な方法を試してみます。
※プロジェクトファイルは準備できたらアップします。

![スクリーンショット 2024-12-15 160314.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/9628cc88-57a4-3f2c-f030-e353599aa998.png)

# A. フルに使う場合
### 1.Operatorをセットする
TDVRのOperatorを下記の図のようにEditorに配置します。
![スクリーンショット 2024-12-15 105402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/ae05be4c-0fb8-2abd-21a1-3222c658b98b.png)

### 2.Operatorの参照
各Operatorの参照はほとんど自動で行われますが、2つのOperatorは手動で参照を渡す必要があります。

1つめは下記の**renderManager**に関して下記のようにOperator名の参照を渡します。

![スクリーンショット 2024-12-15 105402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/ae05be4c-0fb8-2abd-21a1-3222c658b98b.png)

2つめは**vrControllers**の**Render Lights**と**Render Geos**に、vrHMDの同名プロパティーのparameterをコピーして参照渡しします。

![スクリーンショット 2024-12-15 105806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/59d374b7-988a-8420-1d61-3d46bd4e482c.png)

ここまで設定できると**viewer3D**にプリセットの絵が出ます。


:::note info
1点注意で、絵が出ると**world** OperatorにAlertが表示されます。

![スクリーンショット 2024-12-15 105925.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/e75bf380-3362-7e44-b1dc-c7527d7f21eb.png)

このAlertは何かというと、Operatorの中を掘っていくと下記の部分に行きつきます。
これはVR空間中のVRコントローラーの3Dモデルで、参照切れのエラーになってます。

![スクリーンショット 2024-12-15 110010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/cb4455f1-0671-e397-bc62-1921a08e5eab.png)

**vrControllers** Operatorの中にそのモデルが入ってるのですが、操作しているとなぜかどちらも参照切れになってしまったので今回はそのまま放置しました。
:::

### 3.MetaQuestとつなぐ

この作業をする前にMetaQuestとWindows PCをUSBで繋いでおきます。

接続ができたら下記にある4つのOperatorの**Device**を**Oculus**に変更します。

![スクリーンショット 2024-12-15 163159.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/cb5bd74d-8b9e-d463-2eef-768e80e3a31c.png)

おそらくここでPCの方ではQuest Linkが立ち上がり、MetaQuestの方ではQuest Link接続の許可アラートが出ると思います。許可しましょう。

![スクリーンショット 2024-12-15 102605.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/ee99fe83-43d2-5079-04b4-f120674df321.png)

接続が成功するとプリセットのワールド内を体験することができると思います。

![スクリーンショット 2024-12-15 111831.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/a8b1d865-0dc8-2717-d63a-208e1c6f9e59.png)

### 4. 視点の調整
MetaQuestでワールドに入ると、床が自分の視点くらいの高さにくると思います。
これは、カメラの位置が**drone** Operatorとリンクしているためで、自分の視点と合わせる場合はdroneの高さを調整しましょう。

![スクリーンショット 2024-12-15 164212.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/24b3b087-7219-7931-f572-eb15b0764758.png)

# B. 簡易的に使う場合
### 1.Operatorをセットする
Paletteの中にあるOperatorで必要なのは**vrHMD**のみです。
そして下記を用意して**vrHMD**のプロパティーに設定すれば完了です。

・自前のCamera
・自前のLight　＞　**Render Lights**から参照
・自前のGeometry　＞　**Render Geos**から参照

![スクリーンショット 2024-12-15 164908.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/2b91d70a-9dbf-2bfc-8968-fbf97c803d6b.png)

そうするとMetaQuestで下記のような空間を体験することができます。

![out.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/94ae6971-f439-f954-3579-d59d44ca50cc.gif)

:::note info
今回自前で用意したワールドではEnvironment Textureを使っています。
これを設定する場合は、全天球用にMeshの裏表を反転させ、内側に絵を投影できるSphereをBlenderなどで作ってImportすると良いと思います。

![スクリーンショット 2024-12-15 114410.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/b03c6720-8237-51ed-3375-c9699f7515ca.png)
:::

### 2.MetaQuestで見ている映像を外部に出力する
ただMetaQuestで見るだけであれば1の手順だけで終わってしまうのでもう少し機能を加えてみます。
**vrHMD** Operator内の**vrOut**に、MetaQuest体験者が見ている映像が出力されるので、それに**out**をつないで外だししておきましょう。

![スクリーンショット 2024-12-15 164838.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/a1bd08b0-dc97-6be2-b9cd-cf41f64aaf6d.png)

### 3.配信用に出力する下準備
さらにその映像を複数の人がリモートで体験できるような下準備をしたいと思います。

Geometry、Light、Cameraがあるので、通常のTouchDesignerの出力のフローと同じく**render TOP**を配置し、**Render Mode**を**Cube Map**にします。
さらにそこから**Projection TOP**をつなぎ、**Input**を**Cube Map**に、**Output**を**Equirequtangular**に変更し、他のデバイスで体験できる形に整えます。

最後は**NDI Out TOP**をつないで、外部でNDIと連携すればリモートで他の体験者も体験できるようにできます。
※この先の細かいやり方は割愛します。

![スクリーンショット 2024-12-15 180811.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31194/9a3fb6eb-6a9b-ed48-5538-5d13fe659e96.png)

# まとめ
TouchDesignerでVR用に映像を作ることはあまりないかもしれませんが、VRのプロトタイピングや何かしら配信で使うことができると思います。
素敵なVRライフを😀