Version Icon
この記事はWindows10環境を前提にしております。
Houdiniは、マイナーバージョンを含め複数インストールしている方が多いと思います。
私は毎回スタートにピン留めしていますが、アイコンだけでは一目でバージョンが分かりにくく…
そこで、バージョン番号が書かれたアイコンを自動生成する仕組みを考えてみました。
バージョンアイコンの自動生成
手順としては、
です。
アイコン画像を用意する
まずはベースとなるHoudiniのアイコン画像を用意します。
私は「Quick Any2Ico」というフリーソフトを利用して、exeからico(アイコンファイル)を抽出していますが、そのあたりはご自由にどうぞ。
Python SOP でバージョンを取得する
後の互換性のため、今回はなるべく低いバージョンのHoudiniでhipを作ると良いかもしれません。
まず Python SOP を作って、現在起動しているHoudiniのバージョンを取得します。
ver_tuple = hou.applicationVersion() ver_string = ','.join(map(str,ver_tuple)) ver = ver_string.replace(',','.') #check print ver
applicationVersion()
では、メジャーバージョン、マイナーバージョンなどがタプルで返ってくるので、ここでは全て文字列に変換してつなげています。
得られたバージョンはいったんDetailのアトリビュートに入れます。
geo.addAttrib(hou.attribType.Global, 'version',"",create_local_variable=False) geo.setGlobalAttribValue('version', ver)
PythonではDetailのことを Global
と書くのでよくハマりました。
また、文字列の場合は addAttrib
の default_value が利用できないので、別途setしてやる必要があります。
COPでバージョン番号をアイコンに合成する
COP2 Network を作って、その中でアイコン画像を加工していきます。
File COP でベースになるアイコン画像を読み込み、
Font COP で、さきほどDetailに格納したバージョン番号を参照します。
`details("../../python1","version")`
文字列は detail
ではなく details
というようにsが必要なので、ここは expression のハマりポイントな気がします。
COPはあまり詳しくないですが、文字の色や位置を調整して、こんな感じ…?
最後に ROP File Output します。
出力するファイル名の末尾にもバージョン番号を入れると分かりやすいかもしれないですね。
$HIP/houdini_icon_`details("../../python1","version")`.png
ここで Render ボタンを押せばそのまま1枚出力されます。
次に、COPから出て再び Geometry階層に戻ります。
Python SOP をもう一つ作って、今度は ROP File Output の Render ボタンを押すノードを作ります。
n = hou.node('../cop2net1/rop_comp1') n.parm("execute").pressButton()
このノードをクックすると、画像が出力されます。
Hbatchでhipを実行する
※これ以降はライセンスを使用します。
ここで最初のpythonノードの前に、何かしらのメッシュを繋いでおきます。
このメッシュは全く使わないのですが、ジオメトリに実体が何も存在しないと、次のステップの時にエラーが出てしまいました。
いったんhipを保存して、次はバッチファイルを作成します。
テキストエディタを起動します。
mread "C:/test/make_icon.hip" opcook obj/geo1/python2 quit
mread
でコマンドラインからhipファイルをロードし、opcook
で指定ノードをクックします。
ファイル名やパス名は一例です。スラッシュの向きはWindowsと違うので注意が必要です。
このファイルは .cmd
形式で保存します。
このcmdファイルを、Houdiniパッケージに含まれている Command Line Tools で実行します。
Command Line Tools は、普通のコマンドプロンプトとは違い、Houdiniの各種スタンドアロンツールなどを、環境変数にパスを通したような状態で実行することができます。
Command Line Tools を起動したら、hbatch
の次にさきほどのcmdファイルを指定してリターンします。
hbatch C:\test\icon_gen.cmd
hbatch
はHoudiniをコマンドラインから実行するものです。(※ライセンスを使用します)
各バージョンに紐づいて実行されるので、バージョンごとの Command Line Tools で実行するたびに、それぞれのバージョンアイコンが生成されます。
これで各バージョンのアイコン画像ができましたので、前述の「Quick Any2Ico」などのツールを使って ico に変換します。
スタートメニューにピン留めされているショートカットの場所を開き、プロパティから新しいアイコンを指定したら完成です!
うわ~つぶれて見えない…!
…アイコンとしてはもう少し調整が必要そうです。
今ではPDGを使えばもっとスマートに色々できるかもですね。
ではまた。
piece of Procedural - men tan pin
プロシージャルモデリングの習作
メンタンピン
プロシージャル配置の作例(?)としてご紹介してみます。
麻雀用語が多めで申し訳ないです。
手続きの流れ
まずは牌そのものの代わりにpoint群を用意しました。
Attribute Wrangle でどかっと作り、同時に牌の種別を表すアトリビュートを付与します。(m1=マンズの1)
"polyline"で接続されている理由は後ほど説明します。
各牌は4枚づつ存在するので、点群を複製し、同時に残り枚数を表すアトリビュートも付与します。
polylineで接続されているpointの中から、シュンツの「中央」になる可能性のあるpointを抜粋します。
タンヤオなので1と9は除かれます。2と8もシュンツの中央には来ないので除かれます。
point群の中から、1つのpointをランダムで選択します。これが1つ目のシュンツの「中央」の牌です。
ランダムなpointを1つ選ぶ方法は、今回は Sort SOPを使用しました。ソート方法を「Random」にして、次に繋いだGroup SOP で「0」番のpointを選択しています。
ランダムシードは別のノードに一括でまとめています。
候補牌を抜粋する前のpoint群に対して Group Transfer SOP でシュンツの「中央」を教えてやり、
Find Shortest Path SOP で両隣のpointを取得します。このために polylineで繋いでみました。
これでシュンツが1つ決まりました!
Attribute Wrangle で残り牌をカウントダウンし、シュンツのグループは残り数の小さいほうに移動します。
なぜかというと、polylineで繋ぎなおすのが面倒だから、というだけです。
1つ目のシュンツはpoint群から split し、また次のシュンツ候補の中から、同様の処理でシュンツを選んでいきます。
ただし、同じシュンツは3回以上選択されないように小細工をする必要があります。
同じシュンツが2つなら一盃口になりますが、同じシュンツが3つになると三暗刻になってしまい、メンタンピンではなくなるからです(たぶん…)。
最後に雀頭を取得します。
雀頭は、1と9以外で、かつ2枚以上残っている牌からランダムで選択します。
これで全ての牌が選ばれ split されたので、それらを全て Merge します。
見やすいようにリーパイ(ソート)したら…
事前に作成しておいた牌と差し替えて、メンタンピン完成です!
ランダムシードは$Fベースですが、早すぎてデバッグできない…!:D
画像は「麻雀の雀龍.com」の無料麻雀牌画をお借りしました。
麻雀牌画・無料素材(フリー画像)のダウンロード可能! - 麻雀の雀龍.com
Houdini modeling operation
Houdini ではノードを組んでいく事が多いので、MAYA/MAX のようにモデリングすることは頻度が低いかもしれませんが、
それだけにたまに何かやろうとするとよく忘れるので、ビューポートでの基本的な操作をメモしてみました。
マニュアルを読めば良いのですが、ゲーム始める時に取説読まない人間なので…。
ちなみにキーはwindows版です。
マウスボタンの略称も念のためメモ。
LMB … Left Mouse Button(マウスの左ボタン)
MMB … Middle Mouse Button(マウスの中ボタン)
RMB … Right Mouse Button(マウスの右ボタン)
ビューポートカメラ操作
とりあえずAltを押しておけば何とかなります。このあたりは一般的ですね。AltではなくSpaceが公式のようです。
key | Action | icon |
---|---|---|
Alt + LMB | カメラ回転 | |
Alt + MMBコロコロ | ズームインアウト |
ビューポート上で
key | Action | icon | 備考 |
---|---|---|---|
Space + 1 | パースペクティブ ビュー | ||
Space + 2 | Top ビュー | もう1度押すと Bottom ビュー | |
Space + 3 | Front ビュー | もう1度押すと Back ビュー | |
Space + 4 | Right ビュー | もう1度押すと Left ビュー | |
Space + 5 | UVビュー | ||
Space + G | 選択にフォーカス | ||
Space + A | 全体にフォーカス |
選択
Houdini Group Work
Houdini でのグループ操作の備忘録をまとめました。ショートカットキーなどはWindows版となっています。
グループの確認
Viewport上で[9]キーで、グループ選択ディスプレイ(?)のON/OFFができます。
point や primitive などのコンポーネントの変更は、歯車マークから。
ハイライト色が見づらければ、右側の色の付いた四角をクリックすると変更できます。
ノード名をグループ名にする
Group (Group Create) SOP の Group Name 欄に、以下のように入力すると、ノード名がグループ名となります。
`opname(".")`
この方法は「gametutor」で知りました。
http://www.gametutor.com/live/home-live/
`$OS
上記でも同様の効果があります。
こちらは杉村さんのワークショップで知りました。ありがとうございます。:)
Procedural Random Agate - breakdown
Allegorithmic の Materialize というコンテストに応募したアセットについて、おこなったアプローチを紹介します。
There was no time to make realistic detail, but I was satisfied because I could do what I wanted to do. pic.twitter.com/5iN2OUFjVk
— saty (@saty_kitaji) 2017年11月24日
リファレンス
今回作成したのは、アゲート(メノウ)という鉱石です。
カラーバンドの形状や、水晶の色に無限のバリエーションがあるので、ランダムシードのみでプロシージャル生成を楽しめるようにしました。
グラフ
全体の構成は下図のようになっています。特徴的なノードや構成を紹介していきます。