background

ミルワの到達距離は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画像はガンマコレクションを必要としないし、そもそも本来的に「色」に補正をかけることはあっても「強度」に補正をかける必要はないはずなんだけど……。先ほどの比較画像で明るさがほぼ同じになっているのは、右側の色を調整したライトである。ややこしいから、もう諦めて強度の値を変化させた方がいいと思うけど(笑)。

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



ひまがたり。

2016年08月07日(Sun)

流転閑語、お話を更新しました。完結です。

RutenKango

なんていうか、自分でどこでも見られるカタチになったので幸せだ(笑)。

まあ一言で表すと、自分の「こんな話が読みたいんだ!」という欲求をひたすら積み重ねていった話というか。ドタバタしてゴタゴタして、でも最後はスッキリできたらいいよね、っていうお話が好きだから、微力に微力をつなぎ合わせてこんな感じになりました。とはいうものの、文庫本にして約330ページとか、大概にもほどがあるっていうね。自分に対する一種の供養というか、ミイラ取りがフランケンシュタインになっちゃいましたみたいな。

書いてるうちによくわからなくなってきた(笑)。

とりあえず、ちょっとでも所謂「ウチのキャラ」に興味を持ってくださった方がいたら、こんなヤツらですよ、どうしようもないでしょう、と。(でも元ネタはちゃんとしたお話だから!)

まあそんなこんなで一区切り。お付き合いありがとうございました。

160807

っていうかBさんの法衣のDC、どこにやったんだろう……(独言)。



流転閑語、お話の続きをアップしております。

RutenKango

次で完結予定。週末には上げられたらいいな~。


さてPoser。

あるとき眠れなかったので、そうだSuperflyでの被写界深度の表現はどんなもんだろうと思い立ち、さくっと背景セットをロード。さくさくっとライトを配置してf値を設定、SuperflyのレンダリングボタンをポッチリしてMacを放置した。寝る準備をしてから戻ってきたらレンダリングが終了していたので、そのままFireflyでほぼ同じ設定になるようにして、またレンダリングボタンをポッチリとやってからMacから離れた。おやすみなさい。

で、起きてからレンダリング結果を確認。どんなもんかな~。

160804-01

ぼかしの品質がどうこう言う前に、なんかSuperflyのレンダ結果が暗いのが気になった。

ライトはほぼ白の200%無限光とHDR画像を繋いだ100%の拡散IBL1灯。どこに影響が出てるんだろうと思って、とりあえず無限光を100%にしてライトごとにレンダしてみた。

160804-02

うーん、どっちもSuperflyの方が暗いなあ。

以前の検証で比較したように、単純な形状、単純なライティング、単純なマテリアルの下では二つのレンダラも結果にほとんど差が出ない。Superflyはデフォルトでガンマコレクションが効いているので、Fireflyもガンマコレクションのチェックを入れている。じゃあ差が出るのはどこだろう。複雑な形状、複雑なライティング、複雑なマテリアル、そのどれか。

……などと思いながら二つのレンダラを行き来しつつテストを繰り返してる内に、ふとレンダリング時間も確認しようかなと思ってiPhoneでストップウォッチを起動した。

あ、そういえば今のPoserってログを吐くようになったんだっけ。

ログというのはプログラムが裏でゴチャゴチャと頑張っているところの記録みたいなものである。確かそこにレンダリングの秒数が出てたような気がする。Poserのログウィンドウは右上の吹き出しアイコンで表示する。

160804-03

オレンジ色になったら新しいログを吐いたよ、みたいな。

160804-04

ふむふむ。Fireflyは6分33秒。Superflyは7分58秒。Superflyの方が1分半ほど時間がかかっている。なるほどなー。

と、ちょっと待て。Superflyレンダの方、なんか警告を吐いてる。

160804-05

(意訳)警告:マテリアル○○を解釈してるときにエラーが発生したよ。SuperflyはPoserサーフェイスノードの拡散値と鏡面値にアンビエントオクルージョンノードは接続できないにょ。

なんだとぅ。

アンビエントオクルージョン(AO)はP6のころ散々お世話になった環境閉塞なあれである。

160804-06

つまりこれがSuperflyだとエラーになるらしい。もともとAOというのは「狭くて光が入り込まなさそうなところに上から影を塗る」というシェーダである。だから初めから光の回り込みをちゃんと計算するIDLでは必要ないし、描画もされなかった。

そういえばAOノードの一番下に、知らない項目が増えてるな。Evaluate in IDL……「IDLで値を計算する」みたいなことだろうか。

……うん、君の事はまた今度確認するから。(←と書いておかないと忘れる)

物理的な光の経路をちゃんと計算するというSuperflyレンダラでは、AOノードはそもそもがエラーになるという事なんだろうか。どのみちFireflyでもIDLでレンダしてるシーンなので、全部のマテリアルからAOノードを切断していく。

ひええええ。

160804-07

あ、明るくなった! やったあ。

とりあえず、SuperflyではAOノードは繋がない方がいいってことかな。マニュアルにライトのAOは使用できないとか書いてあったけど、マテリアルの方も影響するということらしい。

ええと、何をやろうとしていたんだっけ。ああ、被写界深度だ。

というわけで無限光ライトを200%に戻してレンダレンダ。

160804-08

部分を拡大するとこんな感じ。

160804-09

ザラっと感が出るSuperflyの宿命で、もっとピクセルサンプリングを上げないと気になる感じかな。Fireflyの方が綺麗にボケてる。

ちなみにここで使ったFireflyのレンダ設定。

160804-10

あとSuperflyのレンダ設定。

160804-11

まあ、既知のネタかもしれないけど。気にせずこれからも体当たりしていこうっと。





Menu

Profile

Kyotaro

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

Categories

Calendar

07 | 2016/08 | 09
- 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 31 - - -

Comments

Archives

Track back

RSS feed

Links

Search

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

※Internet Explorer非推奨。