Python
HOUDINI
HoudiniDay 13

(きっとそっちじゃない)スワップとフリップについて

これは何?

フリップとスワップについての話です

zannen_01.png

zannen_02.png

吹き出しからはみ出しても整える気力がない!

承前

Houdini Advent Calendar 2017 13日目の記事でした。
遅れてすみませんでした。。。

取り上げるのは何の話かというと、これです
swap_01.png
kore.png

この、UIの仕切り(Split)の真ん中にある
ペイン切り替えUIについてです。

上図の場合、真ん中の点々は「左クリックスワップalt + 左クリックでオリエンテーションをフリップ」とあります。オリエンテーションをフリップ というのは、仕切りの向きを入れ替えるもので、左右に分割する仕切りであれば上下分割に、上下に分割する仕切りであれば左右分割に切り替わります。hou的には .splitRotateですかね

その点々の上下には三角印があって、向いた方向にペインを広げる(向いた側のペインをミニマイズする)スイッチになっています

swap_02.png swap_03.png

特にスワップ(ペインの入れ替え)はワンクリックでドラスティックに見た目がかわってしまうので
ちょっと怖かったのですが、
克服するためにその挙動を確認してみたい というのが今回の趣旨です

「Build」デスクトップを観察

ペイン構成はデスクトップを切り替えるとごっそり入れ替えることができます。デフォルトは 「Build」 です。

swap_reload.png
(いろいろいじった後は、Reload Current Desktopで元に戻すことができます)

Buildデスクトップは大きく左右に分割されており、左にビューポートとツリービュー、右にパラメータとネットワークエディタがあります。

真ん中のSplitは「ビューポート/ツリービュー」と「パラメータ/ネットワーク」をスワップします。
同じ縦の仕切りでも、ツリービューのところにあるsplit(初期状態では閉じてある)はビューポートとツリービューをスワップします。

ツリービューと「ビューポート/パラメータ/ネットワーク」が入れ替わるということはなく、影響範囲が「ビューポート/ツリービュー」の範囲に収まります
つまりsplitにも階層関係親子関係があると言えそうです

split.png
(▲)赤が第一次split、青が第二次split

Pythonから確認してみる

デスクトップを取得してペインを取得して、splitSwapを試みます。

いま適用しているデスクトップはhou.ui.curDesktop()で取得できます。そのデスクトップで開かれているペインは .panes()メソッドで取得します。

bd = hou.ui.curDesktop()

for p_obj in bd.panes():
    print(p_obj.currentTab())

<hou.TreeView panetab14>
<hou.SceneViewer panetab1>
<hou.Parm panetab5>
<hou.NetworkEditor panetab7>

ペインオブジェクトの.splitSwap()メソッドでペインをスワップできます。

p1 = bd.panes()[0]

p1.splitSwap()

swap_view_tree.png

(▲)treeviewペインでスワップしてみたところ

上位のsplitをスワップしたい

ペインを取得してスワップしても、
同じ階層のペイン同士しかスワップできません。
どうしよう…

あるペインの上のsplitを取得するために、.getSplitParent()ていうのがあります。

p1 = bd.panes()[0]

p1.getSplitParent()
<hou.Pane 3>

Pane 3というのが返ってきました。これは単純に.panes()したのでは取得できないペインです。
これを取得してスワップしてみると、

p3 = p1.getSplitParent()

p3.splitSwap()

parent_swap.png

「ビューポート/ツリービュー」と「パラメータ/ネットワーク」をスワップできました。

思うところ

こういうとき発生してしまうのが、splitが隣り合ってしまう 現象です。
「ビューポート/ツリービュー」の側は、左隅にツリービューがミニマイズされている状態でした。
これをフリップしたことで、「デスクトップを左右に割っていたsplit」と「ビューポート/ツリービューを割っていたsplit」が隣り合ってしまいました。

dual_split.png

どっち押せば元に戻るのか一瞬わからなくて
ヒェーってなります。

左右を入れ替えるスワップはalt + 左クリックによるローテートがありますが、
ペインを閉じた状態での「閉じてるペイント開いてるペインのスワップ」は、alt + 左クリックがない、という違いがあります。
見た目も、よくみると上下の三角アイコンの向きが違います。

.deskファイルを見てみる

desktopfile.png

デスクトップを分割していっているのは、root {~~ 以下のjsonみたいな構造のところです。
splitの直後に書かれている数字が、分割する割合です。
階層構造があって、一回割ってそのあとさらに一回ずつ割っていることがよくわかります。

例えばBuildデスクトップの中央の仕切りは0.677215とのことですが、.getSplitFraction()メソッドで取得できます。

p3 = p1.getSplitParent()

print( p3.getSplitFraction() )

067715.png

ファイルに記載されているのよりも細かい数値で返ってきました(右下の小窓)

Build以外のデスクトップも見てみる

他のデスクトップで、どのsplitがメインか、そうじゃないかを見ていきたいと思います。

Animate

desktop_anim.png

左のチャンネルリストのところが最上位、次に「ビューポート/アニメーションエディタ」「パラメータ/ネットワークエディタ」の間が仕切られています

Games

desktop_game.png

パラメータ/ネットワークの組み合わせが二つ用意されているのが特徴です。右側のそれはoutになっています。
最初の分割はど真ん中と分かりやすいですが、二次分割が二本、三次分割が三本あります。

Grooming

desktop_grooming.png

ほぼBuildと同じですが、ツリービューがなく、ペインタブも少なくなっています。

Image

desctop_img.png

こちらも分割はそんなに凝ってません
がGroomingよりさらに思い切った構成になりました。

LookDev

desktop_lookdev.png

非常に複雑に分割されています。シェルフセットはシンプルですが。
右側の「三段データツリー」と「それ以外」がまず仕切られていて、
次に、左側は「パラメータ/ネットワーク」と「それ以外」、右側は「下段」と「上段・中段」が仕切られています。
左側、ビューポートの枠が上下に割ってあるsplitが実に四次めの分割です

Modeling

desktop_modeling.png

分割的にはBuildと全く同じですね。左側のフリップ閉じてあるやつがツリービューというのも同じです。
ペインタブやシェルフセットが違います

Output

desktop_output.png

Buildの、左側がレンダリング向けになったやつ、
みたいな構成です。シェルフセットも同じだし。

Technical

desktop_tech.png

なんか分割もテクニカルです。
右に「パラメータ/ネットワーク」というのはいつも通りではあるんですが、上下が逆になってます。パラメータが下。なぜ。
そして左側にツリービュー、というのもBuildと一緒なんですが、デフォルトで開いた状態。

一番凝っているのがビューポートのところで、
Python Shellとで上下に仕切ったあと、
ビューポートの下側に「ジオメトリスプレッドシートとか」、上側に「レンダービュー」を仕舞っています。
この上下にしまわれたペインは、フリップすると窮屈になるので
スワップして、ビューポートと排他利用という運用が想定されていると感じます。

splitのスワップ・フリップの性質をもっとも活用したデスクトップな気がします。

Terrain

desktop_terr.png

いまをときめく地形作成用のデスクトップです。
ImageやGroomingと同様 特定用途につきシンプルに という感じを受けますが、
ビューポートの右側に コンポジットビュー が仕舞ってあり、
Technicalの上下のあれらと同様、排他で使うっぽい感じが出てます。

Textport

desktop_text.png

分割一切なし、シェルフも閉じてあります。
求道者モード。

このデスクトップを選択するような人はマウスでちくちくネットワーク選択しないし、タブを切り替えたりしながらパラメータ入力なんてかったるいぜ、出た絵は外部のビューアーで好きにみるぜ
的なハードボイルドな精神が滲んでやまない。

まとめ

最後に、よく見かけるデスクトップも同じ文脈で触れてみます。

desktop_etc.png

まず左右に分割して、右がおおきくネットワーク。パラメータは必要な時にpキーから入力するスタイル
左側は、左端にツリービューをたたんでおいて、上段にビューポート、下段にジオメトリスプレッドシート。

……といろいろ眺めてきて、だいぶsplitを押すのも怖くなくなってきました。
リハビリは成功と言えそうです。

心残り

結局タイトルに載せていたのにもかかわらず Flip にはあまり触れずでした。
houモジュール からスワップしたり、分割比率を取ったり、最大化・最小化はできることが分かったのですが、
ただ開く「Flip」は、はて、どうやるんでしょうか。

houの抜け穴なんでしょうか。。。


次の記事は@yuya_torii
Houdini Engine For Maya を調べてみる
です!

参考