カメラ は、デプス、デプス + 法線、モーションベクターのテクスチャを生成することができます。これは最小限の G-buffer (グラフィックスバッファ)テクスチャで、ポストプロセッシングエフェクトあるいはカスタムのライティングモデル(例えばライト Pre-Pass )で使用することができます。シェーダーの変更 機能を使用して、自身で類似したテクスチャをビルドすることも可能です。
Camera.depthTextureMode 変数を使って、カメラの Depth Texture をスクリプトから有効にすることができます。
3つの使用可能なデプステクスチャモードがあります。
これらのフラグを使って、上記のテクスチャのどのような組み合わせも指定することができます。
これは画面サイズの Depth Texture をビルドします。
デプステクスチャは、シャドウキャスターのレンダリングに使用するのと同じシェーダー内パスを使用してレンダリングされます(“ShadowCaster” pass type)。したがって拡張機能により、シェーダーがシャドウキャスティング(影付け)をサポートしていない場合(例えば、シェーダーかフォールバックのいずれにおいてもシャドウキャスターのパスがない)、そのシェーダーを使用するオブジェクトにデプステクスチャは表示されません。
addshadow
を加えることでシャドウパスを生成することが可能です。マテリアルとシェーダーが レンダーキュー <= 2500 に設定されている不透明オブジェクトは、深度テクスチャにレンダリングされます。
これは画面サイズ 32 ビット (8 ビット/チャネル) テクスチャを作ります。ビュー空間法線が R と G チャネルに、深度が B と A チャネルにエンコードされます。法線は、ステレオ投影を使用してエンコードされ、深度は 16 ビットの値で、2 つの 8 ビットチャネルにパックされます。
内蔵のシェーダー include ファイル にはヘルパー関数 DecodeDepthNormal
があり、エンコードしたピクセルの値のデプスと法線をデコードします。返されるデプスは 0 から 1 の範囲です。
デプスと法線のテクスチャの使用例については、Shader Replacement のプロジェクト例の EdgeDetection イメージエフェクト、または スクリーンスペースのアンビエントオクルージョン のイメージエフェクト を参照してください。
これは、画面サイズ RG16 (16 ビット float/チャンネル) のテククチャをビルドします。スクリーン空間のピクセルモーションは R と G チャンネルにエンコードされます。ピクセルモーションはスクリーンの UV 空間でエンコードされます。
エンコードしたピクセルからテクスチャモーションをサンプリングすると、その範囲は –1 から 1 になります。これは以前のフレームから現在のフレームの UV の差を表します。
カメラが深度や深度や深度+法線のテクスチャをレンダリングする際に、Camera Inspector に表示されます。
深度テクスチャを必要とするエフェクトを無効にした後に Camera がまだそれをレンダリングしているという場合に、Camera (Camera.depthTextureMode) から深度テクスチャが要求されることがあります。それぞれが深度テクスチャを必要とする複数のエフェクトが Camera に存在する場合に、1 つのエフェクトを無効にするために自動的に深度テクスチャのレンダリングを無効にするよい方法はありません。
複雑なシェーダーやイメージエフェクトを実装するとき、プラットフォーム別のレンダリングの違い を頭に入れてください。特に、イメージエフェクトでデプステクスチャを使用する場合は、Direct3D かつアンチエリアスで特別なハンドリングが必要です。
ケースによってはデプステクスチャはネイティブの Z バッファから直接来る場合があります。もしデプステクスチャで画像の乱れがある場合、それを使用するシェーダーが Z バッファに 書き込まないように してください。( ZWrite Off を使用してください)。
深度テクスチャは、グローバルシェーダープロパティとしてシェーダーでサンプリングすることができます。_CameraDepthTexture
というサンプラーを宣言することによって、カメラの主要深度テクスチャをサンプリングすることができます。
_CameraDepthTexture
は、常にカメラの最初の深度テクスチャを示します。反対に _LastCameraDepthTexture
は、カメラに最後にレンダリングされた深度テクスチャを示します。例えば、スクリプトで解像度が半分の深度テクスチャを 2番目のカメラを使ってレンダリングし、ポストプロセスシェーダーに利用する場合に役に立ちます。
モーションベクトルテクスチャ (有効の場合) は、シェーダーでグローバルシェーダープロパティとして使用可能です。‘_CameraMotionVectorsTexture’ というサンプラーを宣言することによって、現在レンダリングしているカメラのテクスチャをサンプリングすることができます。
深度テクスチャは、使用されるレンダーパスやハードウェアに応じて、実際の深度バッファから直接取得されたり、別のパスにレンダリングされたりします。通常、ディファードシェーディングや古いディファードレンダーパスを使用する場合は、それらは G バッファのレンダリングによるものなので、深度テクスチャは “無料” で手に入ります。
DepthNormals テクスチャが別のパスにレンダリングされるとき、これは シェーダーの置き換え を通して行われます。したがってシェーダーで正しい “RenderType” タグを使用することが重要です。
使用可能な場合は、モーションベクターのテクスチャは常に余分なレンダーパスから与えられます。Unity はこのバッファに動いているオブジェクトをレンダリングし、その動きを以前のフレームから現在のフレームに描画します。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.