体の部位の交換とメッシュ/マスク境界のトラブルシューティング
デフォルトのZEPETOベースボディは、一般的に中性的から男性的な形状をしています。より明確な女性の胴体を作成するには、ベースボディを置き換えるメッシュ要素を使用する必要があります。例や出発点として、Female_Torso.fbx(ダウンロード)ファイルをダウンロードしてください。 このファイルはBlenderに読み込むことができ、2つのメッシュオブジェクトが含まれています:
- Female_Torso_V
- guide_mannequin

Female_Torso_Vオブジェクトとguide_mannequinオブジェクトは、マスクと同じ仕様にUVマッピングされています。Female_Torso_Vオブジェクトには「skin」という名前のマテリアルもあります。このマテリアルの命名は、アプリにアバターのスキンテクスチャを使用するように指示するために必要です。

この胴体はリラックスしたAポーズに配置されており、標準的なTポーズに合わせるためには追加の作業が必要です。詳細については、Rigging Guide を参照してください。 リグと作業用のスケルトンを取得するには、creator_base_setファイルをシーンにインポートします。creator base setスケルトンを標準のAポーズに配置します。Female_Torso_Vメッシュオブジェクトの腰、腕、首がすべてデフォルトのマスクに一致するループで終わっていることに注意してください。これは、他のアイテムと組み合わせたときにベースボディに視覚的な切れ目がないようにするためです。 この胴体は、女性の形に合わせたトップアイテムを形作るため、またはトップアイテムの露出した肌の部分として使用するために使用できます。 女性の胴体にはウェイトが含まれていません。ウェイトペインティングには、Creator Base Setから適切にポーズ/ウェイトされたマスクオブジェクトからのウェイト転送操作を使用します。これにより、胴体に適切に分布されたウェイトが提供されるはずです。 トップオブジェクトに胴体の部分を含める場合は、胴体とトップオブジェクトを1つのオブジェクトに結合することを確認してください。これは、胴体とトップメッシュを選択し、Object > Joinに移動することで簡単に実行できます。

アイテムの各コンポーネントのウェイト設定は、メッシュオブジェクトを結合する際にメッシュごとに保持されるため、結合する前にトップと胴体のオブジェクトの両方をバインドしておくと便利です。仕上げの一環として、トップに覆われて見えなくなる胴体メッシュの部分を削除します。これにより、トップと胴体オブジェクト間のクリッピング問題を防ぐのに役立ちます。
アプリで使用するために自分の胴体をカスタマイズすることもできます! 自分の胴体を作成またはカスタマイズする場合、メッシュはいくつかの要件に従う必要があります。
- 胴体メッシュは、腰、首、腕のベースマスクオブジェクトと一致する必要があります
- 胴体メッシュは、マスクと同様のUVレイアウトに従う必要があります
- 胴体メッシュには「skin」という名前のマテリアルが割り当てられている必要があります
マスキングの場合、カスタム胴体要素はベースアバターの胴体を置き換えます。一般的なマスキングプロセスの詳細については、Masking Guideを参照してください。マスク上の胴体のカスタム胴体で覆われている部分をカスタム胴体の終点まで黒く塗ります。理想的には、これによりベース胴体が隠され、カスタム胴体がエラーなく表示されるようになります。

ガイドのUnityへのエクスポートセクションに示されているように、Unityにエクスポートするための必要な準備を行います。テストのためにトルソーアイテム、アーマチュア、およびマスクをfbxにエクスポートします。

アイテムをインポートし、ZEPETO Studio Unityプロジェクトでテストします。トルソーの置き換えの場合、アイテムはトップまたはドレス/スーツになります。
- ベースアバターボディとカスタムトルソーの間に明らかなメッシュの破損がないか確認します。もし見つけた場合は、Blenderに戻って問題を修正します。
- アニメーションポーズでアバターをチェックし、特にトルソーの境界線に沿ってウェイトが適切に分配されているか確認します。ここで問題が見つかった場合は、Blenderに戻ってウェイトペイントの問題を修正します。
- カスタムトルソーとベースアバターの間のシームラインをチェックし、カスタムトルソーとベースアバターの間の法線の連続性に問題がないか確認します。ここで問題がある場合は、Blenderで変更する必要があります。
Unityで問題がなければ、プレハブを.zepetoファイルにエクスポートします。ZEPETO Studioにアップロードしてアイテムを再確認します。追加の問題がなければ、アイテムをレビューに提出できます。
メッシュが正しく整列しているが、カスタムボディパーツとベースアバターボディの境界に線が現れ、その破れが照明の変化のように見える場合、カスタムボディパーツの法線がベースアバターボディと整列していない可能性があります。

カスタムボディパーツとマスクオブジェクトを持つアイテムを選択し、編集モードに移動し、右上のビューポートオーバーレイメニューで「スプリット法線を表示」ボタンを選択することで、頂点法線の整列を確認できます。各頂点からメッシュにピンクの線が現れます。これらの線は頂点法線の接線方向を表しています。

ピンクの線が境界で整列していない場合、メッシュからカスタムボディパーツに法線データを転送する必要があるかもしれません。マスクメッシュからアイテムメッシュに法線データを転送するには、アイテムを選択し、アイテムメッシュオブジェクトに「データ転送」モディファイアを追加します。

「Face Corner Data」の下に「Custom Normals」を転送したいです。マスクを「Source」オブジェクトとして追加し、マスクから法線情報を取得できるようにします。

境界の法線情報に転送を制限するために、モディファイアがターゲットとする新しい頂点グループを作成する必要があります。カスタムトルソアイテムを編集モードで開き、オブジェクトデータプロパティタブに移動し、「+」ボタンで新しい頂点グループを作成します。組織化のために、この頂点グループに「Border Normals Target」のような説明的な名前を付けます。

他のすべてのメッシュ要素を選択解除し、境界エッジループを選択して、「Assign」ボタンを使用して選択したメッシュコンポーネントを頂点グループに割り当てます。

修飾子タブに戻り、データ転送修飾子で、頂点グループボックスで境界ターゲット頂点グループを見つけて選択します。これで、境界領域のメッシュ法線がマスクメッシュ法線からコピーされます。

修飾子を適用してメッシュに法線を適用します。

法線オーバーレイで法線が正しく整列しているかどうかを再確認します。すべてが正常に動作する場合は、Unityでアイテムをエクスポートしてテストを続けます。
メッシュが適切に整列されているが、カスタムボディパーツとベースアバターボディの境界でベースカラーのトーンが変わる場合、カスタムボディパーツのUVマップとマスクのUVマップが一致していない可能性があります。

スキンマテリアルを使用するには、カスタムボディパーツのUVをマスクのUVと一致させる必要があります。BlenderのTransfer Mesh Dataツールを使用して、マスクからカスタムトルソーにUVデータを転送できます。まず、カスタムボディパーツのジオメトリをアイテムメッシュから分離します。

オブジェクトモードでカスタムボディパーツを選択し、シフト/追加選択でマスクオブジェクトを選択して、マスクオブジェクトがアクティブな選択になるようにします。オブジェクトメニュー > リンク/データ転送 > メッシュデータ転送に移動し、表示されるポップアップで「UV」を選択します。
- 「データタイプ」が「UVs」に設定されていることを確認します
- 「フェイスコーナーマッピング」を「最も近いコーナーと最適なマッチングノーマル」に変更します
- 「フェイスマッピング」を「最適なノーマルマッチング」に変更します
- 他の設定はすべてデフォルト設定のままで構いません


カスタムボディパーツのUVマップデータは、現在マスクと同様のレイアウトになっているはずです。カスタムボディパーツのUVマップを確認し、そのレイアウトがマスクと似ていることを確認してください。

すべてがチェックアウトされたら、カスタムボディパーツをアイテムに再結合し、Unityでアイテムをエクスポートしてテストを続けてください。
カスタムボディパーツがベースアバターボディの期待される動きに従っていない場合、カスタムボディパーツのウェイト分布にエラーがある可能性があります。この問題を解決するには、マスクのような良いソースからウェイトをカスタムボディパーツに転送します。まず、カスタムボディパーツのジオメトリをアイテムメッシュから分離します。マスクを選択し、次にシフト/追加選択でカスタムボディパーツメッシュを選択します。ウェイトペイントモードに入ります。ウェイト > ウェイト転送に移動します。拡張オプションで、「ソースレイヤー選択」が「名前で」に設定されていることを確認します。「宛先レイヤー」では、すべてのウェイトを転送したい場合は「すべてのレイヤー」オプションを選択できます。特定のウェイトのみを転送する必要がある場合は、カスタムボディパーツのメッシュ境界線周辺のウェイトなど、特定の頂点グループを選択します。ウェイトのエラーをテストして修正し、カスタムボディパーツをアイテムに再結合します。アイテムをエクスポートしてUnityでテストします。