インク線の距離減衰。
先日某所でこの話が出たので、それをメモしておきます。 俺は2005年頃にごちゃごちゃいじっているうちに発見したんだったと思うけど、世間一般ではあまり知られてないのかな。どうなのかな。
アレですよ。 Toon_Ink_Lens。
もう何年も何年も放置プレイされている、進化のない輪郭線レンズシェーダ。
改良する気ないなら Pencil ちょうだい Pencil。
2005年とかから、ほんと変わってない気がする。
で、この Toon_Ink_Lens ですが、カメラから遠いオブジェクトまで同じ太さで線を描いてしまうとごちゃごちゃした絵になりやすいので、距離による太さの減衰を入れてあげて、遠くに行くほど線が細くなるように、よくやりますよね。
でも、オブジェクトの一番外側の境界線だけは細くならないんですよね。 アホか。 なんでこうなるの。早くどうにかして下さいよ嘔吐デスク様。
この記事は、その対処法のメモなんですがね。 まあ、俺はこんな風にしてますよというだけの話ですが。
例えばこういうシーンがあります。
よくある、男の整列のようすですね。
で、Toon_Ink_Lens が設定してあります。
Taper のタブで、Distance の Amount を 1 にしています(デフォルトはゼロ = オフ)。 つまり距離による線の太さの減衰を最大に効かせている状態です。
一応パラメータの意味をざっくり書くと、 Near 15 で Far 50 ですから、カメラから距離が 15 の地点から減衰が始まり、50 の地点で減衰が終わります。 つまり、15 より近い部分は一番太い状態のまま変わらず、15 から細くなり始め、50 で最も細くなり、50 より遠い部分では最も細い状態で続くということになります。
Min は 1 です。 つまり、Near の距離の時に太さが Spread x 1 になるということです。 Spread はとなりのタブ(最初のタブ)である Basic Appearance の中の Spread で指定した線の太さです。 たとえばこの Spread を 2 に設定していたとしたら、2 x 1 = 2 なので、距離 15 までは 2 の太さが続くということです。
Max は 0.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 の間でどちらかに寄せた値を入れると、「最初の方でグイっと細くなってそれ以降あまり変わらず」 とか 「最初はあまり変わらないんだけど、ある距離を過ぎるといきなりグイっと細くなる」 というようなコントロールが効きます。 使いにくいけどね。
本題に戻りますが、この状態でレンダリジョンを描いてみると・・・・・
もう誰がどう見てもスケキヨにしか見えません。
本題であるスケキヨはちょっとおいといて、線の太さの話に脱線しますが、ええと、男の顔の中身をよく見ると、目鼻などの線はちゃんと距離で細くなっていってるのが分かります。 しかし、一番外の境界線、つまり空間との境界をなす線は距離が遠くなっても細くなって行かないんですよね。
昔からこうです。 今も変わりません。 ほんと腹立ちます。
そこで、空間との境界も目鼻のように細くなっていくためには、どうなってればいいのかを考えたわけですよ。
目鼻の線は、その線のいわばバックグラウンド(ヌケ)にあたる部分に、頭部そのもののポリゴンが存在します。 一方、頭部そのもののバックグラウンドは、何もない無の空間です。
ならば頭部のバックグラウンドにも何かあればいいんじゃいのか。
と思ってやってみたら上手く行っているように見えるというのがこの話です。
ほら、ちゃんと空間との境界も細くなって行くのが分かりますよね。 これをやりたかったんですよ。
上の画像の下部分を見ると分かると思いますが、スケキヨさんたちをすっぽり覆い尽くすように球体を置きました。 球じゃなくてもいいと思うんだけど、ひとまず無難に球を使いました。 これで、カメラから見たスケキヨのヌケは無ではなく、球体のポリゴンがあるという状態になったわけです。 そしてこの状態なら、空間との境界もちゃんと減衰してくれるわけです。 と言うよりは、ヌケに球体があるということは、そもそも空間との境界というものが存在してないわけですね。 ヌケが無ではなく何か存在してくれていればちゃんと減衰するらしいというのは目鼻の観察で分かってますからね。
とまあ、そんだけです。 この問題が出たら、何かで覆って、「無の空間」 との境界をそもそもなくしてしまえばいい、という話でした。
あと、たまに球体ではなくキューブとかで囲いたくなることもありますね。 下の画像のような、地面との接地(交差)部分に線が欲しい時とか。
でも、ヌケにキューブのエッジが見えてしまい、そこにインクの線が描かれてしまいます。 この線は要りません。
この線を消す方法は、形状でいじる、つまりエッジをベベって丸くしてやってもいいんでしょうけど、俺はマテリアルで対処してしまいます。
キューブのマテリアルに Toon_Host を与えてやって、Ink タブの Boundaries のところにある Interior をオフにします。 インテリア、つまり内側ですね。ブツの内側に描かれるべき線はいっさい描かないという設定です。 キューブのエッジは、キューブ内部に属するエッジですから、インテリアの線がオフならエッジの線も描かれません。 これで桶。
ちなみに Bypass でオフにしちゃうと、このキューブが関与する線は一切描かなくなってしまうから、当然スケキヨと地面との交差部分の線も描かれなくなってしまい、これでは意味がありません。
Silhouette はキューブがキューブ以外のオブジェクトや空間との境界で描こうとする線ですから、これをオフにしてもダメです。 スケキヨはキューブにとっては自分以外ですから、そことの境界が描かれなくなってしまう、つまり、やはり交差部分に線を描いてくれなくなってしまうからです。
このシーンファイルのダウンロード Ink_Sukekiyo.zip (XSI 2012)
さあ曲行きましょう。
スケキヨさんも大ファンで、親戚かもしれない犬神サーカス団さんです。
いやあ、いつもベタベタのネタで最高ですね。 素顔の凶子ねえさん、可愛いじゃない。
最近 「犬神サアカス團」 に名前を変えたみたいです。一度はライブを観に行きたいバンドですねえ。
.
.
| 固定リンク
コメント
すみません。通りがかったもので;
以前、おそらくこれが原因で使わなくなっていた機能だったのですが
おかげ様で、またスポットを浴びることになりそうです。
ありがとうございます。
やっぱりオートデスクは、Toon_Ink_Lensに手を付ける気無いんですかね;
説明にあったBypassも関与するものを容赦無く消してしまう仕様とかどうかと思いますし。
誰かがオートデスクに意見をねじ込んでくれないかな?と片隅で期待してたりです;
投稿: いぬばた | 2013年8月31日 (土) 05時22分
あら、お久しぶり。
これが原因で使わなくなったって、でもこれしかないじゃないですか XSI は。Max にでも走ったのですか? であればあなたはとても正しい。 XSI でこんなことやっている俺は正しくないです。
さあみなさん、ペンシルだ。
投稿: 潤樹 | 2013年8月31日 (土) 07時59分
いえ、どうしてもという時はキャラだけレンダしてラインの太さにアニメを付けてたくらいで、これで事足りなければ諦めてただけです;
でも最近は、レンダリングだけMaxに走るのも良いのかもなという気はしてます。
投稿: いぬばた | 2013年9月 1日 (日) 05時39分