サンプラー状態の利用
ShaderLab: Properties

ShaderLab シンタックス

All Shader files in Unity are written in a declarative language called ShaderLab. In the file, a nested-braces syntax declares various things that describe the shader – for example, which shader properties to show in the Material Inspector, what kind of hardware fallbacks to perform, and what kind of blending modes to use. Actual shader code is written in CGPROGRAM snippets inside the same shader file. For more information, see Writing Surface Shaders and Writing vertex and fragment shaders.

本ページと子オブジェクトのページでは、nested-braces “ShaderLab” シンタックスを説明しています。 CGPROGRAMスニペットは、通常 HLSL/Cg で記述しています。頂点シェーダーと Fragment シェーダーのプログラミング 参照してください。

Shader はシェーダーファイルのルートコマンドです。すべてのファイルは必ずひとつのシェーダーのみを定義しないといけません。このシェーダーを使用するマテリアルをもつオブジェクトがレンダリングされる方法を示します。

シンタックス

Shader "name" { [Properties] Subshaders [Fallback] [CustomEditor] }

シェーダーを定義します。マテリアルインスペクターに表示されるか name 以下でリストに記述されます。シェーダーは任意のオプションとして、マテリアル設定として表示される Properties の一覧として定義できます。サブシェーダーのリストが来た後、オプションとしてフォールバック、カスタムエディターの宣言を両方、またはどちらか一方を行います。

詳細

プロパティー

シェーダーは Properties のリストをもつことができます。シェーダーで定義されたプロパティーは Unity の マテリアルインスペクター で表示されます。通常のプロパティーは、オブジェクトのカラー、テクスチャ、シェーダーにより使用される任意の値です。

サブシェーダーと Fallback

各シェーダーは SubShader のリストから構成されます。少なくともひとつが必要です。シェーダーをロードするとき、Unity はサブシェーダーのリストから、エンドユーザーのマシンでサポートされる最初のサブシェーダーを選択します。もしサポートされるサブシェーダーがない場合、Unity は Fallback シェーダー の使用を試みます。

異なるグラフィックスカードは異なる性能を持ちます。このためゲーム開発者は、最新のハードウェアで最高のビジュアルを実現したいですが、「人口の3%にしか提供できないようにはしたくない」、という永遠の課題に悩まされます。サブシェーダーはこのときに活躍します。夢に描いたグラフィックス効果を、思いつく限りすべて盛り込んだサブシェーダーを1つ作り、古いグラフィックスカード向けには、別のサブシェーダーを追加します。それらのサブシェーダーでは、エフェクトをより遅く実行したり、詳細を省くように設定することができます。

シェーダーの “level of detail” (LOD) と、“shader replacement” の2つもまた、サブシェーダーの作成に使用できるテクニックです。詳細は シェーダー LODShader Replacemementを参照してください。

考えられるもっともシンプルなシェーダーの例:

// 色付けされた頂点ライティング
Shader "Simple colored lighting"
{
    // 1 つのカラープロパティー
    Properties {
        _Color ("Main Color", Color) = (1,.5,.5,1)
    }
    // 1 つのサブシェーダーを定義します
    SubShader
    {
        //  サブシェーダーの 1 つの Pass
        Pass
        {
            // 固定関数頂点ライティングを使用
            Material
            {
                Diffuse [_Color]
            }
            Lighting On
        }
    }
}

このシェーダーでは color プロパティーとして _Color (マテリアルインスペクターで Main Color として表示)を、デフォルト値 (1, 0.5, 0.5, 1) として、定義します。次にひとつのサブシェーダーを定義します。サブシェーダーはひとつの Pass から構成され、固定関数頂点ライティングを有効にして、自身の基本マテリアルを設定します。

さらに複雑なサンプルは サーフェイスシェーダーの例頂点とフラグメントシェーダーの例を参照してください。

関連項目

サンプラー状態の利用
ShaderLab: Properties