Ue4

「ハニーセレクト」の分析



Analysis Ofhoney Select



壊れたCSDNの記事エディターは使いづらく、写真を渡すのは大変です。後で、知乎で書いた後、裏返します:https://zhuanlan.zhihu.com/p/28471808




ゲーム内のピン留めシステムに関しては、その方法に関する情報はほとんどありません。私はそれを「世界の終わりと明るい月のナイフ」とだけ共有しました。少し前に、VRリソース共有のパブリックアカウントに注意を払い、HSのピン留め作業を頻繁にプッシュしました。それは私の好奇心を刺激し、見つけることにしました。




HSがこのような強力なカスタマイズ機能を備えている理由は、サードパーティのMODツールが存在するため、プレーヤーはゲーム内のリソースを自由にインポートおよびエクスポートできるため、ゲームの実装メカニズムを分析するための裏口が開かれます。


上の写真でわかるように、顔には多くの骨があります。モデルをエクスポートして分析してみてください。




鼻の骨は、平行移動/回転/ズームを実行します。顔をつまむのはこんな感じのようです。


たとえば、鼻翼の骨がこの頂点に影響を与える場合、次のような効果を生み出すように調整できます。


別の例はあごです


骨はすべて顔をつまむために使用されますが、表情のアニメーションはどうですか?


モデルリソースの仕様を分析すると、モーフアニメーションが多数あることがわかります。言い換えると、HSの頭の骨はすべて顔をつまむために使用され、表情のアニメーションはMorphTargetsによって駆動されます。

そうすると、体はMorphTargetsを使って動きをすることができなくなりますよね?


モデルリソースを分析すると、MorphTargetの数が0であり、ボーンの数が以前の経験値を超えていることがわかります。


スキン情報を見ると、頂点に影響を与えるすべてのボーンに「_s_」という名前が付けられており、それらの親ボーンは「_s_」のない同じ名前のボーンであることがわかります。言い換えると、HSボディスケルトンでは、親のボーンがアニメーションを担当し、子のボーンがスキニングを担当します。

ゲーム内の女性キャラクターの顔には、67の調整パラメーターがあります。


女性キャラクターの体には34の調整パラメーターがあり、そのうち2つは物理パラメーターであり、骨とは関係ありません。


これらのスライダーがボーンに対応できるかどうかを見てみましょう。


「鼻全体を上下に」の場合、実際にはNoseBaseのY値を調整するだけでよく、スライダーを調整するだけです。最大値と最小値の間の線形補間


「眉角Z軸」の調整については、現時点で1本のボーンのみを調整することは正しくありません。対称である必要があります。言い換えれば、一部の調整項目では、2つの対称ボーンを同時に調整する必要があります


「眉の左右の位置」については、2つの端点を直線で補間すると、顔の三角形と交差しやすくなります。したがって、ここでの補間パスには、需要を満たすことができない最大値と最小値しかありませんが、曲線に従う必要があります位置補間を実行し、回転補間で顔の法線方向に適合させます。言い換えると、調整項目の補間は、カーブ(または複数のキーフレーム)に基づく場合があり、同時にボーントランスフォームの複数のコンポーネントに影響を与える可能性があります。


目のサイズの調整は最も複雑で、合計6つの骨に影響します。言い換えると、1つの調整項目で複数のボーンに対応できます

要約すると、顔の形(または体の形)の調整の原則は次のとおりです。

  • 基本的に、ボーンのローカル変換(平行移動、回転、スケール)を変更します
  • ローカル変換の1つのコンポーネント(または複数)のみを一度に変更します:Tx / Ty / Tz / Rx / Ry / Rz / Sx / Sy / Sz
  • スライダーを使用して、プリセット調整範囲間を補間します
  • 補間は必ずしも線形ではなく、複数のキーフレームが存在する場合があります
  • 各調整項目は、複数のボーンに対応する場合があります

これを指針として使用して、ILSpyを使用してHSの逆解析を実行し続け、最後にスケルトンの構成データを見つけます。

1つ目は骨分類表です。


  • 最初の列、カテゴリ番号:各番号はUIのスライダーを表します。繰り返される数字は複数の骨を表します
  • 列2、骨の名前
  • 列3〜11、変換マスク:ボーンローカル変換のどのコンポーネントが調整されるかを表します。たとえば、000000100はSxのみが影響を受けることを表します。つまり、X軸のみがスケーリングされます。

2つ目は、骨調整キーフレームテーブルです。


  • 列1:骨の名前
  • 列2〜N:キーフレームデータ。各フレームは9つのフロートで、これはたまたま変換であり、合計25フレームです。

Iエージェンシーのピン留めシステムの中核は、この2つの表のデータであると言えます。これは、長年にわたってゲームを固定してきた彼らの蓄積された経験です。また、新しいスケルトンのセットが作成されるたびに再構築することを躊躇するのもこのためです。データのバージョンを調整した後、結果として、ゲームのスケルトンがテーブルと一致しません。


ゲーム内のスケルトンは、番号であろうとネーミングであろうと、テーブルと一致していません。では、これらの間のマッピングはどうですか?


それはハードコーディングされていることが判明し、それは本当に人々をクラッシュさせます...さて、ピンチ全体のコアロジックは明確です:

  1. ボーン分類テーブルに従ってすべての調整スライダーを生成し、プリセットファイルからデフォルトのスライダーセットをロードします
  2. スライダーの値が変更された場合は、分類テーブルをチェックしてボーン名(複数の場合もあります)を取得し、ボーン名に従ってキーフレームテーブルをチェックしてキーフレームセットを取得し、スライダーの値に従ってローカル変換を補間します
  3. コードロジックを使用して、古い変換データを新しいスケルトンで使用できるボーン変換に変換します
  4. すべてのボーン変換をモデルに更新します

UE4でPoseableMeshを使用して再現してみてください。効果は悪くありません。


PoseableMeshの問題は、アニメーションと互換性がないことです。そのため、SkeletalMeshのBoneTransformsを変更する場合は、AnimationBlueprintにカスタムAnimNodeのみを実装できます。


アニメーションと素材を添付すると、効果が大幅に向上します。



(それを覆う服をランダムに見つけます)


最後に、ちなみに、人をつまむ以外のことです。キャラクターのカスタマイズには、着替えるよりも人をつまむ方がいいからです。


衣服のリソースを分析すると、学ぶ価値のある2つのポイントを見つけることができます。

  • 衣服の各部分には、隠された三角形を取り除く裸の型が装備されています。一方では、描画パフォーマンスを向上させることができ、他方では、衣服と肌の2つの三角形の散在を回避することができます。
  • スカート/マント/ロングガウンなどはすべて同じ8つの物理的なボーンを共有します。これは、比較的伝統的な布のシミュレーション方法です。


ペンダントはほぼStaticMeshで、多くても物理的な骨があり、スケルトンの吊り下げポイントに直接吊り下げられており、体型と一緒に変形することができます。


目のメッシュは少し拡大し、多くのレイヤーに分割されており、涙のパフォーマンスに使用されるメッシュも3つあります。より多くの材料で、置き換えることができるより多くのスタイルが自然にあります:


髪は前、中、後ろの3つの部分に分かれています。各パーツは、非表示にすることも、個別に交換することもできます。多数のモデルリソースがあるため、MODのサポートは言うまでもなく、さまざまなヘアスタイルに実際に一致させることができます。

他の同様の肌/しわ/アイシャドウ/チーク/リップグロス/タトゥー/ほくろ/サンマーク/ネイルなど。これらのほとんどは、技術的な複雑さをあまり伴わずにテクスチャが変更されていますが、個性を大幅に高めることができる機能です。


GPA分析により、これらの重ねられたレイヤーには、実行時に独立したテクスチャがないことがわかります。


したがって、デカール方式では描画されませんが、スキンマップと混合されます。