「遅延レンダリング」の版間の差分
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
81行目: | 81行目: | ||
2000年代中頃あたりに夜中に作戦行動する[[右下から銃の生えたゲーム]]で大流行した。遅延レンダリングといえばだいたい「夜」である。 | 2000年代中頃あたりに夜中に作戦行動する[[右下から銃の生えたゲーム]]で大流行した。遅延レンダリングといえばだいたい「夜」である。 | ||
+ | |||
+ | == 欠点 == | ||
+ | |||
+ | === MSAAが使えない === | ||
+ | 遅延レンダリングでのライティング処理は「2D画像処理」であり、その時点で「[[ポリゴン]]のエッジの情報」は喪失している。このため「[[ポリゴン]]のエッジの情報」を用いて[[アンチエイリアシング]]を行う[[MSAA]]は使えない。 | ||
+ | |||
+ | [[フォトショップ]]なんかにある「エッジ抽出」をリアルタイムに行い、強引に[[アンチエイリアシング]]するという手法もあるが絶望的に効率が悪い。そのような状況下で少しでも性能を向上させようと、[[MLAA]]、[[FXAA]]、[[TXAA]]、[[SRAA]]、[[DSAA]]、[[ポストMSAA]]など様々な手法が考案されている。 | ||
==手順== | ==手順== |
2020年4月8日 (水) 05:53時点における版
遅延レンダリング(英語:Deferred Rendering)とは、3DCGにおいて、物体の描画とライティングを別々に行う技法である。こいつの登場により従来型のレンダリングは「フォワードレンダリング」と呼ばれるようになった。
目次
概要
遅延レンダリングではシーンの中にポイントライトなどを多数配置してもドローコールが増えないという特徴がある。
フォワードレンダリングでのドローコール数は以下のようなモデルとライトの掛け算である。
ドローコール数 = モデル数 x ライト数
一方、遅延レンダリングでは以下のような感じになる。ちなみに「x3」の部分はマルチプルレンダーターゲットを利用すれば「x1」にすることができる。
ドローコール数 = 初期化x3 + モデル数x3 + ライト数 + 結合処理
太陽光など平行光源が1個しかない状況ではフォワードレンダリングの方が有利だが、街灯などのポイントライトが何個もある状況では遅延レンダリングの方が有利である。
モデル数 | ライト数 | ドローコール数 | 備考 | ||
---|---|---|---|---|---|
フォワード | デファード | デファード+MRT | |||
1 | 1 | 1 | 8 | 4 | |
10 | 1 | 10 | 35 | 13 | ライトが少ないときはフォワードレンダリングが有利 |
10 | 2 | 20 | 36 | 14 | MRTありが逆転 |
10 | 4 | 40 | 38 | 16 | MRTなしも逆転 |
10 | 8 | 80 | 42 | 20 | |
10 | 16 | 160 | 50 | 28 | |
10 | 32 | 320 | 66 | 44 | |
10 | 64 | 640 | 98 | 76 |
2000年代中頃あたりに夜中に作戦行動する右下から銃の生えたゲームで大流行した。遅延レンダリングといえばだいたい「夜」である。
欠点
MSAAが使えない
遅延レンダリングでのライティング処理は「2D画像処理」であり、その時点で「ポリゴンのエッジの情報」は喪失している。このため「ポリゴンのエッジの情報」を用いてアンチエイリアシングを行うMSAAは使えない。
フォトショップなんかにある「エッジ抽出」をリアルタイムに行い、強引にアンチエイリアシングするという手法もあるが絶望的に効率が悪い。そのような状況下で少しでも性能を向上させようと、MLAA、FXAA、TXAA、SRAA、DSAA、ポストMSAAなど様々な手法が考案されている。
手順
1. Clear GBuffer
Color, Normal, Depthなどからなる「GBuffer」を初期化する。
2. Draw GBuffer
GBufferに描画する。この時点ではまだライティングは行わない。描画時にライティングを行わないから「遅延レンダリング」という。
3. Lighting
GBufferと各種ライトを掛け合わせて「ライティング結果」を生成する。
4. Combine
GBufferとライティング結果を合成して最終的な絵が完成する。