Houdiniのデータ形式・プラットフォーム別書き出し検証まとめ

# はじめに
初めまして、株式会社GENEROSITYの奥田です。

Houdiniを使用して作成したリッチなアニメーションを他のプラットフォームで使用したいとなった際に、みなさんはどのようなデータ形式を選択しますか？
今回、Hoduiniで作成した簡単なデータを用いて、どのようなデータ形式を使用するのが最適か調査を行いました。
本記事では調査結果のみ記述しておりますので、データの書き出し方や作り方の記載はありません。
不十分な点も多くあると思いますが、こちらの記事が何かお役に立てればと思います。

# 検証概要
今回は下記データ形式・プラットフォームで検証を行いました。
それぞれの書き出したファイルの形式やアトリビュート情報、データ量などまとめ、
私個人の意見として★5つのうちどの程度おすすめかを表しています。
Houdiniに関してはHoudini FXで20.5.332を使用しています。
#### 検証したデータ形式
- [Alembic](#alembic)
- [FBX](#fbx)
- [OBJ](#obj)
- [glb](#glb)
- [USD](#usd)
- [HDA(Houdini Engine for Unreal Engine)](#houdini-engine-for-unreal-engine)

#### 検証したプラットフォーム
- Blender　4.2
- UE5.4.4
- Nitantic Studio


# Houdiniで作成したデモデータ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/de93d6e3-4cb9-3fd1-69df-cc7d1539e7d8.gif" alt="description" width="1920" >


![Frame 7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/45109464-48e7-db1c-d1c7-c74146d610e7.png)


※ptnumはポイント番号のアトリビュート
※testアトリビュートは高さが0より大きいときに1となるように設定した**任意のアトリビュート**
→他のプラットフォームでも使用できれば、どんなアトリビュートでも持っていけると仮定できます。


## Alembic
>Alembic はビジュアルエフェクトやアニメーションの専門家に使用されるコンピュータグラフィックスのための互換ファイルフォーマット
ジオメトリ（ポリゴンメッシュと細分割されたサーフェス）、カメラ、マテリアル、ライトなど、いくつかのエンティティを含めることができる

＜参考＞

https://manual.reallusion.com/3DXchange_6/JPN/Pipeline/26_Alembic/What_is_Alembic.htm

**■HoudiniからBlender**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/669f4b14-4ec2-0017-4ea3-dd9fc2545c04.gif" alt="description" width="1920" >
<font color="rgb(107, 142, 35)">**★★★★☆**</font>
~~連番であるため大きいデータだと重くなる可能性があります。~~
Houdiniで書き出す際フレーム番号を入れていたため連番ファイルになってしまっていたことがわかりました。
ファイル名に$F（フレーム番号）をいれないようにすれば問題なく一つのファイルに書き出すことが可能です。

![Frame 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/eb65a71f-4d0f-7202-b15c-dc444db0a06d.png)


**■HoudiniからUE5**
Houdini上で連番alembicでしか書き出せなかったため、Houdini→Blender→UE5の手順を踏んでアニメーション付きalembicを一つのデータにまとめました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/009ca613-62c8-be65-441d-a6a8d9abc644.gif" alt="description" width="1920" >
<font color="rgb(107, 142, 35)">**★★☆☆☆**</font>
連番ファイルであるため大きいデータだと重くなってしまうため進んで使用することはなかなかなさそうです。

![Frame 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/d8ff8ed6-5967-f15e-afe6-617cf1725e5e.png)





## FBX
>Autodesk製品で使われるファイルフォーマット（古い）
FBXファイルには、カメラ、ライト、ジオメトリ、ボーンなど、アニメーションを作成するために使用するフル3Dシーンのデータが保存される
業界標準のゲームエンジンやVFXおよびゲーム業界の次世代のDCC（デジタルコンテンツ作成）ツールと互換性がある

＜参考＞

https://www.adobe.com/jp/products/substance3d/discover/3d-files-formats.html


**■HoudiniからBlender**
![スクリーンショット 2024-10-02 183802.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/7ef55d7d-4284-b591-e5e1-0a95a2620852.png)

作ったモデルをベイクすることでモデル自体はインポートできました。
また連番fbxも書き出し可能ですが、Blenderに読み込む術がないという問題が挙げられます。

アニメーションと色情報を書き出す方法を調べたところ詳しく書いている人がいない（ここで躓く人がいないのかも）ためBlenderへの読み込みは<font color="#0067C0">**失敗**</font>とします。

FBXという形式を調べる中で、FBXの使い勝手の悪さを知りました。（詳しく知りたい方は下記記事をご覧ください。）
FBX形式は使い勝手が悪いのため、これ以上の深堀は中止します。
＜参考＞

https://scrapbox.io/keroxp/FBX%E3%81%A8%E3%81%84%E3%81%86%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%AE%E9%82%AA%E6%82%AA%E3%81%95

https://qiita.com/binzume/items/678baf9a20c6a96a1d81



**■HoudiniからNiantic Studio**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/4bca651e-d86f-c861-07a8-e688b4423b24.gif" alt="description" width="1920" >

Niantic Studioの仕様上、FBXをインポートしたとき自動でglbデータに変換されて表示されます。
そのため**最初からglbを使っておいたほうが良い**と思います。
またインポート自体はできるもののHoudiniの法線情報が特殊であるためか、形状が破綻しました。



## OBJ
> OBJファイル形式は、3Dジオメトリのみを表現する単純なデータ形式
スケルトンやアニメーション情報を扱うことができない

＜参考＞

https://gamemakers.jp/glossary/obj%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB/


**■Houdiniからの書き出し**
連番objファイルでのみ書き出し可能（obj形式はアニメーション情報やカメラ、ライトの情報を持つことができないため）

**■HoudiniからBlender**
![スクリーンショット 2024-10-03 121950.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/a03858f7-4156-68a1-7b23-628d158cd356.png)
> OBJ連番ファイルをすべて読み込んだ画像


#### 1 プロンプトから連番ファイルを読み込む方法
＜参考＞

https://bearyday.com/cg/import-obj-seq-jp/#

<font color="#0067C0">**→失敗（エラー)**</font>

![スクリーンショット 2024-10-03 121657.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/223d465e-9f68-3bb5-3248-be03caebef2a.png)

_ _ _


#### 2  アドオンをし使用して読み込む方法

＜参考＞

https://nintech.jp/2023/03/09/%E3%80%90blender%E3%80%91%E9%80%A3%E7%B6%9A%E3%81%97%E3%81%9Fobj%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BD%9C/

<font color="#0067C0">**→失敗**</font>


アドオン自体が私の使用しているBlender4.2に対応していないため失敗したと考えられます。

_ _ _



**■HoudiniからNiantic Studio**
OBJ拡張子は未対応のため<font color="#0067C0">**→失敗**</font>



## glb
> FBXのような形式のオープンソース版、ロイヤリティフリー版として提供されるポリゴンファイル形式。
静的モデル、アニメーション、動きのあるシーンをサポートしている。
最新のファイル形式の1つ、シェーディングとマテリアル定義の最新のメソッドをサポートしている。更新された2.0バージョンでは物理ベースレンダリング（PBR）の材質をサポートしている。

＜参考＞

https://www.adobe.com/jp/products/substance3d/discover/3d-files-formats.html



**■HoudiniからBlender**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/5c41e9e1-46cd-d0aa-1796-be697cb51126.gif" alt="description" width="1920" >
<font color="rgb(107, 142, 35)">**★★★★☆**</font>
位置情報以外の変化するアトリビュートが保持できなかったため色やtestアトリビュートが適切に反映されませんでした。

![Frame 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/38f137fb-7122-eede-c63c-a1f05e257b7f.png)




**■HoudiniからUE5**
<font color="#0067C0">**→失敗**</font>

![スクリーンショット 2024-10-03 144919.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/0873cac7-08dd-2334-e98b-3a4bd47197ce.png)



**■HoudiniからNiantic Studio**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/4f2f738e-656a-f789-fdcd-b54c318acc53.gif" alt="description" width="1920" >
読み込めたもののモデルが破壊されて表示されました。



- - - 
### 備考
昔にtripo AIで作った3dモデル（glbデータ）を入れたところ綺麗に表示されました。そこからHoudiniのファイル形式または法線情報等が、Niantic Studioの読込形式と合っていない可能性が考えられます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/e0c57db6-5e82-1c53-a34d-6ebd41afc9ad.gif" alt="description" width="1080" >

Tripo AIはこちらから使用できます。

https://www.tripo3d.ai/

_ _ _

## USD
> 元々Pixarが開発したポリゴンファイル形式ですが、現在はオープンソースになっている。
この形式は、3Dモデル、マテリアル、および複数の独自のコンテンツ作成ツールにおける相互運用性に対する最新の概念を表している。
ジオメトリ、マテリアル、シーン、アニメーションのデータが含まれ、シーン全体のデータを効率よく保存できるため、多くの点でファイル形式に対して通常期待されるレベルを上回っている。

＜参考＞

https://www.adobe.com/jp/products/substance3d/discover/3d-files-formats.html

**■HoudiniからBlender**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/5de04891-f72d-f68e-3a5b-a106b2c5cbdd.gif" alt="description" width="1920" >
<font color="rgb(107, 142, 35)">**★★★★★**</font>
最も使いやすく感じました。


![Frame 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/290167d1-9fe3-a26c-ca5f-3320cd8a377f.png)

_ _ _

### 備考

Houdiniと同じようにtestアトリビュートも変化する値として保持していたため、ラフネスに繋げてみました。
アトリビュートをHoudiniから持ち出せるのでBlenderでもプロシージャルにモデルを変更することが可能になります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/7f32093f-a788-a523-92c5-58344f9fa12a.gif" alt="description" width="1080" >

_ _ _

**■HoudiniからUE5**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/9b0c81bb-5c66-7397-8e2c-6bb0baff71c5.gif" alt="description" width="1920" >
<font color="rgb(107, 142, 35)">**★★★★★**</font>
USDのプラグイン（最初から入っているのでチェック入れる）を使用することでUSD拡張子をクリック&ドロップで置くことができるようになります。

※設定が難しく詳しいことを全く理解していませんが、下の記事を読みながらアニメーション含めモデルを表示させることができました。

https://zenn.dev/it_ks/articles/09fc7177fefb12

![Frame 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/044fccdf-0cdd-ca11-c2db-d885564dcf33.png)


**■HoudiniからNiantic Studio**
usd拡張子は未対応のため<font color="#0067C0">**→失敗**</font>

**対応拡張子**
>'jpg'、'jpeg'、'png'、'svg'、'ico'、'gif'、'hdr'、'mp4'、'm4a'、'mp3'、'glb'、'gltf'、'spz'、'splat'、'ply'、'hcap'、'tvm'、'ttf'、'woff'、'woff2'、'otf'、'fnt'、'eot'、'spz'、'splat'、'ply'、'css'、'scss'、'sass'、'html'、'vue'、'js'、'ts'、'tsx'、'jsx'、'json'、'md'、'txt’



## Houdini Engine for Unreal Engine
Houdiniで作成したモデルをHDA化し、UE上でパラメータを変更しながら使用できる方法。
※アニメーションは使用できません

**HDA化**
> Unity、Unreal Engine、Mayaに、SOP（Surface Operators: 頂点情報を計算で変化させていく演算処理およびその結果）のパラメータを公開した上でエクスポートできる機能。

＜参考＞

https://ayumu-nagamatsu.com/archives/965/

今回は**グリッドのサイズ**、**ノイズの振幅**、**高さのブラー**の3パラメータを作成しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/b13117a7-911f-2d56-8f5f-b26425e9442b.gif" alt="description" width="1920" >
<font color="rgb(107, 142, 35)">**★★★★★**</font>
アニメーションを使用しない、且UE5にプロシージャルモデルを持っていきたい場合は一番使い勝手が良いと思います。
![Frame 6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906724/0a7c7f3f-cf6b-112d-a721-e032e476297b.png)


## まとめ
<font color="rgb(107, 142, 35)">**データ形式の比較**</font>
- **Alembic**

 Blenderでの互換性は高いものの、UE5では手間がかかります

- **FBX**

Houdini書き出し段階で問題があり、使い勝手も悪いため調査を深堀を中止しました。

- **OBJ**

 連番ファイルのみ書き出しが可能ですが、Blender・UE5ともに読み込みに問題があります。

- **GLB**

Blenderではアトリビュート変化に問題があるものの互換性は高いです。UE5では使用不可。Niantic StudioはGLB形式一択と言っても良いと思います。

- **USD**

BlenderとUE5でどちらも最高の互換性を示し、アトリビュートの保持も優れています。

_ _ _


<font color="rgb(107, 142, 35)">**プラットフォーム別の互換性**</font>

- **Blender**

USDが最も優れた互換性を示し、アトリビュートも保持できます。

- **Unreal Engine 5**

USDとHoudini Engine for UEが高い互換性を持ちます。

- **Niantic Studio**

GLBファイルとFBXファイルが対応していますが、Houdiniで作成したモデルの表示には課題が残ります。