MOPsであそぼう

# はじめに
こちらの記事はHoudini Apprentice Advent Calendar 2022 / 21日目の記事になります。
Houdini使用バージョンは 19.0.622 になります。

専門学校でHoudiniを学んでおります。Houdini歴は1年ほどとなります。よろしくお願いします。

今回はHoudiniの有名なHDA「**MOPs**」を紹介していこうと思います。

# MOPsとは？
MOPs (Motion Operator Tools) とは、オープンソースで開発されているHDA (Houdini Digital Asset) です。
・公式サイト https://www.motionoperators.com/
モーションデザイナー向けのHDA Toolsetとなっており、モーショングラフィックスなどの制作に特化したツールとなっています。

## なぜ使うのか？
Houdiniを使う上で特に大事になるのが、Attributeの概念です。
どのポイントにどの値が入っているのか？
そして、Houdiniへ新規に参入してきたユーザーにとっては「どのように値を作るか」が一つの障壁となっています。
MOPsを使うことでCinema 4DのMoGraph, MayaのMASHのようなことが簡単に行えるようになります。
具体的には、Falloffsノードを使うことでアトリビュートを感覚的に作成することができます。

## プラグインの導入
ここからMOPsをダウンロードしましょう。
https://github.com/toadstorm/MOPS

ファイルを展開し、MOPs-masterフォルダを任意の場所に置きます。
MOPS.jsonを書き換え、Houdiniのpackagesにコピーします。
```
{
	"env": [
		{
			"MOPS": "MOPs-materを配置したパス"
		},
		{
			"HOUDINI_PYTHONWARNINGS": "ignore"
		},
	],
	"path": "$MOPS"
	
}
```

## MOPsの更新方法
シェルフからMOPsをオンにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/99cbb90b-f073-92de-5634-22042e7b30f5.png)
MOPs Updaterをクリックし、Apply UpdateでMOPsをアップデートさせて完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/43e47883-7ab9-cfbd-6061-cee116bac9c4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/f006ab19-763a-9de4-d26d-ed0f1682800d.png)

# まずは動かしてみよう
1つ作例を作ってみましょう。
![advent_calendar_mops_01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/3df37789-9cf5-95d3-4b53-39681475dba2.gif)
ネットワーク
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/4527a909-f5a4-013c-8ced-2df2af61e616.png)

## 作成手順

scatter でばらまいたポイントにCopy to Pointでジオメトリをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/090b4e8b-f286-9589-a4bb-bd58dcdf8b15.png)

MOPs Shape Falloffで値を作成します。
指定した向きと、その位置で値が決まります。
![advent_calendar_mops_02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/ee9bb3da-4728-56c0-6baf-3eec249865d6.gif)

point wrangleでmops_falloffアトリビュートをrampで調整します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/ef74511d-327f-891a-226e-bdbbab3483b3.png)

こうすることで、上に移動する際のアニメーションを調整できます。
![advent_calendar_mops_03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/34a7b37e-183f-f529-40bf-a612e57b5310.gif)

位置の移動には、MOPs Transform Modifierを使用します。
Falloff Attributeの値に応じてTransformの操作が行えるので便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/35fb76c8-95e5-3201-cf09-48f0585d7f0c.png)



## セカンダリアニメーションの作成
この状態ではリニアの動きで寂しいので、セカンダリアニメーションを付けていきましょう。
ここでは、スプリングのアニメーションを2通りの方法で紹介します。

### MOPs Spring Modifierを使用する方法
MOPsに入っている「MOPs Spring Modifier」 を使用して簡単につけられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/8688babc-99a0-1f8e-68e8-c20a3e2c9e6c.png)



### CHOPを使用する方法
CHOPを使うことでもアトリビュートに対し、セカンダリアニメーションをつけることができます。
自由度としてはこちらのほうが高いです。


まずは、ChannnelとCHOP netを出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/7b4b1439-12b7-4070-fe18-e04672335938.png)

CHOP内
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/ef6a6a2e-edad-16e0-abba-d0d8aade5b1b.png)

GeometryでSOPのどのアトリビュートを読み込ませるか設定します。
ここではpoint wrangle後のnullを指定しています。
必ず、Attribute ScopeとRename Scopeを変えておきましょう。（デフォルトではベクター型）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/ef2a2b0d-9346-5dc9-cc64-7f169b8f45e5.png)

springで動きをつけます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/7588ee0f-3b47-371e-283d-dd6e6e9be8f6.png)

filterで動きをなめらかにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/a66f51fe-83c6-2b4e-a0f4-03c1c52ce688.png)

SOPのChannelで指定のchopノードを取り出します。
ここでもChannel ScopeとAttribute Scopeを忘れないようにしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/e7c0d05f-3589-eecb-c34f-fc3aa76b4488.png)

最後にMOPs Transform Modifierを適用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/7968b95d-9e81-ce2b-4d73-9884cb7b7bf3.png)

おめでとうございます！
これにて作例は終了です。おつかれさまでした。
![advent_calendar_mops_01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/d7251483-db90-0b25-e162-ad8fb073c8da.gif)




# おわりに
今回の作例に加えてもう一つRBDを使った作例を作ってみましたので、ぜひhipをご覧ください。
![advent_calendar_mops_05.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954279/ec6225e1-3db5-5730-8f44-604b922a2fb6.gif)

hipファイル
https://drive.google.com/file/d/1jVNGzSJkkE00yqZD08MN5LauABHcqLwP/view?usp=sharing

作業時にはGeometry Spread Sheetを必ずオンにして作業をしましょう！

## 参考

MOPs公式サイト : https://www.motionoperators.com/
MOPs wiki : https://github.com/toadstorm/MOPS/wiki/