「法線」について
こんにちは。新人デザイナーの伊藤です。
皆さん、3Dモデルにおける「法線」というものを聞いたことがありますか?また3D経験者の方はモデリングやレンダリングの際、法線を意識されたことはありますか?私はこれといって今まで意識したことがなく…。というより、あまり深く考える機会がありませんでした。なので「法線」とは一体何なのか、その正体について今回少し深く切り込んでみたいと思います。
法線には「フェース法線」と「頂点法線」があります。
◆フェース法線
フェース法線はポリゴンフェースの向きを定義するものです。面に対し垂直に線が伸びています。この線が出ている面が「表」になります。モデリング中、「ポリゴンが黒いぞ…?」となった時は法線が反転されている可能性が高いです。ちなみにデフォルトだと両面レンダリングされる設定になっています。
少し実験してみました↓
半分に割った球体をレンダリング
法線の向きがデフォルトのもの(a)、法線をデフォルトの向きにしたまま「裏面」を非表示に設定したもの(b)、法線を反転させたもの(c)になります。レンダリング結果を見たところ、法線の向きを反転させても見え方に違いがないことが分かります。右上のように設定し、法線の方向とは逆面にカメラを向けた場合、「裏」の部分はめっきり切り取られたような見え方になります。(テクスチャを張ったり、ライトを1方向から当ててみても結果は同じでした。)この結果を見るにフェース法線はあくまでもビューポート上での見え方、と考えてみても良いのかもしれません。
◆頂点法線
「頂点法線」は「面」に対するシェーディングに関わっています。法線の方向を変えることにより、エッジの尖り具合の見え方が変わります。それによりポリゴンへのライティングも調整されます。
モデリングをしていてポリゴンのカクカクが気になる時、一発でポリゴンを滑らかな見た目に変更できる機能があります。「ハードエッジ/ソフトエッジ」という機能です。この「ハードエッジ/ソフトエッジ」こそ、法線の方向を自動で変換してくれる機能だったのです。今まで特に何も考えずに使っていましたが、エッジの尖り具合を変える=頂点法線を調整させる、ということだったようです。
エッジを切り替えたモデルをビューポートで見た図です。デフォルトの場合、法線は隣接するポリゴンフェースの数だけ存在します。立方体は1つの頂点に3つの面が隣接しているので3本の法線が出ている、ということになります。この法線の向きに沿ったシェーディングになるよう計算されているため、面がくっきり分かれた立方体の形に見える、という仕組みになっているようです。
レンダリング結果にもしっかり影響が出ています。
法線の方向を手動で変えた結果がこちら。
近年の『ギルティギア』シリーズでも、法線の向きを変えながらの陰影調整が使用されていました。これを行うことで、曲面状のポリゴンに対しても2Dタッチのおおざっぱな影が作れるようです。『ギルティギア』シリーズはセルルックな見た目とモーションが特徴的な格闘ゲームですが、この手法が「3DCGによるセルルックな表現」を可能にした要素の1つとなっていたみたいです。
また法線は別のモデルに転写することもできます。人間の顔など、作り込んでいくうちにエッジが増えていくモデルには有効かもしれませんね。今後ハイポリでのモデル制作の機会があれば、これらを念頭に置いて取り組みたいと思います。