Kinect v1-Win7 Unity

標準

kinect v1で動作確認→kinect v2へ応用、ということを考えて(v1は自宅置き)、v1で動かす方法をあれこれ思い出していました。

ひとつは、こちらでblog記事にした、Unity Wrapperを使う方法。playbackフォルダにモーションを保存でき、それを再生も出来るのですが、どうやって、汎用モーションの形にするのかがわからず、中座。

もうひとつは、Kinect with MS-SDK(スクリプト/アバターシステム RF Solutions)。kinect v2用のKinect Mocap Animator(10$)が出ているためか、こちらのバージョンは無料になって提供されています。

https://www.assetstore.unity3d.com/jp/#!/content/7747

Unity アセットストアにあるので、そのままインポートしてきます。

=====
<Kinect Gestureの使い方> 引用

2つの方法あり。

1.Main Cameraについている、KinectManagerを見てほしい。

There are two lists – “Player1 Gestures” (these are the gestures expected from player 1) and “Player2 Gestures” (expected from player 2).

The gestures in these lists will be detected during the entire game.

2.もうひとつは、KinectGestures.GestureListenerInterfaceを使ってコーディングする方法である。

For an example look at the KinectScripts/Extras/SimpleGestureListener.cs-script. Here is a short description of its methods:リスナースクリプトの例を載せてある。

UserDetected() can be used to start gesture detection programmatically.

UserLost() can be used to clear variables or to free the allocated resources. You don’t need to remove the gestures added by UserDetected()-method explicitly. They are removed automatically, before the invocation of UserLost().

GestureInProgress()-method is invoked when a gesture is started, but not yet completed or cancelled.

GestureCompleted() is invoked when the gesture is completed. You can add your own code there to handle the completed gestures.

GestureCancelled() is invoked, if the gesture is cancelled.

3.登録されているジェスチャーについて

①右手をあげる/左手をあげる RaiseRightHand / RaiseLeftHand – left or right hand is raised over the shoulder and stays so for at least 1.0 second.
②サイポーズ Psi – both hands are raised over the shoulder and the user stays in this pose for 1.0 seconds.
③Tポーズ Tpose – the hands are to the sides, perpendicular to the body (T-pose), for 1.0 seconds.
④ストップジェスチャー Stop – right hand is down and left hand is slightly to the side, but below the waist, or left hand is down and right hand is slightly to the side, but below the waist.右手または左手を手首位置より下で少し横に振る
⑤波 Wave – right hand is waved left and then back right, or left hand is waved right and then back left. 右手なら、左にウェーブしてから右に戻す。左手ならその逆。
⑥スワイプレフト SwipeLeft – right hand swipes left.右手を右から左にスワイプする
⑦スワイプライト SwipeRight – left hand swipes right.左手を右にスワイプする
⑧スワイプアップ/スワイプダウン SwipeUp / SwipeDown – swipe up or down with left or right hand
⑨クリック Click – left or right hand stays in place for at least 2.5s. Useful in combination with cursor control.右手または左手をその場所に少なくとも2.5秒止める。
⑩右手カーソルまたは左手カーソル RightHandCursor / LeftHandCursor – pseudo gesture, used to provide cursor movement with the right or left hand.
⑪ズームアウト ZoomOut – left and right hands are to the front and put together at the beginning, then the hands move in different directions.両手を自分の前であわせ、横に開く
⑫ズームイン ZoomIn – left and right hands are at least 0.7 meter apart and to the front at the beginning, then the hands get closer to each other. 70cmぐらい離した両手を自分の前で近づけること
⑬ホィール Wheel – left and right hands are shoulder size apart and to the front at the beginning, then the hands start to turn an imaginary wheel left (positive angle) or right (negative angle).肩幅に離した両手を前に出し、ホィールを回すように右回転させるか左回転させる
⑭ジャンプ Jump – the hip center gets at least 15cm above its last position within 1.5 seconds. 腰が少なくとも1.5秒以内に15cm以上浮くこと
⑮スクワット Squat – the hip center gets at least 15cm below its last position within 1.5 seconds 1.5秒以内に、腰が15cm以上沈むこと
⑯プッシュ Push – push forward with left or right hand within 1.5 seconds 1.5秒以内に右手または左手を前に押し出すこと
⑰プル Pull – pull backward with left or right hand within 1.5 seconds 右手または左手を1.5秒以内に後ろに引くこと

4.オリジナルジェスチャーの加え方

Here are some hints on how to add your own gestures to the Kinect gesture-detection procedure. You need some C# coding skills and a bit of basic understanding on how the sensor works. It reports the 3d-coordnates of the tracked body parts in the Kinect coordinate system, in meters.
To add detection of custom gesture, open Assets/KinectScripts/KinectGestures.cs. Then:
1. Find the Gestures-enum. First you need to add the name of your gesture at the end of this enum.
2. Find the CheckForGesture()-function. There is a long switch() there, and its cases process the detection of each gesture, defined in the Gestures-enum. You need to add a case for your gesture at the end of this switch(), near the end of the script. There you will implement the gesture detection.
3. For an example on how to do that, look at the processing of some simple gestures, like RaiseLeftHand, RaiseRightHand, SwipeLeft or SwipeRight.
4. As you see, each gesture has its own internal switch() to check and change the gesture’s current state. Each gesture is like a state machine with numerical states (0, 1, 2, 3…). Its current state along with other data, is stored in an internal structure of type GestureData. This data-structure is created for each gesture that needs to be detected in the scene.
5. The initial state of each gesture is 0. At this state, the code needs to detect if the gesture is starting or not. To do this, it checks and stores the position of a joint, usually the left or right hand. If the joint position is suitable for a gesture start, it increments the state. At the next state, it checks if the joint has reached the needed position (or distance from the previous position), usually within a time interval, let’s say within 1.0 – 1.5 seconds.
6. If the joint has reached its target position (or distance) within the time interval, the gesture is considered completed. Otherwise – it is considered cancelled. Then, the gesture state may be reset back to 0 and the gesture-detection procedure will start again.
To add detection of your own gestures, first try to understand how relatively simple gestures, like RaiseHand or Swipes, work. Then find a gesture similar to the one you need. Copy and modify its code to fit your needs. Hope this helps for a start 😉

Support, Examples and Feedback
E-mail: rumen.filkov@gmail.com; Web: http://rfilkov.com Skype: roumenf Twitter: roumenf

 

Auto-Rig Pro(¥)Blenderアドオン

標準

有料でも追加したほうがよさげなBlenderアドオン

1.RetopoFlow – Retopology Tools for Blender By CG Cookie $71.25

2.Auto-Rig Pro By Artell $15-$36

3.BPainter v1.0 By ndee $37.95

このうち、Auto-Rigの使い方解説

ドキュメントはこちら http://www.lucky3d.fr/auto-rig-pro/doc/ (English)

■1.BlenderMarket https://blendermarket.com/products/auto-rig-pro

で購入する。

■2.ダウンロード解凍すると、1)addonsフォルダ、2)remap_presets フォルダ、3)auto_rig_3.14a.blend (真ん中の数字はバージョン)

■3.Blenderユーザー環境設定で(File→User Preferences)

①→Fileタブ で、□Auto Run Python Scripts のチェックが入っていることを確認

②→Addonsタブ で、上記解凍フォルダ中の、addonsフォルダの中の、auto_rig_pro-master.zipを選んでインストール(チェックオン)。

③同じく→Addonsタブで、上記addonsフォルダの中の、proxy_picker.py を選んでインストール(チェックオン)。

※上記addonsフォルダには、もうひとつ、rig_tools.zip というのがあるが、こちらとauto_rig_pro-master.zipの両方一緒にインストールしないよう注意。

Save User Settingsを一度クリックしてから、ユーザー環境設定を終了。

■4.参照Blenderファイルのオブジェクトから、アーマチュアをすべて選んでappendする。

→File→Append→ auto_rig_3.14a.blend からobjectを選んで開く。

→Aキーですべてのファイルを選ぶが、左側に出ているオプションメニューのうち、Active Layerのチェックだけはずす(オフにする)

→Append

■5.リグをつけたい人型オブジェクトを設定

Nで出てくるプロパティの下方に、Auto-Rig用のボタンがいくつか出来ている。人型オブジェクトを選び、Front Orthoで表示。足の間が地面につき、かつそこが物体中心になるよう、設定する。その後、Object→Apply→Location。Object→Apply→Rotation&Scale。しておく。

① Get Selected Body ボタンクリック

② 次々とマーカーが出てくるので、位置あわせする。(首(の付け根)→肩→手首→腰→足首)

③ Go!ボタン

④ ボーン配置でずれているところがあれば、Editモードで修正

⑤ Match to Rigボタンクリック

 

 

 

 

 

Unity Treeで桜を作れるか

標準

CG Cookieのコースで学んでUnity Treeを使いこなせるかチャレンジ

(紹介動画-Free)

https://cgcookie.com/lesson/introduction-44/

(ここから先は、自分用メモとして)

だいたいのセットは、スタンダードアセットの環境系(Environment)にそろっているので、そのパッケージをインポートしておく。

木全体:Seed(適当に)。Area Spread(枝葉の広がり範囲)。オフセット(地面下に伸ばしたいとき)

LODクオリティ(初期設定0.8程度 あげればクオリティハイ、下げればローポリ)

幹や枝の設定:曲がり具合、直径の減衰具合、太陽に向く具合、根本の広がりなど。

途中で枝が折れた表現も可能(マテリアルもそれ用のをつけることが出来る)。

:どれぐらいの位置にどれぐらいの分量の設定可能。

出来上がったツリーは、自動的に(?)プレファブ設定されているので、テライン上にブラシで配置することが可能。

あるいは、少ない花の絵のみで、こういうのも綺麗→木蓮とかコブシの木に最適かも。

 

風の影響範囲

create→3Dオブジェクト→Wind Zone

木の幹、枝、葉っぱへと風の影響を設定していく。

 

Unity Particle

標準

参考にさせていただいたスライド
http://sssslide.com/speakerdeck.com/unitydojo/21unitydao-chang-pateikurujiang-zuo

1.パーティクルシステムのモジュール

1)基本

Main

初期速度、大きさ、色など。調整時はLoopで行うとよい。
カーブデータはプリセットライブラリとして保存できる。ただし、元のアニメーションカーブとの互換性はない。
移動距離などで消すにはCollisionを使う工夫もあり(Lifetime Lossを1にすると衝突時に消える)

Emission

時間に依存して放出するTimeと距離に依存して放出するDistanceのオプションあり。距離に応じる場合は、Simulation SpaceをWorldにする。

2)移動

Shape

Skinned Mesh Rendererを使うことで、キャラクター全体からパーティクル放出可能。
Start Speedをマイナスにすると、その形状の内向きにパーティクルを出せる。

Velocity Over Lifetime

Limit Velocity over Lifetime

原則させたい場合有効。Dampenは減速率。

Inherit Velocity

MainモジュールがWorldスペースのとき有効。オブジェクト自体の速度をパーティクルに反映させるときに使う。(裾を引く光など?)

Force Over Lifetime

徐々に早くなるミサイルなど。

External Forces

風の範囲設定(Wind Zone)を使ったときに使う

3)色

Color Over Lifetime

時間によって色を変える場合。アルファとカラー別々にMax8つまで補完登録可能。

Color By Speed

4)大きさ

Size Over Lifetime

Size By Speed

5)回転

Rotation Over Lifetime

Rotation By Speed

6)イベント

Noise

Collision

Triggers

Sub Emitters

Birth(誕生時)、Collision(衝突時)、Death(消失時)の3つに、どのタイミングでサブパーティクルを出現させるか設定可能。

7)アニメーション・描画

Texture Sheet Animation

テクスチャのコマ画像などを順番に読み取り、変更させるスプライトアニメーションとして設定したい場合。升目の数は、2のべき乗。

Lights

Trails

Custom Data

Renderer

2.打ち上げ花火考察

(0)舞台

太陽(Directional Light)を回転上向きにして沈める(たとえば、回転X:-15、Y:180など)

(1)打ち上げ

①Particle Systemを新規作成【HANABI】。リセットしたのち回転X:-90に設定。
Mainパネル Start Lifetime 3, Start Speed 20, Gravitiy 0.5
Emissionパネル Rate:0.5
Shapeパネル Angle:5
Rendererパネル MaterialをParticle Firework

これで2秒に1回打ち上げられる(Emission レイトが0.5)

②炎の軌跡作成用に
Sub EmittersのBirth追加【UCHIAGE】
Sub Emitter のマテリアルをParticle Fireworkに変更。
EmissionをRate over Timeを0にし、Rate over Distanveを30に設定

追跡する炎はStart Life time 1, Start Speed -1, Start Size0.4などに設定。
ShapeはConeにする。
これで、後ろに拡散するイメージが完成。

③Color over Lifetimeを使って、色が白→黄→オレンジと変化で設定

④Size over Lifetimeを使って、なだらかに凸カーブで最後がゼロになる曲線カーブを選択

(2)爆発(拡散する火花と煙)

①最初の【HANABI】パーティクルに、Sub EmissionをDeathのものを2つ追加【HIBANA】【KEMURI】

【HIBANA】Start Lifetimeを2つの定数の間(Random between 2 constants)に設定。0.8と1.0。
Start Speed 40-60。Gravity Modifier 3。
Emissionパネル Bursts追加。Min, Maxとも300に。
Limit Velocity Over Lifetimeを有効にし、Speedカーブを減速するものに変更。Dampen 0.1に。

ひとまず、ここまでで、飛び散る火花イメージ。

【KEMURI】Start Size 40。
3D Start Rotation Z軸 -180 180
Start Color のアルファ値 30
Emission Bursts。Min,Maxとも1に。
フェードインフェードアウト表現のため、Color Over Lifetimeのアルファ値を0→255→0 と変化。
Size over Lifetime 50%スタートで徐々に大きくなるカーブに。
Inherit Particle Color(元のパーティクルの色継承)をオフにし、独自にColor over Lifetimeで色をつける。

【HIBANA】を華やかに。Trailsパネルを有効にする。
Lifetime 0.6-1.0。Die with Particlesをオフに。Width over Trailを0.5。
Color over Trailでアルファ値を100に。

(3)消失(煌き)

①爆発後に起きる煌きを作成。【HIBANA】のSub Emitters→Deathに【KIRAMEKI】追加。
Start Lifetime 0.6-1。
Start Size 1-3。
Emission BurstsをMin,Maxとも1。
Velocity over Lifetimeを (-5,-5,-5),(5,5,5)でランダムに(風にやや流される感じが出る)
Color over Lifetimeでアルファを0,1,0,1,0,1,0とすばやく変化させて、点滅するイメージを出す。

 

Motion トレスのための手振れ補正(スタビライザ)Blenderで

標準

参考ビデオチュートリアル

 

1.モーションクリップエディタにする

2.Tツールシェルフ Trackタブ Clip→Prefetchを押す

Tracking Settings のMotion を LocRotに変更。MatchはPrevious frame にする。

Normalizeにもチェック。

3.Nプロパティ  2D Stabilization にチェック。

Marker Display のSearchをオン

4.クリップの一番最後(あるいは一番前)にタイムラインを設定し、MarkerをAdd(追加)する。

5.Tツールシェルフ一番下、Trackの前に(あるいは後ろに)ボタンをクリック。
Nプロパティ 2D Stabilizationに、画面のマーカーを選んで追加する(trackが追加される)

AutoScaleにもチェック。Stabilize Rotation にもtrackを追加。

6.Nプロパティにある、Display Stabilization にチェックをいれると手振れ補正した画面に変わる。

7.出力のために、ノードエディターウィンドウに変更する。

コンポジットにし、Use NodeとBack Dropをチェック。右Nプロパティに BackDrop設定があるので、Fitを押すか、Zoomを変更して画面でみやすく配置する。

インプット→Video Clipに変えて、Viewerにも出力。

間に、Stibilizeを検索して追加。クリップを選択する。

ムービーと同じサイズに出力するよう、サイズ調整し、H.264形式 mp4で出力。