「タイルベースレンダリング」の版間の差分
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
(同じ利用者による、間の4版が非表示) | |||
1行目: | 1行目: | ||
− | '''タイルベースレンダリング'''([[英語]] | + | '''タイルベースレンダリング'''([[英語]]:tile based rendering)とは、 [[コンピューター・グラフィックス]]において、1つの画面を描画生成する際に、1画面を複数のタイルに分割してタイル単位で描画を行う手法である。 |
古くは「チャンクレンダリング」「分割レンダリング」などとも呼ばれた。 | 古くは「チャンクレンダリング」「分割レンダリング」などとも呼ばれた。 | ||
19行目: | 19行目: | ||
一方、タイルベースレンダリングでは作業用に必要なメモリ容量が「タイルの大きさ」で済む。16x16や32x32という超低解像度を格納する程度のメモリなら超高速な[[SRAM]]でも安い。 | 一方、タイルベースレンダリングでは作業用に必要なメモリ容量が「タイルの大きさ」で済む。16x16や32x32という超低解像度を格納する程度のメモリなら超高速な[[SRAM]]でも安い。 | ||
− | [[ファイル:Tiled base rendering 1.png|none | + | [[ファイル:Tiled base rendering 1.png|none]] |
なお、メモリ容量については昨今のバカみたいにメモリを搭載した[[パソコン]]や[[スマホ]]では[[フルHD]]([[1920x1080]])でも数十MB程度なのであまり問題にならない。 | なお、メモリ容量については昨今のバカみたいにメモリを搭載した[[パソコン]]や[[スマホ]]では[[フルHD]]([[1920x1080]])でも数十MB程度なのであまり問題にならない。 | ||
一方、メモリ帯域に関しては今でも厳しい。 [[パソコン]]向けの[[ビデオカード]]では「やれ[[GDDR]]だ」「やれ[[HBM]]だ」と力技で解決が試みられているが、 [[スマ]]ホはバカみたいに遅い[[LPDDR]]がいまだに主流なので問題になることが多い。 | 一方、メモリ帯域に関しては今でも厳しい。 [[パソコン]]向けの[[ビデオカード]]では「やれ[[GDDR]]だ」「やれ[[HBM]]だ」と力技で解決が試みられているが、 [[スマ]]ホはバカみたいに遅い[[LPDDR]]がいまだに主流なので問題になることが多い。 | ||
+ | |||
+ | ==利点:タイルを再利用できる== | ||
+ | シーンの「動きが小さい」と判断した場合、クソ真面目に描画せず、前フレームで生成したタイルに[[アフィン変換]]をかけたものを出力することで手抜きができる。あくまで近似画像であり、当然ながら画質は微妙になるが、描画負荷は大幅に下る。シーンの動きが大きい場合は残念なことになる。地味に20世紀の[[GPU]]では重要な要素だったようだ。 | ||
==欠点:オーバードローが発生する== | ==欠点:オーバードローが発生する== | ||
29行目: | 32行目: | ||
以下の例では1[[ポリゴン]]を描画するのに灰色の4タイルそれぞれで[[シェーダー]]が動いてしまう。 | 以下の例では1[[ポリゴン]]を描画するのに灰色の4タイルそれぞれで[[シェーダー]]が動いてしまう。 | ||
− | [[ファイル:Tiled base rendering 2.png|none | + | [[ファイル:Tiled base rendering 2.png|none]] |
+ | |||
+ | ==欠点:タイル割当が重い== | ||
+ | タイルベースレンダリングでは以下のような工程になる。 | ||
+ | # バーテックスシェーダー実行 | ||
+ | # ポリゴンをタイルに割り当てる | ||
+ | # タイル単位でピクセルシェーダー実行 | ||
+ | |||
+ | この処理はシーン内のポリゴン数が増えれば増えるほど重くなる。 | ||
+ | [[PowerVR]]が登場したころの[[ローポリゴン]]が主流の時代には問題にならなかったが、 | ||
+ | ポリゴン数が激増すると、この処理は無視できないほど高負荷になった。 | ||
== 関連項目 == | == 関連項目 == | ||
* [[フォワードレンダリング]] | * [[フォワードレンダリング]] | ||
* [[遅延レンダリング]] | * [[遅延レンダリング]] |
2021年7月15日 (木) 05:00時点における最新版
タイルベースレンダリング(英語:tile based rendering)とは、 コンピューター・グラフィックスにおいて、1つの画面を描画生成する際に、1画面を複数のタイルに分割してタイル単位で描画を行う手法である。
古くは「チャンクレンダリング」「分割レンダリング」などとも呼ばれた。
概要[編集 | ソースを編集]
タイル方式は大雑把にいえば「メモリの容量と帯域を節約する手法」である。
「少ないメモリ」「遅いメモリ」という条件下では 従来方式ではシェーダーが空回りしてハナクソほじってる時間が長くなるが、 タイル方式であればシェーダーを遊ばせることなくフル稼働させやすい。なお、「メモリ負荷は下がる」が「シェーダー負荷が上がる」という欠点もある。
20世紀のメモリ容量が数MBだった時代には夢のような技術あり、 「ハードウェアを安く作れると夢のような手法」だと言われた。
採用事例[編集 | ソースを編集]
タイルベースレンダリングは、マイクロソフトが絶賛し「Talisman」をぶち上げ、NECが「PowerVR」を製造してしまい、セガがドリームキャストに採用された。 一方、プレイステーション2は「力こそパワー」であると2560ビットの超高速バスを採用した。
21世紀になるとタイルベースレンダリングは「忘れ去られた技術」になっていたが、iPhoneが採用し復活を果たした。 これはスティーブ・ジョブズの厳しい筐体サイズや消費電力への要求に応えるためだと思われる。
利点:メモリを節約できる[編集 | ソースを編集]
一般的なレンダリング手法では描画作業用に画面解像度相当のカラーバッファや深度バッファやステンシルバッファなどを必要とする。 これらは20世紀のパソコンで主流だったVGA(640x480)でも1MB以上が必要になる。 さらにこれを60fpsで描画しようとするとメモリ帯域が問題になる。
一方、タイルベースレンダリングでは作業用に必要なメモリ容量が「タイルの大きさ」で済む。16x16や32x32という超低解像度を格納する程度のメモリなら超高速なSRAMでも安い。
なお、メモリ容量については昨今のバカみたいにメモリを搭載したパソコンやスマホではフルHD(1920x1080)でも数十MB程度なのであまり問題にならない。
一方、メモリ帯域に関しては今でも厳しい。 パソコン向けのビデオカードでは「やれGDDRだ」「やれHBMだ」と力技で解決が試みられているが、 スマホはバカみたいに遅いLPDDRがいまだに主流なので問題になることが多い。
利点:タイルを再利用できる[編集 | ソースを編集]
シーンの「動きが小さい」と判断した場合、クソ真面目に描画せず、前フレームで生成したタイルにアフィン変換をかけたものを出力することで手抜きができる。あくまで近似画像であり、当然ながら画質は微妙になるが、描画負荷は大幅に下る。シーンの動きが大きい場合は残念なことになる。地味に20世紀のGPUでは重要な要素だったようだ。
欠点:オーバードローが発生する[編集 | ソースを編集]
「タイルをまたぐポリゴン」を描画する場合はそのタイル数だけシェーダーが動くことになる。いわゆるオーバードローである。
以下の例では1ポリゴンを描画するのに灰色の4タイルそれぞれでシェーダーが動いてしまう。
欠点:タイル割当が重い[編集 | ソースを編集]
タイルベースレンダリングでは以下のような工程になる。
- バーテックスシェーダー実行
- ポリゴンをタイルに割り当てる
- タイル単位でピクセルシェーダー実行
この処理はシーン内のポリゴン数が増えれば増えるほど重くなる。 PowerVRが登場したころのローポリゴンが主流の時代には問題にならなかったが、 ポリゴン数が激増すると、この処理は無視できないほど高負荷になった。