toonshading outline

Houdini 15.0 以降の簡単なトゥーンシェーディング設定の説明はこちらにあり。

使用したバージョン: 14.0.395
シーンファイルへのリンクは一番下にあり。

基本的な流れ

  1. オブジェクト読み込みと事前処理 (別ページ)
  2. サーフェスマテリアルの作成 (別ページ)
  3. アウトラインの作成 (このページ)
    1. ジオメトリの前処理
    2. アウトラインマテリアルの作成
    3. Wren の使用

アウトラインの作成

1. ジオメトリの前処理

アウトラインは、ジオメトリを複製し、それにディスプレイスメントマテリアルをアサインして作成する。このために、まず最初にオブジェクトを複製する。元オブジェクトをコピペしても良いが、ここでは Object Merge ノードを使って一つのオブジェクトノードが参照されるようにし、オブジェクトの差し替えを容易にする。

  1. 前のページに沿ってシーンを作成するか、ファイルダウンロードして squab_toon_surface_p.hip を開く。
  2. /obj 以下に Geometry ノードを追加。geo1 ができるが、outlineShape に名前を変更。
  3. outlineShape の Render タブで、Render Polygons As Subdivision Surface (Mantra) をオンに、さらにその下の Geometry タブで Backface Removal をオンにする。
  4. outlineShape ノードをダブルクリックするなり、'i' キーを押すなりして中に入り、そこにある File ノードは削除。
  5. TAB-> Import -> Object Merge を実行。object_merge1 が追加される。
  6. Object 1 の Operator Chooser をクリック、 /obj/testgeometry_squab_object1/attribdelete1 (または normal1) を選択。

    Accept を押して確定。
  7. object_merge1 ノードの出力から reverse ノードを追加、Vertex の設定を "Reverse U" から "Reverse" に変更。作成された reverse1 に表示・レンダーフラグを設定。
  8. 'u' キーを押して上にあがる。これでアウトライン形状の準備は完了。
    ちなみに toonsurface マテリアルがアサインされた testgeometry_squab_object1 を非表示してレンダリングを行うと面が裏返った奇妙なレンダリング結果になる。
ここまでが squab_toon_outline_setup.hip

2. アウトラインマテリアルの作成

  1. ネットワークビューで /shop に移動。
  2. TAB ->Material -> Material Shader Builder を実行。
      vopmaterial1 というノードが出来る。
  3. vopmaterial1 を toonoutline と名前を変更。
  4. ネットワークビューで /obj に戻り、outlineShape を選択。パラメータビューで、Material タブに行く。
  5. Operator Chooser を開き、/shop/toonoutline を選択。
      これで作成したマテリアルがジオメトリにアサインされた。
  6. レンダリングを行えば、サーフェスマテリアルと同じように真っ白な Squab が表示される。
  7. ネットワークビューで /shop に移動。
  8. toonoutline ノードをダブルクリックするなり、'i' キーを押すなりして中に入る。今回は displacement を行うので、前回削除したノードは削除しない。
  9. TAB->Displace->Displace Along Normals を実行。displacenml1 ノードが出来る。
  10. displacenml1 出力の dispP を displacement_output の入力 P へ、
    displacenml1 出力の dispN を displacement_output の入力 N へ接続する。
    Displacement Amount を -0.01 にする。
  11. /obj で testgeometry_squab_object1 を再表示。レンダリングを行えば白いアウトラインが出来ているのがわかる。
  12. TAB->Utility->Property を実行。properties1 ノードが出来る。
  13. properties1 のパラメータビューで、ギアアイコンから Edit Rendering Parameters を実行
    1. 左下の Filter 部分に displace と入力、表示されるパラメータの数を制限する。
    2. 左側の Create Parameters のリスト (Render Properties であること) root -> Mantra -> Shading のフォルダをハイライト
    3. 中央の 右向きの矢印ボタンをクリック、パラメータを追加する
    4. Accept を押して確定、ウィンドウを閉じる。
  14. properties1 の出力 (properties) を output_collect の入力 shader3 に接続。
  15. properties1 のパラメータウィンドウで
    • Displacement Bound を 0.5
    • True Displacements をオンにする
  16. properties1 の設定の有無をフルピクセルで比べると以下の通り。左が無。

    右 (プロパティあり) の方がスムーズなアウトラインになっていることがわかる。
    一応、これで満足のいくアウトラインが出来たが、現状ではアウトラインの色を変更することが出来ない。よって、パラメータを追加して色が変更できるようにする。
  17. TAB->Utility->Parameter を実行。parm1 ノードが出来る。パラメータビューで
    1. Name を color
    2. Type を "Color (color)"
  18. parm1 の color 出力を surface_output の Cf 入力に接続
  19. parm1 の Color Default を黄色 (0.9, 0.9, 0) にしてレンダリングするとこのようになる。
  20. toonsurface で行ったのと同様、次の二つのパラメータを Promote して、シェーダネットワークに入らなくとも変更が行えるようにする。
    • parm1 の Color Default
    • displacenml1 の Displacement Amount
ここまでが squab_toon_outline_complete.hip

レンダリング結果

    ターンテーブルアニメーション
    Dell M4700 (Windows Experience Index で 6.9) で、サンプリング設定などすべてデフォルトで 1 フレーム約3秒前後。
    Linux でのバッチレンダリングでは2秒弱/フレーム。

おまけ

別ジオメトリを読みこみレンダリングしたもの
testgeometry_squab_object1 の中に File ノードを作成、.obj ファイルを読み込み、これを attribdelete1 に接続するだけ。

別の方法: wren

まったく別の方法として Wren というレンダーノードを使う方法もある。これに関してはこちら

シーンファイル:

  • mantra_toonshading.zip (329KB) ここで使っているファイルは
    • squab_toon_surface_p.hip
    • squab_toon_outline_setup.hip
    • squab_toon_outline_complete.hip
  • 恐竜のモデル

1 件のコメント:

  1. このコメントはブログの管理者によって削除されました。

    返信削除