- 点群からB−Spline曲面…失敗の巻きーー
2005.12.31
で考えていたロジック実装であるが休日を利用して少し進めていた。この間若干の方針変更を行った。
まじめにB-Spline曲面で張るというのはかなり重そうだと思うしデバックも大変だ。そこでリーゼンフェルトB-Splineでまず感触を掴んでみようと考えた。まじめにB-SplineのC/Pを求めるのはあきらめて点列をそのままC/Pで代用してしまおうという考えだ。ある程度のパッチ数で張ればかなり良い近似になるはずである。ただしパッチ間の連続性ほとんど無い(C1連続にならない)面になる。まぁもともと点群から近似したものだからとりあえずは良いだろう。ハッキリ言えばかなり手抜きであるが実装は100分の1はお手軽になる。
ということで実装してみた。(モデルはStanford-Bunnyを使用)
ガーン!!かなり酷い形がまったく崩れてしまっている。
調べてみるとC/P配列の設定のバグであった。でもって再度。
んっ!?首が無い!!どうもパッチ数が足りないようである。そこでパッチ数を増やしてみた。
なにか変である。やっぱり首が無い!!。で、さらにどんどんパッチ数を増やしてみたが結果は大差ないのである。あるパッチ数におけるリーゼンフェルトB-Spline曲面のUV線は
こんな感じである。
いきなり起伏が大きいモデルでやったでもうすこし違う形状でやってみた。Maxplanck像を使用。
点群を得て、区画に分類して、
接平面を推定=>陰関数を生成=>パラメータライゼーションと実施して頂点にUVをマッピングする。さてリーゼンフェルトB-Spline曲面でフィッティング!!
オェーッ今度はのっぺらぼうである。これもパッチ数不足だろうといことでパッチ数を増加させてみた。
さらにパッチ数を増加!!
こうなったらもっと増加だ!!
形状は良いがパッチの不連続性も敬著に見えてきてしまう。しかし実に数千パッチである。これでは普通にメッシュでデータを持っておいたほうが良い。
- さて、こうなった理由は明らかになっている。
パラメータライゼーションから得られている写像F:(u,v)->(x,y,z)
からC/Pとの関係を調べてみると、
16個の格子点がUV上のC/Pである。でもってそこから伸びた線の先がメッシュとその座標である。Stanford-Bunnyの時のを見てみると、
となっていて最初っから頭部が欠損しているのだ。でもってこの原因はパラメータライゼーションにあった。このモデルのパラメータMAPを見てみると、
となっていて局在化した場所が丁度頭部にあたる。そうとうな密集であるから均等なステップでC/Pを生成してもこの部分を詳細には表現できないのである。原因は分かったのだが手抜きで対応できるレベルでは無い。何とか手抜きのままやるにはこのパラメータMAPが局在化しないようにしてやればよさそうだ。というのも実装しているパラメータライゼーションはTutteの論文が元でλ係数が全部1なのである。当然実装が楽だったからそうしたのであるが。
Tutte |
優秀なSIGGRAPHの例 |
|
| できればこんな感じになればいい。
そこで現段階の資産でできそうなFloater
shape preservingとMean value を実装してみることにした。
Floater shape preserving |
Mean value |
|
| みためにテクスチャがシャープでTutteの方法より綺麗だ。しかし駄目である。パラメータマップの各点を節点と考えてバネモデルによる歪を抑えれば良いかもしれない。(stretchを最小にする方法もあるようなので)
.
注:今回パラメータライゼーションでは以下の論文を実装したが上記の結果イコール論文の結果ではないかもしれない。これは私の理解力と実装レベルが貧弱だから。
Mean value coordinates Michael S.
Floater SINTEF, Postbox 124, Blindern, 0314 Oslo,
Norway Received 8 May 2002; accepted 20 December
2002
※これら計算結果はWCCTLによって得られたものです
|