RBD Vertex Animation Texture(2.1)をUnityで試す

![building2_e.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/7c9530c6-8084-1148-5682-3ed27c0fbc04.gif)
# はじめに
破壊シミュレーションをVertex Animation Textureで書き出してUnityで実行してみました。
現在最新のVAT3.0が提供されていますが、Unity2021.2bが(2021/10 現在)betaのこともあり
Unity2021.1.20f1のVAT2.1で試しました。

- Windows PC
- Unity 2021.1.20f1
- HDRP 11.0
- Houdini 18.5

# Houdiniでの作業
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/2a22f153-f966-c55a-5074-b1f29e08aa0b.png" width=200>

## シミュレーション作成
RBDの破壊シミュレーションをVATで出力します。
ベースは[こちらのチュートリアル](https://www.youtube.com/watch?v=V1K_XjMvgag)を参考に構築しました。

![img_1_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/b2e89518-48cf-40b5-b959-c310f42c2ffa.png)

## VAT2.1出力準備

### SideFX Labsのインストール
[マニュアル通り](https://www.sidefx.com/ja/tutorials/sidefx-labs-installation/)、SideFX Labs シェルフから行えました。

![img_1_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/7e88e101-f723-cea0-1ead-b2a8e6aff4f9.png)
![img_1_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/cd039dd2-f74e-1a18-3381-891ee81b0523.png)


また最新版では標準だとVAT3.0出力になっており、
VAT2.1での出力方法がわからずSideFX LabsのGitHubから過去バージョンを漁ってたりしていたのですが
どうやらオプションで旧バージョンに切替できることに気づきました。

「Assets」→「AssetManager」で「Asset Bar」で以下選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/cfe20cbe-caaf-9d5c-7288-99c30ceac2c7.png)

バージョンを選択できるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/8fb3e5c6-ad4d-0f2b-6284-a92e667f0c73.png)
参考 - [サルにもわかる Houdini - asset bar](https://ikatnek.blogspot.com/2020/07/asset-bar.html)

## VAT2.1出力
レンダーノードネットワークで「Labs Vertex Animation Textures」ノードを作成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/627ef544-622b-2389-e41e-d4d86d27c687.png" width=300>
主な設定項目はこのあたりかと思います

- 「User Interface」のセレクトボックスでNormalのほうを選択
- 「Engine」Unityを選択し、「Initialize for Engine」ボタンを押下
- 「Method」今回はRBDなのでRigidを選択
- 「SOP Path」 出力対象のオブジェクトを選択
- 「Start/End」出力Frameの調整
- 「Target Texture Size」テスクチャの横のサイズ。詳細は[こちら](https://houdinifx.jp/blog/vertex-animation-texture/)参照
- 「Paths」出力先のフォルダを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/c5a599d2-fcd8-12d6-fb83-8d53510ea04d.png)

以上で「Render」を実行することで

- materials
- meshes
- textures

が生成されるのでUnityに持って行って作業しますが
Houdiniの用意したローカルのパッケージを利用して作業していくことになります。

Unityに移動する前に「Labs Vertex Animation Textures」ノードの
パラメータ下部の「Sample Shader Code」からunityのpackageのパスをコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/89d7d32d-0f48-18e6-6c34-53151e9f8b90.png)
# Unityでの作業

## パッケージのインストール
「PackageManager」から先ほどコピーしたパスを指定するとインストールされます。
![img_2_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/fac6f125-8902-c998-efa6-b7bd53843d3e.png)


なお、パッケージのフォルダ名はURPとなってますがHDRPでも動作しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/581de83f-dbac-71b2-5008-446c6697c03e.png)

## オブジェクトの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/feac3aa4-185f-2f65-54b4-8d2188d3cfd3.png)
生成されたフォルダをProject内にコピーします

### テスクチャの設定変更
positionとrotationの2枚のテクスチャの設定を同じように変更します。

- sRGBのチェックをはずす
- Non-Power of 2をNone
- Generate Mip Mapsのチェックをはずす
- 今回はPC向けに出力するので項目内のFormatを「RGBA Half」を指定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/9091a5c0-e744-208f-78c8-39087b7c25ef.png)

### マテリアルのアタッチ
meshをシーンのHierarchyに配置し、Houdiniから生成されたマテリアルに置き換えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/91a278f0-5f67-4061-baad-6e90ef902853.png)
またPositionMap、RotationMapにそれぞれ適用します。

以上で再生するとアニメーションが実行されるかと思います。

### シェーダのカスタマイズ
再生をコントロールできるよう少しだけシェーダをカスタマイズします。
元のシェーダー「Packages/SideFX Vertex Animation Textures/Editor/Shaders/VAT_Rigid_SG」をコピーしてつくります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/80be7cf7-cf02-bf1e-f7ba-4cd26cb77572.png)

- Timeline(float)は0-1のSlider
- EndTime(float)は再生総時間を指定します。(少し誤差があったので実際の時間からずらしています)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179625/c4ebb390-c1db-e162-f1db-a1b06e7a973b.png)
とりあえずこれでTimelineをスライドすることでアニメーションが1ループするようになりました。

# 参考
- [Houdini 18 - Building Destruction - RBD Bullet Solver](https://www.youtube.com/watch?v=V1K_XjMvgag)
- [サルにもわかる Houdini - asset bar](https://ikatnek.blogspot.com/2020/07/asset-bar.html)
- [Vertex Animation Texture について](https://houdinifx.jp/blog/vertex-animation-texture/)
- [SIDEFX LABS インストール](https://www.sidefx.com/ja/tutorials/sidefx-labs-installation/)