LRTKレフィクシア株式会社

点群OBJのゼロ面積ポリゴンを除去する4つの修復手順

ゼロ面積ポリゴンとは何か

点群から生成したOBJをアップロードした際に、読込エラーや変換停止、面の欠落、陰影の乱れなどが発生する場合は、OBJ内にゼロ面積ポリゴンが含まれていないか確認する必要があります。

ゼロ面積ポリゴンとは、面として定義されているにもかかわらず、幾何学的な広がりを持たないポリゴンです。三角形であれば、3つの頂点のうち2つ以上が同じ位置に重なっている場合や、3点が一直線上に並んでいる場合に面積がゼロになります。

たとえば、異なる頂点番号を持つ3つの頂点が記録されていても、そのうち2つの座標が完全に同じであれば、三角形としての面は形成されません。頂点番号だけを見ると正常に見えますが、実際の座標を使って面積を計算するとゼロになります。

3つの頂点が異なる座標を持っていても、すべてが一直線上に並んでいれば同様です。この場合、面は三角形ではなく一本の線分に縮退しています。こうした面は、縮退ポリゴンや退化ポリゴンなどと呼ばれることもあります。

厳密には面積がゼロでなくても、極端に小さい面積しか持たないポリゴンが問題になる場合もあります。計算環境によっては、非常に小さな値がゼロに近い値として扱われ、法線計算や面の三角形化、簡略化などの処理が不安定になるためです。

OBJは、頂点座標、テクスチャ座標、頂点法線、面、グループ、材質参照などを記述できる形式です。点群そのものを頂点だけで保存することもできますが、点群から表面を生成したメッシュをOBJとして保存するケースも多くあります。

ここで注意したいのは、頂点だけを含み、面の記述を含まないOBJには、ゼロ面積ポリゴンは存在しないという点です。ゼロ面積ポリゴンは、面が定義されたメッシュで発生する問題です。

実務では「点群OBJ」という言葉が、点だけのOBJと、点群から生成した三角形メッシュの両方を指すことがあります。そのため、修復作業を始める前に、対象ファイルに面の情報が含まれているかを確認する必要があります。

面が存在しない点群形式のOBJで読込エラーが起きている場合は、ゼロ面積ポリゴン以外の原因を調べなければなりません。頂点座標の形式、文字コード、座標値の範囲、ファイル容量、アップロード先の対応条件などを確認します。

一方、面を含むOBJで、変換中の停止や部分的な表示欠落が発生している場合は、ゼロ面積ポリゴンを含む形状異常が原因候補になります。問題面を正確に検出し、周囲の形状や属性を壊さないように修復することが重要です。

点群OBJアップロードで問題が起きる理由

ゼロ面積ポリゴンが含まれていても、すべての環境で必ずエラーになるわけではありません。問題面を読み飛ばして表示する環境もあれば、警告を表示しながら処理を続ける環境もあります。

しかし、アップロード後にサーバー側でメッシュ変換、法線生成、簡略化、体積計算、表示用データ作成などが行われる場合、ゼロ面積ポリゴンが処理を妨げる可能性があります。

三角形の法線は、面を構成する2本の辺ベクトルを利用して計算されます。面積がゼロの三角形では、外積の大きさもゼロになるため、安定した方向を持つ法線を求められません。

法線を正規化する処理では、ベクトルの長さで各成分を割ることがあります。長さがゼロである場合、計算結果を正常に決められません。処理系によっては問題面を除外しますが、処理が停止したり、不正な値が後続工程へ渡されたりする場合もあります。

ゼロ面積ポリゴンは、表示上の異常にもつながります。面が黒く見える、特定の角度で消える、線のように表示される、周囲だけ陰影が乱れるといった症状です。

面積が極端に小さいポリゴンが重なっている場合は、表示する面の優先順位が不安定になり、ちらつきが発生することもあります。ただし、ちらつきは重複面でも発生するため、ゼロ面積ポリゴンだけに原因を限定せず、重複面の有無も調べる必要があります。

点群からメッシュを生成する際には、点密度の偏りやノイズ、欠測、位置合わせのずれなどが形状へ反映されます。非常に近い位置に複数の点が存在すると、それらを結ぶことで極端に細い三角形が作られることがあります。

複数の点群を結合した境界では、同じ位置に異なる頂点が重なる場合があります。境界の整理が不十分なまま面を生成すると、頂点番号は異なるものの、座標が同一である三角形が作られる可能性があります。

切り抜きや範囲分割も原因になります。メッシュを複雑な境界で切断すると、交差部分に非常に短い辺や小さな面が生成されることがあります。その結果、見た目では判断しにくい縮退面が残ります。

座標の丸め処理にも注意が必要です。元データでは別々の座標だった頂点が、OBJの出力時に小数桁を減らしたことで同じ座標になる場合があります。出力前には正常だった面が、保存後のOBJではゼロ面積になることもあります。

反対に、必要以上に細かい座標値を保持した場合、実質的には同じ位置にある頂点が別々に残ることがあります。これらが不適切に面へ利用されると、極小面積のポリゴンが増える可能性があります。

点群OBJアップロードの不具合を修復する際は、通信状態やファイル容量だけでなく、ファイル内部の幾何学的な健全性を確認することが欠かせません。

修復前にバックアップと作業条件を確認する

修復作業を始める前に、元のOBJをそのまま保存し、複製したファイルで作業します。元ファイルへ直接上書きすると、修復によって形状や属性が失われた場合に戻せなくなるためです。

元データ、修復作業中のデータ、修復完了後のデータは、それぞれ別の名称で管理します。修復日や版番号を付けておくと、アップロード結果を比較しやすくなります。

OBJに関連する材質ファイルや画像ファイルがある場合は、それらも同じ単位でバックアップします。OBJだけを複製して関連ファイルを移動すると、テクスチャの参照が切れる可能性があります。

次に、対象データの単位を確認します。メートル単位なのか、ミリメートル単位なのかによって、近接頂点を判定する距離の意味が変わります。

単位を確認せずに近接頂点を一括統合すると、本来分離しているべき壁面、段差、配管、縁石、板状部材などが接続されるおそれがあります。反対に、しきい値が小さすぎると、実質的な重複頂点が残ります。

対象物のおおよその寸法も把握します。既知の距離や構造物の大きさを確認し、OBJを読み込んだ際の寸法と一致しているかを調べます。想定より千倍大きい、または千分の一になっている場合は、単位の取り違えが疑われます。

座標値の大きさも確認します。測量座標などを保持したOBJでは、対象物自体は小さくても、原点から非常に離れた大きな座標が使われている場合があります。

大きな座標値を扱うと、処理環境によっては細かな形状の計算精度が低下することがあります。必要に応じてローカル原点の近くへ移動して作業しますが、元の位置へ戻せるように移動量を記録しなければなりません。

さらに、OBJ内に含まれている属性を確認します。頂点法線、UV、グループ、オブジェクト区分、材質参照などが含まれている場合、単純な頂点統合や面削除によって属性が失われる可能性があります。

修復の目的も明確にします。表示だけできればよいのか、距離や面積を計測するのか、体積算出に使うのか、断面作成に利用するのかによって、求められる形状の完全性は異なります。

表示用途であれば、小さな穴を局所的に補間しても影響が少ない場合があります。一方、体積計算に利用する閉じたメッシュでは、わずかな穴や反転面が結果に影響する可能性があります。

修復前には、頂点数、面数、グループ数、材質数、ファイル容量なども記録します。修復後に数値を比較することで、意図しない大量削除や属性消失を発見しやすくなります。

手順1 ゼロ面積ポリゴンを検出する

最初の修復手順は、ゼロ面積ポリゴンを検出し、発生範囲を特定することです。いきなり全頂点を統合したり、問題面を一括削除したりせず、まず現状を把握します。

三角形の面積は、3つの頂点から作られる2本の辺ベクトルを使って求められます。2本の辺ベクトルが平行である場合や、どちらかの長さがゼロである場合、三角形の面積はゼロになります。

検出では、完全にゼロの面だけでなく、ゼロに近い極小面積のポリゴンも対象にします。計算上はわずかな面積があっても、アップロード後の処理で縮退面として扱われる可能性があるためです。

ただし、極小面積を判定するしきい値は、モデルの単位や大きさに合わせて設定しなければなりません。固定の値だけで判断すると、正常な細部まで削除するおそれがあります。

広い地形データと小さな部品データでは、適切な面積基準が異なります。モデル全体を囲む範囲の寸法、平均的な辺の長さ、代表的なポリゴン面積などを参考にすると、過剰な検出を抑えやすくなります。

面積の計算に加えて、一つの面の中で同じ頂点番号が重複していないか確認します。三角形の面が同じ頂点番号を2回以上参照していれば、正常な面にはなりません。

頂点番号が異なっていても、実際の座標が同一である場合があります。そのため、頂点番号の重複と座標値の重複は別々に検査します。

3つの座標が異なっていても、一直線上に並んでいる場合は面積がゼロです。この種の問題は、頂点の重複だけを調べても見つけられません。面積計算または頂点の直線性を確認する必要があります。

四角形以上の面が含まれている場合は、内部で三角形へ分割した結果も考慮します。多角形の頂点順が不適切であったり、自己交差していたりすると、三角形化の途中でゼロ面積ポリゴンが作られる場合があります。

検出した問題面は、可能であれば別の選択範囲や一時的なグループとして分離します。問題面がどこに集中しているかを視覚的に確認すると、原因を推測しやすくなります。

切り抜き境界に集中している場合は、範囲分割処理が原因である可能性があります。複数メッシュの接合部に集中している場合は、結合前の重複頂点や位置ずれが疑われます。

平坦な地面の広い範囲に分布している場合は、点密度の偏りやメッシュ生成条件が関係している可能性があります。細い構造物の周辺に集中している場合は、正常な細部と問題面を慎重に区別します。

植物、フェンス、電線、手すりなどの細い形状では、面積が非常に小さくても形状表現に必要なポリゴンが含まれることがあります。面積が小さいという理由だけで自動削除してはいけません。

検出後は、問題面の数と全体面数に対する割合を確認します。少数の問題面だけが局所的に存在する場合は、部分修復が適しています。

一方、モデル全体に大量の縮退面が含まれている場合は、最終OBJだけを修復するより、元の点群整理やメッシュ生成条件を見直した方が効率的なことがあります。

問題面を検出した際は、使用したしきい値、対象範囲、検出面数を記録します。修復後に同じ条件で再検査し、問題が減ったかを比較できるようにします。

手順2 重複頂点と近接頂点を整理する

ゼロ面積ポリゴンの原因として多いのが、重複頂点や極端に近い頂点です。二つ目の手順では、これらの頂点を適切な条件で整理します。

最初に、完全に同じ座標を持つ頂点を調べます。同じ位置に複数の頂点が存在していても、それだけで必ず不正とは限りません。

OBJでは、テクスチャの継ぎ目や法線の境界を表現するため、同じ位置に別々の頂点や属性参照を持たせることがあります。したがって、座標だけを基準に全頂点を無条件で統合すると、表示が崩れる可能性があります。

優先して整理したいのは、同じ面を構成している頂点同士が同一座標になっている場合です。この状態では、面が正常な広がりを持てません。

次に、非常に近い距離にある頂点を調べます。完全には重なっていなくても、距離が極端に短い頂点を一つの面で利用すると、細長く不安定な三角形が作られます。

近接頂点を統合する場合は、対象データの単位と点間隔を考慮してしきい値を設定します。広範囲の地形だからといって大きなしきい値を使うと、小さな構造物の形状を壊すことがあります。

モデル全体の寸法だけでなく、局所的な平均辺長や点群の取得間隔も参考にします。地面と構造物が混在している場合は、領域ごとに異なる条件を使う方法もあります。

頂点統合は、問題面が集中する範囲だけに限定すると安全です。モデル全体へ一括適用するより、正常な形状や属性への影響を抑えられます。

複数のメッシュ片を結合した境界では、同じ位置にある頂点を統合することで接続が改善する場合があります。ただし、近接しているだけで別々の部材である可能性もあります。

たとえば、地面とその上に置かれた薄い部材、上下に重なる床面、壁と設備などは、位置が近くても統合すべきではありません。距離だけでなく、所属グループや法線方向、接続関係も確認します。

頂点を統合すると、それまで正常に見えていた面がゼロ面積になる場合があります。異なる3頂点で構成されていた面のうち2頂点が一つにまとめられると、面が縮退するためです。

そのため、頂点統合後には必ずゼロ面積ポリゴンを再検出します。頂点整理を行っただけで修復完了と判断してはいけません。

頂点の統合後は、孤立頂点も確認します。面から参照されなくなった頂点は、メッシュ表示には不要な場合があります。

ただし、点群とメッシュを同じOBJ内に保持している場合、面に接続していない頂点が点群として必要なことがあります。孤立頂点を自動削除する前に、OBJの利用目的を確認します。

重複頂点の整理後は、モデルの輪郭や角を確認します。細い部材が消えていないか、段差が丸まっていないか、別々の部材がつながっていないかを調べます。

主要な寸法を測定し、修復前と比較することも有効です。頂点数が減っただけでは、適切に修復できたとは判断できません。形状が必要な精度で保たれていることが重要です。

手順3 不正な面を削除して必要な面を再構築する

三つ目の手順では、頂点整理後も残っているゼロ面積ポリゴンを削除します。面積がゼロの面は、正常な三角形として利用できないため、基本的には削除対象です。

ただし、問題面だけを機械的に削除すると、周囲に穴や切れ目が生じる場合があります。削除前に、その面が周囲のどの面と接続しているかを確認します。

孤立しているゼロ面積ポリゴンや、正常な形状に寄与していない面であれば、削除しても外観への影響は少ないと考えられます。

一方、連続した地表面や構造物の輪郭上にある場合は、削除によって開口部が生じる可能性があります。その場合は、削除後に必要な面を再構築します。

2頂点が重なって線分へ縮退している三角形では、問題面を削除するだけで周囲の接続が保たれることがあります。削除後に新しい境界辺が発生していないかを確認します。

3頂点が一直線上に並んでいる場合は、中央の頂点が別の正常面で利用されている可能性があります。面を削除する際に、頂点まで一緒に消さないよう注意が必要です。

問題面を削除した結果、どの面からも利用されなくなった頂点だけを、必要に応じて後から整理します。面削除と頂点削除を同時に一括実行すると、正常な接続まで失うおそれがあります。

穴を埋める場合は、周囲の境界頂点を使って新しい三角形を作ります。新しい面が極端に細くならないよう、頂点の配置と分割方法を確認します。

凹形状を持つ境界では、単純に扇形に面を張ると、実際の輪郭からはみ出す可能性があります。境界の形状に沿って適切に三角形化する必要があります。

すべての穴を自動的に閉じる処理は避けた方が安全です。点群から作成したメッシュには、窓や開口、設備の隙間など、実際に存在する空間が含まれることがあります。

また、測定できなかった部分を自動補間すると、現況には存在しない面が作られる可能性があります。意図的な開口と、処理によって生じた欠損を区別します。

地表面や路面の小さな穴であれば、周辺形状から補間しても影響が少ない場合があります。ただし、段差、壁際、構造物の端部では、自動補間によって形状が丸くなることがあります。

面を再構築した後は、頂点の並び順を確認します。面の頂点順によって法線方向が決まるため、周囲と逆向きに面を張ると、その部分だけ陰影が変わる場合があります。

表示環境によっては、裏向きの面が見えなくなることもあります。正面では正常に見えても、反対側から確認すると欠落しているように見えるため、複数方向から確認します。

ゼロ面積ポリゴンを削除した後は、重複面も検査します。同じ場所に同じ形状の面が複数存在すると、表示のちらつきや法線の乱れが発生することがあります。

頂点番号が異なっていても、座標上で同じ三角形を構成していれば重複面です。単純な面番号の比較だけでは見つからないため、座標と面の組み合わせを確認します。

非多様体形状についても確認します。一つの辺に通常より多くの面が接続している場合や、面同士が頂点だけで接触している場合、後続処理で問題になる可能性があります。

ゼロ面積ポリゴンを削除した結果、接続状態が変わって非多様体の辺が残ることもあります。面積がゼロの面だけを除去して終了せず、周辺の接続まで検査します。

修復後の面数は、修復前と比較します。問題面が少数だったにもかかわらず、面数が大幅に減っている場合は、削除範囲が広すぎる可能性があります。

逆に、検出された問題面数に対して面数がほとんど変化していない場合は、不正な面が正しく削除されていない可能性があります。

修復前後のモデルを重ねて比較できる場合は、輪郭、標高、断面、主要寸法の変化を確認します。見た目だけでは分かりにくい局所的な変形も発見しやすくなります。

手順4 OBJを再出力してアップロード前に検証する

四つ目の手順では、修復したデータを新しいOBJとして書き出し、再読込とアップロード前検証を行います。

編集画面上でゼロ面積ポリゴンがなくなっていても、書き出し条件によって再び問題が発生する場合があります。座標の丸め、面の三角形化、頂点番号の再構成などが行われるためです。

修復済みOBJは、元のファイルへ上書きせず別名で保存します。どのファイルが修復前で、どのファイルが修復後なのかを明確にします。

材質やテクスチャを利用している場合は、OBJ内の参照先と関連ファイルの名称を確認します。ファイル名を変更した際に、材質ファイルへの参照が切れていないかを調べます。

書き出し後は、現在の編集画面を確認するだけでなく、新しい作業環境へOBJを読み込み直します。実際に保存された内容を検証するためです。

再読込後に、頂点数、面数、グループ数、材質数、UVの有無、法線の有無などを確認します。修復前から大きく変化している項目があれば、書き出し設定を見直します。

再読込したデータに対し、ゼロ面積ポリゴンの検査をもう一度実行します。頂点統合や保存時の丸めによって、新しい縮退面が発生していないことを確認します。

極小面積ポリゴンの検査も同じ条件で行います。修復前後で検出数を比較し、問題面が意図どおり減っているかを確認します。

OBJの面が参照している頂点番号も確認します。面の頂点番号が、実際に存在する頂点の範囲を超えていると、別の読込エラーになります。

面を削除した後に頂点番号を再構成する工程で、参照関係が崩れる可能性があります。通常は書き出し処理によって正しく更新されますが、複数の変換工程を通した場合は検証が必要です。

一つの面内で同じ頂点番号が重複していないかも再確認します。座標上の重複だけでなく、面記述そのものの異常も除去できていることを確認します。

ファイル内に数値として読み取れない座標や、不完全な行がないかも調べます。ゼロ面積ポリゴンを修復しても、文字コードや記述形式に問題があればアップロードできません。

書き出し後のファイル容量も参考になります。不要面や孤立頂点を削除した場合は、容量が少し減ることがあります。

ただし、保存時の小数桁や三角形化によって容量が増えることもあるため、容量だけを修復成功の基準にはできません。形状と属性の検証を優先します。

本番OBJが大きい場合は、問題が発生していた範囲を含む小規模な検証用OBJを作成し、先にアップロードする方法が有効です。

小規模データで正常に処理できれば、修復方法の妥当性を確認できます。ただし、本番データではファイル容量や全体構造に関する別の問題が起こる可能性があるため、最終的には本番データでも確認します。

アップロード後は、処理完了の表示だけでなく、モデルを複数方向から観察します。ゼロ面積ポリゴンがあった領域を中心に、穴、反転面、輪郭の変形、陰影の乱れがないかを確認します。

距離、面積、体積、断面などの計測に利用する場合は、修復前後の代表的な数値を比較します。ゼロ面積ポリゴン自体は計測値へ大きく寄与しないこともありますが、穴埋めや面の再構築によって値が変わる可能性があります。

作業完了時には、削除した面数、統合した頂点数、使用したしきい値、再構築した範囲、アップロード結果を記録します。修復条件を残しておくと、同じ問題が再発した場合に対応しやすくなります。

法線やUVやグループ構造を維持する方法

ゼロ面積ポリゴンの修復では、面を正常化するだけでなく、OBJが持つ法線、UV、グループ、材質などの情報を維持する必要があります。

アップロードに成功しても、テクスチャがずれたり、部材区分が消えたり、陰影が不自然になったりすれば、実務での利用に支障が出ます。

OBJでは、頂点座標、UV、法線がそれぞれ別の番号で管理されることがあります。一つの面が、頂点番号だけでなく、対応するUV番号や法線番号を参照している場合があります。

同じ位置にある頂点でも、異なるUVを持つことがあります。これはテクスチャの継ぎ目を表現するために必要な構造です。

座標だけを見て頂点を統合すると、異なるUVが一つにまとめられ、画像が引き伸ばされたり、別の場所が貼られたりする可能性があります。

テクスチャ境界にある問題面を修復するときは、周囲のUV配置を確認し、再構築した面へ適切なUVを割り当てます。

法線にも同じ注意が必要です。鋭い角を表現するため、同じ座標の頂点に異なる法線が割り当てられている場合があります。

これらを一つへ統合して法線を平均化すると、本来は鋭い角が丸く見えることがあります。反対に、法線の方向がそろっていないと、平坦な面に不自然な陰影が発生します。

ゼロ面積ポリゴンは安定した面法線を持てないため、削除後に周辺の法線を再計算することがあります。ただし、モデル全体を一律に平滑化すると、必要な稜線まで失われる可能性があります。

法線を再計算する場合は、対象範囲や角度条件を確認し、鋭い境界と滑らかな面を適切に区別します。

グループやオブジェクト区分も維持する必要があります。OBJ内のグループは、地面、構造物、設備、作業範囲などを分けるために利用されることがあります。

修復処理でモデル全体を一つのメッシュへ統合すると、アップロード後の選択単位や表示切り替えが失われる可能性があります。

問題面を削除して再構築した場合は、元の面が所属していたグループを確認し、新しい面にも適切な区分を設定します。

材質情報も同様です。再構築した面に材質が設定されていないと、周囲と違う色で表示されたり、既定の材質へ置き換わったりすることがあります。

修復前後では、グループ数、材質数、UVの有無、法線の有無を比較します。面数や頂点数だけを確認していると、属性消失を見逃す可能性があります。

点群OBJを将来別の用途で利用する可能性がある場合は、現在表示に使っていない属性も安易に削除しない方が安全です。元データを保持した上で、アップロード用途に合わせた複製を作る運用が適しています。

修復してもエラーが解消しない場合の確認点

ゼロ面積ポリゴンを除去してもアップロードエラーが解消しない場合は、ほかの形状異常やファイル構造を確認します。

最初に確認したいのは、面が存在しない点群OBJであるかどうかです。面を持たないOBJであれば、ゼロ面積ポリゴンは原因ではありません。

アップロード先が頂点だけのOBJに対応しているかを確認します。OBJには対応していても、三角形メッシュだけを受け付け、点のみのデータには対応していない場合があります。

次に、頂点インデックスの範囲を確認します。面が存在しない頂点番号を参照していると、読込処理が停止する可能性があります。

OBJでは、正の頂点番号だけでなく、記述位置からの相対参照として負の番号が使われる場合もあります。負の番号自体が直ちに不正とは限りませんが、アップロード先の解釈や対応状況によっては問題になることがあります。

面の頂点数も確認します。三角形だけを想定した処理へ四角形以上の多角形を渡すと、内部の三角形化でエラーが起きる場合があります。

多角形を事前に三角形へ変換すると問題を回避できることがありますが、変換後にゼロ面積ポリゴンや反転面が生成されていないか再確認します。

重複面や自己交差面も原因候補です。同じ位置に面が重なっている場合や、一つの多角形の内部で辺が交差している場合、変換が不安定になることがあります。

非多様体形状も確認します。一つの辺に多数の面が接続している形状や、内部と外部を一意に判断できない形状は、体積計算や簡略化に適さない場合があります。

極端に大きな座標値や、数値として扱えない座標も問題になります。座標欄に不正な文字列や無効な数値が含まれていると、形状修復だけでは解決しません。

OBJの途中に壊れた行や、想定外の改行が含まれていないかも確認します。大容量ファイルのコピーや同期が途中で終わった場合、ファイル末尾が欠けていることがあります。

関連する材質ファイルや画像ファイルの不足によって、アップロード全体が失敗する場合もあります。形状だけを検証するため、テクスチャなしの複製でアップロードを試すと原因を切り分けやすくなります。

ファイル名や関連ファイル名に、処理環境が解釈しにくい文字が含まれている場合もあります。まず簡潔な半角英数字のファイル名へ変更し、同一フォルダ内の参照関係を整えて確認します。

ファイル容量や面数がアップロード先の処理能力を超えている可能性もあります。ゼロ面積ポリゴンの修復後も処理が停止する場合は、範囲を分割した小規模データで試します。

小規模データが正常に処理できる場合は、形状異常ではなく容量や処理負荷が原因である可能性があります。反対に、小規模データでも同じ位置で失敗する場合は、その範囲に残っている形状異常を詳しく調べます。

ゼロ面積ポリゴンの再発を防ぐ運用

ゼロ面積ポリゴンを毎回修復するだけでなく、点群取得からOBJ出力までの工程を見直すことで、再発を抑えられます。

まず、点群取得時のノイズを減らします。反射しやすい面、透明な面、細い物体、動いている対象などは、位置が不安定な点を生じさせることがあります。

対象物との距離や取得角度、移動速度を安定させると、後工程で扱いやすい点群を得やすくなります。

同じ場所を異なる条件で何度も取得すると、ほぼ同じ位置に複数の点が重なる場合があります。必要な重複取得と不要な重複点を区別し、メッシュ生成前に整理します。

複数の点群を結合する際は、位置合わせの精度を確認します。同じ表面がわずかにずれて二重に存在すると、その間に薄い面や細長い三角形が作られることがあります。

見た目ではほぼ一致していても、断面表示で確認すると二重面が見つかる場合があります。結合後は境界や重複領域を重点的に検査します。

点密度の偏りも抑えます。極端に密な領域と疎な領域が隣接すると、不均一で細長い三角形が生成されやすくなります。

必要に応じて点群を適切に間引き、局所的な密度差を小さくします。ただし、細部を保持したい構造物まで一律に間引くと形状精度が低下します。

メッシュ生成の細かさは、元の点群精度に合わせます。過度に細かなメッシュを作っても、元データにない精度が得られるわけではありません。

細かすぎる設定では、点群のノイズまで面として表現され、極小ポリゴンが増える可能性があります。反対に、粗すぎる設定では段差や角が失われます。

切り抜きや範囲分割の後には、必ず境界を検査します。複雑な輪郭で切断した場合、短辺や極小面が生成されることがあります。

複数のOBJを結合した後にも、重複頂点、重複面、ゼロ面積ポリゴンを検査します。各OBJが単独では正常でも、結合境界で問題が発生する可能性があります。

OBJを書き出す際の小数桁も統一します。桁数を減らしすぎると、別々の頂点が同一座標へ丸められます。

一方で、意味のない細かな桁を保持し続けると、実質的な重複頂点が別々に残ることがあります。元データの精度と利用目的に合った座標精度を選びます。

アップロード前の検査項目を標準化することも有効です。ゼロ面積ポリゴンだけでなく、重複頂点、極端な短辺、重複面、反転面、孤立頂点、非多様体形状などを確認します。

担当者ごとに異なるしきい値を使うと、出力品質にばらつきが生じます。単位、近接頂点の判定距離、面積の判定基準、法線処理、UV保持、グループ保持などを作業手順として共有します。

アップロード先ごとに条件が異なる場合は、用途別の出力設定を用意します。一つのOBJをすべての環境で使い回すより、元となる高品質データから利用先に合わせた複製を作る方が安全です。

定期的に標準的な検証データをアップロードし、処理結果を確認する運用も役立ちます。変換環境や運用条件が変わった場合でも、本番作業前に問題を発見しやすくなります。

まとめ

点群OBJのゼロ面積ポリゴンは、同じ位置に重なった頂点、一直線上に並んだ頂点、極端に近い頂点、不適切な面分割などによって発生します。

見た目では問題がないように見えても、アップロード後の変換、法線生成、簡略化、面積計算、体積計算などを不安定にする可能性があります。

修復の第一段階では、ゼロ面積または極小面積のポリゴンを検出し、発生範囲と原因を切り分けます。面積だけでなく、同一頂点番号の重複や、異なる番号を持つ同一座標の頂点も確認します。

第二段階では、重複頂点と近接頂点を整理します。ただし、すべての頂点を無条件で統合すると、UV境界、法線境界、細い構造物などを壊す可能性があります。

第三段階では、残った不正な面を削除し、必要な部分だけ面を再構築します。穴を自動的にすべて埋めるのではなく、実際の開口と処理上の欠損を区別します。

第四段階では、修復済みデータを新しいOBJとして出力し、新規読込によって保存結果を検証します。ゼロ面積ポリゴン、面の参照番号、法線方向、UV、グループ、材質などが正常に維持されていることを確認します。

修復後もアップロードできない場合は、頂点インデックス、多角形、重複面、非多様体形状、座標値、ファイルの欠損、容量など、別の原因を調べる必要があります。

ゼロ面積ポリゴンの再発を防ぐには、最終OBJだけでなく、点群取得、ノイズ除去、位置合わせ、点密度の調整、メッシュ生成、切り抜き、結合、書き出しまでを一つの工程として管理することが重要です。

現場で取得した点群を効率よく確認し、OBJアップロードまでの作業を円滑に進めるには、取得時点からデータ品質を意識する必要があります。点群計測や現場データの活用方法を見直す際は、LRTK Phoneを活用した運用も確認してみてください。

現場を3Dで残して、あとから測る。
実際の画面と動画で使い方を確認できます。

LRTK Phoneの使い方・実例を見る
資料請求導入相談
現場をスマホで3DスキャンLRTK Phone実例を見る