"見習い"なので初級チュートリアルに積極的につまづいていく

https://qiita.com/advent-calendar/2019/happrentice
Houdini Apprantice アドベントカレンダー 2019
4日目の枠が空いていたので書いてみました。

***

初心者ならだれでも一度はやってみるのではないかという、こちらの定番チュートリアル

**「ノード, ネットワーク & デジタルアセット」**
https://www.sidefx.com/ja/tutorials/nodes-networks-digital-assets/

![Getting Started](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/b8e90706-4a3b-46e6-98bf-062b84685834.png)

日本語版PDFもあり、デジタルアセット化も含めてHoudiniの使い方がコンパクトに学べる秀逸な学習コンテンツです。
しかしながら僅かな欠点として、PDFとしてまとめるためのレイアウトの関係や翻訳の関係で、ところどころ微妙～～に端折ってあるところがあり、**「分かる人は気にならない、分からない人には手順がつながらない」解説**が細かく発生しています。
見習い的には、そういう細かいところでも挫折ビリティが高まってしまいます。ちょっと心に傷を負ってしまいそうです。

この記事は、そうした**『見習いつまづきポイント』**にことごとくつまづいて行こう（そして足りない内容は補足してみよう）という趣旨です。転んだ数だけ強くなれるよ。
上級者の方々に置かれましては「そこつまづくか？？」というところがあるかと思いますが、他方もしかしたら小さな新発見もあるかもしれません。

使用するHoudiniのバージョンは**18.0.287**ですが、PDF自体はHoudini 17.5.293以上に含まれる機能向けに書かれているそうです。

なお、根気が尽きたため「パート6 : ブロック化デジタルアセットを作成する」**まで**を扱います。
以降の「パート 7: デジタルアセットをテストする」と「パート 8: ブロックのアニメーション」と「(番外)HOUDINI ENGINE 他のアプリケーションへの HDA のロード」は見習いの方も自力で取り組んでみてください。
またこの記事単体ではほぼ意味を成しませんので、当該PDFと併読いただけると助かります。

端折られているなーと感じる箇所はだいたいドキュメントの[「基本」カテゴリ](https://www.sidefx.com/ja/docs/houdini/basics)の↓このあたりに集約されている気がするので、余裕ができたら眺めてみることをお勧めします。

https://www.sidefx.com/ja/docs/houdini/basics/ui.html
https://www.sidefx.com/ja/docs/houdini/basics/view.html


***

# パート 1: 単一のブロックを作成する

## 01 - 新しいディレクトリ brickify_lessonが参照先になっているはずです

Save As... ダイアログを開いてみても、「brickify_lessonが参照先になっている」かどうかは確認できません。実際にはちゃんとなっているので気にせず進むか、ファイルリストの一番上にある「..」で一階層上がってフォルダ名を確認するか、
または「Edit」>「Alias and Variables」の「Variables」タブで確認できます。**「JOB」**という項目がそれです。

![Alias and Variables](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/2c486159-62ad-9e8c-a5aa-58e8f9e12cc3.png)

## 02 - Enter を押して原点の位置に配置します

マウスカーソルがビューポート上に無いとEnterが効きません。ラディアルメニューの「Create > Geometry > Box」という仕草は、カーソルを下へ下へと持って行ってしまうことになるため、ビューポート外へ出かけてしまうこともあります。

## 02 - ネットワークビューには box オブジェクトが 1 つ存在しています。

はじめて「ネットワークビュー」という単語が出てきましたが、ウィンドウのどこにもネットワークビュー / Network Viewが見つかりません。間のわるいことに、PDF上も解説画像から省かれています。
Network ViewといえばHoudiniで一番有名なビューというか、もはやHoudiniそのものというか、Houdiniのことを知らなくてもこのノードツリーは知っているくらいのUIですが、見習いなのでいきなり名前を出されてもわかりません。なにせ他のビューは「～～View」とタブから判断できるのに、ネットワークビューはそうではなく**「/obj」**となっています。
こういうときは、**タブにカーソルをのせてしばらく待ちます**。何ビューなのか確認することができます。
分からないツール名などが突然出てきたとき（たとえば直後のSelectツール）も同様に、アイコンなどにカーソルを重ねてしばらく待てば手掛かりを得られます。

↓左上にて、ペイン名がポップアップしているのが確認できます。
![ネットワークビュー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/19c4499a-7531-149d-7b92-97cde923f5dc.png)

## 04 - 他の場合には、Handleツールを使って

Hanldleツールはカーソルを合わせても「Handle Tool」とは表示されません。「Show Handle」です。
![ハンドルツール](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/c2ec2268-5ed5-63c8-0790-52d9ca809d3a.png)

ドキュメントはこちら。
https://www.sidefx.com/ja/docs/houdini/basics/handles.html

## 05 - Scene ビューのペインで、ハンドルを使ってポリゴンを上方にドラッグ

**Sceneビューのペイン**、一瞬どこのことだろうと思ってしまうんですが、Scene Viewはビューポートのこと、つまり「（さっきはスライダーでやったけど今度は）ビューポート上で直接ハンドルを操作してみましょう」ということですね。このように、「さっきはこうやったけど次は同じようなことをこうやるよ」という解説が、このPDFには多数含まれています。いろいろなアプローチが学べるチュートリアルです。

ちなみにDistanceを**手作業できっちり0.05にすることはほぼ不可能**なので、結局はパラメータを直接打つことになります（または端数を気にせず進む）

## 05 - ボックスを裏返し

回転させようという意味ではありません。ビュー上で裏側が見えればいいので、`alt(またはspace) + 左ドラッグ`です。

## 05 - ボックスの底面の 4 つのポリゴンを選択します

流れでやると忘れそうですが、さきほどまで作業していた上面側の4面を**選択解除**したか確認しましょう。なにもないところを1クリックします。

## 06

さりげなく「06」が飛んで「07」になっていますが、特に問題ありません。怯まず進みます。
![06はない](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/f51d9c71-4a9c-0383-a318-bad86f7327ee.png)

## 08 - ベベルの[Offset] を0.006に

**Houdini18**ではパラメータの様子がドキュメントと異なっています。
Offsetというパラメータではなく**Offsetting**という**カテゴリ**になっていますので、Offset=0.006の代わりに「Offsettingカテゴリの**Distanceパラメータ**」を0.006にします。

![offsetting>distance](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/7ece9e69-77ee-8095-4a29-8498ca9979b0.png)

## 09 - オブジェクトレベルに移動し

見習いなのでいきなり何を言っているのかわからなくなりそうですが、ここのことです。
![obj レベル](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/071a61f8-54b4-27f3-7822-5f4ca95efe95.png)

実はいつのまにか、ネットワーク的には「オブジェクトレベル」からboxの中のネットワークへと降りていたのです。具体的には、**03**の**polyextrudeを実行した瞬間**です。

肝心の「オブジェクトレベルに移動」ですが、uキーを押したり（＜あとで出てきます）、このUIのobjのところをクリックすれば移動できます。

## 09 - Shift + を押し

+といってもテンキーの「+」では効きません。`「Shift」+「;（れ）」`キーでお願いします。

# パート 2: ポイントクラウドにブロックをコピーする 

## 01 - 正投影ビューをホーム設定し / 再度ビューのホーム設定を行います

**「ホーム設定」**は難読ワードだと思いますが、要するに「space + h すれば、ビューがラバートイの全体が映るよう調整される」ということです。

## 02 - すべてのポイントを選択します  (黄色で強調表示されます)

**つぶつぶ**が苦手な見習いの人は、ちょっと心の準備をしてから実行してください（そのうち慣れます）。
カメラを思いっきり寄るか引くかしておくと、多少衝撃が和らぎます。

## 03 - [Modify] タブから [Combine] を選択して

「Shelfの」Modifyタブです。

![modifyタブ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/9967725c-eff9-2213-a69d-201fde2f02a6.png)

## 06

さらっと書かれていますが、ここがこのドキュメントで最も盛り上がる箇所の一つです。

# パート 3 カラーを追加する


## 01 - の間に color ノードを追加します

https://www.sidefx.com/ja/docs/houdini/network/wire.html

ここに書かれている「ノードを既存ワイヤー上に挿入する」がそれです。

## 01 - Render Region ツールをクリックし

またしてもいきなり名前が出てくるパターンです。特にHoudiniはひとくちにツールと言っても、ノードもツール / シェルフにあるのもツール / ビューポートの左に並んでいるのもツールなので、見習いには瞬時に判断付きかねます。
ここで言っているのは、ビューポートの左下の、**カメラのアイコンの下にあるツール**です。見当たらない場合は、**下向き矢印▼**を何度かクリックする or このバー上でマウスホイールをころころすると現れると思います。

![Render Region](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/98bd5484-58c6-9618-4074-71dcef61b4d6.png)

## 02 - /mat を閉じて /matnet を開きます

これも誌面スペースの都合という感はありますが、「/obj/single_brick/matnet1」ですね。
「/matnet」は探してもありません。

## 03 - ネットワークビューの戻るボタンを使ってジオメトリネットワークに戻ります

なぜネットワークビュー上で特に操作してないのに「戻る」しないといけないのか、という気分になります。この前の手順で、マテリアルパレット内で**brick_material**を作っていますが、この時、作成したPrincipled Shaderの名前を変えるために**ノードを選択した時点で**、実はネットワークビュー上では「そのマテリアルネットワーク内に降りる」という遷移が行なわれています。
ので、改めて、マテリアルネットワーク内から元のジオメトリネットワークに戻る必要があるのです。

ちょっと前にpolyextrudeでも移動していましたが、操作に併せてHoudini側で表示するネットワークを切り換えていることがよくあります。自動で移動しててくれないと不便になるので仕方ないですが、自分がどこにいるかは適宜意識する必要があります。

## 03 - [Material] パラメータの右端にある [Operator Chooser] ボタン

ちょっとややこしいですが、Materialノードのパラメータとして、「Material」という欄があります。
もし見えていない場合はパラメータペインをスクロールしてみてください。

![material param](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/474bc608-23c8-ce99-8ac3-304e56fbdf33.png)


## 04 - Render Region の右上にある x ボタンをクリックして閉じます

レンダリングしているあたりにカーソルを持っていくと現れます。カーソルが **レンダリング区外にあると見えません** 。

![Render Region close](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/8c7bfe17-46e8-f209-6eae-f1aa2435b9bc.png)

# パート 4: ティーポットに切り替える

## 01 - Sourcingフォルダからそれをネットワークビュー内にドラッグします

（これはほんとに何を指しているんでしょうか…？Sourcingフォルダ…？）
switchノードが作れれば問題ないのでスルーしました…

## 02 - points from volume ノード でボリュームに合わせてポイントが更新され、ブロックの新しい構成が得られます

たぶん、次の03の内容です。ここまでの手順ではまだこれは起こりません。

## 03 - その [Select Input] を 1 に  変更できるようになりました

ここはテンション上がりポイント2です。
ただ、このSelect Input切り替えを気軽に楽しんでいると、なにかのはずみでHoudiniが落ちたりします（マシンによると思いますが、メモリが少ないと多分。）

# パート 5: テクスチャを使ってポイントにカラーを追加する

## 01 - rubbertoyノードを選択し

パート2の03でリネームした「rubbertoyノード」ではなく、いま表示フラグをONにしたそのノードのことです。(リネームした方はcombineしたときに溶けてしまいました)

## 02 - [Asset] メニューから [Edit Asset Properties] > [Rubber Toy]を選択します

この「Edit Asset Properties」に表れる項目は、選択中のノードによって変わります。現れない場合は、Rubber toyが選択されているか確認してみてください。

## 02 - それを tex フォルダ内に保存します

texフォルダが無い場合、パート1の01でプロジェクトを作っていない可能性があります。確認してみましょう。

## 04 - Texture VOP を追加します

直前の「Attribute VOP」は本当に「Attribute VOP」という"SOP"ノードでしたが、ここで言っているのは「Texture VOPというノード」ではなく、「Texture」という"VOP"ノードです。ちょっとややこしいですね。

https://www.sidefx.com/ja/docs/houdini/nodes

↑このドキュメントでいうところの、「Attribute VOP」は「ジオメトリノード」に、いま登場した「Texture」という"VOP"ノードは「VOPノード」に飛ぶと見つけることができます。

## 04 - UV coordinate ノードを追加し、texture ノード

ここでいう「textureノード」は先ほどTexture VOPと書いてあったノードのことです。
また、UV coordinateはメニュー上では **UV coods** という名前になっています。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/9672340c-3373-11a4-d385-9201618c9297.png)

## 05 - すると、このノードの上のレベルに、このパラメータが追加されます

このあと確認しに行くので、今はスルーして大丈夫です。

## 05 - map の横に表示される小さなノブをクリックします

小さなノブとはこれのことです。出っ張ってる薄黄色いこれ。

![mapノブ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/06578e47-3c30-b0d7-01ec-283ad4da6858.png)

## 07 - [Points] フィールドの右側にある矢印を クリックし、[Cd] を選択します

このプルダウンメニューに「Cd」が現れるのは、その直前にattribute promoteでCdを作ってつないであるからです。
試しに、attribute promoteの左側の黄色いスイッチ（処理がバイパスされます）をONにすると、Cdがメニューに現れなくなります。

# パート 6: ブロック化デジタルアセットを作成する

> 一部のノードをラップして単一の Houdini Digital Asset [HDA] ノードを作成します。このアセットの内部に 含まれるパラメータを使ってネットワークを共有できます

デジタルアセット？と言われても何のことかパッと分からないのですが、要するに「これまで組んできたネットワークを**自作ノード**にする」（そしてあとで使いまわせる）ということです。これがHoudiniを使うおいしいところの一つです。

## 01 - [New Digital Asset From Selection...] を選択します。すると、それらが単一のノードに折りたたまれます

ここも微妙に落ちやすいところです。特に「単一ノードで折りたたむ」最中に落ちるとTEMPファイルにも中途半端な状態で残ったりするため、**復旧出来なかったりします**。直前の保存が大事です。

## 01 - HDA ディレクトリをダブルクリックします

何もしていなければ、多分フォルダ名は「hda」です。

## 01 - Create New Digital Asset ダイアログで、[Accept] を押した後、[Accept] をもう一度クリックします

正しくは、（hdaフォルダを指定するファイルダイアログで）[Accept] を押した **後に** 、
Create New Digital Asset ダイアログで、
[Accept] をもう一度クリックします

っぽいですね。

## 02 - Type Properties ウィンドウが表示されるので

ウィンドウ名的には**「Edit Operator Type Properties」**というのが現れます。でも、このあとも「Type Properties」ウィンドウとして出てくるので、**Type Properties**で覚えましょう。

## 02 - [Apply] を押します。[Accept] は押さないでください。押すとウィンド ウが閉じてしまいます

しばらく開きっぱなしにするので、特にディスプレイの小さいノートPCで作業している場合はとても邪魔です。うっかり閉じないよう気をつけたいところです。

## 03 - 新しいアセットノードの名前を brickify_asset  に変更し

「新しいアセットノード」がいきなりでてきて怯んでしまいますが、これはNew Asset＝さっきデジタル化したアセット＝**Brickifyのこと**です。
さきほどネットワークを選択してHDAとして保存して折りたたまれ、新たに**subnet1**という名前でネットワークに置かれています。

![new asset node = subnet1(Brickify)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/567bf357-ff2b-74e4-02ab-8ea995d615ed.png)

## 03 - この入力ノードは、

直前に出てきた「Subnetwork Input ノード」のことです。

## 04 - Select Input パラメータの名前をクリックし、Type Properties ウィンドウの [Existing  Parameters]  リストに左マウスボタンでドラッグします

見習い的にはけっこうキラーパスなオペレーション指示なのですが、
これは「選択中のSwitchノードの**パラメータペインから**」Select Inputを掴んで持っていくということです。カーソルを合わせるとグレーにハイライトされるので、なんとなく掴めそうな感じになります。

または、右クリックして「Export Parameter to Type Properties」、「alt + 中ボタンクリック」でも同じことができます。

## 04 - brickify アセットの  2  つのパラメータを含むフローティングパラメータウィンドウが表示されます

一瞬「なんだこのウィンドウは？」と思いますが、これはジオメトリレベルでbrickifyノードを選択したときのパラメータペインと同じ内容で、それを小ウィンドウとして切り出したようなイメージです。
下の階層にいるまま、上の階層のパラメータを確認できるので便利です。

## 05 - パラメータリストで Select Input パラメータをクリックします

「Edit Operator Type Properties」ウィンドウの「Existing  Parameters」リストのことです。

## 05 - 左側に、その外観を改善するためのオプションが

右側…？

## 05 - [Menu] タブをクリックし

いまshapeとかShapeと打った欄のちょっと上にタブがあります。
**スクロールすると見えなくなる**ので注意しましょう。

![Menuタブ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298373/20d74f26-788b-9666-23cb-bc25bc5adf5c.png)

## 06 - その Select Input パラメータをパラメータリストに昇格させます

しれっと**昇格**というニューワードが出てきてびっくりするんですが、先ほどswitchノードのパラメータを「Edit Operator Type Properties」ウィンドウに持っていったように、二個目のswitchのSelect Input パラメータもドラッグアンドドロップすれば大丈夫。

## 08 - [Parameter Description] セクションの [Channels] タブ

**[Parameter Description] セクション**がいきなり出てきたようで一瞬恐怖しましたが、実は先ほどから作業している「Edit Operator Type Properties」ウィンドウの右側のことです。Channelsは、Menuタブの左にあります。

## 09 - [Color]パラメータをクリックし、[Disable When] フィールド

Disable Whenは、[Parameter Description] セクションの [parameter] タブの下の方にあります

## 11 - 下のレベルに降りてみると、 ネットワークがグレーアウトされ、これらのノードが保護されていることがわかります

なので、今後は触れない状態になってしまっています。
もしノードの並びをきれいに整理しておきたい場合は**ロック前に**行ないましょう。


***

ここまでで、**ブロック化するためのノード**を自作することができました！
残りの2パートもぜひ試してみてください。
なにか、記事校正している気分になってまいりました。

~~いまのところ明日の枠は開いているようなので、どなたかぜひ。~~
次は hirapot さんの「[Calabi Yau 多様体を作ってみよう](https://qiita.com/hirapot/items/4a7c467151d856338e5e)」です！