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"がチェックされているとき、このカラーを元にメッシュの頂点カラーが決定されます。

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.