Version: 2020.1
言語: 日本語
Scripting for materials that use the Standard Shader
テクスチャ

物理ベースのレンダリングマテリアルバリデーター

物理ベースのレンダリングマテリアルバリデーターは、シーンビューの描画モードです。これを使うと、物理ベースシェーダーの推奨される参照値に収まる値をマテリアルが使用していることを確認することができます。特定のマテリアルのピクセル値が参照範囲から外れる場合、マテリアルバリデーターは、失敗を示すために異なる色でそのピクセルを強調表示します。

マテリアルバリデーターを使用するには、シーンビューの 描画モード のドロップダウンメニューを選択します。これは、デフォルトでは通常 Shaded に設定されています。

シーンビューの描画モードのドロップダウンメニュー
シーンビューの描画モードのドロップダウンメニュー

Material Validation セクションに移動します。マテリアルバリデーターには Validate AlbedoValidate Metal Specular の 2 つのモードがあります。

シーンビューの描画モードのドロップダウンメニューのマテリアルバリデーターオプション
シーンビューの描画モードのドロップダウンメニューのマテリアルバリデーターオプション

ノート: 推奨値を Unity のマテリアルチャート で確認することも可能です。マテリアルを編集して AlbedoSpecular 値を決定するときに、このチャートを使用する必要があります。ただし、アセットをシーンで使用するときにマテリアルの値が有効かを確認するには、マテリアルバリデーターは視覚的でエディター内で利用できる方法として有用です。

ノート: バリデーターはリニア色空間でのみ動作します。物理ベースのレンダリングはガンマ色空間での使用を目的としていません。そのため、物理ベースレンダリングと物理ベースレンダリングマテリアルバリデーターを使用する場合は、リニア色空間 を使用する必要があります。

Validate Albedo モード

Albedo モードを検証する場合の物理ベースレンダリングバリデーター設定
Albedo モードを検証する場合の物理ベースレンダリングバリデーター設定

Material Validation を Validate Albedo モードに設定するとき、シーンビューに表示される PBR Validation Settings

プロパティ 説明
Check Pure Metals このチェックボックスを有効にすると、Unity が金属として定義しているにもかかわらずアルベド値が 0 ではないピクセルを検出したときに、それを黄色で表示します。詳細は、後述の ピュアメタル を参照してください。 デフォルトでは、この機能は有効になっていません。
Luminance Validation ドロップダウンを使用して、マテリアルバリデーターの既存の設定を選択します。Default Luminance 以外のオプションを選択した場合は、Hue Tolerance と Saturation Tolerance も調整できます。プロパティの下にあるカラーバーは、設定のアルベド色を示します。 ドロップダウンの下の Luminance 値は、最低輝度と最高輝度の値を示します。 マテリアルバリデーターは、この値の範囲外の輝度値を持つピクセルを強調表示します。 デフォルトでは Default Luminance に設定されています。
Hue Tolerance マテリアルのアルベド色の値をチェックするときに、このスライダーを使用して、マテリアルの色相とバリデーター設定の色相との間で許容できる誤差の量を制御できます。
Saturation Tolerance マテリアルのアルベド色の値をチェックするときに、このスライダーを使用して、マテリアルの彩度とバリデーター設定の彩度の間で許容できる誤差の量を制御できます。
Color Legend マテリアルのピクセルが定義された値の範囲外にあるときに、マテリアルバリデーターが以下の色でシーンビューに表示します。
Red Below Minimum Luminance Value マテリアルバリデーターは、Luminance Validation で定義された最低輝度値より低いピクセルを赤色で表示します (暗すぎることを意味します)。
Blue Above Maximum Luminance Value マテリアルバリデーターは、Luminance Validation で定義された最高輝度値より高いピクセルを青色で表示します (明るすぎることを意味します)。
Yellow Not A Pure Metal Check Pure Metals が有効になっている場合、Unity が金属として定義しているにもかかわらずアルベド値が 0 ではないピクセルを検出したときに、それを黄色で表示します。 詳細については、後述のピュアメタルを参照してください。

Unity の マテリアルチャート は、標準的な輝度範囲を非金属の場合は 50–243 sRGB、金属の場合は 186–255 sRGB と定義しています。Validate Albedo モードの、値が低すぎたり高すぎたりすることを示すために、色の異なるこれらの範囲外のピクセルを色付けします。

以下の例で、最初のテクスチャは最低輝度値を下回り、したがって暗すぎます。4 番目のテクスチャは最高輝度値を超えているため、明るすぎます。

1 番目と 4 番目のマテリアルが誤ったアルベド値を持つシーン (マテリアルバリデーターは無効の状態)
1 番目と 4 番目のマテリアルが誤ったアルベド値を持つシーン (マテリアルバリデーターは無効の状態)
The same Scene with the マテリアルバリデーターが有効の同じシーンで Validate Albedo に設定。最低輝度値より低い値は赤で表示。最高輝度値より高い値のテクスチャは青で表示。
The same Scene with the マテリアルバリデーターが有効の同じシーンで Validate Albedo に設定。最低輝度値より低い値は赤で表示。最高輝度値より高い値のテクスチャは青で表示。

マテリアルチャート は、一般的なマテリアルのアルベド値を提供します。アルベド値の明るさは発生する拡散反射光の量に劇的な影響を与えます。そのため、 グローバルイルミネーション ベーキングでは、様々なマテリアルタイプが互いの比率で正しい輝度範囲内にあるかどうかを確認することが重要です。これらの値を正しく得るために、 Luminance Validation ドロップダウンからあらかじめ設定されたものを選択すると一般的なマテリアルのアルベド値が提供され、特定のマテリアルタイプの輝度範囲を検証できます。

デフォルト輝度値をオーバーライド

プロジェクトのアートスタイルによっては、マテリアルの輝度値が既に設定された輝度の範囲と異なることがあります。この場合、マテリアルバリデーターで使用されている組み込みのアルベド値を独自の値で上書きすることができます。設定された輝度範囲をオーバーライドするには、それぞれの適切なマテリアルタイプの AlbedoSwatchInfo の値の配列を、プロパティ EditorGraphicsSettings.albedoSwatches に割り当てます。

Validate Metal Specular モード

Validate Metal Specular モードの PBR validations settings
Validate Metal Specular モードの PBR validations settings

Material ValidationValidate Metal Specular モードに設定すると、シーンビューに表示される PBR Validation Settings

プロパティ 説明
Check Pure Metals このチェックボックスを有効にすると、Unity が金属として定義しているにもかかわらずアルベド値が 0 ではないピクセルを検出したときに、それを黄色で表示します。詳細は、後述の ピュアメタル を参照してください。 デフォルトでは、この機能は有効になっていません。
Color Legend マテリアルのピクセルが定義された値の範囲外にあるときに、マテリアルバリデーターが以下の色でシーンビューに表示します。それは、それらのスペキュラー値が、そのタイプのマテリアル (金属、または非金属) にとって有効範囲外の値であるということを意味します。
Blue Below Minimum Specular Value マテリアルバリデーターは、最低スペキュラー値より低い値を持つピクセルを赤色で表示します (非金属では 40、金属では 155)。
Red Above Maximum Specular Value マテリアルバリデーターは、最高スペキュラー値より高い値を持つピクセルを青色で表示します (非金属では 75、金属では 255)。
Yellow Not A Pure Metal Check Pure Metals が有効になっている場合、Unity が金属として定義しているにもかかわらずアルベド値が 0 ではないピクセルを検出したときに、それを黄色で表示します。詳細については、後述のピュアメタルを参照してください。

Unity の マテリアルチャート は 2 つの異なる色の範囲を定義します。

  • 非金属マテリアル: 40–75 sRGB
  • 金属マテリアル: 155 - 255 sRGB

Unity では、すべての非金属マテリアルは一定のスペキュラー色を持ち、それは常に正しい範囲内に収まります。しかし、金属マテリアルでは、スペキュラー値が低すぎるということがよくあります。この問題を持つ金属マテリアルを見つけ易くするために、マテリアルバリデーターの Validate Metal Specular モードでは、スペキュラー色の値が低すぎるすべてのピクセルに色を付けます。これには、非金属マテリアルと定義されているものも含まれます。

下の例の左のマテリアルでは、スペキュラー値が最低よりも低く、したがって表示が暗すぎます。 これはシーンの背景にも当てはまります。右のマテリアルのスペキュラー値は、有効範囲内です。

2 つの金属マテリアルのシーン。左は有効範囲外のスペキュラー値を持つマテリアル
2 つの金属マテリアルのシーン。左は有効範囲外のスペキュラー値を持つマテリアル
マテリアルバリデーターを有効にし、 Validate Metal Specular を設定した同様のシーン
マテリアルバリデーターを有効にし、 Validate Metal Specular を設定した同様のシーン

ピュアメタル

Unity では、スペキュラー色の値が 155 sRGB より高い物理ベースのシェーディングマテリアルを金属と定義します。Unity では、正しく設定された金属マテリアルを ピュアメタル と呼びます。

非金属サーフェスのスペキュラー色の値が高すぎるにもかかわらずアルベド値が 0 でないという状況は、オーサリングエラーによって引き起こされることが多くあります。マテリアルバリデーターには、Check Pure Metals というオプションがあります。このオプションを有効にすると、マテリアルバリデーターは、Unity が金属として定義しているにもかかわらずアルベド値が 0 でないマテリアルを黄色で表示します。下の画像はその例です。表示されている 3 つのマテリアルで、左と右のマテリアルはピュアメタルですが、中央のマテリアルはそうではないので、マテリアルバリデーターによって黄色に表示されます。

3 つの金属マテリアルのシーン。中央のマテリアルはピュアメタルではありません (アルベド値が 0 ではありません)
3 つの金属マテリアルのシーン。中央のマテリアルはピュアメタルではありません (アルベド値が 0 ではありません)
上のシーンを マテリアルバリデーター を有効にし、Validate Metal Specular に設定して表示
上のシーンを マテリアルバリデーター を有効にし、Validate Metal Specular に設定して表示

上の 2 番目の画像では、背景が赤です。なぜなら、マテリアルバリデーターの Validate Metal Specular モードで、背景のマテリアルは最低スペキュラー値よりも低いからです。

金属と非金属のプロパティを組み合わせた複雑なマテリアルに対して、ピュアメタルのチェック機能が無効なピクセルの一部を検出することがあります。しかし、マテリアルがすべて無効な場合は、通常はオーサリングエラーです。

実装

マテリアルバリデーターは、 Unity の スタンダードシェーダー または サーフェスシェーダー を使用するすべてのマテリアルで動作します。ただし、カスタムシェーダーには「META」という名前のパスが必要です。ライトマップをサポートするほとんどのカスタムシェーダーには、すでにこのパスの定義が含まれています。詳細は、メタパス を参照してください。

カスタムシェーダーとマテリアルバリデーターに互換性を持たせるには、以下の手順を実行します。

  1. 以下のプログラムをメタパスに加えます。 #pragma shader_feature EDITOR_VISUALIZATION
  2. UnityMetaInput 構造体で、マテリアルのスペキュラー色を SpecularColor フィールドに割り当てます。以下のコードサンプル参照。

カスタムのメタパスの例

Pass
{
    Name "META" 
    Tags { "LightMode"="Meta" }

    Cull Off

    CGPROGRAM
    #pragma vertex vert_meta
    #pragma fragment frag_meta

    #pragma shader_feature _EMISSION
    #pragma shader_feature _METALLICGLOSSMAP
    #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
    #pragma shader_feature ___ _DETAIL_MULX2
    #pragma shader_feature EDITOR_VISUALIZATION

    float4 frag_meta(v2f_meta i) : SV_TARGET
    {
        UnityMetaInput input;
        UNITY_INITIALIZE_OUTPUT(UnityMetaInput, input);
        float4 materialSpecularColor = float4(1.0f, 0.0f, 0.0f, 1.0f);
        float4 materialAlbedo = float4(0.0f, 1.0f, 0.0f, 1.0f);
        input.SpecularColor = materialSpecularColor;
        input.Albedo = materialAlbedo;

        return UnityMetaFragment(input);
    }  
}

  • 2018–03–28 公開ページ
  • マテリアルバリデーターは Unity 2017.3 で更新
Scripting for materials that use the Standard Shader
テクスチャ