tanaka's Programming Memo

プログラミングについてのメモ。

メッシュを変形するDeformを使ってみる

なんか凄いのがMITライセンスで公開されたのを知って、取り急ぎ使い方をば。メッシュを変形させるライブラリです。以下のようなことができます。

f:id:am1tanaka:20190406160924g:plain
Twist Deform

github.com

沢山種類があるので、詳しくは上記のGitHubリポジトリーで動画が見れます。

目次

要件

Unity2018.3以降が必要です。

インストール方法

依存関係を解決する必要があるので、リポジトリーのファイルをそのままプロジェクトに突っ込むだけでは動きません。以下のインストール手順に従います。

Deform/Installation.md at master · keenanwoodall/Deform · GitHub

  • Unityを閉じておきます
  • 組み込みたい2018.3以降のUnityのプロジェクトのPackagesフォルダーをエクスプローラーなどで開きます

f:id:am1tanaka:20190406161050p:plain
Packagesフォルダー

  • manifest.jsonを何らかのエディターで開きます

f:id:am1tanaka:20190406161103p:plain
manifest.jsonを開く

  • すでに書かれている部分はそのままにして、 "dependencies": {の下に以下の行を追加します
// :
"com.beans.deform": "https://github.com/keenanwoodall/Deform.git",

f:id:am1tanaka:20190406161121p:plain
dependenciesを追加

  • 上書き保存してエディターを閉じます

以上できたら、Unityを起動してプロジェクトを開きます。そうすると、自動的に依存関係も含めてDeformがインストールされます。

原文には、ZIPをダウンロードして組み込む手順も掲載されています。

変形させる

以下を参考に、Twistでキューブ(Cube)をねじってみます。

Deform/GettingStarted.md at master · keenanwoodall/Deform · GitHub

ねじるためのCubeを作成する

変形のための頂点が必要なので、通常のGame Objectから作成するCubeだとうまくいきません。Deformがそれ用のCubeを作ってくれますのでそれを使います

  • ToolメニューからDeform > Creatorを選択します

f:id:am1tanaka:20190406161220p:plain
Creatorウィンドウを開く

  • Creatorウィンドウが開きますので、Create Deformableボタンをクリックします

f:id:am1tanaka:20190406161255p:plain
Deformableの作成

Wireframeを表示してみると、以下のように1辺が16分割された立方体であることが確認できます。

f:id:am1tanaka:20190406161315p:plain
作成されたCubeの確認

ちなみに、普通に作ったCubeは以下の通りなので、辺の途中がねじれないのでうまくDeformできません。

f:id:am1tanaka:20190406161327p:plain
標準のCube。これだと複雑な変形ができない

  • Hierarchyウィンドウで、作成したDeformable Objectをクリックして選択したら、CreatorウィンドウのTwistボタンをクリックします

f:id:am1tanaka:20190406161421p:plain
Twistを追加

以上で、TwistDeformerが設定されました。

ネジってみる

  • 作成したCubeの子供に追加されたTwistオブジェクトを選択します
  • Cubeの上下にオレンジ色の円柱状のハンドルが表示されるので、それをドラッグするとCubeがねじれます!

f:id:am1tanaka:20190406161500p:plain
ねじる!

  • Twistの座標や回転、大きさを変化させると、ねじれ方が変わります

f:id:am1tanaka:20190406160924g:plain
Twist Deform

Cube以外のメッシュを変形させたい場合

既存のモデルに適用したい場合は、そのモデルを選択して、CreatorウィンドウのCreate DeformableボタンをクリックすればOKです。あとの作業は同じです。

スクリプトから使う

利用したいコードの先頭に以下を追加します。

using Deform;

Twistを制御したい場合は、TwistDeformerインスタンスInspectorGetComponent<TwistDeformer>()で取得して、StartAngleEndAngleプロパティーに値を設定すれば動きます。

using UnityEngine;
using Deform;

public class TwistTest : MonoBehaviour
{
    TwistDeformer twistDeformer;
    float now = 0;

    private void Awake()
    {
        twistDeformer = GetComponent<TwistDeformer>();
    }

    void Update()
    {
        now = Mathf.Repeat(now + Time.deltaTime * 360f, 360f);
        twistDeformer.StartAngle = now;
        twistDeformer.EndAngle = -now;
    }
}

上記のようなスクリプトを作成してTwistオブジェクトにアタッチすると自動的にねじれます。

詳細は...

英語ですが、以下の動画で操作が分かります。控えめに言って凄いです。

www.youtube.com

関連URL

github.com