UnityShaderの基本構文
プラグマ
メインコンテンツ:
コンパイル命令 | 例/意味 |
---|---|
#pragma頂点名 | 名前を置き換えて、頂点シェーダー関数とフラグメントシェーダー関数を指定します。 |
#pragmaフラグメント名 | 名前を置き換えて、頂点シェーダー関数とフラグメントシェーダー関数を指定します。 |
#pragmaターゲット名 | 名前を置き換えます(2.0、3.0などの場合)。コンパイルするターゲットシェーダーモデルのバージョンを設定します。 |
#pragma multi_compile name | 名前を置き換えてマクロを定義します。#if defined(A)... #endif、マクロが宣言されている場合、定義内のコードが実行されます。マクロを宣言する方法:シェーダーが配置されているマテリアルマットを取得し、mat.EnableKeyword( "name")およびmat.DisableKeyword( "name")によってマクロAを定義および削除します。 |
ComputeScreenPos:UnityCG.cgincにあり、トリミング空間の座標範囲を[-w、w]から[0、w](遠近法による分割なし、直接補間)にマッピングするために使用されます。通常、ピクセルシェーダーで使用する場合はwで除算されます。テクスチャ(深度テクスチャなど)のuv値として[0,1]にマップされます。
tex2Dproj:tex2Dに似ていますが、入力uvは通常、上記のComputeScreenPosによって計算された値であり、使用する場合は、マッピングを作成するためにwで除算する必要があります。
UNITY_PROJ_COORD:プラットフォームの違いに対処し、通常は入力値を直接返します。
SAMPLE_DEPTH_TEXTURE:HLSLSupport.cgincにあり、通常、深度テクスチャの色を取得するために使用され、uvを直接入力します。
SAMPLE_DEPTH_TEXTURE_PROJ:基本的に上記と同じですが、入力uvも上記のComputeScreenPosによって計算された値であり、tex2Dprojによって内部的に実装されます。
LinearEyeDepth:1では、深度マップから取得した値は通常、直接使用できないため(通常、観測空間のz値の逆数に線形に関連する値)、観測のz値に変換する必要があります。使用するスペース。この機能これが役割です。
Linear01Depth:上記で取得したz値を[0,1]の範囲にマップします。