ソリッド集合演算(CSG)だけで行う加工シミュレータⅢ
問題点が明確になった。
前回書いたように
1)処理速度が遅い
2)メモリ使用量の増大
これに加えて
3)空中に浮いた形状が残る
という問題。3)はソリッド集合演算(CSG)だけでやったために浮き彫りになった。
本来なら削られてどこかに吹っ飛ぶか落ちてしまう残骸のはず。
大問題だ。これは簡単には解決できそうも無い。
さて、1)、2)は実は同じ原因に起因している。
それはメッシュが処理が進むにつれてどんどん細かくなっていくために発生する。
考えられるのはさらに処理速度を上げる、メッシュを再構成して簡易化する。
前者は相当困難。(さんざん改良し続けてきたから)。後者は、、これも困難。
しかし、メッシュ簡易化はいくつも方法があるのでフリーソフト等で試してみたが元のメッシュが綺麗でないと破壊的な結果になってしまった。有名なqslimも試してみたが私が生成しているメッシュでは残念な結果だった。これはQEM法が悪いのでは無く、こちらが与えているメッシュの品質にある。
仕方ないので一から自作することにした。基本はedge-collapse法。
つまりファセットを連結したエッジを縮退させてしまう。
ところがそう簡単では無い。
1)反転
2)重複(黄色と緑が重なってしまう)
3)1ファセットだけが突き出してしまう
これらの問題に加えて粗悪なメッシュでも簡易化するために独自の方法でedge-collapseする方法を考えてみた。
アルゴリズムの基本はEquiAngle Skew (ひずみ度). を修正箇所のウェイトとして評価結果が最小の場所から修正(edge-collapse)していく
さらに修正箇所の近傍では続けて修正せずに後回しにする。
また修正箇所のエッジに隣接するファセット群の平滑度と位相整合性も考慮する。
これを複数回繰り返して簡易化を行う。
上記の方法で問題は(なんと!!)概ね解決出来たのだ。
ただ、簡易化は出来ているが滑らかさが所々ダウンしてしまっている。これはまたいつか考えてみたい。
実装はHisuiとC++で行った。
簡易化前
簡易化後
重ねてみると