点群から生成したOBJデータをクラウドや業務システムへアップロードしたところ、表示が崩れる、処理が途中で止まる、面が欠ける、意図しない穴が開くといった問題が発生することがあります。こうした不具合の原因は、ファイル容量や通信環境だけではありません。点群をメッシュ化する過程で生じた接続異常や自己交差が、アップロード後の変換処理や表示処理に影響している可能性があります。ただし、実際に受け付けられる形状や自動修正の動作は、アップロード先の仕様によって異なります。
本記事で扱う非多様体形状は、面要素を持つメッシュOBJを対象とします。OBJは頂点、テクスチャ座標、法線、面などを記述できる形式ですが、面を持たず頂点だけを並べたOBJには、辺や面の接続関係に基づく非多様体判定をそのまま適用できません。点群を三角形や多角形の面へ変換した後のOBJを検査する、という前提を最初にそろえることが重要です。The Library of Congress
非多様体形状とは、局所的な面のつながりが、一枚の連続した表面または境界を持つ表面として整理できない接続状態を含む形状です。例えば、一つの辺を三枚以上の面が共有している状態や、一つの頂点の周囲で面の集まりが複数に分断されている状態などが該当します。面同士の自己交差や重複面は、非多様体と同時に現れることがありますが、位相的な非多様体とは別の検査項目です。編集画面では一見正常に見えても、別の環境へ移した際に問題が顕在化する場合があります。Blender Documentation+2CGAL Manual+2
点群OBJを安定してアップロードするには、ファイルを書き出してから問題を探すのではなく、点群のメッシュ化、形状の整理、OBJ出力、アップロード前検証という流れを一つの工程として管理することが重要です。本記事では、「点群 OBJ アップロード」で検索している実務担当者に向けて、非多様体形状と関連する形状異常を検出するための6つのチェックを解説します。
点群OBJで非多様体形状が問題になる理由
OBJは、頂点座標、面の接続関係、法線、テクスチャ座標などを記録できる3次元形状のファイル形式です。各要素は必須ではなく、頂点だけのデータや、面と法線を含むメッシュなど、内容は書き出し方法によって変わります。点群から三角形や多角形の面を生成してOBJとして出力する場合、元の点群に欠測や重なりがあると、メッシュ化した段階で接続関係の異常が生まれることがあります。The Library of Congress
現場で取得する点群には、遮蔽物の裏側、反射しにくい面、細い部材、足元の影、移動体などによる欠測や外れ値が含まれる場合があります。また、複数地点から取得した点群を統合すると、同じ場所に近接した点が重複したり、位置合わせの差によって表面が二重に形成されたりすることがあります。こうした点群を自動的にメッシュ化すると、本来は一枚であるべき表面に複数の面が生成され、非多様体エッジ、重複面、内部面、自己交差などにつながることがあります。
接続異常を含むOBJでも、作成に使用した環境では表示できる場合があります。しかし、アップロード先で形状の軽量化、三角形化、座標変換、法線再計算、サムネイル生成などが実行される実装では、入力形状の矛盾によって処理結果が変わることがあります。表示できたとしても、穴埋めや面数削減によって意図しない面が生成されたり、細い部材が消えたりする可能性があります。どの処理が行われるかはサービスごとに異なるため、公開仕様や試験アップロードで確認します。
アップロード後に閉じた立体の体積を求める場合は、一般に、境界のない外殻、整合した面の向き、自己交差のない形状といった条件が重要になります。一方、地表面の土量計算では、比較面や基準面との間を評価する方法もあり、入力する地表メッシュ自体が閉じた立体であることを必須としない処理もあります。用途によって必要条件が異なるため、「体積計算には必ず閉じたOBJが必要」と一律に判断しないことが大切です。閉じた三角形メッシュの外向き判定でも、自己交差がないことや構成要素の向きがそろっていることが前提になります。CGAL Manual+1
特に注意したいのは、「穴がある形状」と「非多様体形状」が必ずしも同じではない点です。測量対象の一部分だけを切り出したモデルでは、外周が開いていること自体は意図した状態かもしれません。境界を持つ表面でも、各点の近傍が一枚の表面として連続していれば、多様体境界として扱える場合があります。一方で、一つの辺を三枚以上の面が共有する状態や、一つの頂点で複数の面領域が分断されている状態は、意図した開口とは異なります。データの用途を踏まえて、許容する境界と修正すべき接続異常を区別します。Blender Documentation+1
非多様体形状を検出する前に確認する前提
非多様体形状の検出を始める前に、検査対象となるOBJがどの工程で作成されたものかを整理します。点群をメッシュ化した直後のデータなのか、メッシュ編集を行ったデータなのか、複数のOBJを結合したデータなのかによって、発生しやすい問題が変わるためです。頂点だけを記録した点群OBJである場合は、まず面要素の有無を確認し、メッシュ検査の対象かどうかを切り分けます。
点群から自動生成したメッシュでは、欠測部分の周囲に細長い三角形が作られることがあります。複数のモデルを重ねたり結合したりした場合は、重複面、内部面、交差面が残ることがあります。不要部分を切り取った場合は、切断境界に未接続の頂点、小さな面、意図しない開口が発生することがあります。どの操作を行ったかを把握しておけば、確認すべき箇所を絞り込めます。
検査前には、元データを複製して修正前の状態を保存します。非多様体形状や微小部品の自動修正機能は便利ですが、設定によっては細い部材や小さな凹凸まで削除または統合することがあります。修正後に元の形状へ戻せるよう、取得した点群、メッシュ化直後のデータ、編集後のOBJ、アップロード用OBJを分けて保存します。
座標値の大きさと単位も確認します。公共座標や測量座標を保持したOBJでは、原点から離れた座標値が使われる場合があります。使用するソフトウェアの数値精度や内部表現によっては、表示、近接判定、頂点統合などへ影響することがあります。また、非常に近い頂点を同一と判断する距離がモデルの縮尺に合わないと、必要な頂点まで統合される可能性があります。検出しきい値を設定する際は、モデルの単位がメートルなのかミリメートルなのかを確認し、対象物の大きさと取得精度に合わせて調整します。大きな座標値があるだけで異常と決めつけず、使用環境での再現性を確認することが重要です。
OBJを構成する関連ファイルも確認します。形状の接続状態は主にOBJ本体の頂点と面の参照で決まりますが、材質情報や画像ファイルとの参照関係が崩れていると、非多様体形状とは別の表示不具合が発生します。OBJから材質ライブラリを参照し、材質側から画像を参照する構成もあるため、形状検査と参照ファイル検査を分けると原因を切り分けやすくなります。The Library of Congress+1
さらに、アップロード後の用途を明確にします。閲覧だけに使うのか、断面確認に使うのか、閉じた立体の体積を計算するのか、地表面同士の差を計算するのか、別の3次元データと重ねるのかによって、必要な形状品質が異なります。閲覧用や地表面用であれば意図した開口を残せる場合がありますが、閉じた立体として体積や内外判定を行う場合は、境界のない外殻、自己交差の解消、面方向の整合などを確認します。
検査機能の名称にも注意します。ソフトウェアによっては、境界エッジを「非多様体」の選択項目に含める場合があります。これは、境界が直ちに不正形状という意味ではありません。検出機能が何を数えているかを確認し、境界、三面以上の共有エッジ、ワイヤー状の辺、孤立要素などを分けて評価します。Blender Documentation+2Blender Documentation+2
チェック1 境界エッジと非多様体エッジを抽出する
最初に確認するのは、面の接続関係を示すエッジです。境界のない多様体表面では、一つのエッジを二枚の面が共有し、隣接面の向きも整合します。一枚の面だけに使われているエッジは境界エッジです。三枚以上の面が共有するエッジは分岐を持つため、代表的な非多様体エッジです。面に属さない辺が残っている場合は、ワイヤー状の要素として別に確認します。Blender Documentation+2Blender Documentation+2
境界エッジが検出されたからといって、すべてが不具合とは限りません。地表面の一部を切り出したOBJでは、モデル外周が境界になるのが自然です。建物の外壁だけを表すモデルでも、窓や開口部、切断位置が境界として現れることがあります。重要なのは、その境界が意図した位置にあり、用途上許容できるかどうかです。
モデル中央や連続しているはずの面に境界エッジがある場合は、面の欠損、頂点の未結合、別部品として分かれた面、近接しているだけの頂点などが疑われます。目視では面がつながっているように見えても、隣接する頂点の座標や頂点番号が異なるため、別々の境界として認識されていることがあります。境界エッジを強調表示し、想定外の線がモデル内部に現れていないか確認します。
三枚以上の面が共有するエッジが見つかった場合は、その周囲を拡大して面の構成を確認します。一つの表面から枝分かれする面が接続されている場合、同じ位置の面を縫い合わせた場合、表面と内部面が同じ辺へ接続された場合などに発生します。点群から生成した地表面と別途作成した構造物の面を単純に結合すると、接合部で分岐が生じることがあります。
検出範囲が多いときは、モデル全体を一度に修正せず、領域ごとに原因を分けます。外周部の境界、欠測部の境界、切断面の境界、異常な内部境界、三面以上の共有エッジを分類すると、意図した形状を残しながら問題箇所だけを修正しやすくなります。
境界エッジを自動的に埋める処理を使用する場合は、穴の大きさと周囲の形状に注意します。小さな欠損であれば周囲の面に沿って補間できる場合がありますが、大きな開口を一括で埋めると、実測していない平面や不自然な曲面が生成される可能性があります。特に橋梁下部、配管周辺、植生のある斜面などでは、穴を埋めるよりも元の点群へ戻って再構成した方が適切な場合があります。
非多様体エッジの確認では、検出数だけで良否を判断しません。どの場所に、どのような理由で発生しているかを記録することが重要です。アップロード前の確認記録として、異常箇所の画面、修正内容、残した境界の理由を保存しておくと、後工程で表示不具合が発生した際に原因を追跡しやすくなります。
チェック2 頂点だけで接続された面を確認する
次に、面同士が一つの頂点だけで接続され、その頂点の周囲で面の集まりが複数に分断されていないか確認します。立体表面として連続する面は、通常、辺を共有しながらつながります。一つの頂点に接続する面をたどったとき、連続した一つの扇状領域にならず、互いに行き来できない複数の集まりへ分かれる場合は、非多様体頂点として扱われます。
この状態は、細い突起の先端、複数の部材が接触する場所、不要部分を削除した跡などで発生します。点群メッシュでは、孤立した点や少数の点を周辺へ接続した結果、三角形の集合が一点だけで本体につながることがあります。遠くから見ると小さな突起としてしか見えず、通常表示では見落としやすい問題です。
頂点を選択した際に、その頂点へ接続する面が複数の独立した集まりに分かれている場合は、非多様体頂点の可能性があります。頂点の周囲を面から面へたどり、一つの連続した領域として接続されているかを確認します。単に複数の面が一つの頂点へ集まっているだけでは異常とは限らず、周囲の面の連結性を見ることが重要です。
孤立した小さな面領域が一点だけで接続されている場合は、その領域が必要な形状かを判断します。対象物の細い部材を表している可能性があるため、単純に削除するのは適切ではありません。元の点群を表示し、その位置に実際の測定点が十分に存在するかを確認します。点が少なく、周辺のノイズから生成された形状であれば、削除候補になります。
必要な部材が一点接続になっている場合は、周辺のメッシュを再構成します。接触点付近へ適切な頂点と辺を追加し、面同士が辺を共有する接続へ変更する方法があります。ただし、現実の対象物が接触しているだけで一体化していない場合は、解析用モデルでも別々の部品として分離した方が適切なことがあります。無理に一つのメッシュへ結合せず、独立した形状として管理する判断も必要です。
頂点だけの接続は、軽量化や近接頂点統合によって新たに発生することもあります。形状を簡略化する際に接続部の辺や面が削除されると、小さな面領域が一点接続または完全な分離へ変わる場合があります。反対に、しきい値が大きい頂点統合によって、本来は離れている部品が一つの頂点で結合されることもあります。元データだけでなく、軽量化後のアップロード用データでも接続状態を検査します。
チェック3 重複面と重複頂点を検出する
点群を複数回取得した場合や、別々に作成したメッシュを重ねた場合は、同じ位置に頂点や面が重複することがあります。重複形状は画面上で見分けにくく、ちらつき、表裏判定の不安定化、重なった面の誤選択、不要なファイル容量などの原因になります。重複面が既存の面と同じ辺へ接続されている場合は非多様体エッジにつながることがありますが、完全に別の頂点番号で重なっている場合は、位相検査だけでは見つからないことがあります。
重複頂点には、座標が完全に一致するものと、非常に近い位置に存在するものがあります。完全一致する頂点でも、面の接続情報が別々であれば、連続した表面として認識されません。見た目ではつながっていても境界エッジが残る場合があるため、同一位置または近接位置の頂点を検出し、意図した同一表面であれば統合を検討します。
近接頂点を統合する際は、距離のしきい値を慎重に設定します。しきい値が小さすぎると重複を解消できず、大きすぎると細い溝、段差、角部、近接する別部品などの必要な形状までつぶれる可能性があります。モデルの単位と取得精度を確認し、最初は小さな値で検出結果を確認します。一度にモデル全体を統合するのではなく、問題が集中する場所から段階的に処理する方法が安全です。
重複面は、同じ頂点の組み合わせで構成された面が複数存在する状態だけでなく、別の頂点番号を使いながら同じ位置へ重なっている状態もあります。同じ向きの面が重なっている場合もあれば、頂点順が逆で表裏が反対の面が重なっている場合もあります。表示側で深度競合が起きると、ちらつきやまだらな表示として現れることがあります。
わずかにずれた二重面も確認が必要です。複数の点群を位置合わせした際に微小な差が残ると、同じ壁面や地表面が薄い層のように二重化します。この状態では、完全一致だけを探す重複面検出では見つからない場合があります。断面表示や距離比較を使用し、表面の近くに平行な面が存在していないか確認します。
重複形状を削除するときは、どちらの面を残すかを決めます。周辺との接続が連続している面、元の点群との対応が明確な面、法線方向が周囲と整合する面などを候補にします。重複部分だけを削除した結果、周囲に新しい穴ができることもあるため、削除後は境界エッジを再検出します。
OBJの書き出し設定や部品構成によっては、離れた部品や意図的に分離した面が同一座標の頂点を個別に保持する場合があります。そのため、同一座標の頂点があるだけで直ちに異常とは判断できません。実際に同じ表面を構成している頂点なのか、独立した部品として分離されているのかを確認し、用途に応じて統合します。
チェック4 ゼロ面積や極端に細い面を探す
三角形の頂点が同一直線上に並んでいる場合や、二つ以上の頂点が同じ位置にある場合は、面積がゼロになる縮退面が生成されます。計算誤差を含む実データでは、厳密なゼロだけでなく、面積や高さが極端に小さい面も検査対象になります。多角形では、重複頂点、自己重なり、不適切な頂点順などが別の問題を生むこともあるため、必要に応じて三角形化後の状態も確認します。細長い三角形やほぼ一直線の三角形を検出して修復する機能はありますが、しきい値と修復方法によって周辺形状も変わり得ます。CGAL Manual
点群からメッシュを生成すると、点の密度が急に変化する場所や、欠測部分の境界に極端に細長い三角形が作られることがあります。細長い面が必ず非多様体というわけではありませんが、法線や交差判定が不安定になりやすく、周辺の面と交差したり、軽量化処理で意図しない接続へ変化したりする可能性があります。
面積による検出を行う場合は、モデル全体の縮尺に合わせて基準を設定します。広い造成地の地表面と、小型部材の形状では、許容できる最小面積が異なります。一定値以下の面をすべて削除するのではなく、検出した面がどの場所に分布し、元の点群をどの程度表しているかを確認します。
縦横比が極端な三角形も対象にします。最長辺と最短辺の比が大きい面や、一つの角度が180度に近い面は、欠測範囲を無理に接続している可能性があります。ただし、しきい値に絶対的な共通値はありません。ソフトウェアの既定値をそのまま正解とせず、モデルの解像度と用途に合わせて設定します。CGAL Manual
例えば、配管の裏側、壁際、法面と地表の境界では、離れた点同士が結ばれて細長い面が発生しやすくなります。このような面を削除すると穴が開く場合がありますが、実測されていない範囲を推定面で覆うより、開口として残した方がデータの由来を明確にできることもあります。利用目的に応じて、補間する範囲と欠測として扱う範囲を決めます。
ゼロ面積の面を削除した後は、使用されなくなった頂点も整理します。面にも辺にも参照されていない孤立頂点は、メッシュ用途では不要な場合があります。孤立頂点を削除する機能も一般的に用意されていますが、OBJを点の集合として併用する運用では必要な点を失う可能性があります。メッシュとしてアップロードするのか、点表示も必要なのかを確認してから削除します。Blender Documentation+1
細長い面を修正する場合は、周辺の頂点配置を調整し、形状と点密度に合った三角形へ再構成します。単純な面削除と穴埋めを繰り返すだけでは、別の細長い面が生成されることがあります。必要に応じて元の点群から局所的にメッシュを作り直し、周辺と接続する方法を検討します。
チェック5 内部面と自己交差を確認する
外側から見えない内部面も、点群OBJのアップロードや後工程で問題を起こす原因になります。内部面とは、閉じた立体の外殻として扱う用途で、外側の表面とは別に内部へ残っている面を指します。複数のメッシュを重ねて結合した場合や、地表面と構造物モデルを重ねた場合に発生しやすくなります。
例えば、二つの立体を外見上重ねただけでは、接触部分や貫通部分の面が内部に残ることがあります。外側から見ると一つの形状に見えても、内部には重複面、交差面、独立した閉じた部品などが存在する場合があります。これらが必ず一つの辺を三枚以上の面で共有するとは限らないため、非多様体エッジの検出だけでは十分ではありません。断面、透明表示、連結成分、自己交差などを別々に確認します。
内部面を探す際は、断面表示や透明表示を利用し、モデルの内側を確認します。広い点群モデルでは全体を一度に見るのが難しいため、一定間隔で断面位置を移動しながら確認します。構造物と地表の接合部、複数回取得した範囲の境界、手作業で面を追加した場所を重点的に確認すると効率的です。
自己交差は、一つのメッシュ内の面同士が幾何学的に交差している状態です。非多様体エッジや非多様体頂点がなくても、自己交差が存在する場合があります。逆に、位相的に非多様体であっても、面同士が幾何学的に交差していない場合があります。両者は関係することがありますが、同じ判定ではありません。三角形同士の自己交差を検出する処理も、独立した検査として用意されています。CGAL Manual+1
点群メッシュでは、表面の表側と裏側が近接している場所で、誤った点同士が接続されることがあります。細い板状部材、手すり、配管、植生、金網のような形状では、近接する別の面を同じ表面と判断して三角形が生成される可能性があります。その結果、面が内部を横切ったり、ねじれた状態で接続されたりします。
自己交差を自動検出した場合は、交差している面の一方をすぐに削除するのではなく、どちらが実際の表面を表しているか確認します。元の点群を重ね、点の分布や対象物の構造に沿っている面を残します。両方とも点群から大きく離れている場合は、その領域のメッシュをまとめて削除し、局所的に再構成した方が安定することがあります。
地表面のような開いたモデルでは、閉じた立体と同じ意味での内側と外側を定義しにくい場合があります。それでも、同じ位置を複数の面が横切る状態や、地表の下へ不要な面が垂れ下がる状態は、表示や断面計算へ影響する可能性があります。断面を連続的に確認し、目的とする地表面が一つの層として連続しているかを確認します。
内部面を削除した後は、周囲の接続状態が変化します。非多様体エッジが解消される一方で、新しい境界が生じる場合があります。そのため、内部面と自己交差の修正後には、境界エッジ、非多様体エッジ、頂点周囲の連結性、法線方向を再検査します。
チェック6 法線方向と閉じた形状の整合性を調べる
最後のチェックでは、面の法線方向と形状全体の閉じ方を確認します。法線は面の向きを表し、照明計算、裏面の表示、外側と内側の判定などに使われます。OBJでは法線を記録できますが、法線が省略されている場合や、読み込み側で再計算される場合もあります。そのため、保存された法線だけでなく、面を構成する頂点順と隣接面の向きが整合しているかを確認します。The Library of Congress+1
法線の反転自体は、必ずしも非多様体形状を意味しません。しかし、面の接続関係が正常でない場所では法線を連続的にそろえにくく、反転箇所が接続異常を発見する手掛かりになることがあります。法線または表裏表示を可視化し、同じ連結成分の隣接面が一貫した向きになっているか確認します。
閉じた立体として使用するモデルでは、外殻を構成する面の向きが外側へそろっていることを確認します。一部の面が逆向きの場合、符号付き体積や内外判定に影響することがあります。自動的に外向きへそろえる処理を使用しても、内部面、自己交差、複数の入れ子状部品などが残っていると意図した結果にならない場合があります。先に接続異常と交差を確認し、その後に連結成分ごとの向きをそろえる順序が分かりやすいでしょう。閉じたメッシュの外向き判定は、自己交差がなく、面の向きが構成要素内で整合していることを前提とする処理があります。CGAL Manual
形状が閉じているかどうかは、境界エッジの有無だけでなく、内部と外部を用途上区別できるかという観点で確認します。境界エッジがなくても、面が自己交差している、一つの辺を三枚以上の面が共有している、別の閉じた部品が内部へ残っているといった場合は、意図した単一外殻とは限りません。境界がないことは必要条件になっても、それだけで十分とは限りません。
地表面や壁面など、意図的に開いたモデルでは、すべてを閉じる必要はありません。その場合でも、法線方向を用途に合わせてそろえると、表示や断面処理の一貫性を保ちやすくなります。地表面であれば上側、外壁であれば対象とする外側など、運用上の基準を決めます。複数の独立部品を含む場合は、部品ごとに向きを確認します。
法線の確認では、表面表示だけでなく裏面側からもモデルを観察します。表面からは正常に見える面が、裏面から確認すると二重化していることがあります。また、反転した小さな面は、通常の陰影表示では見落としやすいため、表裏を色分けする機能や法線表示を利用すると判断しやすくなります。
閉じた立体の整合性を確認した後は、対象物のおおよその寸法、表面積、体積などを計算し、想定範囲と比較します。極端な値が出た場合は、単位、座標、面方向、自己交差、複数の閉じた成分、意図しない底面などを確認します。孤立面があることだけから体積異常の原因を断定することはできません。
また、計算が実行できたことだけで形状が完全に正常とは判断できません。処理環境によっては、開口を補完したり、不正な成分を無視したりして結果を返す場合があります。エッジ、頂点、重複、縮退面、内部面、自己交差、面方向という一連のチェック結果を合わせて判断します。
検出した非多様体形状を修正する手順
非多様体形状や関連する形状異常が見つかった場合は、自動修正を一括実行する前に、問題を種類別に分けます。境界エッジ、三面以上の共有エッジ、非多様体頂点、重複面、縮退面、内部面、自己交差では、適切な修正方法が異なるためです。
最初に、元の点群と照合して明らかな不要形状を特定します。点群から離れた孤立面、完全な重複面、面積がゼロの面、測定対象とは関係のない小さな破片などが候補です。この段階では、本体と接続している可能性のある面を広範囲に削除しないよう注意します。小さいという理由だけで不要と判断すると、細い部材や角部を失う可能性があります。
次に、同一位置または近接位置にある頂点を整理します。しきい値を小さく設定し、統合後に角部、段差、隙間、別部品間の距離が失われていないか確認します。必要な頂点まで統合された場合は元に戻し、問題箇所を選択して個別に処理します。
三枚以上の面が共有するエッジ周辺では、余分な面や不適切な接続を特定します。どの二枚が本来の連続面を構成するかを、元の点群、周囲の面方向、対象物の構造と照合します。単純に最も小さい面を削除すると、必要な部材や正しい接続を失うことがあるため、面積だけで判断しません。
頂点だけで複数の面領域が接続している場合は、不要な領域を削除する、頂点を分離して別部品にする、周辺を再メッシュ化して辺共有へ変更するなど、用途に合った方法を選びます。現実の部品が別体である場合は、形状を無理に一体化しない方が適切です。
穴を修正する場合は、穴の大きさと形状を確認します。小さな欠損は周囲の頂点を利用して面を追加できる場合がありますが、大きな欠測範囲を自動的に埋めると、実測していない形状が作られます。計測成果として扱うデータでは、補間した範囲が分かるように管理し、必要に応じて欠測として残します。
自己交差が多い領域では、一枚ずつ面を修正するより、その範囲のメッシュを削除して再生成する方が効率的な場合があります。元の点群を切り出し、点密度、外れ値除去、最大接続距離などの条件を見直して局所的にメッシュ化します。周辺の既存メッシュと接続する際は、境界頂点をそろえ、重複面や新しい交差が生じていないか確認します。
修正後は、必ず同じ6項目を再検査します。一つの問題を修正したことで、別の問題が発生する場合があるためです。例えば、重複面を削除すると境界エッジが生まれ、頂点を統合すると細い面が縮退し、穴埋めをすると自己交差や不自然な長辺が発生することがあります。
検査と修正を繰り返す際は、保存段階を分けます。修正前、不要面削除後、頂点統合後、穴修正後、法線再計算後など、工程ごとに別ファイルとして保存すると、問題が増えた段階を特定できます。最終ファイルだけを上書きし続けると、必要な形状を削除したことに後から気づいても復元が難しくなります。
最終的なOBJを書き出す前には、使用していない頂点や辺を用途に応じて整理し、オブジェクトやグループの分割状態も確認します。大量の部品が処理時間へ与える影響はアップロード先の実装によって異なります。一方で、離れた形状を無理に一つのメッシュへ結合すると、意図しない接続が生まれる可能性があります。連続した表面として扱う部分と、独立した部品として扱う部分の基準を決めて整理します。
点群OBJアップロード前の最終確認
非多様体形状と関連する形状異常の検出、修正が完了したら、実際のアップロードを想定した最終確認を行います。まず、修正後のOBJを新しいセッションまたは別の対応環境で開き直します。編集作業中のキャッシュ、非保存の表示設定、一時データに依存せず、書き出したファイルだけで正常に読み込めるかを確認するためです。
開き直した後は、モデル全体の位置、向き、縮尺、単位、面数、頂点数を確認します。修正前と比較して面数が大幅に減っている場合は、必要な形状まで削除されていないか確認します。反対に、修正したにもかかわらず面数が増えている場合は、穴埋め処理や再メッシュ化によって細かすぎる面が生成されていないか確認します。面数の増減だけで良否を決めず、形状と用途を合わせて判断します。
次に、境界エッジと三面以上の共有エッジを再抽出します。閉じた立体として使用する場合は、意図しない境界が残っていないことを確認します。開いた地表面として使用する場合は、境界がモデル外周や意図した欠測部だけに存在することを確認します。使用する検査機能が境界を「非多様体」としてまとめて表示する場合は、検出結果を種類別に読み分けます。
頂点だけで複数領域が接続された箇所、重複面、近接した二重面、ゼロ面積の面、極端に細い面、自己交差についても再検査します。検出件数を機械的にゼロへすることだけを目標にせず、残っている境界や分離部品が用途上許容できるものかを判断します。許容する境界や独立部品がある場合は、その理由を記録します。
法線と面の向きを確認し、表示方法を切り替えても意図しない面欠けがないかを確認します。表面だけでなく、裏面、断面、透明表示でも確認すると、内部面や二重面を発見しやすくなります。テクスチャを使用する場合は、形状検査と修正の後に、材質名、テクスチャ座標、画像参照が崩れていないかも確認します。
ファイル名とフォルダ構成は、アップロード先の仕様に合わせて整理します。OBJ本体、材質情報、画像ファイルを一つの作業単位として管理し、参照先が不要な階層やローカル環境だけで成立するパスになっていないか確認します。使用できる文字、文字数、ファイル数、階層、圧縮方法などの制限はサービスによって異なるため、特定の命名規則を万能な基準とせず、公開仕様で確認します。
アップロード前には、元のOBJを保管したまま、アップロード用の複製ファイルを作成します。アップロード先の制約に合わせて軽量化する場合も、元データを直接変更しないようにします。軽量化後は、同じ形状検査をもう一度行います。面数削減によって頂点や辺が統合され、境界、頂点だけの接続、縮退面、自己交差が新たに発生する可能性があるためです。
試験アップロードが可能な場合は、本番共有の前に、同じ書き出し条件で作成した小範囲のOBJや複製データを使用して確認します。読み込み可否、処理時間、表示状態、座標位置、縮尺、法線、テクスチャ、断面や計測機能など、実際に使用する項目を確認し、問題がなければ全体データへ進みます。アップロード先に検証環境がない場合は、公開範囲や共有相手を限定した確認方法を検討します。
点群OBJの品質は、アップロード直前の修正だけでは決まりません。現場での取得範囲、点密度、死角、移動体、複数計測間の位置合わせ、外れ値除去、メッシュ生成条件まで含めて管理する必要があります。後工程で接続異常を大量に修正するより、取得時点で欠測や重複を減らし、メッシュ生成条件を用途に合わせた方が、形状の由来と信頼性を維持しやすくなります。
境界エッジ、頂点周囲の連結性、重複形状、縮退面、内部面と自己交差、法線と閉じ方という6つのチェックを実施すれば、目視だけでは発見しにくい問題を段階的に確認できます。問題箇所を自動的にすべて削除するのではなく、元の点群と照合しながら、残す形状、分離する形状、再構成する形状を判断することが重要です。
現場での点群取得、座標付きデータの確認、計測、編集、共有などの工程を効率化したい場合は、LRTK Phoneの活用を検討できます。LRTK Phoneには点群スキャンや点群活用に関する機能がありますが、OBJの非多様体検査や修復の対応範囲は、利用する機能と出力後の編集環境を確認したうえで判断してください。レフィクシア株式会社+1