2012年以降のプロセッサで実現できること、出来ないこと

ソフトウェアレンダリングパイプラインを実装する場合にもパフォーマンス効率を考えなければならない。2012年以降のCPU & GPU統合型プロセッサは確実に数十コア以上を有するメニーコアなので、これを高効率活用することがハイパフォーマンスを引き出す近道となる。

TIM SWEENEY氏が個々で提唱するのが「タイルレンダリング」だ。

レンダーターゲットを1つのフレームバッファとして取り扱うのではなく、例えば8×8ピクセル程度のひとかたまり(bin)のタスクとして発生させ、これを各コアに処理させる(≒マルチスレッド発注する)のだ。

このタイルの分解解像度は動作させるプロセッサの1コアあたりのキャッシュ容量に最適化する必要がある、とTIM SWEENEY氏はいう。これには、処理対象オブジェクトに関連したデータ(3Dモデルデータ、テクスチャなど)を、なるべく多くキャッシュに載せることでメモリアクセスに伴う遅延、メモリ帯域消費を削減する狙いがある。

フレームバッファを細かくタイルとして分解し、そのタイル単位のレンダリングを1コア(1スレッド)として発注する

こうした一連のソフトウェアレンダリングパイプラインの副次的なメリットとして、1ピクセルあたりの情報量を大きく取れる点も挙げている。

1ピクセルあたりの情報を大きく(深く?)取れるとどんなメリットがあるというのか。

現状のレンダリングパイプラインでは、ピクセルシェーダによる陰影処理を終えて出力される1ピクセルは、フレームバッファ内の一意的な一箇所に上書きされてしまう。

これを、ピクセル出力毎に動的にメモリを確保するようにして、そこにそのピクセルの透明度、ジオメトリ関連情報までを出力するようにすれば、解析的なアンチエイリアシング処理を実装でき、さらに描画順序に依存しない透明/半透明描画が実現できる(これがいわゆるA-BUFFER法の実現と言うことになる)。

現在、リアルタイム3Dゲームグラフィックスにおいて、シーンをゆっくり見回したり、あるいはオブジェクトがゆっくり動いたときにチラチラとピクセルが明滅するような現象が知覚されることがあるが、これは「PIXEL SHIMMERING」(ピクセルが揺らめく現象)と呼ばれている。これは現行のアンチエイリアス処理で起こるポリゴンエッジの誤差の露呈、透明/半透明の描画順序エラーなどによって起こるものだが、この「1ピクセルあたりの情報を大きくとる」工夫を実装できれば、こうした問題も解決できる、とTIM SWEENEY氏は見積もる。

「1ピクセルあたりの情報を大きくとる」工夫を実装できれば、PIXEL SHIMMERING問題から解放される?

ソフトウェアレンダリングパイプラインの実装、そしてそれがもたらす自由度の高いレンダリングパイプラインによるCG映画品質の映像表現……。TIM SWEENEY氏はここまでの実現は可能性が高いと述べるが、「しかし、まだ進化の余地がある分野はある」ともいう。

人間のリアルな感情表現や人間らしい動き(アニメーション)などの、完全な算術的アプローチでの合成は次の世代まで研究が続くだろうというのだ。また、2012年~2020年の3Dグラフィックスでは部分的には間接照明/大局照明は可能になるだろうが、まだ完璧なものには程遠いはずだともいう。

また、シーンに登場させるオブジェクト数が増えたり、レンダリング解像度を上げれば、2012年以降のメニーコアタイプのCPU & GPU統合型プロセッサといえどもパフォーマンスは低下するわけで、表現出来ることとパフォーマンスの関係は依然と「バランス関係」として存在し続ける。つまり、2012年以降も今にも増してプロセッサの性能向上は望まれ続けるであろうと言うことだ。

「2012年~2020年のリアルタイム3Dグラフィックスは、アンチエイリアシング、直接照明、影生成、パーティクルといった分野については、現状のオフラインCG映画品質と同等のモノが実現できると確信している」(TIM SWEENEY氏)