SVX日記
2005-03-19(Sat) デジカメ必勝法−ブツ撮り編
野外で撮影する場合、基本的にフラッシュを焚かないと書いたが、室内で撮影する場合、絶対にフラッシュは焚かない。フラッシュを上手に当てるカメラもあるだろうが、基本的に室内は野外の昼間に比べて非常に暗いので、フラッシュを焚くとフラッシュ光だけで撮影する傾向になりがちであり、妙な絵になる可能性が非常に高い。そもそも室内でブツ撮りする場合は、野外の場合に比べて光のコントロールが利くので、いろいろ試しながら撮ればいいのである。
光のコントロールというと、なんか機材でも必要なのかといえばノーである。単にフツーの蛍光灯の天井照明でよい。光量を調整できる照明の場合はいっぱいまで明るくしておこう。少しでもシャッタースピードを稼ぐことができ、ブレを減らすことになる。基本的に室内での撮影はブレとの戦いになる。そんな時に役立つ機能がデジカメの「高感度設定」機能である。オイラの使っているRICOHの「Caplio G4 wide」というデジカメはISO125、200、400、800が選択できる。実際、フツーのフィルムカメラでもISO400のフィルムは室内用とも定義されており、室内でISO400は妥当な選択だ。ISO400は、ISO100の場合に比べ4倍高速なシャッタースピードで撮影できる。昨日、シャッタースピードが1/30を下回るとブレが出やすくなると書いたが、室内でISO400なら概ね1/30程度になるコトが多い。
それなら、ISO800のがよいのではないか? という疑問もあろうが、基本的に感度を上げるとノイズが増える。これはデジカメでもフィルムカメラでもそうである。一概には言えないがISO400までは常用域、それ以上は特殊な場合以外は使わないほうがよい。以下の写真を見れば一目瞭然である。
コレはいわゆる連邦の白い悪魔の頭部の写真であるが、左からISO125、200、400、800である。帽子のツバの白い部分が、ISO800だけ激しくニゴってしまっている。また、眼の下の赤い部分に至っては、既にISO200からニゴりが進行しているのがわかる。これにより、暗い部分ほど激しくノイズが乗る傾向があり、使い物になるのはISO400までというコトがわかるだろう。
コレはいわゆる木馬に搭載されている化け物の頭部の写真であるが、左から、晴れ、曇り、白熱灯、蛍光灯、晴れを補正したものである。これを撮ったのは蛍光灯下であるから、当然ながら光源を蛍光灯に設定したものが一番マトモな発色になっている。PhotoShopのレベル補正機能によっても、こういった光源の違いによる発色の自動補正を行うことができるが、所詮は写真の中に白が存在すると仮定しているに過ぎないから、適正に補正できないこともある(一番右)。室内撮影は大抵は蛍光灯下であるから、最初から蛍光灯モードに設定しておくのが無難である。
上の2枚は同じ構図で撮影した缶詰であるが、撮影の向きでこれだけ違いが出てしまうのである。フラッシュを焚かない場合、当然ながら順光状態で撮影しないと真っ黒になってしまうのだ。これだけ真っ黒だと、レタッチで後からどうにかできるレベルではない。
これが照明と、撮影物と、カメラの位置関係を図に示したものである。考えてみれば当たり前であるが、照明を背にして撮影物を撮るのである。この図では、照明と撮影物の直線上から少しズレた位置にカメラを置いているが、これにより対象物の左側に少し影が落ちる効果が生まれ、立体感を強調することができるのである。
ちなみにカメラの高さは概ね30〜50cmくらい。しゃがんで撮る感じである。多くの場合、自分の頭の影が対象物に落ちてしまうが、その場合は少し体を引き、必要に応じてズームで補えばいい。ただしズームをすると、視界が狭くなり、レンズの明るさも落ちるため、一層ブレやすくなるコトに注意が必要である。
また、カメラにマニュアルフォーカスモードが付いていたら必要に応じて活用しよう。素人はオートの方が確実と思いがちだが、対象物をナナメに撮影している時点で、ピントが合う場所には範囲があるのである。上記の缶詰を例にとれば、やはりプルタブでなくラベルにピントを合わせるべきなのだ。そうでなくてもオートフォーカスが機能しにくい状況もあるので、その場合もマニュアルで合わせたほうが間違いがない。
さらに、ICを画面いっぱいに撮るような場合は、三脚の使用が不可欠である。カメラを三脚に固定し、ズームし、マニュアルフォーカスし、シャッターを押す時の手ブレを排除するためにセルフタイマーを利用する。玄人向けのカメラには、10秒と2秒のセルフタイマーがあるが、2秒のセルフタイマーはこのためにあるのである。オイラのデジカメ「Caplio G4 wide」にも2秒のセルフタイマー機能がある。このことからもわかるように、実はこのカメラは非常に玄人向けなのである。
2012-03-19(Mon) 妖精作戦、運搬作戦
先日、なんかのきっかけで「冷たい方程式」が読みたくなり、図書館で借りて読んだ。確かに傑作だと思う。無駄も隙もない展開。そして、ひと回りして、意外なオチ。いやぁ、よかったなぁ。
アシモフの「信念」もよかったが、飛行機好きで、空を飛び回りたい要求の強いオイラには、期待の割に、フォーカスの当て方がズレた作品に感じた。読むだけで、鳥になった気分になれるような作品はないものか。話題の「リリエンタールの末裔」はどんな内容なのか、読みたくなっている。
と、ふと、気づくと神林長平が「いま集合的無意識を、」という本を出していた。話によると、伊藤計劃の「ハーモニー」に関連したエッセイが入っているらしい。仕方ないからそっちもまとめてポチった。以前に買って読んだ「虐殺器官」にはあまりピンとこなかったんだけどな。「メタルギア」が超絶に好きな作者と、「メタルギア」がちっとも楽しく思えなかったオイラだからかもしれない。
ちなみに「ぼくの、マシン」は「戦闘妖精・雪風解析マニュアル」で既読だが、この話についていえば「オイラは主人公の『零』以上に、リアルに『零』な性格」なので、物語は好きなのだが、あたりまえのことが書いてあるように感じられて、やや物足りない。たぶん、ストールマンも同じ感想を抱くことだろうな。
さて、以前よりニコニコ経由で「モーレツ宇宙海賊」を観ている。やや「仕方なく観ている」というレベルなのだが、これが、原作をアニメというフォーマットにうまく落とし切れていないからなのか、原作がアニメの素材として向いていないからなのか、なにしろイマイチと思いつつも、原作の品質には疑いを抱いていないオイラ(原作未読)がいる。
つーのも「スターダスト・シティ」にはリアルタイムで衝撃を受けたし、最近になって読んだ「星のパイロット」シリーズにも熱中できたし。笹本氏は、オイラの中でブランドなのだ。
そんな中、笹本氏のデビュー作の「妖精作戦」が「Jコミ」で公開されている。何度か読もうとは思ったのだが、改めて買うまでには至らず、そのままになっていた。これを期に、ぜひ読みたい。
しかし、問題はどうやって読むか、である。デスクトップPCの前で腰を落ち着けて読みたくはない。デスクトップPCの前で腰を落ち着ける時間があるならば、可能な限り別の作業をしたいのだ。なぜかPSPへの転送がうまくいかないために、かなり楽しみな「偽物語」の消化が進まないほどに、可能な限り別の作業をしたいのだ。
スマートフォン、持ってない、キンドル、持ってない、ZiiO、持ってるが、もう触りたくもない。しかし、このために、SONYのReaderを買うのは本末転倒だ。オイラは電子化に否定的ではないが、紙より便利でないならば、別に紙でいいんだよ派なのである。かといって、無料に勢いづけられて新刊を買うのもシャクなんだよな。笹本氏を喜ばせるのもイイのだけれども。ふと見れば、オークションの中古も高騰している。なんだよ、八方ふさがりなのか。単に、タダのPDFが読みたいだけなのに。
PDFからPNGへの変換は、ImageMagickのconvertでやれそうだ。試してみる。ギリギリどうにかイケそう。しかし、ページが左右にハミ出るので、アナログパッドの操作が必須。んが、そっちを下に縦持ちすると、読み進めるためには上側のRボタンを押さねばならない。ジレンマ。
$ cat pdf2png.rb
#!/usr/bin/env ruby
# 目次チェック
# $ ./pdf2png.rb | grep -A 1 "mkdir" | sh
# 変換
# $ ./pdf2png.rb | sh
# identify YouseiSakusen_HQ.pdf
# YouseiSakusen_HQ.pdf[309] PDF 827x1170 827x1170+0+0 16-bit Bilevel DirectClass 122KB 0.050u 0:00.080
target = 'YouseiSakusen_HQ.pdf'
title = 'YoseiSakusen'
maxpage = 309
offset = [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0]
index = [ 5, 22, 45, 66, 113, 158, 200, 243, 261, 302, 304, 999]
# HalationGhost_HQ.pdf[288] PDF 827x1170 827x1170+0+0 16-bit Bilevel DirectClass 122KB 0.060u 0:00.080
target = 'HalationGhost_HQ.pdf'
title = 'HalationGhost'
maxpage = 288
offset = [ 4, 4, 4, 4, 4, 4, 4, 4, 0]
index = [ 5, 40, 80, 119, 120, 222, 247, 277, 999]
# Carnival_Night_HQ.pdf[281] PDF 827x1170 827x1170+0+0 16-bit Bilevel DirectClass 122KB 0.070u 0:00.129
target = 'Carnival_Night_HQ.pdf'
title = 'Carnival_Night'
maxpage = 281
offset = [ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0]
index = [ 5, 29, 54, 82, 100, 134, 154, 185, 216, 272, 999]
dir = ''; lastdir = '';
n = 0; p = 0; loop {
n == index[p] + offset[p] and p += 1
dir = '%s_%02d' % [title, p]
dir != lastdir and cmd = 'mkdir %s' % dir and print cmd, $/
cmd = "echo %s/%s-%03d.png" % [dir, title, n]
print cmd, $/
cmd = "convert -crop 707x1050+60+65 -resize x480 -unsharp 2 -rotate +90 %s[%d] %s/%s-%03d.png" % [target, n, dir, title, n]
print cmd, $/
lastdir = dir
n == maxpage and break
n += 1
}
__END__
$ cat copy2psp.rb
#!/usr/bin/env ruby
# PSPへのコピー
# $ find YoseiSakusen_* | sort -r | ./copy2psp.rb | sh
mkdir = []; copy = []
$stdin.each {|l|
l =~ /png$/ ? copy << l.chomp : mkdir << l.chomp
}
mkdir.each {|d|
cmd = "mkdir /media/disk/picture/%s" % d
print(cmd, $/)
}
copy.each {|d|
cmd = "cp %s /media/disk/picture/%s" % [d, d]
print(cmd, $/)
}
__END__
2022-03-19(Sat) テトランを建造する
なんだか「思考力が余っているような感じがある」こともあるので、プログラミングでもしようかと思い立った。で、なんとなく「テトラン」でも作ってみようかと。ディアゴスティーニみたいに「週刊テトランをつくる」なんて連載記事もいいかな。
さて、どう作ろうか。三角関数をゴリゴリに使う必要があるだろうな……と、考え始めたのだが、エラいことを思いついてしまった。タートルグラフィックスだ。自製のタートルグラフィックスライブラリがあるのだ。それを使う。
require './TrueLegacyGraphicsCairo'
win = LegacyGraphics.new(nil, nil, nil, nil, 720, 960, 16, 8, 0, { :file => 'tetran', :type => 'png' }) # png/pdf/svg/ps
win.tPenUp
win.tSetPenColor([0.6, 0.6, 0.6])
win.tSetPenWidth(16)
4.times {|n|
win.tHome
win.tRight(n * 90)
9.times {|n|
win.tPenDown unless(n < 2)
win.tForward(32)
win.tPenUp
win.tForward(6)
win.tRight(4)
}
}
ox = win.gx / 2; oy = win.gy / 2
win.fill(ox - 96, oy - 96, ox + 95, oy + 95, [0.6, 0.6, 0.6])
win.refresh
win.close
$ diff turtleTetran0.rb turtleTetran1.rb
25c25
< win.fill(ox - 96, oy - 96, ox + 95, oy + 95, [0.6, 0.6, 0.6])
---
> win.put_image_png(ox - 96, oy - 96, 'tetran0.png')
$ diff turtleTetran1.rb turtleTetran2.rb
7c7,10
< win = LegacyGraphics.new(nil, nil, nil, nil, 720, 960, 16, 8, 0, { :file => 'tetran', :type => 'png' }) # png/pdf/svg/ps
---
> # convert -delay 3 -loop 0 tetran.d/tetran*.png tetran.gif
> Dir.mkdir(@path = 'tetran.d') rescue true
> 30.times {|f|
> win = LegacyGraphics.new(nil, nil, nil, nil, 720, 960, 16, 8, 0, { :file => @path + '/tetran%03d' % f, :type => 'png' }) # png/pdf/svg/ps
13a17
> win.tRight(f * 3)
28a33
> }
$ diff turtleTetran0.rb turtleTetran3.rb
5c5
< require './TrueLegacyGraphicsCairo'
---
> require './TrueLegacyGraphicsOpenGL'
8a9
> win.depth3d(0, 16)
23a25
> win.depth3d(-8, 32)
立体環境において「画像を描画する」ということは、つまりテクスチャマッピングを行う、ということだ。以前、やりかけたが勝手がわからず断念したコードが残っていた。で、がんばって試行錯誤しつつ、どうにか実装できた。それなりのコード追加が必要であった。
$ diff turtleTetran3.rb turtleTetran4.rb
25c25
< win.depth3d(-8, 32)
---
> win.depth3d(32)
27c27
< win.fill(ox - 96, oy - 96, ox + 95, oy + 95, [0.6, 0.6, 0.6])
---
> win.put_image_png(ox - 96, oy - 96, 'tetran0.png')
再び、それっぽくなったところで、回してみたいところだが、自製のOpenGLライブラリでアニメーションさせるためには、足をスプライトの扱いにする必要がある。先のタートルグラフィックスのコードは、スプライト機能を実装する前に実装した機能なので、スプライトとして扱えない。そこで、改めてスプライトとして扱えるよう、タートルグラフィックスの処理をModule化して、スプライトクラスからもincludeするように変更した。いや、Rubyってスゴいな。で、本体コードにもちょっとコードを足す。
$ diff turtleTetran4.rb turtleTetran5.rb
6a7,8
> # ffmpeg -y -i tetran.d/3dtetran%06d.png -vcodec libx264 -r 30 -s 480x360 tetran.mp4
> Dir.mkdir(@path = 'tetran.d') rescue true
8a11
> def draw_sprites(win, f)
9a13
> win = win.init_sprites
14a19
> win.tRight(f * 3)
23a29,44
> end
> draw_sprites(win, 0)
>
> def callback(win, info, params)
> case(info[0])
> when(:VSYNC)
> while(it = win.inputs[:EDGE].shift)
> it == 'r' and @ar = win.arotate3d(@ar ? 0 : 1)
> it == 'q' and exit
> end
> win.write_to_file(@path + '/3dtetran%06d.png' % ($jiffies - 1))
> $jiffies > 359 and exit
> end
> draw_sprites(win, $jiffies)
> end
> win.setcallback3d(method(:callback).to_proc, {})
29c50,51
< win.refresh
---
> win.arotate3d(@ar = 1)
> win.refresh(30)
そして、テトランといえば外せないのが、グラディウスIIで見せた「ひっぱたき」である。たぶんそうだろうなぁ、と思いつつ実装してみたら、やっぱりそうだった。長らく「もぞもぞ」しているのも勝手に再現された。実は、実装はものすごく簡単なのだ。たった1行である。
$ diff turtleTetran5.rb turtleTetran6.rb
26c26
< win.tRight(4)
---
> win.tRight($jiffies * 2)
$ diff turtleTetran6.rb turtleTetran7.rb
10a11
> @hands = 4; @swing = 1440
17c18
< 4.times {|n|
---
> @hands.times {|n|
20c21
< win.tRight(n * 90)
---
> win.tRight(n * 360 / @hands)
26c27
< win.tRight($jiffies * 2)
---
> win.tRight(4 + @swing)
35a37,38
> it == 'h' and @hands += 1
> it == 's' and @swing = 0
40c43
< $jiffies > 359 and exit
---
> @swing < 1440 and @swing += 2
当初は「週刊テトランをつくる」なんて連載記事もいいかな、などと思っていたが、意外と時間がかかってしまった。しかし、最小限のコードで、複雑な動作を再現するのは楽しい。動けばいい、というコードを書く人もいるが、自分はコードを煮詰めていくこと自体が楽しいんだよなぁ。コード一式を置いておく。
2025-03-19(Wed) 「星を継ぐもの」シリーズを読み進める
長らく水曜は歌のレッスンの日で、その直前にはカラオケ屋で練習するのがルーティーンだったのだが、行きつけがツブれたり、その代わりとなる店が満室だったりで、仕方なく近所の丸善で時間をツブすことが多くなった。先日「アグレッサーズ 戦闘妖精・雪風」のサイン本を買ったのも、その経緯で起きたことである。
で、別に忘れていたわけではないのだが、その時に書棚に見かけて「読まねば」と思ったのが「ミネルヴァ計画」だ。
だいぶ前。2015年末だ。なんとなく評判の高い「星を継ぐもの」を読み始めた。冒頭部分があまりにつまらないので読み飛ばす、という珍しい経験をしつつ、そこからのあまりの面白さにグイグイと引き込まれ、そしてラスト、2段オチには悶絶させられた。
なぜかその続編の「ガニメデの優しい巨人」と「巨人たちの星」はオーディオブックで購入したのだが、ガニメデはその結末に感心させられたものの、巨人たちは結末の記憶が曖昧。そして、その時点で続編の「内なる宇宙(上)(下)」は出ているものの、最終巻の「Mission to Minerva」は未訳と知って、ちょっとテンションが下がって宙ぶらりんな状態にしてあった。
で、最近になって、最終巻が「ミネルヴァ計画」として出版されると聞いて、そんな長らく放置されていた作品なんて微妙なデキなのでは……と思ったものの、イザ書棚に並んでいるのを見ると……その気になってくるんだよなぁ。まぁ、食い飽きたソバでも、目の前にあれば食いたくなる、みたいなもんか。
しかし問題は「巨人たちの星」の結末の記憶が曖昧なこと……えーいッ! こうなったら全部を復習してやるぜッ! ということで、巨人三部作をオーディオブックで聴き返すことにした。最初はどれだけかかるのやらと思ったが、星を継ぐものに約1週間、ガニメデに約2週間、巨人たちに約2週間と、良いペースで聴き進めることができた。ややこしいストーリではあるが、ジョギング中でも問題なく聴けるものなんだなぁ。結局、巨人たちは結末まで聴いてなかったようだ。ジェヴレン人が出てくる直前くらいで止まっていた。そこまでがつまらないとまでは言わないが、そこからグッと面白くなって、そしてラスト、2段オチに悶絶。またやられた。
で、途中「インサイト 戦闘妖精・雪風」が入ったりもしたのだが……意外な伏兵が間に入ってきた。「人体、なんでそうなった?」だ。まさに、書店で偶然の出会った本だ。SFではなく理科学書。パラパラと中身を確認するが、絶対に面白いとしか思えない。というか「星を継ぐもの」シリーズが人類の進化を扱っていることもあり、間に読むのにピッタリすぎるのだ。まるでダンチェッカー先生の課外授業だ。結局、ポチって読んだのだが、期待以上の面白さだった。
■ 横須賀のアランプロスト [妖精作戦って笹本某氏の小説でっか?]
■ フルタニアン(管理者) [そうそう。 スターダストシティの下は発売日に買ったほど。 星のパイロットもおもしろかったなぁ。 キミはエリアルを読ん..]
■ 横須賀のアランプロスト [よく覚えてますね! エリアルは今年になって急に読みたくなり読破しました。 調べたら9巻までしか読んでなかったので、残..]