Houdini 15.0 以降の簡単なトゥーンシェーディング設定の説明はこちらにあり。
使用したバージョン: 14.0.395
シーンファイルへのリンクは一番下にあり。
基本的な流れ
- オブジェクト読み込みと事前処理 (別ページ)
- サーフェスマテリアルの作成 (このページ)
- アウトラインの作成 (別ページ)
サーフェスマテリアルの作成
ここでは、ハイライト、ベースカラー、シャドーカラーの3色のトゥーンシェーダを作成する。
1. マテリアルのアサイン
マテリアルを作成し、オブジェクトにアサインする。
- 前のページに沿ってシーンを作成するか、ファイルダウンロードして squab_toon_setup.hip を開く。
- ネットワークビューで /shop に移動。
- まだ何もない。
- TAB ->Material -> Material Shader Builder を実行。
- vopmaterial1 というノードが出来る。
- vopmaterial1 を toonsurface と名前を変更。
- ネットワークビューで /obj に戻り、testgeometry_squab_object1 を選択。パラメータビューで、Material タブに行く。
- Operator Chooser を開き、/shop/toonsurface を選択。
- これで作成したマテリアルがジオメトリにアサインされた。
マテリアルのアサインに関する詳細はこちら。 - 隣の Render タブに行き、Render Polygons As Subdivision Surface (Mantra) をオンにする。
- Render View でカメラを /obj/cam1 にし Render ボタンを押せば、以下のように真っ白な Squab が表示される。
ここから実際にマテリアルを編集していく。
2. VOP マテリアルの編集 その1: ベースマテリアル
最初に、ベースカラー、シャドーカラーの2色のコントロールを設定する。
- /shop に戻り、toonsurface を選択。パラメータビューには、コンパイラのフラグと Force Compile ボタンのみがあり、俗人を寄せ付けない雰囲気をかもし出している。
- ダブルクリックするなり、'i' キーを押すなりして中に入ると以下のようになっている。
このパネルの右上に薄字で VEX Builder とある通り、ここは VEX (Vector EXpression) を組むところであり、ビジュアルプログラミング環境である。詳細説明を書き出すとそれだけで終わってしまうので、ここで必要な要点だけを書くと- 左側にある二つの globals は、このノード (toonsurface) がアサインされたジオメトリから取得できるデータの種類のリスト。プログラミング的に言えば、グローバル変数。サーフェスシェーディング用の surface_globals とディスプレイスメントシェーディング用の displacement_globals の二つが用意されている。
- 右側の 3つの output 関係のノードがシェーディング結果をアサインされたジオメトリに送るためのノード。こちらもサーフェス用の surface_output とディスプレイスメント用の displacement_output の二つが用意されていて output_collect でまとめられている。
- 基本的には、入力である globals ノードと 出力の output ノードの間に必要なノードを作成、データを左から右にデータをわたしていく。
- 各パラメータは、省略形で書かれていて、タイプごと (vector, float, int, string 等) で色分けされている。カーソルをパラメータの上に置けばフルネームが表示される。
- 同じデータタイプ同士の接続は実線で表示され、そうでない場合は破線で表示される。
- ノードの入力には必ずしも接続が無ければならない訳ではない。例えば、globals の P (=Position: 座標) と 出力の P、 N (法線) と N など、名前が同じでなおかつそののままで取り込むのであれば、接続線が globals とそのノードの間に無くとも接続があるものとみなされる。
- 今回、このシェーダではディスプレイスメントは行わないので displacement_globals, displacement_output, output_collect は不要。よって削除。
- してもしなくとも良いが、した方がネットワークをたどり易くなる。
- TAB->Shading->Lambert を実行。 lambert1 ノードが出来る。
- lambert1 の clr (Color) 出力を surface_output の Cf 入力に接続。
- Render View でレンダリングをすれば、以下のように Lambert の結果になる。
-
この場合、lambert1 の入力にある nN (normalized N: 正規化した法線) と surface_globals の N を (normalize ノードを間に挟んで) 接続する必要は無い。接続しても良いが(要 normalize ノードによる正規化)、これは接続されているとみなされる。
- TAB->Combine ->Color Mix を実行。 colormix1 ノードが出来る。
Color Mix には二つの色が定義され、これらを組合せを操作可能。 - colormix1 の clr (Color) 出力を surface_output の Cf
入力に接続。lambert1 との接続が外れるが、lambert1 ノードはまた使うので削除しない。
レンダリング結果は、colormix1 で定義されている二つのデフォルト色の中間色。
これは Bias Amount が 0.5 となっているから。0 にすれば、Primary Color の色に、1 にすれば Secondary Color の色になる。これをジオメトリの法線の値で色を切り替えられるようにする。 - lambert1 の clr を colormix1 の bias に接続。
接続線は破線だが、レンダリング結果は以下のようになる。 - TAB -> Utility -> Compare を実行。 compare1 ノードが出来る。
- compare1 ノードを、lambert1 と colormix1 の間に挿入。ネットワークはこのようにつながっている。
レンダリング結果は以下の通り。
Primary Color が明るい色、Secondary Color が暗い色になる。
Test を "Greater Than" にすれば反対になる。
Compare to float の値で明るい部分と暗い部分の割合を調整可能。 - colormix1 で、
- Primary Color: 0.5, 0.5, 0.5
Secondary Color: 0.1, 0.1, 0.1
3. VOP マテリアルの編集 その2: ハイライト
ハイライトカラーを追加する。
- TAB->Shading->Specular を実行。 specular1 ノードが出来る。
- specular1 の illum (Illumination) 出力を surface_output の Cf 入力に接続。colormix1 との接続が外れるが、colormix1 以下のネットワークはまた使うので削除しない。
レンダリング結果は以下のようになる。 - specular1 の Intensity を 1に、U Roughness を 0.5に変更して再度レンダリング。
- TAB->Combine ->Color Mix を再度実行。 colormix2 ノードが出来る。
- specular1 の illum を colormix2 の bias に
- colormix2 の clr を surface_output の Cf に
レンダリング結果は以下の通り。 - TAB -> Utility -> Compare を再度実行。 compare2 ノードが出来る。
- compare2 ノードを、specular1 と colormix2 の間に挿入。
- Test を "Less Than (<)" に
- Compare to Float を 0.2 前後にする。
レンダリング結果は以下の通り。 - colormix1 の clr 出力 を colormix2 の secondary に接続。上記の画像で青い色の部分が colormix1 で定義したグレー2色で置き換わる。
- colormix2 の Primary Color を 0.75, 0.75, 0.75 に変更。レンダリングを実行すると以下のようになる。
最終的なネットワークは以下の通り。
4. VOPパラメータの露出
ここまでの状態では、マテリアルの設定を行うためには、いちいち toonsurface 内に入ってノードを選択し変更を行わなければならず、使い易いとも言えない。そこで、必要なパラメータのみを toonsurface のパラメータ インターフェース上にに露出 (プロモート) することで、ノード内に入ることなく必要な変更が行なえるようにする。
- パラメータのプロモートは、パラメータビューで各パラメータの右端に位置するギアアイコンから LMB (左マウスボタン) -> Promote Parameter を実行することで行う。ここでは以下のパラメータに対して行う
- colormix2 ノードを選択。 Primary Color で Promote Parameter を実行。
- compare2 ノードを選択。 Compare to Float で Promote Parameter を実行。
- specular1ノードを選択。 U Roughness で Promote Parameter を実行。
- colormix1 ノードを選択。 Primary Color で Promote Parameter を実行。
同様に Secondary Color でも Promote Parameter を実行。 - compare1 ノードを選択。Compare to Float で Promote Parameter を実行。
- 'u' キーを押して、一つ上に上がる。そうすると、Promote (昇格) したパラメータが toonsurface のパラメータとして表示されている。
ただ、この状態では Primary Color と Input 2 がそれぞれ 2 個あり、わかり易いとは言えない。 - よって、上記画像の赤枠で囲ったギアアイコンから Edit Parameter Interface... を実行。
- 表示される Edit Parameter Interface の 中央の Existing Parameters リストで変更したいパラメータをハイライト選択、右側の Parameter Description 以下の Label を変更し、わかり易い名前にする。
パラメータの名前 (Name) は変えずにラベルの変更だけを以下のように行う。- (最初の) Primary Color を Highlight Color に
- (最初の) Input 2 を Highlight Boundary に
- U Roughness を Highlight Roughness に
- (2 番目の) Primary Color を Base Color に
- Secondary Color を Shadow Color に
- (2 番目の) Input 2 を Shadow Boundary に
- コンパイラフラグと Force Compile ボタンが見たくなければ、それぞれ Interface Options 以下の Invisible をオンにすることで、パラメータビューに表示されなくなる。
ここまでを実行して Accept ボタンを押した結果は以下の通り。
これで中に入ることなしにコントロールが可能になった。
おまけ
- ビジュアルプログラミング言語と最初に述べたとおり、SHOP マテリアルは実際にはコードで定義されている。確認するには toonsurface ノード上で、RMB -> View VEX Code... メニューを実行。すると、こちらのように C 言語に似たコードで記述されていることがわかる。
これがコンパイラフラグとともにコンパイルされてレンダリングされるわけである。 - マテリアルは必ずしも /shop 以下に作らなくとも良い。マテリアルの設定に関してはこちらを参照。
シーンファイル:
- mantra_toonshading.zip (329KB) ここで使っているファイルは
- squab_toon_setup.hip
- squab_toon_surface_s1.hip
- squab_toon_surface_s2.hip
- squab_toon_surface_p.hip
0 件のコメント:
コメントを投稿