LoginSignup
41
27

More than 5 years have passed since last update.

NVIDIA Flex for Unity を使ってみた

Last updated at Posted at 2018-12-26

概要

この記事は、Unity #2 Advent Calendar 18日目の記事です。
NVIDIA Flex for Unityを試しに少し触ってみたので、それについて簡単にまとめてみます。

NVIDIA Flexとは

まず、NVIDIA Flexとは、流体・軟体・布等の動きをリアルタイムでシミュレーションするミドルウェアです。
https://developer.nvidia.com/flex#

そして、NVIDIA FleX for Unityは、NVIDIA FlexをUnityで動作させるプラグインです。
(2018/12/18現在、1.0ベータ版となっています)
https://assetstore.unity.com/packages/tools/physics/nvidia-flex-for-unity-1-0-beta-120425

NVIDIA Flexを使ってみる 

今回、NVIDIA Flex for Unityを使って、試しにこんなものを作ってみました。


食べ物のモデルと水の流れを NVIDIA Flexで動かしています。
上記の動画を見てもらうと、ハンバーガーやワッフル等が軟体として動いているのがわかってもらえるかと思います。

食べ物のモデルはAssetStoreにあったものをダウンロードして使用させていただきました。
https://assetstore.unity.com/packages/3d/props/food/3d-bakery-object-17167

ポリゴンモデルを軟体(ソフトボディ)として表示する

では、試しにFlexでポリゴンモデルを軟体として表示してみたいと思います。

AssetStoreからNVIDIA Flexをダウンロードしてインポートし、
食べ物のモデル(3D Bakery Object)をダウンロードしてインポートすると、プロジェクトは以下のようになります。
(これから作成するファイルの置き場として、プロジェクトに FlexBakeryという名前のフォルダを追加しています。)
InitialProject.png

まず、Flexでシミュレーションを行うには、Flex Container というアセットが必要なのでこれを生成します。

Create > Flex > Flex Container
でコンテナを生成します。
FlexContainer.png

※このコンテナにFlexのオブジェクトを登録することで、オブジェクト同士の動きのシミュレーションを行うことができます。1

次に、ハンバーガーのモデルを軟体で出すことにします。

Create > Flex > Flex Soft Asset
で軟体のアセットを生成します。

アセットの名前は SoftAsset_Hamburgerとしておきます。
SoftAsset_Hamburger.png

ハンバーガーのモデル(FBX)は以下のフォルダにあります。
ここでは、Scale Factorの値を0.05として大きさを調整しています。
HamburgerModel_.png

そして、SoftAsset_Hamburgerをインスペクタで見て Boundary Mesh のところに
ハンバーガーのFBXのメッシュ(FBXの1階層下にあるやつ)をドラッグ&ドロップします。
すると、ポリゴンメッシュが、Flexでシミュレーションするための粒子で構成されたモデルに変換されて、インスペクタに表示されます。
DragDrop2__.png

次に、ハンバーガーのモデルをシーンに出すために
Create > Create Empty でシーンに GameObjectを追加して(ここでは名前をHamburgerとしています)、
その GameObjectに Add Componentで FlexSoftActor コンポーネントを付加します。
そして、Container のところにコンテナのアセット(FlexContainer)を、Soft Asset のところにハンバーガーの軟体のアセット(SoftAsset_Hamburger)をそれぞれ指定します。
このとき、DrawParticles のチェックボックスをONにすると、粒子のモデルがシーン上に表示されます。
FlexSoftActor_.png

ハンバーガーのポリゴンモデルを軟体として表示するために、
ハンバーガーの GameObjectに、更に FlexSoftSkinning と、SkinnedMeshRenderer コンポーネントを付加します。

SkinnedMeshRender コンポーネントの Mesh のところにハンバーガーのポリゴンメッシュを、
Materials のところにはハンバーガーのモデルのマテリアルを指定します。

(これでハンバーガーのポリゴンモデルが表示されるようになったので、FlexSoftActor コンポーネントの Draw Particles はOFFにします)
Clipboard03_3.png

この状態で、Unityエディタで Playボタンをクリックして実行すると、ハンバーガーが床に落ちてぽよんと弾むのを見ることができます。

他の食べ物のモデルも同様の手順で追加してみます。
Flex Container は2つ以上作らずに、同じ1つの Flex ContainerをそれぞれのFlexSoftActorのインスペクタに指定するようにしてください。
Clipboard05_.png
ちなみに、Flex Soft AssetCluster Stiffness(剛性、変形しづらさの度合い)の値で、軟体の柔らかさを変えられるので、
食べ物のモデルの種類ごとに、このパラメーターを調整してみるとより良い見た目にすることができます。

流体の表示

蛇口から水が流れ出るような感じで、流体をシーンに出してみることにします。

まず流体の粒子の発生源を作ります。
Create > Flex > Flex Source Asset
でアセットを生成します。

その FlexSourceAssetをインスペクタで見て、Surface Mesh の右端の○ボタンをクリックして、粒子の発生源となるメッシュを選択します。
ここでは Quad 形状のメッシュを選択します。
Clipboard09_2.png
そして、Mesh Tesselation の値で、粒子を発生させる点の数を増やすことができます。
Max Particles はこのメッシュから発生する粒子の最大数です。

ここでは、それぞれのパラメーターの値を(スケールの値も)シーンに合わせて適当に調節しています。
Clipboard11_.png

シーンに GameObjectを追加して、FlexSourceActor コンポーネントと FlexFuidRenderer コンポーネントを付加します。
そして、Container のところに FlexContainerのアセットを、Soft Asset のところに FlexSourceAssetをそれぞれ指定します。
Clipboard14_2.png

FlexSourceActor コンポーネントの Fluid のチェックボックスをONにします。
このパラメーターをONにすることによって、粒子は流体として発生します。

その他に、StartSpeed は粒子の初速を、LifeTimeは粒子が発生してから消えるまでの時間(秒)を表しています。
ここではそれぞれのパラメーターをシーンに合わせて調節しています。
Clipboard15_.png

シーンに流体の発生源を置いたので、これをUnityエディタで実行すると、
この動画のように、軟体のモデルを流体で押し流す動きを作ることができました。


最後に

今回 NVIDIA Flex for Unityを試しに少し使ってみて、軟体や流体の動きを簡単に表示することができて結構楽しかったです。
まだベータ版ということもあってか、処理はかなり重いのですが、そのあたりは今後のバージョンアップに期待したいと思います。

参考にした記事

https://www.youtube.com/watch?v=Fp1SMb3SWoo
https://www.youtube.com/watch?v=2IOXPnbHuvo
https://www.youtube.com/watch?v=VelIt1v0CAY
http://www.asset-sale.net/entry/NVIDIA_FleX_for_Unity_%281_0_BETA%29


  1. (注釈)Flexのコンテナは正確に言うと、Flexで位置計算を行うための粒子のコンテナです。Flexでは剛体・軟体・流体・布等全て粒子から成るモデルで構成されていて、シミュレーションは全て粒子の位置計算によって行われています。軟体の動きは、軟体を構成する粒子のモデルから、粒子の相互作用を計算してスキンメッシュの形状に反映しています。 

41
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
27