background

そういえばいつの間にか、ポーズルームでもマテリアルファイルやマテリアルコレクションファイルを適用できるようになった。とはいえマテリアルルーム以外だと、マテリアルファイルを適用した時にはダイアログが表示される。マテリアルファイルは現在選択されているマテリアルグループに対して材質を適用するファイルだけど、マテリアルルーム以外ではどのグループに適用したらいいかわからないからだ。

170214-1

大半のジオメトリは通常マテリアルグループを持っている。このグループというのは、ポリゴン一枚一枚についてのグループ分けで、フィギュアのパーツを決定するために使用されるポリゴングループとはまた別のカテゴリとなる。マテリアルグループを一つも持っていないようなジオメトリでも、Poserで読み込んだ時に自動的にプレビューというマテリアルグループが作成され、すべてのポリゴンがプレビューのグループに割り当てられる。たとえば、基本小道具なんかはマテリアルグループを持たないジオメトリだ。

ジオメトリのマテリアルグループと、フィギュアファイルや小道具ファイルで定義されているマテリアルが一致するとき、そのグループに属するポリゴンは定義された設定で描画される。なぜこんな回りくどい言い方をするのかというと、ジオメトリが持たない=実際には存在しないマテリアルグループでも、フィギュアや小道具は保持することができるからだ。

よく遭遇するのがV4リリース初期に作られたMATポーズファイルを適用した時。ポーズファイルはほぼノーチェックでフィギュアの情報を書き換えてしまう。ジオメトリが持つマテリアルグループと微妙に異なる名前のMATがあったりなんかして、いろいろ適用しているといつの間にかリストにNostrilとNostrilsが並んでたり、EyeTearとTearが並んでたりする。

170214-2

マテリアルコレクションファイルを使用した場合、適用先のジオメトリを予めチェックしてくれる。適用先に存在しないマテリアルグループを定義していると、その存在しないグループを無視するか追加するか尋ねてくるのだ。

170214-3

追加した場合、マテリアルグループのリストに新しいグループが増える。もちろん、どのポリゴンも所属していない空のグループなので、レンダリングしても描画には影響がない。ただフィギュアや小道具の記述がちょっと増えて、テクスチャなんかが余分に読み込まれたりするかもしれない、というだけだ。

例えば、マテリアルグループAとBとCを持つ小道具をロードしてそれぞれのマテリアルを調整、A’とB’とC’になったとしよう。これをマテリアルコレクションファイルとしてすべて登録する。次に、マテリアルグループBとCとDを持つ小道具にこのファイルを適用すると、「はい」と選んだ場合はマテリアルグループが作成され、(A’)とB’とC’とDというマテリアルを持つ小道具になる。「いいえ」を選ぶとB’とC’とDを持つ小道具になる。

そんな感じで、例えば基本小道具に色々と調整したマテリアルコレクションファイルを次々に適用していくと、最終的に全部入りのマテリアルグループができる。

170214-4

これをマテリアルコレクションファイルとして登録すれば、マテリアルグループAからFまで様々なグループを持つ小道具に適用できる、全部入りのマテリアルコレクションファイルが出来上がるわけだ。適用する時には「いいえ」を選ぶ。リストが無駄に長くなっても構わないならどっちでもいいけど。

170214-5

もちろん、この手段が使えるのは「同名のマテリアルは同一のマテリアル設定である」という前提が成立する時だけだ。同じMetalという名前でAという小道具は鉄、Bという小道具は銅、Cはテクスチャが貼られている、なんて場合には使えない。けれど、最近の入り組んだアイテムを作成される手慣れたベンダーさんは、ある程度マテリアル名が共通化されてたりなんかする。そう、Stonemasonさんとか。

そんなわけで出来上がったロンドンの全部入りSuperfly用マテリアルがこちら。

KYO's Superfly materials for The Streets Of Old London

カメラに映る範囲の小道具に適用しては「いいえ」を選ぶと、該当するマテリアルだけ変更されるコレクションファイル。と、あとライトとかちょっと。Fireflyはぶっちゃけ繋いだだけでテストレンダもしてないので、適当に調整してください。というかSuperflyの方もかなり適当な設定なのでいい按配にしてください。

そんな適当な設定でも、キレイにレンダしてくれるSuperflyっていいよね、みたいな。

170214-6


続・Superflyで大気効果。

2016年12月18日(Sun)

前回の続き。せっかくだから、反射物のあるシーンでもなんちゃって大気効果を使えるようにする。まずは適当にシーンを作ってレンダリング比較。

161218-01

さすがに水面のマテリアルはそのままだと厳しいね。

Superfly(というか元々のCyclesレンダラ)の残念な点として、ディスプレイスメントを頂点単位でしかかけられないという制約が挙げられる。メッシュの粗い板ポリゴンに解像度の高いテクスチャを適用しても、ざっくりカクカクとした形状にしかならない。サブディビジョンをかければ多少は細かくなるものの、マシンパワー的に限度がある。ポリゴンをシェーディングレート単位でマイクロポリゴンに分割して変位をかけるという、Fireflyは結構優秀だったのだ。

まあ、ないものは仕方ないので、ここは素直にノーマルマップにでもしてしまおう。

161218-02

さくっとノードを足して、高さの情報を引っ張ってくる。こういう時、ルートノードを複数持てるのがいいよね。

161218-03

強度にいい加減な値を入れたままだから揺らぎ具合が合ってないけど、まあぐっと水面っぽくなったかな。そんなわけで前回作った大気レイヤーを近景と遠景のマテリアルに追加する。

161218-04

反射像を見やすくするために、一旦ノーマルマップを切断している。水面に反射している遠景の山が見た目よりハッキリ映ってしまっているのがわかる。

では、その条件分岐を行っている部分にノードをちょこっと足す。

161218-05

全体のノードの配置を変えちゃったからわかりにくいけど、実際に繋ぎ直したのはこの部分。

161218-06

今まで端折ってたのでざっくり書くと、LightPathノードは今計算しているレイについての情報を取得するノードだ。例えばIs Camera Rayなら、今計算しているレイがカメラから発せられたレイであれば1を出力し、そうでなければ0を出力する。つまりカメラに直接映っている時だけ1となる。反射像や屈折、間接光の計算をしている時は0になる。Is Reflection Rayなら、反射像の計算をしている時だけ1になる。これを数値演算ノードで他のノードと掛け合わせると、カメラに直接映るっている時だけあるマテリアルを適用し、それ以外の時は0のまま、というような計算ができるわけだ。

細かい説明はたぶん「Blender Cycles LightPath」あたりで検索すると見つかると思う。

数値演算ノードのMaxは、値1と値2に接続された値を比較して、どちらか高い方の値を採用する。1と0の組み合わせなら、どちらかもしくは両方が1の時1を出力し、両方とも0の時だけ0を出力する。つまり論理演算でいうAND回路の計算をするわけだ。一度に3つ以上の値を比較することはできないから、そういう時はノードを階段状に組み合わせる。これで「カメラに直接写っている時、または反射時か屈折率を持つ透過体の計算をしている時」だけ、効果を適用することができる。

なんでこんな手間をかけて条件分岐をつけるのかというと、二次反射光の計算など、大気の散乱の影響を受けてはいけないような時まで距離の計算を行うのを防ぐためだ。

161218-07

というわけでレンダリング。水面に映った反射像にも効果が適用されていることがわかる。

161218-08

水面のノーマルマップを再接続してこんな感じ。とりあえず満足。



Superflyで大気効果。

2016年12月16日(Fri)

DAZから「RuntimeDNA移籍アイテムの一部がタダになるクーポンをあげるよ」というメールが何度か来たので、結局買わずに済ませようと思っていたTerraDome2を貰ってしまった。ついでに「15日で店じまいだよ」という本家RuntimeDNAでも関連製品をちょろっと買う。っていうか、いつの間にかストア閉鎖みたいなことになっていたのね。未だにそのあたりの時期のメールが発掘できてないので……いい加減なんとかしないと(汗)。

161216-01

そんなわけでインストールして動作確認。スクリプト系のアイテムもちゃんと動いたので一安心。

Skydomeが全天対応じゃない……というか均等なUV展開じゃなかったのが気になったけど、パノラマHDRも貼れないことはなかったので良しとしておこう。気が向いたらジオメトリを自作して差し替えるかもしれない。Skydomeはモーフいらないし。

で、マテリアルファイルにAtmosphereがあるのを見て、「そういやSuperflyは大気ノードの描画に対応していないんだっけ」と思い出した。

でも、SuperflyはVolumeレンダリングに対応してるから、要らないと言えば要らないんだよね。

161216-02

つまりこういうこと。大気の役割を持つ適当なオブジェクトを配置して、Volumeノードを接続すればいい。この場合なら箱の水平方向の大きさは1000倍(10万%)、高さはお好みで。

161216-03

適用したマテリアル。これなら見た目で高さを調整できるし、要らないときは小道具を非表示にすればいいし、デフォルト画質ならレンダも結構早いから調整も楽だし、大気ノードで色々調整するよりは手軽なんじゃないかな。

161216-04

で、晴れた空のMATを適用してちょっと気になった。大気やVolumeノードを使うと、Skydomeの部分にまで霞がかかってしまう。霧や靄、大気中のチリで霞むような効果なら構わないんだけど、晴れた日に遠くが青く霞むような効果をつけたい時には、これでは少し困る。

空の青さは太陽光が大気中で散乱した結果、より短い波長の光の方がより多く散乱するために、ああいう色に見えているはずである。大気の薄い高山では、地表にたどり着くまでに太陽光が十分に散乱しないので、天頂の色は藍色に近い。逆に海抜の低いところ、あるいは水平方向に近い空は、大気の層も厚くなって波長の長い光も十分に散乱するので白っぽい。散乱してその色に見えているのに、そこにさらに色を重ねてしまうと、大気の距離による散乱効果を二重にかけたことになってしまう。

解決方法は二つある。一つはSkydomeを非表示にして背景で空の色を表示させることだ。大気の効果は背景には描画されない。しかし、オブジェクトとして存在していないということは、今度は水面の反射や天空光にも反映されなくなってしまう。背景ノードにパノラマ画像を接続する方法もあるんだけど、ちょっとめんどくさい。

というわけでもう一つの方法。近景と遠景のマテリアルそのものに、大気効果を描画する。

以前、カメラからの距離に応じて変化する散乱光の計算式を立てた。今回はそれを流用してシェーダを組み立てることにする。

161216-05

まずは近景や遠景のマテリアルを選択して、レイヤーを追加する。

161216-06

こんな感じのシェーダを組んで、(クリックででかサイズ)

161216-07

こんな感じに接続する。

霞の色をした環境光成分を元のマテリアルの上に重ねておき、距離が大きくなるほど透明度を下げて表示するのだ。レイヤーだから下のテクスチャには影響しない。また、Fireflyでは(今のところ)レイヤーを描画できないので、そのままでも大気ノードを描画できないSuperflyと共存できる。

で、大気効果のレイヤーのノードをまるっと選択したら、

161216-08

選択した部分のノードだけをライブラリに保存する。

別のマテリアルに適用するときは、目的のマテリアルにレイヤーを追加して、追加したレイヤーのルートノードを選択。入れ替えでマテリアルを適用すると、下層のレイヤーには影響を与えずにノードを追加することができる。

161216-09

この方法のメリットは、マテリアルごとに適用やパラメータを選択できること。デメリットはマテリアルごとに適用したりパラメータを選択しなければいけないこと(笑)。遠景にアイテムを多数配置するようになると大変かもしれない。あと、今の構成だと直接カメラに映る部分しか効果を重ねていないので、例えば鏡やガラスを通して見た景色には反映されない。そのへんは条件分岐をもうちょっと煮詰める必要があるかな。

161216-10

まあ、即席にしては悪くないんじゃないかな。



ニットらしきマテリアル。

2016年12月11日(Sun)

レンダロでニット生地のテクスチャをフリー配布していたので、なんとなく落としてきた。

Prime Knits by Atenais Design (Renderosity)
https://www.renderosity.com/mod/freestuff/prime-knits/76760?AID=5124

開いてみたらシームレスでいい感じだったので、年賀状作りの逃避……もとい、手慰みにニットのマテリアルを組んでみた。以前作ったDCセーターに当てて、こんな感じ。

161211-1

いい加減なUV展開をしていたのがバレバレである(笑)。袖もマテリアル切ってなかったし……。ちなみにこのアイテム、テクスチャだけでなくマテリアルファイルも付属しているので、そのまま適用するだけでもちゃんと使える。元はこんな感じ。

161211-2

うん、あんまり変わってないように見えると言われれば、その通りかもしれない。

反射というのは入射光が反射面に平行になるほど、つまり斜めになるほど強くなる。いわゆるフレネル反射というやつである。SuperflyはPhysicalSurfaceノードならごく普通にフレネル反射を計算してくれる。

161211-3

とはいうものの、他のルートノードを使ったり、意図的にその効果を強調したい場合には、エッジブレンドや新しく追加されたフレネルブレンドを使うことになる。境界に近づくほど全反射に近くなるので、外側が白、内側が本来の色だ。

と、いうようなことを考えながら無計画に繋いでいったツリーがこちら。(クリックで倍)

161211-4

まあ正直、無駄もあるような、効率も悪いような……まあいいや。

ある程度汎用性を持たせたかったので、色を指定する部分を右側のシンプルカラーに分離して、網目の陰影をつけたり薄めたりみたいな小細工をしている。あと、シームレステクスチャを適用するときその繰り返し回数をいちいち計算してイメージマップノードに入力するのが面倒なので、数値演算ノードで指定するようにしてある。Poser 11の付属マテリアルでもやってる手法だ。

161211-5

パターンを5回繰り返すのでスケールは0.2、みたいな意味。

それから、バンプよりもエッジの効いた陰影をつけたかったので、グレースケールのテクスチャからバンプに繋がずにCycles>Vector>Bumpノードを使ってノーマルマップに変換している。ただしあまり強く変位をかけてしまうと陰影の現れ方が狂ってしまうので、レンダしながら値を調整。

161211-6

で、カラーバリエーションの生レンダ。

161211-7

なんかユニクロみたいだ。まあ、これで一冬越せると思えばいいか。



マップいろいろ。

2016年11月29日(Tue)

ここのところ、なかなかまとまった時間が取れないので手持ちのアイテムのテクスチャをいじって遊んでいる。今年の秋メイクは赤とダークブラウンで太眉が流行ですよ、とか見かけて「へーそうなんか」と思ったり。

161129-01

眉は描かないから勝手がわからないんだよなー。っていうか、それを言うならそもそもお化粧自体そんなにしないので、何もかもわかってない気がする。いやお恥ずかしい。

というわけで、使うフィギュアは最早顧みられることもないであろう初代Miki。

161129-02

ホントになんでこうなったんだろうって……まあいいや。

161129-03

モンゴロイド的なまぶたの構造とか、やわらかい口角とか自然なモーフとか、ようやくじぇねしすさんになって追い付いて来たかな?っていうレベルで突き抜けてたよなー。後のバージョンで長所を活かせないどころかスポイルしちゃったっぽいのがなんとも悲しい。

それはさておき、初代のいいところはクオリティの高いテクスチャとバンプとスペキュラマップが付属しつつ、かつテクスチャに余計なものが書かれていないところ。つまり物理ベースレンダリングで言うアルベドマップにそのまま転用できるというわけで。

161129-04

その上にPhotoshopでメイク的なアプローチでレイヤーを重ねてみた。

161129-05

うん、なるほどわからん。

じゃなくて……日本人にとってのメイクの半分は、嘘の立体感を盛っていくという一種のトリックアートのようなもので、それはまあなんとかできるんだけども。なんかイマイチ、いや今三ぐらい古臭い感じ。本格的にやるなら適当な資料が必要かな。やる気はないんだけど。

Mikiが出たころのPoser界には物理ベースのPの字もなかったので、スペキュラ成分は全部スペキュラマップが制御していた。そこでスペキュラ成分と粗さ成分を別のマップに起こしてみる。

161129-06

まずはSSSもなんも接続していない状態。拡散色はグレー50%、鏡面反射は白100%。

161129-07

そこに付属のバンプマップを適用。SSSを適用すると効きが弱く見えるので、値は1mmぐらいに設定しておく。

161129-08

鏡面反射成分の計算にはSubsurface Skinノードを使うことにする。で、HighlightSizeに粗さマップを接続したところ。

Subsurface Skinノードを接続するとSSSの計算をしてしまうので、効果が出ないように色を黒にしておく。使用する粗さマップはスペキュラマップを反転して、唇付近が0.1、首のあたりが0.3、他はだいたい0.2~0.3になるように色調補正。ここで数値をきちんと合わせておくと、ノードのHighlight sizeの値は1にするだけで済む。光沢の表れ方に違いが出てくる。

ちなみにお化粧は普通、肌のテカリを抑えるためにファンデーションを塗るので、化粧をしているときの肌の粗さは高くなる。逆に唇はツヤツヤさせるので低くなる。すっぴんの時は、肌は場所によってテカるし唇はプルプルではなくサラサラになる。なのでNudeマテリアルを作るなら、粗さマップは2種類用意するといいかもしれない。

161129-09

元のスペキュラマップを使って毛髪部分を0、肌部分を0.5付近に色調補正する。Specularityの値は実際にレンダリングしながら数値演算ノードを挟んだりして調整する。とりあえず今はこのまま。

161129-10

色を足す。肌の色によって鏡面反射が強すぎたり弱かったりするので、そのへんを調整する。

161129-11

SSSを適用したところ。Subsurface SkinノードやScatterノードは散乱色固定で、Subsurface Skinノードは散乱距離も固定なので設定するのはここまで。時間があれば散乱マップや散乱距離マップも作ってCustom Scatterノードを使ってみたいものだけど、まあそれをやるならAさんでやるよね。

鏡面反射やバンプを調整するときは、面倒でもカラーテクスチャを外して黒もしくは灰色一色で調整するのがお勧めだ。個別に調整した方が「どこを改善すればいいのか」がよくわかる。

自分に足りないのは……若い感覚、かな(遠い目)。





Menu

Profile

Kyotaro

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

Categories

Calendar

10 | 2023/11 | 12
- - - 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非推奨。