タイトル画像

【Cell Fracture】オブジェクト粉砕【add on】

2016.09.11(00:00) 36

 blender にはオブジェクトをバラバラにするアドオンが標準で付いています。
それを使うことで簡単にオブジェクトを破壊できるのでやってみましょう。

1.アドオンを有効にする。
 1.まず User Preferences ウィンドウを開きます。
   手順:File>User Preferences

 2.[add-ons]タブを開いて、ウィンドウ左上の検索欄に"cell"と打って検索します。
   すると、”object:Cell Fracture”というアドオンが出てくるはずなので、それのチェックボックスを ON にしてください。

cell fracture_01.png 

※これで Cell Fracture のアドオンは有効になったのですが、このあと物理演算で動かしたいのでもう一つアドオンを有効にします。

 3.検索欄に"rig"と打って検索します。
   "Rigging:Rigify"というアドオンを有効にします。

 4.設定を保存する。
   最後にウィンドウ右下の”Save User Settings”ボタンを押して設定を保存します。


2.破壊するオブジェクトを用意する。
 今回は blender 起動時に最初から置いてある cube をばらばらにしてみましょう。

  1.cube を選択して、subsurf(subdivision surface) モデファイアを付けて、4分割くらいにします。
  2."Simple"方式で分割して、Apply します。

※Cell Fracture を使う際はある程度ポリゴン数があったほうがいい感じにバラバラになるのでそうしています。


3.cube をバラバラにする。
 1.ツールシェルフ(Tキー)の tool タブで”Cell Fracture”のボタンを押します。
   するとこんな画面が出てくるので、そこで適当に数値を設定してOKボタンを押します。
   (設定項目については後日追記する予定です)
cell fracture_04.png 

 2.バラバラになったオブジェクトが出来上がる。
   OKボタンを押すと計算が始まるので、少し待ちましょう。
   ※あまり細かく分割しすぎると計算が重くなります。

   破片となったオブジェクトは初期設定では元オブジェクトの隣のレイヤーにあります。
   元のオブジェクトは残るので、不要なら消してしまいましょう。


4.物理演算を有効にする。
 物理演算を有効にすることで、自然な崩壊アニメーションが得られます。
cell fracture_02.png 

 1.破片に物理演算設定をする。
   まず破片を一つ選び、ツールシェルフの"Physics"タブを開き、▼Riggid Body Tools パネルの"add/remove:"項目の”Add Active”ボタンを押します。

   これで、この破片は鋼体になりました。
   次はこの破片の設定を他の破片にコピーします。

 2.他の破片に設定を写す。
   全ての破片を選択し、”Object Tools:”項目の”Copy from Active”ボタンを押す。
   これで全ての破片が鋼体になりました。

 3.床を用意する。
   新規オブジェクトとして plane を追加します。
   この床は破片を受け止めるものなので、cube が十分乗るサイズにしましょう。

 4.床に物理演算設定をする。
   床を選択して"add/remove:"項目の"Add Passive"ボタンを押して鋼体化します。

※Active=動く鋼体 Passive=動かない鋼体 という認識で良いと思います。


5.アニメーションを作成する。
 タイムラインウィンドウの再生ボタンを押すと、cube が自重で崩壊してバラバラになるアニメーションが生成されます。
cell fracture_03.png 


【参考文献】
http://blog.livedoor.jp/hawamo21/archives/30110905.html
http://www.nicovideo.jp/watch/sm27504141
 
http://www.nicovideo.jp/watch/sm20304007
 
https://www.youtube.com/watch?v=IFvjJAZTIvM


スポンサーサイト

超エキサイティン! フンストンの3DCG至難の書


タイトル画像

鋼体シミュレーション(Rigid Body)

2015.02.20(22:12) 31

Happy Valentine2.png
 突然ですがバレンタインのチョコレートを皆様にプレゼントします!
(時期が過ぎているから突然なんですよ)
プレゼントといってもCG画像でとても食べられるものではないんですけどね←

 実はこれは一つ一つのオブジェクトを物理演算を使って配置しています。
鋼体シミュレーションは前に使っていたバージョン 2.65a ではゲームエンジンでしか使えなかったのですが、今使っている 2.73a なら、普通のレンダーモードでも使えるので活用してみました。

【やり方】
 とりあえず Cube を一つ床に落としてみます。

1.重力に従うオブジェクト
 起動時に置いてある Cube を鋼体の設定にしてみましょう。

 1-1.Cube を鋼体に設定する。
  Cube を選択して、プロパティズウィンドウの Physics タブを開きます。

  すると Enable physics for: という項目が出てくるので、そこから[ Rigid Body ]を選択します。
Rigid Body を選択すると、オブジェクトの輪郭の色が緑色になるので(UI のデフォルトの色設定では)確認してください。

 1-2.衝突判定の設定をする。
  ▼Rigid Body パネルで、Type: を Active に指定し、Dynamic のチェックボックスにチェックを入れます。

  下の ▼Rigid Body Colisions パネルで衝突判定についての細かな設定が出来ますが、Cube の場合デフォルトの設定で問題ないので、今回はそのままにしておきます。

2.衝突判定だけするオブジェクト
 これは床の設定です。床自身が奈落に落ちてしまうと困るので、衝突判定だけを持たせます。

 2-1.床を用意します。
  オブジェクトモードで新規に Plane を追加し、5倍くらいに拡大します。

 2-2.床を鋼体の設定にします。
  Cube と同様に、Physics タブで Rigid Body を選択し、今度は Type: を Passive に設定します。
  これで床は Cube を受け止めますが、自身は不動を貫きます。

3.演算する。
 タイムラインウィンドウのアニメーション再生ボタンを押すと、シミュレーションが開始されます。

4.アニメーションをキーフレームに Bake する。
 ツールシェルフの Animation タブを開くと、その中に Bake Action というボタンがあるので、それを押してください。
ボタンを押すと、ベイクするフレームの範囲を聞かれるので、キーが欲しいフレームを入力して OK ボタンを押してください。
自動的にタイムラインウィンドウにキーフレームが挿入されます。

 ベイク後は Rigid Body を外してしまっても問題ありません。
※キーフレームには位置・回転・拡縮のデータが記録されます。


 最初のチョコレートは鋼体設定したものをさらに Alt+D で複製して空中に配置し、床に落とした後で撮影しました。
オブジェクトを複製すると物理演算用の設定も一緒に複製されるようです。
Happy Valentine.png
 出来上がった画像はあとでフィルターを掛けるなり文字を入れるなりして仕上げることで、より一層おいしく召し上がれます(*・ω・)

【詳しい使い方はこちらを参照】
-Blenderで剛体シミュレーションをするときの手順と注意点-(2.66以降)
MM-TECHNOLOGY


超エキサイティン! フンストンの3DCG至難の書


タイトル画像

タイマーの作り方【BGE】

2015.02.17(22:39) 30

 Blender のゲームエンジンで、python なしでタイマーを作る方法です。
一秒ずつカウントアップしていって、60秒で1分に繰り上がるものです。
少しややこしいですが繰り返す処理なので、仕組みが解かると他に応用が利くかもしれません。

【作り方】
 モード(エンジン)を Blender Game に切り替えてから操作します。

1. [00:00] というタイムカウンターを作る。
timer_01.png

 1-1.テキストオブジェクトを用意します。
  Shift+A でテキストオブジェクトを追加します。
  テキストオブジェクトは初期状態では「Text」という文字ですが、Tab キーでエディットモードに入ると好きな文字を打てるようになります。
  元の文字は消して、半角数字の0を入力してください。

 1-2.カウンターの形にする。
  テキストオブジェクトをコピーし、画像のように配置してください。

2.プロパティを設定し、ロジックブリックを組む。
timer_02.png

  2-1.一番右のオブジェクトから設定します。
   画面構成を Game Logic に変更し、一番下の位(右端)の0を選択します。

  2-2.テキスト専用のプロパティを作ります。
   [+ Add Text Game Property ]ボタンをクリックして、型を Integer にセットします。

  2-3.センサーの設定をします。
   Delay センサーを追加し、Delay: と Duration: の値に、それぞれ 24 と打ちます。
   そして Repeat にチェックを入れてください。

  2-4.アクチュエイターを設定します。
   間に And コントローラーを挟んで、Property アクチュエイターを追加します。
   Mode: は Add に設定し、Property: 欄には Text を、Value: には 1 と入力します。

 これでカウントアップの仕組みが出来ました。
この状態でゲームモードを実行すると、カウントアップし始めますが、繰り上がりのときに元々用意してあった左隣の10の位を無視して、自動的に次の位の表示が新たに出てきてしまい、カウンターの表示がおかしくなります。

3.次は繰り上がりの設定をします。

 3-1.もう一つロジックブリックを組みます。
  Always センサーを追加して、TRUE のスイッチを ON にしてください。

 3-2.コントローラーを設定します。
  Expression コントローラーを追加し、値に「Text >=10」と入力します。

 3-3.アクチュエイターを設定します。
  Property アクチュエイターを追加し、Mode: は Assign 、Property: は Text 、Value: は 0 に設定します。

  次にその直下に、message アクチュエイターを追加し、To: (送り先)に Text.001(十の位の数字のオブジェクトの名前)を指定し、Subject: に a と入れておきます。(送る内容は何でも良い。)
  Body: の項目は触らず無設定にしておきます。

 3-4.今作ったものを繋ぎます。
  Always センサーと Expression コントローラ-、さらにそれに Property アクチュエイターと Message アクチュエイターを繋ぎます。

 これで10 までカウントすると、次の位のオブジェクト Text.001 に、a というメッセージが送られるように設定されました。
次は Text.001 の設定を作り、このメッセージ a を受け取ったときの反応を作ります。

4.Text.001 の設定をします。
 10の位のテキストオブジェクトの名前が Text.001 となっていることを確認して始めてください。
timer_03.png

 4-1.Text Game Property を追加します。
  このオブジェクトも最初のオブジェクトと同様に、Text Game Property を追加します。
  型も同じく Integer としてください。

 4-2.センサーを設定します。
  Message センサーを追加し、TRUE のスイッチを ON にします。
  そして Subject: の欄に、先程つくった a を入力します。

 4-3.アクチュエイターを設定します。
  Property アクチュエイターを追加し、Mode: を add 、Property: 欄に Text 、Value: 欄に 1 と入力します。
 4-4.コントローラーを設定します。
  Message センサーと Property アクチュエイターを繋ぐと、勝手に間に And コントローラーが挟まるので、そのようにしてください。

 これでちゃんと繰り上がるようになりました。(実行すると、繰り上がる瞬間に変なの映りますが……。)
ただ、この位も9までカウントすると表示がおかしくなるので、次の設定でさらに繰り上がってもらいます。

5.またも繰り上がりの設定をします。
 数値入力以外 3 の作業と同じなので簡略化した表記にします。

 5-1.もう一つロジックブリックを組みます。

  【センサー】Always
  設定:TRUE スイッチ ON

  【コントローラー】Expression
  値:Text >=6
  ※60進法なのでここは 6 になります。

  【アクチュエイター】Property
  Mode: Assign
  Property: Text
  Value: 0

  【アクチュエイター(二つ目)】Message
  To: Text.002
  Subject: b

 これらを繋いで、Text.001 の設定は終わりです。

6.次は Text.002 を同様の設定にします。
 先に[+ Add Text Game Property ]ボタンをクリックして、型を Integer にセットしておきます。
timer_04.png

 6-1.一つ目のロジックブリック。

  【センサー】Message
  設定:TRUE スイッチ ON
  Subject: b

  【コントローラー】And

  【アクチュエイター】Property
  Mode: Add
  Property: Text
  Value: 1

 6-2.二つ目のロジックブリック。

  【センサー】Always
  設定:TRUE スイッチ ON

  【コントローラー】Expression
  値:Text >=10

  【アクチュエイター】Property
  Mode: Assign
  Property: Text
  Value: 0

  【アクチュエイター(二つ目)】Message
  To: Text.003
  Subject: c

  これで Text.002 の設定は終わりです。

7.次は最後の位 Text.003 を設定します。
 ここでも忘れずに最初に[+ Add Text Game Property ]ボタンをクリックして、型を Integer にセットしておきます。
timer_05.png

 7-1.最後は1つしかロジックブリックがありません。
  (繰り上がりの設定無しだからです。)

  【センサー】Message
  設定:TRUE スイッチ ON
  Subject: c

  【コントローラー】And

  【アクチュエイター】Property
  Mode: Add
  Property: Text
  Value: 1

 お疲れ様でした。以上ですべての設定は終わりです。
このタイマー(カウンター)は、改良すれば日付とかも表現できそうですが、ただ増えていくだけのシンプルなものなので、途中から始まったり一時停止して再開したり、早送りや巻き戻しをしたりというのは難しいかと思います。

参考文献:Blender Tutorial: BGE easy timer(no pyton)


超エキサイティン! フンストンの3DCG至難の書


タイトル画像

【BGE】カメラ切り替え(Switching Camera)

2015.02.14(22:45) 28

【概要】
 カメラが二つある時の切り替え機構です。python は使いません。

 カメラが二台あり、スペースバーを押すとアクティブなカメラが切り替わるという仕組みを作ります。

【作り方】
1.まずこんな状況を作ります。
switch cam_01.png
 床と箱とカメラ二つ、あとは分かりやすいように矢印と色付きの照明を置いてみました。

2.選択されているカメラ(Camera と名前が付いているほう)に設定を施していきます。
 画面構成を Game Logic に切り替えて、Logic Editor で作業します。

switch cam_02.png

 2-1.まず先にプロパティを作っておきます。
  左の Propertys パネルにあるボタン[+ Add Game Property]を押して、新しいプロパティを作ります。
  次にプロパティ名を camera と名付けて、Type を Boolean にします。
  ついでに[ i ]と書かれたボタンも ON にしておきます。

 2-2.情報を見えるようにする。
  さっき ON にしたのは実行時のプロパティの情報を見れるようにするためのボタンでした。
  しかしそのままだと見れないので、インフォメーションヘッダ(画面上部)の Game と書かれた場所をクリックして、出てきたメニューから Show Debug Properties を選んでチェックを入れます。
switch cam_05.png
  これでゲーム実行時にプロパティの情報が画面左上に表示されるようになります。

3.スイッチの"つまみ部分"を作ります。

 3-1.キーボードセンサーを追加し、スペースバーを入力装置に指定します。
  このとき[ Tap ]ボタンを有効にしておいてください。
  キーを押しっぱなしにしたときに、画面が切り替わり続けるのを防ぐための機能です。

 3-2.アクチュエイターに Property を追加してください。
  Mode: を Toggle にし、Property: に camera(プロパティ名)を入れます。

 3-3.最後に二つを And コントローラーで繋ぎます。
  とりあえずこれでカチカチ出来るつまみ部分は出来ました。
  次はこれに配線して使えるようにします。

4.スイッチに二つの状態を繋いで使えるようにします。

 4-1.センサーに Property センサーを二つ加えてください。
  ※見やすくするため、先程設定したロジックブリックは最小化しています。
  switch cam_03.png
  二つとも Evaluation Type: は Equal 、Property: は camera に設定してください。

  ※Evaluation : 評価する[動]
   式や変数から値を決定すること。

  上のセンサーの Value: は True 、下のセンサーの Value: は False にそれぞれ設定します。

 4-2.アクチュエイターにも同様に二つ Scene アクチュエイターを追加してください。
  Mode: を Set Camera にし、上のアクチュエイターと下のアクチュエイターの Camera Object: を、それぞれ Camera と Camera.001に割り振ってください。

 4-3.作ったアクチュエイターをセンサーと繋ぎます。
  最後に、二つのアクチュエイターとセンサーをそれぞれ別の And コントローラーで繋ぎます。

 これで完成です!(*・ω・)ノ

 あとはどちらかのカメラに視点を移して(アクティブにしたいカメラを選択して Ctrl+0) Pキーでゲームを実行し、スペースバーを押せば画面が切り替わるはずです。
switch cam_04.png

参考文献:Blender Game Engine - Switching Cameras During Game

[別の方法]
はじめてのゲーム作り Capture2/TibLab
 後半でスクリプトを使ったカメラ切り替え(カメラの"位置"が切り替わる)が紹介されています。



⇒【BGE】カメラ切り替え(Switching Camera)の続きを読む

超エキサイティン! フンストンの3DCG至難の書


タイトル画像

ゲームエンジンで Track to コンストレイントを使う【BGE】

2015.02.12(21:12) 26

 blender のゲームエンジンでは、普通にオブジェクトモードで Ctrl+T で設定したトラック機能や、オブジェクトコンストレイントから設定した [Track To]・[Damped Track]・[Locked Track]を使うことが出来ません(;-_-)

 ゲームエンジンではロジックエディタに専用のアクチュエイターがあるので、それを使って Track To を実現します。

track to on the bge.png

 ゲーム実行時ではランプやカメラは非表示になるため、画像ではランプを模したコーンに Track To の設定を施し、その Cone の子にランプを設定してあります。

Track To の在り処

1.新規アクチュエイターを追加するプルダウンメニューから[Edit Object]を選びます。
2.さらに Edit Object: のメニューから Track to を選びます。

 とりあえずはこれで設定できました。
次は具体的にどのオブジェクトに注目するのかを設定します。

3.この例では Object: の値に Sphere を入れています。
 (画面中央の黄色いボールのことです。)
4.横の[3D]と書かれたボタンを ON にしておきましょう。
 これを押していないと、Z軸方向でのトラックが効きません。
5.次に Up Axis: と Track Axis: の項目に、適当な軸を指定してください。
 適当というのは、オブジェクトによってどの軸が最適なのかが変わってくるので、ケースバイケースでの対処になるからです。
 何度か軸を設定し直していると、球に向けたい面が向いてくれるようになります。

 Pキーでゲームを実行し、動作を確認しながら設定すると良いでしょう。

6.おめでとうございます。
これであなたの Lamp(Cone)は、健やかなる時も病める時も黄色い球体だけを見続けるようになりました。



⇒ゲームエンジンで Track to コンストレイントを使う【BGE】の続きを読む

超エキサイティン! フンストンの3DCG至難の書


blender
  1. 【Cell Fracture】オブジェクト粉砕【add on】(09/11)
  2. 鋼体シミュレーション(Rigid Body)(02/20)
  3. タイマーの作り方【BGE】(02/17)
  4. 【BGE】カメラ切り替え(Switching Camera)(02/14)
  5. ゲームエンジンで Track to コンストレイントを使う【BGE】(02/12)
次のページ
次のページ