【第5回MMD杯本選】リリ子さん×2 でぽっぴっぽー(立体視)【リリリリ祭り】
MMD杯参加しました!
(立体視の方法を選べる YouTube版: 【MMD Cup V】Lily & Lily Rain PoPiPo Dance - つちのこ、のこのこ。(はてな番外地))
目玉、というか本題の立体視スクリプトですが、視線を水平から外せない*1という未完成品。とりあえずな代物ですが今回使ったものを貼っておきます。
# -*- coding: utf-8 -*- u"""parallax カメラの PMD→CSV から立体視用データを作る Python 2.6.5 """ from __future__ import division import math BETWEEN_EYES = 0.354159 # 初音ミクモデルの目の間隔 / 2 FILENAME = 'camera' # csv の主ファイル名 def parallax(distance): # 視差の半分 return math.degrees( math.atan2(BETWEEN_EYES, distance)) f = open(FILENAME + '.csv', 'rb') data = f.readlines() f.close() keyframes = int(data[4]) print 'camera: %s, light: %s' % (keyframes, data[5 + keyframes]) RIGHT = data[:5] LEFT = data[:5] for i in range(keyframes): line = data[5 + i] (frame_no, distance, pos_x, pos_y, pos_z, axis_x, axis_y, axis_z, curve) = line.strip().split(',') p = parallax(abs(float(distance))) print frame_no, distance, p RIGHT.append(','.join( (frame_no, distance, pos_x, pos_y, pos_z, axis_x, str(float(axis_y) + p), axis_z, curve)) + '\n') LEFT.append(','.join( (frame_no, distance, pos_x, pos_y, pos_z, axis_x, str(float(axis_y) - p), axis_z, curve)) + '\n') RIGHT.extend(data[5 + keyframes:]) LEFT.extend(data[5 + keyframes:]) f = open(FILENAME + '_R.csv', 'wb') f.write(''.join(RIGHT)) f.close() f = open(FILENAME + '_L.csv', 'wb') f.write(''.join(LEFT)) f.close() # Public Domain. 好きに流用してください。
実際に使用するには事前に VMDConverter*2使ってカメラのモーションVMDをCSVファイルに変換する必要があります。
"camera.vmd" という名前でカメラのモーションデータを保存、それを VMDConverter に読み込ませて "camera.csv" を作成。そこでこの Python スクリプトを動かすと "camera_R.csv" と "camera_L.csv" という 2つのファイルが出来るので、それをまた VMDConverter で "camera_R.vmd" と "camera_L.vmd" に逆変換。それを MikuMikuDance で読み込んでそれぞれ AVI 出力すれば右目用と左目用の動画が出来ます。あとは適当な手段で横並びに結合*3すれば裸眼立体視用の動画ができます。
実際に動画で使用した camera.csv をここに貼っておきます
Vocaloid Motion Data 0002,1296845642
カメラ・照明
0
0
49
0,-10,10,10,0,0,0,0,0x146B146B146B146B146B146B146B146B717F0018146B146B2D00000000
50,-10,10,16.65,0,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
618,-6.5,10,17.65,0,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
635,-6.5,10,17.65,0,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
800,-1000,10,17.65,0,0,0,0,0x146B146B146B146B146B146B146B146B532E007F146B146B2D00000000
1000,-10,-10,20.05,0,0,0,0,0x146B146B146B146B146B146B146B146B532E007F146B146B2D00000000
1285,-7,-10,20.05,0,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
1308,-10,-10,20.05,0,0,-35,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
1400,-7,-10,20.05,0,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
1435,-10,-10,13.35,0,0,-6.87549,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
1470,-20,-20,15,10,0,-65,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
1490,-10,-20,15,10,0,-65,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
1560,-20,20,15,10,0,45,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
1585,-10,20,15,10,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
1655,-40,0,15,10,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
1685,-50,0,15,10,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
1770,-70,0,15,10,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
1965,-60,-10,15,0,0,-50,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2060,-30,-10,15,0,0,-0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2135,-20,-10,15,0,0,-0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2180,-20,10,15,0,0,-0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2260,-20,10,15,0,0,40,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2270,-50,-10,15,0,0,60,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2300,-60,-10,15,0,0,30,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2352,-60,-0,15,0,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2444,-60,-0,15,10,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2550,-60,-0,15,20,0,-20,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2551,-40,-0,30,30,0,-50,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2553,-40,0,30,30,0,-40,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2557,-40,0,30,30,0,40,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2563,-20,-0,30,30,0,40,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2569,-20,0,30,30,0,-50,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2577,-20,0,30,30,0,-50,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2582,-20,0,30,30,0,40,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2587,-20,-0,30,30,0,40,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2588,-40,-0,30,30,0,-140,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2600,-40,-0,30,30,0,-220,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2609,-40,-0,30,30,0,-140,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2622,-40,-0,30,30,0,-220,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2623,-40,-10,15,-0,0,-0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2740,-10,-10,20,-0,0,-20,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2754,-50,10,17,-0,0,-50,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2770,-20,10,17,-0,0,-20,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2815,-10,10,17,-0,0,30,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2833,-30,0,17,-0,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2970,-60,0,17,-0,0,0,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2978,-10,10,17,-0,0,-10,0,0x146B146B146B146B146B146B146B146B146B146B146B146B2D00000000
2986,-10,10,17,-0,0,-10,0,0x146B146B146B146B146B146B146B146B647E0020146B146B2D00000000
3365,-1500,10,17,-0,0,-10,0,0x146B146B146B146B146B146B146B146B532E007F146B146B2D00000000
0