しゅみぷろ読者になるしゅみぷろプログラミングとかこの広告は、90日以上更新していないブログに表示しています。ShaderUnity5からの(Legacyでない)DeferredShadingについて自分なりにまとめてみます。プロジェクションを使用している場合はサポートされません。DeferredShadingで実行されるパスDeferredShadingでは以下2つのパスが実行されます。G-BufferパスG-Bufferの作成LightingパスEmissionバッファにライティングを反映させるそれぞれのパスが実行されることにより、G-Bufferが生成されます。以後のレンダリングではこのG-Bufferを用いてポストプロセス的に描画が可能です。Buffer)のことです。DeferredShadingは「遅延シェーディング」の名の通り、実際の描画は遅延されます。1パス目のG-Bufferパスで今後必要になるデータをいくつかのテクスチャバッファに書き込みます。2パス目以降では、このG-Bufferを用いてレンダリングしていきます。実際のレンダリングが2パス目以降に遅延されることが名前の由来です。UnityがデフォルトのG-Bufferパスで生成してくれるデータ群は以下になります。Lightmaps)はLightingパスでEmissionに加算される情報です。EmissionバッファはG-Bufferパスで生成されます。深度、それ以外は未使用(?)でアクセスすることが可能です。カメラはデフォルトの設定で深度テクスチャを生成してくれません。DepthTextureMode.Depth;のように、カメラのdepthTextureModeを明示的に指定してあげる必要があります。G-Bufferの生成を行うシェーダー自体を入れ替えたい場合は以下の項目を変更することで可能です。この際、シェーダーではPass内のTagsにTags{"LightMode"="Deferred"}を記述します。Target)が利用されています。3.0(もしくはそれ以降)を要求されます。G-Bufferを見てみるシェーダーの基本については以下を参照してください。esprog.hatenablog.comDeferredShadingによって生成されたG-Bufferを見ていきます。sssiii.seesaa.netこちらを参考にさせていただきました。一枚一枚の画像の上半分がForwardRenderingで描画したものです。Stencilコードは以下。G-Bufferを見てみるDeferredShadingで生成されたG-BufferをOpaqueImageEffectsフェーズで描画しています。Planesの範囲を0~1として、その範囲でどのくらい深度値が異なるかで色付けされます。1000でしたので、くっきりと白黒の画像が描画されてしまいました。5とした時の出力は以下になります。_ShadowMapTexture;#endifなる表記がありました。ここからShadowMapを取ってくることができます。ShadowMap先ほどのシェーダーコードを以下のように手直ししました。}}以下にプロジェクトのサンプルをあげておきますので、必要でしたら見てみてください。実行中にマテリアルを弄ることで絵が切り替わるはずです。)はてなブログをはじめよう!es_programさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。