新しい COP ツールのパワーを紹介するために作られた、立派な壺を作る職人の静止画です。実際のテクスチャ作成時の工程をたどっていきます





初期レイアウト

物体の収まり具合を把握するため、最初に初期レイアウトを行いました。オンラインで見つけた大量のモデルを全体に配置しています。

 ヒント

オンラインアセットは、参照点をひとつ決めるとスケールの判断がはるかに容易になります。ここでは寺院を参照点としたことで、オブジェクトの適切なスケール設定の役に立ちました。

絨毯の作成


絨毯ではまず、リファレンスを収集しました。ここで作ろうとしたアラビア/ペルシャ風の世界観の構図に合いそうな絨毯を調べ、最終的に、その設定と一致しつつ比較的簡単に作れそうな、麻の編み紐を巻いて作られたラグにすることにしました。
形には円形を選び、編み紐には Everything CG のコードを使用しました。最初に編み紐を作り、必要に応じて調整を加え、その後、P 値をランダム化してきれいな渦巻きにしました。紐を巻いてラグ状の形にするのには Path Deform を使用しています。



そこに Poly Wire を適用すればラグのベースは完成ですが、さらにシーンに馴染ませたいと思い、上に様々なものが置かれることで生じる変形を再現することにしました。そこで、シーン内の全てのジオメトリをインポートして簡素化して赤色にし、その色付オブジェクトの Cd アトリビュートをラグに転送。その際、Attribute Transfer を使用すると、影響を受けるポイントの Cd アトリビュートのサイズを変更でき、後ほどやわらかい変形を表現する際に、より制御が利くようになります。

    ごく微細なディテールですが、見た目に違いが出ます。


外側の線状のフリンジも同じアルゴリズムを使用しています。まず円を作り、そこにラインを数本コピーした後 For-Each Loop を実行して、線のサイズとシェイプをランダム化しました。そこに、先ほどと同じパスの変形を適用するとこのようになります。

後は、ラグの本体とフリンジを結合すれば、麻の編み紐のごくシンプルなラグの完成です。

レンダリングして何点か調整を加えた状態がこちらです。


窓の作成

次の工程は、より雰囲気に合った窓を作ることでした。ネットでちょうど良いパターンを見つけたのでそれを再現することにしました。細部まで把握するためにパターンを分解したところ、シンプルな形で構成されており、ごく簡単に再現できることがわかりました。



ほどなくして、参考画像にかなり近いパターンができました。

少しずつ形になってきました。


COP テクスチャの作成

リファレンス

参考画像には、1983年に刊行された The Metropolitan Museum of Arts 広報誌の表紙を使いました。表面にはシンプルですが目を引くパターンの意匠が施され、形は事前にオープンソースのアーカイブから拾た壺によく似ています。ご覧の通り、表面のパターンは分割されており、格子にクローバー状の形がはめ込まれたメインパターンの下に、線で構成されたパターンが配置されています。ここでは、クローバーのメインパターンから作りました。

メインパターン

このパターンの図は、大量のシンプルなシェイプをオーバーラップさせて構成しました。例えば、内側のベースは、2本の線を中央で交差させただけです。周囲の点々とトゲは、SOP レベルからポイントをインポートし、そこにStamp Points (COP) ノードを使って SDF シェイプを重ねて作りました。
メインパターンの仕上げには Tile Pattern ノードを使用。色合いを修正して参考画像の雰囲気に近づけました。

下部パターン

この部分は即興で作ることにしました。はじめに大量のポイントを持たせたラインを SOP からインポートし、先ほどと同じ Stamp Points を使うことで、大量のポイントを作るところから始めました。その後も、ラインのインポートとスタンプポイントの統合プロセスを2、3回繰り返し、下図のような、十字の形が一回り大きい円に囲まれた模様を作りました。



次は背景の制作です。並行に配置した細い線を一組用意し、それを複製することにしました。その線の SDF シェイプを作り、アウトラインのみを残してモノクロに変換して、きれいな細い U 字形を作りました。そこに、先ほどと同じ SOP ラインインポートの技を適用すれば簡単に反復できます。色味や位置の調整とブレンドを経てできたものがこちらです。

これでパターンのベースができました。

下部パターン

よりリアルなルックにするため、簡単なフラクタルノイズの反復で擦れや傷を入れることにしました。まず、パターン全体に均一なノイズを重ねて色味の明度を落とし、変化をつけました。
割れ目の追加には、Fractal Noise ノードを Cellular ノイズに設定し、そこに Edge Detectノードを適用しましたが、生成されたのが完全な直線だったので、修正してランダムさを加えるため、方向指定用の Distort ノードを使い、別のフラクタルノイズを距離の入力として用いました。そのふたつを合わせて、パターンに追加して完成したのがこちらです。

リアルさを出すため、簡単なフラクタルノイズと Mono to RGB ノードを使って塊状の汚れも加えました。

ノイズの作成ステップの仕上げとして、X 軸方向に強い歪みをつけたフラクタルノイズを加え、経年で生じる表面のザラつきを再現しました。

これで最終ルックの完成です。

エクスポート

ここでは、ディフューズと法線、シェーダ調整用マスクの3つのマップをエクスポートする必要がありました。ディフューズマップのエスポートのプロセスは簡単です。法線については、RGB テクスチャをモノクロに変換して Remap ノードを適用し、さらに Height to Normal ノードを使って Height マップから法線マップを生成します。


これにより、見た目の整った、すぐにレンダリング可能な法線マップができあがります。




メインパターン


次のパターンはこちらのリファレンスを参照しました(「瞬間」を意味する文字です)。


最初の工程はヒゲ状のパターンの制作です。中央部はスパイラル状の SDF シェイプ を幾つか使い、先端には、SOP で作成したカーブに様々な pscale アトリビュートを適用しています。これにより、線の太さが制御可能となり、スタンプの使用時に、徐々に細くすることができました。



その後すぐ、アラビア語の筆文字を書き、COP にインポートして戻しました。様々なカーブを使うことで手書きらしさを表現しています。pscale のアトリビュートを足して徐々に値が上昇するよう設定し、若干回転させた長方形をスタンプして、インクのストロークを再現しました。その後、ヒゲのパターンを周りにペーストしました。




次に、SOP から F 字形のポイントを幾つかインポートし、そこにスパイラル状のカーブをスタンプしました。その後さらに、同じく SOP レベルからインポートして作成したきれいなカーブを足していきました。これで、水平のディテールを追加する準備が整いました。




水平のディテール

はじめに行ったのはマスク処理です。これは、先ほど統合したパターンの構成要素をいくつかマスクで覆う必要があったためです。太い黒線を2本作り、覆いたい要素の上に重ね、その後、パターンの上下に水平線を追加しました。




次に、できた線の間に菱形を並べていきました。


ヒント

今の状態はモノクロですが、この後すぐにそれを変更して色を付けていきたいので、各要素に異なる値を持たせています。たとえば菱形模様は、4つをそれぞれ若干色味の異なるグレーにしました。これにより、後ほど色を割り当てる際の管理がしやすくなります。

追加の要素と垂直線


そこからさらに水平な線を何本か加えた後、メインパターン上下の垂直な線の配置に進みました。大理石風の質感が欲しかったので、UV の特徴に沿わせたフラクタルノイズを幾つか使用。それを Distort (COP) ノードに繋ぎ、一部のフラクタルノイズを好みに合わせて修正するという方法が重宝しました。垂直な帯を2本作り、先ほどのパターンに追加すると、このような見た目になります。


色付け

もっとも楽しい工程です! 様々な色味を適用するのには、シンプルに Mono to RGB ノードを使いました。先ほど周到に、固有の明度のグレーを割り当てておいたことで、複数の色でも簡単に表現できます。ノードの設定と、色を付けた最終的な状態は以下の通りです。


白地の背景に奥行きを出すため、フラクタルノイズを幾つか組み合わせて紙のようなテクスチャを作成し、Mono to RGB ノードを使って調整しました。これにより、先ほどと同じく、望ましい結果を簡単に得ることができます。

仕上げと法線

仕上げには再び、X 軸沿いに歪みをつけたノイズを重ねました。壺の下の方にさらにノイズを加え、よりリアルにしています。法線マップは、ディテールを少なくして粗さを抑えることにしました。やり方はごく簡単で、Mono マップを法線マップに変換する前に、Remap ノードを重ねれば、スライダひとつでディテール数を調整できます。


これで、テクスチャの完成です。とても良い感じです。

COP テクスチャの作成


ランタンの法線マップ

ランタンを作るにあたり、SOP のインポート機能の力を最大限に引き出すことにしました。まずリファレンスを収集しました。


右図のようなランタンを作ることにし、SOP でシンプルなジオメトリを使ってパターンのシェイプをモデリングしました。その後、全てを VDB に変換して滑らかにしてから、より均一なシェイプを作成しました。コピー&ペーストを数回繰り返し、最終調整を加えたらシェイプは完成です。

ヒント

SOP からのインポートの際、COP が取得するのは、X 軸から Y 軸上の -1 から 1 の四角形の領域のみです。ご覧の通り、部分的に奇妙な形をしています。これは容易かつシームレスにパターンをスケーリングできるよう、意図的にそうしたものです。

使用しているのは Rasterize Geometry ノードで、インポートした SOP モデルの奥行をラスタライズしています。スクリーンショットの通り、取得された領域は確かに -1 から 1 です。ピクセル値が1超のため、奥行きが白く均一になっていますが、Remap ノードで修正可能です。



そこに Height to Normal ノードを使い、若干スケーリングすると、こちらのきれいなパターンが完成します。



あとは、シェーダに適用して結果を見るだけです。ランタンのモデルは Polyhaven から入手したもので、ガラスの色味を調整し、リファレンスのようにカラフルにしました。下図はそのテストレンダリングです。


メインパターン


はじめに、Curves ノードによる平面パッチ を使い、面白みのある形をモデリングし、次に簡単な Mountain ノードを使い大幅にランダム化しました。シェイプをミラーリングして、シームレスなテクスチャに仕上がるようにしています。



メインパターンに適用するための、歪みをつけた粗めのフラクタルノイズも作成しました。これは、ザラついたパッチ状の領域と複数層の塗料の剥がれによって、古びた雰囲気を出すためです。



背景


背景にも同様の手法を用い、引き伸ばした明るいフラクタルノイズと、細かい暗めのフラクタルノイズを掛け合わせたところ、シンプルかつ効果的な結果を得られました。そこにパターンを統合してできたものが下図です。




追加ノイズ 

メインのテクスチャは用意できましたが、ランダムさを加えるために、複数のスケールのノイズを追加して部分的に明度の違いを作りました。経年によって蓄積する割れを再現するため、大小の塊も作りました。下図は、完成したパターンで使ったレイヤーで作ったアニメーションです。



最終ライティング

全てのテクスチャを集めてシーンのレイアウトを作ったら、後は良い感じにレンダリングをして仕上げていきます。

セットアップのごく初期段階で、ゴボによるライトを使うことを決め、ライト用フィルターを作成して遠方のライトに割り当てました。ご覧の通り、この時点でのシーンはまだ、最終レンダには入れません。いくつかのライティング技法を試しているところです。ゴボはとても効果的ですが、もっと温もりのあるシーンにしたかったので、高コントラストの暖色系ライティングを使うことにしました。

そこで、ゴボによるライティングから、新しい改良版の Karma Physical Sky に切り替え、部屋を囲む天井や奥の壁のジオメトリも構築しました。現状、職人の向かい側から光が射しているため、シーンの大部分で光量が足りておらず、同時に、直接光が当たる場所は露出オーバーになっています。それを直すため、画面左に光源を移動させました。

この方法はかなりうまくいきました。シーンのライティングがよくなり、適切な情感や雰囲気が伝わります。ただし、技術上の難点も明らかになりました。ご覧の通り、画面右の緑色の大皿が白茶けています。シーン内の全てのハイライトでも同じことが起きています(職人の輪郭と、間接光が当たっている全ての壺を見てください)。 


それを修正するために、ポータルライトを作成しました。Solaris で Geometry Settings ノードを使えばごく簡単にセットアップできます。他にも画面左の領域を照らすためのランプも加えたところ、とても温かみのあるきれいなシーンになりました。ジオメトリの修正と追加を行ったところ、シーン内の視線誘導に役立ちました。さらに、特に画面左のゴッドレイの下を見ると宙を舞う埃のごく薄いレイヤーも追加されているのがわかるでしょう。これには、シーンの写実性を増すだけでなく、絵全体に、きれいな暖色のオレンジ系の色味を帯びさせる効果もあります

しかし、最終的な仕上げの際に、ランタンの光量を落とし、メインの太陽光のアングルを変え、その光で画面右の皿をより多く照らすようにしました。また、窓が目立つのでそれも修正することにしました。窓の向こうに壁を一枚配置して、町はずれの通り/路地を表現しています。前景のオブジェクトを影の中に入れるため、グリッドを組んで太陽光の一部を遮りました。あとは、カメラシェーダによる効果を重ねれば、最終ルックの完成です。

コンプ


ライティングを修正し、さらなる調整を加えるには、COP ネットワークを使います。はじめにライトの AOV それぞれに対して Bright ノードを作成してボリュームの AOV を統合し、その後、全てのライト用 AOV をカスタムメイドの Add ノードを使って統合しています。このノードは、簡単な Python コードによって複数のレイヤーをまとめて追加します。

次に、絵の前景と背景の暗部にDepth map の AOV を使用し、奥行マップをリマップして、前景と背景を黒くしました。それらのレイヤを統合してブラーをかけ、絵の上に重ねました。下図で、それが結果に及ぼす影響を確認できます。

最後に少しノイズ除去を行った結果がこちらです。

USD 用の代替パス

Solaris はUSDベースのため、全てのアセットを.usd 形式で個別にエクスポートするのが賢明です。Component Builder ノードを使うと簡単に実行できます。

Component Builder のエイリアスを使うと、図中の一連のノードを自動的に作れます。componentgeometry1 ノードの中に入ると、ジオメトリをインポートでき、レンダリングするかプロキシジオ化するかを選べます。ビューポート内にいる時はマシンの負荷を減らし、レンダリングをしないのが得策です。ここでは、componentgeometry1 ノード内にアセットをインポートし、そこにそのアセットのマテリアルを割り当てました。その後、component_output ノードに入ると、アセットを USD 形式でディスクに書き出すことができます。できたデータはデジタルアセットに追加することができ、Layout Asset Gallery から確認できます。

Layout Asset Gallery を使うと保存された全てのアセットにアクセスできます。ドラッグ&ドロップで簡単に、シーンにアセットを追加できます。それにより、Reference ノードが作成され、そこに必要なファイルへのパスが接続されます。



その他のヒントや注意

  • 最終レンダでは LPE Tag を有効化すると良いでしょう。各ライトの LPE Tag セクションに $OS を追加し、Karma の Render Settings ノードで Split per LPE Tag を有効にします。これによりライトごとの明度を手動でコントロールでき、自分の好みに合わせてシーンを修正できるようになります。

  • 新しい改良版の Karma レンズマテリアルを使うと、望ましいルックに近づけるのに役立ちます。現実世界のレンズには常に何らかの難点が含まれます。曲面の追加や色収差の修正、ビネットと DOF の微調整によって、レンダリングの全体的な印象が劇的に変わります。

  • Karma における法線マップの想定領域は、-1 から 1(符号付き) ですが、大部分の法線マップはオフセットされています(0 から 1 の値)。対処策として、Karma Material Builder ネットワーク内では常に MtlX Normalmap を用いるようにしてください。これにより、値が自動的にリマップされ、シェーダが適切なルックになります。

  • LOP ネットワーク内に複数のスイッチがある場合、Context Options Editor を使うと、複数のスライダを設定し、変更を一か所で管理できるようになります。これにアクセスするには、プラスアイコンをクリックして Solaris タブ下から探します。開いたら、プラスアイコンをクリックすると大量のオプションを含むドロップダウンメニューが表示されます。 Int Slider を作成すると、ウィンドウ内に追加されます。命名した後は、@ を使ってその名称に言及すると、そのスライダの値にアクセスできるようになります。この方法は、ワークフローの最適化と複数テイクの作成の際に、とても重宝します。

  • フェイクライトも積極的に使うとよいでしょう。今回のシーンのライトも、半分がフェイクです。ひとつは職人の顔に入れた追加ハイライト、もうひとつは窓用のライトです。皆さんも想像力を働かせて思い思いのライトを駆使し、絵を描くようにレンダリングしてみましょう。


コメント

  • Natsu 10ヶ月, 2週間 前  | 

    Thank you for sharing your project!
    When I opened the scene file, I get the following error log, and couldn't see anything.
    ========================================
    Load warnings for F:/HoudiniProjects/craftman_layout/craftman_scene_layout.hip

    Warning:

    /img/copnet1/topnet1/hqueuescheduler1:

    Skipping unrecognized parameter "folder4".
    Skipping unrecognized parameter "submitjobassign".
    Skipping unrecognized parameter "submitjobclients".
    Skipping unrecognized parameter "submitjobselectclients".
    Skipping unrecognized parameter "submitjobgroups".
    Skipping unrecognized parameter "submitjobselectgroups".
    Skipping unrecognized parameter "submitjobsetcpus".
    Skipping unrecognized parameter "submitjobcpus".


    /img/copnet2/topnet1/hqueuescheduler1:

    Skipping unrecognized parameter "folder4".
    Skipping unrecognized parameter "submitjobassign".
    Skipping unrecognized parameter "submitjobclients".
    Skipping unrecognized parameter "submitjobselectclients".
    Skipping unrecognized parameter "submitjobgroups".
    Skipping unrecognized parameter "submitjobselectgroups".
    Skipping unrecognized parameter "submitjobsetcpus".
    Skipping unrecognized parameter "submitjobcpus".
    ========================================
    I'm quite new to Houdini.
    Is there something that I need to do to see objects?

Please log in to leave a comment.