スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Maya: ハードエッジシェーダーを作る方法

随分久しぶりの更新になりますが、実は生きてました。


今回はMayaでハードエッジををレンダリングする方法について紹介します。

この方法を使うとHEに設定した部分のみ、エッジ角に応じて線に強弱を付けてレンダリングできます。

ハードエッジシェーダーサンプル
ハードエッジシェーダー サンプル01



このシェーダーの最大の利点は、テクスチャ作成時に初期素材としてベイク出来る点です。
(テクスチャのベイク方法はググったりしてください。)

テクスチャ製作で、エッジハイライト部分を手描きで一本ずつ描いている所をたまに見かけますが、この方法を使えばその作業をスキップ出来るので時間を短縮できます。
オマケに、殆どの場合手描きするよりシャープできれいな線が引けます。

勿論万能ではありませんが、機械系モデル作成では結構使えると思います。

なお、このシェーダーにはMentalray専用ノードが含まれているため、Mentalray以外ではレンダリングできません。

以下がハードエッジシェーダーのシェーディングネットワークです。

ハードエッジシェーダ チュートリアル01

作成方法
  1. ネットワークに必要なノードを全て作成する。
  2. mia_roundcorners.outValue >> layerdTexture.inputs[0].color 接続
  3. レイヤードテクスチャのアトリビュートで、接続したroundcornersのブレンドモードを「差の絶対値」に。
  4. layerdTexture.outColorのoutColorR, ..G, ..B をそれぞれplusMinusAverageのinput1D[0], ..[1], ..[2]へ接続。
    コネクションエディタではうまく接続出来ないので以下の様なスクリプトを使うと楽。
    connectAttr -f layeredTexture1.outColorR plusMinusAverage1.input1D[0];
    connectAttr -f layeredTexture1.outColorG plusMinusAverage1.input1D[1];
    connectAttr -f layeredTexture1.outColorB plusMinusAverage1.input1D[2];
    ※ノード名は要変更
  5. plusMinusAverageの操作を「合計」または「平均」に。
  6. plusMinusAverage.output1D を surfaceShader.outColorR, ..G, ..Bへそれぞれ接続。


これで完成です。

基本的な仕組みとしては、mia_roundcornersでハードエッジ部分のバンプ法線を出力。
法線にはマイナス値が含まれるので、layerdTextureの差の絶対値で全てプラスへ補正。
plusMinusAverageでRGB各値の平均値を取り、グレースケール化する。

というような感じです。
因みにグレースケール化でplusMinusAverageを使うのは、luminanceではRGB各値に重み付けが行われる為、完全な平均値のグレーにはならない為です。
ここで「操作」を「合計」にするとより濃いエッジが、「平均」にすると薄いエッジが出力されます。
mia_roundcornersはエッジ角によって出力するベクトルの強さが変わるので、角度の小さいエッジは薄くなってしまうため「合計」に設定した方が綺麗に見えることがあります。(逆に角度の大きなエッジは白飛びしてしまう可能性も)

また、roundcornersのRadiusパラメータでも線の太さをコントロールできます。
Radiusを上げれば太い線が、下げれば細い線が出力されます。

このへんは要調整です。

最後になりますが、このシェーダーのサンプルmaファイルを置いておきます。
まぁここまで説明しておいて何ですが、maファイルをインポートして使った方が楽です。

ハードエッジシェーダー シーンサンプル (ma: x64 2013)(右クリックで保存)



それでは、良いMayaライフを。
関連記事
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。