UnityShaderの基本構文

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]の範囲にマップします。

おすすめ

転載: blog.csdn.net/qq_37219491/article/details/105517851