CC_16 CloudCompareのメッシュ作成その1
NEW
2026.07.27
- 3Dデータ
- ライブラリ
- CloudCompare
CloudCompareでメッシュを作成する方法を数回にわたってご紹介します。点群間を三角メッシュで埋めることは、CAD等他のアプリケーションで読み込める形式(stl,objなど)に変換するためには必須の作業です。メッシュ化することで面積などの情報も取得できます。メッシュ化する方法はいくつかありますが、ここではまずもっともシンプルな方法と、次いでラスタライズ機能のメッシュ出力を使う例をご紹介します。

今回のサンプルデータ(CC_016.ply)は、このページ下部のリンクからダウンロードできます。CloudCompareを起動後、まずCC_016.ply を3Dビュー上にドラッグアンドドロップしてください。
■メッシュ生成機能(Edit→Mesh)
最もシンプルにメッシュ化する方法はメニューバーのEdit→Meshを使う方法です。DBツリー上でCC_016.ply をクリック、メニューバーのEdit→Mesh→Delaunay2.5D(best fitting plane※1)を選択→Triangulate画面が表示されます。

Edit→Mesh→Delaunay2.5D
Delaunay(ドロネー)は三角メッシュを生成するための手法で、Triangulate画面・Max edge lengthでは三角形の一辺の長さの上限※2を設定します。設定した長さを超えた場合はメッシュとして生成されず、逆に0の場合は長さの上限なしと扱われます。ここではデフォルトの0のままでOKします。
生成されたメッシュがDBツリーに追加されます。メッシュを選択するとPropertiesに情報が表示されます。まず、Noamals(法線)にチェック→メッシュに陰影が表示されます(法線は、メッシュ生成時に計算され全点に付加された情報で、メッシュの向きを示すものです。法線については別の回に詳しくご紹介する予定です)。色付きでは表面形状を視認しづらいので、Colorsの「RGB」を「None」に変更してください。点群全体が隙間なく微細な凹凸で埋めつくされている状態が見て取れます。

メッシュとProperties
Propertiesの下段、Wireframeにチェックを入れ、3Dビュー上でズームしていくと、個々のメッシュを形成する三角形が現れます。Facesはこのメッシュの総数を表し、数に比例してデータサイズも増加します。Wireframeはメッシュの描画方法で、チェックON⇔OFFで、線描画⇔面描画を切り替えられます。

WireframeON+ズームした状態
メッシュをCADで読み込める形式にするには、メッシュをDBツリーで選択し、File→Saveをクリック→ファイルの種類からSTLを選択します(点群データ保存時には、ファイルの種類にSTL, OBJ等は表示されません)。「editMesh」等のファイル名をつけて保存してください。STLはメッシュ毎に座標値・法線を保持し、色情報は持ちません。

保存時、ファイルの種類からSTLを選択
上記のメッシュ生成は、シンプルかつ全点を使用した元データに忠実なメッシュになりますが、点群の乱れをそのままメッシュ形状として拾ってしまう、ファイルサイズが大きくなることなどから、用途によっては適さない場合もあります。
■ラスタライズ機能でのメッシュ出力
ラスタライズは点を集約、補完して新しい点群やメッシュとして出力したり、等高線を作成できる機能です。(ラスタライズについては、CC_12CloudCompareのRasterize機能(ラスタライズその1-点の集約・補完) CC_13 CloudCompareのRasterize機能(ラスタライズその2-等高線作成) でご紹介していますので、機能の詳細はそちらの回をご参照ください。)
ラスタライズの利点は、点群の乱れなど細かな起伏は拾わずに、凹凸の特徴を保持したメッシュを作成するための調整がきくところです。
DBツリー上でCC_016をクリックで選択し、メインツールバーの「ラスタライズ」ボタン(格子柄アイコン)をクリック、またはメニューバーのTools→Projection→Rasterizeをクリックします。

ラスタライズ画面・UpdateGrid実行後
点群の元データは、Hapimo3Dを使用し、約80cmの距離から路面を撮影しました。点間距離はXY方向で約1.5mmです。これをグリッドサイズ3mm、Z 値は平均値使用、空白セルは補完(最大10mm)に設定、Update Gridした結果が上記となります。データ全体がXY方向3mm×3mmの空間に分けられ、各空間に点が1つずつ配置されます。このとき各点の座標値は、X,Yが空間の中央の座標、Zは空間内に存在した元点群のZ値の平均値になります。画面下部「Mesh」をクリックすると、メッシュデータとして出力されます。
ラスタライズ画面を閉じると、DBツリーにメッシュが追加されています。メッシュを選択→PropertiesでWireframeにチェックを入れ、ズームしてみるとメッシュが整然と配置されています。Facesのメッシュ総数は、Edit→Meshで作成したメッシュ総数のおよそ1/4になっています。

WireframeON+ズームした状態
メッシュをDBツリーで選択し、File→Saveをクリック→ファイルの種類からSTLを選択します。「rasterMesh」等のファイル名をつけて保存してください。
■STLファイルの読み込み
作成したSTLファイルは、CloudCompareで読み込みできます。editMesh、rasterMeshを3Dビュー上にドラッグアンドドロップしてください。STL化の段階で色情報は失われているので、色なしメッシュの陰影で描画されます。

中央部凹凸部分比較・editMesh(左)とrasterMesh(右)
メッシュの密度はeditMeshが上ですが、路面の凹凸形状としてはrasterMeshのほうが把握しやすくなっています。センサーの精度、点群の密度、対象物、何を計測したいかによって適したメッシュの作成方法は異なります。メッシュの状態を見ながら、目的に沿うものになるように調整することが重要になります。
■メッシュの面積を計測
Meshの面積は、該当メッシュをDBツリー上で選択してからEdit→Mesh→Measure surfaceで計測できます。結果はCloudCompare画面下部のconsoleに出力されます。

Measure surfaceと結果の出力
editMeshの面積計測結果
[Mesh Surface] Mesh ‘Mesh’: S=413950 (square units)
[Mesh Surface] Average triangle surface: 1.5525 (square units)
rasterMeshの面積計測結果
[Mesh Surface] Mesh ‘Mesh’: S=334854 (square units)
[Mesh Surface] Average triangle surface: 5.24028 (square units)
S=以下にメッシュの総面積が、Average triangle surfaceには個々の三角メッシュの面積の平均が表示されます。editMeshはすべての点をメッシュ化しているため、個々のメッシュの面積は小さく、凹凸をすべて拾うぶん総面積は大きくなります。rasterMeshはラスタライズの段階で点が集約されたので、editMeshに比べ個々のメッシュは大きく、総面積は小さくなります。メッシュが細かすぎても粗すぎても、実際の形状から乖離することになりますので注意が必要です。
※1 Delaunay2.5D…XY planeとbest fitting planeの差異
Delaunay2.5D(XY plane)では、XY平面に沿うように三角メッシュ生成を行います。対してDelaunay2.5D(best fitting plane)は、選択したデータにフィットする平面を設定し、その平面に沿う三角メッシュを生成します。軸に対して傾きがある路面データを使って、それぞれXY planeとbest fitting planeでメッシュ化した例が下記になります。生成されたメッシュの形状の違いが、中央の凸部に顕著に表れています。

生成メッシュ比較・XY Plane(上)とbest fitting plane(下)
※2 Max edge length設定による差異
Triangulate画面・Max edge lengthに数値0を設定した例と、10を設定した例が下図になります。左図の0を設定した例ではすべてメッシュで埋められていますが、右図では中央部に穴があります。点間距離が10mmを超えているため、メッシュが生成されなかった箇所です。

生成メッシュ比較 Max edge length設定0(左)と10(右)
■サンプルデータのダウンロード
・CC_016…路面撮影データ・軸補正済み(CC_016.ply)をzip形式で圧縮したもの ファイルサイズ約1.6MB