面取りの話
鉄道車両の形は、ざっくり言えば直方体ですが、各辺や頂点に注目すると、隅が丸めてあります。面を取っているのではなく隅を取っているんじゃなかろうかと個人的には思っていますが、このことを面取り(Beveling)といいます。
この面取りをどのように構成するか困っていた時に、ネット上に整理された文献が乏しかったので、ここにまとめておこうと思います。
一般的に、平面であるポリゴンで丸っこいものを作るには、細かくたくさんのポリゴンに分割するしかないと思うかもしれません。しかし、VRMのようなリアルタイムレンダリングを前提とする場合は計算量を軽減するためできるだけポリゴン数を少なく抑える必要があります。
ここで、ポリゴンの法線をうまく使う方法を考えます。
法線とは、ふつうの3次元空間内の話で言えば、「ある面に対して垂直なベクトル」と定義されます(ベクトルという言葉に慣れていなければ、直線と理解してよいです)。3次元の仮想空間上に浮かぶポリゴンは三角か四角の平面でしたから、単純に考えれば、ある一つのポリゴンに垂直な法線はただ1つしかありません。ですが、本当は、ポリゴン1枚につき1本の法線を与えるのではなく、ポリゴンを張る頂点1個につき1本の法線を与える仕組みになっていて、バラバラの向きを向いていてよいことになっています。(これはあくまでコンピュータ上の話であって、"常識的"なユークリッド空間の性質とは異なります。)
そして、三角形ポリゴンの3つの頂点に対して別々の向きの法線を与えることによって、ポリゴンがなめらかな曲面であるかのように見せかけることができるのです。
一つ一つの法線の設定を手動でやるのは現実的でないので、モデリングソフトが持つ機能を使うことを考えましょう。mayaの場合は、「ソフトエッジ」のコマンドです。しかし、こういう機能はもともと、人間の体のようなものを想定しているようで、普通にやるとうまくいきません。少々工夫が必要です。
↑うまくいかない例1です。単純にソフトエッジを施しても、求めるような結果にはなりません。
↑うまくいかない例2です。(2)も切り落としをもっと細かくすれば、なめらかに見えるかもしれませんが、現実的な方法ではありません。(3)では、求める結果にだいぶ近づいてはいますが、隅以外にもソフトがかかり変なグラデーションがついて見えます。(この絵だとわかりにくいですがVRMレイアウターに持って行くと違和感が出ます。)
↑各側面の中心部分の平らが守られるように、隅のポリゴンを分割してソフトエッジをかけました。自分の方を向いている角は、だいぶ理想に近づいてきました。
↑隅のポリゴン分割とベベルを組み合わせ、ソフトエッジを施したのが(6)です。側面の中心部分は均一=平らが守られていますが、隅だけ丸く見えます。
ベベル処理の分割数を増やしてみた例です。これくらいの大きさの立方体では、真ん中と右に大きな差異は見られません。あまり分割を多くしなくてもよいのです。
オレンジ色のポリゴンは、分割されてはいますがすべて同一平面上にあります。一見すると無駄な分割にも見えますが、少ない手間で最大限の見栄えを得るための重要な鍵です。
| 固定リンク
「VRM:研究」カテゴリの記事
- VRMNXの時間系イベントが使いにくいなあと思っているアナタへ(2019.12.24)
- [VRMNX] フレーム同期の話(2019.07.18)
- [Python] リスト型をベクトルに見立てて計算したい(2019.06.16)
- VRMNXのレイヤーベース地形を使ってみよう(前編)(2019.05.18)
- [VRMNX]自動踏切モジュール(2019.01.25)
この記事へのコメントは終了しました。










コメント