【第二版】Houdiniで建築(入門編: ジオメトリ間のデータやり取り)

# はじめに
はじめましてQiita。ドイツで建築学生をやっているTaroです。
Houdiniを触り始めたのは去年の11月頃です。
この1年、敷地,作品のモデリングからダイアグラム,図面生成に至るまで、建築に関わる様々なシーンで、Houdiniを活用しました。
しかしこの記事を執筆時点まで、ほとんど誰も建築界隈でHoudiniを使っている人がいないので、本当に手探り状態で辛い1年でした。
でもHoudiniが連れて行ってくれる世界は、そんな気持ちを吹き飛ばしてくれるエキサイティングなものでした。

この記事は、
**"建築関係の人に、Houdiniを広めたい！"**
と思って書いたものです。
それゆえに、細かなTipとか技術的なことはあまり書かれていません。申し訳ありません。

### この記事のターゲット
- **建築関係の方で、最近"Houdini"をよく耳にする方。**
 (この記事にたどり着いた時点で、仲良くなれそうな予感。twitterで絡みましょう！)

- **Houdini超初心者の方。**
  (Houdiniの新たな魅力を見つけられるかも)

- **背景モデラーの方。**
  (建築物の見方,作り方などで、違うアプローチがあったらぜひ教えて下さい。)
- **Houdinistの方で、読み物として単純に楽しんでくれる方。**
(間違いがあればぜひ指摘お願いします。)

### 記事の内容
**0. Houdiniの魅力
1. 実際のシーン解説
2. 楽しいHoudiniの海へ
3. まとめ**


### サンプルシーン キービジュアル
![1545176571nxdWANYwRlLJPIf1545176567.gif](https://qiita-image-store.s3.amazonaws.com/0/239573/2b155fbb-d176-6825-589d-dc9dd21d003d.gif)
3～4ヶ月Houdiniを使って、一通り操作がわかったところで昔の作品をHoudiniで造ってみたものです。
今回の執筆に当たって、UV,マテリアルなど少し追加しましたがモデリング等はそのままです。
Hipアップは、整理できてないのでやめときます…

このサンプルシーンの画像は**全部スクショ**です。Eeveeに負けてないぞ、と思いたい！
※撮影時だけアンチエイリアスを上げてます。

### 制作環境
Houdini Indie 17.0.352
PC: ACER Aspire V3-772G(2015年モデル)
CPU: i7 4702MQ(Haswell) 2.2GHz 4Core 8Threads
RAM: DDR3 24GB
Graphic: NVIDIA GeForce GT750M DDR3 4GB
Storage: Samsung SSD 850EVO mSATA 500GB
ボリュームとかUV,エッジをいじってると、しょっちゅう落ちます。

# 0. Houdiniの魅力
Houdiniを紹介している本や記事を読むと、必ず、"ノードベース"とか"プロシージャル"という言葉が出てきます。これは確かにHoudiniの最大の特徴なんですが、具体的じゃないのでイマイチHoudiniの魅力が伝ってないと思うのです。僕の思うHoudiniの"具体的な"魅力は以下の4点です。

- **ジオメトリ間のデータのやり取りが簡単にできる。**
- **データが正確で透明性がある。**
- **繰り返しスタディできる。**
- **複雑な形を簡単に作れる。**

これらは、Houdiniが特殊な設計である、ゆえの魅力です。この設計を真似したツールを実装するソフトウェアが最近増えてきていますが(特にシェーダ関係)、ソフトウェア全体の設計が似ているものは未だにありません。なので、上記のような魅力に惹かれ、今後エンタメ業界だけでなく様々な分野へと広がっていくと思います。(建築にもきっと。)

この記事では、初歩的かつ建築にとって魅力的である
**"ジオメトリ間のデータのやり取りが簡単にできる。”**
という点に絞って、実際のシーンで簡単にHoudiniを紹介していきます。

# 1. 実際のシーン解説
サンプルのシーンです。

![15450061917H81EbEzJqutu_S1545006189.gif](https://qiita-image-store.s3.amazonaws.com/0/239573/8b69ed2d-6665-d831-14a3-4ba18f76d6d7.gif)

ジオメトリは、屋根,階段,柱梁,ガラス壁,床に分かれています。
![bandicam 2018-12-16 22-41-11-3182.jpg](https://qiita-image-store.s3.amazonaws.com/0/239573/d705922f-08a3-3fdf-035a-4064b706c7ee.jpeg)


そしてジオメトリ間では、大まかにこのようなデータのやり取りが行われています。

![bandicam 2018-12-16 22-40-42-8562.jpg](https://qiita-image-store.s3.amazonaws.com/0/239573/77b79e67-4190-a8dc-9cf3-4b1a7b2514cd.jpeg)
建築では、このようなジオメトリの相関関係が多数存在します。この関係性を維持しつつモデリング,スタディを行うのは、他のDCCツールでは大変な労力がかかりました。というか無理でした。(変更があれば、殆ど一からやり直し。)
Houdiniでは主に以下の4つの方法で、ジオメトリの関係性を構築することが出来ます。(他にもあればぜひ教えて下さい。)

- **ネットワークを分岐、合流させる。**
- **オブジェクトマージでノードを呼び出す。**
- **ノードのパラメータをパスで呼び出す。**
- **VOPまたはWrangleのInput、SpareInputでアトリビュートを呼び出す**(脱初心者レベル?)

少し、詳しく見ていきます。

---
### ネットワークを分岐、合流させる。
もちろんこれがHoudiniの最大の特徴で、これなしにはHoudiniを語れません。ノードベースのソフトウェアであるHoudiniは、すべての作業がノードを組み合わせたネットワークによって表現されています。また、Houdiniではジオメトリ自体のデータは基本的に保存されておらず、"ジオメトリ≒現在表示しているノード"となります。

さらに、グループやアトリビュートといった概念を用いることで、一本のワイヤにたくさんの情報を託す事ができます。これにより、**Houdiniは扱う情報量に比べネットワークがとてもシンプル**で、簡単にネットワークを変更できます。

そして、そのたくさんの情報が詰まったワイヤをネットワークの途中で分岐,合流させることができ、ノード同士(≒ジオメトリ同士)で様々なデータをやり取りすることが出来ます。
以下に示す窓のモデリングの例では、ベースポリゴンを窓枠と窓ガラスのネットワークに分岐し、その後合流させているのがわかります。

![1545006423npMQZi06eyYMUWV1545006417.gif](https://qiita-image-store.s3.amazonaws.com/0/239573/44501f58-05e2-fdec-bc0c-e48703520913.gif)

---
### オブジェクトマージでノードを呼び出す。
オブジェクトマージ"ObjectMergeSOP"とは、直接ワイヤを繋がずにジオメトリを呼び出す事が出来るノードです。主に、違うジオメトリレベルにあるジオメトリを呼び出すのに使います。
以下に示す梁のモデリングの例では、屋根の形状が"Roof"ジオメトリレベルから呼び出され、梁の形状を決定するBooleanに使われているのがわかります。

![1545015443k_RpYNE34j41afl1545015439.gif](https://qiita-image-store.s3.amazonaws.com/0/239573/d73b7fbe-2faf-be27-79f1-c86eaa7a228a.gif)

このジオメトリを呼び出すために用いるのは、"パス"と呼ばれるノードの住所を示すものです。各ノードには、OSにおけるファイル構造と同じような形式でこのパスが自動的に割り当てられており、**ワイヤレスなデータのやり取りをノード間で可能にします。**

![bandicam 2018-12-17 05-01-23-219.jpg](https://qiita-image-store.s3.amazonaws.com/0/239573/589f7620-0de2-ad65-519b-3a4298a42c70.jpeg)

---

### ノードのパラメータをパスで呼び出す。
前述の"パス"は、ジオメトリだけではなくノード内部のパラメータにも自動的に割り当てられています。これを利用して、異なるノードのパラメータを呼び出すことが出来ます。(もちろん自分自身のパラメータも。)
以下に示す階段のモデリングの例では、"slab"という他のジオメトリレベルにある"transform9"というノードの"FloorHeight"というパラメータを参照するパスが入力されているのがわかります。

![1545006058HcqQImwnhnVsXd71545006056.gif](https://qiita-image-store.s3.amazonaws.com/0/239573/13e15bbc-3512-2494-b70a-272f9fd778e4.gif)

```C#:パスの入力例
ch("../../slab/transform9/FloorHeight")
```

※"FloorHeight"は、自分でtransform9の中に作ったパラメーターです。Houdiniは、パラメーター増やすのにコーディングも新しいノードも必要なく、とても簡単で速いです。

このシーンでは、

```
(参照した階高/階段のパーツ数+1)*階段のパーツ番号
```

の解(蹴上)を、それぞれのパーツのy座標にプラスしています。
※上流で階段のパーツをPackしています。

![bandicam 2018-12-16 16-31-20-164 - コピー.jpg](https://qiita-image-store.s3.amazonaws.com/0/239573/b97ca463-03a8-37dc-5708-f06758e4c523.jpeg)

"パスの入力めんどくさい"と思うかも知れませんが、殆どの場合はコピペでいけます。
(参照先のパラメータ名のところで右クリック→"Copy Parameter"→入力先で右クリック→"Paste Relative References")

参考までにVOPの中身。
![bandicam 2018-12-16 16-32-05-591.jpg](https://qiita-image-store.s3.amazonaws.com/0/239573/4b52237d-5018-0df4-c31e-c824060cfe31.jpeg)

ちなみに、Wrangleではもっと簡単に同じことが出来ます。
![bandicam 2018-12-16 16-31-27-051.jpg](https://qiita-image-store.s3.amazonaws.com/0/239573/983feec8-217e-c84c-c9bd-b0c2dc2178a9.jpeg)

```C#:蹴上
float stepheight = ch("FloorHeight") / (@numpt + 1);
@P.y += stepheight * @ptnum;
```

### VOPまたはWrangleのInput、SpareInputでアトリビュートを呼び出す
先程(脱初心者レベル?)と書いた通り、ちょっと最初は難しいです。
ただ、とても強力な方法です。

VOPまたはWrangleSOPには、ジオメトリをインプット出来る場所が4つあります。
基本的には、一番左のインプットが元のジオメトリ、それ以外はデータを引っ張って来たいジオメトリを繋ぎます。




# 2. 楽しいHoudiniの海へ
### 学習初期はやっぱり辛い
Houdiniの魅力、ほんの少しでも伝わったでしょうか。今回紹介したデータのやり取りは基礎の基礎で、参考書などで言うところの最初の章のところです。あまりHoudiniっぽい派手な例はお見せ出来ませんでしたが、その分何をやっているのかがわかりやすいことを心がけました。

実際のところHoudiniは基礎の段階から覚えることが多く、しかもその学んだ基礎で一体何ができるのかあまり見えず、学習意欲が全然湧いてきませんでした。界隈では有名なこの画像、まさしくその通りです。 ;(

![houdini learning.jpg](https://qiita-image-store.s3.amazonaws.com/0/239573/d2d780c0-cca9-ed5e-a729-7d81a315822e.jpeg)

僕もまだまだ崖登りの途中ですが、学習初期よりも格段に楽しくなってきました。学習初期は無数にあるノードとVEXに圧倒されて、潰されそうになったものです。でも、上で紹介した**データのやり取りとCGの基礎知識に加えて、基本のノード30程度,VEX関数10程度**が扱えるようになったところで、"モデリングでやりたいことの大抵のことは出来る"と思えるようになりました。

---
### 苦しんだけど何とか耐えて、造ったもの サンプル
サンプルに、初期に苦しみながらやっていた実験を載せておきます。皆さんの(特に建築関係の方)学習のモチベーションが上がったら嬉しいです。

これは、VDBを使ったモデリングに挑戦したときのもの。図面の生成にもチャレンジしています。
![1545005937anqIX6HBq2TXQW91545005934.gif](https://qiita-image-store.s3.amazonaws.com/0/239573/a57447cc-f97f-d3b7-7e7a-d3a26f4c3d6a.gif)
VDBでのモデリング、僕のPCマシンパワーでは満足のクオリティまで持っていけませんでした。BooleanやConvertVDBで何度落ちてデータが消えたことか…
しかし使ってみて、近い将来**ヴォリュームモデリングで、ものを造る時代が来る**と直感しました。

---
これは、アトリビュートとWrangleで色分けやジオメトリの操作に挑戦したもの。
![1545005447kl5KydWfkvAVvT81545005441.gif](https://qiita-image-store.s3.amazonaws.com/0/239573/53018b80-fc7e-bbb3-52d7-05c56d762dc9.gif)
ボリューム(建築的意味)を階ごとに分割するのにヴォロノイ分割を使ってみたんですが、y座標毎に並んでくれなかったり,パックプリミティブにアトリビュートを乗せたいのにうまくtransfer出来なかったり,じゃあ分割前のアトリビュートをプリミティブに一回乗せるか、とか…いろいろと苦労しました。
**アトリビュートの扱いは、いじってるうちに体が覚えてくれます！笑**

---

### 敷地モデリングの救世主**"Mapbox"**
最後に、リリースされたばかりの**"MapboxSOP"**も紹介しておきます。**地形,敷地,既存建物モデルが一瞬で出来ます。**
イケハヤ風に建築クラスタを煽ってみると、
#### **まだ敷地モデルで消耗してるの？**
![1545006328UHWI8OrUjYrVHEF1545006325.gif](https://qiita-image-store.s3.amazonaws.com/0/239573/0b27a35e-3914-a9dd-b592-436609474562.gif)
※地形データで利用するGeoTiffは結構荒いので、まだまだ手作業が要りそうです。誰か国土地理院のデータ(xml?)をインポート出来るノードを開発を開発して下さい。笑

---
### Grasshopperとの比較
![ghhoudini.jpg](https://qiita-image-store.s3.amazonaws.com/0/239573/ec3fca69-4125-910c-9ce1-7715d5eb3fd8.jpeg)


せっかくなので建築業界でスタンダートになりつつある、同じくノードベースのソフトウェア"Grasshopper"と少しだけ比較してみます。
個人的には楽しいトピックなんですが長くなるので、メイントピックである"ジオメトリ間のデータのやり取り"についてだけ、手短に紹介します。
っていうか、これはもう上の画像のまんまです。

これがサンプルシーンのHoudiniのネットワークです。大して整理してませんし、今見ると無駄なノードがたくさんあります。
ざっくり言うと、点をパラメーターから生成してポリラインにしてSkinとSweepをかける、というネットワークです。
![bandicam 2018-12-19 02-37-44-645.jpg](https://qiita-image-store.s3.amazonaws.com/0/239573/65f3fd3b-aeff-8a92-1a25-b107171aa353.jpeg)

対して、これがGrasshopperのネットワークです。
同じシーンのGHデータが見つからなかったので、仕事でよく使ってたファサード生成のやつを引っ張ってきました。
![GH2.png](https://qiita-image-store.s3.amazonaws.com/0/239573/bb5f5e42-3070-1d6a-66e0-d160be35d8f0.png)
建物のボリュームに立面図を投影してボリュームをくり抜くだけプログラムで、対して複雑じゃないはずです。クラスター化したり,グループ化したりして、これでも頑張って整理してるネットワークなのです。
なのに、自分でも今や整理&解読不可能です。いつもネットワークを壊さないように、コピペしてそっと使ってます。(ある意味プロシージャルなのかｗ)

**同じ人間が使っても、ツールが違うだけでこれだけの差が出ます。**
Grasshopperには大変お世話になりました。でもHoudini使い始めたら、ズボラな僕はちょっともう戻れないんです。

あとでもう一回言いますが、だからこそ
**片付け下手,注意力散漫,怠け者の人にこそ、僕はHoudiniを勧めたいです。**

同じようなトピックで盛り上がってるのをいくつか見つけたので、リンク貼っておきます。
https://discourse.mcneel.com/t/grasshopper-2/37563/16
https://www.reddit.com/r/vfx/comments/6d1sb8/should_i_could_i_pick_up_houdini/
https://www.sidefx.com/forum/topic/47815/

# 3. まとめ
少し脱線しましたが、メインのトピックをもう一度おさらいします。
Houdiniでは、ジオメトリ間(ノード間)でデータのやり取りが3通りあります。

- **ネットワークを分岐、合流させる。**

Houdiniのネットワーク上では一本一本のワイヤにたくさんの情報が詰まっているので、ノード同士を繋ぐだけで簡単にデータのやり取りが出来る！

- **オブジェクトマージでノードを呼び出す。**

ワイヤレスでもジオメトリをやり取り出来る。住所は自動で割り当てられる！

- **ノードのパラメータをパスで呼び出す。**

パラメータだけをリンクさせることも簡単にできる。ネットワークがスッキリ！



僕は、これらのノード間のデータのやり取りがHoudiniの根幹を成す部分だと感じています。先に挙げたような他の魅力も、すべてこの基本的なソフトウェア設計の上に成り立っていると思います。
僕は几帳面なタイプではないので、散らかったネットワークばかりを日々組んでいます。それでもこの設計のお陰で、何とか製作時の思考を辿ることが出来ます。
なので、
"あのオブジェクトどのレイヤに入れたっけ？"
"レイヤ1は柱,レイヤ2はスラブ… あれ？レイヤ3って何のレイヤだっけ？"
みたいな、**片付け下手,注意力散漫,怠け者の人にこそ、僕はHoudiniを勧めたいです。**

#### **仲良くなれば、いろいろと面倒なことは全部Houdiniがやってくれます。そうしてクリエイティブに集中しましょう。**

Houdiniの海は広大ですが、皆さんとまたどこかで会えることを願っております。(まずはtwitterで!!)
この記事がきっかけでHoudiniに入門する方がいたら、とても嬉しいです。特に建築関係の方に届きますように。メリークリスマス！
![1545177532Oh_emGkbkBqqsJw1545177524.gif](https://qiita-image-store.s3.amazonaws.com/0/239573/3f71c761-0c14-a052-5942-7d0cc04ba988.gif)

---

追記: HoudiniはDCCツールの中でも、ぶっちぎりでリーズナブルに始められます。
体験版はアウトプット系に制限ありですが、機能の制限はないです！**無料でハリウッドのVFXアーティストと一緒の機能が使えます！**(だったと思う。)
**個人**利用なら**3万以下1年or5万以下2年契約**で始められます。こちらは、レンダリングが4k*4kまで、それ以外の機能は無制限！(だったと思う。)
**学生**ライセンスなら、**年間1万以下**です！(研究室単位？)

某Houdinistからの要請で取り急ぎ追記しましたが、間違いがあるかも。気がついた方、ご指摘よろしくおねがいします。

---
### 軽く自己紹介
ドイツの美大で建築を学んでいます。現在M2。
日本にいた頃は、主に建築現場で現場監督をしてました。
3D関係のソフトウェアの遍歴は下記の通りです。
ArchiCAD → Rhino+GH → C4D → Houdini
全部で4年間程、Houdini歴は1年程。

ドイツに友達いなくてコミュニケーションに飢えてます。
なんでもいいんで、Twitterで絡んで下さい。笑