【Arnold,MAYA】実践的なレンダー設定をしようvol1_Sampling+Ray Depth編【TIPS】
さて、周りの学生からもよく質問に上がるArnoldのレンダリングについての基本的なことを何回かの記事に分けて紹介していきます。解決策は簡単ですが問題に気付くことが出来なければ見過ごしてしまうものです。問題を認識するきっかけにしていただけたらと思います。
たまにCameraAAのサンプル値だけ滅茶苦茶上げてる設定の学生を見かけますが、そんな人は要注意。レンダリングノイズの効率的な消し方とかレンダリング時間の削減に効果抜群なので実践的で効率的にクオリティを上げるにはArnold使いは覚えておかないと損ですよ。というわけで第一弾はポイントとなるレンダリング設定のSamplingとRayDepthの項目にフォーカスしていきます。
パストレーシングの仕組み
Arnoldのパストレーシングの仕組みはカメラからRayという光線を出してオブジェクトに当たり、それが光源に繋がることで明るさが決められています。この時rayの反射の計算が複数回繰り返されるほどレンダリング時間が多くかかってしまうようです。ハイポリや被写界深度(DOF)、モーションブラー、SSS、atmosphereの表現などが重くなってしまうのはそういった理由からかもしれません。
POINT
反射の計算が増える処理はレンダリングに時間がかかる。
レンダー設定について
Sampling
Arnold の設定について説明します。レンダリングにまつわる問題はたくさんありますが、まずどうにかしないといけないのはレンダリングノイズでしょう。主にレンダー設定のsamplingタブの中にあるスライダーを調整してインダイレクトのノイズを消していきます。ダイレクトのノイズはライトのattributeからサンプル数を上げてノイズを消していきます。
[レンダー設定]➡[Arnold Renderer]➡[sampling]
■Camera AA■
・・・総合的なサンプル値。アンチエイリアシングの品質に影響。上げると二乗した後、他のすべてのrayのサンプル値を乗算して計算する。そのため全体的なクオリティの底上げが出来る。ただしレンダリング時間が急激に増えるのでなるべく他のパスを調整した後最後の修正に使う。
MAYAで被写界深度やモーションブラーをかける際や、髪の毛などの細かいオブジェクトのノイズはここのサンプル値を上げなければ解決しない。
POINT 上げると全てのノイズが減少。ただし一気にレンダリング時間が遅くなる。
■Diffuse■
・・・拡散反射光のサンプル値。Diffuseに入るノイズと相関。
POINT 上げると表面全体に入るノイズが減少。
■Specular■
・・・鏡面反射光のサンプル値。Specularやroughnessに入るノイズと相関。
POINT 上げると金属の光沢とかのノイズが減少。
■Transmission■
・・・透過物のサンプル値。透過したり屈折する場所に入るノイズと相関。
POINT 上げるとガラスや液体など透明なマテリアルのノイズが減少。
■SSS■
・・・Subsurface Scatteringの値。SSSに入るノイズと相関。
POINT 上げると生物の皮膚や葉っぱ、和紙などSSSを使用したマテリアルのノイズが減少。
■Volume indirect■
・・・ボリューム光のサンプル値。パーティクルで煙や炎、流体エフェクトを使用した箇所のノイズと相関。
公式から拝借すると
'Volume Indirect'サンプルとper-light 'Volume Samples'は 'Atmosphere Volume'には適用されません。 'Atmosphere Volume'の品質を向上させるには、 'Atmosphere Volume'サンプルを増やす必要があります。
つまりゴッドレイとかのAtmosphere Volumeはこちらのサンプル値とは関係ありません。
POINT 上げるとエフェクトのノイズが減少。
■Lock Sampling Pattern■
サンプリングノイズがフレーム番号によって変化しないようにAA_seedをロックできます。普通のアニメーションのレンダリングの場合は気になりませんが、VR用の360度画像を書き出す場合等にチェックを入れます。
■Use Autobump in SSS■
このオプションを有効にすると、ディスプレイスメントオートバンプがレイトレースの計算結果に影響を与え、より高品質に正確になります。ただしレンダリング時間は3倍になる様子。
次にClamping、Filterタブについて。
[レンダー設定]➡[Arnold Renderer]➡[sampling]➡[Clamping] and [Filter]
Clamping
・・・鏡面反射するものに強い光が当たったときに、その周辺に現れるノイズ(輝点ノイズ)の軽減が出来ます。値が大きく外れた 1 つのサンプルを弱めて、最終的なカラーにできるだけ影響しないようにすることができます。
ノイズの輝度を抑えるので目立たないように誤魔化す効果がわかります。
Filter
・・・公式ではガウス フィルタ(幅 2.0)または Blackman-Harris フィルタを使用することを推奨しています。
もしモアレが気になる場合、ガウス フィルタの幅を4.0くらいに上げてやることでモアレを軽減できます。
他にもheatmapフィルターは明るいところは赤く、暗いところは青くなる特殊な見た目を作ることもできます。
aiToonノードを使ってセルルックでアニメのようなコンターライン(主線・線画・エッジラインのこと)を出したい場合"contour"に変更します。
Ray Depth
■Total■
・・・シーン内のrayのトータルの最大回数を指定します。
Diffuse+Specular+Transmission+Volume<=Total になります。
■Diffuse■
・・・拡散反射光の回数を指定できます。rayがオブジェクトに当たり跳ね返る回数なので室内のようにオブジェクトが沢山あるシーンでは顕著な違いがみられる。つまり床に当たって跳ね返った光が天井に当たってその光がさらに壁に当たって~といった計算を何回繰り返すかということです。なので上げるとscene全体が明るくなります。
■Specular■
rayが光沢を持った物体に反射される最大回数が指定できます。
デフォルト値では1度しか反射を返さないのでレンダリング映り込みの物体が真っ黒になっています。上げてくにつれ映り込みも正確に描画しています。
■Transmission■
光線を屈折させることができる最大回数が指定できます。ガラスのような屈折するオブジェクトがカメラから重なって見える際に影響します。
0にすれば不透明になります。
■Volume■
ボリューム内の反射回数の指定が出来ます。雲とかパーティクルでレンダリングしてみて暗く見えたらこれ。
■Transparency Depth■
透明度の許容ヒット回数の指定が出来ます。つまり透明オブジェクトが重なり合ったときこの指定回数以上になればそれ以降に重なった透明オブジェクトは不透明なオブジェクトとして扱われます。
例えばopacityで抜いた板ポリの髪の毛を沢山重ねてると黒くなることがありますが、その時はこの項目の上限を超えているからという場合があります。
ガラスのような透明で反射の多いマテリアルなどのレンダリング中に起こりがちなのが、何故かオブジェクトが黒くなるという現象です。
その原因がこれらの数値の設定にあります。この回数の上限を超えるとカメラに黒を返します。つまりsceneの光量が小さくなったりオブジェクトの一部が黒く見えたりするというわけです。特にDiffuseやSpecularはデフォルトではRayの反射回数の上限が低めに設定されているので注意が必要です。
重なり合った透明オブジェクトや反射した物体の映り込みに黒い箇所があったら、いや違和感がなくても設定を弄ってみるといいかも。意外と変化があります。
まとめ
例えばハードサーフェスモデリングするだけならおそらくSSSとかVolumeエフェクトとかは使いません。だったら使ってないサンプル値は0で良いよってことになります。そうすることで無駄な計算を省きレンダリングコストを下げられます。効率的で実践的なレンダリングを目指しましょう。これを読んで何か発見があると嬉しいです。
次回は多分AOVsについて。マルチパスレンダリングの方法の紹介です。今回の知識と組み合わせて使えばノイズ消しにも大いに役立ちます。これがArnoldで一番面白いところです。使えるようになれば映像表現の幅が大きく広がるでしょう。
続きの記事➡ https://yuki-cg-blog.hatenablog.com/entry/2019/09/15/204952
参考になったよという方は、こっちでも作品や情報を発信してるのでフォローよろしくお願いします!
参考
Samples - Arnold for Maya User Guide 5 - Arnold Renderer
Samples - Arnold for Maya User Guide 5 - Arnold Renderer
Sample Filtering - Arnold for Maya User Guide 5 - Arnold Renderer