Pd会#05

Pd会第5回に参加してきました。@tatmos さん会場提供いつもありがとうございます。

我らが主催者永野さんが風邪のため欠席されましたが、ややまったりしつつも会は進行されておりましたのでご安心ください。余談ですが、こういう会で旗振りの人が不在だと残りのメンバーが様子見でお見合いになっちゃうことはままあると思うのですが、そういうこともなくちゃんと回ってたっていうことで Pd会はかなりうまくいってる勉強会だなと感じます。メンバーの入れ替わりありつつもなかなかのペースで 5回目を迎えてますし、毎回何かしら得るところもあり、なにより自分が楽しいので。

さて今回のテーマはちょっと Pd から脱線してるかもしれませんがグラフィック関連の話(OpenGL, GLSL, Colada, Quartz Composer)と、わたしの resospeana~ オブジェクトの解説でした。

  • OpenGL, GLSL, Colada
    • GPUレンダリングパイプラインの話
      • Vertex Shader - 頂点毎(?)の処理
      • Geometry Shader - 近傍の情報も含めての処理
      • Pixel Shader - 画素毎(?)の処理
      • 個人的にはずっとこのレンダリングパイプラインの vertex shader とか pixel shader って何が違うんだろうって疑問をもってたのでいろいろ質問もできてちょっとわかりました。
      • 今もうひとつ疑問がでてきたんですが、α blending なんかは pixel shader が geometry の情報と出力バッファの現在の画素値とかから新しい値を計算する、という理解でいいんですかね。そのためには geometry を z-depth 方向にソートして処理しないといけない場合もあったりすると思いますがそれは geometry shader がやっとく?
        • [追記]blending やデプスソートなどは shader ではなくてその前後で処理するそうです。[/追記]
    • GLSL。3種類の変数(スコープみたいなものかな)がある。[追記]間違いがあったので修正しました。指摘ありがとうございます[/追記]
      • A - Attribute - 頂点ごとの属性
      • U - Uniform - グローバルな設定
      • V - Varying - Shader 間のデータをやりとりする
    • COLLADA
      • 3D のモデル、シーン、アニメーションなどの情報をやりとりするためのフォーマット
      • XML ベース
      • Core, Fx(effect), Physics(粒子系?の物理モデル), Kynetic(関節系?の物理モデル)
      • Fx(effect)などは common という必ずサポートするもの(Phong とかベーシックなもの)の他に Application 毎の定義などが拡張できるようになってる(3Ds Max とか Maya とか)。
      • ID, SID - SID を使って間接参照を可能にして無閉路有向グラフ(DAG)の制限のままにノードをあちこちから参照できるようにしてるとか
  • Quartz Composer
    • Pd みたいにパッチを繋げてアニメーションを作る
    • Publish した inlet (QC 的にはなんて言うんでしょうね) は外部から変更できるようになる
    • マウスやキーイベントもとれるのでちょっとしたゲームいたいなものもできそう
    • 作成した qtz ファイルは Cocoa アプリケーションで load することでアプリ内に埋めこめる。publish した入力はアプリからも操作できる
      • アプリから操作もできるのは知らなかった。結構使えますね。Mac 限定ですけど。
  • resospeana~ の解説
    • Github で公開しました http://github.com/nagachika/resospeana
    • Gist に Ruby でアイデアをスケッチしたコードがあります http://gist.github.com/220547
    • 振動子(バネとおもり)にダンパー(速度に比例する反対向きの加速度を与える)をつけたモデルに固有振動数の振動を加えると共振して増幅することを元にした、特定の波長の成分の強度をとりだすオブジェクト
      • なんちゃってスペクトルアナライザーに使える
    • 簡単な図示

    • F = mα = -kx -μdx ← こういう式のモデル(ローカル座標系)で、原点を入力の信号に従って揺らす
      • どうやら式を展開していくと IIR フィルタの一種という解釈になるようです
    • エネルギー(バネによる位置ポテンシャルと、運動エネルギー)を計算して、周波数毎の正規化したものを対数を取って出力します
    • 並べてなんちゃってスペクトルアナライザにしているスクリーンショット(マイク入力に対して女性ボーカル曲を流してみた時の図です)

    • ついでに hip~ (high pass filter) の実装のコードも読みました。まさに IIR フィルタで低周波成分の波形を作って、それを減算するという方式でした。

resospeana~ は実用的にどうかっていうのはあまり考えてなくて、コンセプトを確認するための実験で、まあまあちゃんと動いているようです。周波数が高いと強度が強めに出る傾向があるように思えます。バネ定数を固有振動数から求めているのですが、減衰係数も周波数によって何か正規化しないといけないかもしれませんし、ポテンシャルの計算で運動エネルギーはローカル座標系での速度(バネの起点との相対速度)にするべきなのかもしれないです。そういったモデルの細かい検証はしかし結果にはそんなに影響しないような気もします。

その後 Pd会は今年は最後ということで忘年会へ。いろいろなことを話しました。キーワードを並べてみたらすごいカオスでした。MTM04とか芸術論とかライブ作曲とかネコミミの起源とか音楽の嗜好は生得的か後天的かという話とか三味線とバイオリンの比較論とか多面体とか多面体とか4次元和尚とか。今回もとても楽しかったです。参加者のみなさんありがとうございました。