点群OBJのスムージンググループで凹凸が消える理由
点群から作成したOBJをアップロードした後、元データで確認できていた細かな凹凸、段差、角、溝などが滑らかになり、平らになったように見えることがあります。候補となる原因は、スムージンググループに基づく陰影の補間、頂点法線の共有、読み込み時の法線再計算、表示用データの軽量化などです。
最初に理解しておきたいのは、OBJのスムージンググループを示す記述だけで頂点座標が移動するわけではないことです。スムージンググループは、隣り合う面の法線をどの範囲で連続させるかを読み込み側が判断するための情報として利用されます。形状を構成する頂点位置が変わっていなくても、面の境界で法線が補間されると、角や小さな段差が丸く見える場合があります。
ただし、実際の扱いは読み込み環境によって異なります。OBJに明示的な頂点法線が保存され、面がその法線を参照している場合は、その法線が表示に使われることがあります。一方、読み込み時に法線を再計算する環境や、スムージンググループを解釈しない環境もあります。そのため、スムージンググループの番号だけを修正すれば必ず表示が変わるとは限りません。
例えば、水平な上面と垂直な側面が直角に接している形状を考えます。上面と側面の境界で同じ方向へ補間された法線が使われると、直角部分の明暗が連続的に変化します。その結果、実際の断面は直角のままでも、画面上では角が丸められたように見えることがあります。
点群から生成されるメッシュは、多数の小さな三角形で構成されることが多く、局所的な傾きも細かく変化します。広い範囲へ一括して平滑化を適用すると、計測対象が持つ細かな起伏と、点群ノイズによる小さなばらつきの両方が平均化され、必要な凹凸が弱く見える可能性があります。
ただし、凹凸が消える原因が陰影だけとは限りません。アップロード時に面数削減、頂点統合、再三角形化、座標値の丸め、詳細度別データの生成などが行われると、実際の形状が簡略化される場合があります。修正に入る前に、陰影だけが変わったのか、頂点や面そのものが変わったのかを切り分けることが重要です。
切り分けには、陰影表示、ワイヤーフレーム表示、断面表示を比較する方法が有効です。陰影表示では凹凸が消えて見えても、ワイヤーフレームや断面で頂点位置が残っている場合は、法線やスムージングの影響が大きい可能性があります。断面形状まで平らになっている場合は、点群処理、メッシュ生成、またはアップロード時の形状最適化を疑う必要があります。
また、OBJが頂点だけで構成され、ポリゴン面を含まない場合は、面の陰影を制御する一般的なスムージンググループの影響は受けません。面情報がない点群OBJで凹凸が消えた場合は、点の間引き、点サイズ、表示密度、座標精度、表示距離に応じた詳細度の切り替えなどを確認します。
修正を始める前に、対象のOBJが頂点だけのデータなのか、三角形や四角形などの面を持つメッシュなのかを確認してください。以下の修正法は、主に面を持つメッシュOBJを対象としています。
修正法1 平滑化する面と角を残す面を分ける
一つ目の修正法は、モデル全体に一括適用されている平滑化範囲を見直し、滑らかにつなげる領域と、角を残す領域を分けることです。
点群からメッシュを生成した直後は、広い範囲の面が同じスムージンググループとして出力されている場合があります。この状態では、地表面の緩やかな起伏だけでなく、構造物の稜線、縁石の角、壁面と天端の境界、掘削面の段差なども連続した曲面として陰影計算される可能性があります。
必要な凹凸を残すには、どの境界を視覚的に分けるべきかを整理します。緩やかに連続する地表面では、隣接面を同じ平滑化範囲にすることで、細かな三角形の境界を目立ちにくくできます。一方、壁面と床面、道路面と縁石、法面と小段、構造物の角などは、境界を分けたほうが形状を把握しやすくなる場合があります。
分ける基準として、隣接面の角度差を利用する方法があります。面同士の角度差が小さい部分を滑らかにつなぎ、角度差が大きい部分を分離する考え方です。ただし、角度だけで機械的に分けると、必要な境界を見落としたり、点群ノイズを角として拾いすぎたりする可能性があります。
摩耗した角や緩やかな段差は、隣接面の角度差が小さくても実務上重要な境界になることがあります。逆に、計測ノイズによって生じた小さな三角形の傾きは、角度差が大きくても構造的な境界とは限りません。角度条件は候補抽出に使い、最終的には対象物の形状と利用目的に合わせて判断します。
例えば、出来形の確認で段差の位置を把握したい場合、その段差をまたぐ面は別の平滑化範囲にします。構造物表面の緩やかな曲面を確認したい場合は、曲面内の面を連続させます。変状調査で表面の局所的な起伏を見たい場合は、重要な境界が広い平滑化範囲へ含まれていないか確認します。
グループを細かく分けすぎることにも注意が必要です。すべての面を独立させると、曲面や地表面が細かな多面体として表示されます。点群由来の小さなばらつきも強調され、必要な凹凸と計測ノイズを区別しにくくなることがあります。
適切な設定は、全体を滑らかにすることでも、すべての面を角張らせることでもありません。滑らかに見せる必要がある連続面はまとめ、形状上の意味を持つ境界では法線が連続しないようにすることが基本です。
修正後は、正面からだけでなく斜め方向からも確認します。光が面に対して正面から当たると、法線の差が見えにくい場合があります。光の方向や視点を変え、重要な稜線に沿って陰影が適切に分かれるかを確認してください。
スムージンググループの番号そのものに強弱や優先順位があるわけではありません。重要なのは、対象の面がどの平滑化範囲として記録され、読み込み側がその情報をどのように解釈するかです。番号を増やすだけでは改善しないため、面の割り当てと明示法線の内容を併せて確認します。
修正法2 シャープな境界で頂点法線を分離する
二つ目の修正法は、角や段差を残したい境界で、面の頂点が参照する法線を分けることです。スムージンググループを分けても凹凸が戻らない場合、OBJ内の明示法線が境界をまたいで連続しているか、アップロード先で法線が再生成されている可能性があります。
ポリゴンメッシュでは、一つの頂点座標を複数の面で共有できます。OBJでは、同じ位置の頂点を使いながら、面ごとに異なる法線番号を参照させることもできます。そのため、座標を分離しなくても、上面側と側面側で異なる法線を割り当てられる場合があります。
水平面の法線が上方向、垂直面の法線が横方向を向いているとき、境界で中間方向の法線が使われると、直角部分に滑らかな明暗の変化が生じます。形状は変わっていなくても、照明結果によって角が丸く見える原因になります。
修正するには、上面側の面頂点には上面に合った法線を、側面側の面頂点には側面に合った法線を参照させます。これにより、座標位置を変えずに陰影の境界を明確にできます。
データ作成環境によっては、シャープな辺を指定すると、書き出し時に面ごとの法線参照が自動的に分かれる場合があります。ただし、OBJ出力時に明示法線を書き出さなかった場合や、アップロード時に法線が再計算された場合は、作成環境の設定がそのまま保持されないことがあります。
読み込み先が面頂点ごとの法線を扱えない場合や、変換工程で属性が一つの頂点へまとめられる場合は、同じ位置に複数の頂点を作る処理が必要になることがあります。上面用と側面用の頂点を分ければ、それぞれに独立した法線を持たせやすくなります。ただし、OBJ自体は位置、テクスチャ座標、法線を別々の番号で参照できるため、最初から座標頂点の複製が必須というわけではありません。
頂点の分離を広い範囲へ一括適用すると、データ量が増えるほか、後工程で面が分断されていると判断される場合があります。曲面内の頂点まで分離すると、滑らかな陰影が失われ、面の継ぎ目が目立ちます。分離は、角や段差など、明確に不連続な境界へ限定することが重要です。
点群から生成したメッシュでは、境界付近に細長い三角形や極端に小さな三角形が並ぶことがあります。その状態で法線を分けても、どの面を境界の一方に含めるかが曖昧になり、陰影が不安定になる場合があります。必要に応じて、先に境界周辺の三角形を整理し、稜線に沿って面の並びを整えます。
意図して作成した分離頂点と、処理上の誤差で発生した重複頂点は区別しなければなりません。同じ位置の頂点を属性分離のために使うことはありますが、わずかに位置がずれた重複頂点は、微小な隙間や重なりを作り、別の表示不具合につながる可能性があります。
修正後は、頂点法線を線として表示できる環境で確認すると原因を把握しやすくなります。角を挟む面で法線方向が適切に分かれていれば、陰影も境界で切り替わる可能性が高くなります。
ワイヤーフレーム表示も併用してください。陰影だけを見ると、光の向きによって角が残っているように見えたり、反対に消えたように見えたりします。面の接続、法線の向き、断面形状を併せて確認することで、修正が正しく反映されたか判断できます。
修正法3 OBJ出力時に頂点法線を正しく保存する
三つ目の修正法は、OBJを書き出す際に頂点法線を含め、各面が意図した法線を参照していることを確認することです。作成環境で平滑化範囲と法線を調整しても、OBJへの出力時に法線を保存しなければ、読み込み先で別の法線が生成される可能性があります。
OBJには、頂点座標、テクスチャ座標、頂点法線、面の参照関係などを記録できます。頂点法線が含まれていないOBJを読み込む場合、表示環境は面の形状やスムージンググループなどから法線を生成することがあります。
自動的な法線計算では、隣接面の角度を基準にして平滑化範囲を決める方法が利用されることがあります。簡単な形状では扱いやすい方法ですが、点群由来の複雑なメッシュでは意図した結果にならない場合があります。
点群メッシュには、計測ノイズや点配置の偏りによって、面の角度が細かく変動している部分があります。角度条件を厳しくすると、同一の地表面でも面ごとに陰影が分断されます。条件を緩くすると、構造物の角や小さな段差まで滑らかにつながる可能性があります。
そのため、書き出し前に対象の用途に合った法線を作成し、その法線をOBJへ保存する方法が有効です。地表面のような連続面では周囲の面を考慮して法線を滑らかにし、構造物の角や段差では面ごとの法線参照を分けます。
OBJに法線を表す行が存在するだけでは十分ではありません。面を表す行が、その法線番号を参照している必要があります。頂点法線の行が多数存在していても、面が頂点座標だけを参照している場合は、保存された法線が使われない可能性があります。
また、平滑化範囲を変更した後は、必要に応じて頂点法線を再計算してから書き出します。先に法線を生成し、その後で境界設定だけを変更すると、古い条件で作られた法線が残ることがあります。設定と法線の内容が一致していなければ、グループを分けても角が戻らない場合があります。
法線の向きと値にも注意します。周囲と反対方向を向く法線や、長さがほぼゼロの法線、数値として扱えない値が含まれると、読み込み結果が不安定になる可能性があります。書き出し前に法線を再計算し、対象環境で正常に読み込める値になっているか確認します。
アップロード先が保存済みの頂点法線を利用しているか分からない場合は、比較用のOBJを作成します。一つは調整済み法線を含むOBJ、もう一つは法線を含まないOBJです。両方の表示がほぼ同じであれば、アップロード先で法線が再計算されている可能性があります。
法線を含むOBJだけで凹凸が弱く見える場合は、書き出した法線の方向や参照関係に問題がある可能性があります。平滑化範囲、シャープ境界、法線の再計算順序、面が参照する法線番号を見直してください。
一方、法線を含まないOBJだけで凹凸が弱く見える場合は、アップロード先の自動法線計算が影響している可能性があります。その場合は、調整済みの法線を保持できる出力条件を選ぶか、境界部分の属性や頂点を分け、自動計算でも角が平均化されにくい構造にします。
なお、OBJに明示法線とスムージンググループの両方が含まれている場合、どちらを優先するか、または再計算するかは読み込み環境によって異なることがあります。最終的な閲覧環境で試験データを読み込み、実際の挙動を確認することが安全です。
修正法4 面の向きとメッシュ構造を修正する
四つ目の修正法は、ポリゴン面の向き、重複、接続状態、三角形の形を確認し、必要に応じて修正することです。凹凸が消えたように見える問題の中には、スムージンググループではなく、メッシュ構造の不具合が原因となっているものがあります。
ポリゴン面の向きは、面を構成する頂点の並びから解釈されます。一部の面だけ並びが反対になっていると、その面の法線も周囲と逆方向になる場合があります。座標軸の変換や読み込み設定によって表裏の扱いが変わることもあるため、作成環境と閲覧環境の両方で確認します。
両面が表示される環境では、向きが反対の面も画面に現れるため、形状だけを見ていると異常に気づきにくいことがあります。しかし、照明計算では法線方向の違いが反映され、局所的に暗くなったり、へこみと膨らみが逆に見えたりする場合があります。
点群から自動生成したメッシュでは、点が不足している場所、垂直面、薄い部材、穴の周辺、重複点の近くなどで面の向きが不ぞろいになることがあります。面法線を表示し、隣り合う面が対象物の想定する外側へ向いているかを確認してください。
面の重複も表示を不安定にします。同じ位置に複数の面が重なると、描画時にちらつきや不自然な陰影が発生する場合があります。複数回作成したメッシュを結合した場合や、重複した点群から面を生成した場合は特に注意が必要です。
三角形の形状も法線計算や補間結果に影響します。極端に細長い三角形、面積がほとんどない三角形、周囲に比べて非常に大きな三角形などがあると、局所的な陰影が不安定になる可能性があります。
点群が少ない部分を大きな三角形でつないでいる場合、その三角形が小さな凹部や溝を覆い、平らな面として表示することがあります。この状態はスムージングを無効にしても改善しません。必要な点を追加するか、誤って張られた面を削除し、メッシュ生成条件を見直す必要があります。
四角形に近い領域を三角形へ変換するときは、対角線の方向にも注意が必要です。四隅が同一平面上にない場合は、分割方向によって二つの三角形の傾きが変わります。その違いが陰影や凹凸の見え方に影響することがあります。
段差や稜線をまたぐように三角形が作成されている場合は、境界線に沿って面を分割します。先に重要な境界を固定し、その内側で三角形を整えることで、形状の意味を保ちながらメッシュ品質を改善できます。
接続されるべき面が分断されている場合にも問題が生じます。滑らかに見せたい曲面で法線や頂点の接続が切れていると、面の境界に不自然な線が現れます。反対に、角として分けたい面が同じ法線を参照していると、境界が丸く見える可能性があります。
メッシュ構造の修正では、すべての頂点を統合したり、すべての面を分離したりする一括処理を避けることが大切です。連続させる領域と分離する領域を目的に合わせて整理します。
修正後は、陰影表示だけでなく、ワイヤーフレーム、片面表示、法線表示、断面表示を使って確認します。片面表示で一部が消える場合は、面の向きが周囲とそろっていない可能性があります。断面に不要な線や二重の輪郭が見える場合は、重複面や位置のずれた重複頂点が残っている可能性があります。
修正法5 アップロード時の自動最適化を見直す
五つ目の修正法は、OBJをアップロードするときに行われる変換や自動最適化の設定を確認することです。作成環境では凹凸が正しく見えているのに、アップロード後だけ平らに見える場合は、アップロード後の変換処理が影響している可能性があります。
点群OBJは頂点数や面数が多くなりやすいため、サービスや閲覧環境によっては表示用の軽量化が行われます。処理内容として考えられるものには、頂点統合、面数削減、微小面の削除、法線再計算、座標値の丸め、再三角形化、詳細度別データの生成などがあります。ただし、実際にどの処理が行われるかはアップロード先の仕様によって異なります。
頂点統合では、一定の距離以内にある頂点を一つにまとめる処理が使われることがあります。統合距離が必要な凹凸の大きさに対して大きすぎると、小さな段差を構成する頂点まで同じ位置へまとめられる可能性があります。
特に注意したいのは、シャープな境界で意図的に属性や頂点を分けた部分です。同じ座標位置に複数の法線参照を持たせていても、変換時に一つの頂点属性へまとめられ、その後に法線が再計算されると、境界が再び滑らかになる場合があります。
面数削減では、全体形状への影響が小さいと判断された面や頂点が削除されます。広い範囲を遠くから見る用途では有効ですが、小さな段差、溝、凹み、表面の変状などを確認する用途では、必要な形状まで削減される可能性があります。
法線再計算が行われる場合、OBJに保存した頂点法線やスムージンググループがそのまま使われないことがあります。読み込み後の面形状だけから新しい法線が作成されれば、作成環境で設定した境界が失われる可能性があります。
自動最適化の影響を切り分けるには、小さな試験用OBJを作成する方法が有効です。平面と垂直面が直角に接する単純な形状を用意し、平滑化範囲を分けたもの、面ごとの法線参照を分けたもの、位置頂点まで分離したものを比較します。
さらに、法線を含むOBJと含まないOBJを作成し、アップロード後の表示を比べます。単純なデータであれば、どの情報が保持され、どの情報が再計算されているかを判断しやすくなります。
アップロード後のデータを再取得できる場合は、頂点数、面数、法線の有無などを元データと比較します。頂点数や面数が大きく減っていれば、形状の軽量化が行われた可能性があります。頂点数と面数が変わらず、見た目だけが変わっている場合は、法線や描画設定を優先して確認します。
品質や軽量化の設定を変更できる場合は、一度、自動削減を抑えた条件でアップロードします。その状態で凹凸が戻れば、最適化処理のいずれかが原因である可能性が高まります。その後、処理を一つずつ有効にし、必要な凹凸を保持できる範囲を探します。
ただし、高品質設定を選べば必ず適切になるとは限りません。高密度な点群OBJをそのまま利用すると、アップロード時間、通信量、表示負荷、端末の処理負荷が増える場合があります。
重要なのは、利用目的に必要な最小の凹凸を決め、それを保持できる解像度へ調整することです。広域の地形確認用と、構造物の細部確認用を別のOBJに分ける方法もあります。一つの大容量データですべてを表現するより、用途別に適切な密度へ分けたほうが、必要な形状を残しやすくなる場合があります。
スムージング以外に凹凸が消える原因
スムージンググループを調整しても凹凸が戻らない場合は、元点群やメッシュ生成工程に原因がないか確認します。
最初に確認したいのは点密度です。表現したい凹凸より点間隔が大きい場合、その形状をメッシュとして再現することは難しくなります。例えば、幅が小さい溝の内部に計測点がほとんどなければ、メッシュ生成時に溝の両側が直接面で結ばれ、平らに埋められる可能性があります。
点群表示では、各点が一定の大きさで描かれるため、実際の座標分布以上に表面が密に見える場合があります。点の色や陰影によって凹凸があるように見えても、断面を確認すると十分な座標差がないこともあります。
次に、点群のノイズ除去を確認します。周囲から離れた点や密度が低い点を削除する処理は、明らかな異常点を除くために有効です。しかし、細い突起、鋭い角、段差の端部なども周囲と異なる点分布になるため、条件が強すぎると必要な点まで削除される可能性があります。
点群段階の平滑化も影響します。近傍点の平均位置へ点を移動する処理や、推定曲面へ点を近づける処理を強くすると、計測ノイズと一緒に実際の凹凸も小さくなります。この場合、OBJへ出力する前に座標が変化しているため、スムージンググループの調整では元に戻せません。
穴埋め処理にも注意が必要です。点が取得できなかった領域を自動的に面で補うと、本来存在する溝、隙間、開口部などが平らな面で覆われる場合があります。穴埋めの対象とする大きさを見直し、重要な開口部を自動補完の対象から外します。
面数削減をOBJ出力前に行っている場合も、削減前後を比較してください。小さな凹凸を構成する頂点が削除され、周囲の大きな面へ置き換えられていれば、法線の修正だけでは復元できません。必要に応じて削減前のメッシュから作り直します。
座標値の精度も確認します。大きな座標値を少ない小数桁数で保存すると、細かな座標差が丸められる可能性があります。また、読み込み側の数値精度や原点からの距離によって、細かな差を安定して表現しにくくなる場合もあります。必要とする凹凸の大きさに対して十分な有効桁が残っているかを確認し、必要に応じて作業用の局所原点へ移動します。
OBJの座標値には、一般に長さの単位を強制する共通の仕組みがないため、書き出し側と読み込み側で単位の想定が異なることがあります。スケールが想定より大きい、または小さい状態になると、頂点統合や近接判定に使われる距離との関係も変化します。画面上では自動的に表示範囲が調整されるため、単位の違いに気づきにくいことがあります。
詳細度の自動切り替えによって、遠距離では簡略化された形状が表示される場合もあります。近づくと凹凸が見え、離れると消える場合は、スムージングではなく表示距離に応じたデータ切り替えが関係している可能性があります。
また、点群の色が作る模様と、実際の幾何形状を区別する必要があります。撮影時の影や表面の色むらが凹凸のように見えていた場合、色のないメッシュへ変換すると平らに見えることがあります。反対に、テクスチャ内の影によって、実際には存在しない凹凸があるように見える場合もあります。
ワイヤーフレームや断面を確認し、頂点座標として凹凸が存在するかを判断することが大切です。
点群からOBJを作成する前に確認したい設定
安定した点群OBJを作成するには、OBJの書き出し設定だけでなく、点群取得からメッシュ生成までの工程を通して条件を管理する必要があります。
まず、確認したい形状の大きさを決めます。広い地形の起伏を把握する用途と、構造物表面の細かな凹凸を確認する用途では、必要な点密度が異なります。対象とする最小の段差や溝の幅に対して、十分な点が得られているかを断面で確認します。
点群の取得方向も重要です。一方向からしか計測していない場合、構造物の側面、段差の奥、張り出しの下などに点が不足することがあります。点がない領域は、メッシュ生成時に周囲の点から推定して面が作られるため、実際の凹凸とは異なる形状になりやすくなります。
複数方向から取得した点群を結合する場合は、位置合わせのずれを確認します。わずかにずれた面が重なると、平均化によって角が丸くなったり、表面が二重になったりすることがあります。
点群の密度を均一にするための間引きを行う場合は、重要な境界の点を残す必要があります。一律の間隔で点を削減すると、平坦な場所では問題がなくても、稜線や段差の周辺で形状を構成する点が不足する可能性があります。
メッシュ生成では、点を結ぶ最大距離や穴埋め範囲を確認します。離れた点同士を大きな三角形でつなぐ設定になっていると、溝や開口部をまたぐ面が作成されます。点が不足している領域では、無理に面を作らず、必要に応じて穴として残す判断も必要です。
法線推定に使う近傍範囲も結果に影響します。広い範囲の点から法線を求めると、細かな凹凸が大きな曲面の一部として平均化される場合があります。狭い範囲で求めると細部を反映しやすくなりますが、点群ノイズの影響も強くなります。
適切な近傍範囲は、点間隔、計測精度、確認したい形状の大きさによって異なります。単一の値をモデル全体へ適用するのではなく、広い地表と構造物の細部を分けて処理する方法も考えられます。
メッシュ作成後は、すぐに滑らかな陰影だけで評価せず、まず面ごとの表示、ワイヤーフレーム、断面で形状を確認します。この段階で凹凸が失われていれば、スムージングより前の工程に原因があります。
元点群、前処理後の点群、メッシュ生成直後、法線設定後、OBJ出力後、アップロード後の各段階でデータを残すと、問題が発生した工程を特定しやすくなります。
OBJファイルの記述を確認する方法
OBJは一般にテキスト形式で記録されるため、ファイル内の記述から頂点、法線、面、スムージンググループの状態を確認できます。ただし、大容量のOBJをそのまま開くと動作が重くなる場合があるため、問題箇所を含む小さな範囲へ切り出して確認すると効率的です。
頂点座標は、通常、v x y zの形式で記録されます。例えばv 1.0 2.0 3.0は、一つの位置を表します。頂点法線はvn x y zの形式で記録されます。法線の各成分は面の陰影計算に利用される方向を表します。
面はfで始まる行に記録されます。頂点座標だけを参照する場合はf 1 2 3のように書かれます。テクスチャ座標を使わず、頂点法線を参照する場合はf 1//1 2//2 3//3のように、各面頂点について位置番号と法線番号を指定します。テクスチャ座標も含む場合はf 1/1/1 2/2/2 3/3/3のような形式になります。
スムージンググループは、行頭のsに続く値で示されます。例えばs 1以降の面はグループ1として記録され、s off以降は平滑化を無効にする指定として扱われます。ただし、明示法線がある場合の優先関係や、sの解釈方法は読み込み環境によって異なることがあります。
ファイルの冒頭付近で一度だけs 1などが指定され、その後すべての面が同じグループに含まれている場合は、広い範囲が一括で平滑化される可能性があります。一方、s offが続いている場合は、読み込み側が面ごとの法線を生成し、曲面が角張って見えることがあります。
注意したいのは、スムージンググループの記述と頂点法線の関係です。OBJ内に調整済みの法線が保存され、f行がその法線を参照している場合、読み込み側が明示法線を使うことがあります。その場合、グループ番号だけを書き換えても見た目が変わらない可能性があります。
反対に、vn行が存在していても、f行に法線番号が含まれていなければ、その法線が面の表示に使われない場合があります。vnの有無だけでなく、f行がどの番号を参照しているかまで確認してください。
手作業でスムージンググループを変更する場合は、面の範囲を正確に把握する必要があります。大規模な点群メッシュでは面数が非常に多いため、誤った位置に指定を追加すると、広い範囲の表示が変化します。
元ファイルを保存し、小さな試験用データで変更結果を確認してから本番データへ反映してください。スムージンググループを変更した後は、使用する作成環境や読み込み環境に応じて頂点法線も再生成し、最終環境で表示を確認します。
修正結果を正しく比較する検証手順
修正前後を比較するときは、単に見た目が滑らかになったか、角張ったかだけで判断しないことが重要です。形状、法線、表示条件を分けて検証します。
最初に、元点群とOBJの同じ位置を断面で比較します。問題となっている凹凸の高さ、幅、位置がOBJの頂点として残っているかを確認してください。断面形状が一致していれば、座標は保持されており、主に陰影の問題である可能性があります。
次に、ワイヤーフレーム表示や面ごとの表示で確認します。滑らかな陰影を無効にすると凹凸が分かり、陰影を有効にすると消える場合は、頂点法線やスムージングの影響が大きいと判断できます。
その後、スムージングをすべて無効にした試験データを作成します。この状態で凹凸や角が戻る場合は、平滑化範囲が広すぎた可能性があります。ただし、すべてを無効にした状態は曲面まで角張るため、原因確認用として利用し、最終的には必要な範囲だけ滑らかにします。
次に、重要な境界だけ面ごとの法線参照を分けます。スムージンググループの分割だけでは戻らず、明示法線を分けることで角が戻る場合は、境界で使われる法線が連続していたことが原因と考えられます。
法線を含むOBJと含まないOBJの比較も行います。法線の有無によって表示が変わる場合は、保存済み法線が利用されている可能性があります。表示が変わらない場合は、アップロード先で法線が再計算されているか、両データから同様の法線が生成されている可能性があります。
頂点数、面数、法線の有無も記録します。アップロード前後で頂点数や面数が減少している場合、形状の最適化が行われた可能性があります。数が変わらず見た目だけが変化している場合は、法線や描画設定を優先して確認します。
比較時には、視点、表示倍率、光源方向、投影方法をそろえます。表示条件が異なると、同じ形状でも凹凸の見え方が変わります。特に、正面方向から均一な光が当たる条件では、小さな凹凸が目立ちにくくなります。
斜めから光を当てた状態、輪郭が見える角度、断面表示など複数の条件で確認してください。テクスチャや頂点色がある場合は、それらを一時的に無効にし、色の模様と幾何形状を分けて評価します。
実際の利用端末でも確認が必要です。作成環境では正常でも、閲覧環境で詳細度が下がったり、法線が再計算されたりすることがあります。視点を近づけた場合と離した場合の両方を確認し、距離によって形状が切り替わっていないかを調べます。
点群OBJアップロード前の確認ポイント
点群OBJをアップロードする前には、形状と表示の両面を確認します。まず、元点群に必要な凹凸が取得されていることを断面で確認します。色や点サイズによる見た目だけでなく、実際の座標差を確認することが重要です。
次に、点群のノイズ除去や平滑化によって、必要な点が削除または移動されていないかを確認します。処理前後の点群を保存し、重要な段差や稜線を比較します。
メッシュ生成後は、穴埋め、大きすぎる三角形、重複面、向きがそろっていない面、細長い三角形などがないか確認します。重要な境界をまたぐ面が作られている場合は、境界に沿って分割します。
スムージンググループは、連続した曲面と明確な角を分けて設定します。モデル全体を一つのグループにするのではなく、形状の意味に応じて領域を整理します。
シャープに見せたい境界では、面が参照する頂点法線が境界をまたいで連続していないか確認します。必要に応じて法線参照を分け、読み込み先の仕様に応じて位置頂点も分離します。
OBJ出力時には、必要に応じて調整済みの頂点法線を保存します。平滑化範囲を変更した後は法線を再計算し、f行が意図したvn番号を参照していることを確認します。
アップロード時に自動軽量化が行われる場合は、頂点統合や面数削減の条件を確認します。必要な凹凸より大きな許容値で処理すると、形状が失われる可能性があります。
本番データをアップロードする前に、小さな試験用OBJで法線やスムージンググループが保持されるかを確認すると、原因の切り分けがしやすくなります。
点群OBJの品質は、書き出し時の設定だけで決まるものではありません。現場での計測、点群の前処理、メッシュ生成、法線設定、OBJ出力、アップロード後の変換という一連の工程で管理することが大切です。
まとめ
点群OBJをアップロードした後に凹凸が消える場合、最初に形状自体が失われたのか、陰影によって平らに見えているだけなのかを切り分けます。
断面やワイヤーフレームで頂点位置が残っていれば、スムージンググループ、明示法線、または読み込み時の法線再計算が影響している可能性があります。断面形状まで変わっている場合は、点群の平滑化、メッシュの面数削減、頂点統合、穴埋めなどを確認する必要があります。
一つ目の修正法は、滑らかに見せる連続面と、角を残す境界を別の平滑化範囲に分けることです。モデル全体を一括で平滑化すると、段差や稜線まで丸く見える可能性があります。
二つ目は、シャープに見せたい境界で、面が参照する頂点法線を分けることです。OBJでは同じ位置を使いながら異なる法線番号を参照できますが、読み込み先の仕様によっては位置頂点の分離が必要になる場合もあります。
三つ目は、調整済みの頂点法線をOBJへ正しく保存し、面がその法線を参照していることを確認することです。平滑化範囲を変更した後は法線を再計算し、最終的な閲覧環境で保持されるかを検証します。
四つ目は、面の向き、重複、接続状態、三角形の形を修正することです。向きがそろっていない面や大きすぎる三角形がある場合、スムージングを変更しても正しい凹凸は表示されません。
五つ目は、アップロード時の自動最適化を見直すことです。頂点統合、面数削減、法線再計算などによって、作成時の設定や細かな形状が失われる場合があります。ただし、処理内容はアップロード先によって異なるため、小さな試験データで確認することが有効です。
点群OBJの問題を効率的に解決するには、元点群、処理後の点群、メッシュ生成直後、OBJ出力後、アップロード後を段階的に比較することが重要です。どの工程で凹凸が弱くなったかを確認できれば、必要な修正箇所を絞り込めます。
また、アップロード後の見え方だけを調整するのではなく、点群取得時に必要な密度、計測方向、対象物までの距離、表面状態などを確認することも欠かせません。元点群に必要な形状が記録されていなければ、後工程だけで正確に復元することは困難です。
現場での点群取得から位置情報の確認、データ整理までを見直す場合は、LRTK Phoneを利用する方法も選択肢の一つです。ただし、取得できる細部や精度は対象物、距離、取得方法、周囲条件、後処理によって変わります。必要な凹凸や段差を扱えるかを事前に試験し、用途に合った点密度、メッシュ生成条件、法線設定へつなげることが重要です。