Shading Qualityについて


こんにちは、篠島です。 Mantra 関連の話が続いているので、今回はShading Qualityについて説明したいと思います。

 

今回のサンプルファイルです。
ShadingQuality.zip

 

 

以前の記事で説明しましたが、Micropolygon Rendring としてレンダリングすると、ピクセルサイズになるまでプリミティブを再分割し、マイクロポリゴンという非常に小さいポリゴンにするという説明をしました。

どのくらい細かくマイクロポリゴンを分割するかというのを Shading Quality でコントロールする事ができます。このShading Quality をコントロールする部分はGeometryノードでジオメトリ毎に設定するものと、 Mantra 内でシーン全体のShading Quality をコントロールする部分があります。最終的な Shading Quality は、[ジオメトリで設定した Shading Quality]  ×  [Mantra で設定した Shading Quality] となります。

 

Shading Quality が 1 だと、1 ピクセルあたり一つのマイクロポリゴンが作成されます。値を増やしていくことで 1 ピクセル内に含まれるマイクロポリゴンが多くなり、その分シェーディング回数も多くなるのでレンダリングの結果は良くなりますが、その分レンダリング時間がかかります。逆に Shading Quality  を 小さくしてやるとマイクロポリゴンのサイズを大きくする事ができ、粗いジオメトリにすることが出来ます。試しにあえて Shading Quality  を低くして、マイクロポリゴンがどのように作られているのか見てみます。

例えば、Sphere(Primitive)を作成し、下の様なシェーディングポイントの位置を元にランダムな色を返すシェーダーを作ったとします。

 

それを Shading Quality を1 から 0.01 まで設定を変えながら Micropolygon Rendring  エンジンを使用してレンダリングした結果が下のようになります。Shading Quality を 0.01 まで下げてレンダリングすると、マイクロポリゴンの大きさがかなり大きくなり、プリミティブの分割がかなり荒くなったのが分かるかと思います。そしてマイクロポリゴンの記事で説明したとおり、シェーダーはマイクロポリゴンの頂点で行われ、面の部分では色が頂点を元に補完されている所に注目してください。GIFだと色数の限界で色が保管されている様子が判りにくいので、静止画も用意しました。

 

この時、マイクロポリゴンは元のジオメトリが持っているプリミティブよりも大きくならない点に注意しましょう。Sphere のタイプを Mesh にすると予め分割されて幾つかのポリゴンが作られますが、Shading Quality をどんなに低くしてもマイクロポリゴンのサイズは、このポリゴンの大きさまでにしかなりません。Sphere のタイプが Primitive だとプリミティブが一つしかない為、マイクロポリゴンのサイズはかなり大きくなることができます。とはいえ、これは理解を深めるための作例で、実際にはShading Quality を 1 よりも少なくするという事は無いと思うのでそこまで神経質になる必要はありません。

 

 もしジオメトリが Nurbs であった場合、レイトレース系のレンダラでもカーブをどれだけ分割するかに影響を及ぼします。

 

Displacement

Shading Quality はマイクロポリゴンの分割だけでなく、ディスプレイスメントシェーダー適用時にどれだけ細かくジオメトリを分割するかにも影響を与えます。これは Micropolygon Rendring に限らず、外のレンダリングエンジンでレンダリングした時も同様にディスプレイスメントに影響を与えます。以前、スタイルシートの記事を書きましたが、1つのオブジェクト内でアトリビュートによって Shading Quality をコントロールする事も可能です。

 

Render Polygons As Subdivision

他にも Shading Quality はジオメトリで Render Polygons As Subdivision を有効にした時にどれだけ細かくジオメトリ分割するかにも影響を与えます。これもディスプレイスメントと同様に、どのレンダリングエンジンを使用しても効果を得ることが出来ます。