ハースストーンのようにアニメーションカードグラフィックスを作成するにはどうすればよいですか?


9

ゲームハースストーンには、アニメーション画像が描かれたカードがあります。いくつかの例:

  1. http://www.hearthhead.com/card=281/argent-commander
  2. http://www.hearthhead.com/card=469/blood-imp

アニメーションは複数の効果で構成されているようです:

  • パーティクルシステム。
  • スプライトのフェードイン/アウト/回転
  • シンプルなスクロールテクスチャ
  • 例1のケープとヘアで非常に明らかな歪み効果。
  • 渦巻く煙の効果、例1のライト、例2の緑/紫のグロー。

最初の3つの要素は取るに足らないものです。知りたいのは、最後の2つをどのように実行できるかです。これはゲームでリアルタイムで行うこともできますか、それとも事前にレンダリングされたアニメーションですか?


1
カードに再生されている。そのおそらく事前記録アニメーション...
グリムショー

レンダリングではなく、PhotoshopまたはAfterEffectsのように見えるgraphicdesign.stackexchange.com cosでより良い可能性があるかもしれません。
クロムスター2014

1
質問の移行に同意するかどうかはわかりませんが、@ Appeltaartのフォローアップの質問があります。(1)アートの作成方法に興味があるか、アートをレンダリングするコードに興味がありますか?(2)ブラウザゲームでこれをどのように実現できるかを具体的に質問していますか?

私が最も興味を持っているのは、リアルタイムレンダリングでこれらの効果を実現できるかどうか、そしてどのように実現できるかです。そのため、コードに最も興味があります。コンセンサスは、ハースストーン自体が事前に記録されたアニメーションを使用していることです。2番目の質問については、これをブラウザーゲームに実装するのではなく、iOSに実装するつもりです。
Appeltaart 2014

回答:


7

関連性があるかどうかはわかりませんが、ダグの答えは正しいです

私が追加したかったのは、私がアニメーションを同じアセットを使用してゲーム内で構築したとおりにアニメーションを正確に再作成したことです。ここを見てください

マグニ

precision highp float;

uniform float uTime;
uniform sampler2D uSampler0;
uniform sampler2D uSampler1;
uniform sampler2D uSampler2;
uniform sampler2D uSampler3;
uniform sampler2D uSampler4;
uniform sampler2D uSampler5;
varying vec2 texCoords;

void main(void) {
  float t = uTime;
  vec3 mask = texture2D(uSampler1,texCoords).rgb;
  vec4 img = texture2D(uSampler0,texCoords);
  img.rg*=1.1;
  vec2 flow = texture2D(uSampler3,texCoords).gr;
  flow.y+=t*3.;
  vec4 plas = texture2D(uSampler2,flow*1.2) * mask.r;
  plas *= 15.5;
  plas *= vec4(0.239, 0.224,0.488,1.);
  vec2 ct = texCoords;
  ct.y -=t*0.5;
  vec4 clouds = texture2D(uSampler4,ct*2.);
  float clouds_a = clouds.a;
  clouds *= 4.5;
  clouds *= vec4(0.275,0.23,0.161,1.);
  clouds_a *= mask.b;
  img += clouds * mask.b;
  img += plas * mask.r ;
  img += (sin(t*15.)+1.) * mask.g * vec4(0.239, 0.224,0.488,1.)*2.;
  ct.x += t * 0.5;
  vec4 clouds_overall = texture2D(uSampler5,ct  * 0.5);
  clouds_overall *= vec4(0.275,0.23,0.161,1.);
  gl_FragColor = img +clouds_overall;
}

メディフ

precision highp float;

uniform float uTime;
uniform sampler2D uSampler0;
uniform sampler2D uSampler1;
uniform sampler2D uSampler2;
uniform sampler2D uSampler3;
uniform sampler2D uSampler4;
uniform sampler2D uSampler5;
varying vec2 texCoords;

void main(void) {
  float t = uTime;
  vec2 tc = texCoords;
  tc.x-=t*2.;
  vec4 mask = texture2D(uSampler1,texCoords);
  float bump = texture2D(uSampler4,tc*0.5).r; 
  vec4 img = texture2D(uSampler0,vec2(texCoords.x,texCoords.y+bump* 0.055 * mask.g));
  tc = texCoords;
  tc.x-=0.05;
  tc.y+= 0.05;
  vec2 flow = texture2D(uSampler3,tc).rg;
  flow.y+=t;
  flow.y*=2.;
  vec4 plasma = texture2D(uSampler2,flow*1.5);
  plasma.rgb *= vec3(0.52,0.26,0.54);
  plasma *= 3.;
  flow = texture2D(uSampler5,texCoords).rg;
  flow.g+=t;
  vec4 plasma2 = texture2D(uSampler2,flow);
  plasma2 *= 4.;
  plasma2.rgb *= vec3(0.52,0.26,0.54);
  gl_FragColor =img+plasma*mask.r+bump*mask.a*0.35+plasma2*mask.b;
}

これはまさに私が探していたものです、ありがとう!このテクニックをどこで学びましたか、それは(プラズマ?)と呼ばれ、それに関するリソース(本/記事)はありますか?
Appeltaart 2015

2
私は実際に自分でそれを理解しました。これは3Dレンダリングで頂点をモーフィングすることに似ていますが、代わりにピクセルを直接操作して遊んでいます。いくつかの異なるテクニックがプレイされていますが、それらのほとんどは基本的なものです。あなたが探しているものはDisplacement Mappingと呼ばれます。これは、テクスチャを使用して頂点を移動/置換することとして知られていますが、ここではテクスチャを使用して風の効果を得るために別のテクスチャを置き換えます。
Daniel Mendel

ねえダン!使用した元のアセットをどこかに投稿していますか?デモリンクは現在非アクティブであり、ウェイバックマシンは画像をキャッシュしていないようです。私はかなり長い間あなたの答えをブックマークしてきましたが、これを研究するために時間を費やしたことはありません。
Brandon Silva

わっ!httrackを使ってファイルを保存しました。それらを見つけた!あなたの許可を得て、私はそれらをどこかに投稿します。または、ファイルがなくなったらファイルを渡し、リポジトリなどに保存できます。
Brandon Silva

@BrandonSilvaはい、投稿できます。それは素晴らしいことです
Daniel Mendel

4

いくつかのアイデアが思い浮かび、それらの実装はエンジン、ツール、そして最終的には作業とコンテンツのパイプラインに完全に依存します。

スプライトアニメーション

  1. PhotoshopやAfter Effectsなどのツールを使用してアニメーションを作成する
  2. フレームごとにアトラス(スプライトシート)にレンダリングする
  3. コードでアニメーションを適用する
  4. 必要に応じて、適切なマスキングまたは透明な背景を使用して、その上にカードレイアウトをレンダリングします。

ビデオアニメーション

  1. PhotoshopやAfter Effectsなどのツールを使用してアニメーションを作成する
  2. そのビデオをゲームエンジンで読み取り可能な形式にエクスポートする
  3. コードでアニメーションを再生する
  4. 必要に応じて、適切なマスキングまたは透明な背景を使用して、ビデオの上にカードレイアウトをレンダリングします

エンジン内アニメーション

  1. Photoshopなどのツールを使用してアニメーションのすべてのアセットを作成する
  2. 必要なすべてのアセットを使用して、エンジン内にカードモデルを作成します
  3. カスタムアニメーションエディターを使用してエンジンを使用してアニメーション化し、保存します
  4. 必要に応じてコードでアニメーションを再生する

これらは、私が知っていて、これまでに使用した3種類のアニメーションです。それぞれに長所と短所があり、この特定のケースでは、GPUにあまり負荷がかからないため、私はスプライトとビデオアニメーションに傾倒しています。

このような場合、最も簡単なアプローチはおそらく正しいアプローチです。


1
  • そのための1つの方法は、テクスチャの代わりにビデオを使用することです。そのビデオは事前に準備する必要があり、ループする必要があります。

  • もう1つの方法は、「キャラクタ、パーティクル、ケープの移動」シーン全体をバッファにレンダリングして、後でフレームレンダリングでテクスチャの代わりに使用することです。

3Dエンジンでこれらの2つのソリューションを実現する方法についての経験はありませんが、2Dエンジンでは両方が可能だと思います(たとえば、MOAIでこれを機能させることができると思います)。


1

4と5の両方は、領域上でテクスチャをUVスクロールすることによって行われます。おそらく、(静的な方法で)少し歪んだカード上にメッシュを配置します。ブラッドインプには、最初のテクスチャを倍増させ、UVスクロールしない2番目のテクスチャもあるようです。

全体として、それらは高価な効果ではありません。彼らは一見しただけでは良くありません。


4&5とは何ですか?
Vaillancourt

「渦巻く煙の効果、例1のライトと例2の緑/紫のグロー」。ディストーションエフェクトは、頂点が移動する既定のアニメーションか、実行時に頂点を変更する手続き型のアニメーションのどちらかだと思います。または、2番目のUVスクロールテクスチャによって導入されたテクスチャサンプルバイアスを持つシェーダーである可能性もあります。
Doug

0

ほぼすべての効果は、Spineなどの2D骨格アニメーションツールで実現できます。スプライトは基本的に2Dメッシュ上のテクスチャです。次に、メッシュを変換して岬を動かし
ます。そのような効果の例については、デモリールを確認してください。http://esotericsoftware.com/spine-in-depth#Features最も一般的なengines / languagesのランタイムがあります。同様のツールがSpriterです。http://www.brashmonkey.com

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.