14
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HoudiniAdvent Calendar 2020

Day 20

(]ミズクラゲ(]ミ (]彡 (]ミ (]彡(]ミ

Last updated at Posted at 2020-12-20

#はじめに
この記事はHoudini Apprentice Calender 2020の20日目の記事です。
毎日投稿されるアドカレの記事や作品のクオリティの高さにビビりながらも投稿させていただきます。
Houdiniユーザーはすごい人が多くて怖いです。


で、今回はこれでいこうと思います↓
Render_Image_F.png

有名なクラゲランキング第1位のミズクラゲです。(私個人の意見です)
これのメイキングをしようと思います。
この作品自体はHouly2020の27日目[Translucent]で作成したもの (に少し手を加えたもの) です。
houly2020の作品ということでスピード重視の作りになってるところが多々あります。
完全なプロシージャルではないのでそこはご注意ください。
ただ、ある程度は意識して作っています。
特に度々vopが登場しますが、たいていのものにはパラメーターを用意しているので、必要に応じて調整できるようにしています。

また、ミズクラゲの生体について詳しいわけではないので、本物と違うところがあるかもしれません。できる限りの観察と再現はしたつもりですが、なにか違う所があれば教えていただけると助かります。

まずはモデリングの解説をし、簡単にレンダリングについても書いてまとめようと思います。
シーンだけ見れればいいと言う方はページの一番下まで。
バージョンはちょっと古いですが、18.0.348


#モデリング
##構成要素について
モデリングする前に何が必要かを考えます。
私はHoudiniでモデリングする場合構成要素を分解して作成し、最後にマージでくっつけています。
ミズクラゲを作成するのに必要だったものは以下です。


image.png

触手
image.png


image.png

口腕
image.png


image.png

水管
image.png


これらを順に解説していきます。
また、すべてを詳細に解説はしてないです。より詳細はデータを見ていただき、なにかわからないことがあれば聞いていただければと思います。

ノードの全貌↓
image.png


##各パーツ作り方
###体
ノード↓
image.png
流れは
・体を八等分したような板形状を作成
・複製してベースの形状を作成
・膨らませる
・厚みをもたせる
という感じです。


circle3-polyextrude2 まで

image.png
circle3ではArcTypeをSlicedArcにしてArc Anglesを45にしピザ風の形状を作成しています。↓
image.png
grouppromote3までで押し出すためのエッジグループを作成しています。↓
image.png
polyextrude2で押し出し↓
image.png
polyextrude2はFront Groupにチェックを入れて弧のグループを取得しておいてます。

きれいなポリゴン割が欲しかった&弧の部分のエッジグループが欲しかったのでこのような手順で作成。


pointvop8-fuse3 まで

image.png
pointvop8で弧の両端を中心側に移動させます。↓(画像はわかりやすいように極端に変形させてます。)
image.png
vop内
image.png
Copy and Transformで複製&回転させます。
その後fuseで共有エッジをくっつけます。
image.png

これでベースの形状完成です。


#####pointvop7-merge4 まで
image.png
pointvop7とpointvop11の中身は同じです。
vop内は↓
image.png

このvopでは形状を膨らませています。
同じ中身で2つのvopがあるのはパラメーターの違いで、内側と外側の面を作成しているからです。
この2を合体させて厚みを付けています。

pointvop7↓(内側)
image.png
pointvop11↓(外側)
image.png

ここで作成した内側のモデルは今後色々なパーツのポジション情報を決めるための基準になります。
そのため派生先が多いです。
 ***
#####blast1-reverse3 まで
image.png

内側と外側の面を作ってマージしただけだと隙間ができてしまうので、これを埋める面を作成していきます。

色が濃いところが穴↓
image.png

blastで形状の輪郭を取得します。polyextrude2で取得しておいたFront Groupを使ってます。
image.png
Addで板に
image.png
PolyPathでエッジに変換
image.png

同じことをもう片方の形状でも行います。(blast2-polypath2まで)
結果↓
image.png

mergeをしskinで抽出したエッジ同士をくっつけて面にします。
image.png

最後にreverseして穴埋め用のポリゴン完成。


#####merge5-group7まで
image.png
体のポリゴンと穴埋め用のポリゴンをmerge&fuseで体形状完成。
レンダリングでマテリアル分け等したいのでbodyというグループを作っておきます。
image.png


###触手
全体のノード↓
image.png
流れは
・触手となる線を作成
・Copy to Pointsで配置
・ノイズをかける
・厚みをもたせる


resample1-pointvop14 まで

image.png

触手は体の内側と外側の境界線くらいに生えているので、先程抽出した内側形状のエッジを使いまわして作っていきます。ということでpolypath1からresampleに繋ぎます。
image.png
resampleでポイント数を調整します。このあとcopytopointsで触手が配置されるポイントになります。
image.png
pointvop14では
触手の生える方向を設定しています。
image.png

#####line2-copytopoints1 まで
image.png

line2がcopytopoints1で配置されるので触手の長さをline2のlengthで決めておきます。
また、ノイズをかけて形状に抑揚をだすので、ポイント数も多めにしておきます。(ここでは50)

pointvop13は、後工程で線の太さやノイズの効き具合などを調整できるように使えるアトリビュートを設定しています。
vop内↓
image.png
ポイントナンバーをフィットするだけのシンプル構成。

copytopoints1で線を配置
image.png


pointvop12-group8 まで

image.png

pointvop12で線にノイズをかける
image.png

polywire3でポリゴンに変換。
Wire Radiusはpointvop13で作成したアトリビュートを使って、先端は細くなるようにしてます。
image.png

最後にマテリアル分け用のグループを作って、触手完成。
image.png


###目
ノード↓
image.png
ここは短いのでいっきにいきます。


目は触手が生えているところの中でも少し窪んでいるところにあります。
なので触手と同じように、内側の輪郭線を利用して作成していきます。

measure1ではポイント単位でcurvatureを取ります。
これで輪郭線の中でも角度のついたところがわかるようになります。
この値を使ってblastすることで窪んでる部分のポイントだけを取れます。
blast9までの状態↓
image.png

あとは、抽出できたポイントを使って球体を配置するだけです。
グループを作っておしまい。
image.png


###口腕
ノード↓
image.png
口腕はクラゲの口から生えてるやつです。
ということは体の内側の頂点部分あたりから生えているはず。。。
なのでまた体のノードから派生させて作っていきます。今回は内側形状ができてすぐのreverse4ノードから派生させます。


#####blast3-copytopoints2 まで
image.png
blast3で体の内側のてっぺんを抽出します。
運良くポイントナンバーの0を取得すればいいだけでした。

image.png
circle4-pointwrangle3で口腕が生えてくるポイントのベースを作成します。
circle4はdivisionsを4に。
pointvop17で口腕の生える方向を設定。
pointwrangle3では後にポイント番号のアトリビュートが必要になるので別の名前で設定しておきます。
code↓
@a = @ptnum;
(@aという雑さ・・・。)

image.png
この2つのノードは触手の配置前の線のノードと全く同じです。
触手とは長さが異なるので口腕用にパラメーターを変えます。

copytopoints4で口腕の生えるポジションを設定できています。
copytopoints2で実際に口腕のベースとなるラインが配置されます。
image.png


#####line4-pointvop19 まで
image.png

pointvop21でcopytopoints3で配置する線の方向を設定してます。
pointvop20で線にノイズをかけてます。
image.png

line4、pointvop18は触手や口腕の配置前の線と同じです。
copytopoints3で配置し、pointvop19でノイズをかけてます。
image.png


#####attributepromote1-group9 まで
image.png
attributepromote1でポイントアリビュートaをプリミティブレベルに移動させます。
名前はnameにしておきます。
こうすることでforeachを使い口腕を一本ずつ処理することができます。

polypatchで面にします。
image.png

polyextrude3で厚みを出し、smooth3でなめらかにします。
image.png

最後にグループを作っておいて口腕終了です。
image.png


###胃
ノード↓
image.png
三日月みたいなやつを一個作って複製する流れで作っていきます。

#####circle2-fuse2まで
image.png

circle2でベースとなるラインを作り、後に厚みをつけるためにpointvop5でpscaleアトリビュートを作成します。
vop内↓
image.png
値はポイントナンバーの半分を境に対象でいいので、ポイントナンバーを2で割ってfitしています。
image.png

clipで実際に半分にして
image.png

Mirrorで戻し、fuseでポイントをくっつけます。
image.png


####transform3-ray1 まで
image.png

一連のtransformノードで胃の大きさやポジションを大まかに編集します。
rayで体の内側のポリゴンに吸着させるのでだいたいで。
正直こんなにたくさんtransformノードを使う必要はないです。当時いろいろあったのでしょう・・・。(覚えていない)
image.png

rayで体にピタッとくっつけます。
image.png


#####polywire1-group5 まで
image.png

polywireで厚みを付け、Copy and Transformで4つに複製します。
image.png

少しの脱線 (胃の数について) ミズクラゲは通常胃が4つですが、個体によってはその数が多いものもいるようです。6つだったり8つだったり・・・。 ですが今回はそこはプロシージャル対応してません。やること自体は難しいことはないですが、スピード優先で実装しませんでした。 それでも、少しtransformやCopy and Transformの値を編集すれば簡単に実現できますね。あとから簡単に変えられるのは本当に嬉しいですね。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548340/25a04b01-231e-b04f-40e3-b7609ca9a85f.png)
*** remeshでポリゴンの分割数を増やし、mountainで凸凹させます。 クラゲの胃が凸凹してるかどうかは知らないのですが、検索した画像を見て凸凹させたほうがいいかと思いました。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548340/af31fea3-daa3-32f6-7188-8cafb95a17e7.png)

transformで体の内部に位置するくらいの場所に移動させ、これまで通りグループを作成して胃は完成です。
image.png


###水管
ノード↓
image.png
ミズクラゲの制作で一番悩んだところです。
クラゲの血管のような部位で独特な模様があります。

####構成
水管は大きく2つに分けて考えました。
image.png
複雑に入り組んでいる青い線のパーツとシンプルな赤い線です。(便宜上色付けしてます)


####赤い方
image.png
こっちはとてもシンプル。
線を作って、8本に複製し、ノイズを加えて完成です。
工夫点としては、青い方の線と長さを合わせる必要があるので、line1にはエクスプレッションを使用しています。
image.png


####青い方
#####circle1-polyextrude1 まで
image.png
このノードは冒頭の体のベースとなるピザ風の形状を作ったときの構成と全く同じです。
ただこっちは赤い方の線をいれるスペースが必要なので、複製したときに円になりません。
image.png

形状の大きさを体のときと同じサイズにする必要があります。
今回はやっていませんが、エクスプレッションでつないだりHDA化してしまってもいいかもしれません。


#####divide1-groupcombine1 まで
image.png
divideで三角ポリゴンにします。独特な模様を再現するのにremeshよりdivideの方が適していました。

grouppromote2からgroupcombine1までで、弧の部分で且つポイント1つ飛ばしのグループを作成します。
image.png


#####pointvop2-copy1 まで
image.png
pointvop2で形状を変形させてます。
image.png
原点からの各ポイントの距離を活用しスケールさせて変形させています。
image.png

Copy and Transformで複製
image.png


#####pointvop1-smooth1 まで
image.png

pointvop1でポイントの位置にノイズをかけます。
image.png

その後Find Shotest Pathを使って線を抽出することで模様になります。途中で作った弧の部分のグループはEnd Pointsとしてここで活躍します。
image.png

fuseで近いポイントをある程度くっつけるとよりそれらしい模様になり、最後にsmoothを使えば終了です。
image.png


####水管の合成&変形
image.png
2つの水管をマージします。

その後、pointvop10で形状を変形&アルファの設定&線の太さの設定をしています。
形状に関しては、体の内側を膨らませたときのものと全く同じです。(pointvop7)

polywireで厚みをだし、グループを作成して終了。
image.png


###各種パーツ作成終了、その後
####モデル完成
マージして
image.png
ミズクラゲのモデル完成!


####その後
image.png
以降にtransformノードでオブジェクトを移動させ、簡単にレイアウトします。
attributenoiseでポジションにノイズをかけ、クラゲのフヨフヨ感を出します。
image.png

最後にblastで各種パーツに分けます。
このblastを他のgeometryノード内でObjectMergeを使い呼び出します。
image.png
パーツの少ないときはこの方法でマテリアルのつけかえや、ライティング時のオブジェクトの非表示などをやりやすくしています。
が、もっといい方法あるんじゃないかと疑っています・・・。パーツが多いとこの方法使えませんしね。


#レンダリング
レイアウトしたので画像に書き出していきます。
流れとしては、
・最初にカメラを決める
・レイアウトの微調整
・ライティングや質感調整
というのがおすすめです。
カメラを動かすと、それまでに行ったライティングやレイアウトなどの作業がすべて無駄になるので、最初に決めたカメラは絶対に動かさないことが重要です。


###カメラ
フレーム内にいい感じに収めます。自分の好きなようにやります。
またこのときにレイアウトの微調整もします。
設定は特に変わっったことはないですが、DOFを使いたいのでFocus Distanceのちょうどいい値を探しておきます。


###マテリアル
特に変わったことはしていません。マテリアル名も適当・・・。
image.png
胃のマテリアルにだけfalloffを透明度につなげています。少しベタ塗りっぽく出やすかったので情報量を増やすのが目的です。
クラゲの画像を見ていると、輪郭が明るいような画像が多いのでほかのマテリアルにもfalloffを使って演出してもいいかもしれませんね。

最初は、透明な質感をtransparencyだけで再現しようとしていましたが、水管や胃が暗くなってしまうなどもありOpacityも調整しました。


###ライト
エリアライトを適当に置きます。
クラゲ自体はほぼ無色透明なので、画像や水族館で見ているようなものはライトの影響で色がついているかと思います。
なのでライトには色を入れています。今回は王道に青。青の中でもライトごとに色味を変えています。
配置はクラゲの輪郭付近にあたりつつ、カメラ側を向いている面にはあまり当てないようにしました。
輪郭付近でクラゲの形状や色味の表現。広い面では透明感を出すように心がけました。


###背景
####背景色
image.png
球体に色をつけて背景にしています。
色はpointvopでつけてます。
image.png


####塵
image.png
適当にポイントをばらまいて塵を作ってみました。
臨場感が出る気がします。
image.png


###レンダリング
Mantraでレンダリングします。私はそれ以外に選択肢がないです・・・。
設定まわりで変わったことはないです。
Enable Depth Of Fieldにチェックを入れて、各種サンプル数は適宜上げておきます。


###出力
Renderボタン押して出来上がりをまちます。
でもだいたいの場合出来上がりに満足いかず、質感設定やライトに戻ります。以降満足行くまで繰り返し。


#まとめ
ざっくりですが、ミズクラゲのモデリング~レンダリングまでの解説でした。
ここまで読んでくださった方ありがとうございます。
Houly2020の作品ということで不完全なところもあります。
そういうところは是非是非アレンジをしていただければと思います。
ありがとうございました。
↓Hipのダウンロードはこちらから
Hipデータ

14
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?