繰り返しコピーができるようになったところで、 私が勝手に思い込んでいるレイトレーシングの伝統的なパターン 「チェスボードの上に透明の球」を再度試してみます。
$ mv rt_v36 rt_v37 $ cat v37.patch | ( cd rt_v37 ; patch -p1 ) $ cd rt_v37 $ make clean $ make
物体の繰り返しコピー配置 では、 コピーを作る位置についてごたくを並べてたのですが、 バグがあり意図した動作になってませんでした。
物体データをコピーしても、データが指してるマッピング情報が、皆同じものを指していました。 コピーした最後のデータに行ったマッピングの処理が、 全部のコピーしたデータに影響してしまっておりました。
パッチの
dat.py : d_ = d.copy() d_['rxs'] = rxs[:] # ! d_[targ_k] = targ[:] + d_['maps'] = ut.map_lst( lambda m: m.copy(), d.get('maps') ) # ! ds.append(d_) targ = lx + targ if i_a == 'insert' else targ + lx return sum( map( d_setup, ds ), [] ) :
この箇所で、マッピング情報もコピーするように修正しておきます。
毎回、フルサイズで走らせたときの予想時間を手で計算してましたが、 荒削り設定のときに最後に表示するようにしてみました。
生成した動画ファイルが3Mバイトを超えてた場合、 適当に分割する処理を追加していみました。
では、いつもの速度確認。
$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v37/objs_1_2_sc n=1 init_sec=5 div=2 : wh : 76800/76800(100.0%) : fin 15.49s $ ./skill.sh
以前の v36 wh : 76800/76800(100.0%) : fin 15.13s v35 wh : 76800/76800(100.0%) : fin 16.16s v34 wh : 76800/76800(100.0%) : fin 38.47s v32 wh : 76800/76800(100.0%) : fin 26.84s v31 wh : 76800/76800(100.0%) : fin 40.50s v30 wh : 76800/76800(100.0%) : fin 38.39s v29 wh : 76800/76800(100.0%) : fin 1m 44.72s v28 wh : 76800/76800(100.0%) : fin 1m 18.06s v27 wh : 76800/76800(100.0%) : fin 1m 8.39s v26 wh : 76800/76800(100.0%) : fin 1m 6.02s
まぁ同程度。
ではパッチに追加した「伝統パターン」をば。
: +rxs_check = [ { + 'kind': 'square', + 'rtd': { 'diff': 0.8 }, + 'maps': [ { 'fn': 'IMG_3999_3.mov', 'fn_r': 'IMG_3999_4.mov', 't2m': [ ax.zoom_all(4) ] } ], + 'm2g': [ ax.slide([-8,-8,-2]) ], + 'rxs': [ + ( 'm2g', 'insert', 2, [ ax.slide([2,2,0]) ] ), + ( 'm2g', 'insert', 4, [ ax.slide_x(4) ] ), + ( 'm2g', 'insert', 4, [ ax.slide_y(4) ] ), + ] +},{ + 'kind': 'ball', + 'rtd': rtd, + 'm2g': [ ax.zoom_all(2) ], +} ] + +rxs_check2 = [ { + 'kind': 'square', + 'rtd': { 'diff': 0.8 }, + 'maps': [ { 'fn': 'IMG_3999_3.mov', 'fn_r': 'IMG_3999_4.mov', 't2m': [ ax.zoom_all(40) ] } ], + 'l2m': [ ax.slide([-8,-8,-2]) ], + 'rxs': [ + ( 'l2m', 'insert', 2, [ ax.slide([2,2,0]) ] ), + ( 'l2m', 'insert', 4, [ ax.slide_x(4) ] ), + ( 'l2m', 'insert', 4, [ ax.slide_y(4) ] ), + ] +},{ + 'kind': 'ball', + 'rtd': rtd, + 'm2g': [ ax.zoom_all(2) ], +} ]
rxs_check はコピーする位置が画像を焼き付けた後、 rxs_check2 はコピーする位置が画像を焼き付ける前になってます。
前者のデータで、まずは荒削り設定で
$ ./cg.py eyep=[0,0,0],[40,40,10],10 sec=10 data_name=rxs_check name=out_v37/rxs_check_tst fps=10 div=4 : wh : 14959/19200(77.9%) : total 1.33s : rest 0.29s : 2018/05/12 17:29:50 wh : 19200/19200(100.0%) : fin 1.31s frm : 100/100(100.0%) : fin 2m 20.23s estimated 1.87 hour at 640*480 30fps $ ls -lt out_v37/ | head -rw-r--r-- 1 kondoh staff 887006 5 12 17:29 rxs_check_tst.mp4 :
1.87時間の予想。いかに?
$ ./cg.py eyep=[0,0,0],[40,40,10],10 sec=10 data_name=rxs_check name=out_v37/rxs_check : wh : 278581/307200(90.7%) : total 29.79s : rest 2.77s : 2018/05/12 20:32:56 wh : 307200/307200(100.0%) : fin 27.08s frm : 300/300(100.0%) : fin 2h 33m 32.76s $ ./skill.sh $ ls -lt out_v37/ | head -rw-r--r-- 1 kondoh staff 2994817 5 12 21:31 rxs_check_1.mp4 -rw-r--r-- 1 kondoh staff 3165126 5 12 20:32 rxs_check.mp4 :
実際には2時間半でした。
生成した動画サイズが微妙に3Mを超えてたので、 自動的に3Mバイトに分割する処理が入りましたが、、、 展開してまとめなおしただけで、ファイルサイズが3M以内になったようです。
jpegで不可逆な圧縮をしてると、まぁそういう事もあるのかな。
続いて画像をマッピングする前にコピーする方式の場合。
$ ./cg.py eyep=[0,0,0],[40,40,10],10 sec=10 data_name=rxs_check2 name=out_v37/rxs_check2_tst fps=10 div=4 : wh : 15251/19200(79.4%) : total 1.31s : rest 0.27s : 2018/05/12 17:35:16 wh : 19200/19200(100.0%) : fin 1.32s frm : 100/100(100.0%) : fin 2m 23.70s estimated 1.92 hour at 640*480 30fps $ ls -lt out_v37/ | head -rw-r--r-- 1 kondoh staff 536321 5 12 17:35 rxs_check2_tst.mp4 :
$ ./cg.py eyep=[0,0,0],[40,40,10],10 sec=10 data_name=rxs_check2 name=out_v37/rxs_check2 : wh : 278271/307200(90.6%) : total 28.55s : rest 2.68s : 2018/05/13 00:13:13 wh : 307200/307200(100.0%) : fin 25.93s frm : 300/300(100.0%) : fin 2h 34m 43.47s $ ./skill.sh $ ls -lt out_v37/ | head -rw-r--r-- 1 kondoh staff 1404207 5 13 00:13 rxs_check2.mp4 :
こちらも予想時間を超えて2時間半程度でした。
ファイルサイズは1.5M弱。 こういう画像(?)だと、動画ファイルのサイズが小さくなるようです。
では、続きの10秒
$ ./cg.py eyep=[0,0,0],[40,40,10],10 sec=10 data_name=rxs_check2 name=out_v37/rxs_check2_2 init_sec=10 : wh : 270609/307200(88.1%) : total 17.28s : rest 2.05s : 2018/05/13 06:31:52 wh : 307200/307200(100.0%) : fin 15.30s frm : 300/300(100.0%) : fin 2h 28m 55.50s $ ./skill.sh $ ls -l out_v37/ | head -rw-r--r-- 1 kondoh staff 1182585 5 13 06:31 rxs_check2_2.mp4 :
合わせて20秒に
$ rm -rf /tmp/img_wk/ttt $ mkdir -p /tmp/img_wk/ttt $ ./img.py /tmp/img_wk/ttt/a0 out_v37/rxs_check2.mp4 cmd=v2i $ ./img.py /tmp/img_wk/ttt/a1 out_v37/rxs_check2_2.mp4 cmd=v2i $ ./img.py /tmp/img_wk/ttt/a out_v37/rxs_check2_sum.mp4 cmd=i2v $ ls -l out_v37/rxs_check2_sum.mp4 -rw-r--r-- 1 kondoh staff 2348114 5 13 09:37 out_v37/rxs_check2_sum.mp4
20秒でも余裕でファイルサイズ3Mバイト以内でした。