OPcustomizeを使って、タブメニューのノード表示を設定する

# はじめに

皆さんはHoudiniの**OPcustomize**というファイルをご存じでしょうか？
自分が最近知って面白いと感じたので、紹介します。

# OPcustomizeとは？

**OPcustomize**とはHoudini起動時にHScriptを実行して、タブメニューから古いノードを非表示にしたり、強制的にオペレータ名(ノードタイプ)を変更したり出来る設定ファイルの事です。

# 置かれてる場所

公式のものは**$HH/OPcustomize**というファイルです(拡張子はありません)
**例**
**C:/Program Files/Side Effects Software/Houdini 18.0.287/houdini/OPcustomize**

またSideFX Labsでも使っており、SideFX Labsのフォルダ直下に置かれています。

# 中を見てみる
## SideFX Labs

まずはSideFX Labsの方を見てみます。
SideFX LabsのOPcustomizeを見てみると…

```C
opalias Vop labs::coord_swizzle_vector::1.0 gamedev::coord_swizzle_vector::1.0
opalias Cop2 labs::dds_file gamedev::cop_dds_file
opalias Cop2 labs::normal_color gamedev::cop_normal_color
opalias Cop2 labs::normal_combine gamedev::cop_normal_combine
opalias Cop2 labs::normal_invert gamedev::cop_normal_invert
opalias Cop2 labs::normal_levels gamedev::cop_normal_levels
opalias Cop2 labs::normal_map gamedev::normal_map
opalias Cop2 labs::normal_normalize gamedev::cop_normal_normalize
opalias Cop2 labs::normal_rotate gamedev::cop_normal_rotate
opalias Cop2 labs::vector_normalize::1.0 gamedev::vector_normalize::1.0
opalias Vop labs::vertical_point_index::1.0 gamedev::vertical_point_index::1.0
opalias Sop labs::curve_branches gamedev::sop_curve_branches
opalias Sop labs::color_adjustment gamedev::sop_color_adjustment
opalias Sop labs::color_blend gamedev::sop_color_blend
opalias Sop labs::color_gradient gamedev::sop_color_gradient
```

このように**opalias**という関数が大量に書かれています。

**opalias**を公式ヘルプで確認してみると**オペレータタイプを別名にすることが出来ます**と書かれてます。
https://www.sidefx.com/ja/docs/houdini/commands/opalias.html

つまり**labs**から始まるオペレータタイプを**gamedev**に置き換えており、SideFX Labsの前身であるGame Development Toolsetと互換性を保つための処理をこのファイルで行っています。
自分が**OPcustomize**を知ったきっかけもSideFX Labsになってオペレータ名が変わってるのに互換性を保ててる理由が気になったからです。

## 公式

では次に公式の**OPcustomize**を見てみます。
**opalias**も使われていますが、他にも3つの関数が使われています。


- [**opfirstname**](https://www.sidefx.com/ja/docs/houdini/commands/opfirstname.html)
    ノードを配置した時の初期名を変更します。
    `opfirstname <networktype> <opname> <firstname>`
    公式では下記の記述があり、**Group Create**を作成した際に**group**という名前でノードが作られます。
    `opfirstname Sop groupcreate "group"`
    
- [**opdeprecate**](https://www.sidefx.com/ja/docs/houdini/commands/opdeprecate.html)
    ノードタイプを廃止としてマークし、それらのノードをタブメニューから隠します。
    `opdeprecate <-r reason> <version> <networktype> <nodetype>`
    公式では下記の記述があり、Houdini18.0から**falloff**が廃止になり、理由として**distancealonggeometry**が指定されています。
    `opdeprecate -r "distancealonggeometry" 18.0 Sop falloff`


- [**ophide**](https://www.sidefx.com/ja/docs/houdini/commands/ophide.html)
    タブメニューからノードを隠します。
    `ophide <networktype> <nodename>`

    公式では下記の記述があり、**musclesim**というノードが隠されています。
    `ophide Sop musclesim`

    ちなみにこの記述の上に`// These are WIP muscle tools`と書かれているので、今後正式に実装予定のノードなのかもしれません。

# 隠されてるノードを表示する

この**OPcustomize**、SideFX Labsでも使われていることからも分かる通り、ユーザーが独自に変更する事が出来ます。
下記ディレクトリ直下に置くことでHoudini起動時に設定が読みこまれます。

- **$HOUDINI_PATH**
- **$HSITE/houdiniバージョン**
- **$HOUDINI_USER_PREF_DIR**

これによってスタジオで共有してるHDAなども**opdeprecate**を使う事で特定のバージョンから隠す事が出来ます。

また**opunhide**という関数を使う事で隠れてるオペレータを表示する事が出来ます。
個人的に**falloff**ノードは便利で、ちょくちょく使用してたので、これをHoudini18.0でも表示されるようにしてみます。

**$HOUDINI_USER_PREF_DIR/OPcustomize**に下記記述を書き込みます。

```
opunhide Sop falloff
```

これでHoudiniを起動して、タブメニューで**falloff**を探すと…

![](https://paper-attachments.dropbox.com/s_3E7D39FBFD97F6786C28BFDA569EF460AD0B41CD12A6F83473D422260DEC7B02_1586415722565_TabFalloff.png)


ちゃんと表示されました！


# 最後に

いかがでしたでしょうか？マニアック過ぎて、誰に需要があるか分かりませんが、ググっても情報が出なかったのと個人的に面白かったので、まとめてみました。