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

ビルトイン シェーダ includeファイル

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では{unity install path}/Data/CGIncludes/UnityCG.cginc ,Macでは/Applications/Unity/Unity.app/Contents/CGIncludes/UnityCG.cginc )で見つかりますので,内容をみてヘルパーコードが具体的に何をしているか見たい場合は参照下さい。

HLSLSupport.cginc

このファイルはシェーダをコンパイルする際に_自動でインクルード_されます。マルチプラットフォームのシェーダ開発を手助けするため,様々なpreprocessor macros を定義します。

UnityCG.cginc

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

UnityCG.cgincのデータ構造

  • struct appdata_base: 位置,法線,テクスチャ座標の,頂点シェーダ入力。
  • struct appdata_tan: 位置,法線,接線,ひとつのテクスチャ座標の,頂点シェーダ入力。
  • struct appdata_full: 位置,法線,接線,頂点カラー,ふたつのテクスチャ座標の,頂点シェーダ入力。
  • struct appdata_img: 位置,ひとつのテクスチャ座標の,頂点シェーダ入力。

UnityCG.cgincの汎用ヘルパー関数(Generic helper functions)

  • 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からビュー空間法線をデコードします。

UnityCG.cgincのForward Renderingヘルパー関数

これらの関数はForward Renderingを使用する場合のみ便利です。(ForwardBaseまたはForwardAddのパスタイプ)

  • float3 WorldSpaceLightDir (float4 v) - ワールド空間の,オブジェクト空間の頂点位置からライトへ向けた,(正規化されてない)方向を計算します
  • float3 ObjSpaceLightDir (float4 v) - オブジェクト空間の,オブジェクト空間の頂点位置からライトへ向けた,(正規化されてない)方向を計算します
  • float3 Shade4PointLights (...) - 四つのポイントライトから,ライトのデータをvectorに格納して,輝度を算出します。Forward Renderingは各頂点ごとのライティングにこの情報を使用します。

UnityCG.cgincのVertex-litヘルパー関数

これらの関数は頂点ライティングシェーダを使用する場合のみ便利です。(“Vertex”のパスタイプ)

  • float3 ShadeVertexLights (float4 vertex, float3 normal) - 4つの各頂点ライトから,オブジェクト空間の位置と法線を指定して,輝度と環境光を算出します。
頂点プログラムへ頂点データの流し込み
定義済みシェーダ プリプロセッサマクロ