物理的にはより正確になった反面、従来のレンダリングよりも速度低下しやすいです。この部分の最適化について説明します。リニアワークフローだけを使用した場合の速度低下はありません。PBRマテリアルとレンダリング設定により、レンダリング時間は大きく変わることになります。ver.20.0段階のものになります。PBRのレンダリングの仕組みPBRマテリアルのもっとも基本となる要素は「ベースカラー(BaseColor)」「メタリック(Metallic)」「ラフネス(Roughness)」「発光(Emissive)」「法線マップ(Normal)」があります。加えて「透明」「屈折(スペキュラ)」があります。PBRマテリアルの「メタリック(Metallic)」「ラフネス(Roughness)」の組み合わせで、金属的な表現や鏡のような鏡面反射、プラスチックや反射の少ないコンクリートや紙など様々な表現ができます。ここで、レンダリングとしてのPBRについて説明していきます。レンダリングは「レイトレーシング」をベースにしており、スクリーンの1点から飛ばしたレイが物体へ衝突したり反射を繰り返して、最終的に1枚の絵になります。このときの「反射」の挙動がPBRでの大事なポイントになります。「反射」や「透過(屈折)」がある場合に、1点のレイトレースは枝分かれしていきます。そのため、レンダリング時間がかかることになります。メタリックでの反射PBRマテリアルの「メタリック」は、屈折率が1.0の場合に入射方向から衝突した面の法線方向(n)に対して同じ角度で反射します。理想的な正反射(鏡面反射)の場合は、鏡のような反射の表現になります。この場合は、PBRマテリアルは「メタリック」を1.0、「ラフネス」を0.0として表現できます。この状態は、「Shade3Dマテリアル」の「反射」を1.0としたときの挙動に相当します。「ラフネス」がある場合は表面がざらついた表現になります。凸凹具合(目に見えないくらいの微小な凸凹です)により、物体表面での反射がぶれることになります。このとき、複数回の反射をレイトレースして平均を求めます。これを「サンプリング」と呼びます。これにより、レンダリング時間の増加とノイズが発生することになります。この状態は、「Shade3Dマテリアル」の「荒さ」を0.0以上にしたときの挙動に相当します。「ラフネス」を上げていくと、正反射による映り込みが見えない状態になります。この状態は「拡散反射」(Diffuse)と呼ばれ、「理想的な拡散反射」が行われる場合に半球状に複数回の反射をレイトレースして平均を求めることになります。これは、PBRマテリアルの「ラフネス」を1.0にしたときの挙動になります。「Shade3Dマテリアル」の場合は、「反射」と「荒さ」「光沢」が0の挙動に相当します。光沢も「ラフネス」で変化することになります。「Shade3Dマテリアル」では、「理想的な拡散反射」が行われる場合に「ランバート」(Lambert)の近似式で計算するため、レイトレースでのサンプリングは行われません。そのため、速度が確保できていました。PBR(PBRマテリアル)の場合は「ラフネス」で調整するため、必ず反射のサンプリングは行われます。そのため、拡散反射の表現になるとノイズも増加することになり、それを補うためのサンプリングを増やすことで、レンダリング時間がかかる結果になります。反面、物理的に正確なマテリアルの表現に近づきます。このPBRの性質を理解することで、レンダリング品質や速度を詰めやすくなります。以上の知識を元にして、実際のレンダリング時間を短縮していきます。以下の環境で確認しました。(4コア)物理メモリ16GB直接照明だけのシーン細かい模様のあるテクスチャをベースカラーに割り当てています。レンダリング設定ウィンドウでレンダリング手法「レイトレーシング」、大域照明を「無し」にしました。「視線追跡レベル」を4、「レイトレーシングの画質」を30にしています。8秒レンダリングは速いですが、テクスチャの模様が細かいためモアレが発生しています。地面の直線も途切れる箇所が見えます。次に、アンチエイリアシングでアダプティブサンプリングを使用しました。6分24秒きれいになりましたが、レンダリング時間がかなりかかるようになりました。この場合は、アンチエイリアシングをアダプティブサンプリングに切り替えたのが速度低下の要因となりそうです。品質は上げたいですがレンダリング速度を低下させたくないという場合、手法を「パストレーシング」に切り替えます。することで自然にピクセルサンプリングも行われ、アダプティブサンプリングを使う必要がなくなります。品質を保ったまま、レンダリング時間が6分24秒から1分50秒に短縮されました。大域照明があるシーン大域照明で「パストレーシング」を使用する場合、透過するマテリアルがあるとレンダリング時間がかかります。以下のレンダリングは3つの面光源を配置し、背景にHDRIを指定しています。背景としての映り込みの目的でのみ使用するため(光源(IBL)としては使用しない)、背景の「光源としての明るさ」は0.0にしています。レンダリング設定の「視線追跡レベル」を10、「レイトレーシングの画質」を50にしています。大域照明の設定は、初期値のまま使用しています。7時間56分18秒レンダリング時間がかなりかかっています。ここから最適化していきます。右のカップは透過する形状のため、「視線追跡レベル」を小さくしすぎると正しく透過しにくくなります。7時間56分18秒から2時間35分04秒に大幅短縮できました。次に、レンダリング手法を「パストレーシング」にしました。1時間31分29秒レンダリング手法を「レイトレーシング」から「パストレーシング」に変更することで、レンダリング時間は2時間35分04秒から1時間31分29秒に短縮できました。地面の高周波ノイズが少し目立っています。このシーンでは地面のマテリアルはラフネス成分が大きく、ほとんど反射/映り込みはありません。そこで、地面のマテリアルを「PBRマテリアル」から「Shade3Dマテリアル」に置き換えます。他の湯呑みやカップのマテリアルはそのままです。59分58秒1時間31分29秒から59分58秒にレンダリング時間を短縮できました。地面の高周波ノイズも減っています。これは、レンダリング画像に占める拡散反射面(反射/映り込みが少ない部分)が多い場合に有効です。最後に「レイトレーシングの画質」を50から40に変更しました。「レイトレーシングの画質」調整での速度アップは、他のパラメータの変更に比べてそれほど大きくないですが、59分58秒から51分15秒にレンダリング時間を短縮できました。何回かレンダリングして最低限の適切な値を探すようにします。このように「PBRマテリアル」を使用したときは、レンダリング設定のパラメータをいくつか調整することでレンダリング速度を短縮することができます。どのシーンのときにどの値を指定すればいいのかというのはシーンによって異なるため、何回かレンダリングを試して詰めていく必要があります。まとめると、以下の調整が有効になります。ver.20のリニアワークフローとPBRマテリアルの説明は一通り完了しました。次回、本格的なシーンを実践例として説明していく予定です。WordPressTranslate。