物理ベースのレンダリングマテリアルバリデーターは、シーンビューの描画モードです。これを使うと、物理ベースシェーダーの推奨される参照値に収まる値をマテリアルが使用していることを確認することができます。特定のマテリアルのピクセル値が参照範囲から外れる場合、マテリアルバリデーターは、失敗を示すために異なる色でそのピクセルを強調表示します。
マテリアルバリデーターを使用するには、シーンビューの 描画モード のドロップダウンメニューを選択します。これは、デフォルトでは通常 Shaded に設定されています。
Material Validation セクションに移動します。マテリアルバリデーターには Validate Albedo と Validate Metal Specular の 2 つのモードがあります。
ノート: 推奨値を Unity のマテリアルチャート で確認することも可能です。マテリアルを編集して Albedo と Specular 値を決定するときに、このチャートを使用する必要があります。ただし、アセットをシーンで使用するときにマテリアルの値が有効かを確認するには、マテリアルバリデーターは視覚的でエディター内で利用できる方法として有用です。
ノート: バリデーターはリニア色空間でのみ動作します。物理ベースのレンダリングはガンマ色空間での使用を目的としていません。そのため、物理ベースレンダリングと物理ベースレンダリングマテリアルバリデーターを使用する場合は、リニア色空間 を使用する必要があります。
Material Validation を Validate Albedo モードに設定するとき、シーンビューに表示される PBR Validation Settings
Property: | Function: | |
---|---|---|
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 番目のテクスチャは最高輝度値を超えているため、明るすぎます。
マテリアルチャート は、一般的なマテリアルのアルベド値を指定します。アルベド値の明るさは発生する拡散反射光の量に劇的な影響を与えます。そのため、グローバルイルミネーション ベーキングでは、様々なマテリアルタイプが互いの比率で正しい輝度範囲内にあるかどうかを確認することが重要です。これらの値を正しく得るために、Luminance Validation ドロップダウンからあらかじめ設定されたものを選択すると一般的なマテリアルのアルベド値が提示され、特定のマテリアルタイプの輝度範囲を検証できます。
プロジェクトのアートスタイルによっては、マテリアルの輝度値が既に設定された輝度の範囲と異なることがあります。この場合、マテリアルバリデーターで使用されている組み込みのアルベド値を独自の値で上書きすることができます。設定された輝度範囲をオーバーライドするには、それぞれの適切なマテリアルタイプの AlbedoSwatchInfo の値の配列を、プロパティ EditorGraphicsSettings.albedoSwatches に割り当てます。
Material Validation を Validate 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 つの異なる色の範囲を定義します。
Unity では、すべての非金属マテリアルは一定のスペキュラー色を持ち、それは常に正しい範囲内に収まります。しかし、金属マテリアルでは、スペキュラー値が低すぎるということがよくあります。この問題を持つ金属マテリアルを見つけ易くするために、マテリアルバリデーターの Validate Metal Specular モードでは、スペキュラー色の値が低すぎるすべてのピクセルに色を付けます。これには、非金属マテリアルと定義されているものも含まれます。
下の例の左のマテリアルでは、スペキュラー値が最低よりも低く、したがって表示が暗すぎます。 これはシーンの背景にも当てはまります。右のマテリアルのスペキュラー値は、有効範囲内です。
Unity では、スペキュラー色の値が 155 sRGB より高い物理ベースのシェーディングマテリアルを金属と定義します。Unity では、正しく設定された金属マテリアルを ピュアメタル と呼びます。
非金属サーフェスのスペキュラー色の値が高すぎるにもかかわらずアルベド値が 0 でないという状況は、オーサリングエラーによって引き起こされることが多くあります。マテリアルバリデーターには、Check Pure Metals というオプションがあります。このオプションを有効にすると、マテリアルバリデーターは、Unity が金属として定義しているにもかかわらずアルベド値が 0 でないマテリアルを黄色で表示します。下の画像はその例です。表示されている 3 つのマテリアルで、左と右のマテリアルはピュアメタルですが、中央のマテリアルはそうではないので、マテリアルバリデーターによって黄色に表示されます。
上の 2 番目の画像では、背景が赤です。なぜなら、マテリアルバリデーターの Validate Metal Specular モードで、背景のマテリアルは最低スペキュラー値よりも低いからです。
金属と非金属のプロパティを組み合わせた複雑なマテリアルに対して、ピュアメタルのチェック機能が無効なピクセルの一部を検出することがあります。しかし、マテリアルがすべて無効な場合は、通常はオーサリングエラーです。
マテリアルバリデーターは、 Unity の スタンダードシェーダー または サーフェスシェーダー を使用するすべてのマテリアルで動作します。ただし、カスタムシェーダーには「META」という名前のパスが必要です。ライトマップをサポートするほとんどのカスタムシェーダーには、すでにこのパスの定義が含まれています。詳細は、ライトマップとシェーダー を参照してください。
カスタムシェーダーとマテリアルバリデーターに互換性を持たせるには、以下の手順を実行します。
#pragma shader_feature EDITOR_VISUALIZATION
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);
}
}