スクリプトを使用したマテリアルパラメーターへのアクセスと変更
旧シェーダーコード

シェーダーを書く

Unity のシェーダーは、次の 3 つの方法のいずれかで記述できます。

サーフェイスシェーダー(Surface Shader)について

シェーダーが照明や影の影響を受ける なら、Surface Shader (サーフェイスシェーダー)を用いるのが一番よいでしょう。サーフェイスシェーダーは簡潔な書き方で複雑なシェーダーを書けるようにします。それを可能としているのは、Unity のライティングパイプラインで行われる相互作用のための高次元の抽象化です。ほとんどのサーフェイスシェーダーは自動で前後からのライティングをサポートします。サーフェイスシェーダーは数行の Cg/HLSL によって書くことができ、より多くのコードはそれらによって自動生成されます。

もしシェーダーが照明に関係しないものならば、_ イメージエフェクト や、多くの特別なエフェクトを表現するシェーダーが他にもたくさんあるため、サーフェイスシェーダーは _使わない様にしてください。特に照明などは無くとも、サーフェイスシェーダーは多量のライティング演算を行うからです。

頂点シェーダー(Vertex Shader)とフラグメントシェーダー(Fragment Shader)について

あなたのシェーダーが照明効果との相互作用を必要とせず、サーフェイスシェーダーが扱えないようなエキゾチックなエフェクトが必要ならば、頂点シェーダーと Fragment シェーダーのプログラミングが適役でしょう。この方法で書かれたシェーダープログラムは、必要なエフェクトを作成するためのもっとも柔軟なやり方です(サーフェイスシェーダーも自動で頂点やフラグメントシェーダーに変換されています)。しかし、相応の対価もあります。つまり、より多くのコードを書かなければならず、ライティングと相互作用させるのがより難しいのです。これらのコードも同様に Cg/HLSL で記述します。

固定関数シェーダー

固定関数シェーダーは、プログラミングできる旧シェーダーをサポートしていない古いハードウェア向けに書く必要があります。ゲームを古いハードウェアやシンプルなモバイルプラットフォームで実行したときにも理にかなった表現を確実にしてくれる、空想のフラグメントシェーダーやサーフェイスシェーダーに対する予備の代替案として固定関数シェーダーを書きたいと思うかもしれません。Microsoft の .FX ファイルや NVIDIA の CgFx 同様、固定関数シェーダーはすべて、ShaderLab という言語で記述します。

ShaderLab

どの種類を選んだかは関係無く、シェーダーのコードの中身は実際にはどれも ShaderLab に覆われていて、ShaderLab はシェーダーの構造を整理するのに使われています。以下のように。

Shader "MyShader" {
    Properties {
        _MyTexture ("My Texture", 2D) = "white" { }
        // other properties like colors or vectors go here as well
    }
    SubShader {
        // here goes the 'meat' of your
        // - surface shader or
        // - vertex and fragment shader or
        // - fixed function shader
    }
    SubShader {
        // here goes a simpler version of the SubShader above that
        // can run on older graphics cards
    }
}

ShaderLab シンタックス で ShaderLab 文法の基本的な概念について読んで入門してから、以下にリスト化しているチュートリアルに進んでいくことをお勧めします。

チュートリアルにはシェーダーの種類ごとに、多くのサンプルが掲載されています。Unity の イメージエフェクト パッケージには多くの興味深い頂点シェーダー、フラグメントシェーダーが掲載されています。

シェーダーの導入のために読み、そして シェーダーリファレンス をチェックしてください。

スクリプトを使用したマテリアルパラメーターへのアクセスと変更
旧シェーダーコード