Created on | Updated on
フォローする

近日リリース予定の多数ライト使用時の素晴らしい最適化


長年Redshiftを使用しているユーザーは、Redshiftが多くのライトを含むシーンに役立つ最適化を行っていることをご存知だと思います。 RS 3.0の作業の一環として、Redshiftで多くのシステムを再検討してきました。この「多数ライトの最適化」は、そのうちの1つです。

このシステムをテストするために、我々は、基本的に拡散反射と中程度の光沢反射の両方を持つシェーダを備えた高周波ノイズディスプレイスメントグリッド上に576ライトを配置した「シンプルで恐ろしい」シーンを作成しました。このシーンでは、最大1024のUnifieldサンプルをもつボケが使用されています。このシーンが「恐ろしい」理由は、スクリーン上のほぼすべての単一ピクセルにすべてのライトが影響を与え、「簡単な出口」がないからです。すなわち、Redshiftは受光面の後ろにあるライトを単純に排除することができません。このシーンのすべてのライトは「サーフェースの前」にあり、ブロックされていないので、すべてを考慮する必要があります。ディスプレイスメントノイズは各ピクセルが近傍のピクセルと比較して、完全に異なるライトセットの影響を受けることを意味します。(一貫性がないため)1024個の最大Unifiedサンプルに576個のライトを掛け合わせると、最悪のシナリオでは、1ピクセルあたり50〜100万本の光線を放射する必要があります。 それは多くのレイトレーシングとなります!

したがって、この特定のシーンでは、レンダリング時間の大部分がライティングに費やされます。 反射などのコストがありますが、それは照明に必要な徹底的な計算努力によって小さくなります。そして照明システムを改善するための良いシーンになります。

さて、長いストーリーを短縮するために、初期の最適化の一部でレンダリング時間が5倍〜10倍に短縮されました! 既存の2.6バージョンは、12分39秒でレンダリングされた576個のライトを、2分39秒にする新しいコードを追加しました。 既存の2.6バージョンは32分38秒でエリアライトの計算を行いますが、新しいコードは3分03秒で計算できました。すべてにおいて 余分なノイズを導入することなくです!

画像は意図的にぼやけていますのでご注意ください。 ノイズ除去は使用していません。Redshiftに多くの作業を行わせるために画像全体にぼかしています。(意図的にレンダリングを遅くさせています)

Point lights - old version (12m:39s):

point_old_12_39.png

Point lights - new version (2m:39s):

point_new_2_39.png

Area lights - old version (32m:38s):

area_old_32_38.png

Area lights - new version (3m:03s):

area_new_3_03.png

免責事項と注意点のお知らせ

- この記事では、Redshiftが以前より5〜10倍速くレンダリングできると主張しているわけではありません! このテストで主張していることは、多くのライトを含むシーン(そしてほとんどのレンダリング時間が照明に費やされているシーン)で通常作業する場合、すぐに健全な速度向上を実感するができるということです。 この特定のテストシーンは、照明に関する計算が全てだったので、このような大きなスピードアップを得ることができました。

- 上記の最適化によって劇的に改善されない可能性があるライトが大量に存在するシーンがあるかもしれません。 しかし、ほぼすべてのシーンが素晴らしい高速化を実感できることは確かです。 当然のことながら、ライトをほとんど含まないシーンは「ライティングバウンド」が少なくなるため、あまり効果的ではありません。

- この最適化はもともとRedshift 3.0を対象としていましたが、2.6コードベースでは「十分に互換性がある」ことが判明しました。 そこで、次の2つのビルドの1つに導入する予定です!

- これが照明に関する唯一の最適化ではありません。さらに多くの機能が追加されますが、レンダラのコアに重大な変更が加えられるため、Redshift 3.0ではさらに高度な最適化(考えられる例外を除いて)を導入される可能性があります。

ご質問やご意見がありましたらお知らせください。