動的マテリアルレイヤリング
動的マテリアルレイヤリングは、1つのテクスチャではなく、シェーダー内で汎用マテリアルが混在している場合に使用される、特殊なワークフローです。 この方法の主な利点は、描画が動的で、シェーダー内の汎用マテリアルを調整することで、ある程度の画質を制御および保持できることです。 マテリアルは一般的ですが、マテリアルをブレンドするために使用されるマスクはメッシュに固有のものなので、繰り返しません。
マテリアルレイヤリングワークフローを有効にするには、具体的なシェーダーが必要です。
Substance 3D Painterにデフォルトで付属しているシェーダー「 pbr-マテリアルレイヤー 」では、3つのマスクで4つのマテリアルを合成できます。
サブレイヤースタック
このシェーダーサブスタックは、シェーダーによって定義および直接サンプリングすることができる。 Substance 3D Painterに付属の「pbr マテリアルレイヤー」シェーダーの例:
//: stacks [
//: {
//: "id": "Mask",
//: "channels": [
//: {"id": "opacity"}
//: ]
//: },
[...]
//: ]
サブテクスチャセットの チャンネル はシェーダー で 定義されているため、レイヤースタック設定で新しいチャンネルを追加することはできません。 チャンネルを追加または削除するには、シェーダーファイルを更新する必要があります。
サポートされる最大チャンネル数は、ハードウェアでサポートされる合計サンプラー数によって定義されます。
Substance 3D Painterは、パラメーターとして読み込まれるマテリアルに対してバインドレステクスチャ(したがって無制限の量のテクスチャ)をサポートしますが、エンジンによってレイヤースタックに提供されるチャンネルは32(Windowsの場合)に制限されています。 この制限には、プロジェクトのメッシュにベイクされた「通常」や「Ambient occlusion」などの他のテクスチャも含まれます。
マテリアル入力
マスクに加えてマテリアルを定義するサブスタックも設定できますが、多くの場合、シェーダーにマテリアル入力を定義し、シェルフから直接マテリアルを使用するほうが効率的です。 ほとんどの場合、これらのマテリアルはUnityやUnrealエンジン4などの最終用途にも存在します。 マテリアルをマテリアルする命名規則は、シェーダー「pbr-declaring」に次のように記述されています。
//: materials [
//: {
//: "id": "Material1",
//: "label": "Material 1",
//: "default": "",
//: "size": 1024,
//: "default_color": [0.5, 0.5, 0.5]
//: },
[...]
//: ]
マテリアルの解像度は「size」パラメーターで定義できます。 デフォルトでは、「default」パラメータを使用してシェーダーを作成する際に、マテリアルをロードすることもできます(ロードする必要があるリソースの名前/ラベルを使用して)。
シェーダー自体のマテリアルとマスクにアクセスするには、「param auto」キーワードを使用してパスとマスクを接続します。
//: param auto Material1.channel_basecolor
uniform sampler2D color1;
//: param auto Mask.channel_opacity
uniform sampler2D mask;
このワークフローでは、マスクとシェーダーパラメーターが最も重要です。 そのため、Substance 3D Painterの書き出しウィンドウでは、「 シェーダーパラメーターを書き出し」設定を有効にすることをお勧めします。 これにより、ディスクの横に JSON ファイルが作成されます。このファイルには、サブスタックの設定、使用されているマテリアル、シェーダおよびそのパラメーターに関する情報が含まれています。 パラメータの書き出しと読み込み
現時点では、書き出し時の1つのテクスチャへのマスクのパッキングはサポートされていません。 ただし、スクリプト作成機能を使用してSubstanceバッチツールを呼び出し、代わりにSubstanceを使用してパッキングを実行するという簡単な回避策もあります。
このJSON ファイルを使用して、プロジェクトのレイヤースタックとシェーダを設定できます。
これにより、共通のパラメータを共有することで、複数のアプリケーション間を簡単に行き来できます。