読者です 読者をやめる 読者になる 読者になる

non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

mrubyでaobenchを動かし、GIFアニメを出力できるようにした

こんばんは、奥さんが出張のため、またまた実家に来ています。3歳ともうすぐ5歳になる息子たちも一時期に比べ、電車での世田谷の自宅から、中野の実家までの移動も楽になってきたことを実感してます。kjunichiです。

mrubyでaobenchを動かし、動画にする

静止画はつまらないので、高速化して、GIFアニメを出力できるようにした。

f:id:kjw_junichi:20160723175205g:plain

成果物

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ファイル化が可能となった。

関連記事