遅延シェーディング

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
拡散色G-Buffer
法線G-Buffer
最終的な合成結果

遅延シェーディング(遅延レンダリングとも)はスクリーンスペース上でシェーディングを行う技術である。遅延と呼ばれるのはバーテックスとピクセルのシェーダーの第一パスでシェーディングが実際に実行されていないからである。かわりにシェーディングは第二パスまで「遅延」するのだ。

遅延シェーダーの第一パスでは、シェーディング計算に必要とされるデータは収集されるのみだ。各表面の位置や法線、マテリアルは一組のテクスチャとして幾何学(Geometry)バッファー(G-Buffer)でレンダリングされる。この後、ピクセルシェーダーは、スクリーンスペースでテクスチャバッファーの情報を使う各ピクセルで直接/間接照明を演算する。

スクリーンスペース・ディレクショナルオクルージョン[1]は直接影や反射を与えるという目的で遅延シェーディングのパイプラインの一部にすることができる。


メリット[編集]

遅延シェーディングの主なメリットとしてはシーンのジオメトリーとライティングの分離があげられるだろう。一つのジオメトリーパスのみが要求され、各光源は実際に影響するピクセルにのみ演算される。これは深刻なパフォーマンスへの影響なしにシーンで多くの光源をレンダリングできるということである。[2] この手法ではほかにもいくつかのメリットが論じられている。メリットには複雑なライティングのリソースのより簡単な管理やほかの複雑なシェーダーリソースの管理の容易化やソフトウェアレンダリングパイプラインの単純化も含まれているかもしれない。

デメリット[編集]

遅延レンダリングの重要なデメリットにアルゴリズムで透明性を制御できないことがある。この問題はZ-Bufferを使ったシーンでは一般的な問題ではあるが、シーンの透明の部分のレンダリングの遅延とソートに制御されがちである。[3] デプス・ピーリングは遅延レンダリングにおいてはオーダーインディペンデント・トランスパレンシ達成に貢献しうるが、追加バッチとG-Bufferのコストを犠牲にせざるを得ない。DirectX 10以降をサポートしている現代のハードウェアでは大体バッチを実行してもリアルタイムのフレームレートを十分な速さで維持できる。オーダーインディペンデント・トランスパレンシが強く要求される時(一般的には民間用アプリケーション用)、遅延シェーディングは同様の技術を用いた将来的なシェーディング以上には効果が見込めない。

もう一つの深刻なデメリットに複数のマテリアルを使うのが困難だということがある。沢山の異なるマテリアルを使うのは不可能だが、G-bufferで集められるデータはそれ以上が要求される。それはもはや非常に大きくメモリ帯域を使い果たす。[4]

さらにもう一つの深刻なデメリットがある。それはライティングの段階とジオメトリーの段階を切り離しているため、ハードウェアアンチエイリアスは一定以上正確な結果を出せないことである。第一段階では、基礎的なプロパティ(拡散反射、法線他)をレンダリングする時にアンチエイリアスを使え、完全なライティングが適用されるまでアンチエイリアスは必要とされない。この制限をやぶるための一般的な技術の一つに最後の画像でエッジ検出を使い、エッジをぼやけさせるというものがある。[5] しかし、近年ではそれ以上に進歩的なポストプロセス・エッジスムージング技術が開発された。例を挙げればMLAA[6] (中でもKILLZONE 3en:Dragon Age 2に使われた)、FXAA[7] (Crysis 2F.E.A.R. 3Duke Nukem Foreverで用いられた)、SRAA [8]DLAA[9] (en:Star Wars: The Force Unleashed IIで用いられた)、ポストMSAA (Crysis 2でデフォルトのアンチエイリアス法として使われた) がある。他のポピュラーな技術にテンポラル・アンチエイリアシングがあり、Halo:Reachで使われた。[10] Direct X 10ではシェーダーがマルチサンプリングしたレンダータゲット(およびバージョン10.1ではデプスバッファ)において個々のサンプルにアクセスできる機能が提供され、ハードウェアアンチエイリアスを遅延シェーディングで行うことを可能にした。これらの機能はHDRルミナンスマッピングをアンチエイリアス済みのエッジに正確に適用することも可能にし、前世代のハードウェアではアンチエイリアスのすべての利益が失われるかもしれないところでは、どんな場合でも望ましいアンチエイリアスの形式にする。

遅延ライティング[編集]

遅延ライティング(ライトプリパスとも)は遅延シェーディングを改変したものである。[11] この技術は遅延シェーディングの2つのパスではなく3つのパスを用いる。シーンのジオメトリーに関する第一パスではピクセルごとのライティング(放射照度)に必要な属性のみをG-Bufferに書き込む。遅延パスはG-Bufferを参照しながらスクリーンスペース上でその時拡散/反射の光源データのみを出力する。最終パスでは遅延パスで生成した光源データを参照しながらシーンを再度レンダリングし、最終的なピクセルごとのシェーディング結果を出力する。遅延ライティングの明確なメリットはG-Bufferのサイズの劇的な削減だ。明らかなコストはシーンのジオメトリーを、一度ではなく二度レンダリングすることが必要ということである。遅延シェーディングにおける遅延パスは一つの組み合わさった放射輝度の値を出力するだけでよいが、追加のコストとして遅延ライティングにおける遅延パスは別々に拡散/反射 放射照度を出力しなければならない。

G-Bufferのサイズの削減により、この技術は部分的にではあるが遅延シェーディングの深刻な欠点である、複数のマテリアルの問題を克服することができる。解決できるもう一つの問題はMSAAだ。遅延ライティングはDirectX 9のハードウェアではMSAAと一緒に使うことができる。

商業ゲームで使われた遅延ライティング[編集]

この技術は大量の動的な照明の使用や必要なシェーダー命令の複雑さの削減に関してコントロールできるため、コンピュータゲームでその使用が増加している。以下に遅延ライティングを用いているゲームの例をいくつか挙げる。

商業ゲームで使われた遅延シェーディング[編集]

遅延ライティングとは対照的に、この技術は多量のメモリや帯域を要求するためあまり人気はない。特にコンソールでは、メモリや帯域幅は強く限定され、しばしばボトルネックとなる。

ゲームエンジンにおける遅延技術[編集]

略歴[編集]

遅延シェーディングの考えは遡るとen:Michael Deeringとその同僚が1988年に書いた「三角形のプロセッサと法線ベクトルシェーダー ハイパフォーマンスグラフィックのためのVLSIシステム」という題名の論文[43] で広められた。しかし、この論文では全く「遅延(Deferred)」という単語は使われておらず、主要な発想は「各ピクセルがデプスレゾリューションの後に一度だけシェーディングされる」というものだった。我々が今日知っているような、G-Bufferを使う遅延シェーディングは1990年の旧NTTヒューマンインタフェース研究所の斎藤隆文と高橋時市郎による論文で世に出されたが、[44] 彼らも「遅延」という単語を使ってはいなかった。2004年前後に適当なグラフィックスハードウェアの実現が見えだし始めた。[45]その後この技術はコンピュータゲームのようなアプリケーション用に人気が出て、最終的に2008年から2010年あたりに主流となった。[46]

脚注[編集]

  1. ^ http://kayru.org/articles/dssdo/
  2. ^ http://thecansin.com/Files/Deferred%20Rendering%20in%20XNA%204.pdf
  3. ^ NVIDIA SDK 9.51 - Featured Code Samples”. NVIDIA (2007年1月17日). 2007年3月28日閲覧。
  4. ^ http://diaryofagraphicsprogrammer.blogspot.com/2008/03/light-pre-pass-renderer.html
  5. ^ Deferred shading tutorial”. Pontifical Catholic University of Rio de Janeiro. 2008年2月14日閲覧。
  6. ^ http://igm.univ-mlv.fr/~biri/mlaa-gpu/TMLAA.pdf
  7. ^ http://www.ngohq.com/images/articles/fxaa/FXAA_WhitePaper.pdf
  8. ^ http://research.nvidia.com/publication/subpixel-reconstruction-antialiasing
  9. ^ http://and.intercon.ru/releases/talks/dlaagdc2011/
  10. ^ http://and.intercon.ru/releases/talks/dlaagdc2011/slides/
  11. ^ http://www.realtimerendering.com/blog/deferred-lighting-approaches/
  12. ^ a b http://gamer.blorge.com/2010/11/21/bioshock-infinite-development-is-ps3-focused-and-uses-uncharted-2-tech/
  13. ^ http://www.eurogamer.net/articles/digitalfoundry-crackdown2-tech-interview
  14. ^ http://www.slideshare.net/guest11b095/a-bit-more-deferred-cry-engine3
  15. ^ Dead Space by Electronic Arts”. NVIDIA. 2008年2月14日閲覧。
  16. ^ Face-Off: Dead Space 2”. 2010年2月1日閲覧。
  17. ^ http://translate.google.com/translate?hl=en&sl=ja&tl=en&u=http%3A%2F%2Fgame.watch.impress.co.jp%2Fdocs%2Fseries%2F3dcg%2F20100922_395310.html
  18. ^ http://www.eurogamer.net/articles/digitalfoundry-halo-reach-tech-interview
  19. ^ http://www.digitalscrutiny.com/content/2011/01/littlebigplanet-2-tech-analysis/
  20. ^ http://www.eurogamer.net/articles/digitalfoundry-the-making-of-shift-2?page=2
  21. ^ Shishkovtsov, Oles (2005年3月7日). “GPU Gems 2: Chapter 9. Deferred Shading in S.T.A.L.K.E.R”. Nvidia. 2011年2月2日閲覧。
  22. ^ http://cmpmedia.vo.llnwd.net/o1/vault/gdc09/slides/gdc09_insomniac_prelighting.pdf
  23. ^ StarCraft II Effects & techniques (PDF)”. AMD. 2012年7月9日閲覧。
  24. ^ http://features.cgsociety.org/story_custom.php?story_id=5545
  25. ^ http://platinumgames.com/tag/deferred-rendering/
  26. ^ http://www.gameinformer.com/b/features/archive/2012/03/28/ac-iii-the-redesigned-anvil-engine.aspx
  27. ^ http://www.playsomnia.com/index.php?option=com_content&view=article&id=863:frictional-games-interview&catid=56:intervjui
  28. ^ http://www.slideshare.net/DICEStudio/spubased-deferred-shading-in-battlefield-3-for-playstation-3
  29. ^ http://www.guerrilla-games.com/publications/dr_kz2_rsx_dev07.pdf
  30. ^ http://www.eurogamer.net/articles/digitalfoundry-tech-interview-metro-2033?page=2
  31. ^ History - Electric Sheep Games”. 2011年4月14日閲覧。
  32. ^ Deferred shading in Tabula Rasa”. NVIDIA. 2008年2月14日閲覧。
  33. ^ http://forums.steampowered.com/forums/showpost.php?p=16668774&postcount=5
  34. ^ http://forums.steampowered.com/forums/showpost.php?p=27599827&postcount=18
  35. ^ Valve Developer Wiki - Dota 2”. 2012年4月10日閲覧。
  36. ^ CryENGINE 3 Specifications”. Crytek GmbH. 2009年3月27日時点のオリジナルよりアーカイブ。2009年3月12日閲覧。
  37. ^ Infinity Development Journal – Deferred Lighting”. I-Novae Studios (2009年4月3日). 2011年1月26日閲覧。
  38. ^ Vosburgh, Ethan (2010年9月9日). “Unity 3 Feature Preview – Deferred Rendering”. Unity Technologies. 2011年1月26日閲覧。
  39. ^ Lighting you up in Battlefield 3”. DICE (2011年3月3日). 2011年9月15日閲覧。
  40. ^ Unreal Engine 3 Showcase - Samaritan”. Epic Games (2011年3月10日). 2011年7月7日閲覧。
  41. ^ GameStart – Feature List”. 2012年12月10日閲覧。
  42. ^ Deferred lighting - Alien Swarm SDK” (2012年5月29日). 2012年5月29日閲覧。
  43. ^ Deering, Michael; Stephanie Winner, Bic Schediwy, Chris Duffy, Neil Hunt. “The triangle processor and normal vector shader: a VLSI system for high performance graphics”. ACM SIGGRAPH Computer Graphics (ACM Press) 22 (4): 21–30. 
  44. ^ Saito, Takafumi; Tokiichiro Takahashi (1990). “Comprehensible rendering of 3-D shapes”. ACM SIGGRAPH Computer Graphics (ACM Press) 24 (4): 197–206. doi:10.1145/97880.97901. 
  45. ^ Deferred Shading (PDF)”. NVIDIA. 2007年3月28日閲覧。
  46. ^ Klint, Josh. Deferred Rendering in Leadwerks Engine. Leadwerks. http://www.leadwerks.com/files/Deferred_Rendering_in_Leadwerks_Engine.pdf. 

関連項目[編集]