background

赤っぽい裸々。

2016年10月30日(Sun)

こんな感じの肌色に、

161030-1

赤っぽいムラを乗せてー、

161030-2

青っぽいムラを乗せてー、

161030-3

肌色のベースが完成。あとは、色調補正してごちゃごちゃ描き込んでこんな感じ。

161030-4

リアル目指すなら写真切り貼りした方がいいんだろうけど、そんなわけでもないので。

あとは、バンプは100%表示でこんな感じ。

161030-5

手描きなんでけっこういい加減だったりする。で、体のスペキュラマップはこんな感じ。

161030-6

あと粗さマップ。

161030-7

このへんはざっくりとした数値の指標になればいいので、解像度自体はかなり低め。

まあ参考……というわけでもないんだけど。

ちなみに「不気味」「気持ち悪い」と絶不評のSuperflyマテリアルプレビューおじさん、あれジオメトリはP6 Jamesを流用してるらしくて、UVが一致する。ということは

161030-8

ベースフィギュアが細かい方のじぇーむずであるところのAさんは、この通りテクスチャがジャストフィットするんである。うーん大勝利。とはいえ、顔以のマテリアルが不気味で気持ち悪いことに変わりはないんだけど(笑)。

スポンサーサイト





そしていつもこうして見失う。

2016年10月25日(Tue)

覚書のつもりでTranslucentの働きをGIFアニメにしておく。

161025-1

ついでに、こんな感じのこともできないかな、と試行錯誤してみる。

161025-2

んー。

ここで、せっかくだからとBlenderのチュートリアルやらWikiやらを調べる。

物質による光の吸収を定式化したランベルト・ベールの法則に従って、ある媒質に入射する光の強度をI0、距離lだけ進んだときの光の強度をI1としたときの吸光度Aは

A = -log10(I1/I0) = ECl = εcl

で表される。このときεはモル吸光係数、cは媒質のモル濃度である。従って

(I1/I0) = 10-εcl

となる。さらにごにょごにょして、吸収断面積σや単位面積あたりの分子の数Nなどを用いて

loge(I1/I0) = -σNL

σとNをまるっとひっくるめて係数aとすると

I1 = e-al × I0

つまり入射光に等しい状態(=1)から始まって距離lが増えて行くほど0に近づいていく。

161025-3

これをシェーダツリーっぽく表現すると

161025-4

さらに「物質表面で屈折してその物質を出て行くまでの距離」を加えて

161025-5

となる。

こうすると1のときには元の色、0のときには吸収されきったあとの色、というように振り分けることができる。

161025-6

左はTranslucentそのまま、右はSubsurface Scatter、真ん中がいまのやつをTranslucentに噛ませたもの。元の色が白で、吸収されると水色になる感じ。薄っぺらいところは白っぽく、分厚いところは水色になる。Volumeでええんちゃうの、と言われるとそんな気がしなくもないけど、まあそれはそれ。

さらにGlassBsdfシェーダなんかと組み合わせて

161025-7

ええっと。

何をしてたんだっけ……?



ここにSassy Hair 2があるじゃろ?

161023-1

HSV2ノードで色調を変えて、

161023-2

マテリアルをごにょごにょっとして、こうじゃ。

161023-3

うん、ちょっとは髪っぽくなってきたかな。人体のマテリアルを調整するときは、髪はもちろん表示はおろかロードすらしないんだけど。それだと途中経過をUPするのに坊主頭ばっかりで、なんだかなーみたいな気持ちになったりもして、もののついでに軽めの髪でSuperfly用のシェーダを組んでみようかと。

髪はまだ自分の中でコレというテンプレが出来上がってないんだけど、方向性は見えてきたかなあ、というところ。レンダラのリアル度が上がったから、そのままレンダすると残念な感じになるんだよね。

自分的に一番好みの金髪テクスチャを作られる3DreamさんのMATと比較してみたり。

161023-4

んー、もうちょっと調整が必要だなー。

とはいえ、Fireflyではアレコレ試行錯誤してもなかなか上手くいかなかったものが、Superflyでさっくり実現できるようになったのは本当にありがたい。いや、本当はできたのかもしれないけど、少なくとも自分の手には負えなかったわけで……。それっぽくなった分レンダ時間はとんでもなく増えるけど、どんなシーンでもそこそこ耐えるシェーダを組んでおけば、シーンごとに調整する手間も省けるからメリットじゃないかなあ。設定変えてレンダする手間もかからないし、レタッチも楽になるし。ウチは明るい髪色のキャラが多いんで、なるべく使い回しが効くようにしたいなあ。

髪は正直、黒が一番楽だよね。

161023-5

自分本体より先に髪の調整を始められてしまったミフネ警部補(永年)。



Superflyがいろん・5

2016年10月21日(Fri)

いやー、どうも薬局で悪いものを貰ったらしくて、久々に寝込んでしまった。今年の風邪は熱に来るね。お腹にも来るらしいけどね。みんなも気をつけてね。気温も目茶苦茶だしね。

というわけで大事をとっていたので、前回から少し間が開いてしまったわけだけども。

では早速Superflyのレンダリング設定をざざっと確認してみよう。横着して画像を端折った部分もあるけど、そこはご容赦を。

161021-01

Superflyは設定項目が多くてなにやら複雑そうに見えるけども、実際にはそんなに難しくない。ざっくりと分類するとこんな感じだ。

161021-02

つまり大項目の中に、材質ごとに細分化された項目が含まれているから数が多く見えるんである。分類してしまえば、むしろFireflyより少ない。そしてここからわかるのは、Superflyのレンダリングはマテリアルと密接に関係している、ということだ。

Pixel Samples(ピクセルサンプル)

ピクセルサンプルはSuperflyがいろん・2で説明したように、1ピクセルを決定するために何回そのピクセルを計算するか、という回数を設定する。実際に計算される回数は設定の2乗なので、計算時間は指数関数的に増大する。というわけで図は再掲。

160928-07

そして本質的に、ザラっとノイズを軽減するにはピクセルサンプルを上げるしかない。つまりSuperflyではレンダリング品質=ピクセルサンプルである。しかしまた逆に言えば、ピクセルサンプルを上げて改善されるのはザラっとノイズだけである。なんかのっぺりしてるとか、妙に浮いてるとか、変に嘘っぽいとか、そういうのはいくら数値を増やしても改善されない。ライティングやマテリアル、あるいはポージングなどなどの問題である。まあそれはFireflyだって変わらないわけだけども。

Branched Path Tracing(分岐パストレーシング)

しかし実際のところ、ノイズの現れ方は原理的にマテリアルごとに異なる。そこでSuperflyでは、カメラから出発したレイがオブジェクトにぶつかって二次レイを飛ばすとき、衝突したオブジェクトの材質によって二次レイの本数を変化させることができる。

161021-03

レイが枝分かれするので分岐パストレーシングという。つまり1ピクセルを決定するためにピクセルサンプル3なら3×3=9回計算するわけだけども、その1回ごとに計算を2倍にしたり3倍にしたりできるわけだ。

分岐パストレーシングのチェックが入っていない状態で、こういうオブジェクトがあったとする。

161021-04(クリックで倍サイズ)

分岐パストレーシングのチェックを入れて、各材質ごとに回数を増やしてみよう。

161021-05

Diffuse Samples(拡散サンプル)は拡散反射を持つマテリアルの計算回数を設定する。立方体だけでなく床部分の品質も向上していることがわかる。ちなみにこれを0にすると二次反射光の計算をまったく行わなくなる。

161021-06

Glossy Sampels(光沢サンプル)は鏡面反射を持つマテリアルの計算回数を設定する。つまり反射像の品質に影響する部分である。

161021-07

Transmission Sampels(透過サンプル)は透明なマテリアルの計算回数を設定する。と言っても単純に透明度を上げただけのマテリアルには関係ない。向こう側のオブジェクトのマテリアルが透けて見えるだけだからだ。ここで設定されるのは、Trancelucent(透過)やRefraction(屈折)を適用されたマテリアルの計算回数である。

161021-08

Subsurface Samples(サブサーフェイスサンプル)SSSが適用されたマテリアルの計算回数を設定する。見ての通り散乱は拡散反射よりノイズが乗りやすい(というか拡散反射ほどノイズ軽減ができない)ので、SSSを持つマテリアルが主体の場合は高めに設定する必要があるだろう。

161021-09

Volume Samples(ボリュームサンプル)はボリューム(Volume)効果が適用されたマテリアルの計算回数を設定する。VolumeノードのScatter部分とCycles系のScatterVolumeノードの品質に影響する。SSSと同じく計算結果が収束しにくいのでノイズが乗りやすい。求める材質によってはがっつり上げる必要がある。

161021-10

Mesh Light Samples(メッシュライトサンプル)は発光が適用されたマテリアルの計算回数を設定する……んだと思うけど、そもそも発光体は二次反射光の影響もなくノイズも乗らないので変化がない。発光体に影響を受けるオブジェクトの品質かとも思ったけどそっちも変化しないし、だいたい拡散反射なら拡散サンプルに依存してるわけで……誰か、知ってたら教えて欲しい(笑)。

あと、飛ばしたけどAOサンプルという項目もある。これは二次反射光の品質ではなく、Cycles系のAOノードの品質を設定する。なのでほとんど触ることはないだろう。

分岐パストレーシングの利点は部分的に必要なだけ品質を上げることができる点である。材質ごとのバランスを調整してから最終レンダに入る、という使い方もできるし、マテリアル調整中に部分的にテストを繰り返すような時は、そのマテリアルに必要な品質だけ確保して他を下げ、速度を上げるという使い方もできる。

Samples all light direct(すべての直接光をサンプル)

Samples all light indirect(すべての間接光をサンプル)

Superflyがいろん・2で述べたように、パストレーシングでは計算結果を収束しやすくするために様々な手法が用いられている。その中で、カメラから出発するレイだけでなく、光源から出発したレイを合算する手法が双方向パストレーシングだ。Superflyもこれを採用しているので、直接光が当たる部分はノイズをぐっと減らすことができる。

しかしこれは通常、一つの光源だけを合算するので、光源が複数存在する場合二つ目以降の光源の影響は確率次第、ということになる。つまり逆にノイズが目立つ結果になる。

161021-11

Samples all light directにチェックを入れておくと、レイはオブジエクトに衝突した時点ですべての光源からの影響を計算する。Samples all light indirectにチェックを入れると、二次レイの計算について、すべての光源を考慮に入れるようになる。つまりゴールの数が増えるわけで、若干品質が向上する。

161021-12

基本的にこの二つはチェックを入れっぱなしでいいだろう。ただし、光源がいくつも存在するようなシーンだと、品質改善以上に時間がかかるケースがある。そういう場合はチェックを外し、ピクセルサンプルを増やした方がいい。

Filter Glossy(光沢フィルター)

Clamp direct samples(ダイレクトサンプルをクランプ)

Clamp indirect samples(インダイレクトサンプルをクランプ)

このへんはポツンと現れる明るい点状のノイズを軽減するオプション。光沢フィルタは金属などの鏡面反射の中に現れるノイズを軽減する。値が0の場合は何も行わず、0よりも大きい値を入れると明るすぎる点をぼかすようにフィルタリングする。値を大きくするほどフィルタも強力になるが、本来必要なハイライトの明るさは失われてしまう、かもしれない。

Clamp direct samples(直接光を抑制)とClamp indirect samples(間接光を抑制)も同じように、それぞれ直接ライトが当たる部分と二次反射光に照らされる部分のノイズを軽減する。値が0の場合は機能自体がオフになり、0よりも大きい値を入れるとその値を超えるピクセルを固定値にする。

161021-13

こんなシーンで試してみよう。

161021-14

たとえば設定が1なら、明るさが100%を超える計算結果が出たときにはその値を100%にする、という感じで数値が大きくなるほど上限が上がる。小さめの値を入れるとノイズは軽減できるが、本来明るくなる部分も暗くなってしまう。

基本は初期値のままで十分だが、コースティクスを描画するときなどはオフにしておかないと、十分な光量が得られないことがある。

Progressive Refinement(プログレッシブリファインメント)

直訳すると漸進的な洗練、段階的描画とでも訳せばいいのかな。要するに「じわじわと綺麗になっていく」レンダリングのことだ。このオプションがオフになっているとき、レンダリング画面は設定したバケツサイズごとに青い枠のブロックに区切られ、中心付近から描画を始める。青い枠のブロックはPCのスレッド数だけ存在し、水色になって計算を終了すると次のブロックの計算に移る。

161021-15

上の画像だとバケツサイズが64ピクセルで、レンダリングサイズが640x640ピクセルなのでちょうど100ブロックに分割されている。”Path Tracing Tile 32/100”は100ブロックのうち32ブロック目まで計算にかかってますよ、という意味だ。レンダリング終了までに必要な計算回数はこの場合ピクセルサンプル3なので、

Total Samples = 32 × 100 = 900

という感じ。で、このオプションをオンにすると、Superflyはレンダリング画面全体を1サンプルずつ計算して描画していく。

161021-16

ピクセルサンプルが3ならこのレンダリング画面が9回更新され、その度にちょっとずつノイズが減っていく。まあ実際には描画が追いつかなくて、毎回更新されるというわけではないみたいだけど。レンダリング終了までに必要な計算回数は

Total Samples = 100 × 32 = 900

なので変わらないし、レンダリング時間もそれほど違いはない。全体的な調子を見たいならオンで、中央付近の部分的な質を確かめたいならオフで、と使い分けることもできる。あと、ピクセルサンプルをガッツリ上げて長時間PCを放置するような場合はオンにしておくといい。時間が足りなくて中断した場合でも、そこそこの画質までは描画できているからだ。まあレンダリングを中断すると微妙に不安定になるから、あまりやりたくないけど。

Min Bounces(最小バウンス←最小反射回数)

Max Bounces(最大バウンス←最大反射回数)

これは二次レイがオブジェクトに衝突して反射する回数を指定する。最小反射回数までは確実に反射し、それを超えるとレイはロシアンルーレットでランダムに中断し始める。そして最大反射回数に到達すると強制的に中断する、という感じだ。最小反射回数は初期値のままでいいが、最大反射回数は以下の項目の設定よりも優先されるので気をつけよう。

Diffuse Bounces(拡散反射)

Glossy Bounces(光沢反射)

Transmission Bounces(透過反射)

ここでも材質ごとに設定値を変化させることができる。まず拡散反射、これは間接光の明るさにがっつり影響する。FireflyのIDLにおけるレイトレースバウンスに相当するもので、この反射回数が十分でないと、二次反射光がシーン全体に行き渡らなかったりする。思ったより間接光が効いてないな、と思ったらまず反射回数を上げてみよう。

光沢反射は鏡面反射の回数。合わせ鏡のように反射が繰り返されるシーンでは、ある程度上げておかないと途中で真っ暗になってしまうので注意。透過反射はガラスのような屈折のあるものを描画するときに重要で、容赦なく上げておかないと綺麗な描画ができないので注意だ。

Min Transparent Bounces(透明反射の最小数←最小透過回数)

Max Transparent Bounces(透明反射の最大数←最大透過回数)

これは透明なオブジェクトを何回まで通過するか、という値を設定する。透明なポリゴンが多数重なった形状、つまり木の葉や髪といったオブジェクトをレンダリングするときに重要だ。最大回数を超えるとなぜかアルファマップをそのまま描画してしまうので、髪の先に黒いフリンジが現れたりする。明るい色の髪などは特に注意が必要だ。最小回数を超えるとロシアンルーレットが始まってしまうので、ノイズを減らしたいなら最小回数も上げておいた方がいいだろう。

Volume Bonces(ボリュームバウンス←ボリューム反射)

散乱を伴うボリューム効果が適用されている場合に、そのボリュームの中で光が散乱する回数を設定する。霧やホコリの中のスポットライトなどは、この反射回数を上げておかないとイマイチ効果が現れないので注意。

Bucket Size(バケットサイズ)

Baguetteではなくバケツ。つまりレンダリング時に分割される1ブロックのサイズを定義する。お好みで。

Motion Blur(モーションブラー)

素早く動くものがブレる効果を描画する。設定方法はFireflyと同じ。ちゃんと影もブレてくれるのがありがたいね。

161021-17

Depth of Field(フィールドの深度←被写界深度)

被写界深度を描画する。設定方法はFireflyと以下略。

161021-18

Superflyはハイライトのボケが綺麗に描画でき、なおかつ細かい設定が可能だ。各カメラに新しく追加されたパラメータでは、ボケの縦横比、ハイライトを何角形にするか(0だと円になる)、あと何度傾けるかをそれぞれ設定できる。

161021-19

Refractive caustics(屈折コースティクス)

Reflective caustics(反射コースティクス)

それぞれガラスを通過した光、鏡を反射した光などを描画する。これらはライトからの経路を計算する必要があるので、パストレーシングでは通常は計算されない。品質を上げるためには、前述したノイズ軽減のオプションはなるべく使わず、ピクセルサンプルをとにかく上げる必要がある。レンダリング設定のプリセットを確認すれば、えぐい設定になっているのが見て取れるだろう。

161021-20

というわけで、Superflyのことを駆け足でさらってみたけど、ひとまずここで一区切り。まだまだ知らないこともわからないこともあるので、その都度ネタにできればいいかな、と思う。Superflyはまだまだ足りないところも怪しいところもあるし、苦手なシーンや苦手なマテリアルもあったりするけど、これまで出来なかったものが実現できたり楽になった部分ももちろんあるわけで。ちゃんと向き合って付き合えばそれなりに仲良くできるんじゃないかな……なんて、今のところ思っていたりする。



Superflyがいろん・4

2016年10月05日(Wed)

では、リクエストを頂いたので簡単なマテリアル設定の例を挙げていこう。繰り返しになるけども、あくまで「簡単な」例なので、絶対にこうするのが正しいというわけでもないし、調整は状況に応じて必要になると思うのでご容赦を。あと、ボリューム系のマテリアルやCyclesSurface系のノードを駆使するものは、またの機会に譲ることにする。

ではまず、Fireflyから大きく描画の変更になったノードをピックアップしてみよう。

161005-01

拡散反射系のノードは、Diffuse(拡散)以外はほとんど対応していないと考えた方がいいだろう。開発の中の人は「CyclesノードをSuperflyに対応させるのが優先だったから」みたいなことを言ってた気がするけど、まあ現実世界にトゥーンとかないから特に問題はないだろう。一応Cycles系のトゥーンやベルベットは使えるしね。

次にこれが一番のポイント、鏡面反射。

ポイントとしては、Fireflyではレイトレースを使う必要のあった写り込みが現れていること。それからエネルギーの保存則が守られているから、ハイライトサイズが大きくなる(=表面が荒くなる)ほど鏡面反射が暗くなること。ざっくり見た感じ異方性、フォン、光沢あたりはデフォルト値だと金属そのものな反射で、ブリンとKs microfacetはほぼ同じような特性、PoserSurfaceの鏡面はFireflyに似せてかなりハイライトサイズが大きく、PhysicalSurfaceの粗さで同じ値を入れると反射像は鮮明になる、という感じ。

また、SuperflyのハイライトはFireflyでは描画できなかったライトそのものの姿だ。なのでエリアライトはちゃんと四角く映る。各ライトの大きさを設定するのも大切だ。

そんなわけで、このへんのノードを使っているマテリアルは一度はチェックした方がいいだろう。面倒と言うなかれ、Fireflyと同じマテリアルがFireflyと同じようにレンダリングされるなら、それもうレンダラを新しくした意味がないじゃない。

さて。

それでは適当に例を挙げていこう。Poser 11には3つのルートノードがあるわけだけど、それぞれに利点や難点があるので、設定したい内容に応じて使い分けよう。

1. 金属

161005-03

金属物はPhysicalSurfaceを使うのが早い。Metallicを1にして、適当な色を乗せるだけでそれっぽく見える。材質ごとにちゃんとした数値を調べたいなら、「Physical Based Rendering」または「PBR」と「Materials」「sRGB」あたりの語句で検索すれば色々出てくると思う。

161005-04

金属に限らず反射の強いものをレンダリングする時は、映り込む背景をちゃんと用意しておくことが肝心だ。反射するものがないとそれっぽく見えないし、調整も難しくなる。

金属を研磨したときの縞模様、ヘアラインを表現したいときはPhysicalSurfaceでは難しいので、PoserSurfaceかCyclesSurfaceを使ってAnisotropicノードを接続する。

161005-05

ちなみにPhysicalSurfaceの鏡面はRGB値で指定するけど、基本は灰色か白でいい。金属に鏡面色は反映されないし、絶縁体の反射は基本的に白になる。サイズはちょうどいいのにハイライトがきついなー、と思ったら輝度を調整する程度でいいだろう。

2. 石・土・コンクリート・木など

161005-06

このへんの材質は案外高い反射率を持っているけど、粗さも大きいのでハイライトが目立つことはない。だいたい0.5~0.8付近で調節。ただし表面が加工されていると小さくなる。というわけで土団子っぽいのはこんな感じ。

161005-07

大理石など、皮下散乱の現れる材質はSSSを設定する。ここではPoserSurfaceとScatterノードを使用している。

161005-08

木材も同じく高めの反射率を持つ。表面の粗さは加工状態によって大きく異なる。これはエッジにぎりぎり反射が出てるかな、ぐらいを目指したもの。

161005-09

3. プラスチック・ゴムなど

161005-10

反射率はそんなに高くなくてもいいが、基本的にツルツルからスベスベぐらいの粗さに設定する。PhysicalSurfaceの粗さは0.1~0.4ぐらいかなあ。

161005-11

シリコンっぽい素材なら、SSSを適用するのもいいだろう。ここではPhysicalSurfaceを使用している。明るい色がたくさん透けた方がそれっぽいので、そんな感じで透過幅を設定している。

161005-12

4. 水・ガラスなど

161005-13

まず、ビニールや薄いガラスなど、屈折を考慮しないマテリアルはそのまま透明度を上げて粗さを小さくする。色をつけたい場合はこんな感じ。

161005-14

屈折を持つマテリアルはCycles系のGlassBsdfシェーダがおすすめだ。

161005-15

ほんとはボリュームシェーダを組み合わせたいけど割愛。ちなみにBsdfは双方向散乱分布関数というものの略で、拡散とか鏡面とか透過とか全部ひっくるめた特性を表す。なので末尾にBsdfがついているノードは、基本それだけで表面の設定はオッケーですよ、ということになる。まあ結局組み合わせたりするんだけど。

IORは屈折率だ。値は各自調べて欲しい。屈折率をRGB各色で変化させて足し合わせるとレンズ収差なんかも表現できる。

5. 布・革

161005-16

布の質感は結構ややこしくて、同じ設定でもバンプやノーマルマップの内容によって見え方が変わるので都度調整が必要になる。基本的に粗さは0.6~0.8ぐらい、サテンやシルクのような艶っぽい生地だと0.3~0.5ぐらいかなあ、という感じ。

右上のがこんなで、

161005-17

左下のはベルベットを混ぜている。

161005-18

右の革はこんな感じ。

161005-19

見本は結構大きいサイズなので、バンプはもう少し弱めにした方がいいかもしれない。

というわけで、一通りの材質をざっくりと設定してみた。結構いい加減なところもあるので、参考になるかどうかはわからないけれど。

え? 肝心の肌のマテリアルはどうしたって?

161005-20

ウチの、こんなだし。

161005-21

こんなだし。



Superflyがいろん・3

2016年10月01日(Sat)

さて、パストレーシングの手法はだいたいわかった。光の経路を懇切丁寧に計算する代わりに確率で端折るから、品質を上げたければ試行回数を増やしてね、というのが前回の内容だ。ではパストレーシングの手法を用いればそれで物理ベースとやらが達成できるのだろうか。残念ながら答えはNOだ。肝心の「光は物質に衝突した時、どの方向にどれだけどんな光を反射するのか」という部分、すなわちマテリアルが物理法則に基づいている必要がある。

というわけで再登場の図。

160925-09

この図で肝心なのは、入った以上の光が出てくることはない(発光体を除く)という、ごくまっとうな物理法則だ。CG界隈ではこれをエネルギーの保存則と呼んだりする。

入射光>(拡散+鏡面+レイトレース)反射+屈折+皮下散乱など

ところが、旧来のマテリアルではこの法則に平気で逆らうことができた。分かりやすいのが人体であるにもかかわらず環境成分に値が入っていたり、拡散値に1より大きい値が入っているマテリアルなどだ。

160930-01

こういう構成になるのは、もちろん「ある程度はリアルになる」からだ。旧来のレンダリングでは暗いところが現実以上に暗くなる。IDLで間接光が回りこむこともなかったし、SSSでにゅるっと広がることもなかった。何よりリニアなんちゃらが広まる前は、光の量そのものであるレンダリング結果を、人間の目の感じる世界だと誤解していたのだから。様々な制約の中でなんとか人の目の感じる世界に近づけようという、苦肉の策だったのだ。

しかし、そういう非現実的なマテリアル、よく言えば個性的で創意工夫に満ちたマテリアルは応用が利かない。真っ暗な中で人肌が光ったりするし、専用のライトセットでないと見栄えが悪かったりするし。

理想的なマテリアルとはなんだろう? 現実世界で測った値を設定すれば、現実の質感を再現するマテリアルだ。ではどのような値を測れば、現実の質感を表現できるだろうか。

様々なパラメータが取り上げられては検討されてきたが、現在主流なのは、以下の3つのパラメータを使う方法だ。

  • アルベド
  • 粗さ、もしくはなめらかさ
  • 反射率、もしくは金属であるか否か

説明の前に、旧来の反射成分について考えてみよう。

拡散反射と鏡面反射とレイトレース反射は、最初の図に示されるように、本質的には同じものだ。物質表面の凹凸によって方向が変わっただけで、反射であることは変わらない。だとしたら、それらを別々に設定して足し合わせる旧来のマテリアルは、考え方からして物理的ではない。実際、明るめの拡散反射色を持つマテリアルでは、ライトによっては色飛びを起こしたりする。加算によって入射光より強くなってしまったからだ。

160930-02

足して1以上にしないという考えはリアル指向の人々の間では一般的で、今までにも代替拡散に代替鏡面成分を合算するような試みは広く行われてきた。海外のマテリアルではこれを実施しているものも多く、ノードが複雑化する一因にもなっている。しかし、そこまでやっても現実的なスペキュラはなかなか実現できなかった。

160930-03

ではどうすれば解決できるだろう。マテリアルを従来の拡散反射と鏡面反射で考えるのではなく、色と凹凸という二つの要素で考えるのだ。

アルベドとは入射光に対する反射光の比を表す言葉だ。ある光が入ってきた時、どんな光をどれだけ反射するか。要するに物質の色である。ひらたく「色」「Color」と表現されることもある。Poser 11付属のSuperfly用マテリアルではAlbedoと表現している。

パストレーシングも従来のレンダラと同じく光の量(エネルギー)を計算している。従って、ここでいう「物質の色」とは、人間の目に映る色ではなく、目の歪みを取り去った各スペクトルの反射率で定義される色である。とはいうものの、Superflyでは色関係にガンマ補正をかけるので、具体的にはsRGBで見た目通りになるように指定すればいいんだけど。つまり今までの(カラー)テクスチャマップをほぼ流用できる。ただし、光沢や陰影を取り除いた、本当に色だけの情報を持つのっぺりとしたマップだ。

粗さとは物質表面の状態だ。バンプやノーマルマップでは表現しきれない、ツルツルかザラザラかというところを定義する。完全にツルツルなら0、完全にザラザラなら1。レンダラによっては1と0が逆になってるものもあり、その場合は粗さではなく滑らかさというパラメータになる。

160930-04

アルベドと粗さのパラメータによって、これまで拡散反射と鏡面反射、レイトレース反射に分かれていた成分を統一的に表現することができる。たとえば石炭の反射率はsRGBにして4%程度だと言われている。

160930-05

表面の状態によって、同じ反射率を持つ物質でも反射の表れ方が大きく異なる。アルベドと粗さのパラメータは、これをうまく表すことができる。というか、表せるようにシェーダが組まれている。

金属であるかどうか、というのはこれまでにないパラメータかもしれない。実は、金属は非金属にはない特徴を持っている。金属光沢だ。これは自由電子を持つ誘導体特有の特徴なんである。金属は非金属に比べて圧倒的に反射率が高く、さらに反射光は自分自身の色となる。

160930-06

金属であるかどうかは、だいたいメタリックというパラメータ名で定義されている。非金属は0、金属は1で表し、不純物が混入したりや異物が付着すると中間の値を取る。表面に不透明な塗料が塗られたものは金属光沢を持たない。逆に、お菓子の包装紙やアルミ箔などは金属光沢を持つ。

160930-07

さて。

発光体や透過体、皮下散乱や体積などはまた別の専用シェーダを使う。しかし、大半の物質はこのアルベド・粗さ・メタリックの3種類で表現することができる。そしてこれらは従来のマテリアルよりもずっと現実的で、直感的だ。金属かどうかは考えればわかるし、粗さや色だってだいたい想像できる。もちろん何かの資料をあたったっていい。なにより、適切に設定さえすれば、誰がどんなライティングでレンダリングしたって同じような質感に見える。黄金を設定したいならsRGB (255, 225, 150)ぐらいの色でメタリック1、粗さはお好みで、というわけである。

160930-08

しかしまた当然の帰結として、物理ベースでは旧来のマテリアルは使えなくなったわけである。Poserはこのへん頑張っていて、旧来の拡散/鏡面反射設定でもそれなりに似通った見た目をある程度再現してくれている。しかしあまりにも複雑だったり、イレギュラーな計算をさせる設定はさすがにフォローしきれないし、役割を終えたシェーダのいくつかは別物として再利用されている。物理ベースの恩恵を受けるためには、それらを物理ベース的な考え方で見直さなくてはならないだろう。

っていうわけで、次はレンダ設定と簡単なマテリアル設定、どっちがいいかな?(人まかせ)





Menu

Profile

Kyotaro

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

Categories

Calendar

09 | 2016/10 | 11
- - - - - - 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非推奨。