LRTKレフィクシア株式会社

点群OBJアップロードで負の頂点番号を使う際の5つの注意点

負の頂点番号とは何か

点群から作成したメッシュをOBJ形式でアップロードするとき、面を構成する頂点の参照番号に負の値が使われることがあります。OBJファイルをテキストとして開いた際に、「f -3 -2 -1」や「f -4/-4/-1 -3/-3/-1 -2/-2/-1」のような行が見つかる場合です。

ここで使われる負の番号は、座標値がマイナスであることを意味しません。頂点座標のX、Y、Zに負の値が含まれることと、面の参照番号が負であることは別の問題です。負の頂点番号は、その面が記述された時点までに定義されている頂点を、末尾から数えて参照するための相対番号です。

OBJでは、一般に「v」で始まる行が頂点座標、「vt」で始まる行がテクスチャ座標、「vn」で始まる行が法線、「f」で始まる行が面を表します。面の行に正の番号が使われている場合、番号はファイル内で定義された要素を先頭から数えます。たとえば、1番は最初に定義された頂点、2番は2番目に定義された頂点です。

一方、負の番号では末尾側から数えます。「-1」は、その面の行より前に定義された最後の頂点です。「-2」は最後から2番目、「-3」は最後から3番目を表します。

たとえば、次のような内容を考えます。

v 0 0 0
v 1 0 0
v 1 1 0
v 0 1 0
f -4 -3 -2 -1

この例では、面が記述された時点で4個の頂点が定義されています。そのため、「-4」は1番目の頂点、「-3」は2番目、「-2」は3番目、「-1」は4番目の頂点を参照します。結果として、「f 1 2 3 4」と同じ頂点を使った面になります。

負の頂点番号には、OBJを逐次生成しやすいという利点があります。頂点を追加した直後に、その頂点を使って面を記述する処理では、ファイル全体の頂点数を把握しなくても「-1」「-2」「-3」といった番号で直前の頂点を指定できます。

しかし、負の番号は面の記述位置に依存します。頂点行を追加したり、面行を別の場所へ移動したりすると、同じ「-1」でも参照先が変わります。この性質を理解せずにファイルを編集すると、アップロード後に面が抜ける、形状が崩れる、遠く離れた頂点同士が接続されるといった問題が発生します。

また、すべての点群OBJに面が含まれているわけではありません。「v」行だけで構成されたOBJは、頂点の集合として点を記録している可能性があります。このようなデータには「f」行がないため、面の負の頂点番号も存在しません。負の番号に関する確認が必要なのは、点群から三角形や多角形のメッシュを生成し、面や線などから頂点を参照しているOBJです。

点群OBJアップロードで問題が発生したときは、最初にファイル内の行種別を確認し、負の番号が実際に使われているかを調べることが重要です。

注意点1 相対参照の基準位置を正しく理解する

負の頂点番号を扱う際に最も重要なのは、どの位置を基準に番号を解決するかです。負の番号は、OBJファイル全体の最後にある頂点から数えるわけではありません。各面の行を読み込んだ時点で、その行より前に存在する頂点の末尾から数えます。

この違いは、頂点と面が交互に記述されたOBJで特に重要です。ファイルの冒頭にすべての頂点が集められ、その後に面が並ぶ構造であれば、各面を読む時点の頂点数はファイル全体の頂点数と一致します。しかし、部品や領域ごとに頂点と面を書き出す構造では、面ごとに基準となる頂点数が異なります。

たとえば、次のようなOBJを考えます。

v 0 0 0
v 1 0 0
v 1 1 0
v 0 1 0
f -4 -3 -2 -1

v 0 0 1
v 1 0 1
v 1 1 1
v 0 1 1
f -4 -3 -2 -1

最初の面を読み込む時点では、頂点は4個です。したがって、最初の「f -4 -3 -2 -1」は1番目から4番目までの頂点を参照します。

2番目の面を読み込む時点では、頂点が8個に増えています。そのため、2番目の同じ記述は5番目から8番目までの頂点を参照します。文字列が同じでも、面の記述位置によって参照先は異なります。

負の番号を正の番号へ変換するときは、現在までに読み込んだ頂点数を使います。面を読み込んだ時点の頂点数をN、負の頂点番号をIとすると、正の番号は「N+I+1」で求められます。

頂点が10個ある時点で「-1」を変換する場合は、10+(-1)+1となり、10番目の頂点です。「-3」であれば、10+(-3)+1となり、8番目の頂点です。

ここでファイル全体の総頂点数を使うと、途中にある面の参照先を誤ります。面より後ろに追加された頂点は、その面の負の番号を解決する際には使用できません。

たとえば、4個の頂点を定義した後に「f -3 -2 -1」があり、その後ろに100個の頂点が追加されている場合を考えます。面が参照しているのは、最初の4個のうち2番目、3番目、4番目の頂点です。最終的な総頂点数である104を基準に変換してはいけません。

負の番号の絶対値が、面より前に定義された頂点数を超えていないかも確認が必要です。頂点が4個しかない時点で「-5」が指定されている場合、参照先は存在しません。

変換結果が0以下になる番号は不正です。OBJの頂点番号は原則として1から始まり、0番の頂点はありません。「f 0 1 2」のように0を含む面や、負の番号を変換した結果が0になる面は、正常な参照として扱えません。

負の頂点番号の検査では、ファイル全体の頂点数と面数を数えるだけでは不十分です。ファイルを先頭から順番に読み、各面が現れた時点で参照可能な頂点数を基準に確認する必要があります。

点群から生成した大規模メッシュでは、頂点行と面行が数十万行以上になることがあります。目視で番号を確認するのは現実的ではないため、上から順番に解析する検査処理を用意することが望ましいです。

注意点2 頂点・テクスチャ座標・法線を分けて扱う

OBJの面では、頂点座標だけでなく、テクスチャ座標や法線を同時に参照できます。このため、スラッシュで区切られた負の番号をすべて同じ基準で変換すると、形状や表示が崩れる可能性があります。

面の各要素には、主に次のような記述方法があります。

頂点番号だけを使う場合は「f 1 2 3」のように記述します。頂点番号とテクスチャ座標番号を使う場合は「f 1/1 2/2 3/3」となります。頂点番号と法線番号を使い、テクスチャ座標を省略する場合は「f 1//1 2//1 3//1」と記述します。頂点番号、テクスチャ座標番号、法線番号をすべて使う場合は「f 1/1/1 2/2/1 3/3/1」となります。

負の番号も同じ位置に使用できます。

f -3/-3/-1 -2/-2/-1 -1/-1/-1

この記述に含まれる最初の番号は、「v」行で定義された頂点座標を参照します。2番目の番号は「vt」行で定義されたテクスチャ座標を参照します。3番目の番号は「vn」行で定義された法線を参照します。

それぞれが独立した番号体系を持っている点が重要です。頂点が1万個、テクスチャ座標が8千個、法線が500個ある場合、「-1/-1/-1」は1万番目の頂点、8千番目のテクスチャ座標、500番目の法線を参照します。

3つの「-1」が同じ通し番号を意味するわけではありません。負の番号を正の番号へ変換するときは、頂点番号には現在までの「v」行数、テクスチャ座標番号には現在までの「vt」行数、法線番号には現在までの「vn」行数を使います。

点群から作成されたメッシュでは、頂点数とテクスチャ座標数が一致するとは限りません。1つの頂点位置に複数のテクスチャ座標が割り当てられることがあるためです。面の境界や画像の継ぎ目では、空間上は同じ位置でも異なるテクスチャ座標を持つ頂点表現が必要になる場合があります。

法線についても、各頂点に1つずつ用意されるとは限りません。複数の面が1つの法線を共有する場合もあれば、同じ頂点位置に対して面ごとに異なる法線が使われる場合もあります。

形状は正常に表示されるのに、表面の画像だけがずれる場合は、頂点番号ではなくテクスチャ座標番号に問題がある可能性があります。負のテクスチャ座標番号を頂点数で変換してしまうと、意図しない場所の座標を参照するためです。

色や画像は正しいのに陰影が不自然な場合は、法線番号の参照を確認します。負の法線番号の変換基準を間違えると、別の方向を向いた法線が面へ割り当てられ、明るさや境界の見え方が変化します。

テクスチャ座標を省略して法線だけを使う場合は、スラッシュを2本続けます。

f -3//-1 -2//-1 -1//-1

この記述を「-3/-1」のようにスラッシュ1本で書くと、2番目の番号は法線ではなくテクスチャ座標として解釈される可能性があります。テクスチャ座標が存在しなければ参照エラーとなり、存在していれば意図しない座標が割り当てられます。

面の中で参照形式を混在させることも避けたほうが安全です。1つの面の一部だけにテクスチャ座標や法線が付いていると、アップロード先の読み込み処理によっては正常に解釈されないことがあります。

負の番号を確認するときは、「マイナス記号があるか」だけを見るのではなく、スラッシュの前後にある番号が何を参照しているかを分けて確認することが重要です。

注意点3 ファイルの結合や並べ替えで参照を壊さない

負の頂点番号は記述位置に依存するため、OBJファイルを結合、分割、並べ替え、編集する工程で参照先が変わりやすいという特徴があります。

特に注意したいのが、複数のOBJを1つにまとめる処理です。各OBJをそのまま末尾へ追加し、頂点と面の順番を維持するだけであれば、負の番号が正常に機能する場合があります。各部品の頂点を記述した直後に、その頂点を参照する面が置かれているためです。

しかし、結合処理で「すべての頂点行を先頭に集め、その後ろにすべての面行を並べる」という整理を行うと、負の番号の意味が変わります。

元のファイルで「直前に追加された3個の頂点」を表していた「f -3 -2 -1」が、並べ替え後にはファイル全体の最後にある3個の頂点を参照することになります。複数の面が同じ末尾の頂点へ集中し、形状が崩れる原因になります。

遠く離れた頂点が1枚の面で結ばれると、モデル全体を横断する巨大な三角形が現れることがあります。複数の面が同じ頂点を参照すると、面が一点へ収束したような形になる場合もあります。

ファイルを並べ替える予定がある場合は、並べ替え前に負の番号を正の番号へ変換する方法が有効です。元の位置関係を維持した状態で絶対番号へ変換しておけば、面がどの頂点を参照しているかを追跡しやすくなります。

ただし、正の番号へ変換した後に頂点行の順番まで変える場合は、参照番号の再割り当てが必要です。正の番号は頂点の並び順に対応しているため、頂点行を移動しただけでは元の形状を維持できません。

不要な頂点を削除する場合も同様です。面から参照されていない頂点を1個削除すると、その頂点より後ろにあった頂点の正の番号が1つずつ前へ移動します。負の番号についても、面より前に存在する頂点数が変わるため、参照先が変化する可能性があります。

不要頂点を除去する処理では、残す頂点へ新しい連続番号を割り当て、その対応関係に基づいて面の番号を書き換える必要があります。テクスチャ座標と法線を整理する場合も、それぞれ独立して再番号付けします。

OBJを領域ごとに分割する場合も、面行だけを別ファイルへ移動してはいけません。その面が参照している頂点、テクスチャ座標、法線を同じファイルへ移す必要があります。

負の番号が分割前のファイル内で正常だったとしても、分割後のファイルでは面より前にある頂点数が変わります。その結果、同じ負の値が別の頂点を参照したり、範囲外になったりします。

分割後のOBJでは、使用する頂点だけを抽出し、1から始まる正の番号へ付け直すと管理しやすくなります。この方法であれば、切り出したファイル単体でも参照関係を確認できます。

グループ名、オブジェクト名、材質の指定行を移動しただけでは、通常は頂点番号に直接影響しません。しかし、グループごとに面をまとめるために面行そのものを移動すると、負の番号の基準となる頂点数が変わります。

テキスト編集で一部の行をコピーし、別の位置へ貼り付ける作業も危険です。負の番号を含む面を移動する場合は、その面が元の位置で参照していた頂点を特定し、移動後の位置に合わせて番号を書き換えなければなりません。

負の頂点番号を含むOBJは、単なる行の集合ではなく、行の順番によって意味が決まるデータです。文字列を機械的に並べ替えるだけでは、形状を維持できない可能性があります。

ファイルの加工後には、頂点数と面数だけでなく、各面の参照先が範囲内にあるか、変換前と同じ形状を表しているかを再検査することが必要です。

注意点4 アップロード先の対応状況を事前に確認する

負の頂点番号を使用したOBJが、すべてのアップロード環境で同じように読み込まれるとは限りません。OBJの基本的な記述として利用される形式であっても、アップロード機能や変換処理の実装範囲によって対応状況が異なるためです。

ある閲覧環境では正常に表示できても、別のアップロード先ではエラーになることがあります。これは、閲覧側とアップロード側で異なる読み込み処理が使われている可能性があるためです。

アップロード処理では、OBJの読み込みだけでなく、面の三角形化、法線の計算、テクスチャの関連付け、座標の変換、表示用データへの変換などが行われる場合があります。

最初の解析処理が負の番号に対応していても、後段の処理が正の番号だけを前提にしていれば、変換の途中で失敗する可能性があります。そのため、ファイルを選択できたことや、アップロードが開始されたことだけでは、完全に対応しているとは判断できません。

表示されるエラー内容も、必ずしも原因を直接示すとは限りません。負の頂点番号を解決できなかった結果として、「モデルを読み込めない」「変換に失敗した」「不正な面が含まれる」といった広い内容のエラーが表示される場合があります。

対応状況が不明な場合は、負の番号を使った小さなOBJと、同じ形状を正の番号で記述したOBJを用意し、両方をアップロードして比較します。

たとえば、負の番号版を次のようにします。

v 0 0 0
v 1 0 0
v 0 1 0
f -3 -2 -1

正の番号版では、面の行だけを次のように変更します。

f 1 2 3

負の番号版だけが失敗し、正の番号版が成功する場合は、アップロード処理が負の相対参照に対応していない、または一部の処理に制限がある可能性があります。

両方が失敗する場合は、負の番号以外の原因を疑います。文字コード、改行形式、頂点座標の書式、面の構成、ファイルの拡張子、関連ファイルの指定などを確認します。

互換性を重視する場合は、アップロード前に負の番号を正の番号へ変換する方法が安全です。負の番号はOBJを生成するときに便利ですが、最終的なデータに残す必要があるとは限りません。

正の番号に変換しても、正しく同じ頂点を参照していれば、形状情報そのものは変わりません。負の番号と正の番号は、同じ頂点を指定するための異なる記述方法です。

負の番号のほうが桁数を短くできる場合はありますが、点群やメッシュの全体容量に対して、番号部分だけの差が大きな削減効果につながるとは限りません。アップロードの安定性を優先するなら、容量のわずかな差より互換性を重視するほうが実務的です。

運用としては、中間生成データでは負の番号を利用し、アップロード用または保管用の最終データでは正の番号に統一する方法があります。生成処理を簡潔にしながら、外部環境への受け渡し時には互換性を確保しやすくなります。

ただし、変換処理自体に誤りがあると、元の負の番号を残す場合より深刻な形状崩れを生むことがあります。正の番号へ変換した後は、参照範囲と形状の両方を確認することが重要です。

注意点5 最小データと自動検査で問題を見つける

大容量の点群OBJをそのままアップロードし、エラーが起きてから原因を目視で探す方法は効率的ではありません。点群から作成されたメッシュには、数十万から数百万単位の頂点や面が含まれることがあるためです。

負の頂点番号に関する問題を調べるときは、最初に最小構成のOBJを作成します。三角形1枚や四角形1枚だけを含むファイルであれば、アップロード先の対応状況や記述方法の問題を確認しやすくなります。

実際のOBJが頂点番号だけを使っている場合は、頂点と面だけの最小データで確認できます。テクスチャ座標や法線も使っている場合は、最小データにも同じ参照形式を含めます。

実データが「頂点番号/テクスチャ座標番号/法線番号」の形式であるにもかかわらず、頂点番号だけの簡易データで検証しても、テクスチャ座標や法線に関する問題は再現できません。検証用データは、実データと同じ構造にすることが重要です。

最小データで負の番号版と正の番号版を比較した後は、実データに対する自動検査を行います。検査処理ではOBJを先頭から1行ずつ読み、現在までに定義された頂点数、テクスチャ座標数、法線数を個別に記録します。

「v」行を読み込んだら頂点数を1増やし、「vt」行ならテクスチャ座標数、「vn」行なら法線数を増やします。「f」行が現れたら、各要素の番号を分解し、その時点の要素数を基準に参照先を確認します。

正の頂点番号の場合は、1以上であり、その時点の頂点数以下であることを確認します。負の頂点番号の場合は、正の番号へ換算した結果が1以上であり、その時点の頂点数以下であることを確認します。0は無効です。

テクスチャ座標番号と法線番号にも同じ検査を行います。ただし、頂点数とは別の件数を使います。

面を構成する頂点数も確認します。通常の多角形面として扱うには、少なくとも3個の頂点参照が必要です。2個以下しか指定されていない「f」行は、正常な面として扱えない可能性があります。

変換後に同じ頂点番号が重複していないかも確認します。「f 10 10 12」のように同一頂点が複数回含まれる面は、面積が0になる可能性があります。3つの頂点番号が異なっていても、座標値が同一であれば面積が0になることがあるため、必要に応じて座標も確認します。

負の番号を正の番号へ変換するときは、面に書かれた番号の順序を維持します。面の頂点順序は表裏や法線方向に影響するためです。

たとえば、「-3 -2 -1」という負の値を数値の大きさで並べ替えたり、単純にマイナス記号を取り除いて「3 2 1」にしたりしてはいけません。現在の頂点数を基準に、各番号を個別に正しい正の番号へ置き換えます。

変換前後では、頂点数、面数、テクスチャ座標数、法線数を比較します。番号表現だけを変更したのであれば、これらの件数は基本的に一致します。

面数が減っている場合は、変換処理が不正と判断した面を削除している可能性があります。不正面の除去を意図していないのであれば、どの行が削除されたかを確認する必要があります。

頂点座標の最大値と最小値から求められる範囲も確認項目になります。番号を変換しただけであれば、頂点座標自体は変化しないため、座標範囲も一致するはずです。

形状確認では、モデル全体を表示するだけでなく、複数方向から確認します。負の参照が誤っていると、遠く離れた頂点同士を結ぶ細長い面や巨大な面が生じることがあります。全体を遠くから見ただけでは気づきにくいため、外周、段差、壁面、地表面、構造物の角などを拡大して確認します。

自動検査で問題が見つかった場合は、該当する面と、その面より前にある必要な頂点だけを抜き出して小さなOBJを作ります。問題を再現できる最小データがあれば、参照番号の誤りなのか、アップロード先の対応範囲なのかを切り分けやすくなります。

負の番号を正の番号へ変換する実務手順

負の頂点番号を正の番号へ変換する際は、ファイル内の負の数値を一括置換してはいけません。OBJには負の座標値が含まれる場合があり、頂点座標のマイナス記号まで変更するとモデルの位置や形状が変わってしまいます。

変換対象は、「f」などの要素行に含まれる参照番号です。行の種類を判定し、番号として使われている部分だけを処理します。

最初に元のOBJを複製し、変換前のデータを保管します。変換後に形状が崩れた場合、元データと比較できる状態を残します。

次に、ファイルを先頭から順番に読みます。現在までに読み込んだ頂点数、テクスチャ座標数、法線数を別々に管理します。

「v」行を読み込んだ場合は頂点数を増やします。「vt」行ではテクスチャ座標数、「vn」行では法線数を増やします。「f」行では、空白で区切られた各面要素を取り出します。

面要素が「-3」のような単一番号であれば、現在の頂点数を使って正の番号へ変換します。「-3/-2」のような形式なら、最初の値を頂点数、2番目の値をテクスチャ座標数で変換します。

「-3//-1」のような形式では、中央のテクスチャ座標番号が省略されています。最初の値は頂点数、最後の値は法線数で変換します。

「-3/-3/-1」のように3つの番号がある場合は、それぞれ頂点数、テクスチャ座標数、法線数を基準に変換します。

正の番号はそのまま維持できます。1つのOBJ内で正の番号と負の番号が混在している場合でも、負の番号だけを変換し、正の番号を不用意に変更しないようにします。

変換の途中で、番号が範囲外になっていないかを確認します。負の番号を正の番号へ換算した結果が0以下になった場合、その参照は不正です。また、現在までに定義された件数を超える正の番号も不正です。

不正な面を発見した場合、処理をそのまま続けて面を削除するのか、エラーとして停止するのかを事前に決めます。原因調査を目的とする場合は、勝手に削除せず、行番号と内容を記録して停止するほうが安全です。

変換後は別名で保存し、元ファイルを上書きしない運用が適しています。元データ、変換済みデータ、検証済みデータを分けて管理すると、どの段階で問題が発生したかを確認しやすくなります。

保存後には、変換後のOBJを再度先頭から解析します。負の参照が残っていないか、0番参照や範囲外参照がないかを確認します。

その後、変換前後の頂点数、面数、テクスチャ座標数、法線数を比較します。さらに、複数の代表地点で形状を確認します。

三角形の頂点順序が維持されているかも重要です。変換前後で面の頂点順序が変わると、表裏が反転する可能性があります。

大容量データでは、全形状を人が確認するだけでは不足します。面ごとの辺長や面積を計算し、変換後に極端に長い辺や巨大な面が増えていないかを調べると、誤参照を検出しやすくなります。

元の点群を保管している場合は、変換後のメッシュを点群と重ねて確認します。メッシュが点群から大きく離れている箇所があれば、負の番号の変換やファイル編集で参照関係が崩れている可能性があります。

アップロード失敗を症状別に切り分ける方法

点群OBJアップロードに失敗した際は、負の頂点番号だけを原因と決めつけず、表示される症状から順番に切り分けます。

アップロード直後に形式エラーになる場合は、まず面の番号形式を確認します。0番参照、範囲外参照、スラッシュの不足、不要な区切り、数値以外の文字が混入していないかを調べます。

負の番号を正の番号へ変換したファイルだけが成功する場合は、アップロード先が負の相対参照を処理できていない可能性があります。ただし、変換処理中に別の不正な行が削除されている可能性もあるため、変換前後の差分を確認します。

アップロード自体は完了するものの、一部の面が抜ける場合は、その面の参照番号が範囲外になっている可能性があります。読み込み処理によっては、ファイル全体をエラーにせず、不正な面だけを無視する場合があります。

面が抜けている位置を特定できる場合は、その周辺の面行と頂点行を抜き出します。面を読み込んだ時点の頂点数を数え、負の番号がどの正の番号に変換されるかを確認します。

モデルの一部が遠くへ伸びる場合は、面が意図しない頂点を参照している可能性があります。特に、複数OBJの結合後や、頂点と面を並べ替えた後に発生した場合は、負の番号の基準位置が変わっていないかを確認します。

モデルの面が一点へ集まる場合は、複数の面が同じ末尾の頂点を参照している可能性があります。負の番号を含む面をまとめてファイル後半へ移動した場合に起こりやすい症状です。

形状は正しいものの表面の画像がずれる場合は、テクスチャ座標番号を確認します。負のテクスチャ座標番号を頂点数で変換していないか、テクスチャ座標の並べ替え後に番号を更新しているかを調べます。

形状と表面画像は正しいものの、陰影に筋が入る、面ごとに明るさが不自然に変わる場合は、法線番号を確認します。法線の負の番号が別の法線を参照している可能性があります。

一部の面だけ表裏が反転する場合は、頂点番号の順序を確認します。負の番号を変換する際に、番号を並べ替えたり、単純に符号だけを削除したりすると、面の巡回方向が変わります。

ファイル分割後にだけ失敗する場合は、分割した面が元ファイル内の頂点を参照していないかを確認します。分割後のファイル内で必要な頂点を抽出し、新しい番号を割り当てる必要があります。

正の番号へ変換してもアップロードできない場合は、負の番号以外の原因を確認します。面積が0の面、同一頂点の重複参照、極端に大きい座標値、不正な数値表現、行の途中での改行、文字コードの問題などが考えられます。

点だけのOBJをアップロードしている場合は、面の負の頂点番号は原因になりません。「f」行が存在しないのであれば、頂点座標の数値形式、点数、ファイル容量、アップロード先が点集合を扱えるかといった別の条件を調べます。

原因を切り分けるときは、一度に複数の変更を加えないことが重要です。負の番号を正の番号へ変換すると同時に、面を三角形へ分割し、法線を削除し、頂点も間引くと、どの変更によって成功したのか分からなくなります。

最初は番号表現だけを変更し、次に法線、テクスチャ、面の健全性という順番で比較します。変更内容を記録しながら進めることで、再発時にも同じ手順で原因を特定できます。

点群OBJアップロード前に確認したい運用上のポイント

負の頂点番号の問題を防ぐには、個別ファイルをその都度修正するだけでなく、書き出しからアップロードまでの運用を標準化することが有効です。

まず、点群からOBJを書き出す際に、点だけを出力するのか、面を持つメッシュとして出力するのかを明確にします。点集合とメッシュでは、アップロード時に確認すべき項目が異なります。

メッシュとして出力する場合は、頂点、面、テクスチャ座標、法線の有無を記録します。負の参照番号が使われる可能性がある書き出し方式であれば、アップロード前の変換工程をあらかじめ組み込みます。

書き出し直後のOBJを原本として保管し、編集用、変換用、アップロード用を別ファイルにします。同じファイルを繰り返し上書きすると、どの処理によって番号や形状が変わったのか追跡しにくくなります。

ファイル名には、取得日、対象範囲、処理段階、版番号などを含めると管理しやすくなります。ただし、アップロード先で使用できる文字に制限がある場合も考え、記号や長すぎる名称を避ける運用も必要です。

OBJを結合する場合は、負の番号を含むかどうかを結合前に確認します。負の番号を残したまま頂点と面を並べ替える処理は避けます。

分割する場合は、面が参照する要素を一緒に抽出し、分割後に再番号付けします。単純な行範囲の切り出しでは、必要な頂点が含まれない可能性があります。

アップロード前には、自動検査を行います。負の番号、0番参照、範囲外参照、面を構成する頂点数、スラッシュ形式、重複参照を確認します。

検査でエラーがなければ、軽量なテストファイルをアップロードします。本番データが非常に大きい場合でも、同じ記述形式の小さなデータで先に挙動を確認することで、長時間のアップロード後に形式エラーが判明する事態を避けやすくなります。

本番ファイルをアップロードした後は、処理完了の表示だけで正常と判断しません。モデルの位置、向き、大きさ、面の欠落、異常な突起、テクスチャのずれ、陰影の不連続を確認します。

地表面、壁面、段差、構造物の角、細い部材などは、点群からメッシュを生成する際に面の接続が複雑になりやすい場所です。複数方向から拡大し、形状が連続しているかを確認します。

座標値が大きい点群では、負の頂点番号とは別に数値精度の問題が発生することがあります。形状が全体的に震える、細部がつぶれる、位置がずれる場合は、座標原点や数値の桁数も確認します。

アップロードの成否と、形状品質は分けて考える必要があります。ファイル形式として読み込めても、取得時の点群密度が不足していれば、壁や地表面に穴が生じることがあります。反対に、元のメッシュが正常でも、参照番号が壊れていればアップロード後の形状は崩れます。

正常に処理できた書き出し条件と検査結果は記録し、標準手順として共有します。担当者ごとに異なる方法でOBJを加工すると、同じ種類のデータでも結果に差が出ます。

負の番号を使用しない設定で安定して書き出せる場合は、アップロード用データでは正の番号へ統一する運用も検討できます。負の番号を使う必要性がない工程で、相対参照を残し続けるメリットは限定的です。

まとめ

点群OBJアップロードで使用される負の頂点番号は、負の座標値ではなく、面より前に定義された頂点を末尾側から参照する相対番号です。「-1」はその時点で最後に定義された頂点、「-2」は最後から2番目の頂点を表します。

1つ目の注意点は、負の番号をファイル全体の最終頂点数から計算しないことです。面を読み込んだ時点までに定義された頂点数を基準に解決します。

2つ目の注意点は、頂点、テクスチャ座標、法線をそれぞれ独立して扱うことです。スラッシュで区切られた各番号は、異なる一覧を参照しています。同じ「-1」であっても、頂点の末尾、テクスチャ座標の末尾、法線の末尾という異なる要素を指します。

3つ目の注意点は、ファイルの結合、分割、並べ替え、頂点削除によって負の番号の参照先が変わることです。負の番号を含む面行を移動するだけでも、面より前にある頂点数が変われば意味が変化します。

4つ目の注意点は、アップロード先が負の頂点番号に対応しているとは限らないことです。別の環境で表示できたOBJでも、アップロード処理では失敗する可能性があります。互換性を優先する場合は、最終データを正の番号へ変換します。

5つ目の注意点は、最小構成のOBJと自動検査を利用することです。大容量データだけで試行錯誤するのではなく、負の番号版と正の番号版を比較し、参照範囲や記述形式を機械的に確認します。

負の頂点番号は、OBJを逐次生成する工程では便利な記述方法です。しかし、最終的なアップロードデータや長期保管データに必ず残さなければならないものではありません。

生成中は負の番号を使用し、アップロード前に正の番号へ変換して検証する運用にすると、生成処理の簡潔さとデータ互換性を両立しやすくなります。

点群OBJを安定して活用するには、頂点番号の確認だけでなく、点群取得時の密度、対象物との距離、地表面や壁面の撮り方、座標管理、メッシュ生成条件まで含めて工程を整えることが重要です。現場での点群取得から確認、共有までを効率化したい場合は、LRTK Phoneを活用した運用も確認してみてください。

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

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