サブタイトル:「mer2のマイノリティ・レポート(笑)」 --- 最近忍者ブログの仕様が変わったようで、一部の画像が見えなくなってますが、画像のURLコピペで見られます。(どうしよう困ったな) --- ご用件など、ございましたらtwitterまでどうぞ。
という訳で、ちょっくら
Blenderに多視点カメラを追加する
スクリプト
を作ってみました。スクリプト
私以外にこんなの必要としてる人が居るのか謎ですが、せっかくBlenderなので公開してみます。
カメラがこんなふうになります。
こんな絵が作れます。
よいところ:
・ 既存のBlenderのシーン上で実行すれば、そのまんま多視点化(?)。
・ 横方向の多視点だけじゃなくて、縦横方向の多視点もいけるよ。
・ カメラ2つにすれば、普通のステレオだっておっけー。
・ 動画レンダリングもできますわよ。
・ なんと、仕事に使ってます!業務用仕様です!
いくないところ:
・ とりあえず「俺が使えればいいや」の精神で作ってます。とりあえずの「使えたよ」版です。
・ なんと、コンソールベースです!(Pythonコンソール楽しいよ)
・ いまのとこ、多視点カメラの配置は回転移動のみ。(平行移動はあとでやる)
・ レンダリングを開始したら、中断不可能!(ぎゃあ)
・ 当然ですが、無保証です。自己責任で御使用ください。
・ こないだ仕事で使ったときはちゃんと動いたのですが、その後の手直しでエンバグしてる可能性があります。
スクリプトはこちらから
(リンクは拡張子pngだけどテキストです)
(リンクは拡張子pngだけどテキストです)
以下は"blender-2.67b-windows64.zip"にて検証。
いちおう以下の順番にやれば動くと思うんですけど、真面目に使うにはやはりそれなりのBlender知識が必要です。
PR
最近いろいろあってBlenderに夢中です。
Blender楽しいよBlender。
いきなりBlenderのカメラの単位ベクトルってやつが必要になりまして、そんなことよくわかんないんだけどよくわかんないながらもなんかないかなと探してみたら、こんなの見つけました。
"You could use the cameras transformation matrix to work it out.
camera_view = (Vector(0,0,-1) * ob.matrixWorld).toEuler()"
camera_view = (Vector(0,0,-1) * ob.matrixWorld).toEuler()"
おおお、これが答かっ!と思ったのですが、かなり昔の記事で、このままだと今のBlenderでは動きません。
今のBlender(blender-2.67b-windows64.zip)だとVector()はこういう書きかたになるようで。
>>> pos = Vector((0,0,-1)) * bpy.data.objects['Camera'].matrix_world
おお、値が出た。
おお、値が出た。
Vector((0,0,-1))
っていうのは、たぶんカメラの初期状態が下向きになってるからですね(たぶんね)。
こいつをCameraのlocationに移動してやれば、Cameraと向きが合うはず、とBlenderの画面上で検証してみたのだけど、なんだか上手くいってないみたい。#--- bad
import bpy
import mathutils
loc = bpy.data.objects['Camera'].location
vec = mathutils.Vector((0,0,-1)) * bpy.data.objects['Camera'].matrix_world
print(vec)
pos = vec + loc
bpy.ops.object.add(type='EMPTY',location=pos,rotation=(0, 0, 0))
#---
なんで?
matrix_worldっていうのが気になるので、見てみると、
>>> bpy.data.objects['Camera'].matrix_world
Matrix(((0.6858805418014526, -0.31737011671066284, 0.6548618674278259, 7.481131553649902),
(0.7276337742805481, 0.31246861815452576, -0.6106656193733215, -6.5076398849487305),
(-0.010816780850291252, 0.8953432440757751, 0.4452453553676605, 5.34366512298584),
(0.0, 0.0, 0.0, 1.0)))
むむ、これは回転行列ってやつですね。めんどくさいな。
このへん見てみると、
rotate()っていうのがなんかいけそうな予感。引数にMatirxそのままぶちこめそうだし。
こんなんなりました。
#--- good
import bpy
import mathutils
loc = bpy.data.objects['Camera'].location
vec = mathutils.Vector((0,0,-1))
vec.rotate(bpy.data.objects['Camera'].matrix_world)
print(vec)
pos = vec + loc
bpy.ops.object.add(type='EMPTY',location=pos,rotation=(0, 0, 0))
#---
カメラの向きを変えてもぴったりセンターに来てます。
あら、いけてるみたい、やっほう。
あら、いけてるみたい、やっほう。
計算結果を即画面で確認できるのって便利ですね。Blenderすばらしい。
最新記事
(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
性別:
男性
趣味:
野良猫の餌付け