Skinned Metaball Builder マニュアル

Skinned Metaball Builder Manual

ストアURL:
https://www.assetstore.unity3d.com/en/#!/content/38054

サポート:

mail : nkdtr2011@gmail.com

twitter : @NKDTR

 

What's new

ver 1.10 リリース(2015/09/17)

-新要素 "IncrementalModeling" モード

 -説明ページ→(http://nkdtr.hatenablog.com/entry/2015/09/19/232628

-"Metaball配置" ショートカットを "Shift+Ctrl(Command)+E"に変更

  (以前の "Shift+Ctrl(Command)+C" が "コンソールを開く" と重複していたため)



1. イントロダクション

 "Skinned Metaball Builder" の紹介とクイックスタートガイド.

 

 

nkdtr.hatenablog.com

 

 

2. リファレンス

 プロパティ、API、メニューコマンド.

 

 

nkdtr.hatenablog.com

 

3. Tips

 Tips.

 

nkdtr.hatenablog.com

 

Skinned Metaball Builder マニュアル -Tips-

Skinned Metaball Builder マニュアル -Tips-

 

Tips. 

 

メタボールの構造を確認する

f:id:nkdtr:20150608180556p:plain

"SkinnedMesh" または "StaticMesh" を非表示にすることで、メタボールの構造が確認できます (Skinnedの場合は骨組みも見えます).

 

StaticからSkinnedへの置き換え (またはその逆)

"SourceRoot"下のGameObjectを別のMetaballSeedへとコピーすることで、メタボール情報が移植されます.

Seedのパラメータについては手動で修正する必要があります.

 

複数のマテリアルを使用する

f:id:nkdtr:20150608183415p:plain

一つのMetaballメッシュは一つのマテリアルしか扱うことができません.

しかし、単純に複数のモデルを組み合わせて使用することはできるでしょう (それらを「融合」させることはできませんが).

 

消してもよいオブジェクト

メッシュを生成後、幾つかのGameObjectやComponentは消去してしまっても問題ありません.

- MetaballSeed(Static/Skinned) component

- SourceRoot GameObject (及びその子GameObject)

- TextureGuide GameObject

- MetaballCellObject component (直にこれを消すよりも、CellObjPrefabをnullに設定しRebuildMeshを行うことを推奨します)

これを行うとメッシュの再編集はできなくなりますが,

このAssetへの依存性をなくすことで公開に適したデータとなります.

 

"CellObjPrefab"の使い方

デフォルトではnullに設定されていますが、

様々な使い方の可能性があります.

- Joint接続の構築 ( "Animation" サンプルシーン内の"Tentacle"を参照してください )

- ボーンを操作するための「ハンドル」として (Skinnedの場合)

- AIのための"waypoint"として ( "Dungeon" のようなアプリケーションにおいて )

 

メッシュの生成に失敗する場合

これは多くの場合、格子のセル数が多すぎるために起ります.

この場合は以下のようなエラーメッセージが表示されます。

"Too many grid cells for building mesh (1168200 > 1000000 ).
Make the area smaller or set larger (MetaballSeedBase.gridSize)."

これを解消するにはメッセージ通りメタボールの領域を縮小するか、

GridSizeパラメータを大きく取ります.

別の手段は、セル数の限界値を上げてしまうことです。

これにはソースコードの以下の部分を書き換えます。

(

    "MetaballBuilder.cs"
    const int _maxGridCellCount = 1000000;

).

セル数が大きすぎる場合、システムのフリーズを招く恐れがあります.

(その限界値はシステムのスペックや状態によります).

 

メッシュがリークしているとログが出る

メッシュを生成後にシーンをセーブする際、以下のようなログが出力されることがあります.

"Cleaning up leaked objects in scene since no game object, component or manager is referencing them
 Mesh  has been leaked (some number) times."

しかし見たところ、実際にリークが起っているわけではいないようです.

 

Skinned Metaball Builder マニュアル -リファレンス-

Skinned Metaball Builder マニュアル -リファレンス-

 

0. メニューコマンド

 

f:id:nkdtr:20150604194340p:plain

 

Save Prefab :

 "MetaballSeed"下に属するGameObjectを選択時のみ有効です.

 選択されているメタボール構造をPrefabとして保存します.

 (Projectビューへのドラッグ&ドロップ (通常のPrefab生成手順)を行った場合, 生成されたPrefabにはメッシュデータが設定されていない状態になります(該当のメッシュデータがAssetではなくシーンに属しているため)).

Save Mesh :

 "MetaballSeed"下に属するGameObjectを選択時のみ有効です.

 メッシュのみをAssetとして保存します.

 メッシュデータはUnityに組み込まれているMeshFilterやMeshColliderにセットして使用できます.

RebuildMesh :

 "MetaballSeed"下に属するGameObjectを選択時のみ有効です.

 メッシュをビルドします.

CreateChild :

 "MetaballNode"コンポーネントの付いたGameObjectを選択時のみ有効です.

選択されたGameObjectの子としてMetaballNodeコンポーネント付きのGameObjectを新たに生成します.

 

1. SkinnedMetaballSeed / StaticMetaballSeed コンポーネント

 メタボールメッシュの生成単位を示すコンポーネントです.

Skinned と Static 二種類の MetaballSeed コンポーネントがあります.

Skinned は Static を兼ねますが、メッシュのビルドにかかるコストが多少大きいです (メモリ使用量及び計算時間).

 

プロパティ

 Prefabを用いた場合 ("Metaball/Prefabs"下に二つのPrefabがあります), メタボールメッシュを生成するには事足りるだけのプロパティがあらかじめ設定されています.

このドキュメントは、プロパティをどう調整すればよいのか知る手掛かりになります.

f:id:nkdtr:20150604160409p:plain

Bone Root :

 ここで設定したGameObjectの下に「スケルトン」データが生成されます.

SkinnedMeshRendererの "RootBone"としても使用されます.

Source Root :

 このGameObjectの下にメタボール情報を定義します.

この下に存在するGameObjectは "MetaballNode"コンポーネントを持つことが想定されています.

 このGameObject以下のいずれかを選択しているとき、ショートカットコマンド "Ctrl(Command) + Shift + C" (create child metaball node)が有効になります.

Cell Obj Prefab :

 メッシュのビルド時に構築される「スケルトン」のノードとして使用されるPrefabです.

 これを差し替えることでオブジェクトの挙動をカスタマイズできます。

 このPrefabには"MetaballCellObject"コンポーネント(またはその拡張)が付加されている必要があります.

 メタボールについて特殊なコントロールが不要な場合は、ここにnullを設定しても問題ありません。

Grid Size :

 格子1マスのサイズ(refer http://en.wikipedia.org/wiki/Marching_cubes for details)です.

 小さい値にすることで「解像度の高い」メッシュが生成されますがコストが上がります。大きい値ではその逆です。

Auto Grid Size (Ver1.02~)

 Grid Size を無視し、Auto Grid Qualityの値に従って自動的に格子サイズを決定します。

Auto Grid Quality (Ver1.02~)

 格子サイズを自動決定するためのパラメータです。

この値が大きいほど解像度の高いメッシュを生成することになります。

UV Project Node :

 テクスチャ座標を決めるためのガイドとなるオブジェクトです.

 どのような形でテクスチャが貼られるかを示す直方体のGizmoが表示されます.

 繰り返さない ("wrap mode"=clamp) テクスチャを使用するとこの挙動がよく分かるはずです.

Power Threshold :

 どの程度の「濃度」で「内部」と見なすかを決める閾値です.

この値が小さいほどより大きな領域が内部と見なされます ( メッシュの見た目が大きくなります ).

Base Radius :

 エディタのためにあります.

MetaballNodeを追加した時、半径のデフォルト値がこの値になります.

B Reverse :

 Trueのとき、メッシュが裏返しで生成されます.

洞窟のようなものを作る時に便利です ("Dungeon" サンプルを参照).

B Use Fixed Bounds :

 Trueのとき、次のプロパティ"FixedBounds"が有効になり,

メタボール計算のための格子が固定されます.

 Falseのとき、格子の境界はメタボール情報に応じて自動計算されます.

 このオプションは、メッシュに「安定性」を求める場合に有効です (用いない場合、格子の境界が変化することでメッシュの頂点座標が小さな影響を受けます).

 ただし、固定された境界の外側にはメッシュが生成されず切り落とされてしまいます.

Fixed Bounds :

 上の"B Use Fixed Bounds"を参照してください.

SkinnedMesh (SkinnedMetaballSeed) :

 生成されたメッシュを受け取るSkinnedMeshRenderer.

MeshFilter (StaticMetaballSeed) :

 生成されたメッシュを受け取るMeshFilter.

 

 

API

void CreateMesh();

 メタボール情報からメッシュを再生成します.

メニューコマンド "Rebuild Mesh"と同等です.

 

Mesh Mesh { get; set; } 

 現在のメッシュデータを取得/設定します.

 

2. Metaball Node コンポーネント

 

 

f:id:nkdtr:20150604203818p:plain

Properties

Base Radius 

 メタボールの半径です.

メタボールの半径はtransformのscaleの影響を受けないことに注意してください.

 

B Subtract

 trueのとき、メタボールの濃度が負になります(メッシュに穴を開ける方向に働きます).

Skinned Metaball Builder マニュアル -イントロダクション-

 

 

Skinned Metaball Builder Manual -イントロダクション-

 

概要 

"Skinned Metaball Builder" はメタボールでメッシュデータを生成する機能を提供するアセットです。

以下のような特徴があります:


エディタとランタイムいずれでも動作します.

www.youtube.com

 

- プラットフォームに依存していません.

- 作成したメッシュをAssetとして保存できます(Editorの場合).

- 自動的にスキニングされますので、アニメーションを付けるのに適します(オプション).

www.youtube.com

 

- シンプルながらテクスチャマッピングをサポートしています.

www.youtube.com

 

- Unityスクリプト(C#)で実装されており, カスタマイズが可能です.

 

クイックスタート

youtu.be

字幕ONで解説が表示されます(英語)

  1. "Metaball/Prefabs/SkinnedSeed" をシーンへドラッグ&ドロップします.
  2. ヒエラルキーから "SkinnedSeed.SourceTree" を選択します.
  3. "Ctrl+Shift+C" もしくは "Command+Shift+C" を入力して、ノードを追加します.
  4. それを移動させたり、 "base radius" を好きなように編集します.
  5. 3-4 を繰り返します(適宜ノードの追加先オブジェクトを選択し直します).
    "SourceTree"下のグラフ構造は、メッシュのビルド時にスケルトン情報へ反映されます.
  6. "Ctrl+Shift+R" または "Command+Shift+R" を入力し、メッシュをビルドします.
  7. エディタの実行ボタンを押した後"SkinnedSeed/BoneRoot"以下のノードを選択し,
    回転させてみてください(スキニングされている様子が確認できます).
  8. メニューコマンド"Metaball->SavePrefab"でグループ全体をPrefabとして、
    "Metaball->SaveMesh" でメッシュのみをセーブすることができます.

サンプル

3つのサンプルシーンがパッケージに含まれています.

それぞれシンプルに実装されていますが、このアセットの機能を知るために役立ちます.

 

1.Dungeon

www.youtube.com

"Dungeon" サンプルは実行中にメタボールメッシュを更新する方法を示しています.

洞窟の中を歩いたり、掘ったりすることができます.

 

操作方法:

A,W,S,D で移動

Space で「掘る」

マウスの移動で見回す 

 

2.Animations

f:id:nkdtr:20150603172052p:plain

"Animation" サンプルはスキニングされたモデルを動かす方法を紹介しています.

二つのオブジェクトを含んでいます:

-"Golem" : Unityのアニメーション

-"Tentacle" : 物理(Joint)

3.Models

色々なモデルのサンプルです.

 

 

技術情報

アルゴリズムを知ることはパラメーターの調節やカスタマイズの助けになります.

 

メタボール曲面の生成

 

1. メタボール情報(中心の座標、半径、濃度)を元にスカラー場(格子点にスカラー値を割り当てたもの)を計算します.

2. 「マーチングキューブス」アルゴリズムによりメッシュ情報に変換します( Marching cubes - Wikipedia, the free encyclopedia ).

 

 

 

制約、限界

  • 格子点や頂点の数にリミットを設けてあります (デフォルト値 1000000/300000).
    これはソースコードMetaballBuilder.csに定義されています.
    "_maxGridCellCount", "_maxVertexCount"で検索してください.
    注意 : 格子点や頂点数が大きすぎる場合、システムのフリーズを招く恐れがあります.
  • 格子点の数によっては、メッシュのビルドに長い時間がかかります.
    毎フレームのビルドには不向きです (低い解像度のメタボールを扱う場合や、ハイスペックマシンでの動作を前提とする場合は例外です).
  • メッシュに対して一つのマテリアルのみ割り当てられます.
  • テクスチャマッピングについてはシンプルな平行投影のみをサポートしています.

 

Skinned Metaball Builder Manual -Tips- (English)

Skinned Metaball Builder Manual -Tips-

 

Tips. 

 

Confirm metaball structure (Skinned Metaball)

f:id:nkdtr:20150608180556p:plain

Disable "SkinnedMesh" or "StaticMesh" to see metaball structure (and bones for Skinned).

 

Convert From Static to Skinned (or reverse)

Just copy GameObject tree under "SourceRoot" to other MetaballSeed (Static or Skinned) and the metaball structure is ported.

But some parameter modification on seed may be required.

 

Using multiple Materials

f:id:nkdtr:20150608183415p:plain

One metaball mesh can be rendered with only one material.

But you can simply combine ones (although they are not blended).

 

Deletable Objects

After you created your mesh, some of GameObjects and Components can be deleted.

- MetaballSeed(Static/Skinned) component

- SourceRoot GameObject (and its children)

- TextureGuide GameObject

- MetaballCellObject component (but it is recommend to set MetaballSeed's "CellObjPrefab" null and rebuild mesh instead)

Although the mesh will not be modified, doing this helps you publish your model data without dependency on this asset.

 

Usage of "CellObjPrefab"

Although it is set to null by default,

CellObjPrefab can be used in various ways.

- Building Joint connection ( see "Tentacle" in "Animation" sample scene )

- As "handles" to control bones ( for skinned metaball )

- As "waypoints" for AI ( "Dungeon" like usage )

 

Building mesh fails

In most case, it is because of exceeding the limitation of the number of grid cells.

In that case, an error message says

"Too many grid cells for building mesh (1168200 > 1000000 ).
Make the area smaller or set larger (MetaballSeedBase.gridSize)."

To solve the error, follow the message.

Another solution is to modify the limit value

(

    "MetaballBuilder.cs"
    const int _maxGridCellCount = 1000000;

).

But using too many grid cells may cause your system freeze

(the capacity depends on the spec and condition of your system).

 

Logs says mesh has been leaked

When you build a mesh and save the scene, you may see a log saying

"Cleaning up leaked objects in scene since no game object, component or manager is referencing them
 Mesh  has been leaked (some number) times."

But it seems that there are no actual leaks in usual case.

Skinned Metaball Builder Manual (English)

Skinned Metaball Builder Manual

Store URL :

https://www.assetstore.unity3d.com/en/#!/content/38054

Support :

mail : nkdtr2011@gmail.com

twitter : @NKDTR (usually in tweets Japanese, but can reply in English, too)

 

What's new

ver 1.10 released(2015/09/17)

-new feature "IncrementalModeling" mode

 -introduction -> (http://nkdtr.hatenablog.com/entry/2015/09/19/231458)

-"Place Metaball" shortcut changed to "Shift+Ctrl(Command)+E"

  (it was "Shift+Ctrl(Command)+C" before, being the same as "Open console")



1. Introduction

 Introduction of "Skinned Metaball Builder" and quick start guide.

 

nkdtr.hatenablog.com

 

 

2. Reference

 Properties, Menu Commands, APIs.

 

nkdtr.hatenablog.com

 

3. Tips

 Tips.

 

nkdtr.hatenablog.com

 

Skinned Metaball Builder Manual -Introduction- (English)

 

Skinned Metaball Builder Manual -Introduction-

 

Brief Summary 

"Skinned Metaball Builder" is a Unity Asset that provides a functionality of Making Mesh data via metaball with features:


Works on editor and at runtime.

www.youtube.com

 

- No dependency on platforms.


- Created mesh can be saved as an asset.


- Skinned (optional) so that mesh can be animated.

www.youtube.com


- With "skeleton" objects for various use.

 

- Support simple linear-projection texture mapping

www.youtube.com

 

- Fully implemented with Unity C# script, letting you customize.

 

Quick Start

youtu.be

<Turn on "CC" for explanation.

  1. Drag and drop "Metaball/Prefabs/SkinnedSeed" into your scene.
  2. Choose "SkinnedSeed/SourceTree" in hierarchy.
  3. "Ctrl+Shift+C" or "Command+Shift+C" to create a new metaball node.
  4. Move it, modify its "base radius" as you like.
  5. Repeat 3-4 (Changing node selection to be the parent of new node).
    The hierarchy under "SourceTree" is reflected into the "skeleton" generated later.
  6. "Ctrl+Shift+R" or "Command+Shift+R" to generate mesh.
  7. Press "run" button in editor,
    select some node under "SkinnedSeed/BoneRoot",
    and rotate it to confirm that your mesh transforms.
  8. "Metaball->SavePrefab" to save full prefab
    or "Metaball->SaveMesh" to save mesh only.

Samples

Three samples within package.

Each implementation is quite simple and easy,
but introduces well about this asset.

 

1.Dungeon

www.youtube.com

"Dungeon" sample shows how to modify mesh at runtime.

You can walk and dig through metaball-modeled dungeon.

 

Controls:

A,W,S,D to move

Space to "dig"

Mouse move to look around 

 

2.Animations

f:id:nkdtr:20150603172052p:plain

"Animation" sample shows how to animate skinned mesh.

Two objects are contained:

-"Golem" : Unity animation

-"Tentacle" : Physics (joint)

3.Models

Various objects :)

 

 

Technical Introduction

Knowing about the algorithm helps you to find good parameter values.

Creating a metaball surface

 

1. Calcurate and fill scalar field by metaballs information (center, radius and density).

2. Create mesh data from the scalar field via "marching cubes" algorithm( Marching cubes - Wikipedia, the free encyclopedia ).

 

 

 

Limitations

  • Numbers of grid cells and vertices are limited (1000000/300000 by default).
    These are defined in MetaballBuilder.cs.
    Search "_maxGridCellCount", "_maxVertexCount".
    Be careful : building mesh with too large values may Freeze your system.
  • Rebuilding mesh may take long time depending largely on the grid size.
    Per-frame rebuild is not recommended (excluding cases that you require low-resolution metaball or you suppose your application to run on a monster PC).
  • Only one material can be applied per mesh.
  • Texture mapping is supported but simple linear-projection only.