mrubyでaobenchを動かし、GIFアニメを出力できるようにした
こんばんは、奥さんが出張のため、またまた実家に来ています。3歳ともうすぐ5歳になる息子たちも一時期に比べ、電車での世田谷の自宅から、中野の実家までの移動も楽になってきたことを実感してます。@kjunichiです。
mrubyでaobenchを動かし、動画にする
静止画はつまらないので、高速化して、GIFアニメを出力できるようにした。
成果物
build_config.rb
conf.gem :github => 'kjunichi/mruby-aobench-native' conf.gem :github => 'kjunichi/mruby-mrmagick'
aoanim.rb
s0 = {:x => -2.0, :y => 0.0, :z => -3.5} s1 = {:x => -0.5, :y => 0.0, :z => -3.0} s2 = {:x => 1.0, :y => 0.0, :z => -2.2} gif = Mrmagick::ImageList.new for i in 1..50 Ao.init_scene(s0, s1, s2) img = Mrmagick::ImageList.new img.from_blob(Ao.render) gif.push img s0[:x] = s0[:x] + 0.1 s1[:x] = s1[:x] - 0.03 s1[:z] = s1[:z] + 0.08 s2[:x] = s2[:x] + 0.05 end gif.write("ao.gif")
aobenchのネイティブ化の成果
bm_ao_render.rbは256x256の出力サイズに変更済み。
$ time build/bench/bin/mruby benchmark/bm_ao_render.rb >aorender.ppm real 2m51.207s user 2m48.690s sys 0m1.311s $ time bin/mruby ao.rb fname = ao.ppm real 0m1.555s user 0m1.510s sys 0m0.015s
まとめ
mruby-juliaを作ったので、aobenchをJuliaで動かし、 これをmruby-juliaから使うことで、mrubyのaobenchを 速くしたという記事を書きたかったが、現状の自分のjulia力だと aobenchが速くならず、それならばということで、Cのオリジナル 実装をちょっと変更して、mruby側にオンメモリーでppmを出力 して、mruby-mrmagickをオンメモリーのデータを扱えるようにすることで、 このデータをGIFファイル化が可能となった。