LRTKレフィクシア株式会社

点群OBJアップロード後にグループ階層が消える原因と5対策

点群OBJアップロード後にグループ階層が消えるのはなぜか

点群や3DモデルをOBJ形式で書き出し、クラウド型の閲覧環境や施工管理環境へアップロードしたところ、元データでは分かれていたグループが一つにまとまってしまうことがあります。地形、構造物、設備、施工区画、計測日などで整理していたデータがアップロード後に平坦化されると、必要な部分だけを表示したり、対象を選択したりする作業が難しくなります。

特に「点群 OBJ アップロード」で検索している実務担当者にとって注意したいのは、アップロード処理そのものだけが原因とは限らない点です。OBJを書き出した時点ですでに階層が失われている場合もあれば、OBJには情報が残っているものの、アップロード先の変換処理で統合されている場合もあります。また、グループ名の付け方やファイル構成によって、期待した区分として認識されないこともあります。

重要なのは、OBJに保存される「グループ」と、3D編集環境で表示される「階層」を同じものとして扱わないことです。多くの3Dデータでは、画面上で親グループの中に子グループが入るツリー構造を利用できます。しかしOBJは、このような複雑な親子関係を完全に保存することを主目的とした形式ではありません。

そのため、元データで「現場全体」の下に「建物A」「建物B」があり、その下にさらに「柱」「梁」「床」が配置されていたとしても、OBJに変換すると同じ階層のグループとして扱われたり、アップロード先では一つのモデルとして統合されたりする可能性があります。

グループ階層が消えたときは、いきなり再アップロードを繰り返すよりも、「元データ」「OBJ書き出し後」「アップロード後」という三つの段階に分け、どの段階で情報が失われたかを確認すると原因を絞り込みやすくなります。

原因1 OBJのグループ情報は厳密な階層構造ではない

OBJは、3D形状を比較的単純なテキスト構造で記述できる形式です。頂点座標や面情報のほか、オブジェクト名やグループ名などを記録できます。しかし、一般的な3D編集データで利用される複雑な親子階層を、そのまま保持できるとは限りません。

ここがグループ階層消失の最も基本的な原因です。

たとえば元データで「建物」という親グループの中に「1階」「2階」があり、「1階」の中に「柱」「壁」「床」が含まれていたとします。編集環境では、この関係をツリー表示できます。しかしOBJへ書き出した場合、「1階」「2階」「柱」「壁」「床」といった名称が個別の区分として残っても、どれがどのグループの子なのかという関係までは再現できないことがあります。

アップロード先がOBJ内のグループ情報を読み取ったとしても、表示されるのは一段階の一覧になる可能性があります。つまり「階層が消えた」のではなく、OBJへ変換した段階で親子関係を表現できなくなっているケースです。

また、OBJは形状交換を目的に利用されることが多いため、アップロード先によってはグループ情報よりも頂点、面、法線、マテリアルなどの形状表示に必要な情報を優先して処理します。この場合、モデルそのものは正常に表示されていても、元データで設定していた管理用階層は再現されません。

点群由来のOBJでは、さらに注意が必要です。写真測量や3Dスキャンなどから生成したデータをメッシュ化してOBJへ出力する工程では、元の点群に付与されていた分類やレイヤー情報がOBJのグループとして変換されない場合があります。形状は残っていても、計測区画や分類情報が失われるということです。

したがって、「OBJならグループ階層もそのまま残る」と考えるのではなく、「どの情報がOBJへ書き出される設定なのか」を確認することが重要です。

原因2 アップロード先でグループ情報が統合されている

OBJファイル内にグループ情報が残っていても、アップロード後に一つのモデルへ統合されることがあります。この場合は、OBJ自体ではなく、アップロード先の変換処理や表示仕様が原因になっている可能性があります。

クラウド上で3Dデータを表示する仕組みでは、アップロードされたOBJをそのままブラウザで読み込むとは限りません。表示速度やデータ容量を調整するため、内部用の形式へ変換してから保存することがあります。その変換工程で、複数グループが一つの描画単位へまとめられることがあります。

大容量の点群OBJでは、この傾向を特に意識する必要があります。

数百万、数千万規模の頂点や大量の面を含むデータをそのまま扱うと表示負荷が大きくなるため、アップロード後の処理ではメッシュの統合、分割、簡略化、再配置などが行われることがあります。この処理の目的は表示性能の確保であり、元データの編集構造を完全に再現することではない場合があります。

その結果、元のOBJでは複数のグループに分かれていても、表示側から見ると一つのモデルになっていることがあります。

また、アップロード画面で一つのOBJを一つのデータセットとして登録する仕様の場合、内部のグループを個別オブジェクトとして表示できないこともあります。この場合、グループ名を変更したり、OBJを再出力したりしても改善しない可能性があります。

切り分けのポイントは、同じOBJを別の汎用的な3D確認環境で読み込み、グループが残っているかを見ることです。アップロード前のOBJではグループが確認できるのに、アップロード後だけ統合されるのであれば、アップロード側の仕様や変換工程を疑いやすくなります。

反対に、アップロード前の段階ですでに一つのグループしか確認できないのであれば、書き出し設定や元データ側を見直す必要があります。

原因3 書き出し時点でグループ情報が失われている

グループ階層が消えたとき、アップロード処理に目が向きがちですが、実際にはOBJを書き出した時点で情報が失われているケースも少なくありません。

3Dデータを書き出すときには、形状だけを出力する設定と、グループ名やオブジェクト名を含めて出力する設定が分かれている場合があります。また、複数のオブジェクトを結合してから出力する設定が有効になっていると、元データ上では別々だった部材が一つのオブジェクトとしてOBJへ保存されることがあります。

特に大容量データでは、ファイル容量や処理時間を抑えるため、書き出し前にデータを結合する運用が行われることがあります。ところが、この結合処理によって管理に必要なグループ区分まで失われる場合があります。

たとえば施工区画ごとにA区画、B区画、C区画と分けていた点群モデルを、一括で結合してOBJへ出力すれば、アップロード後に区画別表示ができなくなる可能性があります。

元データでグループが存在していることを確認するだけでは不十分です。必ず「書き出したOBJにグループ情報が残っているか」まで確認する必要があります。

OBJはテキスト形式で記述されることがあるため、容量が現実的な範囲であれば、グループやオブジェクトを示す記述が含まれているか確認する方法もあります。ただし、大容量のOBJを一般的なテキスト編集環境で直接開くと処理が重くなることがあるため、実務では検証用に小さな範囲を書き出して確認する方法が安全です。

書き出し条件を変更する場合は、一度に複数の設定を変えないことも重要です。グループ出力、オブジェクト結合、マテリアル出力、座標処理などを同時に変更すると、どの設定が結果に影響したのか分からなくなります。

一つの設定を変更し、小さなOBJを作成し、アップロード結果を確認する流れにすると原因を追跡しやすくなります。

原因4 グループ名の重複や文字列が読み込みに影響している

OBJ内にグループ情報が存在していても、グループ名の付け方によってアップロード後の管理が難しくなる場合があります。

典型的なのが名前の重複です。

たとえば複数の階にそれぞれ「壁」というグループがあり、元データ上では「1階/壁」「2階/壁」「3階/壁」という親子関係で区別されていたとします。OBJへ変換すると親子関係が失われ、「壁」という同じ名前のグループが複数存在する状態になる可能性があります。

読み込み側によっては、同名グループをまとめて扱ったり、後から読み込んだグループで名称が上書きされたように見えたりすることがあります。

この問題を防ぐには、OBJへ変換する前に階層情報を名称へ展開する方法が有効です。

たとえば「1F_壁」「2F_壁」「3F_壁」のように、親グループの情報を子グループ名へ含めます。施工区画であれば「A区画_路面」「B区画_路面」のようにします。こうしておけば親子階層が失われても、名称から元の所属を判断しやすくなります。

また、記号、空白、改行に近い制御文字、極端に長い名称などは避けた方が管理しやすくなります。アップロード先によって利用できる文字の扱いが異なる場合があるためです。

日本語名が必ず問題になるわけではありませんが、異なる環境を経由するデータでは文字コードや変換処理の影響を受ける可能性があります。グループ名が文字化けしたり空欄になったりする場合は、短い英数字中心の名称へ一時的に変更した検証用データを作ると原因を切り分けられます。

重要なのは、階層情報だけに意味を持たせないことです。「親グループを見なければ子グループの意味が分からない」という命名を避ければ、アップロード後に階層が平坦化されても運用を継続しやすくなります。

原因5 OBJ・MTL・関連ファイルの対応が崩れている

OBJをアップロードするときは、OBJ本体だけを見ればよいとは限りません。モデルによっては、マテリアル情報を記述したMTLファイルや、そこから参照されるテクスチャ画像などが組み合わされています。

グループ階層そのものとマテリアルは別の情報ですが、実務上はグループとマテリアルを対応させて区分しているケースがあります。そのため関連ファイルの読み込みに失敗すると、「グループが消えた」と感じることがあります。

たとえば構造物ごとに異なるマテリアルを設定し、色の違いで区画を判別していた場合、MTLが読み込まれなければ全体が同じ外観になります。内部的にはグループが残っていても、画面上では区別できなくなるため、階層が統合されたように見えることがあります。

OBJとMTLを別々の場所から集めたり、ファイル名を途中で変更したりした場合は注意が必要です。OBJから参照される名称と実際のファイル名が一致していなければ、関連情報を正常に読み込めない可能性があります。

また、テクスチャ画像を含む場合は、参照先の相対的な配置が変わったことで読み込みに失敗することもあります。

アップロード時に複数ファイルを扱う場合は、作業途中で名称やフォルダ構成を変更せず、書き出された一式をまとめて管理することが重要です。必要に応じて、アップロード先が指定する方法でファイルをまとめて登録します。

ただし、MTLが正常であればOBJの親子階層が復元されるという意味ではありません。グループ、オブジェクト、マテリアルは別の概念です。見た目の区分が消えたのか、選択単位が消えたのか、グループ名が消えたのかを分けて確認することが必要です。

対策1 アップロード前にOBJ内部のグループ情報を確認する

最初の対策は、アップロード前のOBJを確認する工程を標準化することです。

グループ階層が消えたときに原因特定が難しくなる最大の理由は、「書き出したOBJが正常だったか」を確認せず、そのままアップロードしてしまうことです。元データとアップロード後だけを比較すると、変換時に消えたのか、アップロード時に消えたのか判断できません。

確認すべきなのは、形状だけではありません。

元データで区分していた対象を個別に選択できるか、グループ名が残っているか、想定外に結合されていないか、マテリアルによる区分が残っているかを確認します。

大容量の点群OBJでは、全体を毎回確認する必要はありません。実運用では代表的な数グループだけを含む検証用データを用意すると効率的です。

たとえば「地形」「構造物」「設備」の三つに分けた小容量データを作成し、OBJ書き出し後に三つの区分が残っているか確認します。そのOBJを実際のアップロード先へ登録し、同じ区分が見えるかを比較します。

書き出し後ですでに一つになっていれば書き出し工程が原因です。書き出し後は三つに分かれているのにアップロード後だけ一つになるなら、アップロード処理や表示仕様を確認します。

この切り分けを一度確立しておけば、大容量データで何度もアップロードをやり直す必要が減ります。

対策2 階層を単純化して一意のグループ名に整理する

二つ目の対策は、OBJへ変換する前に階層を単純化することです。

元データでは、管理しやすさを優先して多段階の階層を作ることがあります。しかし階層が深くなるほど、OBJへ変換したときに関係性を維持しにくくなります。

そのためアップロード用データでは、必要な管理単位まで階層を平坦化しておく方法が有効です。

たとえば「現場/A工区/1階/設備/配管」という階層がある場合、アップロード用のグループ名を「A工区_1階_設備_配管」のように変換します。これなら階層が一段になっても所属情報を失いにくくなります。

名前は必ず一意にします。

同じ「床」「壁」「柱」といった名称を異なる場所で繰り返すのではなく、「A工区_床」「B工区_床」のように対象を特定できる文字列を含めます。

ただし、名称へ情報を詰め込みすぎると扱いにくくなるため、必要な情報だけに絞ることも重要です。施工区画、階、部材種別、計測時期など、アップロード後に検索や表示切り替えで利用する情報を優先します。

元データの完全な階層を再現しようとするよりも、アップロード先で必要な区分を確実に残すという考え方に切り替えると、データ変換に強い運用になります。

対策3 ファイル分割で重要な区分を物理的に残す

三つ目の対策は、重要な区分を一つのOBJ内部のグループだけに頼らず、ファイルそのものを分ける方法です。

グループ情報は読み込み先の仕様によって統合される可能性がありますが、OBJを別ファイルにしておけば、少なくともファイル単位の区分は維持しやすくなります。

たとえば現場全体を一つのOBJへまとめるのではなく、A工区、B工区、C工区で分割します。あるいは地形、既設構造物、新設構造物など、アップロード後に個別表示したい単位で分けます。

この方法は、データ容量の管理にも役立つ場合があります。

巨大な一つのOBJを扱うより、作業対象ごとに複数ファイルへ分けた方が、更新や再アップロードの対象を限定できます。A工区だけ変更した場合に現場全体を再出力する必要がなくなれば、変換や確認の負担も抑えやすくなります。

一方で、細かく分けすぎるとファイル管理が複雑になります。

そのため、施工管理上意味のある単位で分割することが重要です。数百の部材を一つずつOBJへ分割するような方法ではなく、「個別に表示を切り替えたいか」「別々に更新する可能性があるか」という観点で単位を決めます。

グループ階層の維持が必須の案件では、ファイル分割をバックアップ手段として用意しておくと安全です。

対策4 小容量の検証用OBJで変換工程を切り分ける

四つ目の対策は、本番データを使う前に小容量の検証用OBJを作ることです。

大容量の点群OBJでは、書き出しにもアップロードにも時間がかかります。その状態で設定を一つずつ変えながら検証すると、原因特定までに大きな手間がかかります。

そこで、本番データと同じ構造を持つ小規模なサンプルを用意します。

たとえば親グループを二つ、その中に子グループを二つずつ用意し、それぞれに異なる名称を設定します。必要であればマテリアルも分けます。このデータをOBJへ出力し、書き出し後とアップロード後を比較します。

検証するときは、一回の試験で変更する条件を一つに絞ります。

最初は通常設定で出力し、次はオブジェクト結合だけを変更します。その次はグループ名称だけを変更します。このように比較すれば、何が結果に影響しているのか把握しやすくなります。

特にアップロード後に自動変換される環境では、この方法が有効です。小さなOBJでも必ずグループが統合されるのであれば、データ容量ではなく変換仕様による可能性が高まります。

逆に小容量では階層が残り、大容量だけ統合される場合は、大容量データ向けの最適化処理や書き出し条件を確認する必要があります。

点群OBJアップロードのトラブル対応では、巨大な本番ファイルを何度も処理するより、再現条件を持つ小さなテストデータを作る方が結果的に早く解決できることがあります。

対策5 階層に依存しない属性管理ルールを用意する

五つ目の対策は、グループ階層が失われても必要な情報を追跡できる管理方法を用意しておくことです。

OBJは形状交換に便利な一方、元の編集環境が持つすべての属性や階層を保持できるとは限りません。そのため、重要な管理情報をOBJ内部の階層だけに保存すると、変換時に情報が欠落した場合の復旧が難しくなります。

そこで、グループ名称やファイル名称に共通の識別情報を含めます。

たとえば施工区画をA01、A02、A03のようなコードで管理し、OBJのグループ名、ファイル名、現場側の管理資料で同じコードを利用します。階層表示が崩れても「A02」という情報が残っていれば、どの区画のデータなのか判別できます。

計測時期を管理したい場合も同様です。単純な「最新」「旧」といった名称ではなく、社内の管理ルールに基づいて識別できる名称を付けます。

また、元データを必ず保管しておくことも重要です。

アップロード用に階層を単純化したOBJは、閲覧や共有を目的とした派生データとして扱います。元データ側には完全な階層や分類を残し、必要になった場合に再出力できるようにしておきます。

アップロード済みOBJだけを最終データとしてしまうと、後から別の区分方法で再出力したいときに情報を復元できなくなる可能性があります。

「元データは完全な情報を持つ」「OBJは用途に合わせた受け渡し用データとして作る」という役割分担にすると、アップロード先の仕様変更にも対応しやすくなります。

点群OBJアップロードで階層以外に確認したいポイント

グループ階層が正常に残ったとしても、点群OBJアップロードではほかにも確認しておきたい項目があります。

まず重要なのが座標です。

測量や施工で扱う3Dデータは、大きな座標値を持つ場合があります。3D表示環境によっては、大きな座標をそのまま扱うより、ローカル座標へ変換した方が安定して表示できることがあります。一方で、座標を変換すると測量成果との対応が分かりにくくなるため、変換前後の基準を記録しておく必要があります。

次に単位を確認します。

元データとアップロード先で想定している単位が異なると、形状が極端に大きくなったり小さくなったりします。見た目だけではグループ消失と誤認することもあるため、スケールが正しいかを先に確認します。

面の向きにも注意が必要です。

点群からメッシュを作成したOBJでは、面の向きがそろっていないと、一部が表示されないように見える場合があります。グループが消えたのではなく、特定方向から面が見えなくなっているだけというケースもあります。

マテリアルやテクスチャを使用している場合は、関連ファイルが正しくアップロードされているかも確認します。形状、グループ、マテリアル、テクスチャはそれぞれ別の要素として切り分けて確認すると、原因を混同しにくくなります。

大容量データでは処理完了のタイミングも重要です。

アップロードが完了したように見えても、サーバー側で変換処理が続いている場合があります。変換途中の表示を見てデータ欠損と判断すると、不要な再アップロードにつながります。利用している環境で処理状態を確認できる場合は、変換が完了してから最終状態を確認します。

また、同じOBJを何度も上書きする運用では、新旧データの取り違えにも注意します。グループ構成を変更したのに以前のデータを見ていた、という単純な原因も起こり得ます。アップロード時にはファイル名や更新識別情報を整理し、どのデータを確認しているか明確にしておくことが大切です。

まとめ

点群OBJをアップロードした後にグループ階層が消える場合、単純なアップロード失敗とは限りません。OBJという形式自体が複雑な親子階層の保持を主目的としていないこと、アップロード先でモデルが統合されること、書き出し時点でグループ情報が失われること、グループ名の重複や関連ファイルの不整合など、複数の原因が考えられます。

対策の基本は、元データからアップロード後までを一続きの処理として考えないことです。元データ、OBJ書き出し後、アップロード後という段階に分け、どこで情報が変わったかを確認します。

そのうえで、OBJ内部のグループ情報を事前確認し、階層を単純化して一意の名称を付け、重要な管理単位は必要に応じてファイル分割します。さらに、小容量の検証用OBJを使って変換条件を確認し、階層が失われても追跡できる識別ルールを用意しておけば、大容量データでも原因を切り分けやすくなります。

点群OBJは、形状を共有するためには扱いやすい形式ですが、元データの管理構造を完全に引き継ぐとは限りません。だからこそ、「階層をそのまま残す」ことだけを目標にするのではなく、「アップロード後も必要な対象を確実に識別できる状態を作る」という視点が重要です。

現場で取得した3Dデータを確認、共有し、施工や記録へ活用する流れをよりシンプルにしたい場合は、データ形式だけでなく取得からクラウド利用までを一連の運用として整理することが効果的です。現場での計測や3Dデータ活用を効率化する方法を検討する際は、LRTK Phoneを活用した運用も選択肢の一つとして確認してみてください。

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

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

技術記事一覧へ戻る →