頂点プログラムへ頂点データの流し込み
定義済みシェーダープリプロセッサーマクロ

内蔵のシェーダー include ファイル

Unity は自身の 頂点シェーダーと Fragment シェーダーのプログラミング で、定義済み変数やヘルパー関数を利用できる、いくつかのファイルを持たせることができます。これは標準的な #include ディレクティブで実現できます、例えば、

CGPROGRAM
// ...
#include "UnityCG.cginc"
// ...
ENDCG

Unity のシェーダー include ファイルは .cginc 拡張子がつけられていて、内蔵されているのは

  • HLSLSupport.cginc - (自動でインクルード) ヘルパーマクロやクロスプラットフォームのシェーダーコンパイルの定義。
  • UnityShaderVariables.cginc - 一般的に使用されるグローバル変数 (自動で含まれます)
  • UnityCG.cginc - 一般的に使用される ヘルパー関数
  • AutoLight.cginc - ライティングやシャドウ機能、すなわち Surface Shader は内部的にこのファイルを使用します。
  • Lighting.cginc - 標準的な Surface Shader ライティングモデル、サーフェイスシェーダーを記述するとき自動的にインクルードされます。
  • TerrainEngine.cginc - Terrain (地形)や Vegetation (植生)のシェーダーのヘルパー関数。

これらのファイルは Unity アプリケーションの( Windows では {unity install path}/Data/CGIncludes/UnityCG.cginc 、Mac では /Applications/Unity/Unity.app/Contents/CGIncludes/UnityCG.cginc )で見つかりますので、内容をみてヘルパーコードが具体的に何をしているか見たい場合は参照してください。

HLSLSupport.cginc

CGPROGRAM シェーダーをコンパイルする場合はこのファイルは自動的に含まれます (ただし、HLSLPROGRAM シェーダーの場合には含まれません)。このファイルは、さまざまな プロセッサーマクロ を宣言し、マルチプラットフォームシェーダー開発を支援します。

UnityShaderVariables.cginc

CGPROGRAM シェーダーをコンパイルする場合はこのファイルは自動的に含まれます (ただし、HLSLPROGRAM シェーダーの場合には含まれません)。このファイルは、一般的にシェーダーで使用されるさまざまな ビルトインのグローバル変数 を宣言します。

UnityCG.cginc

このファイルは、多くの ビルトインのヘルパー関数 と定義を利用するため、Unity シェーダーに頻繁に含まれます。

UnityCG.cginc のデータ構造

  • struct appdata_base: 位置、法線、テクスチャ座標の、頂点シェーダー入力。
  • struct appdata_tan: 位置、法線、接線、ひとつのテクスチャ座標の、頂点シェーダー入力。
  • struct appdata_full: 位置、法線、接線、頂点カラー、ふたつのテクスチャ座標の、頂点シェーダー入力。
  • struct appdata_img: 位置、ひとつのテクスチャ座標の、頂点シェーダー入力。
頂点プログラムへ頂点データの流し込み
定義済みシェーダープリプロセッサーマクロ