この記事にはプロモーションが含まれています。

【Blender4.3】エッジ検出マスクでリアルなフチの汚し表現:Bevelノード使用

blender

Blenderでマテリアルをつけるときに、汚しの表現でエッジ部分にだけサビや汚れをつけたいときがあります。エッジ部分を検出する方法はいろいろあるんですが、良い方法を見つけたのでシェア&解説します。

以下の動画が参考リンクです

この記事は、BlenderのBevelノードを使ってエッジを検出し、汚しをつける方法についての中級者向けの記事です。

難易度 3.0

スポンサーリンク

Bevelノード

Bevelノードはジオメトリに変更を加えることなくベベルをかけたシェーダー結果を出力します。(Cyclesでのみ有効です)

左図、Radius(半径):エッジのベベル効果の幅が0のときはほぼGeometryのノーマルの結果がそのまま出力されます。

Radiusが1のときベベルがかかり角が丸まります。

ちなみにGeometryノードのNormalは左図のように出ます。ほぼ同じですね

スポンサーリンク

Bevelノードを使ってエッジを検出する

エッジを検出するには、BevelノードとGeometryノードのノーマルの内積をとります。

内積は、ベクトルの間の角度が同じ(同じベクトル同士)だと結果は正になり、値が最大になります。

そこから二つのベクトルの間の角度が開いていくと内積の結果の値は少なくなっていきます。

ベベルで元のノーマルの角度が変更された部分だけ、元のノーマルマップとの内積の値が他の部分より小さくなるという特性を使います。

左側ではBevelノードで角を丸めずそのまま出力しています。Geometryノードのノーマル出力と同じマップになっているので、これをDot Productで計算するのは、同じベクトル同士の内積を出しているということになります。

なので真っ白(1以上)で大きい値がでています。

右側はBevelノード半径1で角を丸めています。このマップとGeometryノードのノーマルマップの内積を計算すると、元のマップに変更を与えた部分(角を丸めた部分)だけが値が小さくなり、色は黒に近づきます。

スポンサーリンク

エッジ検出を使って汚しをつける

さきほどの計算結果を利用し、BevelノードのRadiusにノイズテクスチャをつけることでエッジの周辺にランダムに汚しをつけることができます。

他のやり方と比べるとわかりますが、それぞれのエッジ周辺部分まで検出がきちんとできていて、自然で良い感じになります。あとノードを組むのも簡単です。

スポンサーリンク

他のエッジ検出方法

Ambient Occlusionノードを使う方法

Ambient Occlusionノードは物体の隙間や凹んだ部分を検出しますが、周囲に遮蔽物があるかどうかでも検出されるので、角などの部分じゃない平面にも汚しがかかってしまうことがあります。

pointinessを使う方法

Geometryノードのpointinessは凹凸部分を検出してくれますが、「凹が黒、凸が白」、という値で出るのでエッジ周辺部分を覆うように出すのがやりづらいです。

出来ないわけではないと思いますが、おそらく調節が比較的難しくなると思います。