background

Superflyがいろん・1

2016年09月25日(Sun)

SuperflyはPoser 11から新しく実装されたレンダラである。

レンダラとはデータを所定の手続きで「描画(レンダリング)」するプログラムのことである。フィギュアやカメラをぐりぐり動かして、その様子をプレビューウインドウで確認できるのは、プレビューレンダラがリアルタイムで頑張った結果だ。また、Webブラウザが実際にはテキストファイルであるHTML文書を、こうやって色々装飾しながら表示するのもレンダリングという。コンピュータはいろんなものをレンダリングしている。

160925-01

実際に計算を行う根幹のプログラムのことを、レンダリングエンジンと呼んだりする。3DCGソフトなら、それに加えてシーン内のライトやマテリアルの解釈を行う部分や、レンダリング設定などの要素もまとめたものがレンダラというとになる。

Poserにレンダラが追加されたのはFirefly以来だから、ずいぶん久しぶりのことだ。久しぶりすぎて、なかなか体当たりできない人も多いんじゃないだろうか。今までのFireflyだってそれなりのことができてたわけだし、イマイチSuperflyのすごさがわからないし、と。

すごいかどうか結論は据え置くとして、SuperflyはFireflyと何がどう違うのか、そもそもSuperflyレンダラはどういうものなのか、そのへんをちょっと考えてみようと思う。

実際のところ、自分もまだ全容を把握できているわけではないので、不正確な部分や間違いもあると思う。そのへんはやんわり教えてもらえるとありがたい。


公式サイトやマニュアルを読むと、SuperflyはBlenderで使われているCyclesというレンダリングエンジンを元にしたレイトレースレンダラであると書かれている。物理ベースのレンダラであり、分散パストレーシングによって、リアルな画像を得られるとのことだ。

この分散パストレーシングというのはちょっと誤訳風味で、Branched=分岐するパストレーシング、と解釈した方がいいかもしれない。パストレーシングの原理自体と、どのへんが分岐なのかは後で説明するとして、大事なポイントはSuperflyが「物理ベース」のレンダラということだ。

では、物理ベースとはどういう意味だろうか。

「物理ベース」は何年か前にCG界隈で流行し始めた言葉だ。「リニアワークフロー」の次ぐらいなんじゃないかな。コンピュータの性能が向上するに従って、できることは増えていく。提唱されていた理論がようやく実用に足るレベルで実装できるようになると、一気に流行りだすのだ。

もちろん、目新しさだけで新しい技術が流行るわけではない。「リアルな結果になる」というのは、普遍的なニーズの一つだ。だけど物理ベースにはもう一つの切実なメリットがある。言葉遊びのようだけども、それは「物理ベースである」という点だ。物理ベースのレンダラとは、より物理法則に忠実なデータを、なるべく物理法則に従ってレンダリングするレンダラなのだ。つまり、より現実的で、嘘がない。

じゃあ今までのレンダラは嘘だったのだろうか。もちろんそうだ。嘘というと聞こえが悪いけど、近似や代替、簡略化といったものは、コンピュータの処理能力が限られている以上どうしても必要になる。あらゆる物理法則が完璧に計算で再現できるようになるまで、何かしらの誤魔化しは続く。物理ベースのレンダラだって、まだまだいろんなところを端折ったり誤魔化したりしている。

それでも従来のレンダラに比べれば、いくつかの代替概念とサヨナラして、より現実的なレンダリングを行えるようになったのだ。そう、リアルなレンダリングとは、もう誤魔化さなくてもいいレンダリングのことなのである。

例えば、Poser 4レンダラからFireflyになった時のことを思い出してみよう。Fireflyではレイトレース反射を描画できるようになった。それまで金属やエナメルなど、反射マップを使っていた表現を、そのまま反射で表現できるようになったんである。

160925-02

計算時間が増える代わりに、より現実的な描画ができるようになった。さらに、反射マップを作る必要がなくなった。それっぽい反射マップを作るのは製作スキルの一つだったろう。だけどレイトレース反射を適切に設定すれば、誰でも同じようにリアルな結果を得ることができる。新しい技術が、個人のスキルに依存する部分を減らし、より上質な結果をもたらした。そういう感じのパラダイムシフトが、物理ベースでもやってきたんである。

ではここでちょっと、Fireflyの描画を確認してみよう。

160925-03

FireflyはRendermanというレンダラのエンジンを元にしており、基本的にはスキャンラインレンダラである。スキャンラインというのは、ざっくり言えばレイトレースより早くて単純な計算方法だ。そこに足りない様々な計算結果を追加していく。まずはシャドウマップやレイトレースで影を乗算する。

160925-04

レイトレースで反射や屈折の計算結果を加算したり、AOを乗算したり。

160925-05

IDLを使うと、レンダリング前に間接光の計算をする。

160925-06

SSSを適用したマテリアルがあったら、その分だけ別に前計算をしたり。

160925-07

そういう結果を色々加味して、最終的にレンダリング結果が得られる。

160925-08

だけど、よくよく考えてみよう。現実の世界では、影はライトからの距離や遮蔽物に応じて黒く塗りつぶされているわけではない。ただ光が当たっていないから暗いんである。日陰が真っ暗でないのは、脳内で二次反射光を加算しているからではない。光がエネルギーを失うまで何度も反射を繰り返した結果、日陰からもわずかに目に届く光があるから、明るくなっているんである。

より現実的な結果を再現しようとして、複雑な計算をいくつも重ねてきた。だけど別々に計算している限り、どこかに齟齬は出る。実際、Fireflyは屈折の中の被写界深度を表現できなかったり、透過体の中のIDLを計算しようとするととんでもない時間がかかったりする。そろそろ限界じゃないかなあ、というのが旧来のレンダラのネックだったのだ。

また、こうも考えてみよう。

光は物質の表面に当たったとき、いくらか吸収され、いくらか反射して、いくらかは屈折する。表面の微細な凹凸によってあちこちに拡散した反射が拡散反射で、一定の方向に反射したのが鏡面反射だ。反射した光はまた別の物質にぶつかって、吸収されたり、反射したりする。

160925-09

物質の色を決めているのはなんだろう? 物質がある特定の色に見えるのは、その波長の光を反射しているからだ。逆に言えば、他の波長の光は吸収している。どの波長の光を吸収するかはだいたい分子構造で決まる。もんのすごくいい加減に説明すると、分子の周りを回っている電子と同じ波長を持つ光は、ぶつかったときにその分子をぐるぐる回って安定してしまい、出てこれなくなるのだ。吸収されなかった光は屈折して物質の中を進む。屈折率は物質の誘電率や透磁率で決まる。不純物にぶつかったらまた反射して、その中のいくつかは、物質に入った地点からそう遠くない場所に出てくるだろう。皮下散乱である。

光の経路を考えてみると、鏡面反射とレイトレース反射を分けて考える方が、むしろ奇妙に感じてくるだろう。ハイライトとは結局、反射した光源の姿そのものだからだ。また、拡散反射とレイトレース反射と屈折は合計を1以下に設定する、というのも納得がいくだろう。1以上にしたら、入った以上の光が出てくることになってしまうからだ。

そういえば拡散反射を描画するランバートシェーディングは、光が当たった時すべての方向に等しく拡散するという前提で式を簡略化している。しかし実際のところ、それは理想であって現実的ではない。どの色をどの方向にどれだけ反射するのか、そういう指標が本当は必要なはずだ。

色というのも再考の余地がある。ヒトが色を感じるのはある範囲の波長に反応する光の受容体が三種類ほど眼の中にあるからだ。その感度は均等でなく、さらに個人差もある。

160925-10

今は赤青緑の三色で計算しているけど、世界に溢れている電磁波の中にはいろいろな波長が含まれているし、物質が反射する光だって三色だけではない。分光反射率特性で色を設定し、あらゆる波長の光を積分し、ヒトの(あるいは別の生物の)眼の受容体の感度に基づいてレンダリングする。そういう未来も、やがては来るかもしれない。

まあ、そこまで話が飛んでしまうと、もう手がつけられないので(汗)。

せめて光が通るあらゆる経路を考慮して、物質表面の状態で反射率や色々を計算できたら、どんな風になるだろう? その考え方はとてもシンプルだ。そして膨大な時間がかかるだろう。なるべく簡単な計算方法を考えて、コンピュータの性能がどんどん向上して……今、ようやくある程度の精度を、そこそこの時間で叩き出せるようになった。

だったらもう、今までのマテリアルやその他もろもろの概念は、一旦捨ててしまおう。より素直に、ありのままの姿を計算しよう。

そういう考え方が、物理ベースなのだ。(つづく)

160925-11

次はパストレーシングとマテリアルのざっくりとした考え方についての予定。そしてこれは、使わなかったレンダリング比較(笑)。



前回からちょっと間が開いてしまったけど、相変わらず丸やら四角やらをレンダしている。未だにエアコンを切ると汗ばんでくるぐらいなので、早く涼しくならないかなと願うばかりだったり。

リクエストを頂いたのでSuperflyのあれこれを書いていこうと思ったんだけど、だったらやっぱりその前に、マテリアルルーム自体のこともまとめておこうかなと考えた。マテリアルルームはバージョンを重ねる内に、それなりに使い勝手が向上しているからだ。

なにせまず、範囲選択が可能になっていた。あと、ノード名を右クリックしてコンテクストメニューを表示するとか。むしろできない方がソフトとしてどうなんだ、とツッコミを入れたいとこだけど、実際2012ぐらいまではShiftキーを押下しながらノード名をクリックし、何もないところを右クリックしてコピーする、みたいなことをやってたんだから、有り難い限りである。

もちろんそれだけではないので、便利になったと思うところを列挙してみる。

1.適切な接続の例示

Poser 11では、ノードの出力部分をぎゅっとドラッグすると、

160919-01

そのノードから接続できる入力だけが残り、接続するべきでないノード値は灰色になる、というガイド機能が実装された。

160919-02

たとえばVolumeノードの出力から枝を伸ばしたら、Poserサーフェイスノードは反射色、屈折色、代替拡散、代替鏡面、そしてボリュームのノード値だけが有効表示になる。バンプや透明度には接続しない方がいい、ということがわかるわけだ。まあVolumeノードは大人しくVolumeに接続すればいいんたげども。

2.ノードに名前をつけられる(Poser 10より)

以前はマテリアルの各ノードに名前をつけようと思ったら、マテリアルファイルを直接編集して適用してやるしかなかった。自分も配布物を作るときは気張って外部名を考えたり、表示位置をピクセル単位で揃えたりしてたものである。

160919-03

しかし今ではノード名をクリックしてやれば、普通に入力が可能になっている。なのでイメージマップノードや数値演算ノードなど、同じ名前でたくさん登場するノードについては「バンプマップ」とか「輪郭線を合成」といったように機能で名前をつけてやれば、後から見てもそのノードが何をしているのかがわかりやすい。

ちなみにPoser 11はどうやらちゃんとマルチバイト対応できてるみたいだから、英語版で日本語を打っても特になんの問題もなかった。とはいえ海外の人も利用する配布物を作るような時は英数字以外は使わない方がいいから、結局日本語は打たないようになるんだけど。

3.ノードを折り畳める(Poser 10より)

たとえばこれは拡散IBLライトの色を指定するシェーダツリー。その昔RuntimeDNAあたりで配布されてたような気がするやつ。要は6枚の画像で6面の色を指定している。

160919-04

一度シェーダを組んでしまえば、イメージマップノードや各ノードを合成する部分というのはほとんど操作しない。なのでなるべく小さく折り畳み、すみっこに重ねたりして省スペース化に努めるわけだけども。

Compound(複合)ノードというやつは、こういうごちゃっとした部分を丸ごと選択して、

160919-05

右クリック>「Collapse to compound node (複合ノードに変換)」で折り畳むことができる。

160919-06

折り畳んだノードは、ノード名の横の「箱に入る感じのアイコン」をクリックしてやると

160919-07

中身が表示される。

160919-08

元の表示に戻る時は、左上の「箱から出る感じのアイコン」をクリックしてやるといい。このCompoundノードの中では新しくノードを追加することもできるし、さらに入れ子にすることも可能だ。つまり、複雑なツリー構造をまるっとブラックボックスにしてしまうことができるわけだ。

ちなみに、折り畳んだノードはExpand compound nodes(複合ノードを展開)を選ぶと元通りに展開できる。

この複合ノードとノード名の命名を組み合わせると、複雑怪奇化していたシェーダツリーをごく見やすく整理することができる。

160919-09

4.マテリアルを階層化できる

これはSuperflyレンダラでしか使えないけど、Poser 11のマテリアルはレイヤー(階層)を重ねることができる。具体的に、肌の上に刺青を重ねたりといったことができる。方法は簡単で、シェーダウィンドウの上部、レイヤー名の右にあるプラスボタンをクリックする。

160919-10

すると新しいレイヤーが作成される。そのままだと上位レイヤーが下位レイヤーを完全に覆ってしまいるので、レンダリングすると上位レイヤーだけが描画される。なので通常は上位レイヤーに透明度を設定して、部分的に下層のレイヤーのマテリアルを見せる。

160919-11

さらにその上に別のレイヤーを重ねることもできる。今まで刺青を二枚重ねようと思ったら、ブレンダーノードや数値演算色ノードを駆使して接続を変えなければならなかったが、そういったものもボタンひとつで解決できるわけだ。まあ、焼き込みや覆い焼きみたいな複雑な合成方法を取るなら、数値演算した方がいい気もするけど。

刺青や傷などの他にも、今まで困難だった「下層と上層で異なるバンプを持つマテリアル」、例えば凹凸のある物質の上にニスをコーティングしたような素材も手軽に実現できる。

また、お肌の一部を濡らしてさらにその一部に泡をくっつけたりみたいな、少数の(もしくは大多数の)ユーザーの探求心を刺激するマテリアルなんかも色々できるわけで。

160919-12

色々試してみるといいんじゃないかな。

5.複数のルートノードを持てる

新機能の中で、自分が一番メリットが大きいと思っているのがこれである。

従来、ライトや背景といった特殊なオブジェクトを除いたほとんどのマテリアルは、Poserサーフェイスノードというひとつの根っこ(ルート)のノードを持っていた。

それがPoser11ではPoserサーフェイスノードだけではなく、PhisicalサーフェイスノードとCyclesサーフェイスノードという二つのルートノードが追加された。

使い分けとしては、

  • Superflyでも今までのことがだいたいできるPoserサーフェイス
  • 物理的な特性をそのまま設定すればより素直に反映されるPhisicalサーフェイス
  • BlenderのCyclesレンダラで組んでたノードを再現できるようにしたCyclesサーフェイス

という感じ。

で、シェーダウィンドウの空いたところで右クリックすれば、新しいルートノードを追加できる。

160919-13

各ルート1つずつしか持てないということはなく、どのルートノードでも好きなだけ追加することが(たぶん)可能だ。

しかし、根っこになるノードがいくつもあるとレンダリングするときにどれを基準にすればいいのかわからない。なので、実際に使用するルートノードをチェックボックスで指定する。チェックの入っていないルートノードは無視されることになる。

160919-14

このチェックボックスはSuperflyとFireflyで別々に設定できるので、例えばFireflyでは今まで通りのPoserサーフェイスノードで、Superflyを使うときは新しいPhisicalサーフェイスノードで、といった使い分けができる。なお、スケッチレンダラとプレビューレンダラは、プレビュー画面の表示をそのまま使用するので設定はない。プレビュー画面自体は、直前に使用されたレンダラの設定を使って描画される。

この「レンダラやルートの種類に限定されずに複数のルートを持てる」というのは、色んなところで利用できる。例えばFireflyしか使わないというようなケースでも、トゥーンレンダするときはこちらのルートノード、SSSを使うときはこちらのルートノード、というように一つのマテリアルの中でまったく異なる設定を使い分けることができる。また、元々あるマテリアル設定を改造してみたいけど、元に戻せなくなったら困る……というような時は、とりあえずルートを新しく追加してみればいい。ルートから末端まで丸ごとコピー&ペーストしてしまうことも可能だ。

160919-15

いくらでも改造したい放題である。

もちろん、ひとつのマテリアル内に使用しないルートを保持する、という状態は恒常的には効率的でないかもしれない。マクロでうっかり孤立したノードを削除すると、Superfly・Fireflyどちらにもチェックの入っていないルートはがっつり削除されてしまう。なのでトゥーンのマテリアルはこれ、というように一通りの設定が決まったら、その部分だけを選択して登録した方がいいだろう。

160919-16

マテリアルを適用する時も、単体のマテリアル(mt5)は適用方法を「置き換え」か「追加」か選択することができる(ダブルクリックで適用すると置き換えになる)。自分なりのベースを作ってしまえば、他のキャラやアイテムに適用するのも手間が少なくてすむ。

改造や微調整、あるいは何パターンかのバリエーションの検討を、チェックボックスだけで切り替えられるというのは非常に手軽だ。今までマテリアル調整に費やしていた時間のいくらかは、このへんの機能を活用すればかなり短縮できるんじゃないだろうかと思っている。



ミルワの到達距離は3ブロック。

2016年08月22日(Mon)

ところでライトというものは、二次減衰するものである。

いきなりなんだと思われたかもしれないが、日頃ウダウダと考えていることの取りかかりとして、少し確認しておきたいことができたので。

光というものは電磁波であり、揺らぐ場そのものであり、その伝播そのものが時空……すなわち距離と時間を定義する。

確かそんなだったと思う(逃)。

この電磁波というやつは、別のものにエネルギーを持っていかれない限り、どこまでも進む。いつまでも進む。なにせ宇宙の始まりからいまだに進んでいる。

いやでも、実際離れたら弱くなるよね? と思ってしまうのが、いわゆる逆二乗の法則というやつである。だいぶにも書いたかもしれないけども、図にするとこんな感じ。

160822-01

光源から離れると、離れたぶんだけ光は広がっていく。同じ光の量が、より広い面積に照射されるから、一区画だけを見れば光の当たる量は少なくなるのだ。

距離が倍になれば面積は4倍になる。一区画あたりの光の量は1/4。距離が3倍になれば面積は9倍。最初の地点での明るさの1/9になってしまう。だけど、いつまで経っても0になることはない。

だから本来、Poserのポイントライトやスポットライトに終点距離が存在するのは、物理的におかしいんである。旧来のPoserのライトは減衰の始まる地点と完全に0になる地点を設定し、中間の明るさを均等割りしていく。それは直感的にはわかりやすいかもしれないが、物理的に素直な計算をしようと思うと、どうしても障害になる。

そういうわけで、PoserではIDLが実装されたバージョン8で、ようやく二次減衰を扱うことができるようになった。

160822-02

距離が倍になれば明るさが1/4になるライトである。しかしこれは実際に使ってみるとなかなか調整が難しく、妥協の産物のように明るさが距離の反比例になる反比例ライトというのも同時に追加されている。

160822-03

さて、それでは「距離が倍」というのはどういう意味だろう。もちろん基準というのはなんでもよくて、例えば1メートルの距離で明るさが1なら、2メートルの距離では0.25になる。それはわかっている。知りたいのは、Poserのライトは強度が100%のとき、いったい「どの基準で100%になるのか」という点だ。

じゃあ測ってみよう。

160822-04

シーンの中央にポイントライトを一つだけ設置する。色は白、強度は100%。で、それに照らされる真っ白な板を用意する。鏡面反射その他のパラメータはちゃんと0にしておく。この板をライトから離していけば、どんどん暗くなっていく。その色つまり輝度で、何パーセントの光が板に当たっているのかを測定する。

簡単のために、背後に別の板を配置する。こちらは拡散反射も鏡面反射も0、環境色と環境値だけが設定された「発光する板」だ。この板はライトの影響を受けず、どの距離どの向きにあっても同じ明るさに見える。環境色を白にして、環境値を0.25にする。この発光する板と照らされる板の明るさが同じになったとき、照らされる板はちょうど「基準の倍の距離」に位置することになる。

なんで100%の明るさでやらないのかというと、白飛びしてしまってわかりにくいからである。あと、ガンマコレクション機能を使うとレンダ結果に「人間の目の明るい歪み」をかけてしまうので、FireflyのガンマコレクションOFFの状態で確認する。

表1: 表面輝度とスポットライトの照射距離の変化
表面輝度 [%]66.750.025.020.011.1
ライトからの距離[PU]1.231.422.002.253.00

結論から言うと、「たぶんそうだろう」と思ってPoser単位で測ったら、そのまんまだった。

つまりポイントライトやスポットライトは、1Poser単位の距離にあるとき設定された強度そのままの明るさで対象を照らすライトである、ということだ。

ところで1Poser単位は8.6フィートである(ちっ)。8.6フィートは2.62メートル。つまり二次減衰する100%のライトは、2.62メートルより近い距離にあると、とんでもなく色飛びする強烈なライトということになる。近いと目茶苦茶明るいくせに、離れると一転、急激に暗くなる。

160822-05

最近はガンマコレクションを使う人が多いだろうし、Superflyではオフにするという選択肢がないので、この曲線にガンマ補正をかけてだいたいこんな感じ。

160822-06

暗い部分が持ち上がるから、減衰がゆるやかになっている。

で、明るすぎる部分を調整するには、もちろんライトの強度を落とすわけだけども。具体的にどれぐらい変化するのか、ガンマ補正2.2、距離をメートルに直してプロットしてみた。

160822-07

明るさが10%でも、1メートルの距離ではまだまだ明るいようだ。逆に、5メートルを超えるあたりからは変化がなだらかになる。つまり補助ライトを当てるときは、対象から5メートルぐらいは離してやらないと、ちょっとの変化で明るさがやたらと変わってしまうというわけだ。逆に十分に距離をとってやれば、その値はだいたい見当がつく、ということになる。

はたして。

160822-08

理論に裏打ちされた妄想癖、っていう。



小ネタを拾ってみる。

2016年08月12日(Fri)

引き続いて、コメントなどで頂いてたツッコミをネタにしてみる。

「Fireflyだと建物の角が削れてるように見える」

160812-01

なるほど確かに面取りされたように陰影のつき方が二段階になっている。実際のところはどうなんだろう、というわけで近づいてみた。

160812-02

Fireflyだけ小石が見えているのはこの際気にしないでほしい。で、実際には形状は面取りされてないことがわかる。つまり影のつき方がおかしいわけだ。これはFireflyでレイトレースシャドウを使用した場合に、Shadow Min Bias(影の偏り)によって自分自身の影、いわゆるセルフシャドウの位置が現実の位置より大きくずれてしまったために起こる。細かな解説は昔書いた気がする。記事自体が古いので、現状と一致しない部分もあるけど、まあ参考程度に。より正確に影を描画するには、シャドウバイアスの値を小さくする。

160812-03

そういえば、非平面ポリゴンの描画はいつの間にか改善されてたみたい。あの不気味な斑点が出ないようになっている。ちゃんと進歩してるんだなー。

「ドーム型GROUNDをSuperflyでレンダするとIDLが効かない」

sannziさんからコメントで頂いた件。色々検証して頂いたおかげで原因がはっきりしたのでまとめておく。まず、基本小道具を組み合わせて、こんな感じのシーンを作ってみる。で、IBLライト1灯だけでレンダする。

160812-04

拡散IBLライトはPoser 6で実装された時、面の向きとそれに対応する画像の色によって色が決まるライトだった。障害物があってもなくても同じように色付けされてしまうので、強度を上げすぎないようにしたり、AOノードで陰影をそれっぽく追加してやる必要があった。

160812-05

Poser 8でIDLが実装されると、この拡散IBLの仕様は一部変更になった。IDLが使用されているときだけ、拡散IBLは無限遠からシーンを球のように包み込むライトとなったんである。したがって、無限遠とシーンとの間に遮蔽物があれば、拡散IBLは遮られることになる。

160812-06

箱の中はほぼ前面のマゼンダ色だけに影響を受けている。あと開口部付近に上面の赤や左面の黄色が出ているのがわかる。

つまりこれはSuperflyの問題ではなく、FireflyでもIDLを使用する場合には起こりうる現象だったわけだ。もちろん考え方としては、遮蔽物があれば光はそこで遮られる方が現実的である。シーンがドームに覆われていれば、中のものが外の光を受けることはない。

とは言ってもFireflyには抜け道がある。遮蔽物オブジェクトの特性パレットで、Light emitter(発光体)をオフにすればいい。

160812-07

これはもともと「カメラには映らない発光体」のようなものを扱うための設定だけど、これをオフにしているとき、二次反射光の計算はそのオブジェクトを無視するようになる。つまり遮蔽物オブジェクトを素通りするわけだ。

ではSuperflyではどうなんだろう、と試してみると、どうもSuperflyではこのLight emitterが効いてないみたい。Visible in Raytracingのチェックを外せば同じようにIDLの計算から外すことはできるけど、その場合は反射とかその辺の計算からも外されてしまうので、映り込みの可能性のあるレンダでは要注意だ。

160812-08

そういうわけで、IDL使用下で拡散IBLを使用する場合は遮蔽物の有無に気をつけなければいけない。Superflyでドームを使うなら上半球、空のマテリアルの環境値を全開にして、ドーム自体を発光させてしまえばいいかな。

160812-09

「P11のFIrefly、バンプがきつくなってる気がする」

P7(なんとか動いた!)で簡単なシーンを作って、カメラ・ライト・小道具をライブラリに登録。バージョンの違うPoserでそれぞれロードして、同じFirefly設定でレンダリングしてみた。

160812-10

基本的に違いはないみたい。

ただし、Poser Pro2010からガンマコレクション機能が追加されている。バンプマップのガンマコレクションを特に弄ってなかった場合、2010ではイメージマップノードはデフォルトの「レンダ設定の値」で読み込まれる。なのでそのままガンマコレクション機能を使うと補正されてしまい、バンプの効きは弱くなる。

160812-11

床面の凹凸がちょっと弱くなってるのがわかるかな。

Poser 11はバンプマップに接続されたイメージマップノードはデフォルトで「個別に設定→1.0」のガンマ設定になっている。なので両者をデフォルトのまま使うと、単純に効きは強くなっているかもしれない。動作的には1.0になっているのがあるべき姿なので、バンプが効きすぎていると感じたら自分好みに値を調整するのがいいかもしれない。

以上。まあこういうの、ちゃんと書いておかないと自分で忘れちゃうしー。



Evaluate in IDL

2016年08月09日(Tue)

さて、そういうわけで宿題になっていたPoserの小ネタを拾い上げていこうかなと思う。

前々回のSuperflyで被写界深度を試してみた話。で気づいたAOノードの最下欄、いつの間にか追加されてたEvaluate in IDLという項目。どうも2014にはあったっぽい。

160809-01

また、AOはノードだけでなくライトでも別枠で設定できるけど(たぶんそっちを使ってる方が多いと思う)、ライトの特性パレットにも項目が増えている。

160809-02

Evaluate in light ……なんで名称が違うのかツッコミたいところだけど、たぶん同じものを指しているんだと思う。

というわけでさくっと基本小道具を並べてみる。

160809-03

拡散IBLライト1灯+無限光1灯。Fireflyでガンマコレクションを使用せずにレンダリング。無限光の影になっている部分が、均一な暗さになっていることがわかる。

AOが実装されたとき、それは細かな影の計算が行き届かず、不必要に明るくなってしまう細部を黒く塗りつぶすというシェーダだった。

160809-04

で、Poser 8でIDLが実装されたとき、このAOによる塗りつぶしは機能しなかった。

160809-05

確かにライトの当たっている立方体の側面は暗くなってない。というか逆に照り返しを受けて明るくなっている。しかし影になっている部分でも、きちんと陰影が現れていることがわかる。

もともとIDLは二次反射光を丁寧に計算しますよ、というものだ。直接光が当たっていなくても、近くにある物体から拡散反射したわずかな光を計算し、明るいところは明るく描画する。どんな光も当たってないところは暗いまま。そういう計算をちゃんとしていたから、「狭そうだから塗りつぶしてしまえ」という、AOの擬似的な陰影描写はそもそも不必要だった。

とはいうものの、IDLを使いつつAOのオオザッパーな陰影付けはそれはそれで欲しいとか、陰影付け以外の用途で使ってた(自分のことだ)から使えるようにして欲しい……みたいな要望はやっぱりあったんだろう。

では拡散IBLと無限光、別々に効果を確認してみる。まずはライトの設定のEvaluate in lightから。

160809-06

無限光では立方体の明るい部分がなくなり、ドーナツの下などにぼんやりした影が現れている。一方の拡散IBLライトでは変化は見られない。このことから、Evaluate in Lightは無限光(など)のAOを描画する機能だとわかる。

実際、無限光のIDLを計算中、赤い点の中に見慣れない黒い点が現れている。

160809-07

じゃあ、ノードによるAOはどうなんだろう。

160809-08

なんとこちらは、チェックを外した状態でIDLでも陰影が描画されているので、どちらも変わらないという結果になった。計算中は確かにチェックを入れた状態だと黒い点々が現れるんだけども、レンダが始まると結果はまったく同じなんである。じゃあ追加した欄の意味ないじゃん! とツッコミそうになったけど、もしかしたら自分の何かしらの設定ミスとかあるのかもしれない。なんか自信なくなってきた。

ええっと。

Fireflyでの効果はわかったけど、じゃあSuperflyでの効果はどうなんだろう。といいつつ、これはもう結果がわかっている。SuperflyではAOノードを接続してはいけないと怒られた。だからノードによるAOはそもそも描画できない。代替拡散に乗算で繋いで……というようなことも試してみたけど、どうやらAOの計算自体が行われなくなるみたいだ。で、ライトのAOもFireflyのIDLと同じく無効になる。

Superflyは基本、物理的に正直な計算を行うレンダラだから、二次反射光の計算はもちろん行われているし、むしろ計算しないという選択肢がない。したがって陰影はちゃんとついている。擬似的な陰影付けのAOは不要なのだ。というか、今のところSuperflyで従来の「嘘をつく系」シェーダは使わない方がいい、ということなんだろう。トゥーンにしろベルベットにしろ、AOにしろ。どうしても今使いたいという人は、Cyclesグループの中にBrender版のシェーダがちゃんとあるから、ぜひトライして詳細を教えて欲しい(笑)。

160809-09

こちらは比較のためにFireflyでガンマコレクションを2.2にしてレンダリングしたものとSuperflyレンダ。多少の差はあるものの、だいたい同じような結果になっているのがわかる。狭い部分の描画はやっぱりSuperflyの方が正確だ。

ちなみに、Superflyでの拡散IBLライトはどうも強度にガンマコレクションがかかってるっぽい。

160809-10

IBLに接続するべきhdr画像はガンマコレクションを必要としないし、そもそも本来的に「色」に補正をかけることはあっても「強度」に補正をかける必要はないはずなんだけど……。先ほどの比較画像で明るさがほぼ同じになっているのは、右側の色を調整したライトである。ややこしいから、もう諦めて強度の値を変化させた方がいいと思うけど(笑)。

まあこういう怪しい動作のところは、そのうちサイレント修正入るかもしれないけどねー。





Menu

Profile

Kyotaro

確定名:Kyotaro
ネタを探しているらしい。

Categories

Calendar

08 | 2016/09 | 10
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

Comments

Archives

Track back

RSS feed

Links

Search

※2011年4月6日のサーバ障害の為、エントリのアドレスが以前のものからズレています。当Blogのエントリにリンクを張っておられた方は、お手数ですがアドレスのご確認をお願い致します。

※Internet Explorer非推奨。