Help us understand the problem. What is going on with this article?

HDKについて

More than 3 years have passed since last update.

Houdiniでは、HScriptPythonVEXC++(HDK)の4つのプログラミング環境が使えますが、HDKはその中でも一番Houdiniのコアに近い所にある環境で、C++で記述して各種ノードのプラグインを作るものです。

この記事ではHDKを使ってプラグインをビルドするまでの導入部分を紹介したいと思います。HDK自体の解説についてはまた別の機会に、、、

HDKの発見

僕が一番最初にHDKについて興味を持ったのは↓の動画を見たのがきっかけでした。

Maya as Houdini Modeling tool :)

この動画では、Houdiniでメッシュの操作をするのがしんどいと思ったユーザーさんがMayaでモデリングをしてそのジオメトリのデータをHoudiniにリアルタイムで持っていけたぜ!的な所の紹介をされています。

そういうの自分もやりたい!と思い立ち、PythonベースでopenFrameworksからジオメトリキャッシュを書き出し → Houdiniで読み込みというのをやってみたのですが、なかなかパフォーマンスが出ず。どうやったらもっと早くなるんだろうか、、、というリサーチを初めたのがそもそもになります。

その後はPython側でボトルネックになっていそうな所をCythonに書き直したりしたのですが、色々やった結果HDKを使うのが一番早いのでは?という結論に落ち着きました。

それらの試行錯誤の結果は、この動画の1:30あたりから、HoudiniからUnreal Engine 4にジオメトリを転送してリアルタイムレンダリングさせている部分に活用されています。

開発環境のセットアップ

さて、実際に動かす環境づくりの説明です。

注意点として、Houdini15.5からsidefxで公開されているHoudiniのビルド環境が変わりまして、15.5以前だとVC2012だったのが、以降だとVS2015でビルドされるようになりました。

それに伴ってHDKを使ったプラグインをビルドする環境も使用するHoudiniのバージョンにあわせる必要があります。

Houdini15.5以前で使われていたVS2012では、Houdiniが要求する64bitバイナリのビルドが無料で提供されているVisual Studio Express 2012だとできなくて、商用版のVisual Studio Professional 2012を用意する必要があります。

一方、VS2015の無料版、Visuao Studio Community 2015だと64bitバイナリも問題なくビルドできるので、Houdini 15.5以降 + Visual Studio Community 2015環境を使うのがオススメの構成です。

Visual Studio Community 2015 のダウンロード&インストールは → こちらから

インストーラーを起動してOKを押していれば特に問題なくインストールが完了します。(インストールが終わったら念のため再起動をしてください)

HDKのサンプルを試してみる

まずsidefxが提供しているサンプルのビルドを試してみます。

ちょっと手順は違いますが、HDKのドキュメントの、Creating Custom PluginsBuilding a Plugin: SOP_Star.C Exampleを順を追ってやってみよう という感じです。

HDKのサンプルファイルは、C:\Program Files\Side Effects Software\Houdini 15.5.XXX\toolkit\samples あたりに入っているので、適当な所にコピーしてそれをいじるようにします。今回の場合、C:\temp\samplesにまるごとコピーすることにしました。

コンパイラにパスが通っているかの確認

Visual Studio 用開発者コマンド プロンプトを開いて、念のため clnmakeなどのVisual C++コンパイラのツール郡にパスが通っているかを確認します。

> cl
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

usage: cl [ option... ] filename... [ /link linkoption... ]

などと表示されればOKです。

Houdiniのツールにパスを通す

HoudiniにはhcustomというHDKプラグインをクロスプラットフォームでビルドしてくれるツールが付属しています。まずはこれを使えるようにしてみましょう。

Visual Studio 用開発者コマンド プロンプトを開いた状態だとhcustomのあるディレクトリにはパスが通っていないので手動でこれを通します。

> set PATH=%PATH%;"C:\Program Files\Side Effects Software\Houdini 15.5.XXX\bin"

↑は環境変数のPATHhcustomが入っているパスを末尾に追加するというコマンドです。(XXXの所は実行環境にあわせて適時置き換えてください)

> echo %PATH%
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow;
(...中略...);"C:\Program Files\Side Effects Software\Houdini 15.5.606\bin"

echo %PATH%を実行して、↑のように末尾にさきほど指定した文字列が追加されていればOKです。

パスが通っていればhcustomと実行した時に↓のようなメッセージが出力されるはずです。

> hcustom
Usage: hcustom [OPTION]... { [FILE]... | -c | -m }
This program will make custom plug-ins (DSO's) for Houdini.

Options:
  -d           Display CFLAGS environment variable passed to hcompile
  -g           Create debug version of the DSO
(...略...)

SOP_Star.Cをビルドする

では、さきほど適当な所にコピーしたsamplesの下のSOPフォルダに移動してSOP_Starをビルドしてみましょう。cddirコマンドを使います

> cd C:\temp\samples\SOP\
> dir
 Volume in drive C is Windows
 Volume Serial Number is 4878-70BC

 Directory of C:\temp\samples\SOP

12/11/2016  09:40 PM    <DIR>          .
12/11/2016  09:40 PM    <DIR>          ..
(...中略...)
09/21/2016  02:50 PM             8,409 SOP_Star.C
09/21/2016  02:50 PM             3,635 SOP_Star.h
(...中略...)
              57 File(s)        316,989 bytes
               2 Dir(s)  740,684,898,304 bytes free

SOP_Star.Cが確認できました。

続けてhcustomコマンドでプラグインを作っていきます。単純にhcustomに続けてビルドしたいCファイルを入れればOKです。

> hcustom SOP_Star.C
Making 'SOP_Star.o' and 'c:/Users/satoruhiga//houdini15.5/dso\SOP_Star.dll' from 'SOP_Star.C'
SOP_Star.C
   Creating library SOP_Star.lib and object SOP_Star.exp

通常に終了すると自分のホームディレクトリの中、$HOME\houdini15.5\dsoの中にSOP_Star.dllができているはずです!

さらにHoudiniを立ち上げて/objに入りタブを押したノードリストの中にstarが追加されていると思います。

MyFirstHDK.png

HDKのサンプルの中にはStarの他にも色々なものがあります。興味がある方は色々とビルドして試してみてください!

こちらの環境ではビルド時にhcustomがクラッシュしました。。。が、デバッグしますか的なダイアログに続けて開いたVisual StudioのウィンドウからBrake → Continueを選ぶと普通にビルドできて.dllもできていました。。謎。。。

まとめ - なぜHDKを使うのか

HDKのプラグインをビルドする所までを紹介てきたのですが、こんだけ色々やって星が出るだけじゃん… と思われた人もいるかもしれません。。ですが、HDKを使ってできる事、おそらくもっとあると思います。

例えば、

  • C/C++大量のライブラリ郡を使える
  • 単純な速度比較でもPythonC++を比較すると圧倒的にC++が早い → 数倍~数百倍のオーダー
  • 最初の例であったような、MayaなどのDCCツール、openFrameworksなどのリアルタイム系のツールなど、外部アプリケーションとの連携が高速にできる → Pythonでもできるけど、ボトルネックになりがち

あたりが挙げられると思います。

Houdiniはそれ自体がプログラミング環境かというぐらいにパワフルで自由度に富んでいますが、あと一歩の所で自分の欲しかったものないじゃん、、という経験をした事があるのではないでしょうか。

そういう時は大抵ノードの組合せでとんち的にごまかすか、Pythonなどを使って力技で解決すると思うのですが、そういった時にこそHoudiniが保持しているデータにフルアクセスできるHDK/C++の出番なのではないかと思います。

ものすごいめんどくさい事をする時に、簡単な処理なんだけどとにかく数がヤバいなどの時に、何かややこしい事があった時に、Houdiniをもっと自由に使いたい時の最後の砦として覚えておくときっと役に立つはずです!

おまけ: VSのプロジェクトを自分で作ってサンプルをビルドする

おまけとして、hcustomを使うのではなくVisual StudioのIDEを使ってHDKプラグインを開発する方法をのせておきます。(僕は普段こっちのほうを使っています)

IDEを使う利点としては、

  • いい感じに補完が入る
  • 一回設定してしまえばコマンドラインをいじる必要がない
  • Build & Runの手間が減る

あたりがあります。例として、さきほど紹介したものと同じSOP_Star.Cをビルドするプロジェクトを作ってみましょう。

(申し訳ないのですがVisual Studio英語版での紹介になります。。。)


プロジェクトの作成、ソースコードの追加

1-create_new_project.png

File > New > Project から新規プロジェクトを作成する

2-create_project_1.png

左側からTemplates > Visual C++ > Win32を選択して、真ん中のWin32 Projectを選択、名前とパスを適当に設定してOK

3-create_project_2.png

ウィザードが立ち挙がるので↑の画像のようにしてFinish

4-setup_project_1.png

新しいプロジェクトができるのでターゲットを Release, x64に設定する

5-copy-source-file.png

プロジェクト以下にsrcフォルダを作り、ビルドしたいファイルをここにコピーしてくる。
その時に.Cファイルを.cppファイルにリネームしておく

6-add-file-to-project.png

さきほど作成したsrcフォルダをプロジェクトにドラッグ&ドロップで追加する
ここで一応ビルドを試してみると SOP/SOP_Node.h が足りないというエラーが出ると思います。HDKのファイル郡にパスが通っていないためです

プロパティシートの導入

7-show-propmanager.png

HDKのビルドを簡単にするためのプロパティシートを作ったのでそれを追加します。
まず↑をプロジェクトのディレクトリにダウンロードしてきて HDK.props の名前で配置します

Property Managerを表示します。画面上に見付からない場合はView > Other Windows > Property Manager で表示してください。

Property Managerに表示されたプロジェクトを右クリックして、Add Existing Property Sheetを選択して、さきほど保存したHDK.propsを指定します。

9-setup-props.png

Release | x64のドロップダウンの下にHDKという項目が追加されているはずなので、そちらをダブルクリックしてプロパティページを開きます。
続けて、User Macrosの中のHOUDINI_VERSION_BUILDの数字を自分の環境のものと合わせてOKを押してください。

!!! プロパティシートの内容を変更した場合、プロパティ名(この場合HDK)を右クリックして出るSave HDKを実行しないと変更した値が失われるので注意 !!!

この状態でひとまずプラグインのビルドが状態になるとおもいますが、dllが書き出されるのがプロジェクトディレクトリの中のx64\Releaseの中になっているので手動で$HOME\houdini15.5\dsoにコピーしないといけず効率が悪いです。。。続けてIDE上でBuild & Runできる設定をしましょう!

実行環境の整備

10-setup-output-dir.png

Solusiton Explorerのを開いて、プロジェクト名を右クリック > Propertyを表示します。続けて、General > Output Directory$(HOUDINI_USER_PREF_DIR)\dso を指定します。

これで、ビルドした.dll$HOME\houdini15.5\dsoに配置されることになります。(ちなみにHOUDINI_USER_PREF_DIRは、さきほど追加したHDK.propsUser Macrosの中で定義されています)

11-setup-debug-env.png

さらにIDE上でBuild & Runできるように、Debuggingの中のCommand$(H)\bin\happrentice.exeを、Command ArgumentsWorking Directryに任意のファイル名とディレクトリを指定します。

たとえばWorking Directory$(ProjectDir)を、Command Argumentsuntitled.hipncを指定すると現在のプロジェクトディレクトリにあるuntitled.hipncを実行するという事になります。

ここまで設定できたら晴れてVisual StudioでF5を押したら立ち上がるといういつもの感じになります。おつかれさまでした!

現状の問題点として、.dllReleaseではなくてDebugでビルドして立ち上げた場合になんだかよくわからないけどエラーが出て起動しないというのがあります。。ここはちょっと追えてないのですが、このままだとまともにブレークポイントも設定できないのでどうにかしたい所。。。

おまけの方が有用な感じになってしまった感がありますが、これにて!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away