CG 雑記
CG作業は時間と労力がかかるので、自動でできるものはなるべくコンピュータにまかせたい。
やるべきことはいっぱいあるし納期もすぐそこ。。そこでできれば効率的な進行やスクリプトなどを考えながら作業していきたい。
ときには力技も必要かもだが、体力的にも年々苦しくなってくるのである。
モデリングをしているとエッジの両隣にエッジを加えることは日常茶飯事です。
とくに工業製品など曲面と直線がいりまじるオブジェクトには、
スムースシュードを止めたり、サブディビジョン化など、、で欠かせない作業ですね。
例えばAをBにしたい。(この形状なら簡単なのでいいが通常はたいてい複雑な形状なのである)
残念ながらエッジを選んでハイ出来上がりのスクリプトが書けない。。。(どなたか作られた方いないだろうか。皆地道にやってるんだろうか)
片方ずつのエッジのアッドなら標準のベベル機能で楽にできるが、
いっぺんに両側にエッジを簡単に等距離に加える楽な手段はないだろうか。
さて、SoftImage (&/XSI
以下SIorXSI)7.5を使用しています。(2011ライセンスですがまだ実務では使用していません。)
そのベベルオペレーションのなかに丸み付けの項目があります。サブディビジョン1にすると中点(エッジ)がアドされますので、
これを使って上記ができないか、ということでやってみますと、
3点重なるところでは挙動が変わりますのでそのままだと複雑な形状には無理がありそうですが、使いどころを考慮すれば使えるかもです。
中点(エッジ)をもとの位置にするよう目視で合わせていきますと、シャープさの値2.51415・・・という(不気味なw)数字です。
そういうわけでこのままでは使わないかもしれませんが、この数字の根拠を調べて見ようと思いました。なにかのヒントになるかもしれません。
標準オペレータなので内部の動作は伺い知れませんが、当該箇所のヘルプを読みますと、
シャープさ「プロファイルのシェイプを制御します。値が1の場合は、円弧状のセグメント(デフォルト)を使用します。
値の増減によって、隣接するポリゴンのタンジェンシの影響度または張力を増減します(ベジェ制御ハンドルの長さを調整するのと同様です)。
値が0の場合は、プロファイルが平らになります。」
ということはベジェ関数でなにかしているのかもしれないと思い。CGでは至極良く使うベジェ曲線(関数)を勉強するいい機会とも思いました。
曲線の関数ですと、スプライン曲線(B-スプライン、その発展NURのB-スプラインであるNURBS)とベジェ曲線を良く聞きますしCGでもよく使います。
どちらも多項式で数点決めれば曲線がきまるのでベクトル作業にはなくてはならない手段でしょう。
ベジェ曲線Wikipediaを見てみると、
「フランスの自動車メーカー、シトロエン社のド・カステリョ (Paul de
Casteljau) とルノー社のピエール・ベジェ (Pierre Bezier)
により別々に考案された。」とのこと。
そういうことがあルノーとは、知っとろえませんでした。車のCAD設計に使うために考案されたんですかね。NURBSもそうだと話を聞いたことがあります。
必要は発明の母ですね。暗号はもちろん圧縮技術(潜水艦が浮上したときにすぐデータを送信できるよう)も軍事から発祥したものですから、
コンピュータやソフト、インタ−ネットは改めて言うまでもなくこういう技術の集大成ですね。というかコンピュータの端緒も弾道計算でしたか。
読んでみると、少なくとも原理は判りやすくてほっと(笑)しました。
一般化式ではいかめつい形ですが、普通に解けば何のことはない?ですね。なるほど〜。
ちなみに私は数学の専門家ではありませんので以下の数式の厳密さなど全く自信がありませんし一切責任もてませんのでご承知おきくださいませ。
3次ベジェ曲線(4点で制御)
CGではこれが多いでしょう。ここでtの値が0から1までの点群がベジェ曲線となります
ノートのスキャンで申し訳ない。超強度の悪筆。。。しかも漢字もかなり忘れている。。
参考まで
2次ベジェ曲線(3点で制御)
※二次ベジェ曲線は、B-スプライン(二次)曲線と全く同じ形ということです!
よく使うBスプラインも知ることができて得した気分ですw
さて、ベジェ曲線がなんとなく判ったところで、今回の問題、ベベルオペレーションのシャープさの数字の正体を探る旅に出かけますw
簡単なモデルで考察してみます。
まずは正規化(XSIでのプロパティの設定スライダーにあわせる)
は考えずにaの値(ベジェハンドルの長さに相当)を求めていきます。
3次ベジェだろうと仮定しています。
なんとなく数字がでてきたが、rはベベル幅で任意の値で、シャープさはこの値に関係ないので、rには関係なく、というかrとaに一義の関係がないといけません。
aを求めるのが、αを求めることになります。
αというか、XSIのスライダに正規化したβαが求まったようです。
なんかそれらしい数字がでましたが、2.41421356・・・実測値2.51415・・・と微妙に(笑)合いません。。
計算とか仮定が間違ってるのかなー。ここで早々に諦めますよ。
a=0,1のときは合うのでなにかベジェを使ってるらしいような気もするんですが、違うアルゴリズムなんですかね。
まあ今回ベジェの勉強ができたのは良かったです。