某日記

(中期)

平成19年12月11日(火曜日)

今日

日本刀禁止法策定へ - そうか、「人を効率的に殺すため*だけ*」と言われると違和感があるけれど、日本では暴力団関係を除けば既に日本刀というのは美術品の一つとしかみなされていない(という程度には実用に供されていない)のに対し、今のイギリスでは日本刀といえば実用の武器として製造販売されるのが主ということか(そもそも本当の日本刀じゃなくて日本刀を参考にして作られた別のものを「日本刀」と呼んでる節もある)。まあいずれにしても危険なことには変わりがないので、規制というのは大切だ。

DQN 名について。文学作品なんかから子供の名前を引っ張ってくるという方法は必ずしも悪くはない。源氏名という奴も、ある種の偏見さえ取り去ってみれば、あれは遊廓の人々の教養の高さを示している。結局、どこから引用してくるかというところに親のセンスが問われるというだけのことに過ぎない。センスの悪いのは死ぬまで直らないのが普通だから、こればっかりは御愁傷様と言うより他にない。

ところで、ここで一つ重要なことを指摘しておくと、大抵の人にはセンスがないのである。センスがないのにセンスの良い名前を作ろうとしても無理で、センスの悪い名前しかできない。昔の人はそのことを良くわきまえていたから、無難な名前しか付けなかった。これが見識というものだ。昔の人には、センスがなくても見識はあった。今の人には何があるんだろう。

GDI+: クロスフェード

ARGB 形式のビットマップのクロスフェードって GDI+ ではどうすりゃいいんだろう。RGB 形式ならばカラーマトリックスで簡単にできるんだが。LockBits するしかねえかな。

カラーだとめんどいからグレイスケールで話をすると、アルファチャネルを持っていないピクセルのクロスフェードは次の式で表現される:

Ir = f*Is + (1-f)*Id
これを次のようなベクトル式に変形する:
|   1  |   |   f  |           |   1  |
| 1*Ir | = | f*Is | + (1-f) * | 1*Id |
これはつまり、「Id を Copy した後、Is にカラーマトリックスを適用して A コンポーネントを f に差し替えつつこれを Over する」操作に相当する。上で述べた通り GDI+ で簡単にできる:

上のベクトル式をアルファチャネルのあるピクセルに一般化すると次の式になる:

|   Ar  |   |   f*As  |           |   Ad  |
| Ar*Ir | = | f*As*Is | + (1-f) * | Ad*Id |
これでは As が 1 でない限り Over が使えない。ちなみに、上のプログラムは次の式と等価:
|   Ar  |   |   f*As  |              |   Ad  |
| Ar*Ir | = | f*As*Is | + (1-f*As) * | Ad*Id |
右辺の第二項の係数が微妙に違う。上のプログラムは As = Ad = 1 という前提があるから正しく動く。それが成り立ってないところでこれを使うとどうなるかというと、たとえばエロゲで手を下げた立ち絵と手を上げた立ち絵をクロスフェードさせると手が上手く消えずに増える。

ちなみに、次のプログラムは間違い:


これは次の式に相当する: 
|   Ar  |   |   f*As  |                    |   Ad  |
| Ar*Ir | = | f*As*Is | + (1-f*As)*(1-f) * | Ad*Id |
手は増えなくなるがクロスフェード中に向こうが透けて見えるようになる。そういうゲームをたまに見るけどたぶんこの罠に嵌まっている(最初からクロスフェードしてないケースもあるけど)。まあ f=0 の時と f=1 の時にはつじつまが合うから、それで困らない場合もある。手が増えるよりはマシだ。

次のも間違い:


これはこういう式: 
|   Ar  |   |   f  |           |   Ad  |
| Ar*Ir | = | f*Is | + (1-f) * | Ad*Id |

結局、厳密にやるなら

|   f*As  |
| f*As*Is |
|   (1-f)*Ad  |
| (1-f)*Ad*Id |
を計算して足す必要がある。めんどいね。LockBits みたいな力業ではなくて何かスマートな技はないものか。

平成19年12月12日(水曜日)

クロスフェード

RGBAレイヤ合成アルゴリズム - 変形すれば Porter/Duff の Over オペレーションそのものですね。

|   Ar  |   |  As   |            |   Ad  |
| Cr*Ar | = | Cs*As | + (1-As) * | Cd*Ad |
これが Over オペレーション。で、これを適宜変形してゆくと
Ar  =  As + (1-As) * Ad  =  As + Ad - As*Ad  =  Ad + ( ( 1 - Ad ) * As )
Cr  =  ( Cs*As + ( (1-As) * Cd * Ad ) / Ar
    =  ( ( Cd * Ad * ( 1 - As ) ) + ( Cs * As ) ) / Ar
となる。

昨日まで何の注釈もなしに Porter/Duff オペレータという言葉を使っていたので、原典へリンクしとく。

Adへの倍率を1.0→0.0へ変化させながら、Asへの倍率を0.0→1.0へ変化 - それではフェード中に後ろが透けちゃうんですよ。一般的に言われているクロスフェードってのはそういうものなのかもしれないけど。そうだとしたら、私がいま必要としているのは厳密にはクロスフェードではないってことになる。

算数で示してみよう。立ち絵の例で「後ろを透けさせない」というのをもうちょっと明確な文章にすれば、

As と Ad がともに 1 のピクセルは、フェード中のどの時点においても Ar が 1 でなければならない
という条件になる。一方、As の倍率を a 、Ad の倍率を b とすると、Over オペレーションにおいて上の条件を満たすためには以下の方程式が成り立っている必要がある:
1 = a + (1-a)*b
これを解くと「a = 1 または b = 1」になる。つまり、どっちかの倍率を 1 に固定して、もう片方を変化させるしかなくて、Ad の倍率を 1 に固定すれば「腕が増える」パターンになるし、As の方を 1 に固定すればこれは「突然新しい腕が現われて、古い方が徐々に消えていく」パターンになる。いずれにしても用をなさない。

実際のところ、「透けないフェード(仮)」つまり昨日のこれ:

|   Ar  |       |   As  |           |   Ad  |
| Ar*Ir | = f * | As*Is | + (1-f) * | Ad*Id |
がどれだけ実績のあるものかは寡聞にして知らないので(なにせあたしが昨日勝手に思い付きで拡張したもんだし)、実際に実装してみると別の問題が発生してしまったりするのかもしれない。たとえばフェード中に輝度が極端に変化するとか。

もしかしたらこういう式の方がいいのかもしれないが、自信がない:

| Ar |       | As |           | Ad |
| Ir | = f * | Is | + (1-f) * | Id |
いずれにしても両端では辻褄が合う。

あえて Over を使って「透けない立ち絵遷移」を実装するなら、次のようにする手もある。つまり「まず Ad の倍率を 1 に固定したまま As の倍率を 0 → 1」そして「As の倍率を 1 に固定したまま Ad の倍率を 1 → 0」とする。見せ方によってはこれでも良い。ある程度の透けを許容するならば、a と b を非線型に変化させる手もあるだろう(次数を無限に飛ばせば「片方を固定したまま」と等価)。

しかしあまりにも知識がなさすぎる。俺これでも CG の研究やってた人間なんだろうか。まあ研究向きじゃなかったからプログラマやっているわけだし、何より研究室にいた 3 年間はワークステーションで遊んでただけだしな(ぉ

「思い付き」ならばいくらでも出てくる自信があるんだが、それだけでは片手落ちで、それを研究に昇華させるためにはある種の真面目さが必要。私のようなズボラ人間にはできない相談だ。

今日

二次方程式の解の公式をすっかり忘れていて愕然とした。

平成19年12月13日(木曜日)

今日

某所から 泥酔論説委員の日経の読み方 2007年12月13日 -

「大臣、あなた絶対何やったって無駄ですよ。」と言ってきた人がいて、それは架空の従業員をでっち上げたのだと言うのですね、税金逃れのために。
なるほどねぇ。 大臣記者会見概要 H19.12.11

やっぱり、分からない分は適当なところで調査を切り上げて国庫に入れちゃえばいいんじゃ。その余剰分で少しでも年金制度の破綻のリスクが減るのならば、これは福祉制度という観点からは悪くない。まあこれからもずっと杜撰な管理をされたらダメだけど。

社保庁のアレさは批判されるべきとしても、結局はそこにかこつけて個人の取り分の多寡を騒いでいるに過ぎないのが見ていて見苦しい。まあもっとも、自ら率先して「俺の取り分はもういいから、これからはちゃんとしてくれ」と言える人間なんていないか、いても大抵裏に邪な意図があるに違いない。人間なんて一皮剥けばみな一緒。

環境問題。あたしゃ後世に美しい地球を残さなければならないとかそういう殊勝な考えを持っちゃあいないが、今の流れはどうも嫌な予感がする。特にアメリカがうさんくさい。

今はアメリカ政府が環境問題に対して死んだフリをしているが、ああいう国だから、めぼしい企業は、ロビー活動で規制の先伸ばし圧力をかけつつ、一方で自分たちは着々と規制への準備を怠ってはいないんじゃないかと思う。機が熟したと看るや、一気に手の平を返してくるんじゃないか。そのとき、アメリカ追従で安穏としていたところは梯子を外される。全く気が抜けない。

平成19年12月14日(金曜日)

今日

たばこは無添加でないと健康に悪い - ワラタ。

そういえば、以前テレビ見てたら「カップラーメンはビタミン B1 を豊富に含む栄養食品」とか言っていて吹いた。カップラーメンの栄養でも見て察してくれ。

平成19年12月15日(土曜日)

今日

ドトールでマターリ。

人間一生に使える金なんてたかがしれているんだから、若い時に成功して自分に必要な金を稼いだらさっさと引退してパイを後進に譲ったほうがよい。これを「金持ちはさっさと引退すべき論」と呼ぼう。

しかしこの論には様々な障碍が立ちはだかっている。まず社会通念上、何もせずに遊んでいるのはよろしくないこととされている。また世間の目というのもある。貧乏人というのは僻みっぽいから、若くして引退をしようものなら「こっちは苦労しているのにアイツは楽しやがって」なんていう感情を持ったりする。

そういう空気を読んで、金持ちはさらに頑張ってしまうのだが、困ったことに、金持ちが頑張ると、貧乏人が同じだけ頑張るのの 100 倍とか 1000 倍とかの儲けを出してしまうんだな。ますます金持ちが金持ちになる。

貧乏人は、金持ちが働かなくても食うのに困らないことを羨んではいけない。むしろ、金を持っているにもかかわらず忙しそうにしてる人間に対して、「食うのに困ってもいない癖に働きやがってこの金持ちが」と思うのが正しい。

「労働を貧乏人の手に!」「貧乏人の手に!」「今こそ革命だ!」「革命だ!」なんてのはどうですかね。冗談ですが。

平成19年12月17日(月曜日)

昨日

川崎でキムチモツ鍋食ったら、辛さで大腸より下がエライコトになった。最近ますます辛さに対して下回りが弱くなった気がするが、後でエライコトになりそうだと分かっていても、意地汚いから食ってしまう。

今日

並行在来線はJRが運行継続で調整 新幹線長崎ルート - そもそも整備新幹線の制度自体をなんとかしてくれ。

長崎ルートに関しては、本当に必要なのは武雄-諌早の短絡線と、その他細かい改良だけだろう。ところが、今の制度ではそういう改良をするよりも、お上の言う通りに新幹線を通した方が地元負担が少ない。地元が我慢して小改良で済ませても何のメリットもない。

本当に必要な改良に国民が金を出すのはある程度仕方がないと思うけどねえ。実際に金を出す都市部に対して理解を得られるような努力を地方がしているかというと、どうなんだろうな。もちろん、上で述べたような努力しにくい構造があるのにも問題があって、マスコミはそういう背景についてちゃんと報道してねえよなぁ。単にこれを中央と地方との対立の構造としてしか取り上げない。物足りないねぇ。

Lenovo ThinPadの品質低下 - 美味しんぼの天麩羅屋の話を思い出した。

音源話

FM 合成 - それは FM 合成じゃなくて加算合成です。

音色を作るためには倍音列を発生させないといけない。加算方式はこの倍音列を直接生成してやる方法なのだけれども、

  • まともな音を一つ作るのに正弦波発信器が何十個も必要になってコスト高 - ケチると丸い音しか作れない
  • 発信器の出力レベルとその変化まで考えると、自由度の多さに人間がついていけない
という欠点があるので、「人の手で無から音色を作る」ことを目的としたシンセサイザーではあまり使いません。

もっとお手軽に倍音列を発生させる方法として

  • 最初から倍音を豊富に含んだ波形を生成して、フィルタで周波数特性を変形させる
  • 基本波形(正弦波とか)に非線型な演算を施して倍音を発生させる
というようなものが使われてます。FM 音源は後者。正弦波を正弦波で変調して倍音を作っています。

FM 音源の場合、二つの正弦波発生器をつないだだけでも無限次の倍音列が得られます。したがって、加算方式だと発信器が何十個も必要な「尖った」「ざらついた」音を簡単に作れます。変調を控えめにすれば、丸い音も作れます。ただ、倍音列のパターン自体は単調なので(ベッセル関数で計算できます)、そこはエンベロープでカバーします。

実際に音を作ろうとすると、偶然に頼る要素が多くてあまり簡単じゃあないですな。ただ、ちょっとのパラメータ変更で劇的に音が変わるので、シンセらしい音づくりには便利。

平成19年12月20日(木曜日)

今日

寒いねえ。

あの問題。とりあえず、「楽曲の信託問題」と「アーティスト名問題」を分けよう。んで、前者は「信託した曲がこんにちは JASRAC の対象になる」ってだけの話だし、後者は当事者間で閉じている問題に過ぎないから、いずれにしても気にするほどのことはない。それ以上は、火事と喧嘩はなんとやら。

周辺事項として VOCALOID ライブラリライセンスの問題ってのはあるんだが、でも今に始まったことじゃあないし、問題ってのも単に「ソフトのライセンスとしてこれはどうなのよ」ってだけの話で、妙なことをしようとしなければ実用上問題ない。非商用利用ならば殆んど自由だし、商用利用でも制限自体は割と緩い。認められていない領域で使おうとすると個別にライセンスを受ける必要があるからめんどいけど、まあ商売というのは元来めんどいものです。

別の問題として JASRAC の信託っていろいろアレだよねって話もあるけど、まあこれも手垢のついた問題だな。某所では「根本的には JASRAC の構造的な問題なんだが、あすこは守りが堅いから、何とかしようと思ったら『俺が有名になって世の中変えてやるぜ』的厨設定を持ち出すか、プロ市民になるか、いずれにしても個人では痛い選択肢しかない」という結論。

ベース。世の中の常識ではフレットノイズとかフィンガーノイズはイコライゼーションとかでカットするのが良いとされているのだが、私はフィンガーノイズがバリバリ入ったベースの方が好き。

たぶんアレだ、リーランド・スカラーのベースが原体験としてあるからだな。「中央フリーウェイ」のあのベース。

ようつべで探したら 中央フリーウェイ 〜 ユーミン が出てきた。これすげーな、ほとんどオリジナルメンバーがほとんどオリジナルのままやってる。すごいヒゲのおっさんがリー・スカラー。

夜中

「飛脚を立てたよ」メールが来た。音楽ソフト。そう、察しがいいね。あの有名ソフトウェアの続編だよ。

え、YAMAHA? クリプトン? 違うよ、全然違う。SONAR7 はローランド/CAKEWALK だろ。