YAMADA TAISHI’s diary

ゲームについてとか私の日記とか。このブログのあらゆるコードは好きにどうぞ。利用規約があるものは記事内のGitHubのRepositoryのリンクで貼られていると思うので、そちらを参照ください。

ゲーム"プログラマー"でもエフェクトが作りたい

こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / Twitter )です。
私はゲームプログラマーですが、ゲームを作る上でエフェクトを作りたいと思うことが多々あります。
なぜかというと、演出などを組み込んでいく中、エフェクトがあることで印象が大きく変わることを実感するからです。
しかし、基本的にプログラマーはデザイナーのエフェクトを組み込むだけ。
もう少し自分で作れれば魅力的に出来るのではないかと思ったから今回プログラマー目線で作成してみることにしました。

目次


そもそもここでいうエフェクトとは……?


今回は2Dエフェクトではなく3D VFXで尚且つ、ゲームで使えるものを表します。
ゲームで使えるものなので、ハイポリゴンのシネマティックなエフェクトは含めません。
できればスマホでも使えるような低負荷な物が作れると良いなと思っています。
スマホ向けであれば今はUnityが一番強い&Unityを普段遣いしているのでUnity想定で語ります。

普通エフェクトはどう作るのか?


ゲームのエフェクトは通常Houdini + After Effects + ゲームエンジンのパーティクル機能などで作ります。

3Dメッシュを作りそこにテクスチャを張ってアニメーションさせ、大量に出すことで基本的には成立します。

ツールはそれぞれ
・Houdiniは3Dメッシュの作成
After Effects(以下AE)はメッシュに貼り付けるアニメーションテクスチャやパーティクルエフェクトテクスチャの作成(Houdini上で完結することもある)
ゲームエンジンのバーティクル機能はそれらの表示や挙動の制御
に使います

またこれらを全部やってくれるミドルウェアツールなどもあります。
PopconrnFXやSPARK GEAR、BISHAMON、Effekseerなどなど……。

ツールが高い


ツールが高いです。
学生なら安く使える場合もありますが、私は社会人……
商用として使うならHoudiniはインディライセンスでも年間約3万円
AEは28,776円/年です。

高いッ……!

ミドルウェアツールはどうでしょうか、
PopconrnFX→月約3,594円
SPARK GEAR→法人向けなので個人で買える価格ではないです……。100万
BISHAMON→パーソナルライセンス¥60,000買い切りなのは良心的だが安くはない
Effekseer→無料……!だが、チョットローポリすぎでエフェクトのセンスが古いかも……?工夫次第でなんとかなる?

Effekseer以外は高いッ……!

代替ツール


Houdini の代替ツールはBlenderです。
しかし、Houdiniのようにプロシージャルにモデリングするのは難しいです。
対応するアドオンなどもあるのですが、Blenderが処理負荷に耐えきれずにすぐに落ちてしまうので同じようには使えません。

似たようなエフェクトだけど若干違うエフェクトを作るときにはHoudiniでの作成は重宝します。
Blenderで作る場合はいちいち作る必要があるので大変ですが代替出来なくはないという感じです。

AEの代替ツールは無いです。
しかし、基本的にエフェクトというのはShaderで作成可能な場合が多いです。
というのもエフェクトの表現はノイズベースの表現が多いからです。
我々はプログラマーですのでShaderの書き方を覚えてみるのは良いかも知れません。
UnityならばShaderGraphがありノイズ生成のプログラムも簡単です。

Shaderで書ければ表現出来ますが私個人としてはできればAEは欲しいです。
というのもノイズ生成の処理は正直Shaderとしては軽い処理ではありません。
ですので、どちらかというと連番テクスチャ、テクスチャでのアニメーションで処理してしまえるならソチラが理想ではあります……。

Effekseerを使ってみる


EffekseerはBISHAMONに影響を受けたツール。
OSSで無料で使用可能だ。

effekseer.github.io

私も少し触ってみたが、ぶっちゃけUnityのパーティクルシステム機能に毛が生えた程度に感じた。
3Dモデルも殆ど自前で用意するしかなくちょっと微妙に感じた。
使い込めばちゃんと使えそうだが、正直、サンプルが古いゲームのようでダサいものが多い。

UnityのVFXGraphを使ったほうが良いかもしれない。

NovaShaderを使ってみる


実はサイバーエージェントがUnity用にエフェクトに特化したShaderを公開している。
その名はNovaShader。

developers.cyberagent.co.jp

Unityのパーティクルシステムに特化したシェーダー。
ちょっとしたものならこれで良いかもしれない。

何はともあれ作ってみる……。


とりあえず、色々ツールを調べた所でまずは作ってみることにする。
正直、作ってみないとわからないことが多すぎる。
今回はまずは剣撃エフェクト(Sword Slash Effect)を作成することに。

1.3Dモデルの用意


3Dを用意する。
我々はプログラマーである。
3Dモデラーではない。
頑張って1時間使って3Dモデル作るのもいいとは思うが、
時給換算すると1000円を超える。

3Dエフェクトのモデルはかなり汎用性があり、使い回しが効く。
今回はコチラの3Dモデルを購入させて戴くことにした。

booth.pm

2.テクスチャの用意


多分今回はShaderを使うので必要ない……はず。

3.実際に作ってみる


今回はVFX Graphを触ってみようと思う。
URPで2021.3.15f1を利用する。

まず、VFXGraphをパッケージマネージャーより入れる。

Assetウィンドウより右クリック、Create→Visual Effect→Visual Effect Graph

そうすると新しくエフェクトが作れられる。

ついでに、シェーダーグラフを使えるように設定もイジっておく。
Edit→Prefarences→VisualEffect→Improved Shader Graph Generation

4.なんかいい感じに


正直、現状どれを見ればいいと言うような、まとまった資料はあまりないようです。
私が参考にした資料を貼っておこうと思います。
(細かく解説しようかと思いましたが、チョット面倒でした)

UnityJapanとかの動画
learning.unity3d.jp

Unityのエフェクトの作り方を紹介しているYoutubeチャンネル
www.youtube.com

公式のプリファレンス
docs.unity3d.com

公式サンプル
blog.unity.com

↓炎のShaderはコチラを参考にしました(ちょい無駄処理があるので修正しましたが……)
www.youtube.com

正直UnityJapanの高橋 啓治郎さんの動画さえ見てれば簡単なものは作れる。
後はShaderGraphと同じ感覚で作れる部分が多い。
(動画はみるのに時間がかかるのが玉に瑕か……?)

ちなみに私が作ったエフェクト↓

もっと苦戦するかと思っていましたが意外とすんなり組むことが出来ました。
(強いて言うならCurvesを編集するときにEnterを押すと直で値が入力できると知らなくて途中まで苦戦していたぐらい)
VFX Graphは意外とプログラマーライクでプログラマーShuriken(パーティクルエフェクト)よりコチラのほうが作りやすいかも知れません。

まとめ


ゲームでエフェクトを作るのは大変ですが、最近はゲームエンジン側の機能も充実化しているのを肌で感じることが出来ました。
正直Effekseerも触ったことがあったのですが、今ならVFX Graphを直接触ったほうが早いかも知れません。
UnityにかぎらずUEでもNiagaraというものが使えます。
今後はVFXツールを使わなくて済むようになってきそうですね。
また、UnityではSubGraphというものがあり処理を流用できます。
テンプレートなGraphを揃えておけば今後のゲーム制作に役立つかも知れませんね。

以上、やまだたいしでした。