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つの各頂点ライトから,オブジェクト空間の位置と法線を指定して,輝度と環境光を算出します。