Skinned Metaball Builder Manual -Incremental Mode-

Skinned Metaball Builder Manual -Incremental Mode-

 

"Incremental Modeling" prefab has been added in version 1.10.

 

FEATURES

-NO SKINNING

-Node cannot be moved after placed

-Smaller impact on performance by adding metaball primitives

-Sphere and box primitives available

-Scale and Rotation can- be applied on primitives

-New game-like sample scene "dungeon2" added

 https://youtu.be/ZhvNbr7iI7Y

  

 

QUICK START

youtu.be

-Place "Metaball/Prefabs/IncrementalModeling" prefab on hierarchy

-Select Sphere/BoxBrush under "IncrementalModeling" instance created.

-Modify the position and the shape of the brush

-"Shift"+"Ctrl/Command"+"E" to place the primitive

 

Commands

Right click the component to show and execute commands.

 

Rebuild : 

 Rebuild the mesh by history.

Current "Fixed bounds", "Grid size" are applied correctly.

"Brush History" is required to do this.

 

Clear History:

 Clear current brush history.

Mesh is kept.

If you want your mesh to be cleared also,

do "Rebuild" after this.

 

Properties

Most of the properties are similar to previous Static/Skinned Metaball Seeds,

please refer (http://nkdtr.hatenablog.com/entry/2015/06/05/123458)

Ones below are specific to IncrementalModeling component.

 

Save Brush History :

 Decides save the history that is required to do "Rebuild".

 

Brush History :

 Saved history.

You can modify the history via this property, and do rebuild to apply the modification.

But its not so easy (there is no special tool support(like visualization) for this).

まんが保管庫

まんが保管庫

ユニティちゃんときまぐれお勉強タイム

このコンテンツは、『ユニティちゃんライセンス』で提供されています。

 

ベクトル等の基礎知識について、

個人的に思うツボ的なところを解説していくつもりです。

よく分からないけど何となく使ってる人の助けになればと思います。

 

いちから説明する教科書とは違います。

読んでて詰まる人は数学の教科書から。

 

#1 基底ベクトルと座標系

f:id:nkdtr:20150824231637p:plain

f:id:nkdtr:20150824231722p:plain

f:id:nkdtr:20150824231749p:plain

 

#2 座標と座標系

f:id:nkdtr:20150824233640p:plain

f:id:nkdtr:20150824233654p:plain

f:id:nkdtr:20150824233707p:plain

 

#3 ドット積・射影

f:id:nkdtr:20150824233726p:plain

f:id:nkdtr:20150824233944p:plain

f:id:nkdtr:20150824233959p:plain

 

Sprite ROKURO Manual

f:id:nkdtr:20150821105711p:plain

Sprite ROKURO Manual

"ROKURO" means "potter's wheel" in Japanese.

You can create revolution shaped mesh from sprite with this asset.

Please watch the quick start video below.

 

Store

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

 

Quick Start

youtu.be

 
1. Import an image file with alpha channel.
2. Set the texture type "Sprite" and press "Apply" button.
3. Drag and drop the prefab "Rokuro" onto the hierarchy.
4. Drag and drop the sprite (made in step 2) onto the PolygonCollider in the Rokuro instance.
5. Adjust the PolygonCollider by Offset so that it makes the correct shape when rotated.
6. Right click the Rokuro component and press "Build".
7. If the surface is reversed, toggle the "Reverse" checkbox and retry "Build".

 

Reference

Commands

Right click on the Rokuro component to execute commands.

 

Build

Build a mesh by rotating PolygonCollider information.

 

SaveMeshAsAsset

Save the mesh as an asset.

Saved asset can be applied to any MeshFilters or MeshColliders.

 

Parameters

FlatSection

If checked, surface is "virtically" flat.

f:id:nkdtr:20150820230817p:plain

 

FlatRotation
If checked, surface is "horizontally" flat.

f:id:nkdtr:20150820230812p:plain

HorizontalResolution

How many circle is divied into.

This must be equal to or larger than 3.

f:id:nkdtr:20150820231055p:plainHorizontalResolution=4

f:id:nkdtr:20150820231212p:plainHorizontalResolution=32

 

Reverse

If checked, created surface will be reversed.

In which case it "looks" reversed depends on the relative position of the shape of PolygonCollider to rotation axis.

 

EnableSubmesh

If checked and the sprite has multiple parts, mesh will be separated into submeshes.

Then MeshRenderer is required to contain as many materials as submeshes to be rendered correctly.

The order of submeshes cannot be controled.

 

Sprite ROKURO マニュアル

f:id:nkdtr:20150821105711p:plain

Sprite ROKURO マニュアル

スプライトを用いて、簡単に回転体のメッシュを作成できるアセットです。

下のムービーをご覧ください。

 

ストア

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

 

クイックスタート

youtu.be

 
1. アルファチャンネル付きのイメージをインポートする
2. TextureTypeを "Sprite" にして "Apply" ボタンを押す
3. "Rokuro"プレハブをヒエラルキーにドラッグ&ドロップする
4. スプライト (2で作成したもの) を 3でヒエラルキー上に作成した "Rokuro"の PolygonColliderへドラッグ&ドロップする
5. PolygonColliderのOffsetを編集して位置を合わせる
6. Rokuroコンポーネントを右クリックし、"Build"を選択する
7. 面が裏向きになってしまった場合、"Reverse"のチェックを変更し、"Build"し直す

 

リファレンス

コマンド

Rokuroコンポーネントを右クリックしてコマンドを選択することによって実行します。

 

Build

PolygonCollider の形状を回転させてメッシュを生成します。

 

SaveMeshAsAsset

メッシュをアセットとして保存します。

保存したメッシュはMeshFilterやMeshColliderにセットして使えます。

 

プロパティ

FlatSection

チェックされているとき、面は「垂直方向」についてフラットになります。

f:id:nkdtr:20150820230817p:plain

 

FlatRotation
チェックされているとき、面は「水平方向」についてフラットになります。

f:id:nkdtr:20150820230812p:plain

HorizontalResolution

回転体を作るときに一周を何分割するかを指定します。

3以上である必要があります。

f:id:nkdtr:20150820231055p:plainHorizontalResolution=4

f:id:nkdtr:20150820231212p:plainHorizontalResolution=32

 

Reverse

チェックされているとき、面を裏返します。

いずれの場合に「見た目上」裏向きになるかは、

PolygonCollideraの形状と回転軸との位置関係で決まります。

 

EnableSubmesh

これがチェックされていてスプライトが複数の部分から成るとき、

その数だけSubMeshを生成します。

このとき、MeshRendererにはSubMeshと同数のMaterialが設定されていなければ正常に表示されません(Materialの足りない部分については描画されません)。

SubMeshの順序について制御することはできません。

 

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.121 リリース(2020/12/10)

-頂点カラーを参照するサンプルマテリアルを追加

ver 1.12 リリース(2020/12/09)

-頂点カラーをサポート(ノード間で補間されます)

頂点カラーを参照するマテリアルといっしょにご利用ください。

ただしIncrementalモードは未対応です。

f:id:nkdtr:20201208142737p:plain

 

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"を参照してください.

B Use Color :

 Trueのとき、MetaballNodeに設定されたカラー情報をブレンドして頂点カラーに適用します。

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のとき、メタボールの濃度が負になります(メッシュに穴を開ける方向に働きます).

Base Color

 MetaballSeedの"B Use Color"がチェックされているとき、このカラーを元にメッシュの頂点カラーが決定されます。