ゴマちゃんフロンティア

気まぐれと勢いで作るUnityゲーム開発日記です。

【Unity】パーティクルシステムのSkinned Mesh Rendererについて

time 2016/09/10

というわけで、Unity5.3 からパーティクルシステム (Shuriken) の Shape に「Skinned Mesh Renderer」が加わったそうです!
ちょっと気になったので、どんな感じの機能か使ってみました!

パーティクル設定

当然ですが、「Skinned Mesh Renderer」が付いたオブジェクトが必要です。
3Dモデルをインポートすればメッシュに付いてくるので、適当な自作キャラクターの体を使います。

shot2ss20160907233803185

シーン内の Skinned Mesh Renderer を指定すると、パーティクル本体をどこに配置しても、指定したメッシュに合わせてレンダリングされます。
故に空オブジェクト内に整理して置いたり、キャラクターの子オブジェクトにしても問題ないようです。
他にもメッシュからの生成位置(オフセット)を調節したり、マテリアルの色をメッシュに合わせたりできます。

shot2ss20160908001214777

この状態で再生すると、上のようにキャラクターのメッシュに合わせてパーティクルが生成されます。
体からオーラが出ているような感じですね。
「Start Speed」や「Color Over Lifetime」をいじるともっとそれっぽくなります。

キャラクターのメッシュを分けている場合、その分だけパーティクルを作成・設定しておく必要があります。
画像のマリンパも「頭」「上半身」「下半身」と無駄に分かれていたりします。

何が良いかと言えば、「アニメーションの動きに合わせてパーティクルを出せる」ことでしょうか。
今までは固定のメッシュに対してレンダリングするのが限界だったので猶更ですね。
「ダッシュ中にキャラクターの形に合わせてエフェクトを出す」といったことも簡単にできるようになるかも。

いじって分かったこと

「アニメーションの動きに合わせてパーティクルを出せる」と書きましたが、その時点のメッシュの位置に合わせて生成するだけです。
生成後もメッシュに合わせて追従してくれる・・・なんてことはありません。
「Simulation Space」を Local にするとオブジェクト自体の移動には付いてきてくれますが、メッシュの移動には付いてきてくれません。
「アニメーションに合わせてリアルタイムで動かしたい」というケースでは不向きかと思われます。

また、流石に Cloth コンポーネント適用時の動きには対応してくれないようです。

shot2ss20160907232506900

マント (赤い部分) に Cloth を追加し、軽く動かした状態でパーティクルを出してみましたが、(分かりにくいですが) SkinnedMeshRenderer 元々の位置にレンダリングされます。
Cloth の動きに合わせてパーティクルを出すのは大変そうなので、こればかりはしょうがない部分でしょうか。

という点を踏まえると、使い道がありそうでないかもしれません。
手持ちの武器を光らせるのに手っ取り早いかなーと思いきや、パーティクルが追従してくれないので微妙でした。

応用例

「生成後はアニメーションの動きに合わせて移動しない」ことから、アニメーション中に断続的に生成すると残像っぽいエフェクトになります。
これを高速で動くオブジェクトに適用すると面白そう。

shot2ss20160910201151286

「Duration」と「Start Lifetime」の値を短めに調節します。
短時間にドバッとパーティクルを出す場合、Rate を0にして Bursts を設定するといい感じです。
「Simulation Space」は World に設定。
色やサイズ、スピード等はお好みで。

20160910_01

自分のキャラは小さめなのであまり実感はありませんが、頭身の高い人型ならもっと見栄えはよくなるかも。
もっとサイズやスピードを上げても良さそうですね。

まとめ

そんなわけで、パーティクルシステムの「Skinned Mesh Renderer」を試してみました!
ネタがないときはこんな感じで「Unityの気になった機能」を調べてみるのもいいかもしれません。

【2018/01/09 追記】
記事中は「Emission」にBurstsを指定していますが、これを「Rate over Distance」を指定するとより滑らかに動きます。
ただし移動しないとパーティクルが生成されなくなります。

【Unity】パーティクルシステムEmissionモジュールの「Rate over Distance」について

スポンサーリンク

コメント

  • はじめまして。
    Unity初心者で、こちらの記事のように残像のようなエフェクトをつけたくて
    ブログを拝見しておりました、よしこと申します。

    記事のようにInspector上で設定をして、実行してみたのですが
    パーティクルが光ってオブジェクトの近くを照らすだけで
    オーラがかかったようには見えておりません。
    (すみません、本当は動画等も撮ったのですが、こちらだと貼れなかったため
     文字だけの表現でわかりづらく申し訳ありません。)

    何かInspector上以外の設定もいじる必要があるのでしょうか?

    ———
    Windows 10
    Unityのバージョン:Unity 2017.2.0f3 Personal

    by よしこ €2018年1月9日 4:28 PM

    • よしこさん
      コメントありがとうございます。

      1つ古い 2017.1.0f3 で試してみましたが、本記事通りに動作するようです。
      画像以外のパラメータはMaterialを変更していますが、DefaultParticleを使用しても問題ないことを確認しています。
      注意点として、対象のモデルが複数オブジェクトから成り立っている場合、そのオブジェクトごとにパーティクルを追加し、各々のメッシュを「Skinned Mesh Renderer」を指定する必要があります。
      一度Cubeのような単純なモデルをインポートしてパーティクルを設定し、原因を切り分けていくのが確実かと思われます。
      曖昧な回答となってしまい申し訳ありません。

      by riberunn €2018年1月9日 9:38 PM

  • 早速のご返信、ありがとうございます!

    色々いじくっていたら、できるようになりました。
    (すみません、結局原因が何だったのかお伝えできずで…。)

    Blenderも触っているので、ブログとても参考にしています。
    また何か疑問があったら質問させて頂けますと幸いです。

    本当にありがとうございました。

    by よしこ €2018年1月10日 12:17 PM

down

コメントする



ツイッター