前回の<造形篇>に続き、Substance 3D Painterによる<質感篇>です。今回はZBrushで用意したモデルとテクスチャを使用し、Substance 3D Painter内のマテリアルプリセットやマスク、ジェネレータ等を使ってカラーマップやラフネス、ノーマルマップを仕上げていく工程を解説します。

記事の目次

    ZBrushで制作したモデルにSubstance 3D Painterでテクスチャを付ける

    ZBrushで造形しポーズを付けるところまでは前回の『PHENOMENAL THINGS/WORK 047 " FUMA " / <造形篇>ZBrushでの造形』をご参照ください。今回はその続きから始めていきます。

    【1】モデルにテクスチャを付けていく

    ZBrushで制作したモデルはこんな感じです。ここからテクスチャを付けていきましょう。

    【2】IDマップを書き出す

    まずはSubstance 3D Painterでテクスチャを付ける下準備をZBrushで行います。IDマップをPolypaintで画像のように描いてテクスチャとして書き出します。「IDマップ」とは、このようにべた塗りで分けた色の箇所にSubstance 3D Painterで別々の質感を割り当てる際に便利なマスクのようなマップです。

    【3】各テクスチャをZBrushから出力する

    その他のテクスチャも併せてZBrushから出力し、後ほどSubstance 3D Painterに読み込みます。今回はノーマルマップ、IDマップ、カラーマップをZBrushから書き出しています。

    【4】Substance Painterに読み込ませる

    Substance 3D Painterを起ち上げて[新規プロジェクト]を選択し、[ファイル→選択]でZBrushから出力したOBJファイルを読み込みます。このキャラクターは体と羽根に分かれているので、別々に塗っていきます。まずは体のOBJを読み込み、[OK]を押すとオブジェクトがSubstance 3D Painterに読み込まれます。

    【5】テクスチャファイルとして読み込ませる

    続いて、先ほど出力したテクスチャをSubstance 3D Painterに読み込みます。[Import resouces→Add resouces]からテクスチャを選び、それぞれの右スロットを[texture]に変更することでテクスチャファイルとしてSubstance 3D Painterに読み込みます。

    【6】[シェルフ]のテクスチャフォルダ内に格納

    読み込んだものは[シェルフ]のテクスチャフォルダ内に格納されています。

    【7】ノーマルマップに割り当てる

    まずは[Texture settings]ウインドウ内の[MESH MAPS→通常(ノーマルマップのこと)]へ読み込んだノーマルマップをドラッグ&ドロップします。これでビューポート上でノーマルマップが割り当てられた状態が反映されます。

    【8】「塗りつぶしレイヤー」を作成

    続いて、レイヤーに「塗りつぶしレイヤー」を作成。[PROPERTIES]内の[Base Color]スロットへ読み込んだカラーマップを同じくドラッグ&ドロップしてモデルに反映させます。ついでに[Roughness]の初期値もこの塗りつぶしレイヤーで決めておきます。

    【9】カラーマップとノーマルマップを反映

    このようにカラーマップとノーマルマップが反映されます。

    【10】柔らかい皮膚の質感を割り当てる

    続いてまずは柔らかい皮膚の質感を割り当てます。マテリアルフォルダ内の[HumanSkin]マテリアルをレイヤーの最上部へドラッグ&ドロップして追加します。

    【11】マスクに対して機能を追加

    レイヤーを右クリックし「白マスクを追加」からレイヤーマスクを作成します。続いてレイヤーマスクがハイライトされている状態で[右クリック→Add color selection]を選択し、追加します。「Color selection」とは、IDマップを基にレイヤーマスクが作成できる機能です。このようにSubstance 3D Painterではマスクに対して機能を追加し、様々な効果を得ることができます。

    【12】 [Pick Color]で任意の色を指定する

    「ColorSelectionタブ」内にIDマップをドラッグ&ドロップし、 [PickColor]で任意の色を指定することで、「その箇所にマスクをかける」また「その箇所にのみマスクを解除する」ことが可能です。

    【13】任意の箇所にディテールを追加する

    Propertiesで[Rough]と[Normalチャンネル]のみにチェックを入れます。図のように緑の皮膚の箇所のみにHumanSkinマテリアルのディテールが追加されました。

    【14】半自動のマスク機能「Mask Generator」を使う

    「Mask Generator」という半自動のマスク機能を使用するにあたり、Substance 3D Painter内でアンビエントオクルージョンやワールドノーマルマップ、曲率マップ等をベイクします。Texture settingsウィンドウ内の[Bake Maps→Bakingオプション]を開き、ベイクしたいマップの種類にチェックを入れます。任意でパラメータを調節し[Bake selected textures]を押してマップを生成。生成されたら自動的にそれら全てのマップがTexture settings内で割り当てられている状態となります。Substance 3D Painterのマスク機能をより柔軟に使うためには、これらのマップが必要不可欠となります。

    【15】大きな鱗のディテールを作成

    下面の大きな鱗のディテールも作成します。別のマテリアルをプリセットから選択しマスクを作成後、同様にColor selection機能をマスクに追加します。その上にペイントレイヤーマスクを作成することで、手塗りでの微調整も可能です。

    【16】「Add Generator」で半自動マスク処理

    続いてまた別のマテリアルを追加後、同様の手順でマスクを作成。続いて[マスク]を右クリック→[Add Generator]を選択します。この[Add Generator]というものが、先ほどベイクしたマップ類を使用した半自動マスクで、Substance 3D Painterの売りとなる機能の1つでもあります。

    【17】「Dripping Rust」でムラや汚れ感を加える

    「PROPERTIES」内のGeneratorスロットをクリックすると、任意のジェネレータ機能を割り当てることができます。今回は「Dripping Rust」という、全体にムラや汚れ感を出すジェネレータを選択。ベイクしたマップが自動的にPROPERTIES内の全てのスロットに読み込まれ、パラメータを調節するだけで良い感じのマスクを作ることができます。

    【18】パラメータを調節してムラ感を調整

    [C]を押すと、各チャンネルごとの表示をビュー上で確認できます。確認しつつ、ジェネレータのパラメータを調節してムラ感を確認しながら進めます。

    【19】金属的な質感を加える

    角やエッジにところどころ金属的な質感が欲しかったので、金属のマテリアルをレイヤーにもってきてマスクを作成後、同様にAddGeneratorでレイヤーマスクを編集していきます。Color selectionを使いつつ、エッジのみにマスクを追加するような機能のジェネレータがあるので併用しています。またシェルフ内にも「Smart Mask」というフォルダがあり、そこからレイヤーにドラッグ&ドロップすることでも任意の効果のマスクが簡単に作成できます。慣れたら使ってみると便利です。

    【20】Substance 3D Painterで描いた質感をテクスチャとして出力

    最後にSubstance 3D Painterで描いた質感をテクスチャとして出力しましょう。 [Export textures→Output templatesプリセット]から使用するレンダラのプリセットを選び、出力されるマップの種類やチャンネルが正しいか確認しておきます。

    【21】羽根のテクスチャを仕上げる

    羽根に関しても、同様のやり方で質感を仕上げてテクスチャに書き出しましょう。質感は以上となります。レンダリングしながら理想とちがう箇所があればSubstance 3D Painter内で再調整&レンダリング……、をくり返しましょう。

    【完成】

    森田悠揮 / Yuuki Morita

    フリーランスキャラクターデザイナー/デジタルアーティスト/造形作家
    国内外問わずアート、映画、ゲーム、広告、デジタル原型など様々なジャンルで活動しているフリーランスのアーティスト。ZBrushでの生物や怪獣などのクリーチャーデザインを得意とする傍ら、Houdiniを用いた動画、アート制作なども行う。初の著書 『the Art of Mystical Beasts』ボーンデジタルから発売中。
    website: itisoneness.com
    Instagram: yuukimorita
    Twitter: @YuukiM0rita

    TEXT_森田悠揮 / Yuuki Morita
    EDIT_三村ゆにこ / Uniko Mimura