(1)表面シェーダ
結束着色表面は、シェーダコードタイプ自体です。それは非常に少ないコード量、やるべき仕事がたくさんの背後にあるユニティが、比較的大型のレンダリングのコストが必要となります。ユニティそれでも表面シェイダーの背後に対応する頂点/フラグメントシェーダに。抽象化のサーフェスシェーダ頂点/フラグメントシェーダより高いレベルに統一。私たちは光細部の多くに対処するためにその値が存在することにある、Unityは、我々は心配する必要はありません。
シェーダ" カスタム/ SIMPLE表面シェーダ" { Subshader { タグ{ " RenderType " = " 不透明" } CGPROGRAM の#pragma表面サーフランバート 構造体入力{ するfloat4色:COLOR。 }。 ボイドサーフ(SurfaceOutput 0 INOUT IN入力){ o.Albedo = 1 。 } ENDCG } フォールバック" 拡散" }
上記の手順から分かるように、シェーダの表面は、セマンティックSubShaderブロック(ブロックセマンティクスを渡していない)とCGPROGRAM ENDCGとの間に画定されます。その理由は、サーフェスシェーダ開発者が問題をレンダリングする各パスは、Unityは後ろに私たちのためにこれらのことを行いますどのようにどのように多くのパスの使用、心配する必要がないということです。私たちはしなければならないことを教えている:ランバート照明モデルを使用して、法線の法線を埋めるためにテクスチャを使用して、塗りつぶしの色にこれらのテクスチャを使用して....
(2)頂点/フラグメントシェーダ
シェーダ" カスタム/ SIMPLE VertexFragmentシェーダ" { SubShader { パス{ CGPROGRAM の#pragma頂点VERT の#pragmaフラグメントフラグ・ するfloat4 VERT(するfloat4 V:位置決幅):SV_POSITON { 戻りMUL(UNITY_MATRIX_MVP、V)。 } fixed4のFRAG():SV_Target { 戻り fixed4(1.0、0.0、0.0、1.0 )。 } ENDCG } } }
表面異なるシェーダが頂点/フラグメントシェーダは、セマンティック・パス・ブロックではなく、SubShaderで書かれています。その理由は、我々は自分自身を使用する必要があり、各パスのためのシェーダコードを定義する必要があるということです。より複雑なものの、しかし、メリットは非常に高い柔軟性があります。さらに重要なことは、我々は、実装の詳細のレンダリングを制御することができます。
(3)固定機能シェーダ
唯一の古い機器には、それらを必要とします。
ユニティの新バージョンでは、着色された固定機能の面は、頂点シェーダ/フラグメントシェーダに変換されます。