最近、どうしても自作したいSOPがあり、Windows環境でのHoudiniのプラグイン開発を少しずつ学び始めたので、忘れないようにメモしていこうと思います。
HDKリファレンスには、「Visual Studio IDEからビルドする場合は、代わりにCMakeを使用することをお勧めします。」との記載があります。
また、「hcustomによるビルドでは単一のソースファイルしか扱えない」旨の記述もあり、hcustomは手軽ではあるけど不便だろうなぁと想像しています。
というわけで、今後使い続けることになりそうなCMakeでのビルドを知るため、前回のhcustomによるビルドに引き続き、CMakeを使うビルドを試してみようと思います。
今回もサンプルの「SOP_Star」を使います。
■CMakeとは?
CMakeは、プログラムのビルド処理を自動化してくれる便利ツールです。
今回CMakeで行う処理は、大きく分けて以下の2つです。
・Visual Studioのソリューションとプロジェクトの自動生成
・自動生成されたそれらのファイルを使ってビルドを行う
■環境の準備
まず、手元の環境ですが、以下のようなツールがインストールされています。
Houdini 18.0.532 Indie
Visual Studio 2019 / 2017 / 2015 Community
CMake 3.18.1
■ビルド手順
・ソースコードをコピーする
以下のフォルダを、任意の場所にコピーします。
今回は、以下のようにコピーしました。
コピー元:$HFS\toolkit\samples\SOP\SOP_Star コピー先:D:\temp\HDK\build_cmake\SOP_Star
※$HFSは、Houdiniのインストールフォルダで、デフォルトでは以下のようなパス
C:\Program Files\Side Effects Software\Houdini 18.0.532
・Command Line Toolsを起動する
スタートメニューで「Command Line Tools」と検索し、起動します。
「Command Line Tools 18.0.532」というタイトルの、Houdini関連の環境変数が一通り自動的にセットされたコマンドプロンプトが立ち上がります。
※どんな環境変数がセットされているかは「set」と打ち込んでEnterを押すことで一覧表示、確認できます。
・ソリューションとプロジェクトを生成する
CMakeでソリューションの生成を実行すると、カレントのフォルダに、Visual Studioのソリューションファイル以外にも、いろいろなファイルが大量に生成されます。
これらの生成されたファイルがソースコードと混ざってしまうと、生成前の状態に戻すことが難しくなります。
そのため、予めビルド生成物をまとめるbuildフォルダをつくり、もとのソースコードとCMakeの生成ファイルを切り分けて管理できるようにします。
まずソースコードと同じフォルダにbuildという名前のフォルダを作ります。
D:\temp\HDK\build_cmake\SOP_Star\build
Command Line Toolsで以下を実行し、カレントのフォルダをbuildフォルダに移動します
cd /d D:\temp\HDK\build_cmake\SOP_Star\build
次に、以下を実行し、ソリューションとプロジェクトを生成します。
cmake ..
カレントのbuildフォルダに、各種ファイルが生成されます。
ここで生成されるソリューションとプロジェクトは、SOP_Starフォルダの直下にあるCMakeLists.txtファイルに記述された設定に基づいて作成されます。
カスタムプラグインを作成するためのCMakeLists.txtを書く際は、このCMakeLists.txtを参考にすれば良さそうです。
・プラグインをビルドする
続いて、以下を実行します。
cmake --build . --clean-first
これで、カレントのフォルダにあるソリューションとプロジェクトファイルを使い、プラグインが以下のフォルダにビルドされます。
%USERPROFILE%\Documents\houdini18.0\dso SOP_Star.dll SOP_Star.exp SOP_Star.ilk SOP_Star.lib SOP_Star.pdb
・Houdiniでプラグインの動作を確認する
・Houdiniを起動
・Geometryを内でTABメニューから[star]と検索し[Star]ノードを作成
・無事ビューポート内に星型のジオメトリが現れればOKです。
ここまでで、hcustomとCMakeのそれぞれを使って、手軽にプラグインがビルドできることを確認してみました。
同じ要領で、サンプルにある各種プラグインをビルドすることができそうです。