頂点カラー メッシュをテクスチャメッシュに変換する

Hugging Face は、頂点カラーを持つ 3D メッシュを UV マッピングされたテクスチャメッシュに変換するためのガイドとサポートライブラリ InstantTexture をリリースしました。このプロセスは重要です。なぜなら、多くの生成的 3D モデル(例: InstantMesh)は頂点カラーのメッシュを生成しますが、ほとんどの下流 3D アプリケーションはレンダリングのために UV マッピングとテクスチャを必要とするからです。

高速変換のための InstantTexture ライブラリ

InstantTexture ライブラリを使用するのが最も速い方法で、UV マッピングとテクスチャ生成の技術パイプラインを自動化します。

インストールと使用方法

ユーザーは GitHub から直接ライブラリをインストールできます:

pip install git+https://github.com/dylanebert/InstantTexture

頂点カラーの .obj メッシュを UV マッピングされた .glb メッシュに変換するには、以下の実装を使用します:

from instant_texture import Converter

input_mesh_path = "path/to/mesh.obj"
converter = Converter()
converter.convert(input_mesh_path)

テクスチャ変換の技術パイプライン

変換を手動で実装する場合、プロセスは頂点データを 2D 画像マップに変換するためのいくつかの離散的な幾何学的および画像処理ステップを含みます。

UV マップ生成とリマッピング

パイプラインは xatlas ライブラリを使用して UV マップを生成します。これはプロセスで最も計算コストが高い部分です。UV マップが生成されたら、頂点と頂点カラーが新しい UV 座標に合わせてリマップされ、メッシュのフェイスもそれに応じて更新されます。

重心座標補間によるテクスチャバッファの埋め込み

テクスチャを作成するために、システムはテクスチャバッファを構築します(通常、品質向上のために 2 倍に拡大)。そして、以下のロジックで埋めます:

  1. Barycentric Interpolation: 三角形内の特定の点に対し、3 つの頂点のカラーを使用して補間カラーを計算します。
  2. Point-in-Triangle Test: テクスチャバッファ内の特定のピクセル座標が、メッシュフェイスの UV 座標で定義された三角形の内部にあるかどうかを判定します。
  3. Filling Loop: システムはすべてのフェイスを走査し、テクスチャバッファ上でのバウンディングボックスを決定し、点が三角形内にあるかテストして、対応するピクセルに補間カラーを割り当てます。

テクスチャのリファインと後処理

初期のテクスチャ生成ではしばしば「穴」やアーティファクトが生じます。これを解決するために、パイプラインは 4 つの連続した画像処理技術を適用します:

  • Inpainting: cv2.inpaint を使用して、周囲のピクセルの平均色で穴を埋めます。
  • Median Filter: ピクセルを近傍の中央値の色に置き換えてノイズを除去します。
  • Gaussian Blur: テクスチャを平滑化し、残存ノイズを除去します。
  • Downsampling: LANCZOS リサンプリングを用いて画像を最終的な希望テクスチャサイズ(例: 1024x1024)にリサイズします。

最終メッシュ構築と制限事項

リファインされたテクスチャが生成されたら、trimesh を使用して PBRMaterial を作成し、生成された画像を baseColorTexture として割り当てます。このマテリアルは生成された UV 座標と共に TextureVisuals を使用してメッシュに適用されます。

現在の制限事項

この手法は迅速な変換パスを提供しますが、既知の制限があります:

  • Artifacts: 生成されたメッシュには小さな視覚的アーティファクトが残る可能性があります。
  • Production Quality: 生成された UV マップとテクスチャの品質は、プロフェッショナルな製品レベルのメッシュに必要な基準を現在満たしていません。

このアプローチは、頂点カラーの生成出力から標準的なテクスチャ形式への迅速な移行が必要なユーザー向けのユーティリティとして意図されています。

Sources