しゅみぷろスマートフォン用の表示で見るしゅみぷろプログラミングとかこの広告は、90日以上更新していないブログに表示しています。Watchdocs.unity3d.comdocs.unity3d.comForwardRenderingとDeferredShadingについては上記サイトで詳しく書かれていました。ここでは勉強を兼ねてForwardRenderingとDeferredShadingについて整理していきたいと思います。そもそもUnityのレンダリングがどのように行われているのかということもここでおさらいしていきたいと思います。書いてて長くなってしまいそうだったので、ForwardRenderingとDeferredShadingそれぞれについての詳細は別記事にして、ここでは概要だけを書いていきます。複数カメラがある場合や、シェーダーの実行順に違いがある場合、何から優先的にレンダリングされるのかといったことから見ていこうと思います。Unityの描画順は以下のようになっています。カメラのDepthが小さいものからレンダリングされる。1つのカメラ内でのオブジェクトのレンダリング順は、RenderQueueによって決まる。これはShaderTagsのQueueによって指定される値で、DebugModeのインスペクターからマテリアルを見ることで変更したり確認したりできる。(RenderQueueが負数の場合はShaderTagsで指定されているデフォルトの値が使われる)RenderQueueが同じ場合、カメラからの距離によって描画順が決定する。RenderQueueがTransparent(3000)未満であれば、カメラから近い順に描画される(不透明オブジェクトの描画を効率的に行う)。Transparent以上であれば、遠い順に描画される。カメラのレンダリングプロセス1つ1つのカメラのレンダリングプロセスを見ていきます。グラフィックスコマンドバッファから拝借しました。カメラのレンダリングプロセスを図にしたものです。情報を書き加えるとこんな感じでしょうか。順を追っていくとカメラはレンダリング時に、レンダリングするオブジェクトに対してForwardRenderingまたはDeferredShadingのどちらかを適用し、ライティングを計算する。不透明オブジェクトの描画が終わったら、OpaqueImageEffectパスによって不透明オブジェクトにポストプロセスを適用することができる。Skyboxを描画する透明なオブジェクトの描画をTransparenciesパスで行うレンダリングの全ての工程が終了した際に、ImageEffectパスでポストプロセスを適用することができる。カメラがForwardRenderingとDeferredShadingどちらを適用するかの設定はPlayerSettingのRenderingPathから可能です。カメラのRenderingPathから設定することも可能です。カメラのRenderingPathがUsePlayerSettingの場合にPlayerSettingで指定したRenderingPathを実行するようになります。DeferredShadingでライティングを行う場合Tags{"LightMode"="Deferred"}を指定します。ForwardRendering詳細に関しては別記事で。Renderingパスは各オブジェクトを、オブジェクトに作用するライトにもとづいてひとつかそれ以上のパスを用いてレンダリングします。より別々に扱われます。ライティングの計算方法は3種類あり、オブジェクトに作用するライトによってその3種類のアルゴリズムを切り替えます。ForwardRenderingでは、ピクセルシェーダーを動かして得た結果が深度テストで書き出さずに捨てられてしまうことも多く、これは無駄な演算になります。マルチパスレンダリングでは何度も同じジオメトリで構成されたシーンをレンダリングするようなケースも出てきます(ジオメトリ処理の無意味な重複)。ForwardRenderingでは、画面に表示するフレーム内の総ピクセル数よりも多く演算してその結果を捨てたり、反復的に同じ計算を無駄に行なってしまうようなことが起こります。DeferredShading詳細に関しては別記事で。遅延レンダリングと呼ばれ、その名の通り描画を遅延させるようなレンダリング手法です。DeferredShadingではまず最初のパスで、G-Bufferと呼ばれるオブジェクトの描画に必要になりそうな情報を持ったテクスチャバッファを作成します。次のパスでは、このG-Bufferで書き出されたテクスチャバッファに、ライトの情報からライティングを計算して書き加えていきます。この2つのパスの実行後、G-Bufferを用いてポストプロセス的に画面を描画することが可能です。DeferredShadingを使用する場合、オブジェクトに影響を与えることができるライトの数に制限はありません。すべてのライトはピクセルごとに評価されます。すべてのライトはクッキーとシャドウを持つことができます。DeferredShadingは、ライティングの処理のオーバーヘッドはライトが照らすピクセルの数に比例するという利点があります。これはどれくらいのオブジェクトを照らすかに関係なく、シーンの中で光のボリュームのサイズによって決定されます。したがって、パフォーマンスは明りを小さくしておくことによって向上します。アンチエイリアシングのための実際のサポートがなく、半透明のオブジェクトを処理することはできないことです(これらはForwardRenderingを使用してレンダリングされます)。Shadowsフラグはサポートがありません。カリングマスクは限られた方法でサポートされているだけです。カリングマスクを4つまで使用できます。カリングレイヤーマスクは、少なくともすべてのレイヤー数から4を引いた数を含まなければなりません。よって、32レイヤーなら28を設定しなければなりません。しないと、グラフィカルなアーティファクトを得ることになります。(もしくはそれ以降)によるグラフィックカードと2面ステンシルバッファが必要です。非常に限られたビット数のみサポートしています)。)はてなブログをはじめよう!es_programさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。