« 死神と二剣士/フリッツ・ライバー 浅倉久志訳 | メイン | ラジオシティの解像度について(後編) »

2005年04月03日

ラジオシティの解像度について(前編) [ CINEMA 4D R9 ]

 日本全国128名(当社調べ)のヒロツブログ読者の皆さんこんにちは! 今日はその128名様の中でも特にハードコアCGオタクな16名(推計)の皆さんに大ネタをお届けします!

 CINEMA 4Dのラジオシティ設定で特にわかりにくいのはサンプルポイントの「解像度」ですな。

 1)最低解像度と最高解像度の二つを組み合わせて使う
 2)解像度がシーンの全体サイズに依存するのでシーンによって数値が変わる
 3)数値の大小が単純に品質対所要時間のトレードオフになるのではなく、値を下げすぎるとかえって時間がかかるようになる

 こういう事情があるので、「最適な値」を見極めるのがかなり難しくなっております。もちろん、そのシーンを実際に何パターンもテストレンダリングすれば最適な値がいくらなのかはわかりますが、本番のレンダリング時間をいくらか短くするためにそれより長い時間をかけてテストレンダリングしたのでは本末転倒。僕の場合は結局、経験則でなんとなく決めて、時間的にやばくなければそのままにしていることが多いです。

 とはいえ解像度のことはつねづね疑問でもあったので、いろんなシーンでテストした結果を分析してみたら、なかなか面白い結果になりました。面白いので一連のテスト結果と考察をブチまけておくことにします。
 ただし、別に「ラジオシティはこうやれ」とか奨めるつもりは全くないし、格別親切な書き方もしておりません。テストは入念にやっていますが、肝心の足し算や引き算を間違えている可能性も捨てきれません(実際何箇所か引き算を間違えていて後で直したところがあります)。僕の自分用メモ程度のものなので、それをのぞき見するぐらいの気持ちで読んでいただきたい。テストの方法や分析の考え方についてはそれなりに詳しく書いてあるので、興味を持ってもらえたのであれば、ぜひ手持ちのシーンで同じようなテストを(あるいは別のテストを)やってみて、そこから自分なりのノウハウをつかみとってください。ついでにテスト結果を僕にも教えてくれればうれしいです。

 
◆公式情報

 解像度に限らずラジオシティ全般に関して、マニュアルにはロクなことが書かれてない。そもそもAdvanced Renderのマニュアルでラジオシティについて書かれている部分がたった11ページしかないのだが、詳しい理屈は抜きでいきなり数字だけ書いてあったりするので、それを実際のワークフローで応用するときの方針が立てにくい。
 MAXONサイトのリソースのページにも「ラジオシティの設定について」という記事がある。R7時代に書かれたものだそうだが、幸か不幸かラジオシティについては現行のR9でもR7からほとんど変化ないので今でも通用する(本家のマニュアルだって全然変わってないみたいだし)。これも短い記事だが、なにしろマニュアルの情報が少ないので、このぐらいのものでも貴重だ。

 さて、「解像度」については、マニュアルでもMAXONサイトの記事でも「最低解像度を小さくしすぎるな」と警告している。他の設定と違って「最低解像度」の値が単純なトレードオフをするものではないから、警告すること自体は必要だ。
 そして、最低解像度と最高解像度の比率について具体的に「適切な値」が挙げられているのだが、こっちのほうは、僕の実感からすると適切とは思えない値になっている。

 Advanced Renderのマニュアルでは、以下のように書かれている。

ただし、最小解像度の値を小さくし過ぎると、サンプルポイント間の補間計算が難しくなるため、かえってレンダリング時間が増加し、しかも画質まで低下するので気をつけて下さい。
まとめ:
- 最高解像度の値は、<シーンの大きさ>÷<最も小さい形状の大きさ>に指定する。
- 最低解像度の値は、<最高解像度>÷<2~4>に指定する。

 最高解像度を最小のディテールに合わせるところまでは納得できる。しかし、最低解像度の値は最高解像度の1/2から1/4というのはどうだろう。

 MAXONサイトの記事のほうでも似たようなことが書かれている。

「最高解像度に比べて最低解像度の値を小さくしすぎると、何もしない場合に比べてレンダリング速度が極端に遅くなり、しかも画質まで低下する」のです。
 これは少ないサンプリングポイントから無理に細かい情報を類推しようとするために起こる現象です。最低解像度の最適値は条件によって変るので一概には言えないのですが、一般的に「最高解像度の1/3以上」です。
 最後に解像度の値の設定方法についてまとめると、まずシーンに含まれる一番細かい部分と同等以下の間隔にサンプリングポイントが配置されるように、最高解像度の値を指定してください。次に最低解像度の値をその1/3に指定してください。これでほとんどの場合は適切なバランスでレンダリングできるはずです。

 こちらは「1/3以上」となっていて、最高解像度を最小ディテールに合わせ、最低解像度はその1/3、これでほとんどの場合オッケーと書いてある。

 マニュアルと公式サイトの記事だから当然誰もが最初はこれを信用するわけだが(僕も信じていた)、実際にラジオシティを使って、ある程度の数の制作をこなしてみると、この1/2、1/3、1/4という値が適切であるとはとても思えなくなってくる。実感としては1/10から1/20でも問題ない。どういうことなんだろうか?
 もうひとつ、「極端に遅くなる」のが「最低解像度と最高解像度の比率」によるものだとすると、一旦「最適な値」に設定した後にカメラアングルの変更などによって「最高解像度」を上げる必要が出てきたときには、「最低解像度」もそれだけ上げなくてはならないことになる。本当なんだろうか?


◆定説を疑え

 まず、「最低解像度の最適値は最高解像度の1/2から1/4(または1/3)」という定説について検証してみることにする。

 テストに使うシーンは単純なものだ。

 サンプルファイル

 真ん中にオブジェクトを置き、発光させた空オブジェクトによる天空光だけでシーンを照らしている。真ん中に置いてあるオブジェクトは、だいたい200*600mmの大きさの「解像度」というテキストを押し出しNURBSで立体にして、キャップに5mm幅のベベルをつけたものだ。
 MAXONの「ラジオシティの設定について」のページで解像度のテストに使っているシーンファイルと似ているが、ラジオシティの計算に負荷をかけるための仕掛けがしてあるところが違う。このシーンは外周に5000mm角の「囲い」がついている。この囲いが低いとき(高さ100mm)には、押し出しテキストに当たったパストレーシングのレイはほぼそのまま空オブジェクトに向かって逃げていくので、ラジオシティの計算は非常に軽い。一方、この囲いを高くしたとき(2000mm)には、パストレーシングのレイが囲いに当たって跳ね返るため、ラジオシティの計算が重くなる。シーンの最大サイズは床面の長さの5000mmなので、囲いの高さが100mmでも2000mmでも、解像度には影響しない。

 ラジオシティ設定は「最低解像度」以外はすべて共通。最高解像度を固定したまま最低解像度だけを変更して、最低解像度と最高解像度の比率の変化によってレンダリング時間がどう変わるかをテストする。これもMAXONのサイトの記事のテストと同じだ。
 最高解像度は「1000」。これは公式情報の推奨通りに、最小ディテールのサイズ(ベベル幅の5mm)でシーン全体サイズ(5000mm)を割った値だ。
 最低解像度は「50」、「100」、「200」、「333」の4通りで、それぞれ最高解像度との比が「1:20」、「1:10」、「1:5」、「1:3」となる。

 プレパスとレンダリング画像はこんな感じになっている。囲いが低いほうと高いほうで、解像度が最も粗い「50」と最も細かい「333」を載せておく。囲いが高いほうは天空光が遮られるので全体に暗い。

 レンダリング時間はこうなる。

050401_radires_3.gif

 囲いが低いほうは、最もレンダリング時間が短くなるのは最低解像度「333」、最低:最高比が「1:3」のところで、こちらの例でいうと、たしかに最低:最高比の最適値は「1:3」ということになる。MAXONの記事にあるテストでも同じ傾向の結果を出している。
 ところが囲いが高いほうは、レンダリング時間が最も短いのは最低解像度「100」で、最低:最高比「1:10」のところだ。それより最低解像度を上げるとレンダリング時間は長くなる(グラフには入れなかったが最低解像度が「500」だと1000秒を超える)。僕の経験から来る実感でも、何人かのCINEMA 4Dユーザーに聞いたところでも、最低:最高比は「1:10から1:20ぐらいが最適らしい」ということになっているので、こちらのグラフのほうがリアリティがあるというか、「現場」の事情に則しているといえる。

 なぜこんなふうにまるっきり違う結果になっているかというと、前述のように、「ラジオシティの計算負荷」が違うからだ。そのへんを詳しく見るために、レンダリング時間をプレパスと本パス(プレパスの絵を消しながら本番の絵が出てくるところ)に分けたのが次のグラフだ。

050401_radires_4.gif

 囲いが低いほうでは、プレパスも本パスも最低解像度が高くなるほど時間が短くなっている。
 プレパスの計算には、サンプルポイントの配置を決める計算と、サンプルポイントごとにパストレーシングをする計算の両方が含まれているはずだ。最低解像度が上がればサンプルポイント数が増加し、それに比例してパストレーシングの計算量も増えるはずだが、このシーンは元々のパストレーシングの計算が非常に軽いためにその影響はあまり大きくない。プレパスの計算時間は一貫して下がっていくので、もう一方の計算量の減少、サンプルポイントの密度が高くなることでポイント配置を決める計算が軽くなることの影響のほうが大きいのだろう。
 本パスの計算時間が一貫して下がっていくのは、サンプルポイントの密度が低いと補間の計算が重くなる(公式情報)=密度が高くなるほど計算が軽くなっているためだ。

050401_radires_5.gif

 囲いが高いほうでは様子が違う。本パスのグラフは同じように一貫して下がっていくが、プレパスはほんのわずかに下がった後は上昇していき、最低解像度「200」と「333」では合計レンダリング時間の大半を占めるようになる。
 これは、囲いがあるために元々パストレーシングの計算量が多く、最低解像度の上昇=サンプルポイントの増加によるパストレーシングの計算量の増加の影響が非常に大きいためだ。囲いをさらに高くしたり、拡散反射回数を増やしたりすると影響はもっと大きくなる。逆にレンダリングタグでラジオシティから見えなくしたり、マテリアルを発光のみにして拡散反射成分をなくしたりすると、囲いの影響はなくなる。

 マニュアルでは「1/2から1/4」、MAXON サイトの記事では「1/3」という数字が上げられているが、これらの数字は平面にオブジェクトをポツンと置いただけの、パストレーシングの計算量がごく小さいシーンか、最高解像度がかなり低い設定で済むような単純なオブジェクトだけのシーンのテストからはじき出されたもので、ある程度以上「重い」シーンには通用しないという疑いが濃厚だ。パストレーシングが重いシーン、ディテールが込み入ったシーンでは最適値は1/10にも1/20にもなり得る。


◆シュプランガ・テスト

 実は、最低/最高解像度を決める方法については、1月のユーザーミーティングでMAXON本社から来たシュプランガ氏(Marcus Spranger氏)にいろいろ教えてもらった(マニュアルはさておきスタッフにはちゃんとわかってる人がいるようだ)。
 シュプランガ氏も「最低解像度の値が低すぎるとレンダリング時間はむしろ長くなる」ということには注目していて、最低解像度が「低すぎる」状態にならないようにして最適な値を出すためのテスト方法を教えてくれた。ここに本人直筆メモがある。以下、氏に敬意を表してこのテストを「シュプランガ・テスト」と呼ぶことにする(勝手に)。

example:
max=500
min=10/20/30/40/80

1.step
Low stoch.samples
→ try to find good max.resolution

2.
try to find best min/max ratio

 最高解像度を固定して最低解像度を変えていくというところは上のテストと同じだが、「レンダリング時間をいくらか縮めるために、その何倍もの時間をかけてテストする」というような矛盾が起きないように、サンプル数は低く抑えてテストする(Low stoch.samples)という工夫がされている。具体的にはサンプル数は「10」ぐらいでいい。解像度とレンダリング速度の関係は、サンプル数が多いか少ないかの影響はないらしい。だったらサンプル数が少ないほうがテストが早くできるというわけだ。
 出力解像度(イメージサイズ)も小さくしていいが、やたら小さくすると本番との誤差が大きくなる恐れがあるので程々にしておく。その他、アンチエイリアスや、拡散鏡面反射などのゴージャスなオプションも切る。

ステップ1:最高解像度の適正値を探る(try to find good max.resolution)

 最高解像度の適正値は、オブジェクトの最もサンプル密度を必要とする部分(メモの左の図では壁と床のキワの部分)にビッシリとサンプルが打たれるまで最高解像度を上げていって求める。細いオブジェクトやはっきりした凹凸だけじゃなく、こういう「広い平面同士がぶつかるカド」の部分でも特にアーティファクトが出やすいので、弱点としてマークしておく必要がある。
 ここでは最高解像度が「500」になったケースを仮定している(max=500)。住宅インテリアぐらいのスケールのものをmm単位で作ってる人にとってはなかなかリアリティのある値じゃないかと思う。

ステップ2:最低解像度と最高解像度のベストな比率を探る(try to find best min/max ratio)

 最高解像度をステップ1で求めた「500」に固定したまま、最低解像度を10/20/40/80等と上げながらレンダリング時間を測っていく。
 前述のとおり最低解像度が低すぎるとレンダリング時間が長くなるので、極端に低い値(ここでは「10」)ではレンダリング時間は長い。そこから値を上げていくと、サンプルポイントは増えているにもかかわらず、レンダリング時間は短くなっていく。これは最低解像度の値が「低すぎて逆効果」な状態から正常な状態に変化していっている結果だ。
 そして、ある値を境に、最低解像度を上げるとレンダリング時間も長くなり始める。これ以後、最低解像度を上げるほどレンダリング時間は長くなっていくが、これは単純にサンプルポイントが増えて計算量も増大した結果で、品質対所要時間のトレードオフが正常に行われていると考えられる。
 このメモでは同じ最高解像度で最もレンダリング時間が短くなる最低解像度の値が「ベスト」とされているが、これはレンダリング時間を最短に抑えるという観点からの判断だ。それより高くするぶんには普通のトレードオフなので、やりたければやってもかまわない。

 このテストをやることで「最低解像度が低すぎてレンダリング時間が無駄に長い」状態になる値は簡単に検出できる。所要時間のグラフが本来あるべき「品質対時間比」とは反転するゾーンを避ければいいわけだ。このグラフの反転箇所を、氏に敬意を表して「シュプランガ反転」と呼ぶことにする(また勝手に)。


◆テスト環境と使用するインテリアのシーン等

 以下いろいろテストする。
 テストに使ってるCIENMA 4DはR9.1のWindows版、マシンはCPUがP4/2.4GHzでメモリ1GB(さっきのテストも同じ環境)。

 シーンは、それなりにちゃんとしたインテリアパースを使う。これはこれで特殊なシーンだが、実際にパースを作っている人にとってリアリティのあるテストというならこういうものになると思う。

 ラジオシティの解像度はシーン全体のサイズに対する相対値なので、シーンのサイズも確認しておこう。このシーンの最大長はZ方向の10,000mmだ。ただしこの「mm」という単位はユーザーが目安にするための表示でしかなく、CINEMA 4Dのアプリの環境設定に存在するだけでシーンファイルには書き込まれていない。同じファイルを単位「m」のCINEMA 4Dで開けば最大長は10,000mになる。ラジオシティ設定に関しては単に数値だけ「10,000」というのを見ておけばいい。

 レンダリング設定のラジオシティのとこはこうなってる。以下の実験では、解像度以外は基本的にいじらない。サンプル数が「10 」と低いのは前述の通りシュプランガ・テストの基本。

050325_radires_2.gif

 拡散反射回数が「8」と高めになっているが、このぐらいやらないと引っ込んだところが明るくならないし、多少高めでも特に弊害もないので、経験的にこうしている。これに関してはマニュアルでは不思議な説明がされている。

この値は1から100まで指定できますが、ほとんどのシーンではデフォルトの3で十分な画質が得られるはずです。この値を大きくするとレンダリング時間が長くなります。特に閉じたシーン(周囲を完全に壁に囲まれたシーン)では、拡散反射した光線が何回もオブジェクトにぶつかるため、この効果が顕著になります。逆に開いたシーンでは、1回か2回の拡散反射でほとんどの光線が無限遠に飛び去るため、大きな問題にはなりません。このような理由から、閉じたシーンでは拡散反射の値を3以上にしないでください。

 開いたシーンでは1回か2回で十分です、閉じたシーンでは3以上にしないでください、それが本当だったら3で固定しとけばいいんじゃないのか。かと思えば後のほうには、

その他の、拡散反射回数やプレパスサイズなどのパラメータは、レンダリング時間にそれ程影響しません。

 なんて書いてある。やっぱ影響しないんか。
 MAXONのリソースの「ラジオシティの設定について」の拡散反射回数のほうには、

レイトレーシングの場合と同じように、複数回の反射を経て暗くなった光線の計算は自動的に省略されるので、この値を大きくしてもそれ程計算時間はのびません。

 と書かれている。こちらのほうが実感に近い。反射回数が1と2の違いや2と3の違いはすごく大きいが、7と8や15と16あたりになるとさほど違わなくなることが多いように思う(こっちの影響は今回はテストしてないのでまた別な機会にやるかも)。


◆推奨値に従ってみる

 物は試しで、マニュアル推奨値に従って解像度を設定してみる。最も小さい形状は数mmなのだが、だいたい10mmぐらいでええんちゃう?ってことで、最高解像度は「1000」になる。最低解像度は最高解像度の「1/4」で「250」。すると、こういう感じになる。

 最低250:最高1000のプレパス

 いやいやいやいや、いくらなんでもこれはないだろ。サンプルポイントの赤と緑の塗り分けがはっきりわかって面白いけどな(通常モードでの赤と緑の意味はマニュアルにないので不明。カメラアニメーションモードではキャッシュされたサンプルポイントが緑、新規計算が赤となる。また、マテリアルでサチュレーションをいじってあるところはサンプルポイントが白になる。以上余談)。
 MAXONサイトの記事の解像度のところをよく読んでみると、

サンプリングポイントの密度は、最低値、最高値とも、計算精度が「40」付近の時に、「シーンの大きさ/解像度」になります。

 と書かれている。このシーンの計算精度は「70 」なので、「40」付近に合わせた最高解像度「1000」では密度が過剰ということになる。

 ここで計算精度についても触れておこう。マニュアルにはこう書かれている。

計算精度の値は、サンプル数や最低解像度、最高解像度の値をまとめて変更します。また、ラジオシティに含まれる統計計算の精度や、補間の精度にも影響します。

 つまり計算精度をいじると解像度とサンプル数も一緒に変わってしまうわけだ。乱暴に全体的な精度をいじるには便利だが、解像度やサンプル数の設定をひとつずつ地道に追い込んでいるときはいじらないほうがいい。そこで僕はいつも計算精度はデフォルトの「70」のままで固定している。『ラジオシティに含まれる統計計算の精度や、補間の精度』っていうのが気になるところだが、まあ70なら無難なとこじゃないかという気がする。
 それから、レンダリングタグでオブジェクト単位の計算精度を設定するときにもこの値が意味を持ってくる。特定の部分でアーティファクトが目立つようなときに、タグで計算精度を上げて解消するのだが(このシーンでは階段のタテ方向の板の内側につけている)、もしシーン全体の計算精度が「100」だったらそれ以上は上げようがなくなってしまう。「70」から「100」までの落差があればだいたい間に合う。

 さて、僕がこのシーンで経験則からはじき出した解像度は「最低25/最高600」なので、この最高解像度「600」が計算精度「70」のときの適切な値と仮定して、最低は最高の1/4の「150」にしてみる。

 最低150:最高600のプレパス

 ……さっきとあんまり変わってない。
 もちろん最低:最高比を1:4のまま全体の解像度を落とせばこのポイントぎっしり状態は解消されるんだが、それをやると全体のクオリティが著しく落ちることになる。Advanced Renderのチュートリアルファイルは最低100:最高200になってるが、もしきちんとディテールを出さなければならない状況だったら最高解像度はもっと高くてはならないはずだ。やはり、ディテールに必要な最高解像度をユーザーが任意に決めたうえで、最適な最低解像度を求める方法がなければいけない。


◆インテリアパースのシュプランガ・テスト

 ではいよいよ、このシーンでシュプランガ・テストをやってみよう。サンプル数は前述のとおり「10」で、アンチエイリアスやエリアシャドウ等もオフにしている(以下同じ)。

 結果はこんな具合になっている(最低解像度が等差になるよう横軸間隔を調整した)。

050325_radires_6.gif

 このテストでは、かなりはっきりしたシュプランガ反転が見られる。反転が起きているのは最低:最高比が1:20より高い(最低解像度が30より低い)部分だ。正常な部分では、最低解像度が高くなるほどレンダリング時間は長くなっていく。

 プレパスはこんな具合になっている。

 最低200:最高600のプレパス
 最低60:最高600のプレパス
 最低30:最高600のプレパス
 最低10:最高600のプレパス

 絵ヅラからみると、1:10より密度を上げる意味はないだろう。僕が経験則から絵ヅラ重視で決めた最低25:最高600という値は比率にすると1:24で、計時テストを一切していない割にはいいところをついていたことになる。

 このテストとさっきの押し出しテキストのテストの結果を合わせて考えてみると、ラジオシティでは確かに最低解像度を低くしすぎると無駄にレンダリング時間は長くなるが、その境界になる具体的な値はシーンの特性に依存するものであって、一般論として「いくら」とは言えない。「1/3」が正しいとか「1/20」が正しいとかいう話ではなく、「最適な比率」が決まっている=一定の数値が常に通用するという発想を捨てなければいけないようだ。


◆メモリ消費

 サンプルポイントの密度が過剰になった場合、もうひとつの心配事として、メモリ消費がある。サンプルポイントが多くなればそれだけメモリを食うんじゃないだろうか。CINEMA 4Dがラジオシティを計算するときどんなふうにメモリを使っているのかわからないが、ひとつの目安として、プレパスのキャッシュファイルである「.gi」ファイルのサイズを調べておいてグラフにした(こちらも最低解像度が等差になるよう横軸間隔を調整した)。

050325_radires_7.gif

 面白いことにこのテストでは「.gi」のファイルサイズは最低解像度の値にほぼ正比例している。
 このテストではサンプル数をわずか「10」でやっているが、サンプル数が増えると「.gi」のファイルサイズも大きくなる傾向があるので、本番ではもっと大きくなると考えられる。ただしこちらの増加はサンプル数に正比例するわけではなく、増加のペースはもっと緩やかなようだ。


◆拡張シュプランガ・テスト

 先に書いたもうひとつの疑問、問題になるのは本当に「最低解像度と最高解像度の比率」なのかということについて確かめるために、シュプランガ・テストのバリエーションをやってみた。

 まず、「最低解像度」を「30」に固定し、「最高解像度」のほうを変えてみる。最高解像度を上げればそれだけ「最低:最高比」が高くなっていくことになる。

050325_radires_12.gif

 プレパスのキャプチャは以下。

 最低30:最高60のプレパス
 最低30:最高150のプレパス
 最低30:最高300のプレパス
 最低30:最高1500のプレパス

 MAXONの「ラジオシティの設定について」では、『最高解像度に比べて最低解像度の値を小さくしすぎると』レンダリングが極端に遅くなると書いてあるが(マニュアルのほうでは「何に対して」とは書いてない)、これも実際には一概にそうは言えないのがわかる。(1)のグラフのテストでシュプランガ反転が始まるのは最低:最高比が「1:20」付近だが、(3)のグラフのテストで最高解像度のほうを上げていって「1:50」まで行っても、レンダリング時間が「極端に」長くなっているとはいえず、単にサンプルポイントの増加を反映している程度しか増えていない。プレパスのキャプチャで最高解像度が300の場合と1500の場合を比べると、最も密度の高いエッジ部分以外はほとんど変化していない。
 このテストを見る限りでは、最低解像度が低すぎるのは影響大だとしても、最高解像度が高すぎてもさほど影響はないとみることができる。

 問題は「最低:最高比」ではなくて、「何か」に対する「最低解像度」の比率のほうなのではないだろうか? まあ「何か」つっても、あとはシーンのサイズぐらいしか思いつかないけども。

 次は「最低:最高比」を1:20に固定して、同じ比率のまま解像度を変えていくテストをした(プレパスのキャプチャはとってなかった。もういいよね、似たようなもんだし……)。

050325_radires_13.gif

 このテストでは、シーンサイズ比「1:333」でレンダリング時間が最も短く、それより低いとレンダリング時間は長くなる。「最低:最高比」はずっと変わっていないのに、明らかなシュプランガ反転が起きている。解像度が高いほうでもレンダリング時間が長くなるが、これは単にサンプルポイントの数が非常に多くなるからだ。

 (3)と(4)の結果を合わせて考えると、「最低:最高比」が問題なのではなく、「最低:シーンサイズ比」が問題だということになりそうだ。

 グラフ(1)の「最高解像度固定・最低解像度変化」のシュプランガ・テストの結果を、最低解像度とシーンサイズの比率で見直したのが次の(5)のグラフだ。(4)のグラフにサンプル例を合わせるため、最低解像度が「5」と「15」のサンプルを追加した。

050325_radires_14.gif

 この(5)の結果を(4)のグラフと比べると、「最低:シーン比」とレンダリング時間の変化の対応はほぼ同じになっている。

 (3)(4)(5)、3つの拡張シュプランガ・テストの結果を見ると、シュプランガ反転が起きるのは「シーンのサイズ」に対して「最低解像度」が低すぎるときで、「最高解像度」が高いことや「最低:最高比」が大きいことの影響はないと考えていいんじゃないだろうか。
 ただしこれもこのシーンに限ったことで、他のシーンになるとどうなるかなんともいえない。実際、でたらめなシーンを作ってテストしてみると、シュプランガ反転そのものが検出できない場合もたまにある。


◆シュプランガ・テストの確度

 サンプル数が多いか少ないかで大幅にシュプランガ反転の位置が変わったりすると困るので、念のためサンプル数を「100」まで上げたテストもやっておいた。サンプル数「10」のテスト結果とつきあわせて、シュプランガ・テストと本番での誤差をチェックする。グラフ(5)のテストのうち5つをサンプル数100でやり直したものだが、時間がかかるのでテストは5つしかやっていない。

 比較のため(5)のグラフから同じ解像度のものだけを並べたグラフ(5')も添えておく。

050325_radires_15a.gif

050325_radires_15b.gif

 基本的なグラフの形は変わっていないし、レンダリング時間が最短になる最低解像度が「30」なのも同じだ。シュプランガ・テストはサンプル数「10」でやっても、本番でサンプル数を多くしたときと同じ結果が得られそうだ。
 プレパスの時間はサンプル数の増加を反映して大幅に増えているが、本パスのほうはあまり変わっていない。増加率がグラフではわかりにくいので表にした。

プレパス本パス
最低解像度 サンプル10サンプル100倍率 サンプル10サンプル100倍率
5 203457822.6 6408271.29
15 5879113.6 77931.20
30 5157211.2 41461.12
50 5560210.9 36391.08
100 1009729.72 33381.15

 最低解像度「5」のときのプレパス時間の増加率が異常に高いが、ここは元々シュプランガ反転で極端な数値が出るところなので、大勢に影響はない。それ以外はばらつきがないので、最短時間になる最低解像度を間違えるということはあまりなさそうだし、グラフをみるとわかるように、最短時間になる「底」の部分が結構広いので、多少値がずれてもレンダリング時間に大きな差は出ないだろう。
 倍率をみると、プレパス時間はサンプル数にほぼ比例して増加し、本パス時間はちょっとしか増えないという結果になっている。低いサンプル数でシュプランガ・テストをやった場合、レンダリング時間に占めるプレパスの割合が本番ではテスト時よりもずっと大きくなる。ラジオシティの計算が重いシーンのテストの評価では合計時間よりプレパスの時間のほうを重視したほうが確実だろう。
 逆に、テスト時にアンチエイリアスやエリアシャドウや拡散鏡面反射をオフにしているので、そっちのことも計算に入れておかなくてはいけないが、これらの要素にはシュプランガ反転はないので、普通に品質対所要時間比でのトレードオフを考えておけば大丈夫だ。

 最後に最低30:最高600 サンプル100のレンダリング画像を。

 サンプル100というのはインテリアとしては結構低めの値だが、アーティファクトが目立つほどではない。ライトをたくさん置いている(10個)せいかと思う。ライトをたくさん置くと室内がまんべんなく明るくなり、パストレーシングが拾ってくるサンプルの明度の落差が小さくるので、アーティファクトが出にくくなる。

(後編につづく)

投稿者 ヒロツ : 2005年04月03日 20:25

トラックバック

このエントリーのトラックバックURL:
http://kowloo.net/hirotsu/mt/mt-tb.cgi/117

このリストは、次のエントリーを参照しています: ラジオシティの解像度について(前編):

» サイト開設 from クリマ・ブログ
今、日やっと3D用フリー素材のサイトクリエイティブマーケットを、もも展に合わせてオープン。最初は48種類。ネタは結構収集したので、シームレスなどの設定を進めてい... [続きを読む]

トラックバック時刻: 2005年04月03日 21:55

コメント

コメントしてください




保存しますか?


※URLが多数含まれているとコメントスパムとみなされることがあります
※投稿後すぐにコメントが反映されない場合はリロードしてみてください