Rhino 8では、メッシュオブジェクト(Mesh)の処理機能が向上しました。
この改善により、特にメッシュの交差処理が正確になり、メッシュのブール演算や分割、トリムの性能が改良されています。
3Dプリント用のモデルを作ったり、解析やシミュレーション用のメッシュモデルの作成をよく行う方には嬉しい改善かと思います。
このページでは、シンプルなモデルと複雑なモデル、RhinoとGrasshopperの両方を使用して、新旧バージョンの比較を行い、その性能向上を確認します。(下記内容では、Rhino8はバージョンSR8.8を用いています)
Rhinoで確認(MeshSplit)
まずは、Rhinoを使ってシンプルなモデルで[MeshSplit]の結果を確認してみます。
以下のような三角形メッシュの交差を考えます。
<Rhino7の結果>
Rhino7で[MeshSplit]を実行し、内側の垂直面⇒水平面の順に選択します。
結果的に、一枚だけ分割に失敗しました。
(わかりやすいように分割後の面に色付けしています)
<Rhino8の結果>
次に、Rhino8で[MeshSplit]を実行し、内側の垂直面を水平面で分割することを試みます。
こちらは問題なく、水平面を境に上下に分割できました。
このようにRhino7では、エッジや頂点の位置関係、許容差の設定などにより、一見明らかに交差していても、交差やブール演算に失敗することがよくありました。
Rhino 8では、より正確にメッシュが分割されており、機能が改善されていることがわかります。
Grasshopperで確認(MeshDifference)
もう少し複雑なモデルを用いてGrasshopperでの結果も確認してみましょう。
下図のような無数の小石のようなメッシュ形状が散りばめられている状態から、外枠の曲線を境界として外側部分を[MeshDifference]でトリムすることを考えます。
<Rhino7の結果>
下図のように外側を切り取る用のメッシュを用意し、[MeshDifference]に繋ぎます。
結果は下図のようになります。
交差したオブジェクトは差演算できていますが、完全に内包されたオブジェクトは残っています。
<Rhino8の結果>
下図が全く同じアルゴリズムを使ったRhino8での結果です。
差演算も問題なく処理でき、内包オブジェクトも完全に取り除くことができています。
Grasshopperで確認(MeshUnion)
続いて、同じモデルで台座のメッシュオブジェクトを用意して[MeshUnion]で合成してみます。
<Rhino7の結果>
一部結合に失敗し、内包オブジェクトもすべて残っています。
[Panel]で見てみるとメッシュが一つになっていないことがわかります。
<Rhino8の結果>
問題なく和演算できており、メッシュも一つになっています。
NakedEdge(オープンエッジ)も出力されていないので隙間のないモデルになっていることがわかります。
このようにRhino8ではメッシュ処理機能が向上していることがわかりました。
ただ正確になった分、計算時間は少し重くなる場合もあるようなのでこのあたりは今後の開発に期待したいと思います。
ぜひお試しください!