エンボス in 3Dモデル
とある考えのもとに、Metasequoiaスクリプトとして「emboss.py」(仮)を作ってみました。Metasequoiaの機能と見分けるため、ベベル(bevel)や押し出し(extrude)以外の単語を使って、エンボス(emboss)と呼ぶことにしておきます。
※とはいえ、ピクセルシェーダによるバンプマッピングというわけでもありません。
- 「押し出し」の「通常」や「ベベル」に似た加工ですが、同じではありません。
- 基本的には以下の画像のように、「Create text」によってフォントから生成されるような3Dモデルへの適用を想定しています。
- 3Dで演算しているので、もとのモデルはどちらを向いていても処理できます。(ただし、どんなものでもきれいに見えるというわけではありません)
- 当面の目標は「前から見てきれいに見える」ところまでです。優角(180°<θ<360°:reflex angle)であっても、見えないところに不要なポリゴンを生成しています。
スクリプトを適用してみる
こちらは45°傾斜になる設定(size = 10, depth = -10)で試した結果です。上から「元のモデル」「1回適用」「2回適用+近接する頂点をくっつける」の状態のスクリーンショットです。2回適用してもうまくいくようですね。それを超えるときれいでない部分まで、前方から見えるようになります。 | |
同じく45°傾斜になる設定です。文字ではなく適当な向きにそろったポリゴンに適用した結果です。エッジ表示をしているので、このスクリプトの性質がわかるかと思います。このスクリプトは、輪郭になっているエッジの外に矩形を追加し、輪郭になっているコーナーの外側にファンを追加します。追加の頂点の位置関係は、スクリプトの直接書き変えながらも、幅と深さと、ファンの分割角度をパラメータとして変更できます。 | |
実装を最適化していないので重くなりますが、緩い角度になる設定を使えば、多段適用してもきれいな結果が出てきました。そこで、パラメータを変えながら3段階適用してみた結果です。 |
「とある考え」というのは、「これで作れる素材を使って〜しよう」というものですが、それは進展があった際のお話としましょう。
Metasequoiaスクリプトの余談
いくつかの点で時間を要しました。
- MetasequoiaスクリプトはPythonベース
- Python 2.2.3 (Metasequoia 3.0 Beta 11現在)
- MQPointで手軽な「複製」「スカラー * MQPoint」などのメソッドが見当たらない模様。
- 任意軸回転は、Quaternionクラスの自作で解決した。
- 行列(MQMatrix)はあるが、用意された回転操作は、オイラー角(MQAngle)ベースのメソッドしかない。
- 関数内のエラーが、トップレベルの呼び出しのエラーとして知らされるので、問題の修正が難しい。