このページでは、ShaderLab コードの Properties ブロックを使用して Shader オブジェクトのマテリアルプロパティを定義するための情報について説明します。
| 機能名 | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタム SRP | ビルトインレンダーパイプライン |
|---|---|---|---|---|
| ShaderLab:Properties ブロック | はい HLSL コードでは、SRP バッチャーの互換性のために、マテリアルごとの変数を同じ CBUFFER に置く必要があります。 |
はい HLSL コードでは、SRP バッチャーの互換性のために、マテリアルごとの変数を同じ CBUFFER に置く必要があります。 |
はい HLSL コードでは、SRP バッチャーの互換性のために、マテリアルごとの変数を同じ CBUFFER に置く必要があります。 |
はい |
| シグネチャ | 機能 |
|---|---|
Properties{<Material property declaration><Material property declaration>}
|
指定のプロパティをマテリアルアセットの一部として保存し、レンダリング時にマテリアルアセットに保存された値を使用します。Properties ブロックには、任意の数のマテリアルプロパティ宣言を指定することができます。 |
すべてのマテリアルのプロパティ宣言は、この基本的な形式に沿っています。
[optional: attribute] name("display text in Inspector", type name) = default value
正確な構文は、型によって異なります。
このセクションには、以下の情報が含まれています。
型名とデフォルト値の構文は、プロパティの型によって異なります。
シェーダーコードの場合、すべてのプロパティ名の先頭文字はアンダースコアにするのが一般的です。このページの例はこの規則に従っています。
| タイプ | 構文例 | コメント |
|---|---|---|
| 整数 | _ExampleName ("Integer display name", Integer) = 1 |
この型は実際の整数に基づいています (浮動小数点 Float に基づいている後述の古い Int 型とは異なります)。整数を使用する場合は Int の代わりにこれを使用してください。 |
| Int (レガシー) | _ExampleName ("Int display name", Int) = 1 |
注意これは古い型で、整数ではなく浮動小数点に基づいています。後方互換性の理由でのみサポートされています。代わりに Integer 型を使用してください。 |
| Float |
_ExampleName ("Float display name", Float) = 0.5_ExampleName ("Float with range", Range(0.0, 1.0)) = 0.5
|
レンジスライダーの最大値と最小値を含みます。 |
| Texture2D |
_ExampleName ("Texture2D display name", 2D) = "" {}_ExampleName ("Texture2D display name", 2D) = "red" {}
|
デフォルト値の文字列に次の値を入れて、Unity のビルトインテクスチャの 1 つを使用します: “white” (RGBA:1,1,1,1)、“black” (RGBA:0,0,0,1)、“gray” (RGBA:0.5,0.5,0.5,1)、“bump” (RGBA:0.5,0.5,1,1)、または “red” (RGBA:1,0,0,1)。 文字文字列を空にしたり、無効な値を入力すると、デフォルトで “gray” になります。 ノート: これらのデフォルトのテクスチャは Inspector では表示されません。 |
| Texture2DArray | _ExampleName ("Texture2DArray display name", 2DArray) = "" {} |
詳細については、テクスチャアレイを参照してください。 |
| Texture3D | _ExampleName ("Texture3D", 3D) = "" {} |
デフォルト値は “gray” (RGBA:0.5,0.5,0.5,1) のテクスチャです。 |
| Cubemap | _ExampleName ("Cubemap", Cube) = "" {} |
デフォルト値は “gray” (RGBA:0.5,0.5,0.5,1) のテクスチャです。 |
| CubemapArray | _ExampleName ("CubemapArray", CubeArray) = "" {} |
キューブマップ配列を参照してください。 |
| Color | _ExampleName("Example color", Color) = (.25, .5, .5, 1) |
これはシェーダーコードの float4 にマップされます。 マテリアルの Inspector にカラーピッカーが表示されます。値を 4 つの個別の浮動小数点として編集する場合は、Vector 型を使用します。 |
| Vector | _ExampleName ("Example vector", Vector) = (.25, .5, .5, 1) |
これはシェーダーコードの float4 にマップされます。 マテリアル Inspector には、4 つの個別の Float フィールドが表示されます。カラーピッカーを使用して値を編集したい場合は、Color 型を使用します。 |
Unity にはマテリアルプロパティの予約済みの名前がいくつかあります。これらの名前のいずれかを持つマテリアルプロパティを作成すると、Unity は定義済みの操作を実行します。この機能を使用する意図がない限り、これらの名前を使用しないでください。
| 名前 | 構文例 | 機能 |
|---|---|---|
| _TransparencyLM | _TransparencyLM ("Transmissive Texture", 2D) = "white" {} |
ライトマッピング中のカスタム RGB 透明度を有効にします。 詳細は、ライトマッピングとシェーダーを参照してください。 |
マテリアルのプロパティ宣言には、どのように処理するかを Unity に指示するオプション属性を付けることができます。
ここに挙げた属性に加えて、同じ構文を使用して、マテリアルプロパティに MaterialPropertyDrawer を追加することができます。これらの方法によって、マテリアルプロパティが Inspector ウィンドウにどのように表示されるかを制御することができます。
| 属性 | 機能 |
|---|---|
[Gamma] |
float または vector のプロパティが sRGB 値を使用することを示します。つまり、プロジェクトの色空間がこれを必要とする場合、他の sRGB 値とともに変換する必要があることを意味しています。詳細については、Shader プログラムのプロパティを参照してください。 |
[HDR] |
テクスチャまたはカラーのプロパティがハイダイナミックレンジ (HDR) の値を使用することを示しています。 テクスチャプロパティの場合、LDR テクスチャが割り当てられていると、Unity エディターには警告が表示されます。色プロパティの場合、Unity エディターは HDR カラーピッカーを使用してこの値を編集します。 |
[HideInInspector] |
Inspector でこのプロパティを隠すように Unity エディターに指示します。 |
[MainTexture] |
マテリアルのメインテクスチャを設定します。マテリアルには、Material.mainTexture を使用してアクセスできます。 Unity は、デフォルトでプロパティ名が _MainTex のテクスチャをメインのテクスチャと見なします。この属性は、テクスチャのプロパティ名は異なるけれども、Unity にメインのテクスチャとして認識させたい場合に使用します。この属性を複数回使用すると、Unity は最初のプロパティを使用し、それ以降のプロパティを無視します。 注意この属性を使用してメインテクスチャを設定すると、テクスチャチャミップマップストリーミングデバッグビューやカスタムデバッグツールを使用しても、ゲームビューにはテクスチャが表示されません。 |
[MainColor] |
マテリアルのメイン色を設定します。マテリアルには Material.color を使用してアクセスできます。 Unity は、デフォルトでプロパティ名が _Color の色をメインの色と見なします。この属性は、色のプロパティ名は異なるけれども、Unity にメインの色として認識させたい場合に使用します。この属性を複数回使用すると、Unity は最初のプロパティを使用し、それ以降のプロパティを無視します。 |
[NoScaleOffset] |
このテクスチャプロパティのタイリングとオフセットのフィールドを隠すように Unity エディターに指示します。 |
[Normal] |
テクスチャのプロパティが法線マップであることを示しています。 互換性のないテクスチャを割り当てると、Unity エディターに警告が表示されます。 |
[PerRendererData] |
テクスチャプロパティは MaterialPropertyBlock の形式で、レンダラーごとのデータから作られることを示しています。 マテリアル Inspector では、これらのプロパティは読み取り専用として表示されます。 |