なぜベベルするのか? Blenderでベベルする時に気をつけていること

#Advent Calendar 2020

この記事は、Blender Advent Calendar 2020 の1日目です。
今年も、もう12月になり今年学んだことを少しでも文書として残しておくために、Qiitaを書くことにしました。
最近読んだ、数学ガールの著者の[結城さんのブログ](https://and-engineer.com/articles/X6PGEhAAACQAzH7e)を読んで、Outputの大切さを再認識し、ちょっとずつまとめることにしています。

専門学校等にも行ってないので、よくわからないことがたくさんあり、いろいろな方から教えてもらって、ちょっとずつモデリングができるようになってきました。このアドベントカレンダーでは、自分のため、これから勉強される方に対して少しだけでもヒントになれば良いと思って初めました!! 


# ベベル
この記事では、ベベルについて書いていこうと思っています。僕自身、これまでベベルという機能は知っているが、あまり使わない人間でした。これまでの反省を生かし、必要なところで、適切なベベルをできるようにとこの記事を書きました。

## ベベルとは?
ベベルとは、2つ以上の面の境界にできる鋭い角やエッジのなどに、新しく面を加えることで、メッシュの形状を滑らかにする方法です。以下に表すのは、奥から、ベベルしていないcube、面を一つだけ使いしてベベルしたcube、一番手前が、面を5つ追加したベベルです。

![image (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206272/667e80a2-fa33-bcff-81dd-f8af4e5250fa.png)

ベベルは、上記の図のように、角が尖っている。いわゆるハードエッジやハードバーティックスを持っている硬い物体に対して、適応することが多いです。

##なぜベベルするのか

ベベルをする理由は、リアルなものに物体の形状を近づけるためです。上の図でもわかるように、ベベルをしていないオブジェクトは、境界線が明確で、ある種の直線がここにあるようです。一方で、ベベルをしたcubeでは、境界がぼけて、エッジに光がきちんと当たっています。現実世界にある鋭いと思われるようなエッジも、手前のcubeのように角に少し丸みがあり、奥のcubeのような鋭いエッジはほとんど存在しません。また、存在してもハサミの刃のように切れ味がよく危ないと思います。(ハサミの刃でも、拡大してみればエッジ部分は鋭い直線にはなっていないはずです。)

##ベベルを適応する

Blenderでベベルをする場合、次の二つの場合が考えられます。

1. ベベルをして、メッシュの形を変形したい場合
2. 面取りをして、自然な角を仕上げるため


1の場合は、メッシュの変形が目的であり、今後ベベルをしていない前のモデルを使うことがない状況です。このような場合は、直接モデルに対してCtrl + B (頂点のみをベベルしたい場合は、Ctrl + Shft + B)でベベルするとよいです。
![image (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206272/79ff3ece-7c33-bbcd-2307-7279b77e1367.png)

一方で2の場合は、ゲームなどの用途で、非破壊的にモデリングをする際に利用され、Modifierでベベルすることが多いです。Modifierでベベルをするメリットは、一度ベベルした後に、ベベルする前のモデルの形状に戻したり、ベベルの幅を都度変更できる点です。

![image (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206272/9eae0165-5160-dadf-9661-ba918ff08ecc.png)

例えば、Modifierをすることで面を追加するので、ポリゴン数が増加します。ポリゴン数が多いとゲームなどの用途にはあまり向いていないので、Normal mapの情報として、ベベルの情報をローポリゴンのベベルする前のモデルに焼き付けます。このように、ハイポリモデルとローポリモデルを行き来するときに、Modifierを利用することは便利です。


###ベベルシェイダー
Blenderでは、Modifierによるベベルの他に、実際にモデルには、ベベルを施さず、レンダリングされる画像にベベルが反映されるような方法もあります。マテリアルのノードにベベルノードをつなげると、outputされる時に計算される光の軌道を、ハードエッジ部分だけベベルを適応して計算してくれます。ベベルノードについては以下を参考にしてください。ベベルをする必要がないので、Blenderでのレンダリングする際には、便利な機能です。
https://docs.blender.org/manual/ja/2.90/render/shader_nodes/input/bevel.html
https://dskjal.com/blender/hardsurface-modeling.html

## ベベルがうまく効かない場合の対処法

ベベルがうまくいかない理由には、大きく二つの可能性が考えられる。

1. モデルのスケールが初期化されていない。ベベルは、モデルデータ自体から変形を加えるので、scaleなどを変えた場合は、ベベルする前に必ずCtrl + AでScaleとrotationを初期化しておくとよい。
2. ベベルをしようとしている辺や面が、重複している可能性があります。Edit modeの状態で、ツールバーからMesh > Clean Up > Merge by Distanceで重複しているものを整理しておくと良いです。

### 特定の辺や、面だけをベベルする

モデル制作をする際に、角ではない部分に頂点や辺が必要になる場合があります。しかし、ベベルをするとこの、角ではない辺や、ベベルしたくない場所までベベルされてします。

ベベルしたい場所を選択するために、Limit Methodの設定を行うことができます。

この設定をすることで、特定の辺のみをベベルすることができます。

例えば、Wightを選択したい場合、Edit modeでEdge Dataから設定できる、Bevel Wightの値に基づいて、ベベルをする場所とどの程度ベベルをするかを決定することができます。(濃い青色で表示されているのが、bevel Weight = 1 の部分である。)


![image_(6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206272/87b1f5e4-b033-1970-507e-57fa481f189f.png)
![image_(7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206272/13dc2a58-c98d-186d-41f4-fa8af55eca16.png)

##最後に
Blenderを使ってワクワクを作る仲間を募集しています!! 興味があれば、メールやDMください!!
https://withid.jp/