LRTKレフィクシア株式会社

点群OBJアップロードでNaN・Inf頂点を除く5つの修正手順

点群OBJでNaN・Inf頂点が問題になる理由

点群OBJをアップロードした際に、読み込みが途中で止まる、変換処理が失敗する、モデル全体が表示されない、極端に離れた位置へ形状が伸びるといった問題が起きることがあります。その原因の一つが、頂点座標に含まれるNaNやInfです。 NaNは、数値として定義できない計算結果を表すために使われる値です。たとえば、計算途中で有効な座標を求められなかった場合や、数値への変換に失敗した場合に生成されることがあります。Infは無限大を表す値で、正の無限大と負の無限大が存在します。ゼロに近い値での除算、計算結果の桁あふれ、異常な座標変換などによって混入する可能性があります。 OBJファイルの頂点は、一般にv x y zという形式のテキスト行で表現されます。たとえばv 12.345 6.789 1.250のように、頂点を構成する有限の座標値が並びます。ところが、座標欄にNaN、nan、Inf、Infinity、-Infなどが入っていると、アップロード先の解析処理が座標として扱えないことがあります。 どの表記を受け付けるかは読み込み側の実装によって異なります。一部の処理系では異常な頂点だけを無視する場合がありますが、ファイル全体を不正と判断して処理を中止する場合もあります。そのため、別の環境では開けたOBJが、アップロード先ではエラーになることも珍しくありません。 さらに注意したいのは、NaNやInfが単独の頂点だけに影響するとは限らない点です。異常頂点が面、線、点要素から参照されている場合、その頂点を削除するだけでは参照番号がずれ、別の形状崩れを起こす可能性があります。点群として頂点だけを格納したOBJと、三角形や四角形の面を含むOBJでは、必要な修正範囲が異なります。 点群OBJアップロードの失敗を確実に減らすには、文字列の一括置換だけで済ませず、異常値の検出、頂点の処理、参照番号の再構成、修正後の検証までを一連の作業として進めることが重要です。

NaN・Infが混入する主な原因

NaNやInfは、OBJ形式そのものが自動的に生成するものではありません。多くの場合、計測データの整理、座標計算、点群変換、メッシュ生成、ファイル統合、書き出しなど、OBJが完成する前の処理で発生します。 代表的な原因は、元データに無効な測点が含まれていることです。計測時に位置や距離を確定できなかった点、必要な属性が欠けている点、演算対象から外れるべき点などが、欠損値のまま後工程へ渡されることがあります。変換処理が欠損値を除外せず、そのまま文字列として書き出すと、頂点行にNaNが残ります。 座標変換時の計算エラーも原因になります。座標系の変換、原点移動、回転、縮尺変更、標高補正などでは、多数の数値演算が行われます。変換条件が不足している場合、入力値の単位が想定と異なる場合、計算式の分母がゼロになる場合には、正常な有限値を得られないことがあります。 複数ファイルの結合処理でも異常値が入り込むことがあります。異なる座標系、単位、列構成、欠損値の表現を持つデータを統合すると、一部の列だけ変換に失敗する場合があります。空欄、文字列、特殊な欠損記号を数値として読み取ろうとした結果、NaNへ変換されることもあります。 桁の大きすぎる座標も注意が必要です。現場座標や地理座標を扱う際、原点から遠い大きな値を保持したまま、さらに倍率を掛けたり単位を誤変換したりすると、処理できる範囲を超える可能性があります。たとえばメートルとミリメートルの換算を重複して適用すると、意図しない巨大値になることがあります。巨大値が必ずInfになるわけではありませんが、後続の計算で桁あふれや精度低下を招く要因になります。 メッシュ生成処理では、重複点、面積がほぼゼロの面、極端に近い点同士の計算が影響することがあります。法線方向を求める際に長さがゼロのベクトルを正規化すると、法線成分にNaNが発生する可能性があります。この場合、頂点座標のv行は正常でも、頂点法線を表すvn行にNaNやInfが含まれることがあります。 そのため、検査対象を頂点座標だけに限定するのは安全ではありません。OBJ内に頂点法線やテクスチャ座標がある場合は、v行だけでなくvn行やvt行も確認します。アップロード時のエラーが頂点に起因すると表示されても、実際には頂点に関連する別要素が解析を妨げていることがあります。

修正前に確認したいOBJファイルの構造

OBJはテキスト形式で記述されるため、内容を確認しやすい一方、各行が番号で関連付けられている点に注意が必要です。修正作業を始める前に、対象ファイルがどのような要素を含んでいるかを把握します。 頂点座標はvから始まる行に記録されます。通常はX座標、Y座標、Z座標の順に数値が並びます。ファイルによっては追加成分や頂点色に相当する値が続く場合もあるため、単純に一行の列数だけで正常・異常を判断しないことが大切です。最低限、座標として使う成分が有限値であるかを確認します。 テクスチャ座標はvt、頂点法線はvnで始まります。面はfで始まり、頂点番号を使って形状を構成します。面の参照は頂点番号だけの場合もあれば、頂点番号、テクスチャ座標番号、法線番号をスラッシュで組み合わせる場合もあります。 点要素はp、線要素はlで表されることがあります。点群OBJでは、頂点行だけが大量に並ぶ構成もあれば、頂点をp行から参照する構成もあります。対象ファイルにf、l、pのいずれかが存在する場合、異常頂点の削除後に参照番号を修正する必要があるかを確認しなければなりません。 OBJの頂点番号は、多くのファイルで頂点行の出現順に対応します。最初のv行が頂点1、次のv行が頂点2というように数えられます。そのため、途中の頂点行を一つ削除すると、それより後ろにある頂点番号が一つずつ前へずれます。面要素などが元の番号を参照したままだと、別の頂点につながったり、存在しない番号を参照したりします。 負の番号が使われているファイルにも注意が必要です。負の参照番号は、その行までに定義された要素を基準として相対的に参照するために使われることがあります。この形式では、途中の頂点削除による影響を単純な一括減算だけで処理しにくくなります。安全に修正するには、いったん参照先を確定し、新しい番号へ変換する方法が適しています。 また、複数のOBJを単純に連結したファイルや、オブジェクト単位で頂点番号を再開しているように見えるファイルは、構造を慎重に確認します。OBJでは、オブジェクト名やグループ名が切り替わっても、頂点番号がファイル全体で連続していることがあります。見た目の区切りだけを基準に番号を振り直すと、参照関係を壊す可能性があります。

修正手順1:原本を保全して異常頂点の範囲を特定する

最初の手順は、元のOBJを変更せずに保全し、異常値がどの範囲に存在するかを把握することです。作業対象のファイルを直接上書きすると、削除した頂点や元の参照関係を確認できなくなります。必ず原本と修正版を分け、修正途中のファイルも段階ごとに保存します。 OBJと同じ場所に関連ファイルがある場合は、それらもまとめて保全します。材質定義や画像がNaN・Infの直接原因でなくても、再アップロード時に必要になる可能性があります。ファイル名やフォルダ構成を不用意に変更すると、別の読み込み問題が発生するため、異常値修正と無関係な部分はできるだけ維持します。 次に、OBJ内でNaNやInfに該当する文字列を検索します。このとき、大文字と小文字の違いを考慮します。NaNだけでなくnan、NAN、Inf、inf、Infinity、-Inf、+Infなど、書き出し元によって異なる表記が使われる可能性があります。 ただし、単純な文字列検索だけで異常行を確定するのは避けます。オブジェクト名、グループ名、コメント、ファイル名の一部に似た文字列が含まれている可能性があるためです。検索結果がv、vn、vtなどの数値要素行に含まれているかを確認し、実際に数値として記録された異常値だけを対象にします。 異常行を見つけたら、行番号、要素の種類、要素番号、座標値、周辺行を記録します。頂点であれば何番目のv行なのかを数えます。テキスト全体の行番号と頂点番号は一致しないことが多いため、両者を混同しないようにします。コメント行、グループ行、材質指定行などが途中に入っていると、ファイル上の100行目が頂点100とは限りません。 異常頂点の件数も重要です。数点だけに異常がある場合と、数十万点の範囲に連続して異常がある場合では、適切な対応が異なります。少数であれば個別に除去または補正できる可能性がありますが、大量に発生している場合は、OBJだけを修正するより、元データの変換条件を見直して再出力した方が安全です。 異常値の分布も確認します。ファイルの末尾に集中している場合は、書き出し途中の失敗や不完全な追記が疑われます。一定間隔で発生している場合は、列の読み違いや計算処理の規則的な不具合が考えられます。特定の範囲にまとまっている場合は、一部の計測区間や結合元ファイルに問題がある可能性があります。 この段階では、まだ異常行を削除しません。まずは問題の規模と構造を明らかにし、頂点だけを除けばよいのか、参照関係まで作り直す必要があるのかを判断します。

修正手順2:NaN・Infを含む頂点行と参照関係を抽出する

次の手順では、異常値を含む要素を正確に抽出し、それらがどこから参照されているかを調べます。点群OBJアップロードの修正で失敗しやすいのは、NaNやInfを含む行だけを削除し、関連する面や線を残してしまうケースです。 まず、頂点座標を読み取る際は、各座標成分を数値として解釈し、有限値かどうかを判定します。文字列がNaNやInfと完全一致するかだけでなく、数値変換後に有限値ではないものを異常と判断する方法が安全です。これにより、表記の違いや符号付きの無限大も検出しやすくなります。 頂点行に追加成分がある場合は、どの成分を検査対象にするかを決めます。少なくともX、Y、Z座標は有限値でなければなりません。追加の色成分などに異常値がある場合も、アップロード先がその値を解釈する可能性があるため、原則として有限値へ修正するか、その要素を適切な形式で再出力します。 異常な頂点番号を特定したら、f、l、p行を確認し、その番号を参照している要素を抽出します。面を表すf行では、12/8/4のように複数の番号が組み合わされることがあります。この場合、最初の数値が頂点番号として使われる一般的な構成ですが、ファイルの記述を実際に確認して処理します。 異常頂点を含む面は、原則としてそのまま残せません。三角形面の一頂点を削除すると面を構成できなくなり、四角形面の一頂点を除いた結果が常に正しい三角形になるとも限りません。自動的に残りの頂点をつなぐと、意図しない面が生成される可能性があります。そのため、異常頂点を参照する面は一度除外し、必要に応じて元データから再生成する方が安全です。 線要素でも同様です。線を構成する頂点列の途中に異常頂点がある場合、異常頂点だけを飛ばして前後を直接接続すると、本来存在しない線分が作られることがあります。線を分割するのか、線要素全体を除外するのかは、用途に応じて決めます。 点要素の場合は、異常頂点への参照だけを取り除けることがあります。ただし、p行に複数の頂点番号が並んでいる場合は、残った番号が正しく書き直されているかを確認します。異常頂点しか参照していないp行は、空の要素として残さず削除します。 法線やテクスチャ座標にNaN・Infがある場合は、それらを参照する面も確認します。頂点座標が正常でも、面が異常な法線番号やテクスチャ座標番号を参照していると、読み込み時に問題が起こる可能性があります。法線を再計算できる環境であれば、異常な法線を除去して再生成する方法があります。再生成できない場合は、該当参照を持たない形式へ書き直せるかを検討します。 抽出結果は、異常な要素番号と、それを参照する行の対応が分かる形で残します。修正後の確認で、除外対象がすべて処理されたかを照合できるためです。件数だけではなく、元番号と新番号の対応も後の工程で必要になります。

修正手順3:異常頂点を削除または有限値へ補正する

異常頂点を特定したら、削除するか、妥当な有限値へ補正するかを判断します。原則として、根拠のない座標への置換は避けるべきです。NaNを単純にゼロへ置き換えると、本来の位置とは無関係な点が原点付近に集まり、形状や計測結果を誤らせる可能性があります。 点群用途では、異常点を削除できる場合が多くあります。点の密度が十分に高く、少数の異常点を除いても対象形状の把握に影響しにくい場合は、無理に座標を推定するより削除した方が安全です。ただし、基準点、境界点、端部、変化点など、重要な位置を表す点である場合は、単純削除によって成果に影響する可能性があります。 補正を行う場合は、元の計測記録、隣接点、既知の形状、処理前データなど、座標を再計算できる根拠が必要です。周辺点の平均値を使う方法は、滑らかな面の一部では参考になることがありますが、段差、角部、エッジ、薄い構造物では形状を丸めてしまいます。自動補間を行う場合は、適用範囲を限定し、補正点であることを履歴として残します。 一つの座標成分だけがNaNで、残りの二成分が正常な場合でも、欠けた成分を安易にゼロへ置き換えないようにします。たとえばZ座標だけがNaNの点をZゼロへ移動すると、広範囲の点が同じ高さへ集まり、水平面のような誤った形状が生まれることがあります。 Infの場合も同様です。非常に大きな有限値へ置き換える方法は適切ではありません。表示範囲が極端に広がり、本来の点群が小さく見えたり、数値精度が低下したりする可能性があります。Infが発生した計算過程を確認できる場合は、変換前の値から再計算します。確認できない場合は、異常点として除外する方が安全です。 異常頂点を削除する際は、対象となるv行を除外し、元の頂点番号と新しい頂点番号の対応表を作ります。たとえば元の頂点1と2を残し、頂点3を削除し、頂点4を残す場合、元の頂点4は新しい頂点3になります。この対応をすべての残存頂点について保持します。 頂点色などの追加成分を含むOBJでは、座標だけを書き換えて列構成を変えないようにします。正常な行と異なる列数にすると、読み込み側が別形式として解釈したり、行全体を無効と判断したりする可能性があります。 頂点法線に異常値がある場合は、法線を再計算できるなら、異常なvn行を除いて新たに生成します。単にゼロベクトルへ置き換えると、方向を持たない法線になり、陰影表示に影響する可能性があります。法線を利用しない用途では、法線要素と面側の法線参照を整理してから書き出す方法もあります。 テクスチャ座標の異常についても、ゼロへの置換が常に安全とは限りません。すべての異常座標を同じ位置へ集めると、画像の一部が不自然に引き伸ばされることがあります。材質表示が不要な点群用途であれば、関連する座標参照を整理し、必要な要素だけでOBJを再構成する選択肢があります。

修正手順4:頂点番号と面・線・点の参照を再構成する

異常頂点を削除した後は、頂点番号と参照関係を再構成します。この工程を省くと、NaNやInf自体は消えていても、アップロード後に面が交差する、形状が崩れる、ファイル終端付近で読み込みが失敗するといった問題が残ります。 点群OBJがv行だけで構成されており、面、線、点の参照行がない場合は、異常な頂点行を除外して残りを順番に書き出すことで修正できることがあります。この構成では、外部から頂点番号を参照していない限り、削除後の番号ずれを個別に修正する必要がありません。 一方、f、l、p行がある場合は、旧番号から新番号への対応を使ってすべての参照を書き換えます。元の頂点番号が削除対象であれば、その番号を含む要素を除外するか、用途に応じた再構成を行います。残存頂点であれば、対応表から新しい番号を取得して置換します。 面要素では、頂点番号だけでなく、テクスチャ座標番号と法線番号を別々に扱います。f 10/4/7 11/5/8 12/6/9のような記述では、頂点番号を振り直しても、テクスチャ座標や法線を削除していなければ、それらの番号は元のまま使える場合があります。反対に、vtやvnも削除した場合は、それぞれ専用の対応表を作り、参照を更新します。 スラッシュの記述形式も維持します。頂点と法線だけを参照する形式、頂点とテクスチャ座標だけを参照する形式、三つすべてを参照する形式などがあります。修正処理が空欄部分を詰めたり、区切りの数を変えたりすると、異なる意味の行になる可能性があります。 面を除外した結果、使用されなくなった頂点が残ることがあります。未参照頂点が存在しても、点群として表示する環境ではその頂点が見える場合があります。面モデルとして整理したい場合は、未参照頂点も除去して再度番号を振り直します。一方、頂点自体を点群として利用したい場合は、面から参照されていなくても残す必要があります。用途を明確にして処理します。 負の参照番号が含まれる場合は、修正前の位置関係を基に実際の参照先を求めたうえで、新しい正の番号へ書き換える方法が分かりやすく安全です。削除後も負の番号を維持することは可能ですが、各行の位置に応じて再計算が必要になり、検証が複雑になります。 オブジェクトやグループの境界も維持します。異常頂点に関連する面を削除した結果、空になったグループが生じる場合があります。空のグループ記述が直ちに問題になるとは限りませんが、不要な要素を整理した方が後の確認は容易です。ただし、グループ構造を変更すると運用上の分類が失われる可能性があるため、異常値修正に必要な範囲を超えて削除しないようにします。 再構成後は、すべての参照番号が存在する範囲に収まっているかを検査します。頂点が10個しかないのに、面が頂点11を参照していれば不正です。番号がゼロになっていないか、整数として解釈できるか、必要な要素数を満たしているかも確認します。 三角形面は通常、少なくとも三つの異なる頂点を必要とします。同じ頂点番号が重複している面は、面積がゼロになる可能性があります。四角形以上の面でも、削除や置換によって同じ番号が重複していないかを確認します。NaN・Infの除去後に、別の不正形状を残さないことが重要です。

修正手順5:修正後のOBJを検証して再アップロードする

最後の手順では、修正版OBJを機械的に検査し、表示内容を確認してから再アップロードします。文字列検索でNaNやInfが見つからないだけでは、修正完了とは判断できません。 まず、すべてのv行を読み取り、必要な座標成分が数値として解釈できることを確認します。数値変換後に有限値であること、列数が想定範囲にあること、空欄や区切りの乱れがないことを調べます。同様に、使用しているvt行とvn行も検査します。 次に、頂点数、テクスチャ座標数、法線数を数え、各参照番号が有効範囲にあるかを確認します。面、線、点の各要素について、存在しない番号、ゼロ番号、数値でない参照、区切り形式の崩れがないかを検査します。 ファイルの先頭や途中に不要な制御文字が入っていないかも確認します。NaN・Infを除く作業で文字コードや改行形式が変わると、別の解析問題につながることがあります。元のファイルが正常に扱われていた文字コードを維持するか、アップロード先の要件に合わせた一般的なテキスト形式で保存します。 座標範囲も確認します。すべて有限値であっても、極端に大きな値や小さな値が残っていると、表示や計測へ影響することがあります。X、Y、Zそれぞれの最小値と最大値を求め、想定する現場範囲と照合します。原点から大きく離れた単独点がある場合は、NaN・Infとは別の外れ値が残っている可能性があります。 頂点数の変化も記録します。修正前の頂点数、異常頂点数、修正後の頂点数が整合しているかを確認します。面や線を削除した場合も、除外数を記録します。想定より大幅に減っている場合は、検出条件が広すぎて正常な要素まで削除した可能性があります。 修正版は、アップロード前にローカルの確認環境で開きます。全体が表示されるか、形状が極端に伸びていないか、欠落範囲が広すぎないか、面が不自然に交差していないかを確認します。点群の場合は、密度の偏りや帯状の欠損がないかも見ます。 アップロード時は、元の不正ファイルと混同しない名称にします。ただし、関連ファイルから参照される名称を変更するときは、参照側も整合させます。アップロード先に同名データの更新機能やキャッシュがある場合は、新しいファイルが反映されたことを確認します。 再アップロード後は、処理完了の表示だけで判断せず、表示範囲、点数、面数、座標値、距離、面積、高低差など、業務で使用する項目を確認します。読み込めたとしても、異常点の削除や座標補正によって計測結果が変わっている可能性があるためです。

点群だけのOBJと面を含むOBJで修正方法が異なる

点群OBJという呼び方でも、実際のファイル構造は一様ではありません。頂点だけを収録したファイルもあれば、点群から生成した面を含むファイルもあります。修正方法を決める際は、拡張子だけではなく内容を確認します。 頂点行だけのOBJでは、NaN・Infを含むv行を除外し、残りを再出力する方法が比較的単純です。各点が独立しているため、少数の異常点を削除しても、ほかの点の座標そのものは変わりません。ただし、点の並び順を別の属性ファイルと対応させている場合は、頂点削除によって対応関係がずれる可能性があります。 p行で点を指定しているOBJでは、頂点行を削除した後にp行の番号も修正します。すべての頂点を一つのp行で参照している場合、異常頂点の番号を除き、残存番号を新しい頂点番号へ置換します。 面を含むOBJでは、異常頂点の影響が大きくなります。異常頂点を参照する面を削除すると、表面に穴が生じます。穴を自動的に埋める処理は可能な場合がありますが、元の形状を正確に再現できるとは限りません。重要な成果物であれば、異常頂点を除いた元点群から面を再生成する方が適切です。 線を含むOBJでは、線の連続性をどこまで維持するかを判断します。測線や境界線として使う場合、異常点の前後を勝手に接続すると位置関係を誤らせます。線を分割し、異常区間が欠損していることを明確にする方法が安全です。 頂点法線を使う面モデルでは、座標修正後に法線を再計算することがあります。頂点位置が変わったのに古い法線を残すと、表示上の陰影と形状が一致しない場合があります。頂点を削除して面構成が変わった場合も、法線の再生成を検討します。

自動修正するときに設けたい安全条件

大規模な点群OBJでは、手作業で全行を確認するのは現実的ではありません。そのため、異常値の検出、頂点削除、番号変換、参照更新を自動化することがあります。ただし、自動修正は条件を明確にしないと、正常なデータまで失う危険があります。 自動処理では、まず入力ファイルを読み取り専用として扱い、出力先を分けます。処理途中で異常が見つかった場合に、原本が変更されない構成にします。処理結果には、読み取った頂点数、異常頂点数、削除した面数、残存要素数、警告内容を記録します。 検出条件は、文字列の一致だけではなく、数値変換後の有限性で判定します。加えて、座標の列が不足している行、数値へ変換できない行も異常候補として扱います。ただし、コメントやグループ名など、数値要素ではない行まで処理対象に含めないようにします。 削除率が一定範囲を超えた場合は、自動処理を中止する条件を設けます。たとえば異常頂点がごく少数である想定なのに、全体の大部分が異常と判定された場合は、列の解釈、区切り文字、文字コード、入力形式などを誤っている可能性があります。そのまま出力すると、ほとんど空のOBJになるおそれがあります。 異常頂点を参照する面を自動削除する場合も、削除面数が多すぎるときは警告を出します。多数の面が一つの異常頂点を共有している場合、局所的な穴ではなく、広範囲の形状が失われる可能性があります。 座標補間は、削除よりさらに慎重な条件が必要です。補間対象の周囲に十分な正常点があること、点間距離が一定範囲であること、局所的な形状が急変していないことなどを確認します。条件を満たさない点は、無理に補正せず異常として記録します。 自動処理後には、出力ファイルを再度読み込む検証工程を必ず設けます。自分で出力したファイルだから正しいと仮定せず、別工程として数値、参照範囲、要素数、座標範囲を検査します。書き出し処理の不具合や、番号対応の漏れを見つけるためです。

NaN・Infの再発を防ぐ書き出し前チェック

OBJを修正できても、元の変換工程が同じままであれば、次回の書き出しで再びNaNやInfが発生します。継続的な運用では、完成したOBJだけでなく、生成前のデータ処理を見直すことが重要です。 元データを読み込んだ直後に、座標列が数値として解釈できるかを確認します。空欄、欠損記号、文字列、桁区切り、単位記号などが混ざっていないかを調べます。欠損値を検出した場合は、計算工程へ進める前に除外、保留、再計測などの処理方針を決めます。 座標変換の前後でも有限値検査を行います。最終的なOBJだけを検査すると、どの工程で異常が生じたのか分かりにくくなります。原点移動後、回転後、縮尺変更後、座標系変換後など、主要な処理ごとに異常件数を記録すると原因を絞りやすくなります。 単位設定も確認します。入力がメートルなのかミリメートルなのか、標高が同じ単位で扱われているか、倍率が複数回適用されていないかを見ます。単位の誤りは、有限値のままでも極端な座標を作るため、NaN・Inf検査と座標範囲検査を組み合わせます。 除算や正規化を含む処理では、分母やベクトル長がゼロに近くないかを確認します。ゼロ除算を避けるための条件分岐を設け、計算不能な点は明示的に除外します。計算結果が異常になってから文字列へ書き出すのではなく、演算直後に検出することが大切です。 複数の点群を結合するときは、各ファイルの座標系、単位、列構成、欠損値表現を統一します。一部だけ異なる条件のデータを無理に同じ処理へ流すと、特定範囲に異常値が集中します。結合前にファイル単位の検査結果を残すと、問題のある入力を特定しやすくなります。 OBJ書き出し直前には、全頂点の有限性、座標範囲、頂点数、重複点数、参照番号を確認します。書き出し後にも完成ファイルを読み直し、同じ検査を実施します。処理内部のデータが正常でも、文字列化やファイル出力の段階で形式が崩れる可能性があるためです。

アップロード後に確認すべき表示と計測結果

NaN・Infを除いたOBJが正常にアップロードできても、業務に使える状態とは限りません。異常点や関連面を削除した影響を確認し、目的に必要な精度と情報が残っているかを判断します。 最初に確認するのは、全体の表示位置と範囲です。修正前に極端な異常座標が含まれていた場合、その点が表示範囲を押し広げていた可能性があります。修正後に対象が適切な大きさで表示されること、原点付近や遠方に不要な点が残っていないことを確認します。 次に、異常点を削除した範囲を拡大します。局所的な欠損で収まっているか、線状や面状に大きく抜けていないかを見ます。欠損が重要箇所に重なる場合は、元データからの再生成や再計測を検討します。 面を含むOBJでは、穴、裏返り、交差、細長い面、孤立面がないかを確認します。異常頂点を含む面を除去したことで、周辺の面構成が不自然になっている場合があります。表示上は目立たなくても、断面作成や体積計算で影響が出る可能性があります。 座標計測では、既知の基準点や特徴点を使って位置を照合します。異常値除去の作業中に原点移動、軸の入れ替え、単位変更が起きていないことを確認します。二点間距離、高低差、代表座標など、簡単に確認できる値を修正前の正常な資料と比較します。 点数や面数が表示される環境では、修正記録と照合します。修正前の頂点数から削除頂点数を引いた値が、修正後の頂点数と一致するかを確認します。面数についても同様です。一致しない場合は、修正処理で追加の要素が除去された可能性があります。 計測値が成果や数量に関係する場合は、異常値除去前後の差を記録します。NaNやInfは計算から自動的に除外されていた可能性もあれば、処理全体を不安定にしていた可能性もあります。アップロードできたことだけを理由に、以前の集計値と同じになるとは限りません。 現場で新しい点群を継続的に扱う場合は、ファイル受け渡し時の確認項目として、有限値検査、座標範囲、頂点数、参照整合性を定型化すると効果的です。担当者ごとに確認方法が異なる状態を避け、アップロード前に同じ基準で判定できる運用を整えます。

まとめ

点群OBJアップロードでNaN・Inf頂点が原因となるエラーを解消するには、異常な文字列だけを置換するのではなく、OBJ全体の構造を踏まえて修正する必要があります。 最初に原本を保全し、NaNやInfがどの要素に何件含まれているかを確認します。次に、異常頂点が面、線、点から参照されていないかを調べます。そのうえで、根拠のないゼロ置換を避け、削除または再計算によって有限値だけを残します。 頂点を削除した場合は、旧番号と新番号の対応を作り、面、線、点の参照を更新します。法線やテクスチャ座標にも異常がある場合は、それぞれを独立して検査し、参照関係を整えます。最後に、すべての数値が有限であること、参照番号が有効範囲にあること、座標範囲と要素数が想定どおりであることを確認してから再アップロードします。 異常点が少数であれば、適切な除去によってOBJを復旧できる可能性があります。一方、異常値が広範囲に連続している場合や、多数の面が欠落する場合は、完成したOBJを無理に補修するより、元の点群処理や座標変換から再出力する方が安全です。 NaN・Infの発生を減らすには、計測データの取り込み時、座標変換後、OBJ書き出し前、書き出し後の各段階で有限値検査を行うことが重要です。さらに、座標単位、原点、点数、座標範囲、参照番号を定型的に確認すれば、点群OBJアップロード時の手戻りを抑えやすくなります。 現場で取得した情報を点群として整理し、アップロード、共有、計測まで一貫して進めるには、取得段階から異常値を生みにくい運用を整えることも欠かせません。現地での計測とデータ作成を効率化したい場合は、LRTK Phoneを活用した点群取得の流れもあわせて検討すると、後工程を見据えたデータ管理につなげやすくなります。

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

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