docs.unity3d.com
    目次を表示する/隠す

    色の入力を備えた URP Unlit シェーダー

    この例の Unity シェーダーは、マテリアルに Base Color プロパティを追加します。そのプロパティを使用して色を選択でき、選択した色がシェーダーによってメッシュ形状に塗られます。

    URP の基本的な Unlit シェーダー セクションの Unity シェーダーソースファイルを使用し、ShaderLab コードに以下の変更を加えます。

    1. _BaseColor プロパティの定義を Properties ブロックに追加します。

      Properties
      {
          [MainColor] _BaseColor("Base Color", Color) = (1, 1, 1, 1)
      }
      

      この宣言によって _BaseColor プロパティが Base Color というラベルでマテリアルに追加されます。

      マテリアルの Base Color プロパティ

      [MainColor] 属性のプロパティを宣言すると、Unity ではそのプロパティがマテリアルの メインカラー として使用されます。

      ノート: 互換性を確保するため、_Color というプロパティ名はあらかじめ予約されています。Unity では、[MainColor] 属性がなくても _Color という名前のプロパティが メインカラー として使用されます。

    2. Properties ブロックでプロパティを宣言するときは、それを HLSL コードで宣言することも必要です。

      ノート: Unity シェーダーと SRP Batcher の互換性を確保するため、マテリアルのすべてのプロパティを単一の CBUFFER ブロック内で UnityPerMaterial という名前で宣言します。SRP Batcher について詳しくは、SRP (スクリプタブルレンダーパイプライン) Batcher のページを参照してください。

      頂点シェーダーの前に以下のコードを追加します。

      CBUFFER_START(UnityPerMaterial)
          half4 _BaseColor;
      CBUFFER_END
      
    3. フラグメントシェーダーのコードを _BaseColor プロパティを返すように変更します。

      half4 frag() : SV_Target
      {
          return _BaseColor;
      }
      

    これで、Inspector ウィンドウの Base Color フィールドで色を選択できるようになりました。ここで選択した色がフラグメントシェーダーによってメッシュに塗られます。

    マテリアルの Base Color フィールド

    以下は、この例の完成した ShaderLab コードです。

    // このシェーダーは、ユーザーがマテリアルの Inspector ウィンドウを使用して
    // 変更できる色でメッシュ形状を塗りつぶします。
    Shader "Example/URPUnlitShaderColor"
    {
        // _BaseColor 変数はマテリアルの Inspector に Base Color フィールドとして
        // 表示されます。そのフィールドを使用してカスタムカラーを選択できます。この変数には
        // 初期値 (1, 1, 1, 1) があります。
        Properties
        {
            [MainColor] _BaseColor("Base Color", Color) = (1, 1, 1, 1)
        }
    
        SubShader
        {
            Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
    
            Pass
            {
                HLSLPROGRAM
                #pragma vertex vert
                #pragma fragment frag
    
                #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
    
                struct Attributes
                {
                    float4 positionOS   : POSITION;
                };
    
                struct Varyings
                {
                    float4 positionHCS  : SV_POSITION;
                };
    
                // Unity シェーダーと SRP Batcher の互換性を確保するため
                // マテリアルに関連するすべてのプロパティを単一の CBUFFER ブロック内で
                // UnityPerMaterial という名前で宣言します。
                CBUFFER_START(UnityPerMaterial)
                    // 以下の行ではフラグメントシェーダーで使用できるように
                    // _BaseColor 変数を宣言します。
                    half4 _BaseColor;
                CBUFFER_END
    
                Varyings vert(Attributes IN)
                {
                    Varyings OUT;
                    OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
                    return OUT;
                }
    
                half4 frag() : SV_Target
                {
                    // _BaseColor 値を返します。
                    return _BaseColor;
                }
                ENDHLSL
            }
        }
    }
    

    テクスチャの描画 セクションには、メッシュ上にテクスチャを描画する方法が記載されています。

    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)