Unityは自身のshader programs で,定義済み変数やヘルパー関数を利用できる,いくつかのファイルを持たせることが出来ます。これは標準的な#include ディレクティブで実現できます,例えば:
CGPROGRAM
// ...
#include "UnityCG.cginc"
// ...
ENDCG
Unityのシェーダincludeファイルは.cginc 拡張子がつけられていて,内蔵されているのは:
HLSLSupport.cginc - (自動でインクルード) ヘルパーマクロやクロスプラットフォームのシェーダコンパイルの定義UnityCG.cginc - 一般に使用されるグローバル変数やヘルパー関数。AutoLight.cginc - ライティングやシャドウ機能,すなわちsurface shaders は内部的にこのファイルを使用します。Lighting.cginc - 標準的なsurface shader ライティングモデル,サーフェイスシェーダを記述するとき自動的にインクルードされます。TerrainEngine.cginc - Terrain(地形)やVegetation(植生)のシェーダのヘルパー関数。これらのファイルはUnityアプリケーションの(Windowsでは ,Macでは )で見つかりますので,内容をみてヘルパーコードが具体的に何をしているか見たい場合は参照下さい。
このファイルはシェーダをコンパイルする際に_自動でインクルード_されます。マルチプラットフォームのシェーダ開発を手助けするため,様々なpreprocessor macros を定義します。
このファイルは,多くのヘルパー関数と定義を利用するため,Unityシェーダに頻繁に含まれます。
appdata_base: 位置,法線,テクスチャ座標の,頂点シェーダ入力。appdata_tan: 位置,法線,接線,ひとつのテクスチャ座標の,頂点シェーダ入力。appdata_full: 位置,法線,接線,頂点カラー,ふたつのテクスチャ座標の,頂点シェーダ入力。appdata_img: 位置,ひとつのテクスチャ座標の,頂点シェーダ入力。float3 WorldSpaceViewDir (float4 v) - ワールド空間の,特定のオブジェクト空間の頂点位置からカメラに向かった,(正規化されていない)方向。float3 ObjSpaceViewDir (float4 v) - オブジェクト空間の,特定のオブジェクト空間の頂点位置からカメラに向かった,(正規化されていない)方向。float2 ParallaxOffset (half h, half height, half3 viewDir) - 視差法線マッピングのUVオフセットを計算。fixed Luminance (fixed3 c) - 色を輝度(グレースケール)に変換しますfixed3 DecodeLightmap (fixed4 color) - Unityライトマップの色をデコードします(プラットフォームにより,RGBMあるいはdLDR)float4 EncodeFloatRGBA (float v) - 精度の低いレンダリングターゲットを格納するため,0~1の範囲の浮動小数点をRGBAcolorにエンコードします。float DecodeFloatRGBA (float4 enc) - RGBA colorをfloatにデコードします。float2 EncodeFloatRG (float v) および float DecodeFloatRG (float2 enc) は二つのカラーチャネルを使用します。float2 EncodeViewNormalStereo (float3 n) - ビュー空間法線を0~1の範囲の二つの数字にエンコードします。float3 DecodeViewNormalStereo (float4 enc4) - enc4.xyからビュー空間法線をデコードします。これらの関数はForward Renderingを使用する場合のみ便利です。(ForwardBaseまたはForwardAddのパスタイプ)
float3 WorldSpaceLightDir (float4 v) - ワールド空間の,オブジェクト空間の頂点位置からライトへ向けた,(正規化されてない)方向を計算しますfloat3 ObjSpaceLightDir (float4 v) - オブジェクト空間の,オブジェクト空間の頂点位置からライトへ向けた,(正規化されてない)方向を計算しますfloat3 Shade4PointLights (...) - 四つのポイントライトから,ライトのデータをvectorに格納して,輝度を算出します。Forward Renderingは各頂点ごとのライティングにこの情報を使用します。これらの関数は頂点ライティングシェーダを使用する場合のみ便利です。(“Vertex”のパスタイプ)
float3 ShadeVertexLights (float4 vertex, float3 normal) - 4つの各頂点ライトから,オブジェクト空間の位置と法線を指定して,輝度と環境光を算出します。