2011年10月31日月曜日

Blender:Pythonスクリプト:オブジェクトを連続的に動かす

Text Editorで次のようなプログラムを書いてAlt+Pを何度も押すと少しずつCubeが動きます。

import bpy

bpy.data.objects["Cube"].location += Vector((1.0,0,0))

ところがこれを連続的に動かして、アニメーションのように見ようとして

import bpy
from mathutils import *
import time

print('start******************')

duration = 0.3
time.sleep(duration)

for i in range(10):
    bpy.data.objects["Cube"].location += Vector((1.0,0,0))
    time.sleep(duration)

としてもCubeは連続的に動かず、Alt+Pを押してからしばらくしていきなり(10,0,0)の位置に動いてしまいます。スレッドで動かせばいいのかと思い、下のようにしましたが、これでもだめです。

import bpy
from mathutils import *
import time
import threading

print('start******************')


class test(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.setDaemon(True)
        self.i = 0

    def run(self):
        print("Thread Start.")
        bpy.data.objects["Cube"].location = (0,0,0)
        duration = 0.3
        time.sleep(duration)
       
        for i in range(10):
            bpy.data.objects["Cube"].location += Vector((1.0,0,0))
            time.sleep(duration)
       
        time.sleep(1)

        for i in range(10):
            bpy.data.objects["Cube"].location -= Vector((1.0,0,0))
            time.sleep(duration)

if __name__ == "__main__":
    t = test()
    t.start()
    time.sleep(30)

Cubeが動くごとにRedrawとかするのでしょうか?

と思って調べたらRedrawはしない方がいいみたいです。ここ

Tools that lock Blender in a loop and redraw are highly discouraged since they conflict with Blenders ability to run multiple operators at once and update different parts of the interface as the tool runs.

とあり、

So the solution here is to write a modal operator, that is - an operator which defines a modal() function, See the modal operator template in the text editor.

modal operatorを使うのが推奨されています。ということで今後modal operatorを調べることにします。

2011年10月29日土曜日

Blender:Pythonスクリプト:Python Console

BlenderではPythonのInteractive環境をPython Consoleで実行できます。


 一番下のパネルの左下のEditor選択メニューでPython Consoleを選びます。


するとこのようなPython Consoleが開きます。このチュートリアルにあるように順に試していきます。


>>> bpy.data.objects

>>> list(bpy.data.objects)
[bpy.data.objects['Camera'], bpy.data.objects['Cube'], bpy.data.objects['Lamp']]


bpy.data.objects['Cube'].l と入力した所でCtrl+Spaceを押すと下のように候補が表示されます。

>>> bpy.data.objects['Cube'].l
                              ayers
                              ibrary
                              ocation
                              ock_location
                              ock_rotation
                              ock_rotation_w
                              ock_rotations_4d
                              ock_scale

さらに

>>> bpy.data.objects['Cube'].loca

まで入力して選択肢が1意になるようにして、Ctrl+Spaceとすると location と自動入力されます。

>>> bpy.data.objects['Cube'].location
Vector((0.0, 0.0, 0.0))

となります。今度はここに値を入れてみます。

>>> bpy.data.objects['Cube'].location = (0.0, 2.0, 4.0)

とすると、図のようにCubeが動くことが分かります。これでPythonでBlender内のオブジェクトを動かすことが出来るようになりました。



2011年10月22日土曜日

Blender:インタフェース

Blenderのチュートリアルビデオを見ていて面白かった使い方を3点。

BlenderのWindowをDuplicate。Ctrl+Alt+WでBlenderのWindow全体が2つになります。同じWindowが2つできるということです。下の図は2つになったWindowの一方をずらして、片側の3Dパネルの中のCubeオブジェクトを動かしている様子です。一方を動かせば他方も動きます。すなわち、この2つのWindowでBlenderの1つのGUIを構成していることになります。ですので、2ディスプレイの人などは便利に使えるのではないでしょうか。


またWindow全体でなく1つのパネルだけをDuplicateすることもできます。下のようにDuplicateしたいパネルの左下の部分にマウスカーソルを持って行くと、マウスカーソルが+に変わりますので、この状態でShiftを押しつつ左マウスクリックしてそのままちょっとドラッグするとそのパネルがDuplicateされます。このパネルもBlenderの1つのGUIとして動きますので一方でオブジェクトを動かしたら他方も動きますし、一方のパネルをPropertiesなどにして変更を加えたらその変更が他方にも及びます。


これ以外にもCtrlを押しながら同様の操作をすると、


のようなマークが現れ、クリックをしたパネルから入れ替えをしたいパネルへドラッグをすると対象の2つのパネルを入れ替えることが出来るようです。
 

Blender:Pythonスクリプト

Blender内でPythonスクリプトを動かしていきます。Blender内のいろいろな物(Object)はPython言語で動かすことができます。これをやっていきます。Blender + python 備忘録を参考にして進めます。ここはBlender2.45をベースに説明されているので、これを2.6で出来るように説明します。

まずBlender2.6でPythonスクリプトを書くエディタを開きます。右側のWindow枠を少し大きくして、Text Editorを選びます。


すると下のようなText Editorが開きます。


メニューのText→Create Text Blockを選ぶと入力できるようになります。


とりあえず Hello Worldに従ってPythonでHello Worldを書いてみます。Blender2.5からPythonがv3を使うようになったので、書き方がちょっと違います。Python3からは関数型で書かないといけなくなってので、

print  'Hello World'  を
print('Hello World')

と書き換えます。Text Editor内に次のように書き込みます。


Blender2.5以降ではSystem Console(標準出力)が標準では閉じられているので、Help→Toggle System Consoleで出します。


System Consoleはこんな感じ。別Windowで開きます。


Blenderの画面に戻ってText Editor上でAlt+Pと押すと、System  Consoleに実行結果がこのように出ます。


無事Pythonが実行できました(^^V

2011年10月20日木曜日

Blender:Blender 2.60

2.60正式版が出ました。今度はちゃんと2.60という表示になっていますね。

Blender:Game Engine: TutorialをBlender2.5以降で実行してみる(その5)

Blender:Game Engine: TutorialをBlender2.5以降で実行してみる(その4)で「このままでは球が平面に落ちてそこでピタっと止まってしまいます。」と書きましたが、実はバウンドしていたようです。球をもっと持ち上げて落としてみるとバウンドしているのが見えます。後はパラメータ調整で実際に近づけるのでしょうか。

2011年10月16日日曜日

Blender:Game Engine: TutorialをBlender2.5以降で実行してみる(その4)

前回に続けて、Blender Game EngineのTutorialを見ていきます。Blender2.5以降での変更点を中心に見ています。

Making the default cube move, using physics


に進みます。この節ではBulletというBlenderに組み込みの物理演算エンジンを使います。物理演算エンジンを使うと重力に従った物体の落下などのシミュレーションが出来ます。

Blenderを立ち上げて、デフォルトのCubeを消して、UV Sphere(球)を作ります。物理演算エンジンを使うためには下のような設定をします。


こうしておいて3DパネルでPキーを押すとめでたく球が下の方へ落ちて行くのが見えます。無事に重力が働いたようです。

で、このままでは球はどんどん落ちて行くだけなので、下に球を止める平面を作ります。Add→Mesh→Planeで平面を出します。


図のように設定して、3DパネルでPキーを押すと、球が落下して平面で止まるのが確認できます。Scaleは平面を右クリックで選択している時にSキーを押してマウスを動かすことでも実行できます。

このままでは球が平面に落ちてそこでピタっと止まってしまいます。ホントはバウンドさせたいのですが、このTutorialに従って進みます。(バウンドもまだ僕がうまくできないこともあり(^^;)


図のように球を選択して、Logic Editorを選び、Touchセンサ、Addコントローラ、MotionアクチュエータでForceを設定します。Touchセンサは球が他のオブジェクトと接触しているときにトリガを送り、Addコントローラを介して、Motionアクチュエータを駆動します。これでPキーでGEを実行すると、球が平面に落ちて、それから球がY方向に転がっていくのを見ることができます。

後はTutorialに従って適当に遊んでください(^^V

Blender:Game Engine: TutorialをBlender2.5以降で実行してみる(その3)

前回に続けて、Blender Game EngineのTutorialを見ていきます。Blender2.5以降での変更点を中心に見ています。

Making the default cube move, using no physics


に進みます。この節からようやくオブジェクトを動かしていきます。

前回の CubeオブジェクトのロジックブロックのActuatorに指定したMotionに何か設定してみます。例えば図のようにY:0.1としてみます。これ はY方向(Cubeに付随するローカル座標)にそって0.1ずつ動けということになります。ActuatorパネルのY方向を指定するLocのところの一 番右のLのところをクリックするとローカル座標とグローバル座標が切り替わります。ローカル座標が指定されているときはオブジェクトの向きによってグロー バル座標系での方向が変わります。グローバル座標ならオブジェクトの向きにかかわらず、同じ方向となります。


ここで3Dパネルにカーソルを置き、PキーでGEを起動しましょう。すると、



キューブがどんどん右側(Y方向)に遠ざかっていくのが見えます。このようにGEでオブジェクトを動かすことが出来るようになりました(^^V

これではどんどん行ってなくなってしまうので、キーボードからコントロールできるようにしましょう。


ロジックパネルをCtrl+↑で最大化して図のように↑矢印にはY方向、↓矢印には-Y方向、→矢印にはZ軸正方向回転、←矢印にはZ軸負方向回転を割り付けます。これでCtrl+↑でロジックパネルを小さくして、3Dパネル上でPキーを押すとGEモードになり、そこで↑↓→←のキーをいろいろ押すとそれに合わせてCubeオブジェクトが動きます。↑と→を同時に押すとZ軸正回転しながらローカルY軸正方向に進むので円弧を描きながら進むことになります。

リンクを切るときにはカーソルをリンクの上に持って行ってDelキーを押せばよいと書いてあるが、v2.5以降ではそれはできないようだ。一度Controllerを消してしまうとかで対応するしかないのだろうか?

Blender:Game Engine: TutorialをBlender2.5以降で実行してみる(その2)

前回に引き続き、Blender Game EngineのTutorialを見ていきます。Blender2.5以降での変更点を中心に見ています。

Learning the basics of using the Blender Game Engine


に進みます。 ここではいよいよGame Engineの使い方が出てきます。基本は3Dパネル上でPキーを押すだけです。Pキーを押すとGameモードになって、Escを押すと元に戻るようです。

Game Engine(以降GE)のためにShading modeを変更します。Shading modeを2.4以前ではDraw Typeと呼んでいましたが、2.5以降ではViewport Shadingとなっています。下のようにして設定します。


ここでPキーを押すと下のようにライティングが考慮されて表示されます。


準備が出来たのでそろそろ物体を動かすためのしかけの設定に行きましょう。そのためにBlender2.5以降ではEditor TypeとしてLogic Editorを選びます。


するとLogic Editorが現れます。


表示が小さい時はパネル上にマウスカーソルを置いて、ホイールで調整します。


それでもやりにくければCtrl+↑でパネルを最大化して使えばいいでしょう。

GEでは上のようにSensor、Controller、Actuatorという3種のロジックブロックでオブジェクトの動きを指定出来るようになっています。

SensorはControllerに対してトリガを出すためのブロックで、常にトリガを出したり、何かキーが押された時にトリガを出したりというような設定ができます。

ControllerはSensorの入力をどう取り扱い、Actuatorへトリガを渡すかということを決定するためのブロックです。AndやOrなどのロジックやPythonでの記述が可能なようです。例えばAndを使って、2つのSensor入力を指定すると2つのSensor入力の両方からトリガが来ている時のみActuatorへのトリガを出します。

Actuatorはオブジェクトを動かしたり、アニメーションを表示したり、音を出したりします。 

各ロジックブロックから1つずつ適当なものを選びます。最初はSensor→Always、Controller→Add、Actuator→Motionとしましょう。

次にこれらのロジックブロックをつなぎます。

繋ぎ終わったら3DパネルでPキーを押してGEを走らせてみましょう。何も起こりませんね(^^; これはActuatorのMotionに何も設定しなかったので、Motionがないからです。オブジェクトの動かし方は


で。


2011年10月15日土曜日

Blender:Game Engine: TutorialをBlender2.5以降で実行してみる(その1)

ここのチュートリアルに従って勉強していきます。v2.4用なのでちょっとメニューが違ったりします。

The basics of the Blender UI, and how to quickly use it

で操作方法を確認。大体、2.5、2.6と同じですが、下のようにPerspective(透視図)にするメニューが少し変わっています。


また2.5からはSpaceキーでAddなどのメニューが出なくなったようです。

この節の終わりの方にある”Renaming objects” のところですが、2.5以降は変わっています。そもそも立ち上げ時の画面構成などが若干変わっており、説明にある




 ではなく、2.5以降では、



のような感じです。で Renaming Object はどうするかというと、下の図に示すように、



下側のタイムラインパネル(デフォルトではこのパネルが3Dパネルの下に出ている。しかし使い方によってはパネル構成など変わっていることもあるので、自分の好きなパネルを選べばよい)の左下にあるボタンをクリックすると下のようにメニューが出てくるので、ここからPropertiesを選びます。



こうするとPropertiesパネルが現れますが、少し小さいので下のようにして広げます。


あるいは下のパネル上にマウスカーソルを持ってきた状態で Ctrl+↑(上矢印)(Ctrl+↓やShift+Spaceバーでも同じ様です)を押すと全面がPropertiesパネルになるので、ここで編集してもいいです。終わったらまたCtrl+↑を押すと元の大きさに戻ります。

次に下のようにメニューからObjectを選んでクリックします。
下のような画面になるので適当な名前を入力してEnterを押すとRenameできます。


これ

The basics of the Blender UI, and how to quickly use it

ページをBlender2.5以降で出来るようになりました(^^V

Blender:Game Engine

ようやく時間が出来たのでBlenderを触って見ることに。まずはGame Engine(日本語はちょっと古いけどここ)でアニメーション?を動かしてみよう。2.60RC2が出ているのでdlする。

立ち上げたところ。2.60のはずだが2.59.4となっている。

2011年10月11日火曜日

Google Earth:ver 6.1

Google Earthがver6.1になって、ストリートビューでワンクリックあるいはホイールで前後出来るようになった。これでぐんぐんホイールを回すとまるでドライブしているようだ。でもうちはADSLで画像が追いつかないようだが(^^;

で、前のバージョンまでホイールは画像の拡大縮小に対応していたはずだがそれが出来ない(^^; でも右クリックしてマウスカーソルを上下(画面上)すればいいようだ。で使い方を調べると前からそうだったのかな(^^;