前回のv49で、角柱と角すいで試したときの変な挙動を修正してみました。
結構根深い問題で、根本的に勘違いしてる箇所がありました。
例えば、球の表面の法線ベクトルは、中心から表面までのベクトルの方向にしてます。
アフィン変換で球をひしゃげさせたとしても、 法線ベクトルにも同じアフィン変換をかけて、ひしゃげさせて使ってます。
球は、おそらくこれで問題ないでしょう。
角すいの斜めな側面の平面について。
平面上の表面の法線ベクトルは、平面の法線の方向にしてます。
アフィン変換で角すいをひしゃげさせたとき、 球の時と同様に法線ベクトルにも同じアフィン変換をかけて、ひしゃげさせておりました。
/ . / . / . / / / / /
つまり、こういう斜めの直線と、直行する法線ベクトルがあったとして 横方向に押しつぶすと
/ . / . / ./ / / / /
直行じゃなくなります。
/ / .. / ../ / / / /
図がアレですが、押しつぶした後も直線に対して直行してほしいのです。
という理屈からすると、 円柱や円すいの側面も、例えば回転で斜めに倒してから上下に押しつぶすようなアフィン変換をかけると、 まずい気がします...
ですが、とりあえず、平面の場合だけ修正して試してみます。
$ mv rt_v49 rt_v50 $ cat v50.patch | ( cd rt_v50 ; patch -p1 ) $ cd rt_v50 $ make clean $ make
では、いつもの速度確認。
$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v50/objs_1_2_sc n=1 init_sec=5 div=2 : wh : 76800/76800(100.0%) : fin 3.03s
以前の v48 wh : 76800/76800(100.0%) : fin 3.11s v47 wh : 76800/76800(100.0%) : fin 3.04s v45 wh : 76800/76800(100.0%) : fin 3.00s v43 wh : 76800/76800(100.0%) : fin 2.96s v42 wh : 76800/76800(100.0%) : fin 3.16s v39 wh : 76800/76800(100.0%) : fin 15.37s v38 wh : 76800/76800(100.0%) : fin 15.09s v37 wh : 76800/76800(100.0%) : fin 15.49s 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
まずはop2.yamlの円柱、円すいで
$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op2.yaml data_name=all name=out_v50/op2ck fps=1 : wh : 307200/307200(100.0%) : fin 11.04s frm : 20/20(100.0%) : fin 4m 32.99s estimated 2.27 hour at 640*480 30fps $ ls -lt out_v50/ | head -rw-r--r-- 1 kondoh staff 668844 6 12 00:17 op2ck.mp4 -rw-r--r-- 1 kondoh staff 63314 6 12 00:17 op2ck00020.jpg -rw-r--r-- 1 kondoh staff 67621 6 12 00:17 op2ck00019.jpg -rw-r--r-- 1 kondoh staff 63586 6 12 00:17 op2ck00018.jpg -rw-r--r-- 1 kondoh staff 101408 6 12 00:16 op2ck00017.jpg -rw-r--r-- 1 kondoh staff 93465 6 12 00:16 op2ck00016.jpg -rw-r--r-- 1 kondoh staff 73056 6 12 00:16 op2ck00015.jpg -rw-r--r-- 1 kondoh staff 88722 6 12 00:16 op2ck00014.jpg -rw-r--r-- 1 kondoh staff 50637 6 12 00:16 op2ck00013.jpg
大丈夫そうですね。
そしてop3.yamlの16角柱、16角柱すい
$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op3.yaml data_name=all name=out_v50/op3 : wh : 289697/307200(94.3%) : total 21.32s : rest 1.21s : 2018/06/12 06:06:35 wh : 307200/307200(100.0%) : fin 20.15s frm : 600/600(100.0%) : fin 5h 40m 58.89s $ ls -lt out_v50/ | head -rw-r--r-- 1 kondoh staff 1560496 6 12 06:08 op3_2.mp4 -rw-r--r-- 1 kondoh staff 3142729 6 12 06:08 op3_1.mp4 -rw-r--r-- 1 kondoh staff 5021109 6 12 06:06 op3.mp4 :
5時間40分。OKです。
今回のパッチに、しれっと視点移動の箇所に変更というか、指定の追加を入れてみました。
物体の方でリサージュな動きをさせたときに、視点も合わせて追随しやすいかと。
コインのデータで試してみます。
最後尾のコインのさらに後ろに11個目のコインがある場合の位置に視点をもってきて、 最後尾のコインを目標にして視線を設定してみました。
ジェットコースターの後からの眺めを狙ってみましたが、はたして?
$ ./cg.py ep=[-20,-20,-20],[20,20,20],[3,4,5],-3 et=[-20,-20,-20],[20,20,20],[3,4,5],-2.7 sec=20 yaml=spin_coin.yaml data_name=all name=out_v50/coin : wh : 290213/307200(94.5%) : total 9.08s : rest 0.50s : 2018/06/12 11:10:49 wh : 307200/307200(100.0%) : fin 8.62s frm : 600/600(100.0%) : fin 1h 44m 44.07s ls -lt out_v50/ | head -rw-r--r-- 1 kondoh staff 3049291 6 12 11:11 coin_1.mp4 -rw-r--r-- 1 kondoh staff 3170370 6 12 11:10 coin.mp4 : 1時間45分。 久々に、3Mバイトを超えてるけど、展開してまとめなおすと3Mバイトに収まるパターンでした。
ジェットコースター。激し過ぎて何が何やら、、、