デグレなおしときます(その5)

前回の デグレなおしときます(その4) の最後で 物体を動かす の dat6.yaml で柱が1本しかありませんでした。

またしても昔のデータが、いつのまにか正しく表示できなくなってます。 バージョンをさかのぼっていくと、v51 から v52 でこの現象が出るようになっていました。

v52.patch の内容は盛りだくさんでしたが、、、 v52 で dat.py だけ v51 に戻すと、柱一本現象はでませんでした。

$ cat v52.patch
  :
--- rt_v51/dat.py	2018-06-14 01:39:46.000000000 +0900
+++ rt_v52/dat.py	2018-06-15 21:57:23.000000000 +0900
@@ -34,28 +34,18 @@
 		v = val.cli.geti(v)
 	d[k] = v
 
-ds_copy	= lambda ds: ut.map_lst( lambda d: d.copy(), ds )
-
-def ds_copy_k(d, k):
-	if k in d:
-		d[k] = ds_copy( d.get(k, []) )
-
 def lst_copy_r(lst):
 	return ut.map_lst( lambda v: lst_copy_r(v) if type(v) == list else v, lst )
 
-def lst_copy_k(d, k):
+def k_update_if_has(d, k, update_func):
 	if k in d:
-		d[k] = lst_copy_r( d.get(k) )
+		d[k] = update_func( d.get(k) )
 
 def d_copy(d):
 	d = d.copy()
-	ds_copy_k(d, 'maps')
-	lst_copy_k(d, 'rxs')
-
-	k = 'args'
-	if k in d:
-		d[k] = ut.map_lst( d_copy, d.get(k) )
-
+	k_update_if_has( d, 'maps', lambda lst: ut.map_lst( lambda d: d.copy(), lst ) )
+	k_update_if_has( d, 'rxs', lst_copy_r )
+	k_update_if_has( d, 'args', lambda lst: ut.map_lst( d_copy, lst ) )
 	return d
 
 def m_setup(d, m):
@@ -377,11 +367,35 @@
 		return ret_lst( [d0,d1], f )
 	###
 
+	if kind == 'exports':
+		lst = []
+		exports = if_has_pop(d, 'exports', [])
+		for export in exports:
+			d_ = d_copy(d)
+			d_['kind'] = 'export'
+			d_['export'] = export
+			lst.append(d_)
+		return data_setup_exp( lst, in_op )
+
 	if kind == 'export':
 		lst = ydic.get( if_has_pop(d, 'export', ''), [] )
-		d['kind'] = 'or'
-		d['args'] = lst
-		return d_setup(d, in_op)
+		lst = ut.map_lst( d_copy, lst )
+
+		l2g = if_has_pop(d, 'l2m', []) + if_has_pop(d, 'm2g', [])
+
+		for d_ in lst:
+			d_['maps'] = d_.get('maps', []) + d.get('maps', [])
+
+			for k in [ 'def_col', 'def_col_r', 'rtd' ]:
+				if k not in d_ and k in d:
+					d_[k] = d.get(k)
+
+			if d.get('not', False):
+				d_['not'] = not d_.get('not', False)
+
+			d_['m2g'] = d_.get('m2g', []) + l2g
+
+		return data_setup_exp( lst, in_op )
 	###
 
 	if 'rxs' in d:
@@ -411,8 +425,12 @@
 
 		ds = []
 		for d_ in args:
-			#d_['m2g'] = d_.get('m2g', []) + l2g
 			d_['maps'] = d_.get('maps', []) + d.get('maps', [])
+
+			for k in [ 'def_col', 'def_col_r', 'rtd' ]:
+				if k not in d_ and k in d:
+					d_[k] = d.get(k)
+
 			ds += d_setup(d_, True)
 
 		if 'children' not in d: # !
@@ -446,15 +464,15 @@
 			d_['m2g'] = d_.get('m2g', []) + l2g
 			setup_m2g(data, d_)
 
-def setup_kind(d):
+def setup_etc(d):
+	# kind
 	if not val.cli.has_prop('kinds'):
 		val.cli.set_prop( 'kinds', '[str]', kinds )
 	kind = d.get('kind')
 	if type(kind) != int:
 		d['kind'] = kinds.index(kind)
-	return d
 
-def setup_ids(d):
+	# ids
 	k = 'id'
 	if k not in d:
 		d[k] = get_id()
@@ -464,16 +482,14 @@
 	k = 'children'
 	if k not in d:
 		d[k] = []
-	return d
 
-def setup_def_col(d):
+	# def_col
 	if 'def_col' not in d:
 		d['def_col'] = [128,128,128]
 	if 'def_col_r' not in d:
 		d['def_col_r'] = d.get('def_col')
-	return d
 
-def setup_rtd(d):
+	# rtd
 	def_rtd = { 'base': 0.3, 'diff': 0.9, 'reflect': 0, 'reflact': 0, 'density': 1.0, 'reflect_backside': False }
 	if 'rtd' not in d:
 		d['rtd'] = def_rtd
@@ -481,19 +497,18 @@
 	for k in def_rtd.keys():
 		if k not in rtd:
 			rtd[k] = def_rtd.get(k)
-	return d
 
-def setup_not_hide(d):
+	# not hide
 	for k in ['not', 'hide']:
 		if k not in d:
 			d[k] = False # default
-	return d
 
-def setup_maps(d):
+	# maps
 	if 'maps' not in d:
 		d['maps'] = []
 	for m in d.get('maps'):
 		m_setup(d, m)
+
 	return d
 
 def setup_opt(d):
@@ -512,6 +527,7 @@
 	data_name = ut.arg_s('data_name', 'copen')
 	fn = ut.arg_s('yaml', 'dat.yaml')
 	yd = ut.yaml_load(fn, {})
+	yd = ut.defs_str_replace(yd)
 	yd = ut.defs_eval(yd)
 	yd = tm_sft_copy(yd)
 
@@ -527,12 +543,7 @@
 
 	#print('data={}'.format( ut.yaml_dump( ut.dic_to_items(data) ) ) )
 
-	data = ut.map_lst( setup_kind, data )
-	data = ut.map_lst( setup_ids, data )
-	data = ut.map_lst( setup_def_col, data )
-	data = ut.map_lst( setup_rtd, data )
-	data = ut.map_lst( setup_not_hide, data )
-	data = ut.map_lst( setup_maps, data )
+	data = ut.map_lst( setup_etc, data )
 	data = setup_eval_ax(data, sec)
 	data = ut.map_lst( setup_opt, data )
 
  :

dat.py それでも盛りだくさん。 関係なさそうなところから、部分的に v52 に戻していってみます。

--- dat.py-m1	2018-07-16 14:26:59.000000000 +0900
+++ dat.py-v52	2018-06-15 21:57:23.000000000 +0900
@@ -34,28 +34,18 @@
 		v = val.cli.geti(v)
 	d[k] = v
 
-ds_copy	= lambda ds: ut.map_lst( lambda d: d.copy(), ds )
-
-def ds_copy_k(d, k):
-	if k in d:
-		d[k] = ds_copy( d.get(k, []) )
-
 def lst_copy_r(lst):
 	return ut.map_lst( lambda v: lst_copy_r(v) if type(v) == list else v, lst )
 
-def lst_copy_k(d, k):
+def k_update_if_has(d, k, update_func):
 	if k in d:
-		d[k] = lst_copy_r( d.get(k) )
+		d[k] = update_func( d.get(k) )
 
 def d_copy(d):
 	d = d.copy()
-	ds_copy_k(d, 'maps')
-	lst_copy_k(d, 'rxs')
-
-	k = 'args'
-	if k in d:
-		d[k] = ut.map_lst( d_copy, d.get(k) )
-
+	k_update_if_has( d, 'maps', lambda lst: ut.map_lst( lambda d: d.copy(), lst ) )
+	k_update_if_has( d, 'rxs', lst_copy_r )
+	k_update_if_has( d, 'args', lambda lst: ut.map_lst( d_copy, lst ) )
 	return d
 
 def m_setup(d, m):
@@ -377,11 +367,35 @@
 		return ret_lst( [d0,d1], f )
 	###
 
+	if kind == 'exports':
+		lst = []
+		exports = if_has_pop(d, 'exports', [])
+		for export in exports:
+			d_ = d_copy(d)
+			d_['kind'] = 'export'
+			d_['export'] = export
+			lst.append(d_)
+		return data_setup_exp( lst, in_op )
+
 	if kind == 'export':
 		lst = ydic.get( if_has_pop(d, 'export', ''), [] )
-		d['kind'] = 'or'
-		d['args'] = lst
-		return d_setup(d, in_op)
+		lst = ut.map_lst( d_copy, lst )
+
+		l2g = if_has_pop(d, 'l2m', []) + if_has_pop(d, 'm2g', [])
+
+		for d_ in lst:
+			d_['maps'] = d_.get('maps', []) + d.get('maps', [])
+
+			for k in [ 'def_col', 'def_col_r', 'rtd' ]:
+				if k not in d_ and k in d:
+					d_[k] = d.get(k)
+
+			if d.get('not', False):
+				d_['not'] = not d_.get('not', False)
+
+			d_['m2g'] = d_.get('m2g', []) + l2g
+
+		return data_setup_exp( lst, in_op )
 	###
 
 	if 'rxs' in d:
@@ -411,8 +425,12 @@
 
 		ds = []
 		for d_ in args:
-			#d_['m2g'] = d_.get('m2g', []) + l2g
 			d_['maps'] = d_.get('maps', []) + d.get('maps', [])
+
+			for k in [ 'def_col', 'def_col_r', 'rtd' ]:
+				if k not in d_ and k in d:
+					d_[k] = d.get(k)
+
 			ds += d_setup(d_, True)
 
 		if 'children' not in d: # !
@@ -509,6 +527,7 @@
 	data_name = ut.arg_s('data_name', 'copen')
 	fn = ut.arg_s('yaml', 'dat.yaml')
 	yd = ut.yaml_load(fn, {})
+	yd = ut.defs_str_replace(yd)
 	yd = ut.defs_eval(yd)
 	yd = tm_sft_copy(yd)
 

この dat.py-m1 の状態でも、柱一本現象は出ません。

--- dat.py-m3	2018-07-16 14:43:29.000000000 +0900
+++ dat.py-v52	2018-06-15 21:57:23.000000000 +0900
@@ -367,11 +367,35 @@
 		return ret_lst( [d0,d1], f )
 	###
 
+	if kind == 'exports':
+		lst = []
+		exports = if_has_pop(d, 'exports', [])
+		for export in exports:
+			d_ = d_copy(d)
+			d_['kind'] = 'export'
+			d_['export'] = export
+			lst.append(d_)
+		return data_setup_exp( lst, in_op )
+
 	if kind == 'export':
 		lst = ydic.get( if_has_pop(d, 'export', ''), [] )
-		d['kind'] = 'or'
-		d['args'] = lst
-		return d_setup(d, in_op)
+		lst = ut.map_lst( d_copy, lst )
+
+		l2g = if_has_pop(d, 'l2m', []) + if_has_pop(d, 'm2g', [])
+
+		for d_ in lst:
+			d_['maps'] = d_.get('maps', []) + d.get('maps', [])
+
+			for k in [ 'def_col', 'def_col_r', 'rtd' ]:
+				if k not in d_ and k in d:
+					d_[k] = d.get(k)
+
+			if d.get('not', False):
+				d_['not'] = not d_.get('not', False)
+
+			d_['m2g'] = d_.get('m2g', []) + l2g
+
+		return data_setup_exp( lst, in_op )
 	###
 
 	if 'rxs' in d:

この dat.py-m3 の状態でも、柱一本現象は出ません。

--- dat.py-m4	2018-07-16 14:47:21.000000000 +0900
+++ dat.py-v52	2018-06-15 21:57:23.000000000 +0900
@@ -379,9 +379,23 @@
 
 	if kind == 'export':
 		lst = ydic.get( if_has_pop(d, 'export', ''), [] )
-		d['kind'] = 'or'
-		d['args'] = lst
-		return d_setup(d, in_op)
+		lst = ut.map_lst( d_copy, lst )
+
+		l2g = if_has_pop(d, 'l2m', []) + if_has_pop(d, 'm2g', [])
+
+		for d_ in lst:
+			d_['maps'] = d_.get('maps', []) + d.get('maps', [])
+
+			for k in [ 'def_col', 'def_col_r', 'rtd' ]:
+				if k not in d_ and k in d:
+					d_[k] = d.get(k)
+
+			if d.get('not', False):
+				d_['not'] = not d_.get('not', False)
+
+			d_['m2g'] = d_.get('m2g', []) + l2g
+
+		return data_setup_exp( lst, in_op )
 	###
 
 	if 'rxs' in d:

この dat.py-m4 の状態でも、柱一本現象は出ません。

むむむと唸って、これでどうか?

--- dat.py-v52	2018-06-15 21:57:23.000000000 +0900
+++ dat.py	2018-07-16 16:47:01.000000000 +0900
@@ -386,7 +386,8 @@
 		for d_ in lst:
 			d_['maps'] = d_.get('maps', []) + d.get('maps', [])
 
-			for k in [ 'def_col', 'def_col_r', 'rtd' ]:
+			#for k in [ 'def_col', 'def_col_r', 'rtd' ]:
+			for k in [ 'def_col', 'def_col_r', 'rtd', 'rxs', 'tsc' ]:
 				if k not in d_ and k in d:
 					d_[k] = d.get(k)
 
@@ -427,7 +428,8 @@
 		for d_ in args:
 			d_['maps'] = d_.get('maps', []) + d.get('maps', [])
 
-			for k in [ 'def_col', 'def_col_r', 'rtd' ]:
+			#for k in [ 'def_col', 'def_col_r', 'rtd' ]:
+			for k in [ 'def_col', 'def_col_r', 'rtd', 'rxs', 'tsc' ]:
 				if k not in d_ and k in d:
 					d_[k] = d.get(k)
 

とりあえず、v52 + 「dat.py に、このパッチの変更」で、柱一本現象は消えました。

が、外側に配置する柱が消えてます。 ということは、'rxs' こうすべしか?

--- dat.py-v52	2018-06-15 21:57:23.000000000 +0900
+++ dat.py	2018-07-16 17:18:00.000000000 +0900
@@ -386,9 +386,13 @@
 		for d_ in lst:
 			d_['maps'] = d_.get('maps', []) + d.get('maps', [])
 
-			for k in [ 'def_col', 'def_col_r', 'rtd' ]:
+			for k in [ 'def_col', 'def_col_r', 'rtd', 'tsc' ]:
 				if k not in d_ and k in d:
 					d_[k] = d.get(k)
+			k = 'rxs'
+			v = d_.get(k, []) + d.get(k, [])
+			if v:
+				d_[k] = v
 
 			if d.get('not', False):
 				d_['not'] = not d_.get('not', False)
@@ -427,9 +431,13 @@
 		for d_ in args:
 			d_['maps'] = d_.get('maps', []) + d.get('maps', [])
 
-			for k in [ 'def_col', 'def_col_r', 'rtd' ]:
+			for k in [ 'def_col', 'def_col_r', 'rtd', 'tsc' ]:
 				if k not in d_ and k in d:
 					d_[k] = d.get(k)
+			k = 'rxs'
+			v = d_.get(k, []) + d.get(k, [])
+			if v:
+				d_[k] = v
 
 			ds += d_setup(d_, True)
 

OK

では、v62 の dat.py に反映できるだろうか?

  :
			for k in [ 'def_col', 'def_col_r', 'rtd', 'hide' ]:
				if k not in d_ and k in d:
					d_[k] = d.get(k)
  :
			for k in [ 'def_col', 'def_col_r', 'rtd', 'hide' ]:
				if k not in d_ and k in d:
					d_[k] = d.get(k)
  :

'hide' が増えてるので手動パッチ、、、というか関数追加で。

v63.patch

$ mv rt_v62 rt_v63
$ cat v63.patch | ( cd rt_v63 ; patch -p1 )
$ cd rt_v63
$ make clean
$ make

それでは、またまたまたしてもリテイク

物体を動かす

$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=dat6.yaml data_name=all name=out_v63/dat6
  :
wh : 307200/307200(100.0%) : fin 1m 13.76s
frm : 600/600(100.0%) : fin 13h 19m 43.63s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff  2604816  7 17 06:46 dat6_2.mp4
-rw-r--r--  1 kondoh  staff  3141001  7 17 06:46 dat6_1.mp4
-rw-r--r--  1 kondoh  staff  6123904  7 17 06:44 dat6.mp4
  :

時間をズラして分身

$ ./cg.py eyep=[0,0,0],[200,200,100],10 sec=20 yaml=spin_coin.yaml data_name=all name=out_v63/coin
  :
wh : 307200/307200(100.0%) : fin 8.45s
frm : 600/600(100.0%) : fin 1h 46m 31.09s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   302066  7 17 08:45 coin_2.mp4
-rw-r--r--  1 kondoh  staff  3140043  7 17 08:45 coin_1.mp4
-rw-r--r--  1 kondoh  staff  3657923  7 17 08:43 coin.mp4
  :

パックマンもどき(その3)

フレームレートを半分に落とし、視線の動きも同じ起動を半分の速度で移動するようにして、2倍の時間回してみます。

$ ./pac_dat.py
$ ( cd pac ; wget http://kondoh2.html.xdomain.jp/rt/pac.log )
$ ./pac_dat.py
$ ./cg.py eyep=[0,0,20],[50,50,10],40 sec=60 yaml=pac.yaml data_name=all name=out_v63/pac_ fps=15
  :
wh : 307200/307200(100.0%) : fin 33.11s
frm : 900/900(100.0%) : fin 12h 41m 7.26s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   2158299  7 17 21:54 pac__7.mp4
-rw-r--r--  1 kondoh  staff   3132028  7 17 21:54 pac__6.mp4
-rw-r--r--  1 kondoh  staff   3141886  7 17 21:53 pac__5.mp4
-rw-r--r--  1 kondoh  staff   3143388  7 17 21:51 pac__4.mp4
-rw-r--r--  1 kondoh  staff   3120757  7 17 21:50 pac__3.mp4
-rw-r--r--  1 kondoh  staff   3132163  7 17 21:48 pac__2.mp4
-rw-r--r--  1 kondoh  staff   3137626  7 17 21:46 pac__1.mp4
-rw-r--r--  1 kondoh  staff  22040473  7 17 21:44 pac_.mp4
  :

フレームレート2倍でまとめなおすと

$ ./img.py out_v63/pac_ out_v63/pac_2_

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff  17186069  7 17 22:15 pac_2_.mp4
  :

$ ./img.py dmy out_v63/pac_2_ cmd=div3M
$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   3090785  7 17 22:24 pac_2__5.mp4
-rw-r--r--  1 kondoh  staff   3129317  7 17 22:24 pac_2__4.mp4
-rw-r--r--  1 kondoh  staff   3133256  7 17 22:22 pac_2__3.mp4
-rw-r--r--  1 kondoh  staff   3140700  7 17 22:21 pac_2__2.mp4
-rw-r--r--  1 kondoh  staff   3140071  7 17 22:18 pac_2__1.mp4
-rw-r--r--  1 kondoh  staff  17186069  7 17 22:15 pac_2_.mp4
  :

スポーツカー

$ ./cg.py eyep=[0,0,0],[130,90,30],10 sec=20 yaml=cool_car_r.yaml data_name=all name=out_v63/car_
  :
wh : 307200/307200(100.0%) : fin 20.68s
frm : 600/600(100.0%) : fin 4h 40m 49.07s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff     93790  7 18 03:11 car__2.mp4
-rw-r--r--  1 kondoh  staff   3143130  7 18 03:11 car__1.mp4
-rw-r--r--  1 kondoh  staff   3457662  7 18 03:08 car_.mp4
  :

カットモデル

$ ./cg.py eyep=[0,0,0],[130,90,30],10 sec=20 yaml=cool_car_cut.yaml data_name=all name=out_v63/cut
  :
wh : 307200/307200(100.0%) : fin 26.74s
frm : 600/600(100.0%) : fin 14h 48m 30.79s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   3099597  7 18 18:49 cut.mp4
  :

角柱と角すいもAND,OR,XOR演算

$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op3.yaml data_name=all name=out_v63/op3
  :
wh : 307200/307200(100.0%) : fin 17.84s
frm : 600/600(100.0%) : fin 4h 24m 14.44s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff    237760  7 19 00:12 op3_2.mp4
-rw-r--r--  1 kondoh  staff   3142849  7 19 00:12 op3_1.mp4
-rw-r--r--  1 kondoh  staff   3591257  7 19 00:09 op3.mp4
  :

円柱と円すいもAND,OR,XOR演算

$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op2.yaml data_name=all name=out_v63/op2
  :
wh : 307200/307200(100.0%) : fin 8.95s
frm : 600/600(100.0%) : fin 2h 1m 9.71s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff    692809  7 19 02:57 op2_2.mp4
-rw-r--r--  1 kondoh  staff   3145302  7 19 02:57 op2_1.mp4
-rw-r--r--  1 kondoh  staff   4043059  7 19 02:55 op2.mp4
  :

球と立方体のAND,OR,XOR演算

$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op.yaml data_name=all name=out_v63/op
  :
wh : 307200/307200(100.0%) : fin 17.59s
frm : 600/600(100.0%) : fin 3h 55m 51.45s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   2560908  7 19 07:13 op_2.mp4
-rw-r--r--  1 kondoh  staff   3142406  7 19 07:13 op_1.mp4
-rw-r--r--  1 kondoh  staff   6100632  7 19 07:11 op.mp4
  :

物体のAND演算

$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=and.yaml data_name=all name=out_v63/and
  :
wh : 307200/307200(100.0%) : fin 13.45s
frm : 600/600(100.0%) : fin 2h 28m 51.68s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   1400177  7 19 09:58 and_2.mp4
-rw-r--r--  1 kondoh  staff   3138361  7 19 09:58 and_1.mp4
-rw-r--r--  1 kondoh  staff   4812840  7 19 09:55 and.mp4
  :

物体データの展開処理順の修正

$ ./cg.py eyep=[0,0,0],[450,450,150],10 sec=10 yaml=dat4.yaml data_name=all name=out_v63/fix
  :
wh : 307200/307200(100.0%) : fin 1m 34.02s
frm : 300/300(100.0%) : fin 9h 7m 11.56s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   2910930  7 19 19:13 fix.mp4
  :

物体データをデータファイルに分離

$ wget http://kondoh2.html.xdomain.jp/rt/dat3.yaml
$ wget http://kondoh2.html.xdomain.jp/rt/noshi.jpg

$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=10 yaml=dat3.yaml data_name=colosseum name=out_v63/noshi
  :
wh : 307200/307200(100.0%) : fin 24.59s
frm : 300/300(100.0%) : fin 2h 50m 13.45s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff    743710  7 19 22:39 noshi_2.mp4
-rw-r--r--  1 kondoh  staff   3143590  7 19 22:39 noshi_1.mp4
-rw-r--r--  1 kondoh  staff   4292202  7 19 22:38 noshi.mp4
  :

分身関連のバグ修正

$ ./cg.py eyep=[0,0,0],[300,300,60],10 sec=10 data_name=colosseum2 name=out_v63/col2
  :
wh : 307200/307200(100.0%) : fin 5m 21.01s
frm : 300/300(100.0%) : fin 30h 22m 0.94s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   2872434  7 21 10:07 col2.mp4
  :

$ ./cg.py eyep=[0,0,0],[200,200,40],10 sec=10 data_name=colosseum name=out_v63/col
  :
wh : 307200/307200(100.0%) : fin 12.24s
frm : 300/300(100.0%) : fin 1h 12m 58.99s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   1941306  7 21 14:22 col.mp4
  :

既存のデータを取り込んで配置

$ ./cg.py eyep=[0,0,0],[200,200,20],10 sec=10 data_name=export_test3 name=out_v63/exp3
  :
wh : 307200/307200(100.0%) : fin 9.18s
frm : 300/300(100.0%) : fin 46m 58.87s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff    101644  7 21 17:25 exp3.mp4
  :

こ、これは...!?

1つのレイトレサーバに複数のスレッドで繋ぎにいってみる

$ ./cg.py eyep=[0,0,-20],[40,40,5],10 sec=20 data_name=rxs_check2 name=out_v63/rxs_check2
  :
wh : 307200/307200(100.0%) : fin 8.62s
frm : 600/600(100.0%) : fin 1h 35m 54.90s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   2836688  7 21 19:14 rxs_check2.mp4
  :

チェスボードの上に透明の球

$ ./cg.py eyep=[0,0,0],[40,40,10],10 sec=20 data_name=rxs_check2 name=out_v63/rxs_check2_
  :
wh : 307200/307200(100.0%) : fin 7.46s
frm : 600/600(100.0%) : fin 1h 34m 13.70s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   2582099  7 21 22:38 rxs_check2_.mp4
  :

$ ./cg.py eyep=[0,0,0],[40,40,10],10 sec=10 data_name=rxs_check name=out_v63/rxs_check
  :
wh : 307200/307200(100.0%) : fin 8.67s
frm : 300/300(100.0%) : fin 46m 1.86s

ls -lt out_v63/ | head
total 1642728
-rw-r--r--  1 kondoh  staff   2994817  7 21 23:26 rxs_check_1.mp4
-rw-r--r--  1 kondoh  staff   3165126  7 21 23:25 rxs_check.mp4
  :

サーバで一度に複数のピクセルを処理

$ ./cg.py eyep=[0,0,-5],[100,100,10],10 sec=20 data_name=objs name=out_v63/objs
  :
wh : 307200/307200(100.0%) : fin 9.96s
frm : 600/600(100.0%) : fin 2h 17m 6.22s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   3001980  7 22 05:17 objs_1.mp4
-rw-r--r--  1 kondoh  staff   3228799  7 22 05:17 objs.mp4
  :

動画書き込みも画像サーバの機能に追加

$ ./cg.py eyep=[0,0,12],[100,100,10],10 sec=10 data_name=objs name=out_v63/objs_
  :
wh : 307200/307200(100.0%) : fin 14.47s
frm : 300/300(100.0%) : fin 1h 28m 42.91s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   2364756  7 22 09:47 objs_.mp4
  :

徐々にC言語実装で侵略

$ ./cg.py eyep=[100,0,0],100,5 sec=10 data_name=ball_world name=out_v63/bw_2
  :
wh : 307200/307200(100.0%) : fin 8.18s
frm : 300/300(100.0%) : fin 47m 58.87s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   2060028  7 22 11:03 bw_2.mp4
  :

さらにもう少しC言語で

$ ./cg.py eyep=[0,0,0],50,20 sec=10 data_name=ball_world name=out_v63/bw_near_2
  :
wh : 307200/307200(100.0%) : fin 8.45s
frm : 300/300(100.0%) : fin 48m 31.82s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   1269168  7 22 12:06 bw_near_2.mp4
  :

画像の繰り返し展開

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=copen_rep name=out_v63/copen_rep
  :
wh : 307200/307200(100.0%) : fin 7.88s
frm : 300/300(100.0%) : fin 45m 13.48s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   3128521  7 22 13:09 copen_rep_1.mp4
-rw-r--r--  1 kondoh  staff    278589  7 22 13:09 copen_rep_2.mp4
-rw-r--r--  1 kondoh  staff   3738254  7 22 13:08 copen_rep.mp4
  :

データ追加

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=ball_world name=out_v63/bw2_full
  :
wh : 307200/307200(100.0%) : fin 10.40s
frm : 300/300(100.0%) : fin 47m 35.56s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   1475779  7 22 14:45 bw2_full.mp4
  :

別プロセスのところをC言語で実装

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v63/objs_full_sc
  :
wh : 307200/307200(100.0%) : fin 11.46s
frm : 300/300(100.0%) : fin 59m 56.72s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   2568762  7 22 18:37 objs_full_sc.mp4
  :

角錐のバグ修正

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=poly_n_pyramid name=out_v63/pn_pyramid2
  :
wh : 307200/307200(100.0%) : fin 10.13s
frm : 300/300(100.0%) : fin 49m 34.87s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   2314262  7 22 19:29 pn_pyramid2.mp4
  :

立方体の処理を追加してみる

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=cube name=out_v63/cube2
  :
wh : 307200/307200(100.0%) : fin 9.07s
frm : 300/300(100.0%) : fin 49m 41.98s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   2184284  7 22 20:37 cube2.mp4
  :

動画の貼り付け

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=ball name=out_v63/vmap4
  :
wh : 307200/307200(100.0%) : fin 8.58s
frm : 300/300(100.0%) : fin 47m 36.44s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   2297815  7 22 21:56 vmap4.mp4
  :

画像の貼り付け

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=copen name=out_v63/map2
  :
wh : 307200/307200(100.0%) : fin 8.68s
frm : 300/300(100.0%) : fin 47m 40.31s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff   1331932  7 22 22:56 map2.mp4
  :

屈折光

$ cat > refra.yaml
ref:
- kind: square
  m2g: [ ax.zoom_all(50) ]
- kind: ball
  def_col: [128,0,0]
  rtd: { base: 0.1, diff: 0, reflect: 0.5, reflact: 0.5, density: 2 }
  l2m: [ ax.zoom_all(20.0/50) ]
  m2g: [ ax.zoom_all(50) ]
^D
$ 

$ ./cg.py eyep=[0,0,0],200,10 sec=10 yaml=refra.yaml data_name=refra name=out_v63/reflact2
wh : 307200/307200(100.0%) : fin 8.51s
frm : 300/300(100.0%) : fin 47m 26.81s

$ ls -lt out_v63/ | head
-rw-r--r--  1 kondoh  staff    283935  7 22 23:50 reflact2.mp4
  :


工事中