ユニティシェーダ(8.1)

比較上のオブジェクトをレンダリングする際に図1に示すように、シャドウマップ(シャドウマップ)、奥行きマップに対する光源の光源で生成された周囲の発光に視点の設定を使用してUnityは、光源の深さは影であると判定され。Unityがないだけで書かれたワークロードパスは、フレームバッファにレンダリングされたシャドウマップ簡素化するためにShadowCasterモデルにLightModeを提供して普通のシャドウマップが再びシーンをレンダリング取得する場合には、廃棄物でした。Unityはレンダリングパイプラインでは、フォールバックを見て継続しない場合は、現在でパスを見つけるために、シェーダオブジェクトをレンダリングするでしょう、体は他のオブジェクトに影を投影しません見つけることができません。使用後、XYの変換された頂点の光源は、深シェーディングをサンプリングしたシャドウマップ情報を用いて座標空間。

 

2、Unityは5の後に新しいシャドウマッピング技術を使用しています - 画面スペースシャドウマップ(スクリーンスペースシャドウマップ)が、ハードウェアのサポートMRTを(複数のレンダーターゲット)が必要です。これは、シャドウマップテクスチャと深度カメラを生成し、表面がシャドウマップテクスチャ深さ値を、この表面上で可視であるが、影のうち、この変換する記録デプスマップよりも大きい場合、シャドウマップのスクリーン空間、および深度カメラを生成するためにそれらを使用します方法は、スクリーンスペース(???)のすべての斜線シャドウマップの宝ラインを作ることができます。

 

図3は、ユニティShadowType光源差影、ハード影、ソフトシャドウ、ハードとソフトのアンチエイリアシングの使用がよりスムーズにすることができているとオプションを有しています

4、必要がある2つのセットバックを可能場合もカリングがデフォルトで有効になっているため、オプションに対応するので、唯一の肯定的な情報生成されたオブジェクトをシャドウマップしたオブジェクトシャドウマッピングを受け入れるかどうかをキャスト両面影

図5は、上記のオプションを開いた後、満たすshaderlabコードへの必要性は、UnityはAutoLight.cgincに含まれている、使用シャドウマップの実現に多くの援助を提供してシャドウマッピングを実現することができます

 1)まず、テクスチャの定義は、頂点シェーダ出力構造座標をシャドウ添加しました

 SHADOW_COORDSこのマクロは文の宣告であります

 2)第一工程で定義された構造の出力パラメータの一例に過ぎず、呼び出しTRANSFER_SHADOW頂点シェーダマクロ、マクロに戻る前に

 このマクロは、シャドウマップテクスチャの座標を計算するために使用されます

 3)このパラメータは、フラグメントシェーダ入出力構造、すなわち、頂点シェーダのマクロ構造である、シャドウマッピングSHADOW_ATTENUATIONフラグメントシェーダ値を用いて計算

 このマクロは、自動的に光源の種類に応じて選択算出されます

 4)拡散反射光を得る照明計算の第3の範囲で得られたシャドウマップを高に乗算されます

 

6は、ユニティUNITY_LIGHT_ATTENUATION光シャドウマップの減衰と同時に提供されるように、シーンの発現の減光の反射であるが、衝撃の積分値を得るために計算され、唯一の上記プロセスにマクロSHADOW_ATTENUATIONの実現を交換する必要があります

 

図7に示すように、テクスチャを使用して生成された透明オブジェクトの影は、完全に上記方法ではないアルファテストVertexLitので、しかし、パスはこの操作をサポートしていないフラグメントシェーディング生成されたテクスチャ、不透明なオブジェクトのような生成された影を破棄する。「透明/切り絵/ VertexLit」を置き換えることができ、それは半透明のオブジェクトに参加していないので、ユニティシェーダパスシャドウキャスティングを構築し、含まれていないだろう、彼は透明なオブジェクトをレンダリングするため、デプスバッファが書かれているクローズする必要があることに留意すべきです操作をシェーディング図の深さと質感は、どちらも受け入れられなかったり、シャドウマップを生成します。しかし、シャドウマッピングでの貢献も可能であることを確認してください、ラフな方法に応じて独自のシェーダのサポート、それらを書くことができ、さらに、不透明なオブジェクトです。

 

おすすめ

転載: www.cnblogs.com/haihuahuang/p/12597769.html
おすすめ