Maya-法線の表示と頂点法線の操作方法[モデリング]

maya_normal_topimage

MAYAでモデリングをしていると、モデルが真っ黒になってしまったり、頂点が黒ずんでしまったりすることがあると思います。

ポリゴンには 向き があります。

向きを間違うとモデリングの形状は綺麗に出来ているのに、黒くなってしまったり、滑らかに作ったはずの面がカクカクしてしまう事があります。

今回はポリゴンを扱う上で大事な法線の表示方法と修正の仕方を紹介します。


頂点法線とフェース法線

ポリゴンの法線には 頂点法線 と フェース法線 があります。

頂点法線はポリゴンの頂点の向きを示す法線

maya_normal_vertex

フェース法線はポリゴン面の向きを示す法線

maya_normal_face

法線の表示方法

頂点法線の表示方法は

Display/ディスプレイ > Polygons/ポリゴン > Vertex Normals/頂点法線

vertex normals

フェース法線の表示方法は

Display/ディスプレイ > Polygons/ポリゴン > Face Normals/フェース法線

face normals

表示される法線の長さを変更出来ます。

モデリングするオブジェクトが巨大なものや小さいもの、凄く入り組んだもの などの時にどの法線なのか判別しにくい時に便利です。

Display/ディスプレイ > Polygons/ポリゴン > Normals Size./法線の長サイズ

normals size

デフォルト値 0.4 から 1.96 に変更しました。

normals_size

法線の長さが変わりました。 画像は頂点法線だけですがフェース法線でも使えます。

normal_size_stol

バーテックスフェースの法線

頂点法線は頂点ひとつに一本の法線に思えますが、実はバーテックスフェースの法線が纏まって一本になっています。

vertex_face_normals

バーテックスフェース法線の表示方法

頂点法線を表示した状態で 右クリックメニュー > Vertex Face

vertex_face_normals_menu

バーテックスフェースの法線それぞれを違う向きに調整出来ます。

Mesh Display > Vertex Normal Edit Tool

vertexnormal_edit_tool

バーテックスフェイスを選んで法線方向を変更出来ます。

vertex_face_normal_re

フェース法線をReverseで修正

ポリゴン面が逆を向いてい黒く表示される場合の修正方法。

normal_black

対象のオブジェクト 又は 対象のポリゴン面を選択

Mesh Display > Reverse

reverse

修正されました。

normal_reverse

頂点法線を修正

それぞれ違う向きになったバーテックスフェイスの向きを一つに纏めます。

法線がバラバラになった頂点を選択

vertex_normal_ram

Average で法線を修正

menu_average

それぞれの法線は一つにまとまりました、それぞれの法線の平均をとった方向を向きます。

average

set to face で法線を修正

menu_settoface

この方法が最も簡単で一般的だと思います。

set to face で一旦法線をポリゴン面の向きに正対させます。

set_to_face

次に Mesh Display > Soften Edge

menu_soften_edge

ソフトエッジにします。

soften_edge

もともと複雑な法線調整をしているオブジェクトでなければ最も適切な修正方法でしょう。

Set Vertex Normal で法線を修正

menu_set_vertex_normal

法線方向を指定します。

set_vertex normal options

指定した法線方向を向きました

set_vertex_normal

法線を数値的に細かく調整したい場合に使えるでしょう。

頂点法線を手動で修正する

Vertex Normal Edit Tool で修正

menu_Vertex Normal Edit Tool

手動で調整します。

Vertex Normal Edit Tool

これも Set Vertex Normal 同様に細かく調整したい場合に使用できるでしょう。

法線の値を取得するMAYAのスクリプトコード

MAYAで頂点の法線ベクトルを取得するには

polyNormalPerVertex

を使います。

バーテックス(頂点)を選択して以下のMELスクリプトを実行すると


MEL:

polyNormalPerVertex -q -xyz;


結果:

// Result: 0.178558 0.709484 0.681725 0.178558 0.709484 0.681725 0.178558 0.709484 0.681725 0.178558 0.709484 0.681725 //

選択したバーテックス(頂点)に含まれるバーテックスフェースの法線の値がすべて返されます。

バーテックスフェースがまとまっている場合は(ソフトエッジや同一平面上のハードエッジ)法線の値は全て同じなので、返された値の 0番目 1番目 2番目の値がバーテックス(頂点)の法線値とみなす事ができます。


MEL:

vector $normal_vect;

float $normal_vector_xyz[] = `polyNormalPerVertex -q -xyz`;
$normal_vect = <<$normal_vector_xyz[0],$normal_vector_xyz[1],$normal_vector_xyz[2] >>;

print("X:"+(string)$normal_vect.x + " Y:"+(string)$normal_vect.y + " Z:"+(string)$normal_vect.z);


結果:

X:0.1785580516 Y:0.7094841599 Z:0.681725204

MELにはベクトル型 vector があるので返された値から0番目 1番目 2番目の値をvector型の変数に代入しました。

Python:

import maya.cmds as cmds

normal_vertex_xyz = cmds.polyNormalPerVertex(q=True,xyz=True)

print("X:%s Y:%s Z:%s") % (normal_vertex_xyz[0],normal_vertex_xyz[1],normal_vertex_xyz[2])


結果:

X:0.178558051586 Y:0.709484159946 Z:0.681725203991

返された値から0番目 1番目 2番目の値をリストから抜き出しました。


MAYAの法線の表示と修正方法の紹介でした。

以上です。

 

関連記事

Twitter Facebook Pocket LINE はてブ


関連記事:

コチラの記事も読まれています
あわせてよく読まれている記事