3

私はタトゥー シミュレーター プログラムに取り組んでいます。デカール (タトゥー) をターゲット メッシュの周りに巻き付ける方法があるかどうかを知る必要があります。たとえば、脚の一方の側から反対側に移動するタトゥーがあるように、またはイベントその後ろに。

ここに画像の説明を入力

4

3 に答える 3

3

実行時ではなく、投影されたデカールを使用します。

ここで必要なのは、プロシージャル タトゥー マップです。ライトマップのような別のテクスチャと考えてください。カスタム シェーダーが必要になる場合がありますが、標準シェーダーのセカンダリ アルベド チャネルを使用して実行できる可能性があります。

トリッキーな部分は、そのテクスチャへの書き込みです。基本的なアルゴリズムの概要を説明しますが、実装はあなたに任せます。

最初に行う必要があるのは、メッシュの三角形をコードでアンラップすることです。UV マップ上で連続しているエッジと分離しているエッジを特定する必要があります。次に、タトゥーと初期変換を識別する方法が必要です。最初に、回転するタトゥー ソース テクスチャの原点を定義します。次に、ソース テクスチャを参照する構造と、UV 位置 (Vector2) / 回転 (float) / スケール (float) を定義して、宛先テクスチャに適用します。

タトゥーをその形式で保存したら、スキンのタトゥー マスク テクスチャの作成を開始できます。スキン UV のピクセル密度が一貫している場合は、主に UV 空間で作業できるため、はるかに簡単ですが、そうでない場合は、トライごとにスケールを取得するために再投影する必要があります。ただし、基本的には、原点を含む本体の三角形から始めて、その三角形に通常どおり描画します。そこから、その三角形の各頂点とエッジがタトゥー ソース テクスチャのどこにあるかがわかります。したがって、隣接する各三角形をループし (幅優先の再帰的方法をお勧めします)、既にわかっているエッジから続けます。3 つの頂点すべてがソース テクスチャの矩形の外にある場合は、そこで停止できます。それ以外の場合は、次の三角形の隣接に進みます。確認してください」

そのアルゴリズムには、タトゥーが完全に回り込んで重なり合う場合に対処する必要があるエッジケースがありますが、それに対処できる方法がいくつかあります.

すべてのタトゥーをタトゥー テクスチャに書き込んだら、それをスキン マテリアルに適用するだけです。これにより、すべての計算がリアルタイム レンダリングから除外されるだけでなく、タトゥーの適用方法を完全に制御できるようになります。

于 2019-03-14T17:26:51.770 に答える