P7Eのバンプ
2007年02月23日(Fri)
複数箇所でP7Eのバンプの効きがイマイチだという記事を拝読した。私の答えは「シェーディングレートとテクスチャフィルタリング」だ。特殊解かもしれないが、以下導出過程。
Poser 7のFirefly周りで大きく変更されたことの一つに、テクスチャフィルタリングの設定がレンダリングオプションからマテリアルのイメージマップノードの項目になったことが挙げられる。テクスチャごとにONにするかOFFにするか決定できるようになったわけで、まあおおむね改善と言えるだろう。
ところで、テクスチャフィルタリングとは何だろうか?
私は以前自サイトのTips「レンダリング設定について」で、テクスチャフィルタリングとはテクスチャがレンダリング範囲に比べて細かすぎる時、フィルタをかけて自然にぼかすことでモアレの発生を防ぐ機能だ、と説明した。
さらに言い換えるなら、最小シェーディングレートによって設定されたマイクロポリゴンの分割サイズに応じて、テクスチャにフィルタをかけ最適化する機能、と言えるだろう。

テスト用の形状の、左は2DテクスチャのWeave(テキスタイル)を適用したもの。右はWeaveを適用した板ポリゴンを一度レンダリングして、テクスチャとして読み込んだイメージマップノードを接続したものだ。バンプ強度は1ミリ。
これを影無し・シェーディングレート0.2・テクスチャフィルタリングオン、つまり高画質な感じでレンダリングする。(以下4つの画像はクリックで原寸表示)

どちらも目立った違いはない。細部まで綺麗に表現されているし、Poser 6とPoser 7、Weaveとイメージマップの違いもない。
では、シェーディングレートを4ピクセルあたりにしてレンダリングしてみる。

イメージマップを使用した方がバンプの効きが弱くなっている。特にPoser 7の方は顕著だ。
では、テクスチャフィルタリングをオフにしてみよう。Poser 6ならレンダリングオプションで、Poser 7ならそれぞれのイメージマップノードでNoneにする。

すると、今度は汚くなったがバンプの効き自体は強くなった。Poser 6とPoser 7に違いはない。
Poser 7でバンプの効きが悪くなったと思ってしまうのは、テクスチャフィルタリングを使用していながら、シェーディングレートの値を上げてレンダリングしているからだ。Poser 7のテクスチャフィルタリングのデフォルト値は「Quality」なので、普通に低画質でレンダリングすると必然的にこうなってしまう。
ではなぜ、バンプの効きが弱くなるのだろう? これは明白だ。
ぼかしフィルタがかかることによって、イメージそのものがボケているからである。

マイクロポリゴンは1枚につき一つの色を与えられる。シェーディングレートを大きくするということは、マイクロポリゴンの分割サイズを大きくするということだ。すると、マイクロポリゴン1つに与えられる色よりも、貼られたテクスチャの色の方がずっと多くなってしまう。
睫毛のトランスマップのような、輝度差の激しい詳細なテクスチャを想像してみよう。レンダリングイメージの1ピクセルよりも大きなマイクロポリゴンが、それよりもはるかに細かいテクスチャの、白い部分を拾うか黒い部分を拾うかで、レンダリング結果は大きく異なってしまう。モアレが発生し、マスカラがダマになったように汚れてしまうのである。
それを防ぐのがテクスチャフィルタリングだ。マイクロポリゴン1枚が約4ピクセルなら、だいたい4ピクセルが一つの色になるように、その都度テクスチャにぼかしをかける。白と黒が縞になっているのなら、混ぜて灰色にしてしまえばいい。そうやって見た目を改善するのである。

シェーディングレートがレンダリングイメージに対するパラメータであるのに対し、テクスチャの画素数は固定なので、マイクロポリゴン1枚に割り当てられるテクスチャの画素数はレンダ内容によって可変になる。カメラの中で対象が小さく(遠く)なればなるほど、テクスチャサイズが大きいほど、テクスチャのより広範囲にフィルタをかけなければならなくなるのだ。Poser 6以前で、テクスチャフィルタリングがリソースを大量消費してしまうのはそのためである。Poser 7ではその辺が抜本的に改良されたらしい(細かいことはまだわからないけど)。
ちなみに、2Dテクスチャや3Dテクスチャなどプロシージャルテクスチャは、始めからマイクロポリゴンのサイズに応じて生成される。フィルタリングもかからないので変化が見られないのである。
フィルタリングのデフォルト値が「Quality」であることは、Poser 6以前とPoser 7で共通するデータを使用する場合や配布物などには注意が必要になるだろう。バンプはシェーディングレートを上げれば鮮明にはなるが、完全に「None」の場合と同じにするのはマシンパワー的にも難しい。Poser 7用のマテリアルコレクションを作るか微妙なところだ。むしろ使用者がフィルタリングの効果についてもっとよく理解し、自分の求めるレンダリング品質に応じてコントロールするべきかもしれない。
自分はPoser 6では髪と頭だけテクスチャフィルタリングをオンにして部分レンダしていた。オンの状態での一括レンダはまず無理だから、というのが根本的な理由だが、やはり衣服や背景プロップのディティール(っていうかザラっとした感じ)が弱くなってしまうのが大きい。Poser 7でテクスチャごとに設定できるようになった点はありがたいが、できればレンダリングオプションでフィルタリングの一括オフが欲しかったところだ。シェーディングレートはActor単位とレンダリングオプションの両方で制御できるのだから、ここは一つ次バージョンで取り入れて欲しいところである。
……。
……さて。
前回のP7Jのバンプについては、ロード時に(P4書式による)イメージ読み込みを行わなければ、とりあえず回避できるところまでは明らかになった。が、P4書式を削除してもマテリアルルームに入れば元に戻ってしまうし(要らんのに…)、そもそもシェーダツリーを持たないP4データにはこれっぽっちも歯が立たない。
というわけで、P7Eで作成した2バイト文字を含まないテスト用シーンファイル。
お心の広いP7J使いの方、どうか……。
(2007年2月26日追記)
テストデータのリンクを削除しました。テストに御協力頂いた方、ありがとうございました。
……。
…………ああ。
…………こんな事してる暇があったら。

ああああぁ(弱)