さらにもう少しC言語で

拡散光の強さを算出する処理のところまで、別プロセスにやらせてみます。

データの拡散の係数や、複数の光源の情報を渡さねばならなりません。 可変長なデータのやりとりが出てきて、結構な変更量となりました。

v25.patch

今回は遠目の視点で試してみます。

$ cat v25.patch | ( cd rt ; patch -p1 )

$ cd rt

$ make clean
$ make
gcc -Wall   -c -o sock.o sock.c
gcc -Wall   -c -o rt.o rt.c
gcc -Wall   -c -o cross.o cross.c
gcc -Wall   -c -o lstx.o lstx.c
gcc -Wall   -c -o ax.o ax.c
gcc -Wall   -c -o cylx.o cylx.c
gcc -Wall   -c -o fcx.o fcx.c
gcc -Wall   -c -o vecs.o vecs.c
gcc -Wall   -c -o line.o line.c
gcc -Wall   -c -o v.o v.c
gcc -Wall   -c -o mt.o mt.c
gcc -o sock sock.o rt.o cross.o lstx.o ax.o cylx.o fcx.o vecs.o line.o v.o mt.o -lm

$ ./cg.py eyep=[0,0,0],400,10 sec=10 data_name=ball_world2 name=out_v25/bw2_long_wf wf

$ ./cg.py eyep=[0,0,0],400,10 sec=10 data_name=ball_world2 name=out_v25/bw2_long div=2 use_srv srv_c
  :
wh : 75775/76800(98.7%) : total 50.69s : rest 0.67s : 2018/04/20 06:02:32
wh : 76800/76800(100.0%) : fin 50.66s
frm : 300/300(100.0%) : fin 3h 53m 0.30s

そして、いつものデータで速度比較。

まず従来方式

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v25/objs_1_2 n=1 init_sec=5 div=2
  :
wh : 76764/76800(100.0%) : total 7m 51.10s : rest 0.22s : 2018/04/20 09:17:53
wh : 76800/76800(100.0%) : fin 7m 50.96s

  以前の
  v24  wh : 76800/76800(100.0%) : fin 7m 44.42s
  v23  wh : 76800/76800(100.0%) : fin 7m 48.33s

サーバプロセス分離版

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v25/objs_1_2_s n=1 init_sec=5 div=2 use_srv
  :
wh : 76693/76800(99.9%) : total 9m 35.41s : rest 0.80s : 2018/04/20 09:29:17
wh : 76800/76800(100.0%) : fin 9m 34.91s

  以前の
  v24  wh : 76800/76800(100.0%) : fin 9m 38.24s
  v23  wh : 76800/76800(100.0%) : fin 9m 9.07s

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

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v25/objs_1_2_sc n=1 init_sec=5 div=2 use_srv srv_c
  :
wh : 72244/76800(94.1%) : total 56.39s : rest 3.34s : 2018/04/20 09:32:56
wh : 76800/76800(100.0%) : fin 53.95s

  以前の
  v24  wh : 76800/76800(100.0%) : fin 54.07s
  v23  wh : 76800/76800(100.0%) : fin 1m 50.29s

まぁ、さほど変わらずですね。

平面マッピング版の方でも、視点接近コースをゆっくり目で走らせてみます。

$ ./cg.py eyep=[0,0,0],50,20 sec=10 data_name=ball_world name=out_v25/bw_near_2 div=2 use_srv srv_c
  :
wh : 76463/76800(99.6%) : total 2m 2.65s : rest 0.53s : 2018/04/20 19:47:13
wh : 76800/76800(100.0%) : fin 2m 2.54s
frm : 300/300(100.0%) : fin 9h 53m 50.62s

約10時間でした。

黒っぽい球にメーター表示。 むかーし小学校の頃見た、 松本零士大先生の「ダイバーゼロ」に、 確かこんな球体が出てきた覚えがあります。