Multi-directional Contribution Maps の書き出し設定について

この記事はHoudiniアドベントカレンダー2022　3日目の記事です。
よろしくお願いします。
本記事は、表題の通り Multi-directional Contribution (MDC) Maps の書き出し設定についてのTipsや備忘録的な記事となります。

# Multi-directional Contribution (MDC) Maps とは
Multi-directional Contribution (MDC) Maps とは、2021年のHoudiniHIVEで紹介された手法で、名前の通り各方向からのライトの構成によりテクスチャのブレンドを行います。
以前の方法と違って軸に固定ではなく、必要とされるシーンのライトの方向に合わせることが容易になり、よりシーンにあったライト情報をシェーダに渡すことが可能で、今までよりダイナミックにライティング情報が計算されます。

![221104_mceclip2_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/d283ed99-06aa-8c54-5d90-ba78bcdfdfc9.png)

# 記事執筆の理由
私自身このMDCmapを使用しようと思い、まずは資料を集めようと検索したのですが……

![221104_02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/bac90f4d-9392-cbd2-f975-e200d281c049.png)

上記画像の様に、最近の検索でも2021年のHoudiniHIVEの紹介記事や動画がTOPに表示され、それ以降のページを探ってみてもユーザーベースの使用例や資料が見つからなかったので、後のコミュニティや界隈・ユーザーの事を考えるとオープンな場で確認・共有できる資料が必要だと感じ、本記事の執筆を行いました。


# Multi-directional Contribution Maps の実際の書き出し方・各種設定
* 検証に使用したツールのバージョン
  * Houdini19.5.303
  * Sidefx Labs 19.5.303
------
* **基本的なエクスポート手法**
  * 基本的にはROPノードの【SideFX Labs Flipbook texture】ノードを使用します。
 ![221104_03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/9eb2a844-d6a6-6c47-dc37-2d357b411c51.png)

------
* **Simulation設定**
  * simulation は普通に回して問題ありませんが、【SideFX Labs Flipbook texture】ノードで【Pyro Bake Volume】ノードを出力用パスとして指定するので、color や density のポスト処理はこのノードで設定、或いは最終的にはこのノードに収束するように設定することを推奨します。
![221116_01 (00001).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/3eb19f6d-d5bd-ab33-8ceb-fb3452169786.png)
![221104_09.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/b697342e-586b-7ad6-9c46-e42a428e5ba6.png)
![thumbnail_still_189 (0-00-00-00).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/8397cc22-fd1f-010d-e789-27e4ed5ddba5.png)
![thumbnail_still_188 (0-00-00-00).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/2e8338e1-1e8f-7603-8adb-29a03ceedf60.png)


-----

* **Export用のノード**
  * 上述したように【Pyro Bake Volume】ノードを出力用パスとして指定するので、simulation 後に【timeshift】ノード等でスタートフレームをずらしたりタイミングのタメツメを行う場合は、下記画像のように【Pyro Bake Volume】ノードの前に処理を挟んでおく必要があります。
![221104_04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/79c4aa8e-80dc-a778-6096-88b2b132277e.png)

------

* **SideFX Labs Flipbook texture Node　:　基本**
    * 基本的なエクスポート設定はフレーム数やカメラ指定といった標準的なもので、レンダーパス等の設定に特別なものは特にありません。
    ![221102_02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/58f9687b-58b4-bf13-c80d-94177a77096a.png)

------
* **SideFX Labs Flipbook texture Node　:　書き出し用のノード設定**
  * MDCマップを書き出す際は Pyro Bake Volume Path に【Pyro Bake Volume】ノードのパスを指定する必要があります。
  * その下の Final Color Path は通常のフリップブックを書き出す際に使用するものなので、MDCマップ用途であれば空欄で大丈夫です。
 ![221105_02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/2c006e99-6871-05a0-d56f-3c395bb96170.png)

------
* **SideFX Labs Flipbook texture Node　:　Exportタブ設定**
    * エクスポート時のパスや各テクスチャチャンネルに内包するデータ及び名前は、Exportタブで設定します。
    * 各テクスチャチャンネルに内包するデータや名前は変える必要は基本的にはありませんが、書き出し先はデフォルトだとrenderフォルダ直下なので、分かりやすい場所への変更をお勧めします。
    * ![221102_01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/d73032c5-a9e9-be31-59eb-5c3b8e6821cd.png)


------
* **SideFX Labs Flipbook texture Node　:　Realtime shader**
  * SideFX Labs 19.5.303 時点だと、ゲームエンジン向けの機能として Unreal Engine 向けの Shader 等のサンプルを SideFX 社が公式である程度用意しておいてくれています。
![221102_03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/46b93bf0-8c04-16ab-1ee5-11607f4ad104.png)

------
* **SideFX Labs Flipbook texture Node　:　Export**
    * 実際のエクスポートは、ノード上部の Render ボタンから行います。
    ![221105_03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/cc7c93d0-7909-7938-d06f-aadbf5fba343.png)
 
------
* **SideFX Labs Flipbook texture Node　:　Export実行➡書き出された各種データ確認**
    * 中間ファイル生成 ➡ 実際のエクスポートと順に処理され、無事にエクスポートが完了すると画像のようにMDCマップを含むフリップブック画像と中間ファイルをまとめたフォルダが生成されます。
![221105_04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/3d029e85-07f4-871b-436e-c8946c8bce43.png)

----------
* **SideFX Labs Flipbook texture Node　:　自動化**
    * ROP上のbatch処理は問題なく動作しました。
    * TOP等でのより大規模な自動化までは今回のR&Dでは検証していません。
![221107_01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/2332261f-e122-1042-fa8a-41a25069b10e.png)


# 注意事項
* **introduction**
  * 検証時、幾つか陥穽にはまるポイントがあったので注意事項として記載いたします。


-----
* **Exportタブの各ボタン**
  * Exportタブの【Export All Textures】及びその右側のボタンは、中間ファイルを書き出していない状態で押しても機能せず、エラー扱いになります。
  ![221105_05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/e61fb169-f5fb-a879-79ba-78134c1bb18d.png)


-----
* **ファイルパス問題**
  * 中間ファイルのパスと最終書き出しパスが、初期設定では relative path になっておらず連動していないので、調整時は両方を揃えておかないとエクスポート時にそれぞれ別の場所に書き出されます。
  * デフォルトのパスが【＄HIP/render/＄{HIPNAME}.${OS}/】という、ほぼ使わないパスになっており、Export Directory はほぼ確実に変更するので注意が必要です。
![221105_06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539096/d2c0f441-569d-4e63-037e-e119abbc0840.png)



# 参考資料

https://youtu.be/p1ZXJJ1_TV4?t=1194 

[BORN DIGITAL サポート : Houdini19ゲーム開発向け機能セミナーにおけるPyroまとめ](https://support.borndigital.co.jp/hc/ja/articles/4411964638617-Houdini19%E3%82%B2%E3%83%BC%E3%83%A0%E9%96%8B%E7%99%BA%E5%90%91%E3%81%91%E6%A9%9F%E8%83%BD%E3%82%BB%E3%83%9F%E3%83%8A%E3%83%BC%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BPyro%E3%81%BE%E3%81%A8%E3%82%81) 

# おわりに
如何だったでしょうか？

Multi-directional Contribution (MDC) Maps については公式での発表・実装から1年近く経っておりますが、思いのほか情報が少なく私以外にも困っている方がいるだろうという思いと、今後この分野について調べた人が参考にする基礎資料があった方が良いだろうという思いもあり、今回の記事を執筆いたしました。

少しでも皆様のお役に立てたのなら幸いです。
最後までお目通し頂きありがとうございました。