点群OBJで凹型多角形が欠ける原因
点群から生成したOBJをクラウドや3D表示環境へアップロードした際、元の編集画面では見えていた面の一部が欠けることがあります。特に注意したいのが、輪郭の内側にくぼみを持つ凹型多角形を、一つの面として保存しているケースです。
OBJでは、三つの頂点で構成される三角形だけでなく、四つ以上の頂点を持つ多角形も一つの面として記述できます。そのため、作成側では建物の床、法面、地表、構造物の側面などを、一枚の大きな多角形として保存できる場合があります。
しかし、アップロード先が四角形以上の面をそのまま描画しているとは限りません。多くの3D表示処理では、四つ以上の頂点を持つ面を内部で複数の三角形へ分割してから描画します。この変換を三角形分割または三角形化と呼びます。
凸型多角形であれば、複数の三角形へ比較的単純に分割できます。ところが凹型多角形では、分割線の選び方によっては、元の輪郭の外側を通る三角形が作られます。その結果、面が重なる、余分な領域が埋まる、一部の三角形が無効になるといった問題が発生します。
たとえば、L字形の面を考えると分かりやすくなります。輪郭の一つの頂点から、ほかの頂点へ扇状に対角線を引いた場合、くぼんだ部分を横切る線が生じることがあります。その線を基準に三角形が作られると、本来は面が存在しない領域まで覆われたり、元の輪郭外に三角形がはみ出したりします。
作成環境とアップロード先で三角形分割の方法が異なると、作成時には正常に見えていた面が、アップロード後にだけ欠けることがあります。これはOBJファイルが完全に壊れているとは限らず、四角形以上の面をどのように解釈するかが環境ごとに異なることが原因です。
もう一つの原因は、凹型多角形を構成する頂点が同一平面上にないことです。点群から作成した面では、測定誤差、補間、不要点、外れ値などの影響により、見た目には平らな面でも各頂点の高さがわずかに異なることがあります。
三角形は三つの頂点によって一つの平面が決まります。一方、四つ以上の頂点が同一平面上にない場合、一つの平面として確定できません。そのため、どの頂点同士を結んで三角形にするかによって、面の折れ方や傾斜が変わります。
凹型であることに加えて面がねじれていると、読み込み側の処理結果はさらに不安定になります。一部の三角形が裏返ったり、法線が反対方向へ向いたりし、結果として面が欠けたように見える場合があります。
この問題を安定して解消するには、アップロード先の自動処理に任せるのではなく、作成側で凹型多角形を確認し、輪郭に沿った適切な三角形へ分割しておくことが重要です。ただし、単に三角形へ変換するだけでは十分ではありません。重複頂点、自己交差、頂点順序、ゼロ面積面、法線、テクスチャ座標などもあわせて確認する必要があります。
凹型多角形と凸型多角形の違い
三角形分割を適切に行うためには、凸型多角形と凹型多角形の違いを理解しておく必要があります。
凸型多角形は、輪郭の内側に入り込むくぼみがない形状です。多角形内部にある任意の二点を直線で結んだとき、その線分が多角形の外へ出ません。一般的な三角形、長方形、台形などは、頂点配置が正常であれば凸型に分類できます。
凹型多角形は、輪郭の一部が内側へ入り込んでいる形状です。L字形、U字形、矢印形、星形に近い輪郭などが代表例です。点群から面を生成する工程では、建物の角、道路の分岐、設備を避けた地表面、開口部周辺、法面の境界などに凹型多角形が生じます。
凸型多角形では、一つの頂点を基準としてほかの頂点へ順番に対角線を引く方法でも、すべての三角形が元の多角形内部に収まりやすくなります。これに対し、凹型多角形で同じ分割を行うと、くぼみをまたぐ対角線が輪郭外を通る可能性があります。
凹型かどうかを判断するときは、上面や正面など一方向から見た形だけでなく、対象面に近い平面へ投影した輪郭を確認することが重要です。面が傾いている場合、単純に水平面へ投影すると輪郭がつぶれ、正しく判定できないことがあります。
また、輪郭の辺同士が交差している形状は、通常の凹型多角形とは分けて考える必要があります。頂点を誤った順序で結ぶと、蝶ネクタイのように辺が交差した自己交差面になります。このような面は内部と外部の判定が曖昧になるため、通常の三角形分割処理では適切に処理できない場合があります。
頂点数が多い面ほど、凹型部分や自己交差が含まれていないかを確認する必要があります。特に、点群から自動生成された輪郭では、細かな凹凸を追従した結果、一つの面に多数の頂点が含まれることがあります。
必要以上に多くの頂点を持つ面は、輪郭のわずかな揺らぎによって凹型と凸型が連続し、三角形分割が複雑になります。表示互換性を高めるには、不要な中間頂点を整理し、形状の特徴を保ちながら単純な輪郭へ整えることも有効です。
ただし、頂点を減らせば必ず改善するわけではありません。建物の角、段差、稜線、地形の変化点など、形状を表現するために必要な頂点まで削除すると、測定結果やモデル形状が変わります。頂点整理は、元の点群や周辺面を確認しながら慎重に行う必要があります。
アップロード後に現れやすい症状
凹型多角形の問題は、面が完全に消える場合だけではありません。症状の種類を把握しておくと、三角形分割が原因なのか、法線やテクスチャなど別の要素が原因なのかを切り分けやすくなります。
代表的な症状は、面の一部が三角形状に抜ける現象です。大きな面全体が消えるのではなく、特定の対角線を境に一部分だけが表示されない場合は、内部の三角形分割に問題がある可能性があります。
次に多いのが、くぼんでいる部分が直線でふさがれる現象です。本来はL字形やU字形で空いている領域に面が生成され、輪郭が単純な凸型に近い形へ変わって見えます。これは凹型部分をまたぐ対角線が選ばれた場合に起こります。
視点を動かすと面が現れたり消えたりすることもあります。この症状は、表裏判定、法線方向、重複面、深度判定などでも発生しますが、不適切な三角形分割によって面同士が重なっている可能性もあります。
面の表面に細い線やちらつきが現れる場合は、同じ場所に複数の三角形が重なっていることが考えられます。凹型多角形を誤って分割すると、一部の領域が二重に覆われ、どちらを手前に表示するかが安定しなくなることがあります。
遠くへ細長い三角形が伸びる症状では、凹型多角形だけでなく、面インデックスの誤りや不要頂点の混入も確認します。面を構成する頂点番号の一つが誤っていると、本来の輪郭から離れた頂点と接続されます。
表面に黒い斑点や不自然な陰影が出る場合は、三角形分割後の法線がそろっていない可能性があります。一部の三角形だけ頂点順序が逆になっていると、法線が反対方向へ向きます。
テクスチャが斜めに引き伸ばされる、三角形ごとに模様がずれる、特定の面だけ異なる画像が表示されるといった症状では、テクスチャ座標や材質割り当ての引き継ぎを確認します。形状だけを三角形化し、対応する属性を更新していない場合に発生します。
アップロード処理そのものが途中で停止する場合もあります。読み込み側が自己交差面や不正な頂点参照を処理できず、ファイル全体の解析に失敗している可能性があります。
このように、同じ凹型多角形を原因とする問題でも、表示環境やデータ構造によって症状が異なります。画面上の見た目だけで判断せず、対象面を構成する頂点、面インデックス、法線、テクスチャ座標まで確認することが大切です。
ステップ1:欠ける面と頂点配列を特定する
最初のステップは、欠けている場所と、その場所に対応する面を特定することです。問題箇所を特定せずにモデル全体を三角形化すると、正常な部分まで変化し、ファイル容量や面数が必要以上に増える可能性があります。
まず、アップロード後の表示で欠けている位置を確認します。上面、側面、斜め方向など、複数の視点から観察します。一方向からは正常に見えていても、反対側から見ると消えている場合があります。
欠けている位置の周囲に分かりやすい構造物や地形があれば、それを目印として記録します。座標を確認できる場合は、対象範囲の座標も控えておくと、元データ内で同じ場所を探しやすくなります。
次に、元の編集用モデルで同じ場所を表示します。欠けている範囲が一つの大きな面として構成されていないかを確認します。輪郭の内側に入り込む角があれば、凹型多角形の可能性が高くなります。
面を構成する頂点数も確認します。三つの頂点で構成されている面であれば、すでに三角形です。四つ以上の頂点を参照している面は、アップロード時に内部で三角形へ変換される可能性があります。
ただし、四つ以上の頂点を持つ面がすべて不正というわけではありません。平面性が高く、凸型で、頂点順序が正しければ、正常に処理される場合もあります。優先して確認したいのは、頂点数が多く、輪郭が凹型で、高さ方向にもばらつきがある面です。
OBJ内の面定義を確認するときは、頂点番号が輪郭に沿って順番に並んでいるかを調べます。輪郭の途中で対角線を横切る順番になっていると、辺同士が交差する自己交差面になる可能性があります。
対象面の各頂点を順番に線で結んだとき、一周して元の位置へ戻る輪郭になっていることが基本です。同じ頂点が途中で繰り返されていないか、隣り合う頂点が同じ座標になっていないかも確認します。
欠けている面だけでなく、その周囲の面との接続状態も確認します。隣接面と同じ境界を共有している場合、境界上の頂点が同じ座標であるか、同じ頂点として参照されているかを調べます。
対象面だけを修正した結果、隣接面との間に微小な隙間が生じることがあります。修正範囲は、欠けている一面だけではなく、周囲の数面を含めて判断した方が安全です。
大規模な点群OBJでは、対象部分を含む小さな検証用データを作成すると効率的です。問題の面と周囲の面だけを複製し、軽量なOBJとして書き出します。
検証用データを使えば、数百万点を含むモデル全体を何度もアップロードする必要がありません。三角形分割の方法を変えながら短時間で結果を比較できます。
ただし、問題面だけを単独で切り出すと、周辺面との重なりや共有頂点の問題を再現できないことがあります。対象面を中心に、一定範囲の隣接面を含めることが重要です。
ステップ2:重複頂点と不正な輪郭を整理する
対象面を特定したら、三角形分割の前に頂点と輪郭を整理します。不正な構造を残したまま三角形化すると、問題を複数の三角形へ引き継ぐことになります。
最初に確認するのは、同じ位置に複数の頂点が存在していないかです。完全に同じ座標の頂点だけでなく、非常に近い位置にある頂点も確認します。
点群から面を生成する工程では、異なる点を基準として同じ角が複数回作られることがあります。見た目には一つの頂点でも、内部では別々の頂点番号が割り当てられているケースがあります。
同じ座標を持つ頂点が連続して輪郭に含まれると、その二点間の辺の長さはゼロになります。この辺を含む三角形は面積がゼロになるため、アップロード先で無効な面として除外される可能性があります。
一方、近接する頂点を無条件に統合することは避けます。薄い構造物の表裏、上下に近接する面、段差の両側など、本来は別の頂点であるものまで結合すると、形状が変形します。
頂点を統合する許容距離は、モデルの座標単位、点群の精度、対象物の最小寸法を考慮して設定します。地形モデルと小型構造物では、適切な許容距離が異なります。
次に、輪郭上の不要な中間頂点を確認します。一直線上に多数の頂点が並んでいる場合、それらをすべて残すと、三角形分割後に細長い面が大量に生じることがあります。
不要な中間頂点を削除すると、三角形分割を単純化できます。ただし、その頂点を隣接面が使用している場合、対象面だけから削除すると境界の構成が一致しなくなることがあります。
削除前には、その頂点を参照している面を確認します。周囲の形状に影響する場合は、複数の面を同時に整理するか、頂点を残したまま適切な分割線を選びます。
輪郭から大きく離れた頂点が含まれていないかも確認します。一つの頂点番号が誤っているだけで、面がモデルの遠方まで伸びる場合があります。
各辺の長さを比較し、周囲より極端に長い辺があれば、その両端の頂点を調べます。測定対象に実際に長い辺が存在する場合もあるため、長いという理由だけで不正と判断してはいけません。元の点群や周辺構造と照合して判断します。
輪郭の辺同士が交差していないことも確認します。自己交差している場合は、三角形化する前に頂点順序を修正し、交差のない単純な輪郭へ戻します。
面の途中に穴がある場合は、一つの外周輪郭だけで表現しようとすると、意図しない面が作られる可能性があります。開口部、設備周辺、地表の除外領域などを表現する場合は、穴をまたぐ巨大な凹型面にせず、周囲を複数の面へ分ける方法が適しています。
頂点の高さも確認します。本来は平らな床や壁であるにもかかわらず、一つの頂点だけが大きく外れている場合、点群の外れ値や誤った頂点参照が原因かもしれません。
ただし、実際の段差や変形を平滑化してはいけません。修正の根拠は、元の点群、測定条件、周辺面との連続性を確認したうえで判断します。
頂点整理後は、輪郭が閉じていること、三つ以上の異なる頂点を持つこと、連続する頂点が同一座標ではないこと、辺が自己交差していないことを確認します。この状態を整えてから次の工程へ進むことで、三角形分割の失敗を減らせます。
ステップ3:頂点順序と面の向きを統一する
三角形分割の前には、対象面の頂点順序と表裏を統一します。OBJでは、面を構成する頂点番号の並び順によって面の向きが決まります。
隣接する面の一部だけ頂点順序が逆になっていると、その面の法線が反対方向へ向きます。両面を表示する環境では見える場合がありますが、裏面を表示しない環境へアップロードすると、その面だけ欠けたように見えます。
凹型多角形を三角形へ分割するときは、生成されるすべての三角形で頂点の回り方をそろえる必要があります。分割線が正しくても、一部の三角形だけ順序が逆であれば、部分的な欠落が残ります。
まず、対象面の表側を決めます。地表面や床面であれば上側、壁面であれば構造物の外側など、用途に応じた方向を基準にします。
次に、対象面を表側から見て、輪郭上の頂点を一定方向へたどれるように並べます。途中で反転したり、一つ飛ばして別の頂点へ進んだりしていないことを確認します。
凹型部分では、内側へ入り込む角の前後で頂点順序を誤りやすくなります。画面上の透視表示だけでは判断しにくい場合は、対象面に近い平面へ投影して輪郭を確認します。
面が水平であれば上面投影が利用できます。壁や斜面のように傾いている場合は、その面の代表的な法線に直交する平面へ投影すると、輪郭を確認しやすくなります。
ただし、面が大きくねじれている場合、一つの投影面だけでは正しい形状を表現できません。その場合は、一枚の大きな多角形として扱わず、傾斜や折れの変化に合わせて複数の領域へ分割してから三角形化します。
周囲の面の法線方向も確認します。対象面だけが反対を向いている場合は、頂点順序を反転して周囲とそろえます。
法線情報をOBJに保存している場合は、面の向きを直した後、法線の方向や参照番号も確認します。頂点順序だけを反転し、古い法線をそのまま残すと、形状と陰影の解釈が一致しない場合があります。
三角形分割後に法線を再計算する方法もあります。この場合でも、入力された各三角形の頂点順序が基準になります。自動計算がすべての面を望ましい方向へ修正するとは限りません。
閉じた立体では、すべての面が外側を向いているかを確認します。地表のような開いたモデルでは、主に閲覧する方向に面が向いているかを確認します。
アップロード先によって両面表示の扱いが異なるため、両面表示に依存して不正な表裏を隠すのではなく、OBJ内の面方向を正しく統一しておくことが重要です。
ステップ4:凹型多角形を適切な三角形へ分割する
頂点と輪郭を整理し、面の向きを統一したら、凹型多角形を三角形へ分割します。この工程では、生成するすべての三角形が元の輪郭内部に収まることが最も重要です。
凹型多角形に対して、最初の頂点からほかの頂点へ順番に線を引く扇状分割を使用すると、くぼみをまたぐ線が輪郭外へ出ることがあります。そのため、凹型面では単純な扇状分割を前提にせず、輪郭形状を確認しながら対角線を選びます。
基本的な分割方法は、輪郭上で連続する三つの頂点から、元の多角形内部に収まる三角形を一つずつ切り出す方法です。三角形を切り出した後、残った輪郭に対して同じ処理を繰り返します。
切り出す三角形は、外向きに張り出す凸型の角から選びます。内側へ入り込む凹型の角を無理に切り出すと、三角形が輪郭外へはみ出す可能性があります。
候補となる三角形の内部に、ほかの輪郭頂点が含まれていないことも確認します。内部に別の頂点がある三角形を先に切り出すと、残った輪郭が不正な形になることがあります。
新しく引く対角線が、元の輪郭の辺と交差していないことも必要です。対角線の両端以外で輪郭と交差する場合、その線は適切な分割線ではありません。
分割線は、可能な範囲で短く、形状の特徴に沿う位置を選びます。極端に長い対角線を使用すると、細長い三角形が作られやすくなります。
細長い三角形は必ずしも不正ではありませんが、数値計算や法線補間の影響を受けやすくなることがあります。特に、大きな座標値の中に小さな形状が存在するモデルでは、極端な縦横比の面を避けた方が安定します。
地表面や法面では、傾斜方向や地形の変化に沿って分割方向を決めます。周囲の三角形と無関係な方向へ対角線を引くと、表面に不自然な折れや陰影が生じる場合があります。
建物や構造物では、角、稜線、開口部、段差などの形状を優先します。本来の角をまたいで一枚の三角形を作ると、輪郭は合っていても表面形状が変わります。
一つの凹型多角形が非常に多くの頂点を持つ場合は、意味のある小領域へ分割してから三角形化します。たとえば、平らな床、傾斜面、壁際、設備周辺などを別々の面として整理すると、分割結果を確認しやすくなります。
元の頂点だけを使って分割できる場合は、不要な内部頂点を増やさない方がデータ構造を簡潔に保てます。一方、元の頂点だけでは極端に細長い三角形しか作れない場合は、内部に新しい頂点を追加する方法があります。
内部頂点を追加するときは、その位置を単純な輪郭の平均だけで決めないようにします。点群由来の表面では、平均位置が実際の表面から離れる可能性があります。
追加頂点の高さは、周辺の点群、近傍の面、局所的な傾斜などを参照して決めます。頂点色、法線、テクスチャ座標を使用している場合は、それらの属性も適切に補間します。
三角形化した後は、各三角形の面積を確認します。三つの頂点がほぼ一直線上に並ぶと、面積が極端に小さい三角形になります。
ゼロ面積または面積が非常に小さい三角形は、法線を安定して計算できず、アップロード先で無効面として扱われる可能性があります。頂点整理や分割線の変更によって除去できないかを確認します。
生成された三角形同士が重なっていないことも重要です。元の凹型多角形の内部を、過不足なく一度だけ覆う状態にします。
同じ領域を複数の三角形が覆っていると、表示時にちらつきが発生する場合があります。反対に、接続する頂点を誤ると、三角形の間に小さな隙間が生じます。
分割後のすべての三角形で、頂点順序が同じ方向になっているかを再確認します。凹型部分の周辺では、対角線を追加したときに順序を取り違えやすいため注意が必要です。
テクスチャを使用している場合は、元の面に割り当てられていたテクスチャ座標を各三角形へ正しく引き継ぎます。頂点座標とテクスチャ座標は、それぞれ別の番号で管理される場合があるため、対応関係を崩さないようにします。
元の頂点だけを使う分割では、各頂点に対応するテクスチャ座標をそのまま利用できます。新しい頂点を追加した場合は、周辺のテクスチャ座標を基に新しい座標を設定します。
材質が面ごとに割り当てられている場合は、分割後のすべての三角形へ元の材質を引き継ぎます。途中で材質指定が抜けると、一部の三角形だけ異なる表示になることがあります。
ステップ5:書き出したOBJを再検証する
三角形分割が完了したら、編集画面で正常に見えることだけで作業を終えてはいけません。実際に書き出したOBJを、新しい環境へ読み込み直して確認します。
編集環境では、内部データを直接表示している場合があります。書き出し時には、頂点番号の並べ替え、法線の再計算、重複頂点の統合、属性の削除などが行われる可能性があります。
そのため、保存済みOBJを新規に読み込むことで、実際にアップロードするファイルの状態を確認します。元の作業中モデルを表示し続けるだけでは、書き出し時の問題を発見できません。
再読込後は、修正した凹型部分を複数の方向から確認します。表側だけでなく、裏側、斜め方向、近距離、遠距離から見ます。
面の欠けが解消していても、輪郭が変形していないかを確認します。くぼみが余分な面で埋まっていないか、三角形が輪郭外へ飛び出していないかを調べます。
裏面を表示しない状態でも必要な面が見えるかを確認すると、面方向の混在を発見しやすくなります。両面表示だけで正常に見えている場合は、頂点順序や法線方向を再確認します。
OBJ内部では、修正対象の面がすべて三つの頂点で構成されているかを確認します。四つ以上の頂点を持つ面が残っている場合、その面はアップロード先で再び自動三角形化されます。
面が参照する頂点番号が、実際に存在する頂点の範囲内にあることも重要です。頂点を削除した後に面参照を更新していないと、存在しない頂点を指定する面が残ります。
存在しない頂点を参照した場合、対象面だけが無視されることもあれば、OBJ全体の読み込みに失敗することもあります。
負の頂点番号を使用する記述では、現在位置からの相対参照として解釈されます。OBJの表現として利用される場合がありますが、受け渡し先との互換性を重視する場合は、アップロード先で正しく処理されるか確認します。
法線を保存する場合は、三角形分割後の各面と法線番号の対応を確認します。頂点構造だけを変更し、法線参照が古いまま残っていると、陰影が乱れる可能性があります。
テクスチャ座標を使用する場合は、各三角形の頂点座標、テクスチャ座標、法線の組み合わせを確認します。一部の番号が欠けたり、区切り方が不正だったりすると、その面全体が読み込まれない場合があります。
三角形分割前後で、頂点数、面数、ファイル容量を比較することも有効です。四角形以上の面を三角形化すれば面数は増えますが、想定以上に増加している場合は、過剰な細分化や重複面が生じている可能性があります。
モデル全体の座標範囲も確認します。修正時に一つの頂点だけ誤った位置へ移動すると、モデルの範囲が大きく広がり、表示時の縮尺や深度精度に影響することがあります。
検証用にアップロードする場合は、修正前後のファイルを識別できる名前にします。同じ名前を繰り返し使用すると、古いデータと新しいデータを取り違える可能性があります。
アップロード後は、問題箇所だけでなくモデル全体も確認します。三角形化によって別の部分の面方向やテクスチャが変化していないか、表示速度が大きく低下していないかを調べます。
三角形分割後も欠ける場合の確認事項
凹型多角形を三角形へ分割しても欠けが解消しない場合は、別の原因が残っている可能性があります。
最初に確認したいのは、三角形そのものが正常かどうかです。三つの頂点のうち二つ以上が同じ座標であれば、面積はゼロになります。また、三頂点がほぼ一直線上に並んでいる場合も、極端に小さな面積になります。
次に、各三角形の頂点順序を確認します。一部の面だけ順序が逆であれば、裏面として扱われます。
重複面も確認します。同じ三頂点を同じ位置で使用する面が二つ以上存在すると、ちらつきや部分的な欠落に見える現象が発生することがあります。
同じ面が逆向きに二重化されている場合もあります。両面を表現する意図で作られているケースもありますが、わずかな位置差や法線差があると表示が不安定になります。
隣接する三角形の間に隙間がないかも確認します。座標値が見た目には同じでも、内部ではわずかに異なっている場合があります。
テクスチャや材質を一時的に外し、形状だけで表示する方法も有効です。形状だけでは正常に表示される場合、面そのものではなく、テクスチャ座標、材質定義、画像参照などに問題がある可能性があります。
法線を外して再計算した状態も比較します。法線なしでは正常で、保存された法線を使用すると欠けて見える場合は、法線方向や参照番号を重点的に確認します。
グループやオブジェクトの区切りも確認します。修正した面が非表示設定の対象となるグループへ移動していたり、異なる材質グループへ割り当てられたりしている可能性があります。
座標値が非常に大きいモデルでは、表示側の数値精度が影響する場合があります。広域座標を保持したまま小さな三角形を表示すると、環境によっては局所形状の計算精度が低下する可能性があります。
検証時に限り、対象部分を基準点付近へ移動したデータを作り、同じ欠けが発生するか確認すると、座標範囲の影響を切り分けられます。ただし、実運用データの座標を変更する場合は、元へ戻すための移動量を正確に管理する必要があります。
ファイルが最後まで正常に保存されていることも確認します。書き出し処理の中断、保存領域の不足、転送中の欠損などにより、ファイル末尾の面が失われる場合があります。
OBJをテキストとして確認し、面定義の途中で行が切れていないか、不正な文字が混入していないかを調べます。一つの面を三角形にしておけば面定義が短くなり、構造を確認しやすくなります。
大規模な点群OBJを効率よく修正する方法
点群から生成したOBJは、頂点数や面数が非常に多くなることがあります。モデル全体を毎回処理すると、書き出し、再読込、アップロード、表示確認に時間がかかります。
効率化の基本は、問題箇所を含む範囲を限定することです。欠けている場所の座標や周辺構造を記録し、一定範囲だけを検証用OBJとして切り出します。
切り出す範囲には、問題の面だけでなく隣接面も含めます。境界の不一致や重複面は、周囲との関係によって発生するためです。
検証工程を段階化することも有効です。最初は頂点と面だけを含む軽量なOBJで確認します。形状が正常になった後、法線、頂点色、テクスチャ座標、材質を追加して再確認します。
形状だけの状態でも欠ける場合は、頂点、面インデックス、表裏などに原因がある可能性が高くなります。属性を追加した後に問題が発生する場合は、法線やテクスチャの対応へ確認範囲を絞れます。
モデルを空間的な区画へ分割する方法もあります。広い現場全体を一つのOBJとして管理するのではなく、作業区、構造物、測定範囲、座標区画などで分けると、異常箇所を特定しやすくなります。
ただし、区画境界に隙間や重複を作らないよう注意します。隣接するファイル間で境界頂点の座標が一致していることを確認します。
自動処理を利用する場合でも、処理完了だけを確認してはいけません。三角形以外の面数、ゼロ面積面、重複面、極端に長い辺、座標範囲などを処理前後で比較します。
元の面数に対して出力面数が不自然に多い場合、一つの面が必要以上に細分化されている可能性があります。反対に、出力面数が少なすぎる場合は、一部の面が処理中に除外された可能性があります。
三角形化によって外周輪郭が変化していないことも確認します。三角形分割は面内部の構造を変える処理であり、原則として元の外周形状を維持します。
大量の面を一括処理するときは、元データを上書きせず、処理段階ごとに保存します。元の点群、編集用面、頂点整理後、三角形化後、アップロード用というように分けると、問題が発生した工程を追跡できます。
三角形分割で避けたい失敗
三角形分割はOBJの互換性を高める有効な方法ですが、処理方法を誤ると別の問題を生みます。
代表的な失敗は、凹型多角形をすべて扇状に分割することです。基準頂点の位置によっては、対角線が輪郭外を通ります。凹型面では、各対角線が元の多角形内部に収まっているかを確認する必要があります。
次に、頂点整理を行わずに三角形化する失敗があります。重複頂点やゼロ長辺が残っていると、ゼロ面積の三角形が生成されます。
頂点を過剰に統合することも問題です。許容距離を大きく設定すると、近接する別の面や薄い構造物の表裏が結合される可能性があります。
面の表裏を確認せずに分割すると、一部の三角形だけ法線が反対方向を向く場合があります。すべての三角形で頂点順序を統一する必要があります。
自動処理の結果を目視確認せず採用することも避けます。複雑な凹型輪郭、自己交差面、ねじれた面、穴を含む面では、自動処理が意図しない分割を行う可能性があります。
問題のない面まで細かく分割すると、ファイル容量と面数が増えます。読み込み時間や表示負荷が増加する場合があるため、目的のない細分化は避けます。
形状だけを三角形化し、テクスチャ座標や法線を更新しないことも失敗につながります。表面形状が正しくても、画像や陰影が崩れる可能性があります。
元データを直接上書きすることも避けるべきです。分割結果に問題があった場合、元の輪郭へ戻れなくなります。
最後に、作成環境で見えることだけを確認して完了と判断しないようにします。実際に書き出したOBJを読み込み直し、アップロード先でも確認することが必要です。
欠けを再発させないデータ作成ルール
一度修正しても、同じ生成条件を使い続けていると別のOBJで同じ問題が発生します。再発を防ぐには、点群からOBJを作成する工程と、アップロード前の確認工程を標準化することが重要です。
アップロード用OBJでは、四角形以上の面を残す必要があるかを事前に決めます。複数の表示環境へ受け渡すデータでは、書き出し前に三角形化しておくことで、読み込み側による分割結果の違いを減らせます。
ただし、編集途中からすべてを三角形化すると、輪郭変更や面編集が複雑になることがあります。編集用モデルは元の構造を保持し、アップロード用データを作成する段階で三角形化する運用が考えられます。
一つの巨大な凹型多角形を作らないことも重要です。地形の傾斜、構造物の角、開口部、段差など、形状が変化する位置で面を分けると、三角形化を安定させやすくなります。
アップロード前の確認項目を定型化します。三角形以外の面数、重複頂点、ゼロ面積面、自己交差面、表裏の混在、存在しない頂点参照、極端に長い辺、座標範囲などを確認します。
確認結果は、正常か異常かだけでなく数値として残すと比較しやすくなります。頂点数、面数、ファイル容量、座標範囲、三角形以外の面数などを記録します。
複数人で作業する場合は、三角形化、頂点統合、法線保存、テクスチャ出力などの条件を統一します。担当者ごとに条件が異なると、同じ点群から作成したOBJでも結果が変わります。
検証用OBJを用意しておくことも有効です。凸型多角形、凹型多角形、傾いた面、テクスチャ付き面など、実運用で使用する要素を含む小さなデータを作り、新しいアップロード環境で確認します。
元の点群、編集用モデル、三角形化前のモデル、アップロード用OBJは分けて保管します。どの工程で形状が変わったかを追跡できるようにします。
現場で取得する点群の品質も、後工程の面生成に影響します。不要点、外れ値、遮蔽物の影響を整理してから面を生成すると、複雑な凹型多角形や不自然な頂点を減らせます。
まとめ
点群OBJをアップロードした際に凹型多角形の一部が欠ける場合は、アップロード先で行われる三角形分割が元の輪郭に適していない可能性があります。
OBJでは四つ以上の頂点を持つ面を保存できますが、表示時には複数の三角形へ変換されることがあります。凹型多角形を単純な扇状に分割すると、対角線が輪郭外へ出て、面の欠け、重なり、余分な面、ちらつきなどが発生します。
修正では、最初に欠けている面と頂点配列を特定します。次に、重複頂点、ゼロ長辺、自己交差、不要頂点を整理し、面の頂点順序と法線方向を統一します。
その後、元の輪郭内部に収まる対角線を選び、凹型多角形を適切な三角形へ分割します。生成した三角形が重ならず、隙間を作らず、すべて同じ方向を向いていることを確認します。
三角形化後は、実際に書き出したOBJを新規に読み込み直します。面インデックス、法線、テクスチャ座標、材質、座標範囲、ファイル容量まで確認し、アップロード先でも複数方向から表示を検証します。
三角形分割は有効な対策ですが、元の面に重複頂点、自己交差、ねじれ、誤った頂点参照が残っている場合は、それだけでは解決しません。形状と属性の整合性を順番に確認することが重要です。
点群の取得、不要点の整理、面生成、三角形化、アップロード確認を一つの工程として管理することで、OBJの欠けを再発しにくくできます。現場で取得した点群を安定して活用し、計測からデータ確認までを効率化する際には、LRTK Phoneを起点とした運用へつなげる方法もあります。