ゲームエフェクトデザイナーのブログ (新)

レポート記事とかUE4のマテリアルとか。C#とかも触ったり。

"「デビルメイクライ5」におけるVFX解説"の感想 | Thoughts of "the Description of VFX on the 'Devil May Cry 5'"

今年の9月にカプコンオープンカンファレンスが東京と大阪で開催されました。

CAPCOM Open Conference was held in Tokyo and Osaka last September.

その際の講演の動画が先日公開されました!
下記URL先から視聴できます。

Then, the videos were public recently!
Please check the URL below, so you can watch them.

忘れないうちに "「デビルメイクライ5」におけるVFX解説" で気になった部分を記事にしておきたいと思います。
今回は英語も頑張って書いてみました。

Before I forget, I wrote this post about "the Description of VFX on the "Devil May Cry 5" that I was interested in, and I also tried hard to write in English.

ちなみにカプコンオープンカンファレンスは全てのセッションが写真撮影とSNSへの投稿どころかビデオ撮影でさえもOKでした。
なので、いくつか動画中のスライドの画像を掲載させていただいています。

By the way, at every presentation of the conference, they allowed not only taking photos and posting to SNS but also taking videos.
So I've posted some slide picture from this video.

講演者はプロダクション部VFXアーティストの相曽さんです。

Speaker is Mr. AISO who is responsible for VFX in the production department.

まず最初にDMC5のエフェクトのコンセプトの話があり、次に"Vertex Animation Texture(VAT)"を使用した液体表現について紹介があります。

First, he talked about the concept of DMC5's VFX.
Next, he talked about the depiction of realtime fluids using "Vertex Animation Textures(VAT)" of fluids.

頂点アニメーションの導入メリットとして「スローなどの時間可変対応がしやすい」と挙げられていますが、流体シミュレーションで利用する場合、毎フレーム頂点IDが変動してしまうことについても触れられています(5:03~)。

He said "it is easy to deal with changing speed when game speed becomes slow" as one of the merit of using VAT.
However, he also refers to changing the indices of vertices per frame in the case of fluids(at 5:03~).

 

●Shaderで解決
"Solved by shader"

f:id:moko_03_25:20191104194727j:plain

その解決法として、シェーダ内でメッシュのノーマル方向にノーマルマップを投影しているということです。
つまり毎フレーム分のノーマルはテクスチャにベイクしているので、そのノーマルに合わせて3方向(6方向?)から凹凸のあるノーマルマップを投影してブレンドしている感じでしょうか。

As one solution, a normal map is projected along the mesh's normal in a shader.
There is a texture that is baked mesh's normal per frame.
So I think a bumpy normal map is projected from 3 or 6 directions with referencing to that normal direction of the mesh.

ゲーム中では、死んだ瞬間のポーズと溶けるアニメーションの開始フレームのポーズが一致していないのでフレームが飛んだみたいに見えることがあってちょっぴり残念ですが、溶けていく感じがとても良く、流体のVATがとても大きな効果を発揮しているのが伺えました。

In this game, it's a bit disappointing that seems to be skipped frames because the pose of death and the pose of the first frame of the melting body does not match.
However, I feel that melting is so good, and VAT of fluids displays working so much.

 

●EffectEditorと連動
"Linking with the effect editor"

f:id:moko_03_25:20191104194731j:plain

まず装備によって時間がスローになるシステムがあること、間欠泉のような表現が登場することから、エフェクトエディタでVATをメッシュパーティクルとして扱えるようにしたという解説があります。
ゲームの再生速度に合わせてエフェクトの再生速度も可変するようにしているのだと思いますが、ここでは「パーツNoを~」と説明されているので、メッシュの連番アニメーション(スライドにはパーツアニメーションと記載されている)が使われているということでしょうか。

First, he talked there is a depiction of geyser, and system of slowing game speed depending on the equipment.
So he said we made the fanction of emitting mesh particles using VAT.
I think... DMC5's effects speed according to the game's speed, and he said "parts number" for the explanation, so it probably uses the animation with consecutive meshes(This page will read "parts animation".).

一点気になったのは、スライド右側の「パターン切り替えとの比較」でパーツアニメが頂点可変ベイクアニメーションと比較されていることです。
その上のスプライトアニメのブレンド有り無しの比較のように「パーツアニメよりVATの方がスロー再生に強いですよ」という説明のように見えるので、「どうやって流体のVATをフレーム補間しているのだろう?」と驚きました。

I have one question.
This page will read on the right "Compared to changing the pattern", and there is comparing the parts animation and baked variable vertex animation.
As the comparing blend animation of sprites and without blend animation above this page, it seems the explanation that VAT is more appropriate at slow speed than the parts animation, so I surprised and I thought "How are the vertices interpolated by VAT(fluids)?".

すでに相曽さんが説明されているようにフレームごとにトポロジだけでなく頂点数自体が変わるため補間は困難という認識です。
どうしたら頂点を補間できるか同僚と話していました。

As Mr. Aiso has already talked about, I'm aware that it's difficult to interpolate because changing the number of vertices and changing the indices of vertices per frame in the case of fluids.
So I talked about this with my co-workers.

結局「きっとスロー時に合わせた長尺のVATを再生速度を可変させているという説明なのだろう」という結論に落ち着きました。
実際どうなのでしょう‥?

In the end, we understood that the explanation is probably just changing animation speed that has many frames for slow speed.
Is it correct?

 

●Shaderによる頂点アニメーションの動き 作例
"Moving of vertex animation by shader | for example"

近年、様々な場面でVATの作例を見かけますが、さすがカプコンさん、絵作りが良いためとても効果的に使用されているように思えます。
この黒いイエローデビルのような敵(かっこいい!)のねじりながら引っ込んだり出てきたりする動きがとても良い感じ。。

Lately, I can see various examples of VAT at various scenes, but that's so CAPCOM, everything has great looks and seems to be used effectually.
This black enemy as a Yellow Devil(that's cool!) moves with twisting motion is so nice.

 

●Shaderで変化を表現
"Depiction of changing by shader"

キャラクター自体にディゾルブのためのマスクテクスチャが用意されていて、非常に凝った変身演出になっていて素敵です!

The main characters have mask textures for dissolving, and the transformation performance is so detailed. It's wonderful!

 

●メッシュエミッターで情報量UP
"Increasing details by mesh emitter"

f:id:moko_03_25:20191104194735j:plain

毎フレームスキニングされるスケルタルメッシュからパーティクルを出しつつさらにディゾルブ用マスクをサンプリングしているというのは非常に重そうですが、パフォーマンス軽減としてキャラクターのLODモデルを使用可能にしているというのは良いアイデアですね!

It seems that processing is so heavy because it is sampling mask textures for dissolving while emitting particles from skeletal mesh skinned per frame.
However, It can decrease that processing by using the LOD model of that character.
It's a great idea!

キャラクターの消滅にきっちりと位置を合わせてパーティクルを発生させたいと誰しも一度は思ったことがあるはず‥!
そしてスライドの敵が消滅する動画からは素晴らしい効果を生んでいる様子が伝わります。

Anyone should think that I want to emit particle from the accurate position on the surface of dissolving character once in my life...!
Then, I felt it works wonderfully by the video of dissolving the enemy on slide.

 

●真魔人化/ゆがみ表現で環境変化を表現
"Transfrome to Gradely Deamon / Depiction of changing environment by distotion"

f:id:moko_03_25:20191104194739j:plain

ここは自分の理解が足りていないのですが、カメラに球体モデルをアタッチして、そのモデルにシーンカラーを歪めたシェーダを適用しているという感じでしょうか。
その際にシーンデプスも参照して指定距離から奥にのみ歪ませている(フェードする幅も持たせている?)感じでしょうか。
勘違いも含まれているかも知れませんが、しかし非常に面白いアイデアですね!

I may have misunderstood, but...
First, they constrain a sphere model to the camera.
Next, they apply the shader that has distorted scene color to that model.
It may refers the scene depth then, and it sistorted only from the specified distance to the back.
(Is there also a specified width for the fading strength of distortion? Is it correct?)
What a really interesting idea!

シーンカラーを歪ませる際に、そのシーンカラーは半透明オブジェクトが描画される前のものなのか後のものなのかが気になりますが、前の場合だとしたら球体モデルの奥にある半透明オブジェクトがシーンカラーには含まれず、球体モデルで隠れてしまいそう。そのあたりはうまくいくような形に落とし込まれてるのでしょうね。

When the scene color is distorted, I want to know which timing is actually, before drawing translucent objects or after.
If it's before that and translucent objects are behind the sphere model, the scene color doesn't include that translucent objects, so the sphere model may hide that translucent objects.
They must have solved the problem, but how have they solved that?

面白いなあと思ったのでUE4で軽く試してみました。

I thought it's so interesting, and I tried it on Unreal Engine 4.

f:id:moko_03_25:20191104194659g:plain

レベルに球体モデルを置いて、マテリアルを適用しました。
カメラから離れたピクセルほど歪みが強くなるようにしています。

I put a sphere model on a level, and apply one material. 
The more distant pixels are from the camera, the distortion increases.

f:id:moko_03_25:20191104194715j:plain

このマテリアルはかなり適当な構成です。

This material is a sloppy structure.

f:id:moko_03_25:20191104194720j:plain

UE4のマテリアルでシーンカラーを利用するにはブレンドモードを半透明にする必要があります。

You need to set "Translucent" to the property "Blend Mode" if you want to use Scene Color on the materials of UE4.

f:id:moko_03_25:20191104194723j:plain

マテリアルインスタンスのパラメータはこのような感じです。

The parameter of the material instance looks like the above picture.

 

●その他Shaderによるゆがみ表現
"Depiction of distortion by other shaders"

f:id:moko_03_25:20191104194744j:plain

かっこいいですね!
さらにVATと組み合わせたならば切られたメッシュがめくれていくようにもできますし、十字のマスクをアニメーションさせても良いですし、色々と応用が効きそうですね。。

It's so cool!
Besides, we can depict gradually flip meshes by using VAT, and we can animate a cross-shaped mask texture. We can probably be widely applicable to various cases by using this technique.

 

●その他Shaderによる物体/環境変化
"Changing the environment/objects by other shaders"

f:id:moko_03_25:20191104194645j:plain

こちらに関してはUnityで同じようなことを試されている方の記事を同僚に教えてもらったのでこちらでも紹介しておきたいと思います。

For this explanation, my co-worker told me a posted article written by one engineer that tried as before.
Please check the URL below.

斬撃跡の幅に合わせた狭い範囲でデカールを投影しているような見た目ですが、それだけではキャラクターの動きに追従しないのでちゃんとUVマッピングする必要がある訳ですね。
なので攻撃がヒットした最初のフレームでベイクして、その後は毎フレームベイクし直す必要は無いので、コストパフォーマンスも良い感じでしょうか?

It looks like a projected decal at narrow width depending on slashed trail by sword.
However, It can't follow the character's moving by only that, so It requires UV mapping properly.
To summary, It bakes at the first frame when hitting an attack, and it doesn't need to bake again after that, so It seems that performance is reasonable.

バイオ2reやバイオ7でも使われていたということなので、3年前にはすでに実践されていた手法のようですね。
(バイオ7ってもうすぐリリースして3年になるのですね‥!時間が経つのが早すぎる。。。)

He talks this technique was also used in "BIOHAZARD 7" and "BIOHAZARD RE:2". In other words, I can say they had already practiced it more than 3 years ago.
(Wow! It's been such a long time since BIOHAZARD 7 released...! Time passes by so quickly...)

 

●Expressionによる効率化
"Improve work efficiency by Expression"

f:id:moko_03_25:20191104194650j:plain

「Extern」についてはモンハンワールドの講演でも登場していましたね。

"Extern" was also explained in the plesentation of "MONSTER HUNTER WORLD".

非常に便利なように思います。
例えばパーティクルの発生範囲を大きくしても、パーティクルの密度が変わらないようにしてあげたりとか、剣の軌跡のようなトレイルの長さに応じてUVのタイリング数を変えてテクスチャの密度が変わらないようにしてあげたりとか、様々な応用が効くと思います。

I think it's so useful.
For example, they can keep a constant density of particles even if the range of emitting particles scales up, and they can keep a constant resolution of texture even if it changes the UV scale of the trail of slash, and so on.
They can apply this to various cases.


カプコンオープンカンファレンスの講演はどれも見所が沢山あり、非常に参考になりました!

All presentation is plenty to see, and really informative!