Unity│エフェクト制作に必要な要素・機能・組み込みのまとめ

Unityでエフェクトを作るとき、テクスチャの扱いやアニメーションの持ち込み方など、知っておくべきポイントがいくつかあります。この記事では、エフェクト制作で必要になる機能や技術をまとめて解説します。

目次

テクスチャの基本とアトラス化

UVの折りたたみでテクスチャサイズを削減

UVを4つ折りに畳むことで、テクスチャを最小限のサイズに抑えられます。折りたたんだ状態でもUnityでは問題なく表示されます。

テクスチャのアトラス化とは

複数のテクスチャを1枚にまとめることを「アトラス化」と呼びます。

アトラス化のメリット

メッシュレンダラーとパーティクルシステムはドローコールバッチングの対象になります。エフェクトでもマテリアルとテクスチャを統一することで、パフォーマンスが向上します。

注意点

使用頻度の低いテクスチャまでアトラスに含めると、メモリを圧迫します。シーンごとに使い分けましょう。

アトラステクスチャの作り方

同一サイズのテクスチャを並べて1枚にまとめます。たとえば128×128pxのテクスチャ4枚なら、256×256pxの1枚にできます。

Shuriken(パーティクルシステム)への設定方法

  1. Particle SystemのInspectorで「Texture Sheet Animation」にチェック
  2. 「Tiles」に行列の枚数を入力(例:2×2なら X:2, Y:2)
  3. 「Frame Over Time」のカーブをFlatにして、表示したいフレーム番号を設定(左上:0、右上:1、左下:2、右下:3)

頂点カラーとアルファ

頂点カラーを使うと、グレースケールのテクスチャに色を乗せたり、アルファでグラデーションを作ったりできます。

Mayaでの設定手順

  1. ビューポートを「Legacy Default Viewport」に変更(Viewport 2.0だと頂点カラーとテクスチャが同時に表示されない)
  2. Modeling → Mesh Display → Paint Vertex Color Toolで頂点をペイント
  3. 頂点アルファでグラデーションをつける(例:上部を透明にして下から上へフェード)

注意:頂点カラー・アルファのアニメーションはUnityに持ち込めません。

メッシュの変形アニメーション

頂点アニメーションはそのままではUnityに持ち込めません。以下の方法で対応します。

方法説明
ブレンドシェイプFBXで書き出し可能。形状の変形に使える
ボーンアニメーションに変換頂点変形をジョイントの動きに置き換える
スクリプトで制御Unity側でメッシュを動的に変形

ボーンアニメーションへの変換手順(Maya)

  1. メッシュ変形のアニメーションを用意
  2. 変形に追従させたい位置にロケーターを配置
  3. ロケーターとメッシュを選択し、MELコマンド parentToSurface; を実行
  4. ロケーターの位置にジョイントを配置してParent Constraint
  5. Bake Animationを実行
  6. Bind Skinして調整

アルファアニメーション

基本的な設定

UnityのシェーダーをParticles → Additiveなどに設定し、アニメーションをつけます。

モバイル向けの注意

標準のモバイル用シェーダーにはTint Color(アルファ調整)がありません。以下のカスタムシェーダーが参考になります。

Mayaのアルファアニメーションをunityに持ち込む方法

FBXで書き出せるのはTransform、Rotate、Scaleのキー情報のみです。アルファなど他のパラメータは以下の手順で移植します。

Mayaでの作業

  1. シェーダーにアルファアニメーションを作成
  2. アルファのキーフレームを全選択してコピー
  3. Locatorを作成し、Translate Yにペースト(Translate Xは反転する場合があるため避ける)
  4. Graph Editorでキーを全選択し、値のボックスに *=255 を入力して255倍にする(Unityのアルファ値は0-255のため)
  5. FBXとしてエクスポート

Unityでの作業

  1. FBXをインポート
  2. アニメーションクリップ(Take 001)をCtrl+Dで複製
  3. position.yの値を全選択してコピー
  4. マテリアルのアルファ値にペースト

力技ですが、デザイナーでもツールなしで対応できる方法です。

UVスクロール

テクスチャをスクロールさせるにはスクリプトが必要です。

事前準備

  • シームレステクスチャを使用
  • テクスチャのWrap Modeを「Repeat」に設定
  • メッシュのUVが0-1の範囲内に収まっていることを確認

スクリプト

using UnityEngine;

public class UVScroll : MonoBehaviour
{
    [SerializeField] private float scrollSpeedX = 0.1f;
    [SerializeField] private float scrollSpeedY = 0.1f;

    private Renderer targetRenderer;

    void Start()
    {
        targetRenderer = GetComponent<Renderer>();
        targetRenderer.sharedMaterial.SetTextureOffset("_MainTex", Vector2.zero);
    }

    void Update()
    {
        float x = Mathf.Repeat(Time.time * scrollSpeedX, 1);
        float y = Mathf.Repeat(Time.time * scrollSpeedY, 1);
        targetRenderer.sharedMaterial.SetTextureOffset("_MainTex", new Vector2(x, y));
    }
}

スクロールさせたいオブジェクトにアタッチして、scrollSpeedXまたはscrollSpeedYに値を入力します。

ビルボード

常にカメラの方を向くビルボードもスクリプトで実装します。

using UnityEngine;

public class Billboard : MonoBehaviour
{
    public Camera targetCamera;

    void Start()
    {
        if (targetCamera == null)
            targetCamera = Camera.main;
    }

    void Update()
    {
        transform.LookAt(targetCamera.transform.position);
        transform.Rotate(90, 0, 0); // Plane用の補正
    }
}

After Effectsで作ったエフェクトをUnityに組み込む

After Effects(AE)のTrapcode Particularなどで作成したエフェクトをUnityで使う方法です。

手順

AEでの作業

  1. Trapcode Particularなどでエフェクトを作成
  2. タイムリマップで任意のフレーム数に調整
  3. 連番画像として出力
  4. Photoshopなどでスプライトシートにまとめる(例:128×128pxを8枚 → 512×256pxの1枚)

Unityでの作業

  1. Particle Systemを作成
  2. Texture Sheet Animationを有効化し、Tilesに行列数を設定
  3. 再生しながら調整して完成

メリットとデメリット

メリットデメリット
テクスチャ1枚でドローコールを抑えられるAEとTrapcode Particularの習得が必要
AEでリッチなエフェクトを作れる調整時はAEに戻って再出力が必要
エフェクト制作がAEでほぼ完結するテクスチャサイズが大きくなりやすい

まとめ

項目ポイント
テクスチャアトラス化でドローコール削減、ただしメモリとのバランスを考慮
頂点カラーテクスチャの色をカスタマイズできるが、アニメーションは不可
メッシュ変形ブレンドシェイプかボーン変換で対応
アルファアニメFBXでは直接持ち込めないのでTransformに変換して移植
UVスクロールスクリプトで実装、シームレステクスチャが必須
AE連携スプライトシート化してTexture Sheet Animationで再生

エフェクト制作は覚えることが多いですが、一度ワークフローを確立すれば効率よく作業できるようになります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次