« Fカーブエディタで選択ツールに戻れず激怒。 | トップページ | ソートします。 »

2014年2月12日 (水)

ポリゴンの境界にインクライン。

という話を m4g さんとしていたのですがね。 一応、ここにまとめておきます。



m4g さんはもともと、ワイヤフレームのレンダリングをしたかったらしいのですがね、俺が言う方法は、頑張ればそれにも使えるとは思うけど、もともとはワイヤフレームレンダではなく単に任意のポリゴンの境界にインクの線を出現させたかった、というものであります。 長年使ってきた方法です。



まずですね、オブジェクトに、このようなマテリアルを与えます。 UV も必要です。

Inky11

Toon_Host の中に Unblend Group というものがありますよね。これ、例えばマテリアルごとに数値を変えておくと、違う数値同士はアンブレンドする = ブレンドしない = つまり線を描く という機能ですね。 こいつとこいつの境界には絶対に線を描けよ! と指令していることになりますね。 

っていうか、こんな機能使わなくても、マテリアルが違えばもうその時点で境界に線が描かれるというのが Toon_Ink_Lens のデフォルト設定ですね。 でも、なんらかの都合でこのデフォルト設定を変えてマテリアル境界に線を描かないようにしている場合でも、この Unblend Group で違う数値を持つマテリアル同士では、必ずその境界に線が描かれるということだと思います。

で、このパラメータ、テクスチャが貼れちゃうんですね。 なので、マテリアルは同一でも、UV で指定された領域ごとに違う数値を持たせてやれば、その境界に線を引けるわけです。 1つのオブジェクトの中で、この部分は Unblend Group 1、この部分は Unblend Group 2・・・・という風に指定してあげるわけです。


上の画像の場合、6色のテクスチャを使っています。このテクスチャ画像は、必要な明るさの段階の数だけ色数があるなら、6色じゃなくともなんでもいいと思います。 一番暗い色は黒100%(ゼロ)、一番明るい色は白100%(1)にしておきます。

で、Change Range します。 元のテクスチャは黒100%から白100%までの明るさがあるので、Change Range の Old Range のスタート/エンドは、0 と 1 を入力します。 そしてそれを、6色テクスチャを使っているから6段階にリマップしてあげるということで、New の方に 1 と 6 を入力しています。 「この画像は元々 0-1 の明るさを持っているが、その 0-1 という範囲を、1-6 という6段階の数字に直して出力しろよ」 と言っていることになります。

こうして各ポリゴンは、UV で指定された位置によって、必ず1から6までのどれかの数値(整数)を引っさげて Unblend Group にブチ込まれることになります。 実際に6色しかない画像を使って1-6にリマップするんだから、結果は整数にしかなり得ません。 そして理論上、2-8 でも 21-26でも 9-3 でもいいと思います。6段階にさえなればそれでいい。たぶん。  もし8段階の明るさがあるテクスチャを使うなら、1-8とかにすればいいと思います。たぶん。



そして、上の画像の XSI男の目のあたりを見て欲しいのですが、UV 操作によってこの部分は周囲とは別の色になっています。 ポリゴンによって色が違うということは、その色によって別の数値が Unblend Group に渡されるので、線が引かれるはずです。

ただし、各ポリゴンは、テクスチャエディタ上でそれぞれ1点に集約(コラップス)しないとダメのようです。これをやらないと怪しい模様が出てきたりします。 サンプルポイント同士を補完しようとするから? なのかな? コラップスしていれば、UV上での座標は同一なので、補完されなくなり、整数以外の値が出てこなくなるから、とか? どうでしょうかね。


ってことでコラップスして、レンダリジョン描いてみました。
Inky12

左側、テクスチャエディタ上で、グレー部分のサンプルポイントと、黒部分のサンプルポイントが、コラップスされているのが分かると思います。

そして目の周辺にちゃんとインクラインが描かれている。 反対側の目を見てもらうとわかりますが、本来はラインが描かれないはずの領域です。しかし、目の周辺の領域とそれ以外の領域で違う数値が Unblend Group に渡されているので、線が描かれているわけです。 m4g さん、俺がいつもやってるのはこれです。


ってことで、この方法でやると、ポリゴン境界に確実に線を描くことができると思います。
Inky13


当然、ラインを描きたい場所は、必ずその描きたいラインに沿う形でポリゴンの境界が存在してなければならず、つまりそのようにモデリングしておかなければなりません。 ただの平面だったとしても、そこにラインでなんらかの模様を描きたければ、平面を分割して、平らのまま、分割した線をその形にモデリングしておくということです。



Inky14

例えばメカもので、メカメカしいパーティングラインをインクラインで出したい場合だとか、デカール類の境界線をインクラインで出したい場合、よく使っています。


しかしこれをワイヤフレームレンダリングに使うとなると、隣接するポリゴン同士が同じ色にならないように全ポリゴン分けていかなければいけないので、UV 作業が超大変ですね。

Inky15

うーん、大変だ。 しかも見落としミスをしやすいな。 この画像でも、見落としミスによって、ポリゴンの境界なのに線が描かれてない部分があります。 m4g さん、このやり方だと、全ポリゴンそれぞれでコラップスしていくツールとか、必要かもね。 m4g さんのようにプロシージャルにやる方法を考えた方が良さそうですね。




この方法の大きな欠点は、上に書いたようにモデリングが面倒なこと、UV 作業が面倒なこと、ですよね。 まあ、ワイヤフレーム的に使うのでなければ、その面倒さはもう仕方ないと思っていつもやってますけどね。

あと、閉じた線しか描けないことですかね 例えば文字の 「C]のように、ぐるっと一周つながっておらず一部開いた部分がある線というのは、その構造上できないと思います。 これについて何か方法があれば是非教えてください。



この方法、もともとどこで覚えたんだっけなあ。たぶん、Toddアキタさんのチュートリアルビデオを見たんだと思う。 それを見て、まとめて、シンプルなツリーに落とし込んでくれと丸○くんに頼んでできたレンダツリーだったような記憶があるんだが、どうだったっけね○山くん。




それともうひとつ、ポリゴン境界に頼らず、ポリゴンをまたいだ状態のテクスチャを貼ってそこにインクラインを出せないか、なのですが・・・・。

やってみると難しいんです。 これができれば完全に自由なのにね。
Inky21
テクスチャ画像は自由に描いた物です。マルもあれば四角もある。そして2色しか使ってないので、Change Range の出力は 1-2 にしてあります。

上の画像、なんか、ちゃんと出来ているように見えるでしょ? テクスチャ通りにインクラインが描けていると思うでしょ?


しかし寄ってみると、
Inky22
こうなんです。 線がガタガタです。

これ、テクスチャ画像の曲線部分はアンチエイリアスがかかるので、白か黒(1か0)以外の明るさのピクセルもあるからなんですよね。にも関わらず1-2という、1か2の2種類の数値しか持てない値に Change Range してしまっているので、このようなガタガタの線になるのだと思います。

じゃあアンチエイリアスがない画像にすればいいかというとそんなことはない。同じようにガタガタの線になります。アンチエイリアスしてないということは、元の画像ですでにガタガタの線が描かれているわけで、メンタル霊は忠実にそのガタガタを拾ってインクラインを描くだけです。


ちなみにこの部分だけは問題がないように見える。
Inky23
なぜなら、この部分は元のテクスチャ画像上でで水平線か垂直線しかなく、ゆえにアンチエイリアスがもともと無いからです。水平・垂直線ゆえに、アンチエイリアスがなくとも成立するのですね。 でも実際は、こんな水平・垂直線だけで済むインクラインなんてあり得ません。

試しに Change Range の値を変えてみると、このような変な模様が出てきました。
Inky24
このテクスチャ画像は、アンチエイリアスがかかっているために、もともと何段階かの明るさを持つ画像になっているわけで、それを1-6に押し込めたらこうなった、というものです。意味無し。


でもこの New Range のスタートとエンドを適当にがちゃがちゃいじっているうちに、上手く行ったように見えることもあります。
Inky25
これは適当に 8-2 なんて数値にしてみたら、変な模様が消えた! なんか、上手く行ってる?  でも線がちょっと太いような・・・・。


寄って見てみると、
Inky26
線がガタっている。


同じ箇所をもっと寄って見てみると、
Inky27
わっ 線が複数描かれていたっ
ダメだこれは使えねえ orz

やはり、アンチエイリアスのためにテクスチャ画像のピクセルの色が何段階かになっちゃっているのが原因ですよね。その境界に線を引けと言っているわけだから、アンチエイリアスのボケの中に含まれる明るさの違いの数だけ、線が引かれてしまうということなんですよね、たぶん。 ダメですねやっぱり。  

一方、上記のようなポリゴンコラップス方式は、もともとアンチエイリアスもクソもありません。ポリゴン(というかサンプルポイント)がまるごとコラップスされてある色の領域にまるまる入っているんだから、インクライン境界は画像のピクセルで作られるのではなく、UV で作られるとでも言うかなんというか。

でもまあ、あまり寄らないレンダリングには、上のようなテクスチャを貼る方式も使えるかもしれませんね。




どうでしょうかね。


あ、Max の Pencil って、どうなんですか。 こういうインクラインの制御、すごくできますか? タッチとかそういう制御もそうだけど、今回のこの話題のように、「どこに線を描いてどこに描かないか」の制御が、緻密に出来ますか? あるいは、Maya でも何かいい機能がありますか? 知っているお方、教えて下さい。


そしてもちろん XSI で、俺は他の方法でインクラインを制御してるぜというお方がいらっしゃいましたら、どうか教えて下さい。 この方法のまま、何年もどん詰まり、進化無し状態ですよ俺 orz  新しい知識や技を入れたいところです。。。。。





.

|

« Fカーブエディタで選択ツールに戻れず激怒。 | トップページ | ソートします。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/217974/59114213

この記事へのトラックバック一覧です: ポリゴンの境界にインクライン。:

« Fカーブエディタで選択ツールに戻れず激怒。 | トップページ | ソートします。 »