距離によってセルエッジの太さを変化させるには
http://www.youtube.com/watch?v=HWx6dfuep2o&hd=1
MODOにはバージョン601からセルエッジの機能が標準で搭載されているほか、さらにその機能を拡張したNPR(Non Photo-Realistic Rendering)というキットが用意されています。
例えば、こういったサンプルのモデルに対し、シェーダツリーでCell Edge Materialを追加するだけで、メッシュにエッジを付けることが可能になっています。デフォルトではこのエッジの幅というのは、距離によって変化することはありません。どこにメッシュが存在していようと、必ずエッジは同じ幅になります。しかし場合によっては、このエッジの幅を距離のよって変化させたい場合もあります。今回はそんな場合にスケマティックでエッジの幅を距離でコントロールする方法をご紹介します。
まずはコントロールするエッジの幅のチャンネルを選択し、チャンネルタブからスケマティックへとドラッグアンドドロップし、ノードを追加します。次に距離を測定するノードが必要となります。距離を測定するノードは追加ポップアップ > チャンネルモディファイヤ > 測定の中にあります。今回、カメラがモデルに近づく、つまり距離が近くなるとエッジが太くなり、カメラがモデルから離れる、つまり距離が遠くなるとエッジが細くなるという処理を行いたいので、ワールド座標におけるカメラとモデルの位置が必要になります。
アイテムツリーからカメラとモデルを選択し、チャンネルタブからそれぞれワールド位置をスケマティックへとドラッグアンドドロップし、距離測定ノードの起点と終点にそれぞれ接続します。これでカメラからモデルまでの距離が求まるようになりました。あとはこの距離とエッジをどう関連させるかなのですが、距離が近づく、つまり距離の値が小さくなるほど、エッジの幅は大きくなりますので、この二つは反比例の関係にあります。ということで、単純に除算のノードを使ってみましょう。
追加 > チャンネルモディファイヤ > 演算 > 基本演算:除算のノードを追加します。ある一定の値を距離の値で除算したものが、エッジの幅になると考え、距離測定ノードの出力を除算ノードの入力Bに、また除算ノードの出力をエッジの幅へと接続します。除算ノードの入力Aに入れる値は、シーンによって異なりますので、トライアンドエラーを繰り返しながら値を調整してみます。
このようにスケマティックを利用することで、カメラを近づけるとエッジの幅が太くなり、逆にカメラが遠のくとエッジの幅が細くなるという表現が可能になります。