2007年05月

2007年05月31日

バンプマップのベイクについて modo 203

昨日xsymmetry.pyを使ってて、仕様に大変な欠点を見つけた。あのスクリプトは左右のポリゴンにひとつも対象なポリゴンが無いと機能しない。今のところ対称化ツールでポリゴン1枚だけでも対称にしてから使ってくれ。そのうち直すね。

さて、前回はベイクについて書いたけど、あれからバンプマップについて調べてみた結果について書いてみる。

結論から言うと、複数のレイヤにまたがったバンプマップを同じ形で1つの画像にまとめるのは不可能ではないがちょっと無理があるようだ。というのもバンプレイヤの合成は見かけ上、飽和無しの合計になって行くようなのだ。以下の画像を見て欲しい。

セルラーこれはセルラーシェーダーをバンプで適用したものだ。

グリッドそしてこれはグリッドシェーダーをバンプで適用したもの。

ミックス

それらを単純に2つ並べただけのもの。ブレンドモードは標準だが、互いに打ち消すこともなく、2つのパターンが全て表示されている。もし、これが乗算とかならセルラーやグリッドの黒い部分で相手のパターンが消えるはずだし、加算なら溝が浅くなったりするはずだけど、そういう事は無く、2つのパターンともそれぞれ単独のバンプの時と同じ深さのバンプになっている。そこから得られる結論は、先に書いた通り、見かけ上、飽和無く加算されると言うことだ(100%のところと100%のところが加算されると200%になる)。このことから0〜100%までしか無い画像マップで0〜200%になる2つのバンプの合成は無理って事になる。もしかしてHDRならと思ってやってみたけどダメだった。そんなわけでベイクがノーマルマップになっているのもなんとなく納得できる気がしてきた。ノーマルマップになってれば、段差が面の傾斜として記録されるだけだから、何重になっていても関係ないわけだ。
ちなみにノーマルマップはポリゴン表面の法線ベクトルを色に変換した画像で、ハイレゾなメッシュでノーマルマップを作ってそれをローレゾのメッシュに割り当てると、メッシュデータは軽くいけど、ディテールはハイレゾっぽい感じになるモデルが作れるという手法だ。

バンプマップをそのままベイクした場合これはセルラーシェーダーで球体表面にバンプを施してそれをベイクしたものだ。バンプによって生じた勾配部分が面方向にあわせて色付けされた法線マップの画像が得られる。しかしバンプで生じた勾配以外の部分は黒い。



そのままバンプとしてレンダリングした場合験しにこれをそのままバンプマップとしてレンダリングするとこうなる。一番上のセルラーでバンプマップをしてレンダリングした例と比較してもらうとよく分かるが、マップ上で絵として現れているバンプのエッジ部分だけが盛り上がってしまって、変な映像だ。

法線マップに変えた場合これを法線マップにしてレンダリングしたもの。これもバンプのエッジだった部分については陰影が出ているが、マップで黒い部分が法線が無いせいなのか、うまくいっていない。

ここまで来ると、何かすっぽり知識が抜け落ちているために、間違った認識をしている気がして来たが、ここまでやったので、原因になっているノーマルマップの黒い部分を補完してみる事にした。

以下、法線マップについて認識が足りないためにワールド法線を使ってしまい、おかしな結果を招いてしまいました。ジェーダーの法線マップは相対法線を想定しているのに対してワールド法線をマッピングしたために、球面上法線が倍の回転をしてしまい、ディフューズで明るく出るはずの部分が通常の半分の面積に縮まってしまったようです。詳しくは明日書きます。以下の記事は同じ過ちを犯す人が出ないようにとりあえず残しておきます。

バンプ無しのノーマルマップまずはレンダープロパティの出力カラーをシェーダーツリーからワールド法線に切り替えてベイク画像を得た。左の画像がそれで、球体表面の法線にあわせて色が変化している。これにバンプで得られた画像をPhotoShopで合成したのが次の画像だ。



PhotoShopで合成したもの合成の方法は、球のワールド法線マップをベースに、バンプマップをベイクしたマップを彩度を下げてグレーにし、明暗反転してワールド法線マップに乗算し、その画像にバンプマップをベイクした画像をスクリーンで合成した。その結果がこのが左の画像だ。


 

PhotoShopで合成した法線マップでレンダリングしたものこれを法線マップとしてレンダリングしたのがこれだ。まあまあ再現されているのではないだろうか。ちなみに凹凸をバンプのかわりにディスプレースメントマップを使うとワールド法線レンダーで凹凸がベイクできる。これで得られた法線マップを使ってレンダリングした結果が次の画像だ。

ディスプレイスからノーマルマップを作ったものベイクしたいならバンプをやめて素直にディスプレイスメントマップを使った方がいいのかな?。

LightWave3DのノードエディタついでにこのノーマルマップをLightWaveに持ち込むには9から導入されたノードエディタを使ってこんな設定にしてやればいいようだ。

LightWave3Dでのレンダリング結果これがLightWaveでのレンダリング結果。

それでもバンプでなんとかしたいって場合についてはまた次の回にやってみたいと思う。何か自分が間違ってる感強いんだけど、マニュアル読んでもノーマルマップは滑らかに繋がっているか確認する時に便利って書いてあるだけなんだよね・・・。 

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ

modo操作メモ



take_z_ultima at 12:45|この記事のURLComments(4)TrackBack(0)modo | CG

2007年05月30日

ザ○の肩装甲やってみた その8 modo 203

あ〜メモリ2Gにしただけでこんなに違うもんかなぁ。昨日思い切ってメモリを1Gから2Gに交換したら、マイノートはひと皮剥けたようにサクサク動くようになった。もちろんmodoの立ち上がりも早い早い。メモリーは安い時に買わないとね。

さてさて、かなりやっつけな感じで肩装甲を作ってきたが、ペイントしてみたらUVマップが詰まり過ぎて解像度が足りなかったり、必要も無いのに裏側のマップが占める面積が無用に大きかったり、ホーンのマップが同心円だから先端部分がどうしても詰まっちゃったり、いろいろ大変な事があったはずだ。うまく行かなかったらUVマップを作り直して最初からテクスチャを描きなおせばいいわけだけど、殆どの部分はそのままでいいのに、ちょっとUVマップを変形したりするだけでテクスチャを全部描きなおしなんて時間の無駄だよね。
また、作ったものを他のアプリでアニメにしたいとかって時にプロシージャルテクスチャを使っていたら、他のアプリとプロシージャルテクスチャに互換があるわけもないので、持って行きようが無いよね。
そんなモロモロの欲求を解決してくれるのがベイク機能だ。

modoには大きく分けて2種類のベイク機能があって、レンダリング結果を選択UVマップに沿って展開したレンダリング画像を得るものと、PhotoShopの「画像を統合」のように、エフェクトの種類ごとにシェーダーを合成して1つのマップにまとめてくれるものがある。

前者はレンダリング結果をモデルに焼き込む事でレンダリングを簡略化させ、速度重視のリアルタイム性の求められるようなモデルが欲しいような場合に重宝する。

後者は複雑になったシェーダーを整理したりプロシージャルテクスチャの出力結果をイメージマップに描き出すことでプロシージャルマップを普通のイメージマップに置き換えさせたり、複数のUVマップに渡って描かれたイメージマップを1つのイメージマップにまとめたり、あるUVマップによって貼り付けられたイメージマップをレンダリング結果に影響を与えない形で他のUVマップ用に編成しなおしたりできる。

もちろん今回は後者の方の話だ。
さて、まずはカラーイメージマップの方なんだけど、ホーンの部分があのままのUVじゃどうにも上手く塗れないわけで、同心円のUVはやめて、開いちゃったて、もっと大きな面積を割り当てた方が良さそうだ。そして、カバーの裏側は殆ど見えないし、UVマップであんなに大きな面積を割り当てているのはムダだ。そこでこの反省のもとに下図のような新しいUVマップを作った。あとはこのマップにあわせて今までブラシで描いてきた画像を変換すれば、修正の手間が少なくて済むわけだ。

手順17そこでベイクを使う。使い方はシンプルで、まずベイク用のブランク画像レイヤを用意する。変換された画像はこのレイヤに描きこまれる。
用意したブランク画像レイヤを変換対象のレイヤより上に配置し、ブランク画像レイヤのエフェクトを変換対象のレイヤにあわせる。
ブランク画像レイヤより下のレイヤで、変換対象となるレイヤ以外で同じエフェクトを含むレイヤをすべて非表示にする。これを忘れると、合成された画像としてベイクされる。複数のレイヤを1枚にまとめたい時はそのままベイクすればいい。ブランク画像より下で同じ種類のエフェクトのレイヤが全部合成されてベイクされる。
あとはブランク画像レイヤを右クリックしてメニューからベイクを選択すれば、変換画像が生成される。
もちろん変換というフィルターがかかる訳だから元画像より画質が落ちることは覚悟しなきゃならない。それを差し引いて考えてみてもメリットの方が遥かに大きいと思うけどね。左のGIFアニメでは1枚の画像を単純に変換しただけだけど、複数の画像を合成した結果をベイク出来るわけだから、増えちゃった画像レイヤをまとめるのにも使えるし、複数のUVマップにまたがって施されたテクスチャを1枚にまとめる事も出来る。いずれもベイクされるブランクレイヤが配置された場所までにそのメッシュに対して施されたシェーダーの合成がそのままブランクレイヤのUVマップで配置されて出力されるだけなので、やり方は全部上記と同じだ。もちろんその中にはプロシージャルテクスチャも含まれる訳だから、プロシージャルの結果を画像としてベイクしてしまえば、他のソフトに持って行っても同様の効果が得られるわけだ。

今回はディフューズカラーのレイヤーについてのベイクをしたけど、スペキュラーやディフューズ量、ルミナンスなども同様にベイク可能だ。ただしバンプについてはこのままではうまく行かない。これについてはもうちょっと調べてみたいと思う。

ちなみにもうひとつのベイクはレンダーメニューの中にあるよ。こっちのベイクはUVマップだけ選んでおけば、ブランク画像は必要ない。

続きはまた次回。 

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ

modo操作メモ



take_z_ultima at 12:15|この記事のURLComments(5)TrackBack(0)modo | CG

2007年05月29日

ザ○の肩装甲やってみた その7 modo 203

昨日の作例で、ちょっと無理な設定があった。何が悪かったかと言うと、同じパターンでマスクとバンプを同時に適用した事だ。塗装が剥れたような段差を表現するのにバンプを使おうと思ったわけだけど、その段差が現れるのはペイントしたパターンの境界で、それをマスクでくり抜いてしまうと、バンプ境界とマスク境界の食い合いで、どちらが優先されるかみたいな問題になって、とても不安定な結果を産んでしまったわけだ。これがディスプレイスマップなら現実に凸凹が出来るわけだからマスク内側がディスプレイスによって窪めば縁がマスクの内側に入っていようがいまいがお構いなく段差が現れるのだがバンプマップはあくまでらしく見せるものなのでダメだったみたいだな。
そこで考えたのが、全ての処理が終わって段差は付いていないけど他は完璧な絵を作っておいて最後にバンプマップを適用して塗装が剥げたところを窪ませようという発想だ。シェーダーツリーはTakumiさんのブログの解説によると、下から読むんだそうだ。

シェーダーツリー

これは修正後の今回のテクスチャのシェーダーツリーだけど、最初は基本マテリアルから出発して、次にマテリアル(1)で全ての属性が置き換わり、cover_colorでディフューズカラーのみ置き換わるといった具合に、上に行くたび出てくるもので、従来のものを置き換えたり、ブレンドモードで合成したりしながらパラメータを変化させて上に進んでいく感じだ。そして最後に基本シェーダーに入ってレンダリングされるらしい。
だから今回の場合、塗装の段差は全部の合成が終わった後、一番上に持ってくることで他のレイヤに影響されること無く適用するようにしたわけだ。

作成したシーンファイルとイメージファイルをアップしておいたので、変更したシェーダーツリーの設定を確認して欲しい。

group

それから、触れるのを忘れてたんだけど、グループのプロパティには左図のような設定があって、適用する範囲を絞り込めるようになっている。マテリアルを作ってポリゴンに設定した場合に生成されるグループは左のように、全てのアイテムのポリゴンタブタイプMaterialがCoverのものといった感じで絞り込まれる。前回サビのテクスチャのところで作ったグループはこの設定を全然していないので、ポリゴンタイプが「全て」になったままなんだけど、外側のグループの絞込みのお陰でこのままでも他のマテリアルには影響が出ないようだ。

レンダリング結果そしてレンダリング結果がこれ。塗装が剥離して下からサビが出ているところで段差が出来た。さらにカラーマップも塗装を加えて、よりくたびれた感じにしてみた。これだけ錆びてたら普通は廃棄処分だろうねwww。
ところで、シェーダーツリーを組んでからカラーマップを塗ろうとしたら「選択したテクスチャがペイントブラシを持ち、マテリアルによって上書きされていないことを確認してください。」というエラーが出てそのままでは塗れなかった。要するに塗ろうとしているテクスチャが後から作ったサビのテクスチャグループで上書きされているからダメだと言う事らしい。そこでグループレイヤの目のマークのアイコンのみクリックして非表示にしたら塗ることが出来た。

ところで、バンプマップなんだけど、どうも他のレイヤの合成とは異なる挙動をするようだ。
自分が調べた限りでは常にブレンドされていくようで、マスクによって該当するレイヤの影響範囲を限定することは出来ても、そのレイヤーより下にあるバンプマップレイヤーの影響を排除することは出来ない。だから下のバンプマップの影響を排除しようとしたら、下のレイヤにも反転したマスクを設定してやらないといけないようだ。

dot例えば左のようなドットパターンをディフューズカラーで作り、

gridさらに左のようなグリッドパターンもディフューズカラーで作ってレイヤーを重ねた場合、

def_mixブレンドモードが標準の時はこのように上にあるグリッドパターンのみが表示されて下のパターンは隠蔽される。

bump_mixところが、これをバンプマップで行うと左のように2つのパターンが合成されたものが現れてしまう。

maskさらに左のようなマスクパターンを作ってレイヤーマスクとして2つのレイヤーの間に挟んだ場合も、

difmaskディフューズカラーの合成の場合はこのようにマスクによって2つのパターンが切り替わるのだが、

bump_maskバンプマップの場合は下のパターンが置き換わらないで合成されてしまうので、マスクでくりぬかれたパターンに下地が合成されたかたちになってしまう。

grid_mask排他的に合成したければ、このようなれイヤーマスクでくりぬかれたバンプマップの他に、

dot_maskそのマスクパターンのインスタンスを反転して作ったマスクによってくりぬいたバンプマップのパターンを用意して合成しないとダメなようである。

bump_mixこのようにすれば排他的な合成が出来るが、ウーム。

ブレンドモードが機能しないところとベイク結果ががノーマルマップになっちゃうところを見ても、なんとなくこの仕様はうっかり抜けちゃっただけのような気がするのだが、どうなんだろう。

続きはまた次回。 

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ

modo操作メモ



take_z_ultima at 12:15|この記事のURLComments(4)TrackBack(0)modo | CG

2007年05月28日

ザ○の肩装甲やってみた その6 modo 203

今回は塗装が剥れて下地が錆びてる状態をグループマスクを使って作ってみようと思う。グループマスクはシェーダーツリー内のグループに作用するマスクで、グループ内のテクスチャをマッピングの黒い部分でマスクし、白い部分で表示させる。今回は画像マップをマスクにして白く塗った部分にグループ内に設定したサビのテクスチャが出るようにした。

まずはグループを作ってマテリアルを1つ作って中に入れ、マスクの対象として機能させてみた。

手順15左のGIFアニメはその手順である。塗装が剥げているとその部分は塗装が無いので境目に段差が見えるはずで、それとマスクが一致していないとおかしいので、マスクとして使っている画像マップのインスタンスを作って、これをバンプマップにして窪ませた。ただし凹凸が逆になるので反転させた。バンプマップ自体はグループ外側のテクスチャの影響のせいかかかり具合が少なかったので思い切ってマテリアルのバンプ強度を上げて強調している。ちょっと無茶な値を入れている感があるので、この辺のパラメータについては原因を調査してみないといけないかな。

手順16

次にサビのパターンを作った。この部分はプロシージャルで作らないで実写テクスチャを貼ったりいろいろな方法があると思う。今回はセルラを使ってみた。サビのうろこ状にひび割れた感じがちょっと出るかなという期待があったわけだ。でも遠目じゃわかんないな。サビのムラをノイズパターンで作っているけど画像マップと組み合わせてもいいね。サビだって均一じゃないからね。

サビのパターンを入れたらこの部分から流れ出したサビが塗装に痕を付けていたり、塗装の裏からうっすらサビが浮いてきていたりするように色を塗って調整すればリアルな感じになっていくかな。

続きはまた次回。 

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ

modo操作メモ



take_z_ultima at 12:28|この記事のURLComments(5)TrackBack(0)modo | CG

2007年05月27日

ザ○の肩装甲やってみた その5 modo 203

前回は色だけ塗ったけど、今回は主にバンプマップを設定する。ご存知のように、バンプマップと言うのは擬似的に凹凸を表現するための仕組みで、テクスチャの濃淡がレンダリングすると凸凹になって現れる。モデリングで凹凸をつけていてはデータ量が莫大に増えてしまうような細かな凹凸や複雑な凹凸などを表現するために使われることが多い。欠点は実際に形状が変形されるわけでは無いので、輪郭に凹凸が現れないことだ。形状まで変化させたければディスプレースメントマップって言うのがあるけど、バンプに比べて処理が重たくなるので使いどころは慎重に考える必要がある。今回はこのバンプマップで鋳造した金属の肌のような質感と、溶接によって出来た金属の盛りあがり、傷などの凹みを付け加えていく。

まず鋳肌であるが、ザラザラの凹凸になっていればいいので、描かないでノイズのプロシージャルマップを使う。プロシージャルマップと言うのは計算によって算出される特定のパターンを利用するテクスチャのことで、modoでは今のところセルラー・チェッカー・ドット・グリッド・ノイズ・ウッドがある。今回はこの中からノイズを使う。ノイズのパターンについては以前に書いた記事を参考にパラメータをいじってみてくれ。プロシージャルテクスチャでは扱えない部分については画像マップを用意して、ブラシでペイントする。まず画像マップを用意するが、バンプマップは黒くなると窪み、白くなると出っ張って見える。今回はこのマップに出っ張っている溶接痕と、窪んでいる傷を付けたいので、ノーマルな状態を50%のグレーにする。このマップに白でペイントすると出っ張り、黒くペイントすると窪む。

手順13作業手順はシェーダーツリー内の前回作ったCoverグループ内を選択しておいて、レイヤー追加からノイズを選択し、パラメータを調整してからエフェクトをバンプにする。次に画像マップを初期カラー50%で作ってエフェクトをバンプに設定して溶接痕になる部分をペイントブラシで塗っていく。今回はハードブラシを使って急激に盛り上がっている感じにしてみようと思ったけど、エッジがきつ過ぎると、結果がイマイチだったので、ソフトエッジを設定して少しエッジをぼかした。最初からソフトブラシで良かったんじゃないかって話だね。GIFアニメでは先に設定したノイズと画像マップをブレンドモードハードライトで合成してみているが、結論から言うと、機能していない。どのブレンドモードにしても同じ結果になった。ウーム。ハードライトは50%グレーで影響が出ず、それより明るいか暗い場合に強調された感じで影響が出るブレンド方法だ。うまくかかれば画像マップの影響がちょっと強調されて出るかと思ったんだけどね。バンプの凹凸が付いたところで全体の調子をマテリアルで設定する。このマテリアルレイヤはCoverマテリアルを作成した時に自動的に生成されたものだ。今のところ色のマップとバンプマップ以外を設定するレイヤが無いので、残りの属性は全てこのレイヤの設定が採用されることになる。

手順14少しずついい感じになってきたかな?
プレビューを見ながら作業をする時にプレビューの更新が思うようにいかない場合は、プレビューパネルの設定から「レンダリングを停止しない」って設定を選ぶと改善されるよ。ただし、より落ちやすくなるので、慎重にね。

バンプ設定あとは先のバンプマップの画像レイヤを選択しておいて、黒色で傷などを追加で書き入れてくれ。失敗したら50%グレーで塗れば消えるよ。左の画像はGIFアニメじゃないけどクリックすると拡大して見られるよ。

バンプ設定後

傷を付けてからレンダリングしたのがこれ。ディテールがハッキリしてきたから、色の方ももう少し塗り進めてみてもいいだろう。

次回は塗装の剥げとか錆びとかを付け加えてみようと思う。

続きはまた次回。 

スクリプトまとめページ( Down Load はこちらから)  

カテゴリー別ページ

modo操作メモ



take_z_ultima at 12:55|この記事のURLComments(12)TrackBack(0)modo | CG
Archives