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

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

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

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つの各頂点ライトから,オブジェクト空間の位置と法線を指定して,輝度と環境光を算出します。
頂点プログラムへ頂点データの流し込み
定義済みシェーダ プリプロセッサマクロ