流転閑語、お話の続きを更新しておりますのでお楽しみください。
なんていうか、いよいよな感じ(笑)。
さて。
Poser 11でSuperflyレンダラを見据えたマテリアルの調整をしようとすると、どうしても疑問にぶつかる。Superflyレンダラとは一体どういうレンダラなのか? という点だ。
それは「SuperflyとはBlenderのレンダリングエンジンCyclesを改良した物理ベースの~」というところではなくて。まあそれはそれで大事で、Cylcesの接続を再現するためっぽいノードがごっそり追加されているのを見ても、いずれは目を通しておこうとは思うんだけど、とりあえずここで知りたいのは「ガンマ」とか「リニアなんちゃら」とかいうあのへんのことである。
何年か前にちょうど「リニアなんちゃら」が流行りだしたとき、それは物理的に正しいレンダリングを目指すものであり、最終的には「近似と感覚」で再現するしかないものだった。しかしそれによって、画像のガンマ値という概念がPoser界隈にやってきたのは確かな話だ。それから数年経った今、新しく実装されたレンダラではどのように扱われているのだろう。
というわけで実験。
なんか懐かしいね(笑)。
小道具の四角を並べて拡散色を白にして(小道具のデフォルトの拡散色は完全な白ではないので注意)他の値は全部0、拡散値を0から1まで0.05刻みに増やして並べる。Superflyは拡散反射もきっちり他のオブジェクトに影響を与え合うので、背景や地面などは非表示にする。そしてライトを無限光1灯にして、色は白、強度は100%で真正面から当てる。
で、そのレンダリング結果をPhotoshopでカラープロファイルの割り当てをなしにして開き、スポイトツールで輝度を調べる。
最初にランベルトさんが考えたように、もともとレンダリング結果というやつはカメラに届く「光の量」を表しているのであって、その光の量が人間の目に「どんな色に見えるか」を表しているのではなかった。光の量が白の50%であるとき、人間はそれを「ちょうど灰色(50%グレー)」ではなく「明るい灰色(70%ぐらい)」と認識する。ところが、ピクセルの輝度で表された「光の量」を私たちはまるで「人間の目に映る色」のように扱っていた。明るい歪みがかかった人間の目の世界よりも、物理的な光の量の世界は暗い。だからレンダリング結果はいつもなぜか暗いのだ。したがって旧来のレンダラでは「人間の目の歪み」を加えるという後処理が必要だった。それを「レンダラ内部でやりますよ、そのかわり使うテクスチャとか、ちゃんとガンマ値を考慮してね?」というのがリニアなんちゃらだ。
で、レンダリング結果。
表にするのはちょっと大変だったのでグラフ。横軸が拡散値、縦軸がレンダ結果の輝度。
プレビューレンダとFirefly・ガンマコレクションなしの結果はまあその通り。ガンマコレクションありの方は、ピンク色の線がxの1/2.2乗のカーブで、ちょうどガンマ値2.2の逆数のカーブがかかっているのがわかる。Superflyは同じように明るくなってるんだけど、なんでか2.2よりほんのちょっと暗い。で、拡散値が1を超えても出力結果が100%にならない。色飛びを抑えるために全体を0.98で掛けてるようにも見える。
とは言え、これでSuperflyレンダラはFireflyのガンマコレクション機能と同じように
「レンダリング後に(ガンマ値2.1ぐらいの逆数の)明るい歪みをかけるレンダラである」
ということがわかった。
さて、レンダリング後に明るい歪みをかけるリニアなんちゃらでは、レンダリング前に使用する画像ファイルに「暗い歪み」をかける。では、Superflyでは画像の扱いはどうなるのだろう。
ということで、こういうイメージマップを用意する。
実はPhotoshopで作るグラデーションは完全な線形ではない。なので仕方なく鉛筆ツールで1ピクセルごとにRBGの値を1ずつ増やしていった。
いや暇じゃないのよ。
テクスチャ画像を読み込む時、テクスチャマネージャというダイアログが表示される。ここでレンダリング設定のガンマコレクションの値を使用するか、個別に指定するかを選択できる。
なので、両方の場合について確認することになる。
比較対象は値ノードのuノード。
uノード及びvノードは、ジオメトリのUV値を参照するノードである。UV値の振られていない場所つまり頂点でないところは、その距離で補間される。これを基本小道具の片面の平面に接続すると、0から1まで線形に変化するグラデーションが得られる。
まあこの時点でなんか「あ、はい」みたいな気持ちになっちゃうけど。
そんなこんなでまずは拡散色で比較。ガンマコレクション2.2で、画像に同じ値を設定したとき。
ガンマコレクション機能を使用しないとき、グラデーションは線形になる。ガンマコレクション機能を使用すると、uノードのグラデーションは明るい方に歪み、ガンマ値2.2を指定した画像は歪まない。このガンマ値2.2とは、レンダリング前に暗い歪みをかける時の値である。暗く歪めてからレンダリングし、その結果を2.2の逆数で明るく歪める。なので元通りの線形に戻る。uノードの方は画像でなく単なる値なので、レンダリング前に暗く歪める処理が入らない。だからレンダリング後の明るい歪みだけが入り、結果、明るく歪むことになる。
画像のガンマ値に1.0を指定したとき。
画像はuノードと同じ明るい歪みを見せる。逆に言うと、uノードはガンマ値1.0で固定、という解釈もできる。Superflyにはガンマコレクションを使わない、という選択肢はない。なので拡散色を指定するとき、その値はガンマ値2.1~2.2を意識することになる。まあ画像の場合、デフォルトの設定が「レンダ設定と同じにする」だから、ほとんど問題ないとは思うけど。
では次に、透明度に画像マップを指定する場合。ガンマコレクション機能が実装されたころに流行した薄毛症候群のアレである。拡散色は白、拡散値は1にして、グラデーションをそれぞれ透明度に接続する。
しまった、縦向きだと比較しにくい。というわけで90度回転させてレンダリングする。
Poserでは通常白い部分を不透明に、黒い部分を透明にレンダリングする。上の結果では、画像にガンマ値2.2を指定してガンマコレクションありでレンダリングしたFirefly、そしてSuperflyレンダでは本来意図したよりも多く透けていることがわかる。
レンダリング前にマップにガンマ値2.2の「暗い歪み」がかかっているために、中間部分がより暗く黒くなってしまうのだ。レンダリング後にかけられる「明るい歪み」は明るさに対してだけである。なので、失われてしまった毛髪……もとい、透明度が元に戻ることはない。
つまり、Superflyでも透明度マップはちゃんとガンマ値1.0を指定しよう、ということである。Fireflyで特にガンマコレクションを使ってこなかった、または意識してマテリアルを組んでなかった、という人は要注意かもしれない。
では最後に、バンプやディスプレイスメントについて。バンプだと結果がわかりにくいので、ディスプレイスメントを使う。Superflyではディスプレイスメントは最初から有効になっていて、オフにすることはできないっぽい。
こんな感じで床に並べた平面にディスプレイスメントを設定、イメージしやすいように拡散色にも同じようにノードを接続している。白い部分で1m浮き上がっている。
で、これもレンダ。
透明度とはちょっと違う結果になった。
まず、上段のFirefly・ガンマコレクションありの場合。ガンマ値2.2を指定した平面が曲面になっているのがわかる。レンダリング前に暗く歪められたことによって、凹型の曲線になったのだ。Fireflyでガンマコレクション機能を使う場合、バンプマップやディスプレイスメントマップもガンマ値1.0を指定しなければならなかった。
しかし下段のSuperflyを見ると、ガンマ値に2.2を指定したときと1.0を指定したとき、その変化量に違いがない。つまりSuperflyレンダラでは、バンプやディスプレイスメントに接続された画像ノードに対しては「ノードの設定にかかわらず、ガンマカーブを掛けない」という扱いになっているのがわかる。
透明度マップと異なり、バンプマップは古いアイテムだと拡散色マップを使い回しているものも結構ある。もしかしたらその対策なのかもしれない。
というわけで、以上のことをまとめてみる。
- Superflyレンダラは、レンダリング後に明るい歪みをかけるレンダラである。
- その歪みは約2.2の逆数であり、2.2よりちょっとだけ暗い。値は今の所変更できない。
- 拡散色について、テクスチャ画像を使う場合、テクスチャマネージャで「レンダ設定と同じガンマ値」を指定しておけば特に歪みを意識する必要はない。
- しかし、画像ではなく値を指定するような場合は、レンダ後の歪みを考慮して暗い値を設定する必要がある。
- 透明度にテクスチャ画像を使う場合、テクスチャマネージャでガンマ値1.0を指定する。
- バンプやディスプレイスメントに画像を使う場合、ガンマ値の指定は無視されるので設定しなくても構わない。ただし、Fireflyのガンマコレクション機能との互換を考えるなら、1.0を指定した方がいい。拡散色マップと共用の場合は「レンダ設定と同じガンマ値」にしておく。
という結果になった。ただしこれは、あくまで「今のPoserの状態」つまりPoser 11 SR4の場合だ。もしかしたら今後のバージョンでちょっとした修正が入って、透明度マップでも設定を無視したりとか、そういう仕様になる可能性は皆無とは言えない。
また、環境値や鏡面反射についてはどうなんだっていう話もあるけど、鏡面反射は根本から別物になってるのでここでは割愛することにする。いやめんどくさいからとか、決してそういうわけじゃ……(墓穴)。
まあ結局、ガンマ値はちゃんと設定しようね、ってことかな。
そろそろ調整に戻らないと。