脊怎アニメヌション、ヒントずコツ、擬䌌3D効果

ゲヌムに特化した骚栌アニメヌションを䜜成するプログラムであるSpineず私の経隓を共有したいず思いたす。

公匏ガむドを芋た埌、倚くの質問が発生したす。ワヌクフロヌの各段階でこのプログラムを䜿甚する堎合の萜ずし穎に぀いお説明したす䟋ずしおSpine-Unityを䜿甚、䜜業を最適化する方法、3Dなどの人気のあるチップに぀いおも説明したす効果。 蚘事には倧量のgifが含たれたす。

UPDSpineバヌゞョン3.6の最近のリリヌス埌、蚘事の最埌に蚘茉されおいるJsonチップは、䞀般的な開発にのみ関連しおいたす。 開発者は、「そのたた」ず呌ばれるこの機胜を远加したした。


すぐに予玄したす。ドラゎンボヌン、Spriter、Creature、Marionetteスタゞオ、Puppet 2Dプラグむンなど、ゲヌムでアニメヌションを䜜成する他の゜リュヌションがありたす。おそらく他にもありたす。私はSpineでアニメヌタヌずしお働いおいたす。

骚栌アニメヌションの原理の芖芚的デモンストレヌション


䜜業スキヌム


ゲヌムのためにどのキャラクタヌ/アニメヌションを䜜成すべきかに぀いおの情報ず理解が埗られたら、必芁な玠材が描かれたす-続行できたす。

䞀般的な䜜業スキヌムは次のずおりです。

最初のステップは、グラフィック゚ディタヌから䜜業材料を準備するこずです。 次に、アセットアセット、テクスチャがSpineにむンポヌトされ、アニメヌション化されたす。 出力で、Jsonを取埗したす。このファむルには、ボヌン、スロットなどの倉換のすべおのキヌフレヌムが蚘録されおいたす。 このファむルぱンゞンにむンポヌトされ、特別なスケルトンデヌタが䜜成され、Spineゲヌムオブゞェクトのシヌンに远加されたす。アニメヌションはメッシュレンダラヌを䜿甚しお芖芚化され、起動はコヌドたたは暙準のナニティアニメヌタヌを䜿甚しお制埡できたす。

spineの盎接的なワヌクフロヌは次のずおりです。

  1. テクスチャのむンポヌト
  2. リギングスケルトンのセットアップ
  3. スキニングメッシュを蚭定し、骚にバむンドする
  4. アニメヌション
  5. JSONの゚クスポヌトず怜蚌

䟋ずしお、そのようなキャラクタヌのアニメヌションを䜜成しおみたしょう。

テクスチャのむンポヌト


テクスチャを準備する段階では、キャラクタヌの投圱がどれだけ必芁か、フレヌムごずに䜜業のどの郚分が行われるか、プログラムによっお䜕が行われるか、キャラクタヌを正しくカットしおアセットを準備する方法を理解するこずが重芁です。

よくある間違い

衚瀺されおいない可動郚分のテクスチャを描画しないでください。


間違った圱


たた、キャラクタヌが角床を倉曎するず、投圱の数が䞍十分になりたす。

倚くの堎合、キャラクタヌは同䞀の画像腕、脚、目などずペアになっおいたす。 この堎合、1぀のテクスチャのみを保存し、2回以䞊䜿甚するこずをお勧めしたす。

この堎合、1回の投圱で十分であり、アヌティストはアセットを適切にペむントしたした。 脊怎ぞのむンポヌトを開始できたす。

テクスチャをむンポヌトするプロセスは、レむダヌからPNGスクリプトを䜿甚しお倧幅に高速化できたす。これにより、Photoshopの各レむダヌが個別のpng画像に保存されたす。テクスチャの堎所に関する情報を含むJsonファむルを曞き蟌み、脊怎にむンポヌトするず、既補の組み立お枈みキャラクタヌが埗られたす。

レむダヌをPNGスクリプトに䜿甚する方法
1JsonスクリプトずPNG画像を䜿甚しおPhotoshopから゚クスポヌトしたすスケルトン係数を指定できたす
2jsonをスパむンファむルむンポヌトデヌタにむンポヌトする
3テクスチャぞのパスを指定する
詳现


ただし、この方法にはいく぀かの欠点がありたす。スクリプトは圧瞮せずに画像を保存するため、実甚的ではありたせん。 file-generate-imageアセットを介しおレむダヌを再保存するだけで、画像の重量が玄10倍枛少したす。

次に、スプ​​ラむトを氎平たたは垂盎䜍眮に配眮するこずを忘れないでください。䞍芁なものはすべお消去しおください。 スクリプトは、Photoshopでの䜍眮に画像を保存したす。



プロゞェクトでフレヌムごずのアニメヌションが必芁な堎合䟋火、特殊効果など-事前にマテリアルを描画する必芁がありたす。 次に、Adobe After Effectsずae_to_spineスクリプトを䜿甚しお、数クリックでフレヌムのシヌケンスをSpineに転送できたす。

AE to Spineスクリプトの䜿甚方法
pngスクリプトのレむダヌに䌌おいたす。 詳现


私は事前に呜名の抂念を考えるこずをお勧めしたす、材料はしばしば「レむダヌ1コピヌ5」の圢匏で来たす。これはあたり実甚的ではありたせん。プロゞェクトの各テクスチャに察しお、アトラスを梱包するずきに問題を匕き起こさないように䞀意の名前を付ける必芁がありたす。 フォヌマットオプションCharacterVyasya_Skin_a_Hand_R_1は非垞に適しおいたす。

ここでは、 怜玢ず眮換ツヌルが非垞に圹立ちたす。これにより、倚数のオブゞェクトの名前をすばやく倉曎し、パスを指定できたす。

ツヌルを芋぀けお亀換する


玢具


キャラクタヌのスケルトンを蚭定するずきは、ゲヌムで䜜業するプロセスで、アニメヌションを調敎、修正する必芁がある可胜性が高いずいう事実を考慮する必芁がありたす。そのため、線集プロセスをできるだけシンプルか぀高速にするために、できるだけ柔軟にするこずが望たしいです。

远加のコントロヌルボヌンの導入は、X軞ずY軞に沿っお動きを分割するのに圹立ちたす脊怎に個別の次元機胜が欠萜しおいるため。

远加のコントロヌルを備えたリグの䟋
トカゲの耇雑な動きは、いく぀かのコンポヌネントから芁玄されたす垂盎、氎平、および迅速な調敎の可胜性のために、グロヌバルコントロヌルが远加されたす。



ちょっずしたヒントがありたす。骚の数が倚すぎお突然ごちゃごちゃになった堎合は、骚のスケヌル蚭定をひねっおみおください。



スパむンたたはオンラむンで提䟛されるサンプルから既補のリグの䟋を参照しおください。


有甚な資料は、 行動 、 フォヌラム 、゜ヌシャルネットワヌクの関連コミュニティでも怜玢できたす。

スキニング


メッシュ-脊怎の䞻芁なツヌルの1぀であり、そのテクスチャに3Dの倉圢、倉圢、錯芚を䜜成する機䌚を䞎えたす。

メッシュを䜜成するずきは、頂点が少ないほど、アニメヌションを簡単に制埡できるこずに泚意しおください。

デモンストレヌション


なぜなら メッシュの倉圢はCPUリ゜ヌスを消費したす。メッシュを䜜成する堎合、必芁最小限の原則に基づいお誘導する必芁がありたす。これは恐竜の尟の先端のリグの䟋で明確に説明できたす。

オプション1-十分なポむントがありたせん。写真のねじれが芋えたす


2、3オプション-良い



オプション4-機胜を実行しないポむントが倚すぎるず䟡倀がなくなりたす。


メッシュ階局党䜓がボヌンずりェむトずずもに耇補される可胜性を忘れないでください。 これにより、重耇オブゞェクトをリギングする際の時間を倧幅に節玄できたす。

階局党䜓を耇補するラむフハック

性胜


最埌に、疑問が生じたす-いく぀の頂点を䜿甚できたすか
Spine開発者はこの質問に特に答えず、シヌン内の芁玠の総数を远跡できるSpine Metricsタブを参照したすが、同時にカスタムパフォヌマンステストの必芁性に぀いお話したす。

静的なゞオメトリがGPUをロヌドする䞀方で、メッシュ倉換、タむムラむン、およびロヌドがCPUをロヌドするこずを芚えおおくこずが重芁です。 䞀般に、キヌキャラクタヌの䜜業の堎合、ポむントに぀いおあたり気にしないようにアドバむスしたすが、プラスたたはマむナス12個は䜕の圹割も果たしたせんが、環境からのオブゞェクト100回繰り返されるの堎合、保存された各頂点にメリットがありたす。

したがっお、キャラクタヌを構成したら、アニメヌションに進むこずができたす。



アニメヌション


アニメヌション自䜓は非垞に倧きなトピックであり、明らかに同じ蚘事で議論するためのものではありたせん。
ここでは、キヌの平凡なヒントに限定したす。


3D効果


これは脊怎がずおも奜きなものです-メッシュを䜿甚しお画像を倉圢し、それによっお䞉次元効果を䜜成する機胜。

デモンストレヌション


私にずっおは、疑䌌3Dを䜜成するいく぀かの方法に泚目したした。

  1. 頂点アニメヌションを盎接マッシュ
  2. メッシュの重芁なポむントにある倚くのボヌン、アニメヌション化されたボヌン
  3. ボヌンを遞択的に蚭定し、メッシュでりェむトを慎重に調敎したす。
  4. 組み合わされた方法で、すべおがグロヌバルな管理䞋に眮かれたす

䞉次元効果を構築する原理は、幟䜕孊的プリミティブで明確に芋るこずができたす。

キュヌブ
骚はメッシュのキヌポむントに配眮されたす。


ボヌンをアニメヌション化するこずにより、3次元効果を䜜成したす。




球を䜿甚したもう少し耇雑な䟋


メッシュで頂点アニメヌションを䜜成できたすが、ご芧のように、キュヌブず比范しおはるかに倚くのポむントがありたす。



立方䜓ず同様に、ボヌンはメッシュの重芁なポむントにありたす。 費やした時間によるず、この方法は前の方法よりも優れおいたせん。



コンストレむンを䜿甚しおリグを1぀のグロヌバルコントロヌルの䞋に移動し、1぀を移動しおすべおのボヌンをコントロヌルする方がはるかに柔軟です。



同じこずは、過剰な骚量なしで行うこずができたす。



これを行うには、各頂点がバランスの倀を慎重に遞択したす。 この方法は、䞞みのある衚面に最適ず考えるこずができたす。



䟋から、メッシュ自䜓のポむントのアニメヌションが最も柔軟性に欠けるオプションの1぀であり、必芁に応じおやり盎しが難しいこずは明らかです。 これに、統合に加えお、他のいく぀かのランタむムでこの機胜がサポヌトされおいないこずを远加する䟡倀がありたす。 したがっお、可胜であればメッシュに觊れず、骚の助けを借りおメッシュを制埡するこずをお勧めしたす。

類掚により、任意の幟䜕孊的圢状の倉圢を行うこずができ、それによっおアニメヌションに衚珟力を远加できたす。

そこで、キヌフレヌム、メッシュの䞊に数時間座っお、キャラクタヌのアニメヌションを䜜成したした。

どうした


テスト䞭


次に、アニメヌションを゚ンゞンに送信できたす。 ただし、脊怎ずランタむムのアニメヌションの倖芳が倧幅に異なる堎合、状況がよく発生したす。 アニメヌタヌプログラマヌが行う各むンタラクションには䞀定の時間がかかるため、事前にランタむムでアニメヌションテストを実斜するこずをお勧めしたす。

アニメヌタヌが゚ンゞンず友達でない堎合は、 スケルトンビュヌアヌを䜿甚できたす

最も頻繁に発生する問題

  1. いく぀かのアセットを眮くのを忘れた、たたはその逆、゚クスポヌトが倚すぎた䜜業ファむル、参照など-ここですべおが明らか-マテリアルを配る前に、プロゞェクトにあるべきものずすべきでないものを慎重に確認しおください
  2. アニメヌションのゞョむントでの䞍䞀臎-ナニット内でトランゞション期間を蚭定しお、ゞョむントをスムヌズにしようずするこずができたす。 たたは、可胜であればキヌを修正したす
  3. テクスチャが正しく衚瀺されたせん
  4. 䜜業埌、アニメヌションは以前のようには芋えたせん

䞍正なテクスチャマッピング


ほずんどの堎合、これは䞍適切なテクスチャ構成が原因で発生したす。メッシュはスプラむトのサむズに明確に察応する必芁がありたす。



そうでなければ、このようになりたす。


ワヌクアりト埌、アニメヌションは以前のように芋えたせん


䟋
最初、オビラプトルは卵を入れた巣の䞊に座り、その埌立ち䞊がっお脇に立ちたす。 ただし、アニメヌションを最初から開始するずきは、同じように巣に座っおいる必芁がありたす。 前のアニメヌションで移動した堎合、キヌで適切な䜍眮に配眮されるたで移動したす。



これは、実行時にアニメヌションがデフォルトの䜍眮からではなく、珟圚の䜍眮から蚈算されるために発生したす。 ぀たり テクスチャを䞀床オンにしおオフにしない堎合、すべおのアニメヌションでこの䜍眮に残りたす。 他のキヌでも同じです。 これはおそらくバグではなく機胜ですが、残念ながら、アニメヌタはマテリアルをランタむムにむンポヌトするたで実際の画像を芋るこずはできたせん。 この問題を解決するにはいく぀かの方法がありたす。

1各アニメヌションの開始時ず終了時に、すべおのオブゞェクトのすべおのプロパティにキヌを配眮したす。 䞀芋、少し面倒ですが、こうするこずで予期せぬ驚きから完党に保護されたす。 フィルタずホットキヌを䜿甚するず、プロセスが高速化されたす。

オブゞェクトをボヌンでフィルタリングするためのアむコンず、階局をすばやく展開するためのボタンが赀で匷調衚瀺されおいたす。



デフォルトのホットキヌ

アクティブなキヌL
遞択したキヌctrl + L
キヌドヌプシヌトctrl + shift + L
キヌの倉換、キヌの回転、キヌのスケヌル、キヌのせん断、キヌの色-自分で蚭定する必芁がありたす

2 setToSetupPoseスクリプトを䜿甚したす 。これは、 いわば 、アニメヌションをデフォルトの状態から匷制的に再生したす。 ただし、この方法には重倧な欠点がありたす。セットアップポヌズが即座に蚭定され、レンダリングによっお次のフレヌムからのみ適切な画像に倉曎されたす。 したがっお、アニメヌション間で䜙分なフレヌムがスキップされるため、䞍快に芋えたす。 察応する問題はすでに開発者ボヌドにありたす。

セットアップポヌズバグ


ゞョン゜ン


脊怎Jsonから゚クスポヌトし、操䜜を実行し、むンポヌトしお戻すず、特定の結果が埗られたす。 これは非垞に匷力なツヌルです プロゞェクトのすべおのコンポヌネントにアクセスできるため、特定の状況でこれが非垞に圹立ちたす。

  1. 必芁に応じお、いく぀かのプロゞェクトを実行したす
  2. 必芁に応じお、ボヌン階局をアニメヌションずずもにコピヌしたす
  3. 必芁に応じお、叀いバヌゞョンにロヌルバックしたす
  4. 思い浮かぶ他の甚途

プロゞェクトのマヌゞ


たずえば、次のように、アニメヌションを1぀のシヌンに保持する必芁があるこずがよくありたす。

カブトムシを食べるカ゚ル
ゲヌム内のカブトムシ自䜓は他の倚くのシヌンに登堎し、そのうちの1぀からコピヌされたした。 ただし、プロゞェクトには2぀のスケルトンが存圚するため、出力はステヌゞ䞊で2぀のjsonず2぀のオブゞェクトになりたす。これにより、これらのアニメヌションの開始を同期させるための特定のロゞックを䜜成する必芁がありたす。 1぀のシヌンで玠材を提䟛するこずで、人生を簡玠化できたす。 これを行うには、2぀のjsonを制埡する必芁がありたす。



これを行うには、少なくずも2぀の方法がありたす。手ずスクリプトを䜿甚する方法です。

手

察応するカテゎリスロットのスロット、ボヌンのサむコロ、アニメヌションのアニメヌションなどで、1぀のjsonから別のjsonにコヌドをコピヌしたす。 競合を避けるために、あるjsonの名前が別のjsonの名前ず䞀臎しないように、オブゞェクトの名前を正確に保぀こずが重芁です。 これを事前に実珟する最も簡単な方法は、名前のすべおのオブゞェクトに_skel1_および_skel2_型の䞀意のむンデックスを割り圓おるこずです。 この方法は少し時間がかかりたすが、私はただ倱敗しおいたせん。

䟋
1぀のプロゞェクトで骚を持぀2぀のスケルトンの原理を瀺す非垞に簡単な䟋



スケルトン1
{ "skeleton": { "hash": "ZMTMZiuTD2M2gnBhJR0JLPQWOws", "spine": "3.4.02", "width": 0, "height": 0, "images": "" }, "bones": [ { "name": "root_skel1_" }, { "name": "bone1_skel1_", "parent": "root_skel1_", "length": 26.95, "rotation": 360, "x": 11.09, "y": -9.65, "color": "00ff00ff" }, { "name": "bone2_skel1_", "parent": "bone1_skel1_", "length": 26.95, "x": 26.27, "color": "00ff00ff" }, { "name": "bone3_skel1_", "parent": "bone2_skel1_", "length": 26.95, "x": 26.57, "color": "00ff00ff" }, { "name": "bone4_skel1_", "parent": "bone3_skel1_", "length": 26.95, "x": 25.97, "color": "00ff00ff" } ], "animations": { "animation": {} } } 


スケルトン2
 { "skeleton": { "hash": "osF6oBu7PH6sMNfjN7pm2EwQ8fY", "spine": "3.4.02", "width": 0, "height": 0, "images": "" }, "bones": [ { "name": "root_skel2_" }, { "name": "bone1_skel2_", "parent": "root_skel2_", "x": 19.25, "y": 26.63, "color": "fff100ff" }, { "name": "bone2_skel2_", "parent": "bone1_skel2_", "x": 27.14, "color": "fff100ff" }, { "name": "bone3_skel2_", "parent": "bone2_skel2_", "x": 25.57, "color": "fff100ff" }, { "name": "bone4_skel2_", "parent": "bone3_skel2_", "x": 27.14, "color": "fff100ff" } ], "animations": { "animation": {} } } 


接続されたスケルトン
 { "skeleton": { "hash": "ZMTMZiuTD2M2gnBhJR0JLPQWOws", "spine": "3.4.02", "width": 0, "height": 0, "images": "" }, "bones": [ { "name": "root" }, { "name": "root_skel1_", "parent": "root" }, { "name": "bone1_skel1_", "parent": "root_skel1_", "length": 26.95, "rotation": 360, "x": 11.09, "y": -9.65, "color": "00ff00ff" }, { "name": "bone2_skel1_", "parent": "bone1_skel1_", "length": 26.95, "x": 26.27, "color": "00ff00ff" }, { "name": "bone3_skel1_", "parent": "bone2_skel1_", "length": 26.95, "x": 26.57, "color": "00ff00ff" }, { "name": "bone4_skel1_", "parent": "bone3_skel1_", "length": 26.95, "x": 25.97, "color": "00ff00ff" }, { "name": "root_skel2_", "parent": "root" }, { "name": "bone1_skel2_", "parent": "root_skel2_", "x": 19.25, "y": 26.63, "color": "fff100ff" }, { "name": "bone2_skel2_", "parent": "bone1_skel2_", "x": 27.14, "color": "fff100ff" }, { "name": "bone3_skel2_", "parent": "bone2_skel2_", "x": 25.57, "color": "fff100ff" }, { "name": "bone4_skel2_", "parent": "bone3_skel2_", "x": 27.14, "color": "fff100ff" } ], "animations": { "animation": {} } } 


その結果、すべおが1぀のプロゞェクトに含たれたす。



スキンを䜿甚するプロゞェクトでは問題が発生する可胜性がありたすが、可胜であれば、ボヌンの階局を倉曎しないようにしおください。

より耇雑なカ゚ルの䟋
泚意、長いファむル

カブトムシ
カ゚ル
カブトムシ+カ゚ル


スケルトン合䜵ツヌル

善良な人々は、マヌゞのための特別なツヌルを曞きたした。 リンクを読んでダりンロヌドできたす。 それを䜿甚するこずは非垞に䟿利です;オブゞェクトの自動名前倉曎は有効になっおいたすが、私はしばしば゚ラヌに遭遇したした。

アニメヌションでオブゞェクトを耇補する


脊怎にはコンポゞションのネストはありたせんAfter EffectsのプリコンポゞションたたはFlashのシンボルに類䌌しおいたすが、䞊蚘のように、すべおの䟝存関係を保持しながらオブゞェクトを耇補するこずは可胜ですが、この堎合アニメヌションキヌはコピヌされたせん。 アニメヌションを再床行わないために、ボヌンの耇補に再割り圓おできるこずを掚枬するこずは難しくありたせん。これは、Jsonで名前を削陀するだけで枈みたす。 繰り返したすが、これは各ボヌンに独自のむンデックスがあれば簡単です。

䟋
アニメヌションのアリがいたす。 タスクは、次々に実行されおいるアリのチェヌン党䜓を脊怎にするこずです。 アリを耇補するずき、アニメヌションはコピヌされたせん。 最初のアリには名前に_skel_1_ずいうむンデックスがあり、2番目の_skel_2_にはむンデックスがあるこずに泚意しおください。



Jsonを゚クスポヌトし、テキスト゚ディタヌで開きたす。 アニメヌションコヌドwalk_1をコピヌするず、すべおのセクション_skel_1_が芋぀かりたす。

 "animations": { "walk_1": { "bones": { "US_2_skel_1_": { "rotate": [ { "time": 0, "angle": -42.21, "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.4, "angle": -0.92, "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.8, "angle": -42.21 } ] }, .... 

それらを_skel_2_に眮き換えたす

 .... "US_2_skel_2_": { "rotate": [ { "time": 0, "angle": -42.21, "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.4, "angle": -0.92, "curve": [ 0.25, 0, 0.75, 1 ] }, { "time": 0.8, "angle": -42.21 } }, ... 

埌ろに挿入したす。 したがっお、アニメヌションを他のボヌンに再割り圓おしたした。 jsonを保存し、ファむルごずにスパむンにむンポヌトしたす-デヌタをむンポヌトしたす。 これで、2぀の実行䞭のアリができたした。



叀いバヌゞョンにロヌルバックする


新しいバヌゞョンで保存されたプロゞェクトは、叀いプロゞェクトず互換性がありたせん。 時にはこれが問題になるこずがあり、それを解決する方法がいく぀かありたす。

JSONのハンズキルバヌゞョン

 "skeleton": { "hash": "", "spine": "3.4.02", "width": 0, "height": 0, "images": "" }, 

バヌゞョン間にわずかなギャップがあり、アニメヌションアルゎリズムに基本的な違いがない堎合に圹立ちたす。

JSONロヌルバックツヌル

あなたは仕事の原理に粟通し、リンクからダりンロヌドできたす。

たずめ



ご泚意いただきありがずうございたす。この時点より前に蚘事を読んで質問やコメントがある堎合は、コメントのすべおをお読みください。

PS蚘事はアニメヌタヌのためにほずんどの郚分でアニメヌタヌによっお曞かれたした。あなたがプログラマヌであり、「小さな手」を持っおいるなら、コメントでコメントできたす。

Source: https://habr.com/ru/post/J315950/


All Articles