« 2013年7月 | トップページ | 2013年9月 »

2013年8月

2013年8月30日 (金)

インク線の距離減衰。

先日某所でこの話が出たので、それをメモしておきます。 俺は2005年頃にごちゃごちゃいじっているうちに発見したんだったと思うけど、世間一般ではあまり知られてないのかな。どうなのかな。



アレですよ。 Toon_Ink_Lens。

もう何年も何年も放置プレイされている、進化のない輪郭線レンズシェーダ。

改良する気ないなら Pencil ちょうだい Pencil。

2005年とかから、ほんと変わってない気がする。





で、この Toon_Ink_Lens ですが、カメラから遠いオブジェクトまで同じ太さで線を描いてしまうとごちゃごちゃした絵になりやすいので、距離による太さの減衰を入れてあげて、遠くに行くほど線が細くなるように、よくやりますよね。


でも、オブジェクトの一番外側の境界線だけは細くならないんですよね。 アホか。 なんでこうなるの。早くどうにかして下さいよ嘔吐デスク様。

この記事は、その対処法のメモなんですがね。 まあ、俺はこんな風にしてますよというだけの話ですが。




例えばこういうシーンがあります。

It_1

よくある、男の整列のようすですね。





で、Toon_Ink_Lens が設定してあります。

It_2

Taper のタブで、Distance Amount を  にしています(デフォルトはゼロ = オフ)。  つまり距離による線の太さの減衰を最大に効かせている状態です。

一応パラメータの意味をざっくり書くと、 Near 15Far 50 ですから、カメラから距離が 15 の地点から減衰が始まり、50 の地点で減衰が終わります。 つまり、15 より近い部分は一番太い状態のまま変わらず、15 から細くなり始め、50 で最も細くなり、50 より遠い部分では最も細い状態で続くということになります。

Min は  です。 つまり、Near の距離の時に太さが Spread x 1 になるということです。 Spread はとなりのタブ(最初のタブ)である Basic Appearance の中の Spread で指定した線の太さです。 たとえばこの Spread を 2 に設定していたとしたら、2 x 1 = 2 なので、距離 15 までは 2 の太さが続くということです。

Max0.1 です。 "Min" が 1 なので、"Max" の方が値が小さいのは感覚的にヘンな気もしますが、値じゃなくて効き具合が Max だと考えればいいでしょう。 つまり、Far の距離である 50 に達したときに減衰の効き具合が最大になり、それは 0.1 だという。 2 x 0.1 = 0.2 なので、距離 50 では 0.2 という太さになっているという意味ですね。

その下の Profile のところで、この減衰のカーブが決められます。 Bias モードなら、Power 0.5 (デフォルト)ならリニアに減衰します。 つまり Near から Far に向かって、一定の割合で細くなって行きます。 0.25 とか 0.9 など、0 から 1 の間でどちらかに寄せた値を入れると、「最初の方でグイっと細くなってそれ以降あまり変わらず」 とか 「最初はあまり変わらないんだけど、ある距離を過ぎるといきなりグイっと細くなる」 というようなコントロールが効きます。 使いにくいけどね。







本題に戻りますが、この状態でレンダリジョンを描いてみると・・・・・

It_3b

もう誰がどう見てもスケキヨにしか見えません。





本題であるスケキヨはちょっとおいといて、線の太さの話に脱線しますが、ええと、男の顔の中身をよく見ると、目鼻などの線はちゃんと距離で細くなっていってるのが分かります。 しかし、一番外の境界線、つまり空間との境界をなす線は距離が遠くなっても細くなって行かないんですよね。


It_3


昔からこうです。 今も変わりません。 ほんと腹立ちます。



そこで、空間との境界も目鼻のように細くなっていくためには、どうなってればいいのかを考えたわけですよ。 


目鼻の線は、その線のいわばバックグラウンド(ヌケ)にあたる部分に、頭部そのもののポリゴンが存在します。 一方、頭部そのもののバックグラウンドは、何もない無の空間です。



ならば頭部のバックグラウンドにも何かあればいいんじゃいのか。


と思ってやってみたら上手く行っているように見えるというのがこの話です。

It_4

ほら、ちゃんと空間との境界も細くなって行くのが分かりますよね。 これをやりたかったんですよ。


上の画像の下部分を見ると分かると思いますが、スケキヨさんたちをすっぽり覆い尽くすように球体を置きました。 球じゃなくてもいいと思うんだけど、ひとまず無難に球を使いました。 これで、カメラから見たスケキヨのヌケは無ではなく、球体のポリゴンがあるという状態になったわけです。 そしてこの状態なら、空間との境界もちゃんと減衰してくれるわけです。 と言うよりは、ヌケに球体があるということは、そもそも空間との境界というものが存在してないわけですね。 ヌケが無ではなく何か存在してくれていればちゃんと減衰するらしいというのは目鼻の観察で分かってますからね。


とまあ、そんだけです。 この問題が出たら、何かで覆って、「無の空間」 との境界をそもそもなくしてしまえばいい、という話でした。








あと、たまに球体ではなくキューブとかで囲いたくなることもありますね。 下の画像のような、地面との接地(交差)部分に線が欲しい時とか。

It_5

でも、ヌケにキューブのエッジが見えてしまい、そこにインクの線が描かれてしまいます。 この線は要りません。



この線を消す方法は、形状でいじる、つまりエッジをベベって丸くしてやってもいいんでしょうけど、俺はマテリアルで対処してしまいます。

It_6

キューブのマテリアルに Toon_Host を与えてやって、Ink タブBoundaries のところにある Interior オフにします。 インテリア、つまり内側ですね。ブツの内側に描かれるべき線はいっさい描かないという設定です。 キューブのエッジは、キューブ内部に属するエッジですから、インテリアの線がオフならエッジの線も描かれません。 これで桶。


ちなみに Bypass でオフにしちゃうと、このキューブが関与する線は一切描かなくなってしまうから、当然スケキヨと地面との交差部分の線も描かれなくなってしまい、これでは意味がありません。 

Silhouette はキューブがキューブ以外のオブジェクトや空間との境界で描こうとする線ですから、これをオフにしてもダメです。 スケキヨはキューブにとっては自分以外ですから、そことの境界が描かれなくなってしまう、つまり、やはり交差部分に線を描いてくれなくなってしまうからです。


このシーンファイルのダウンロード  Ink_Sukekiyo.zip (XSI 2012)









さあ曲行きましょう。

スケキヨさんも大ファンで、親戚かもしれない犬神サーカス団さんです。



いやあ、いつもベタベタのネタで最高ですね。 素顔の凶子ねえさん、可愛いじゃない。


最近 「犬神サアカス團」 に名前を変えたみたいです。一度はライブを観に行きたいバンドですねえ。






.



. 

| | コメント (3) | トラックバック (0)

2013年8月22日 (木)

検索ワードに勝手レス。 3。

「xsi 起動しない」
マシンがまだ起動していないんだと思います。



「maya ロトスコープ」
イメージプレーンって言うんですか。あれ、なかなかいいですよね。板ポリに絵を貼ったような、実体として存在してますよね。嫌いじゃないです。XSI より高機能に見えます。



「NULL方向」 
よくわかんないけどYが上です。 Zとか上とか言う人は変態か宇宙人です。



「aftereffects 連番ファイル ファイル名取得 スクリプト」
これはアニメの撮影さんあたりに聞くのが早いですよ。



「softimage xsi男性」
彼のことを言っているのですか? 彼は今日も元気に仕事しましたよ。いやあほんと、プロジェクト参加率100%です。 彼を使わない仕事はありません。 ほんと。



「vray 影を落とさない」
vray はそういうこともできるんですね?  普通にCGのウソ、できるんですよね?



「3D AE 反射 荒い」
わかりません。



「softimage リグ 作り方」
さすがに甘えすぎですあなた。



「mudbox 赤い印」
気になりますね。何の印ですか。



「express feat.silla 歌詞」
俺は知りません。森江さんにでも聞いてみて下さい。



「windows7 xsi起動しない」
ウインドウズ7がまだ起動していないんだと思います。



.

| | コメント (0) | トラックバック (0)

2013年8月20日 (火)

全体AO。

何年も前から同じこと何回もやってんのに、久しぶりにやろうとするとやり方を忘れているといういつものパターンでしてね。 だからメモります。 また忘れたらここでカンニングする。


全てのマテリアルにアンビエントオクルージョンを入れたくなることって、あるじゃないですか。 でも全部のマテリアルでレンダツリーいじるのは面倒ですよね。 スクリプト書いて一気に処理でもいいですけど、レンダツリーの構成がマテリアルによって全然違ったりして、一定の法則で AO シェーダを挟み込むようなスクリプトが書きづらいことも多いです。


なので 個々のマテリアルの方はいじらずに、レンズシェーダを使って全体にイッキに AO してしまおう というアレです。


たぶん6年も7年も前から、XSI Base みたいなところでよくこの質問が出ていたと思うんですよね。 「シーンの中のブツすべてに、AO 効果があるレンダがしたいのだが、簡単にできるかしら?」 という。  それを見てやり方を覚えたのですが、昨日久しぶりにやろうとしたらやり方忘れていて焦ったので、書いておきます。



Globalao


画像の通りなんですがね。 こんなやり方でいいでしょうかね? 他にもっといいやり方ありますかね?

色んなブツが、色んなマテリアルを持っています。色も違うし、シェーダの種類も違う。Phong だったり Lambert だったり Arch Mat だったり。

でもレンダされた絵には、マテリアルに関係なく全てのブツに AO 効果が入っています。 これをやりたかったんです。  青いキューブなんか、コンスタントシェーダなんですが、AO 効果が載せられているため、コンスタントシェーダであるにも関わらずキューブの形状が認識できます。




考え方としては、レンズシェーダを使って全体に効果を及ぼしてしまえというものです。

と言うのは、レンズシェーダは基本的に、そのレンズから見えるもの全てに対して何かをしようとするので、これを利用して特定の効果を全体に乗せるわけです。 この場合は AOシェーダの効果を乗算(Multiply)で乗っけています。 それぞれがどういうマテリアルを持っているかとかは関係ありません。 レンズシェーダは、とにかくそこに見えるもの全てに対して何かをするわけですから。 レンズシェーダも色々ありますが、基本的には何でもいいです。 見えるもの全部に対して効く、という特性はどのレンズシェーダでも同じですから。

ただし、そのレンズシェーダが持つ効果自体はオフにしてやらないといけません。 上の画像では、たまたま Lens_Background_Color という、背景色を黒以外にすることができるレンズシェーダを使っていますが、別に黒以外の背景色が欲しいわけではありません。専らレンズシェーダの持つ 「そこに見えるもの全てに対して何かする」 という特性を利用したいだけであって、レンズシェーダの持つ効果(この場合は背景色設定)は不要なわけです。 だから、enable のチェックボックスをオフにして、背景色を設定する効果はオフにしてやっているわけです。





一応手順を書いておくと、

まずカメラ、あるいは Pass に対してレンズシェーダを与えます。 上の画像の場合は Pass に与えています。

レンズシェーダの種類は何でもいいはずですが、レンズシェーダの効果をオフにできるスイッチがあるものを選ばねばなりません。上の Lens_Background_Color ってのはそれができるので、良いんじゃないですかね。 あと、Toon_Ink_Lens なんかでもいいと思います。 Toon_Ink_Lens には Bypass というスイッチがあるので、これをオンにしておくと効果をバイパスする、つまり Ink のラインを描く効果はオフになりますから。

そしてレンズシェーダの結果に対して、レンダツリーで何らかのシェーダなどを間に挟みこんで、欲しい効果を作り出します。 上の場合は AO シェーダを Mix 2 Colors の乗算モードで合成しています。  以上。



このレンズシェーダの 「見えるもの全てに」 の特性を使って、AO に限らず色々面白いことができそうな気がしますよね。 やったことないけど。





あ、本題から外れますが念のために言っておくと、上の例では AO を乗算モードで合成していますが、AO ってものは全体に乗算で合成するのが正しい使い方だ、とかそういうわけでは全然ありませんので、そこは誤解なきようご注意下さい。 

AO はアンビエントオクルージョンなんだから、基本的にはアンビエント部分(直接光が当たっていない部分)に対して合成してやるべきものとしてコンポジットのセオリーがあると思うんですが、実は俺はよく分かってません。 メンタル霊のスタッフだった、誰だっけ、あの人、ZAP さんだっけ、その人のブログで正しいとされる合成方法が記述されていたので、ちゃんとやる時はそれを調べて真似しましょう。 っていうか最近専業コンポジターが多くなったので、その人たちに聞けばすぐ分かる・・・のかな?

まあ、AO の効果をどう使うかはそのアーティストの勝手なので何でもいいんですけど、ただし、一時期、「AO ってものは全体に乗算合成するのが正しい(AOの使い方としてもともと想定されている)使い方だ」 と思い込んでいる人が多かったように見えたので、そういう使い方をしてもあなたの勝手だし俺もそういう使い方よくしてきたけど、本来の AO の使い方(合成方法)として正しいわけではないですよ、ということを念のため書いているだけです。







ちなみに俺の場合、実際の本番素材作りにおいて AO Pass が必要なとき、あるいはビューティPass などに AO 効果を乗せたいときに、このようにレンズシェーダを使ったことはあんまりなかったですね。 というのは、この方法だと AO シェーダの設定はひとつだけになってしまいますからね。 オブジェクトによって AO の設定を変えたくなることもあるので、結局は各自のマテリアルに対してひとつひとつ手作業することの方が多い気がします。


じゃあなんでこの方法をメモするのかというと、簡単お手軽に全体にババっと AO を乗せたいこともよくあるからですよ。

よくあるのはモデリングのチェック画像を作るときなどですね。 AO があるとブツの形状が認識しやすくなるので、モデリングのチェックには便利です。 でも全体が白黒の AO だとかえって見づらくて形状がよくわからない。 だからモデリング時には各オブジェクトに色分けして見やすくする程度の適当なマテリアルをサッと与えておいて、チェック画像をレンダするときにレンズシェーダを使って丸ごと AO を加えてやるという。 

俺の場合こんな風に、本番用じゃなくて仮のレンダ用にこの方法を使うことが多いですかね。





とかなんとか。

.

| | コメント (0) | トラックバック (0)

« 2013年7月 | トップページ | 2013年9月 »