サブタイトル:「mer2のマイノリティ・レポート(笑)」 --- 最近忍者ブログの仕様が変わったようで、一部の画像が見えなくなってますが、画像のURLコピペで見られます。(どうしよう困ったな) --- ご用件など、ございましたらtwitterまでどうぞ。
という訳で、ちょっくら
Blenderに多視点カメラを追加する
スクリプト
を作ってみました。スクリプト
私以外にこんなの必要としてる人が居るのか謎ですが、せっかくBlenderなので公開してみます。
カメラがこんなふうになります。
こんな絵が作れます。
よいところ:
・ 既存のBlenderのシーン上で実行すれば、そのまんま多視点化(?)。
・ 横方向の多視点だけじゃなくて、縦横方向の多視点もいけるよ。
・ カメラ2つにすれば、普通のステレオだっておっけー。
・ 動画レンダリングもできますわよ。
・ なんと、仕事に使ってます!業務用仕様です!
いくないところ:
・ とりあえず「俺が使えればいいや」の精神で作ってます。とりあえずの「使えたよ」版です。
・ なんと、コンソールベースです!(Pythonコンソール楽しいよ)
・ いまのとこ、多視点カメラの配置は回転移動のみ。(平行移動はあとでやる)
・ レンダリングを開始したら、中断不可能!(ぎゃあ)
・ 当然ですが、無保証です。自己責任で御使用ください。
・ こないだ仕事で使ったときはちゃんと動いたのですが、その後の手直しでエンバグしてる可能性があります。
スクリプトはこちらから
(リンクは拡張子pngだけどテキストです)
(リンクは拡張子pngだけどテキストです)
以下は"blender-2.67b-windows64.zip"にて検証。
いちおう以下の順番にやれば動くと思うんですけど、真面目に使うにはやはりそれなりのBlender知識が必要です。
+ + + + + + + + + +
準備:
とりあえず試しなので、Blenderの起動画面で実行してみましょう。
おなじみのこれですね。
スクリプトを動かせるようにする準備は、このへんを参考に。
ここ、たぶんいちばん詳しい日本語のBlender + Pythonの解説です。すばらしいですわよ。
とりあえず今回の用途では以下の項目だけ読んでおけばだいじょうぶです。
1.3 Python コンソールを表示する
1.4 Python のスクリプトを実行する
- Scriptingレイアウト便利です
- Ctrl-スペースの補完は便利なので活用しましょう。
2.1 テキストエディタ
- "New"ボタンクリックは慣れないうちは忘れてハマるので注意です。
コンソールとテキストエディタはここ
からでも表示できます。
(このへんはBlenderの基本操作なので詳しいことは略)
スクリプトをレジスト:
スクリプトファイルをテキストエディタにペーストするなり読ませるなりして、
テキストエディタ上で"Alt+P"
か
テキストエディタのメニューで"Text -> Run Script"
でレジストされます。
(レジストって言って正しいのかどうかわかんないけど、py.utils.register_class()だからたぶんいいのだ)
うまくいった場合、上のinfoウィンドウに(Scriptingレイアウト使用時)
bpy.ops.text.run_script()
というメッセージがこっそり出ます。
実行:
上のレジスト操作で
bpy.ops.object.camera_array_
に続く命令(?)が登録されて、コンソール上で実行できるようになります。
Pythonコンソール上で
>>> bpy.ops.object.camera_array_
まで打って、Ctrl-スペースするとレジストした命令(?)の候補がずらりと出てきます。
bpy.ops.object.camera_array_anim_plane()
bpy.ops.object.camera_array_anim_vertical()
bpy.ops.object.camera_array_clear()
bpy.ops.object.camera_array_delocate()
bpy.ops.object.camera_array_locate()
bpy.ops.object.camera_array_plane()
bpy.ops.object.camera_array_putconvergencetarget()
bpy.ops.object.camera_array_renderframe()
bpy.ops.object.camera_array_set_plane()
bpy.ops.object.camera_array_set_vertical()
bpy.ops.object.camera_array_testset()
bpy.ops.object.camera_array_vertical()
現状これだけです。
試してみましょう。以下を順番に実行します。
>>> bpy.ops.object.camera_array_putconvergencetarget()
"ConvergenceTarget"という名前のEmptyオブジェクトを作成します。これはカメラアレイの視線方向の基準になります。
現在のシーンのCameraオブジェクトが向いている方向の"ちょびっと前"に作成します。
"ConvergenceTarget"が存在しないと、他の命令はエラーになるはずです。(赤文字出ます)
"ConvergenceTarget"はシーンに合わせてメインの対象の位置あたりに移動させてください。
(移動させるにはBlenderの基礎知識が必要ですが)
(まあ移動しなくても多視点画像は作れますが)
以下はとりあえず"ConvergenceTarget"を(0,0,0)の位置に移動させてます。
>>> bpy.ops.object.camera_array_vertical()
横並びのカメラアレイを(0,0,0)の位置に作成します。
こんなふう
(わかりづらいので、Cubeを不可視にしてます)
>>> bpy.ops.object.camera_array_locate()
カメラアレイを現在のシーンのCameraオブジェクトの位置にセットします。
こんなふう。
これでカメラアレイのセッティング完了です。
いちおう現在のシーンのCameraオブジェクトとカメラアレイはparentな関係になってますので、Cameraオブジェクトを移動・回転させるとカメラアレイも一緒に移動・回転します。
しかし、カメラアレイのプロパティはカメラアレイを作成した時点Cameraの設定のままです。カメラアレイ作成後にCameraのプロパティを変更しても、カメラアレイには反映されません。
(カメラワーク等が設定済みのシーンにそのままカメラアレイを適用する前提で作ってます。)
>>> bpy.ops.object.camera_array_clear()
カメラアレイをクリアします。
最初の状態に戻ります。"ConvergenceTarget"はクリアされずに残ります。
カメラアレイの設定を変更したい時は、カメラアレイをクリアしてからスクリプトファイルを編集してください。
camera_cols = 5 # カメラの数
Change_Deg = 30 # 切替角
数値を書き換えたら、もういちど"Alt+P"か"Text -> Run Script"でレジストすると変更が反映されます。
作ったほうとしては、レンチキュラーや視差バリアの裸眼立体視モニターに出力することを目的としております。
「切替角」は印刷用レンチキュラーレンズなら数字が公開されてますが、裸眼立体視モニターだと数値は公開されていないのが普通ですね。自分で測定しましょう!このへんの数字を表示する対象に合わせると自然な表示になるのでは(仮説)。
多視点画像を作ってみましょう:
多視点レンダリングですきゃっほう。
多視点レンダリングですきゃっほう。
※レンダリングまで行なう場合、事前にフォルダ"C:\blender_multi"を作成しておいてください。レンダリング結果はこのフォルダに保存されます。
(Windowsの場合。他のOSの場合は、スクリプトファイルの13行目
fileBaseName = "c:/blender_multi/blender_"
を環境に合わせて変更してください。)
(まっくの場合、
(まっくの場合、
#fileBaseName = "c:/blender_multi/blender_"
fileBaseName = "/Users/Mercy_Yamada/blender_multi/blender_" #mac
として、"Mercy_Yamada"の部分を自分の環境に合わせてください。
なぜか"~/"が使えない。
)
なぜか"~/"が使えない。
)
ふたたびカメラアレイをセットします。さっきと同じ方法でもよいですが、実は
>>> bpy.ops.object.camera_array_set_vertical()
で一発でカメラアレイのセッティングができます。ごめんなさい。
>>> bpy.ops.object.camera_array_renderframe()
でレンダリング開始です。
スクリプトファイルに手を入れてなくて、上記のとおりにフォルダが作ってあれば、
C:\blender_multi
に
blender_00000_0.png
blender_00000_1.png
blender_00000_2.png
blender_00000_3.png
blender_00000_4.png
ができているはずです。
レンダリング結果をGifアニメにしてみると、こんなふう。
レンダリングが終了すると、Pythonコンソール部分が何故か3D View表示になってしまうのですが、対処方法がよくわかってません!ごめんなさい。
多視点動画を作ってみましょう!!!:
さすがに動画となるとやや面倒なので、解説もざっと流します。
多視点動画を作るには、元のシーンもタイムラインに沿って何らかの値が変化しているようなもののほうが良いでしょう。なんとか用意してください。
ざっと説明。
スクリプトファイルの11、12行目の
startFrame = 1 # レンダリング開始フレーム番号
FrameNum = 5 # 総レンダリングフレーム数
の数値をシーンに合わせて書き換えてレジストしてください。
上のデフォルト数値の場合、フレーム番号1から開始して、5フレーム分処理します。
つまり、
1 2 3 4 5
のフレーム番号を連続でレンダリングします。
タイムライン上で"ConvergenceTarget"を移動させると、カメラアレイの注目位置が"ConvergenceTarget"に合わせて変化するようになってます。
"ConvergenceTarget"の位置を適切に設定したら、
>>> bpy.ops.object.camera_array_anim_vertical()
でいきなり画像作成を開始します。
1フレームだけレンダリングの時のような前準備は不要です。
レンダリング終わるまで待ちましょう。
ここで注意なのですが、
レンダリングは中断ができません!!!
(中断のやりかた調べてないのです)
(中断のやりかた調べてないのです)
どうしても中断したい時は、クローズボタンなりタスクマネージャーなりでBlenderを強制終了させるしか方法がありません。
ご注意ください。
レンダリングが終了すると、この例の場合は指定フォルダ内に
blender_00001_0.png
blender_00001_1.png
blender_00001_2.png
blender_00001_3.png
blender_00001_4.png
blender_00002_0.png
blender_00002_1.png
blender_00002_2.png
blender_00002_3.png
blender_00002_4.png
blender_00003_0.png
blender_00003_1.png
blender_00003_2.png
blender_00003_3.png
blender_00003_4.png
blender_00004_0.png
blender_00004_1.png
blender_00004_2.png
blender_00004_3.png
blender_00004_4.png
という画像を保存します。
ベース名 + フレーム番号 + 視点番号 + 拡張子
といったフォーマットです。
「ベース名」は上のフォルダ名指定のところの
fileBaseName = "c:/blender_multi/blender_"
のフォルダ名以下の部分です。
以上の説明中の"vertical"の部分を"plane"に置き換えると、縦横方向のカメラアレイとなります。
現状では縦方向のカメラ数は横方向のカメラ数と同じ数になります。
こんなふう
てなかんじです。さあみんな、Blenderで多視点しようぜ。(強制はしない)
参考:
上でも紹介しましたが、最強サイトです。
ここはひととおり実行しつつ目を通してみましょう。世界が変わるかも。
ここはひととおり実行しつつ目を通してみましょう。世界が変わるかも。
スクリプトのレジスト方法はここのやりかたそのまんま
"ConvergenceTarget"からカメラの注目点を計算するのに使用。
ついでに:
PR
この記事にコメントする
最新記事
(04/20)
(11/21)
(01/01)
(06/12)
(06/12)
(05/29)
(05/22)
(05/21)
(12/25)
(12/20)
最新コメント
[08/27 BernardSr]
[08/27 BernardSr]
[08/27 BernardSr]
[12/29 GroverIcow]
[12/26 gayenKinesl]
[12/25 gayenKincfv]
[12/25 geRoesonokp]
[12/24 geRoesonmxu]
[06/30 LindsayDom]
[06/24 Ayukupim]
[06/22 francinerj2]
[06/21 Karsewis]
[06/17 Porsulik]
[06/16 Porsulik]
[06/16 Porsulik]
[06/16 Amimior]
[06/15 WilfordMof]
[06/11 lakeishatb1]
[06/04 Mathewlomi]
[05/31 tiopomWarriorvrp]
[05/31 Lasdumor]
[05/29 Aredorer]
[05/27 IMPUCKICT]
[05/26 Asosans]
[05/24 RaymondZice]
カテゴリー
リンク
アーカイブ
アクセス解析
カウンター
カレンダー
12 | 2025/01 | 02 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
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 | 31 |
プロフィール
HN:
mer2
性別:
男性
趣味:
野良猫の餌付け