Pc-Trace

<< 2024年11月 >>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30






Pc-Trace
PC-Trace

SketchyPhysics - 2015年5月の記事
>>このカテゴリーの記事一覧

「Thruster」を使ってみた。

「SketchyPhysics」の、「Thruster」を利用して、押し出すオブジェクトはいくつか考えられる。
ロケットや、エレベーターなどが該当しそうだが、今回は”おもちゃ”のロケットを作成し、押出しの動きだけを試してみた。(効果音付き)



設定は、押出しの項目にチェックを入れ、値を設定するだけ。
(下の「inspector」のダイアログは個人的に日本語化して利用しているものだが、実際は正しい英語で表示される。)


「Thruster」へ設定するY軸への押出す強さは、自分の想定した動きに近くなるような数値。




作成するオブジェクトの質量(サイズ)で、設定する値は大きく変わる。
個人的には、スケール(体積)を10倍にしたとき、Thrusterの値は、10^3(10x10x10で1000倍)を目安として設定している。
体積が大きくなるに従い、微調整が容易になり、ゆっくりと動かせるようになる。

添付ファイルは、背景付きとモデルだけの2種類
PCのスペックに左右されるが、背景付きのモデルは、早い速度に設定
添付ファイル 添付ファイル


「playSound」 その2

3D Warehouse からモデルをお借りし、それぞれに対応した音(sound)を設定してみた。

マウスでオブジェクトに触れると、onclick{} が発生し、カッコにくくられた内容(playSound)が実行される。

onclick{
playSound('wav_name')
}

前回と異なり、「stopAllSounds」を入れず、音の終了を待たずに次の処理に移る。



添付ファイルのサイズが6Mを越えているため、読み込みに多少の時間を要する。(サイズ肥大の原因は受話器のカールコード)
 
添付ファイル 添付ファイル


「SOUND」の設定

「SketchyPhysics」の再生時や、オブジェクトの一部に触れたた時など、音声によるガイダンスが流れると、より効果的な事がある。

「SOUND」の設定は必要な音を予め用意(wav)し、呼び出すだけの簡単なもの。
画像のメニューは日本語化したものだが、標準では英語で表示される。


表示されたダイアログから、必要な音を追加していき、「playSound('')」に表示されたスクリプトのコピーを取り、ソースに貼り付けて利用する。(必要な数だけ繰り返す。)



下はいつもの扉のオブジェクトだが、フリーの「SofTalk」で音声を録音し、オブジェクトに触れると音が出るように設定してみた。
※自宅にある、シングルコア(1.7G)の古いパソコンでは、音声と言うより、雑音に近く聞こえる。

添付ファイルのソース
■扉のオブジェクトに記述したスクリプト
playSound('click')

onclick{
if getVar("tobira01")==0.0
stopAllSounds
playSound('akimasu')
setVar("tobira01",1.0)

else

setVar("tobira01",0.0)
stopAllSounds
playSound('tojimasu')
end
}

onend{
playSound('send')
}

まだ発声の終了していないサウンドをクリアして次の発声に移る場合
topAllSounds # 発声する前に、サウンドをクリア
playSound('sample') # 発声

の順で、スクリプトを記述

一行だけの、簡単な「SOUND」設定は後日。
添付ファイル 添付ファイル


オブジェクトの角(かど)の衝突形状

下は、使われやすい角処理の形状。
(軸をY方向にセット)

オブジェクトに角処理しても「SketchyPhysics」で干渉を起こしてしまう場合、適切な衝突形状を選択する必要がある。


添付ファイル 添付ファイル


多角柱・「Shape」によるバリエーション

前の動画に続き、軸方向の違いによる「Shape」バリエーション。




形状の「showcollision」 : (赤の軸)方向

「SketchyPhysics」で、円柱を転がしたつもりが”ガクガク”の動きになったり、予測不能な振る舞いをする時がある。

「Shape」の設定がオブジェクトの形状と異なる場合である。

「Shape」を設定する時、対象のオブジェクトを右クリックして表示される「メニュー」


下の動画は、”赤の軸”方向に六角柱を作成し、それぞれの「Shape」形状を指定して振る舞いを確認してみた。(設定する軸の方向や、凸型以外の形状でも振る舞いが異なる
実際の衝突は、六角中に描かれた形状で干渉する。

※形状指定があっても全てが動作する訳では無く、「Staticmesh」以外、オブジェクトが静止したままの「Shape」がある。



上の例での「Shape」設定は、「Convexhull2」が正しく利用できた。


当たり前、それとも錯覚?

「SketchyPhysics」を使い始めの頃、錯覚したり見誤ったりと・・。

下のサンプルは、ボックスに六角の車輪を付けて、「Motor」のジョイントを取り付け、動かしてみたもの。
形状や、視覚だけに頼ると、錯覚も当たり前に感じてしまうかもしれない例。





上の動画を見て当たり前に感じた人も、「showcollision」にチェックを入れて実際の車輪の干渉形状を見てみると、六角ではなく、四角で動いていたのが分かる。



それでも挙動に違和感を覚える人は鋭い観察力の持ち主かもしれない。


「SketchyReplay」の、「Export Animation」

「SketchyReplay」の、「Export Animation」を覚え書きとしてUPしてみた。

「SketchyPhysics」の動作をリアルタイムでキャプチャーする際、マシンスペックがネックとなるが、アニメーション用の連番付き画像としてエクスポートしておき、後で「Aviutl」などのソフトを利用して動画に変換(連続した静止画を連結)すると、正確にデータを書き出す事が出来る。
複雑なモデルは時間がかかるため、就寝中の処理をおすすめする。

またも手抜きのモデル!





※ 連番画像の結合については、後日紹介する予定?


ギアの作成

「Hinge」ジョイントを使って、”ギア”を作成してみた。

1..モデル上部に二つの「Hinge」を配置し、お互いを関連付け。
2..お互いのモデルとHingeが、行動を共に出来るように、グループ化
3..奈落への落下防止として、裏側にもHingeを配置し、現世へ留めておけるように細工。


添付ファイル 添付ファイル


形状の編集

下の記事で「ホイール」と「リフト」をそのまま利用したので、形状を編集してみた。

手順は動画の通りなので、特に説明する事も無い。




「ホイール」と「リフト」

YouTubeなどで紹介されている、「SketchyPhysic」を使った、「ホイール」と「リフト」に関する ”動き” を再現してみた。

”ツール”そのものは動画の通り、「フロアー」を配置しないとジョイントが付いてこないが、フロアーを配置しなくてもオブジェクトを留める方法はあるので、次回紹介する事にする。


添付ファイル 添付ファイル


「Piston」 後書き

「frame」の記事で、「Piston」で扉を開閉する”Controller”値に、以下の式を取り上げたが、”開”と”閉”の2動作だけなら短くまとめる事もでき、後書き追加。

開閉のみの2動作なら以下の式でも同じ。

if((frame%900)>450and(frame%900)>0);0.0;else;1.0;en
(フレーム0以上450未満の条件)
 ↓ 以下でも同じ
if((frame%900)>450);0.0;else;1.0;end
(450未満だけの条件として、省略した式)

※式は、”and”の代わりに ”&&”を使っても同じ。




「Servo」と「Piston」を使って「frame」の設定をしてみた。 

前の続きで、今度は「Servo」と「Piston」に、”frame”を使った制御を実行してみた。

自動で動かしたり、時間で制御したい時、またはデモの時などに役に立ちそうである。

下の動画は、”回転・ドア”と”スライド・ドア”に見たてたボックスに、「Servo」と「Piston」を設定し、非同期で動かしてみたもの。


設定方法は前回とまったく同じなので、今回の説明は省略。
動きに対しては、900のフレームに対して、450(半分)毎に動くよう設定
if((frame%900)>450and(frame%900)>0);0.0;else;1.0;end
ドアに設定した「Piston」の”Controller”値に、上の一行を書き込むか、コピーペーストするだけ



同じく、120度 開閉する扉を1/3づつ開いていくデモ。
式は見ての通り、900 のフレームに対して 300フレーム毎に区切って動きを設定してあるだけ。

if((frame%900)<300and(frame%900)>0);0.5;elsif((frame%900)>300and
(frame%900)<600);1.0;else;0;end


添付ファイル 添付ファイル


キーボードで正転と逆転をやってみた。

前回、「Controller」にキーワードを設定し、キーボードから動作できるように試してみたが、今回は少し拡張して、ジョイント「Motor」の正転と逆転が出来るように設定してみた。

式は下の一行のみ。

(key("left")*-1)+(key("right")*1)

デモなので、回転を十分落とすため”damp”の値を3に設定。

式は説明の必要がないくらい簡単なものだが、念のため説明してみる。

使うキーは、左矢印キーと、右矢印キーの二つ。

キーは、左右のどちらが押されても戻り値が ”真(1)”として考え、

左側が押された場合、−1を掛けて

1×−1=−1

右が押された場合、+1を掛けて

1×1=1

これを1つの式にまとめると、

左が押された場合、

−1+0=−1 となり、モーターは逆転。

右が押された場合、

0+1=1 となり、モーターは正転

キーが何も押されていない状態では、”0”のままなので、動きなし。

こんな感じである。

下が実際に動作を確認してみた動画

添付ファイル 添付ファイル