点群OBJでUV座標がずれる状態とは
点群から作成したOBJをアップロードした際、三次元形状は正しく表示されているのに、写真の位置だけがずれることがあります。壁に写るはずの模様が床へ表示される、道路の画像が構造物の側面に回り込む、面ごとに画像が斜めへ引き伸ばされるといった状態です。このような表示不良は、形状を表す頂点座標ではなく、画像を貼り付ける位置を示すUV座標の不整合によって起きている可能性があります。
UV座標とは、二次元画像のどの位置を三次元モデルの各面へ割り当てるかを示す情報です。Uは画像の横方向、Vは画像の縦方向を表します。三次元空間のX、Y、Z座標とは別に管理されるため、形状が正常であってもUV座標だけが崩れることがあります。
点群OBJアップロード後にテクスチャがずれて見える場合、原因は一つとは限りません。頂点とUVの索引が対応していない場合もあれば、画像が上下反転している場合、UV作成後に面構成が変更された場合、材質ファイルが別の画像を参照している場合もあります。複数の原因が重なっているケースでは、一つの補正だけで完全には直りません。
また、アップロード前の確認環境では正常に見えていたにもかかわらず、アップロード後だけずれることがあります。この場合は、作成したOBJが必ずしも壊れているとは限りません。作成側と読込側で、画像の上下方向、UV範囲外の扱い、面の表裏、材質参照などの解釈が異なっている可能性があります。
補正を効率よく進めるには、画像を何度も加工するのではなく、どの工程でずれが生じたかを切り分けることが重要です。元の点群、メッシュ化直後のOBJ、UV作成後のOBJ、アップロード用に変換したOBJを比較すると、問題が発生した段階を特定しやすくなります。
点群とテクスチャ付きOBJの違い
点群とテクスチャ付きOBJは、見た目が似ていても内部構造が異なります。点群は多数の三次元点によって対象物の形状を表すデータです。各点には位置座標のほか、色や反射に関する情報が付く場合があります。一方、一般的なテクスチャ付きOBJでは、頂点を結んで三角形や四角形の面を作り、その面に二次元画像を貼り付けます。
点だけで構成されたOBJには、画像を貼る面が存在しないことがあります。面情報がなければ、通常のUV座標を使って写真テクスチャを表示することはできません。点ごとの色を持つデータと、面へ画像を貼り付けるデータは別の仕組みです。
実務では、点群をOBJ形式で出力したデータと、点群からメッシュを生成してテクスチャを付けたデータの両方が「点群OBJ」と呼ばれることがあります。そのため、UVずれを調べる前に、対象ファイルに面情報が含まれているかを確認する必要があります。
面を持つOBJでは、頂点座標、UV座標、法線、面の参照関係が保存されます。さらに、材質を指定するMTLファイルや、実際に貼り付ける画像ファイルが付属することがあります。OBJだけをアップロードしても、MTLや画像が不足していれば、正しいテクスチャは表示されません。
点群自体には色が付いているのに、OBJへ変換すると単色になるケースもあります。これは、点の色情報がテクスチャ画像へ変換されていないか、変換後のOBJにUV座標が含まれていないことが原因として考えられます。画像ファイルが存在していても、各面と画像位置を結び付けるUV情報がなければ、正しい位置へ貼り付けられません。
点群からテクスチャ付きOBJを作る工程では、点群のノイズ除去、面の生成、穴埋め、面数削減、UV展開、画像投影、材質設定、ファイル出力などが行われます。UVずれは、このいずれの工程でも発生する可能性があります。最終ファイルだけを見て原因を判断するのではなく、工程ごとの変更内容を確認することが大切です。
OBJの頂点座標とUV座標の基本構造
OBJでは、三次元頂点とUV座標が別々の要素として保存されます。一般的には、三次元頂点がv、UV座標がvt、法線がvn、面がfで始まる情報として記録されます。面情報には、どの三次元頂点、どのUV座標、どの法線を組み合わせるかが記述されます。
ここで重要なのは、三次元頂点とUV座標が必ずしも一対一ではないことです。一つの三次元頂点に対して、複数のUV座標が割り当てられる場合があります。立体の角やテクスチャの継ぎ目では、三次元空間上では一つの点でも、展開した画像上では異なる場所に分かれるためです。
例えば、箱形のモデルでは、一つの角を複数の面が共有します。しかし、箱を平面へ展開すると、その角は複数の位置に現れることがあります。このため、三次元頂点の数とUV座標の数が一致しないこと自体は異常ではありません。
問題になるのは、面情報が誤った組み合わせを参照している場合です。三次元頂点の索引は正しくても、対応するUV索引が別の位置を指していれば、形状は正常なまま画像だけがずれます。頂点数とUV座標数が同じであることを確認するだけでは、正常かどうかを判断できません。
OBJの索引は、一般に最初の要素を1として参照します。独自の変換処理で最初の要素を0として扱うと、すべての参照先が一つずつずれる可能性があります。存在しない番号を参照すれば読み込みエラーになることがありますが、範囲内の別要素を参照した場合は、読み込み自体は成功してもテクスチャだけが不規則に崩れます。
また、面を構成する頂点の順序も重要です。三角形の頂点を並べる順序が変わると、面の表裏や画像の補間方向が変化します。三次元頂点の順序だけを入れ替え、UV座標の順序を変更しなければ、画像が三角形の内部でねじれたように見えることがあります。
UV座標は、多くの場合0から1までの値で画像内の位置を表します。ただし、繰り返し模様を表現するために1を超える値や負の値が使われることもあります。したがって、UV値が0から1の範囲外にあるだけで、不正なデータとは判断できません。アップロード先が範囲外のUVをどのように扱うかも確認する必要があります。
UV座標がずれる主な5つの原因
一つ目の原因は、頂点索引とUV索引の対応が崩れていることです。点群から作成したメッシュを軽量化したり、頂点を統合したりした際に、三次元頂点だけが更新され、UV参照が古い状態で残ることがあります。形状は維持されても、各面が別の画像位置を参照するため、模様が不規則にずれます。
二つ目は、画像の縦方向とV座標の基準が反転していることです。画像座標の原点を上側として扱う環境と、下側として扱う環境があります。出力側と読込側で基準が異なると、モデル全体のテクスチャが上下反転します。すべての面で同じ方向に反転している場合は、この原因を疑います。
三つ目は、UVを作成した後に形状や面構成を変更していることです。面の削除、穴埋め、頂点の統合、三角形数の削減などを行うと、UVを作成した時点の面構成と一致しなくなります。新しく作られた面に適切なUVが割り当てられず、周囲の画像が大きく引き伸ばされることがあります。
四つ目は、テクスチャ画像の寸法や向きが変更されていることです。画像を切り抜いたり、縦横比を変えたり、余白を追加したりすると、同じUV座標でも異なる位置を参照します。解像度だけを変更し、縦横比と画像内容の配置が維持されていれば影響しない場合がありますが、画像内の位置関係が変わる編集には注意が必要です。
五つ目は、OBJ、MTL、画像ファイルの参照関係が崩れていることです。MTLが古い画像を参照している、画像名だけを変更した、材質名が一致していない、作成端末内の保存場所がそのまま記録されているといった状態です。この場合、UVが正しくても別の画像が表示されたり、テクスチャが表示されなかったりします。
これらの原因は、症状によってある程度切り分けられます。モデル全体が上下逆ならV座標、特定の面だけがねじれるなら索引、修正した部分だけが伸びるなら面構成、画像全体の比率がおかしいなら画像寸法、単色や別画像になるなら材質参照を疑います。
ただし、複数の原因が同時に存在することもあります。例えば、面数削減によってUV対応が崩れた後、画像も上下反転している場合です。一つの修正で一部が直っても、残った症状を見て別の原因を調べる必要があります。
テクスチャ補正ステップ1|元データと症状を整理する
最初のステップは、補正前のデータを保存し、どのようなずれが起きているかを整理することです。元のOBJ、MTL、画像ファイルを一式で複製し、作業用フォルダと保管用フォルダを分けます。元ファイルへ直接上書きすると、修正に失敗した際に戻せなくなるだけでなく、どの変更が表示へ影響したか分からなくなります。
可能であれば、点群からメッシュを作成した直後、UVを作成した直後、軽量化した直後、アップロード用に出力した直後のデータを分けて保存します。各段階を比較することで、どの処理の後からずれが発生したかを確認できます。
次に、形状とテクスチャを分けて観察します。構造物の輪郭や寸法、面のつながりが崩れている場合は、UVだけを直しても解決しません。形状は正しく、画像だけがずれている場合は、UV、画像方向、材質参照を中心に調べます。
症状を記録するときは、「ずれている」という表現だけで終わらせず、ずれ方を具体的にします。全体が上下反転しているのか、左右が鏡のようになっているのか、一部の三角形だけが伸びているのか、材質の境界から別画像へ切り替わるのかを確認します。
実写画像では上下左右を判断しにくいことがあります。その場合は、上下左右が分かる文字や格子模様を配置した確認用画像を一時的に使う方法が有効です。規則的な格子を貼ると、面のねじれ、伸び、反転、回転を視覚的に把握しやすくなります。
確認用画像へ差し替えたときに格子が正常なら、UVではなく元画像の向きや内容に問題がある可能性があります。格子も同じように崩れるなら、UVや面の参照関係を重点的に調べます。
また、作成直後のOBJを複数の確認環境で開きます。どの環境でも同じ症状が出る場合は、元データ側の問題である可能性が高くなります。特定のアップロード先だけでずれる場合は、読込時の画像方向、面の処理、軽量化、材質統合などが影響している可能性があります。
補正作業では、一度に一つの要素だけを変更します。画像反転とUV反転を同時に行うと、たまたま正常に見えても原因を特定できません。V座標の変更、画像の回転、材質参照の修正などを一つずつ試し、結果を記録します。
テクスチャ補正ステップ2|頂点索引とUV索引を確認する
二つ目のステップでは、OBJ内の三次元頂点、UV座標、面情報の対応を確認します。OBJはテキスト形式で記録されることが多いため、内容を直接調べることができます。ただし、大容量の点群メッシュは行数が多いため、元データを直接書き換えず、代表範囲を切り出した検証用ファイルで確認する方が安全です。
最初に、UV座標を表す情報が存在するかを確認します。面を持つOBJでも、UV情報が出力されていない場合があります。面情報に三次元頂点の索引しかなく、UV索引が記録されていなければ、画像を正しい位置へ貼ることはできません。
次に、面情報が参照しているUV索引が有効な範囲にあるかを確認します。記録されているUV座標数より大きな番号を参照している場合は、明確な不整合です。読込処理によってはエラーになる場合もあれば、該当面のテクスチャだけが欠ける場合もあります。
索引が有効範囲内でも、対応先が正しいとは限りません。代表的な面を選び、その面を構成する三次元頂点と、参照されているUV座標を照合します。隣接する三次元頂点が画像上で大きく離れた位置を参照していれば、三角形内部で画像が強く引き伸ばされます。
一部の三角形だけが鏡映したように見える場合は、頂点順序とUV順序を確認します。三次元頂点の順番を変更した際、対応するUVの順番も同じように変更しなければなりません。面を反転させる処理や法線方向を修正する処理の後に、この不整合が起こることがあります。
複数のOBJを結合した場合は、結合位置の前後を確認します。二つ目以降のデータでは、既に読み込まれた頂点数だけでなく、UV座標数も加算して索引を更新する必要があります。頂点索引だけが更新され、UV索引が元の番号のまま残ると、後半の面が前半のUV座標を参照します。
特定の位置から後ろだけテクスチャが崩れる場合は、結合時の索引更新ミスが疑われます。データの前半は正常で、ある面を境に後半全体が別の模様になる症状は、UV索引の加算漏れと整合します。
頂点数とUV座標数を強制的に同じにする補正は避けるべきです。一つの三次元頂点に複数のUV座標が必要な場所では、数をそろえるためにUVを削除すると、継ぎ目が壊れます。重要なのは要素数の一致ではなく、各面に対して正しい組み合わせが記録されていることです。
大規模データを自動処理する場合は、存在しない索引の参照、UV情報がない面、頂点数とUV参照数が異なる面などを機械的に検査できます。ただし、索引が形式上正しくても、画像の意味的な位置が正しいかまでは自動判定が難しいため、代表箇所の目視確認も必要です。
テクスチャ補正ステップ3|画像の向きとV座標を補正する
三つ目のステップは、画像の向きとUV座標の上下関係を確認することです。モデル全体でテクスチャが上下反転している場合は、画像座標の原点に関する解釈が異なっている可能性があります。
一般的な補正方法は、V座標を反転することです。UVが0から1の範囲で作られている場合、元のV値を1から引いた値へ変更します。Vが0.2であれば0.8、Vが0.7であれば0.3になります。これにより、画像の上側と下側の参照位置が入れ替わります。
ただし、すべてのUVに機械的な反転を行う前に、モデル全体が同じ方向に反転しているかを確認します。一部の面だけが上下逆になっている場合は、V方向の基準ではなく、面の頂点順序やUV索引の問題である可能性があります。
UVが0から1の範囲外にある場合にも注意が必要です。繰り返し表示を目的として1を超える値や負の値が使用されていると、単純な反転によって模様の繰り返し位置が変わることがあります。補正前後で、境界のつながりや繰り返し回数を確認します。
画像ファイルそのものを上下反転する方法もあります。OBJやUVを変更できない場合には有効ですが、UV反転と画像反転を同時に行うと、結果が元に戻る可能性があります。どちらか一方だけを変更し、表示結果を比較します。
画像が90度回転している場合は、V座標の反転だけでは直りません。画像の回転状態、U方向とV方向の入れ替わり、撮影画像の向きに関する情報を確認します。画像確認画面では正しく表示されていても、画素自体は別方向で保存され、表示時だけ補正されていることがあります。
テクスチャ作成後に画像を編集した場合は、切り抜きや余白追加の有無も確認します。UVは画像全体に対する相対位置を参照するため、画像の一部を削除すると、同じUVでも別の画素を参照します。縦横比が変われば、模様が一方向に伸びて見えます。
明るさや色調だけを変更し、画素の位置を変えていない場合は、通常、UVとの対応を維持できます。一方、回転、切り抜き、画像内容の移動、非等方な拡大縮小を行った場合は、UVの再調整またはテクスチャの再投影が必要です。
補正後は、地面と壁の境界、文字、標識、構造物の上端など、方向を判断しやすい部分を確認します。全体の向きが直っていても、面の境界で画像がつながらない場合は、UVシームや索引に別の問題が残っています。
テクスチャ補正ステップ4|UV展開と投影をやり直す
四つ目のステップでは、部分補正で解決できない場合に、現在のメッシュを基準としてUV展開とテクスチャ投影をやり直します。特に、UV作成後に面数削減、頂点統合、穴埋め、面削除、複数メッシュの結合を行った場合は、再展開が有効です。
UV展開を行う前に、形状編集を完了させます。不要な面の除去、穴の処理、法線方向の確認、重複頂点の整理、面数の調整を先に済ませます。UVを作成した後で再び形状を変更すると、同じ問題が再発します。
点群から生成したメッシュは、細かな凹凸や複雑な曲面を含むことがあります。すべての面を一枚の連続したUV領域に展開しようとすると、画像が大きく伸びる可能性があります。形状の角度や連続性を見ながら、適切な位置に継ぎ目を設定します。
継ぎ目が少なすぎると、曲面を無理に平面へ展開することになり、画像のひずみが増えます。反対に、継ぎ目が多すぎると、画像領域が細かく分かれ、面の境界で色差が目立ちやすくなります。形状の角、裏側、撮影画像が切り替わる場所など、視覚的に目立ちにくい位置へ継ぎ目を配置することが重要です。
地面と壁では、適した投影方向が異なります。上方から撮影した画像は地面のテクスチャには適していますが、垂直壁の情報が不足する場合があります。壁へ同じ画像を割り当てると、狭い範囲の画素が大きく引き伸ばされます。
撮影画像を面へ割り当てる際は、撮影位置との距離だけでなく、撮影方向と面の向きも考慮します。面の正面に近い方向から撮影された画像を優先すると、斜め方向から無理に引き伸ばす状態を減らせます。
遮蔽物にも注意が必要です。対象面と撮影位置が近くても、その間に別の構造物がある場合、誤った画像が投影されることがあります。点群上では面が存在していても、画像には写っていない部分へ周囲の色が伸ばされるケースがあります。
新しいUVを作成した後は、UV領域同士の重なりを確認します。同じ模様を共有する目的がない限り、異なる面が同じ画像位置を参照すると、離れた場所に同じ模様が現れます。自動展開後には、意図しない重複が残っていないかを確認します。
UV領域の間には余白を確保します。画像が縮小されたり、アップロード後に再処理されたりすると、境界付近で隣の領域の色が混ざることがあります。細い余白しかない場合、遠距離表示で継ぎ目に別の色がにじむ可能性があります。
UV展開をやり直した場合は、テクスチャ画像も新しいUV配置に合わせて生成します。新しいUVと古い画像を組み合わせても位置は一致しません。OBJ、MTL、画像を同じ処理回の成果物として管理する必要があります。
テクスチャ補正ステップ5|OBJ・MTL・画像を再出力する
五つ目のステップは、補正したOBJ、MTL、画像ファイルをアップロード用として再出力し、最終確認することです。以前のファイルが残るフォルダへ上書きすると、古いMTLや同名画像が参照される可能性があります。新しい空のフォルダへ一式を出力する方法が安全です。
OBJ内には、使用するMTLファイルの参照が記録されます。MTLには材質名と画像ファイルの参照が記録されます。OBJが指定するMTL名、OBJ内で使用する材質名、MTL内で定義する材質名、実際の画像ファイル名を一致させます。
画像だけを別名へ変更した場合は、MTL内の参照も変更しなければなりません。ファイル名の大文字と小文字、拡張子の表記もそろえます。作成環境では同じ名前として扱われても、アップロード先では別ファイルと判断されることがあります。
作成端末内の保存場所を示す長い参照がMTLに記録されている場合、別の環境では同じ場所を参照できません。アップロード用データでは、OBJ、MTL、画像を同じフォルダへ配置し、ファイル名を使った単純な参照にすると管理しやすくなります。
再出力した直後に、まず手元の確認環境で開きます。形状、面の表裏、テクスチャの上下、継ぎ目、材質の切り替わり、画像の欠落を確認します。手元で正常であることを確認してから、実際のアップロード先で同じ部分を見比べます。
アップロード先で自動的な面数削減や画像縮小が行われる場合、元のデータと表示結果が変わる可能性があります。手元では正常なのにアップロード後だけ崩れるときは、アップロード後の変換処理がUVを保持しているかを確認します。
大規模な点群OBJを毎回アップロードすると確認に時間がかかります。そのため、地面、壁、曲面、細い部材、UVの継ぎ目、複数材質を含む代表範囲を切り出し、検証用の小さなOBJを作る方法が有効です。小規模データで正常に表示できた条件を全体データへ適用します。
最終確認では、モデル全体を遠くから眺めるだけでは不十分です。壁と床の境界、柱の角、開口部の周辺、曲面、画像が切り替わる場所などを拡大します。全体では分からない数画素のずれが、境界付近では大きな段差として現れることがあります。
症状別にUVずれの原因を切り分ける方法
テクスチャがモデル全体で上下反転している場合は、V座標の基準差を最初に疑います。すべての面で同じ方向に反転し、形状や面のつながりが正常であれば、UVのV反転または画像の上下反転で補正できる可能性があります。
左右が鏡のように表示される場合は、U方向の反転や面の頂点順序を確認します。特定の面だけが左右反転しているなら、モデル全体のU座標を変更するのではなく、その面の索引対応を調べます。
三角形ごとに画像が折れたり、斜めへ大きく伸びたりする場合は、頂点索引とUV索引の不一致が疑われます。一つの面を構成する三つの頂点が、画像上で離れた三点を参照している可能性があります。
ある位置から後ろの面がすべて別の画像位置を参照する場合は、データ結合時のUV索引更新を確認します。前半が正常で後半だけ崩れる症状は、結合境界を特定する手掛かりになります。
穴埋めした面や削減した部分だけが引き伸ばされる場合は、UV作成後の形状変更が原因として考えられます。新しく生成された面に適切なUVがなく、周囲の座標が補間されている可能性があります。この場合は、形状修正後にUVを再作成する必要があります。
画像全体が横長または縦長に伸びている場合は、テクスチャ画像の縦横比を確認します。元画像とアップロードした画像の画素数が異なっていても、縦横比が同じなら位置関係は維持されることがあります。しかし、縦横比が変わっていれば模様の比率も変わります。
一部の面だけが単色になる場合は、その面に材質が割り当てられているかを確認します。UVが存在していても、OBJ内で材質が指定されていなければ、画像が表示されないことがあります。
別の場所の画像が表示される場合は、MTLが誤った画像を参照していないかを確認します。同名の古い画像がフォルダに残っていると、修正後の画像ではなく旧版が読み込まれる可能性があります。
近距離では正常なのに遠距離で継ぎ目が目立つ場合は、UV領域間の余白不足が考えられます。表示時に低解像度の画像が使われると、隣接領域の色が混ざることがあります。UVの位置そのものだけでなく、境界周辺の余白も調整します。
点群OBJアップロード前の確認ポイント
点群OBJアップロード前には、UVだけでなく、形状、座標、単位、法線、材質、画像を一体として確認する必要があります。テクスチャの不具合に見えても、実際には面の表裏や座標精度が原因である場合があります。
まず、OBJに面情報が含まれているかを確認します。点だけで構成されたOBJでは、一般的なUVテクスチャを貼ることができません。面情報がある場合は、UV座標と材質指定が含まれているかを確認します。
次に、MTLと画像ファイルがそろっているかを確認します。OBJだけを移動し、付属ファイルを置き忘れると、テクスチャは表示されません。アップロード用の一式を同じフォルダで管理すると、ファイル不足を防ぎやすくなります。
法線方向も確認します。面の表裏が反転していると、片側から見えなくなる場合や、テクスチャが欠けたように見える場合があります。面の頂点順序を変更して法線を直す場合は、UV索引の順序も対応させます。
座標値が非常に大きい場合、表示環境の計算精度によって形状が細かく揺れたり、面の境界が不安定に見えたりすることがあります。テクスチャのずれと区別するため、必要に応じて確認用データをローカル原点付近へ移動し、症状が変わるかを比較します。
単位の違いも確認します。単位変換は通常、UV座標へ直接影響しませんが、変換処理と同時に面の再構成や最適化が行われると、UV対応が変わる可能性があります。座標変換前後で頂点数や面数が変化していないかを確認します。
画像の解像度は、対象物の大きさと閲覧距離に合わせます。高解像度の画像を用意しても、アップロード時に大幅に縮小されれば、細部や境界がぼやけます。反対に、必要以上に大きな画像は処理負荷を増やし、アップロード後の自動変換を招く可能性があります。
材質名は重複を避け、用途が分かるように管理します。複数の材質が同じ名前を持つと、変換時に統合されたり、後に定義された材質で上書きされたりする可能性があります。
アップロード前には、代表箇所を拡大した確認画像も残しておくと便利です。アップロード後の表示と見比べることで、元データ側の問題か、アップロード後の変換による問題かを判断しやすくなります。
大容量OBJを補正するときの注意点
点群から生成したOBJは、頂点数や面数が多く、ファイル容量も大きくなりやすいデータです。大容量OBJを直接編集すると、保存や読み込みに時間がかかり、修正結果の確認にも手間がかかります。
最初に、問題が見られる範囲を切り出して検証します。代表範囲には、平面、角、曲面、画像の継ぎ目、複数材質が含まれるようにします。小規模データで原因と補正方法を確認してから、全体へ同じ処理を適用します。
面数を減らす場合は、UV保持の有無だけでなく、削減後の見た目も確認します。UVを保持する処理であっても、複数の小さな三角形を一つの大きな三角形にまとめれば、画像の補間結果が変化します。
削減率を一度に大きくすると、どの段階でテクスチャ品質が低下したか分かりません。複数の削減率でデータを作り、形状とテクスチャの両方を比較します。必要な精度と閲覧性能のバランスを見ながら調整します。
大規模メッシュでは、UV展開後の画像領域が非常に細かくなることがあります。小さな領域が多すぎると、画像縮小時に境界の色が混ざりやすくなります。形状を適切な単位で分割し、複数のテクスチャ画像へ分ける方法も検討します。
複数ファイルへ分割する場合は、各OBJの頂点索引とUV索引を独立した状態で再出力します。元の全体OBJから一部の行を単純に抜き出すと、存在しない番号を参照する可能性があります。分割後のファイルごとに索引を整理します。
自動処理を使用するときは、処理前後の頂点数、UV数、面数、材質数、画像数を記録します。数が大きく変化した場合は、意図した軽量化だけでなく、UVや材質が削除されていないかを確認します。
補正後の全体データは、一度だけでなく、再読込して確認します。出力直後の作業画面では正常でも、保存したOBJを新規に読み込むと不具合が現れることがあります。内部状態ではなく、実際に保存されたファイルを基準に判断することが重要です。
UVずれを再発させない作業手順
UVずれを防ぐには、作業順序を固定することが効果的です。点群の整理、メッシュ生成、形状修正、面数調整、UV展開、画像投影、材質設定、OBJ出力、アップロード確認という順序を基本とします。
形状修正が完了する前に最終UVを作ると、後の変更で対応が崩れます。穴埋め、不要部分の削除、面の結合、頂点統合などは、UV展開より前に済ませます。
UV作成後に変更してよい処理と、避けるべき処理を分けます。画像の明るさや色調の調整は、画素位置を変えなければ対応を維持しやすい処理です。一方、切り抜き、回転、縦横比変更、面の削除、頂点統合は、UVとの対応へ影響します。
OBJ、MTL、画像は一つの成果物として版管理します。OBJだけを更新し、MTLや画像を古いまま使わないようにします。出力日時や版をフォルダ名へ含めると、組み合わせ間違いを減らせます。
変換条件も記録します。面数削減率、座標変換、単位、画像解像度、UV反転の有無、材質数、原点移動などを残します。同じ条件で再出力できれば、担当者が変わっても品質を再現しやすくなります。
確認項目も統一します。形状が開けることだけを完了条件にせず、形状の位置、面の表裏、画像の表示、上下左右、継ぎ目、材質境界、アップロード後の変化まで確認します。
修正履歴には、何を変更し、どの症状が直ったかを記録します。「UVを修正した」だけではなく、「全体の上下反転に対してV座標を反転した」「結合後半のUV索引へ前半のUV数を加算した」など、原因と処理を具体的に残します。
定期的に同じ検証用OBJをアップロードし、表示結果を比較する方法も有効です。アップロード先の変換処理や表示仕様が変わった場合、過去に正常だった検証データとの差から影響を確認できます。
点群取得段階でテクスチャ品質を高める方法
テクスチャの品質は、OBJ出力後のUV補正だけで決まるものではありません。元となる点群と撮影画像の取得状態が不十分であれば、UVを正しく設定しても自然なテクスチャを作れない場合があります。
対象面を一方向からしか撮影していない場合、反対側や側面の画像情報が不足します。画像に写っていない面へテクスチャを作成すると、周囲の色が引き伸ばされたり、別の面の画像が誤って投影されたりします。
地面、壁、天井、構造物の側面を記録する場合は、それぞれの面が十分に写る方向から取得します。正面に近い画像があるほど、斜め方向からの投影による伸びを減らしやすくなります。
撮影位置の間隔が広すぎると、画像間で共通して写る範囲が少なくなります。反対に、急激な向き変更や大きな移動があると、画像と三次元形状の対応を求めにくくなることがあります。一定の速度と間隔を意識し、対象面を連続して記録します。
反射が強い面、透明な面、模様の少ない面、暗い場所では、画像と形状の対応が不安定になる場合があります。照明条件や撮影角度を変え、同じ場所を複数方向から記録することが有効です。
人や車両などの移動物が多い環境では、点群を取得した時点と画像を撮影した時点で状況が変わり、画像の対応が崩れる可能性があります。可能な範囲で移動物の少ないタイミングを選びます。
床面は、撮影者や機材による遮蔽が起きやすい場所です。壁面が鮮明でも、床の画像だけが欠けたり引き伸ばされたりする場合があります。進行方向だけでなく、床面が十分に写る角度も確保します。
細い部材や複雑な設備は、点群の密度が不足すると正しい面が作られません。誤った面へ正しい画像を貼っても、見た目は不自然になります。対象物の大きさに応じて取得距離や移動間隔を調整します。
点群取得時に座標と画像を同じ工程で管理できれば、後から別々のデータを合わせる作業を減らせます。ただし、取得後には必ず形状と画像の対応を確認し、出力形式やアップロード先に合わせて調整する必要があります。
まとめ
点群OBJのUV座標がずれる原因は、頂点索引とUV索引の不一致、画像の縦方向とV座標の基準差、UV作成後の形状変更、テクスチャ画像の寸法や向きの変更、OBJ・MTL・画像の参照不整合に大きく分けられます。
形状が正しく表示されているからといって、UVも正しいとは限りません。OBJでは、三次元頂点とUV座標が別々に管理されています。一つの三次元頂点に複数のUV座標が割り当てられることもあるため、頂点数とUV数を単純にそろえる補正は適切ではありません。
補正では、最初に元データを保管し、症状を具体的に整理します。次に、面ごとの頂点索引とUV索引を確認し、全体が上下反転している場合はV座標または画像方向を調整します。形状編集後に不具合が起きた場合は、現在のメッシュを基準としてUV展開とテクスチャ投影をやり直します。
再出力時には、OBJ、MTL、画像を同じ処理回の組み合わせとしてまとめます。ファイル名、材質名、画像参照を一致させ、手元の確認環境と実際のアップロード先の両方で表示を比較します。
点群OBJアップロード後だけテクスチャが崩れる場合は、アップロード先で行われる面数削減、画像縮小、材質統合、画像方向の解釈なども確認します。代表範囲を切り出した小規模なOBJを使えば、補正条件を効率よく検証できます。
また、UV補正だけでは、撮影されていない面や点群密度が不足した場所のテクスチャを完全には再現できません。点群取得、画像撮影、メッシュ作成、UV展開、OBJ出力、アップロード確認までを一つの工程として管理することが重要です。
現場での点群取得からテクスチャ付きデータの作成までを効率化する際は、取得条件と出力後の確認方法を整理したうえで、LRTK Phoneを活用した運用へつなげることができます。