3DモデルのUV展開原理

今年の初めに、 MAKE マガジンにビデオ ゲーム キャラクターのぬいぐるみの作り方に関するチュートリアルを書きました。この技術は、キャラクターとそのテクスチャの特定の 3D モデルを取得し、プログラムで縫製パターンを生成します。私は概要を書き、ソース コードを GitHubにアップロードしましたが、これを可能にする数学のより詳細な説明をここに書きました。

推奨 NSDT ツールThree.js AI テクスチャ開発キット -  YOLO 合成データ ジェネレーター -  GLTF/GLB オンライン編集 -  3D モデル フォーマット オンライン変換 - プログラマブル 3D シーン エディター -  REVIT エクスポート 3D モデル プラグイン -  3D モデル セマンティック検索エンジン

私のプロジェクトの目標は、一度縫い合わせると開始時の 3D モデル (この場合はビデオ ゲームのキャラクター) に近似する、印刷可能な縫製パターンを作成することです。私の技術的な要点は、3D モデルのテクスチャ画像ファイルを縫製パターンとして使用することです。テクスチャ イメージは、UV 継ぎ目で結合して、元の 3D 形状を再構築できる必要があります。3D モデルの初期テクスチャ イメージはシームの再構築用に最適化されていない可能性がありますが、これは元のモデルから新しい UV セットを作成することで修正できます (シームはシームに対してより最適化されています)。元の UV と新しい UV が与えられると、各面の変換行列を計算して、古いテクスチャ イメージを新しい最適化されたテクスチャ イメージに変換できます。ステッチされた再構築の解像度は、継ぎ目の位置と UV アンラッピング アルゴリズムの変形量によって異なります。

概要で述べたように、3D モデルはいくつかの異なる機能で構成されています。3D 形状を定義する頂点、エッジ、面があります。また、テクスチャを各面に投影する方法を定義する UV 座標のセットも含まれています。最後に、3D モデルのシェーディング方法を定義するテクスチャ イメージがあります。

UV マッピングは、3D サーフェスを 2D テクスチャ サーフェスに投影するプロセスであり、コンピュータ グラフィックスの分野でよく研究されています。3D モデルの各面は UV マップ上の面にマッピングされます。UV マップ上の各面は 3D モデル上の面に対応し、UV は 3D モデルの面間のエッジ関係を保持します。筑波大学の五十嵐有紀博士は、UV のこの特性を認識し、論文「  Plushie: An Interactive Design System for Plush Toys  (SIGGRAPH 2006)」および「Pillow: Interactive Flattening of a 3D Model for Plush Toy Design (SIGGRAPH 2007)」で発表しました。 UV を使用して、動的に作成された 3D モデルから縫製パターンを作成します。彼女の UV マッピングの特定のアルゴリズムは ABF++ です。

UV マップは縫製パターンとして使用できるため、UV はテクスチャ イメージを 3D モデルにマッピングするため、テクスチャ イメージも同様に使用できます。布地にテクスチャを印刷することができ、そのパターンから縫い付けられたぬいぐるみは、元の 3D モデルの色情報を保持します。

ただし、すべての UV マップが縫製パターンの作成に最適化されているわけではありません。上からわかるように、UV は互いに折り畳まれているため、UV とボディは半分になります。これは、ビデオ ゲーム グラフィックスでよく使われる省スペース技術です。また、頭は体よりもはるかに大きいため、ビデオ ゲームでは頭の方が細部まで細かく表示されます。3D 空間での体のプロポーションを 2D UV 空間でのプロポーションとほぼ同じにする必要があるため、これらの最適化はパターンの縫製には適していません。

最終的な解像度の違い by 五十嵐

UV クラスターの継ぎ目は、最終的なぬいぐるみの継ぎ目になります。同じ 3D モデルから始めて、縫い目の位置によって最終的な縫製品の解像度が決まります。

モデルの初期 UV はぬいぐるみの作成には適していなかったので、縫製用に最適化するために独自の UV を作成しました。最新の 3D グラフィック ソフトウェア (Maya、Blender、3ds Max など) には UV マッピング機能があります。私のプロジェクトでは、特殊な UV マッピング ツールである UVLayout を使用しましたが、MAKE マガジンの記事にあるように、Blender も正常に動作します。

最終的な UV マップの一部

新しく作成した UV マップを使用して、それに対応する新しいテクスチャ マップを作成し、最終的な縫製パターンとして印刷したいと考えています。ここで線形代数が役に立ちます。

UV マップ上のポリゴン面は三角形に分割されます。古い元の UV 上の各三角形の面は、3D モデル上の同じ面との関係を介して、新しい UV 上の三角形にマッピングされます。2 つの三角形は同じ形状を表しますが、UV マップ上では異なる座標を持つため、2 つの三角形間の変換行列を計算できます。計算に正方行列を使用したいため、三角形が使用されます。この変換行列を使用して、古いテクスチャ上の対応する三角形領域を変換して、新しいテクスチャ上の新しい三角形領域をシェーディングすることができます。Stackoverflow には、2 つの三角形の座標に基づいて変換行列を計算する方法と、私が使用した便利なコード スニペットが詳しく説明されています。

各 UV 三角形の変換行列を計算し、対応するテクスチャ三角形を変換すると、最終結果は新しいテクスチャになります。新しいテクスチャと新しい UV を元の 3D モデルに適用した場合、見た目に違いはありません。

私の実装では、まず UV 座標がテクスチャ イメージ上のピクセル座標にマッピングされ、次に変換行列が計算されます。マッピング (浮動小数点の不正確さとの組み合わせ) によりいくつかの丸めの問題が発生し (ピクセル座標は整数でなければならないため)、その結果、変換行列を解く際に特異行列が発生しました。私のハックな解決策は、UV ポイントの 1 つのピクセル座標の 1 つを 1 ピクセルだけオフセットすることでした。最終的に印刷されたパターンの 1 ピクセルは目立たなくなると思います。

例えば:

上は 3D モデルで、強調表示されている顔が対象の顔です。

元の UV マップ上の顔に対応する、その UV 座標は (0.7153、-0.2275)、(0.78、-0.1982)、(0.7519、-0.0935)、(0.7207、-0.0382) です。

ご覧のとおり、UV はテクスチャ イメージを 3D モデルにマッピングします。

この特定の UV 面は、テクスチャ イメージのごく一部を制御します。

3D モデル上でハイライト表示された面は、作成した新しい UV マップ上の面にも対応します。

その座標は (0.046143, 0.63782)、(0.133411, 0.683826)、(0.09056, 0.660572)、(0.108221, 0.6849) です。

2 セットの UV 座標を指定して、UV クワッドを 2 つの三角形に分解し、変換行列を計算しました。

変換行列を計算するには、次のように方程式が確立されます。

ここで、W は新しい UV 座標を含む行列、A は変換行列、Z は古い UV 座標を含む行列です。

同次座標を使用しているため、W と Z は最終行 [1 1 1] を持つ 3×3 正方行列であり、A も最終行 [0 0 1] を持つ 3×3 正方行列です。詳細については、 「アフィン変換」を参照してください

行列に実座標を入力すると、次の 2 つの方程式が得られます。元の UV 座標は、ピクセル座標 (384, 72)、(396, 80)、(401, 67)、(383, 61) にマッピングされます。新しい UV 座標は (29, 174)、(23, 185)、(33, 188)、(35, 172) にマップされます。変換にはピクセル座標を使用します。

前述したように、四角形を 2 つの三角形に分割したため、2 つの方程式が存在します。

A を解決するには、Z の逆数をとり、それに W を掛けます。Z は正方行列であるため、その行列式は非ゼロであるため、Z は可逆です。Z の行列式は、行列式が囲む三角形の面積を表すため、ゼロ以外になります。

しかし、実際の実装では、この問題をより直接的な方法、つまり A と Z の間で行列の乗算を実行し、未知数系を解くことで解決しました。詳細については、こちらをご覧ください。

元の UV 制御テクスチャ イメージ領域に適用すると、次の変換されたテクスチャ イメージ フラグメントが得られます。

各テクスチャ イメージ領域を変換すると、印刷できる次のテクスチャ イメージが得られます。オレンジ色の矢印は、変換されたテクスチャ パッチがテクスチャ イメージ全体のどこに収まるかを示します。

これは、3D モデルから縫製パターンを作成する方法についての、より理論的/数学的な説明です。


元のリンク: 3D Exhibition 2D Mathematics Principles - BimAnt

おすすめ

転載: blog.csdn.net/shebao3333/article/details/135448535