2019年6月の記事
[Python] リスト型をベクトルに見立てて計算したい
いろいろ試していますがVRMNXpyで一向にnumpyが使えません。いい加減やってられないので,リスト型をベクトルに見立てて線形代数の主要な計算ができるコードを用意しました。
vrmapiの命令で使うことが前提なので,クラスを作って演算子をオーバーライドとかは一切せず,リスト型を放り込んでリスト型を返す関数に仕立てました。
def vecdot(vec1, vec2): # 内積(スカラー)を返す p = 0.0 for i, j in zip(vec1, vec2): p += i*j return p def vectrans(matrixA, vecx): # 線形変換 Ax vecy = [] for k in range(len(vecx)): vecy.append(vecdot(matrixA[k], vecx)) return vecy def turnmatrix(matrixA): # 行列の転置 m = len(matrixA) n = len(matrixA[0]) return [[matrixA[i][j] for i in range(m)] for j in range(n)] def matrixproduct(matrixA, matrixB): # 行列の積 return [vectrans(turnmatrix(matrixB), ai) for ai in matrixA]
本来はベクトル計算は,ベクトルの次元が合っているかとか確認しなきゃいけないのですが,あえてそれもしていません。変な行列やベクトルを放り込んだらfor文のあたりでIndexErrorが出るはず。いろいろ雑ですがVRMNXpyで使いそうなベクトル計算はせいぜい3次元なので…。
>>> A = [[1,2],[3,4]] >>> B = [[5,6],[7,8]] >>> x = [1,2] >>> y = [2,2] >>> vecdot(x,y) 6.0 >>> vectrans(A,x) [5.0, 11.0] >>> turnmatrix(A) [[1, 3], [2, 4]] >>> matrixproduct(A,B) [[19.0, 22.0], [43.0, 50.0]]
サンプルは2次元ですが3次元もいけます。
撮る夫くんNX 追尾機能+α
先日,暫定版で公開した「撮る夫くんNX」の機能強化を進めています。
追尾機能の原型ができました。ビュワーのGUIでリアルタイムに追尾対象の編成・車両を選択できます。先頭車・最後尾だけでなく,中間車の追尾も可能なのは,撮る夫くんならではの機能です。
NX版の撮る夫くんは追尾中もブルブル手ブレします。(しかし分かりにくい)
追尾中のオートフォーカスの実装も計画しています。
撮影ポイントを保存する機能も追加しました。外部ファイルにカメラ座標を保存する仕組みにしましたので,次にレイアウトを起動したときにも簡単に元の撮影ポイントに移動できます。FOVや被写界深度の状況も復帰します。
ほかにも撮る夫くんにできることがないか,模索中です。
ImGuiはなかなかに触り甲斐のある機能です。バージョン5と違ってなんでもかんでもキー操作で実装しなくていいので高機能化に拍車がかかります。(GUIウィンドウを開くのはどうしてもキー操作になります。センサーでも使わない限り。)
毎フレームの処理量が増えすぎないようにコードをうまく仕上げるのが難しいです。
撮る夫くんNX Ver. 3.0.1 β
こちらは撮る夫くん旧バージョンのリリース記事になります。撮る夫くんの最新版(Ver. 3.0.3)はこちらからどうぞ。
以前からVRM5向けに公開していた「フライスルーカメラ撮る夫くん」を,VRMNX向けに移植しました。
撮る夫くんフォーカスの設定画面,思ったよりすぐできた。一眼カメラ風の操作感でズームとフォーカスができます。ついでに手ブレスイッチもここに実装。近日中にブログで公開します。 #VRMNX pic.twitter.com/TZwrH5NzY3
— AKAGI (@AKAGIvrm) May 31, 2019
撮る夫くんNXの機能
- 手ブレ機能
- 被写界深度の簡単スライダー操作
- ズーム&首振りの同時操作
- 車両追尾機能(実装中)
カメラ自体の移動はテンキーを使う方法に改めました。車両追尾はまだ出来ていないので次回バージョンで搭載します。
被写界深度は,一眼レフカメラのレンズ機構をシミュレーションしてシンプルに操作できるようになっています。
レイアウト自体がちょっと貧弱だけど、ティルトシフトレンズ風。
— USO800鉄道総裁 (@uso800railway) June 1, 2019
中央部部(ホキ)にピント合わせ、前後(キハの前の方、後ろの方)がボケ。akagi君の撮る夫君NXがフォーカス設定値をスライダーで合わせれるので、直感派にはめちゃくちゃ合わせやすい。#vrmnx pic.twitter.com/7Jfekmm21E
ダウンロード&組み込みガイド
ダウンロード - toruo_v3.0.1.zip (709KB)公開終了
撮る夫くんのモジュールとサンプルレイアウトを同梱しています。お手元のPCの適当なフォルダに解凍してください。サンプルレイアウトは不親切なことにTOMIXレールと205系山手線が必要です。
ご自分のレイアウトに撮る夫くんを組み込む際は,toruo.pyをレイアウトファイルと同じフォルダにコピーして,レイアウトスクリプトに次のコードを2行,書き足してください。
import vrmapi import toruo def vrmevent(obj,ev,param): toruo.activate(obj,ev,param) if ev == 'init': #以下省略
例によってインデントは半角スペース4つ分です。toruo.activate(obj,ev,param) はif文の中に入れないでください。
最近のコメント