もう少しC言語で

視線と物体の交点を求める処理を別サーバプロセスに切り出し、C言語で実装してみました。

もうちょっと先の分の処理まで。交点の法線を求めるところまで、サーバ側のC言語で面倒みさせてみます。

そして、円柱マッピングのところにあったバグも、ひっそりと改修。

v24.patch

まず従来方式

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

$ cd rt

$ make clean
$ make
gcc -Wall   -c -o sock.o sock.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 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],200,10 sec=10 data_name=objs name=out_v24/objs_1_2 n=1 init_sec=5 div=2
  :
wh : 76609/76800(99.8%) : total 7m 45.16s : rest 1.15s : 2018/04/18 21:27:07
wh : 76800/76800(100.0%) : fin 7m 44.42s

サーバプロセス分離版

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v24/objs_1_2_s n=1 init_sec=5 div=2 use_srv
  :
wh : 76579/76800(99.7%) : total 9m 39.30s : rest 1.66s : 2018/04/18 21:54:10
wh : 76800/76800(100.0%) : fin 9m 38.24s

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

$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v24/objs_1_2_sc n=1 init_sec=5 div=2 use_srv srv_c
  :
wh : 72244/76800(94.1%) : total 56.58s : rest 3.35s : 2018/04/18 21:57:43
wh : 76800/76800(100.0%) : fin 54.07s

別プロセスに切り出しのときの結果は

従来方式
wh : 76800/76800(100.0%) : fin 7m 48.33s

サーバプロセスに分離版
wh : 76800/76800(100.0%) : fin 9m 9.07s

サーバプロセスであんちょこファイルカンニング版
wh : 76800/76800(100.0%) : fin 1m 50.29s

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

wh : 76800/76800(100.0%) : fin 55.70s

まー、ほとんど以前の結果と変わらない感じですね。

法線を求める処理は、 交点を求めるときのように物体の数だけ処理するわけじゃなく、 交点の1つの物体についてだけなので、そんなところですかね。

$ ls -l out_v24/*.jpg
-rw-r--r--  1 kondoh  staff  29772  4 18 21:27 out_v24/objs_1_2.jpg
-rw-r--r--  1 kondoh  staff  29772  4 18 21:54 out_v24/objs_1_2_s.jpg
-rw-r--r--  1 kondoh  staff  29775  4 18 21:57 out_v24/objs_1_2_sc.jpg

円柱マッピングのデータで、ぐいっと接近した視点移動。 球や立方体の中に視点が入ったらどんな感じになるか試してみます。

$ ./cg.py eyep=[0,0,0],30,5 sec=10 data_name=ball_world2 name=out_v24/bw2_2_near div=2 use_srv srv_c
  :
wh : 76800/76800(100.0%) : fin 1m 55.91s
frm : 300/300(100.0%) : fin 11h 28m 25.60s

$ls -l out_v24/bw2_2_near.mp4 
-rw-r--r--  1 kondoh  staff  1849766  4 19 20:48 out_v24/bw2_2_near.mp4

11時間半。解像度半分で本来の1/4のピクセル数。フルなら44時間の予想。 接近すると、なかなか重いですね。

ちょっとぶん回し過ぎでよくわからんですね。 フレームレートを落としてみます。

$ ./img.py out_v24/bw2_2_near out_v24/bw2_2_near_fps10 fps=10 zm=2

むー。いまいち中に入ってる感がよく分かりませんね。