2012-03-21
自作レンダラの試験その2
DirectShow, SST | |
はい。
自作レンダラの性能が少し UP したので、くだむベンチの結果をさらしておきます。
計測環境:
OS: WindowsXP SP3
CPU: AMD Athlon 64 X2 4200+
M/B: AMD 690G + SB600
MEM: 2 GB
G/C: Radeon HD 6450
S/C: SoundBalster X-Fi XtremeGamer
| 譜面データ | 自作レンダラ版(v1) | 自作レンダラv2 |
|---|---|---|
| 君のままで | 160 fps / 53 vps / cpu-load 70% | 250 fps / 58 vps / cpu-load 58% |
| My Secret | 155 fps / 56 vps / cpu-load 72% | 250 fps / 57 vps / cpu-load 58% |
| H.O.T.D | 220 fps / 56 vps / cpu-load 67% | 300 fps / 59 vps / cpu-load 50% |
なかなか嬉しい変化なのですが、グラフィックチップによっては実行できない可能性がある改造をしたので、一般公開はできないです。 グラボの問題の有無を自動判定して、問題がある場合は v1 で、ない場合は v2 で動作するように修正できました。やってみたら簡単だった。後悔はしてない。
……あとちょっとでいいのになあ。
2012-03-18
VMR9 と DirectXアプリ の相性の悪さ
DirectShow | |
DirectShow の VMR9 は Direct3D のサーフェイス形式で動画を出力することができるという点で、DirectX とは大変相性が良いと言われます。
しかし、以下の理由から、VMR9 を DirectX アプリケーションで使用するのは不適切だという結論に至りました。
- アプリは、バックバッファをRenderTargetにしてBeginScene〜EndSceneで描画する
- VMR9は、専用サーフェイスをRenderTargetにしてBeginScene〜EndSceneで描画する
- この2つは非同期に発生する。(おそらくVMR9の発生タイミングは再生している動画のフレームレートに依存する)
- そのため、Direct3DDevice9 が同時に(事実上)1つしか設定できないRenderTargetを両者で奪い合う。
- 同様に、アプリが BeginScene〜EndScene に入ってる最中でも、VMR9 はお構いなく BeginScene に入ろうとする。結果、「2回続けてBeginSceneを呼ぶな」というDirect3DDevice9のエラーが返される。SlimDX の標準設定ではこれが例外を発生させる。
…… EVR で Direct3DDevice9 ごと管理されるようになった理由が分かったような気がします。
2012-02-28
自作グラバレンダラの試験その1
DirectShow, SST | |
現在公開中の StrokeStyle<T> rev.320 では、動画の処理 に書いてあるとおり、VMR9 を使わず、SampleGrabber を使って動画フレームを取得し、手動(CPU)でテクスチャに転送しています。
でもさすがに 1280x720 H.264/AVC の 2000kb/s over な動画を使った譜面データが出てくると、うちのドラム用PC(WindowsXP)では処理が間に合わず、演奏に支障を来たすほど譜面スクロールがガタガタになってしまいます。
ということで、SampleGrabber に相当するフィルタを自作することにしました。
最終的には DXVA まで対応できればなと思っています。
ということで、まずは SampleGrabber 相当のフィルタを作りました。
DirectShow フィルタを作る知識などなかったので結構時間かかりました。
データを横取りするグラバというよりはデータを貰ってどこにも出さないビデオレンダラの形態にして、アプリからフレームデータの要求がこないうちは最新のフレーム以外片っ端から捨てていくという品質管理不要のステキ仕様。
対応する入力フォーマットは VideoInfo1、無圧縮 XRGB32 のみ。
さらに、自分でアロケータを提供することで、アプリから要求があるまではコピー作業が一切発生しないようにしました。(参考:「DirectShowを使った動画再生とフレームビットマップ取得方法」)
そして何とか SamleGrabber の代わりに自作レンダラを使って StrokeStyle<T> が動作するようになったので、さっそく超主観的なベンチマークをとって、性能比較してみました。
ベンチマークには、サイズが StrokeStyle<T> の解像度である HD (1280×720)を超えて、なおかつビットレートが 2300 kb/s 以上もある H.264/AVC 動画を使用されているくだむさんの SSTF データを使わせて頂きました。名付けてくだむベンチ。(笑
現在公開中の SampleGrabber 使用バージョンと、自作レンダラに変更したバージョンとで譜面の自動演奏を行い、FPSとVPS、そしてタスクマネージャによるCPU負荷の平均を、超おおまかな目測で記録しました。(ぉぃ
計測環境:
OS: WindowsXP SP3
CPU: AMD Athlon 64 X2 4200+
M/B: AMD 690G + SB600
MEM: 2 GB
G/C: Radeon HD 6450
S/C: SoundBalster X-Fi XtremeGamer
以下がその結果です。
| 譜面データ | SampleGrabber版 | 自作レンダラ版 |
|---|---|---|
| 君のままで | 135 fps / 46 vps / cpu-load 80% | 160 fps / 53 vps / cpu-load 70% |
| My Secret | 120 fps / 46 vps / cpu-load 82% | 155 fps / 56 vps / cpu-load 72% |
| H.S.O.D | 180 fps / 55 vps / cpu-load 75% | 220 fps / 56 vps / cpu-load 67% |
うん。私の想像以上に軽量化されていました。正直、安心しました(笑)。
55 vps も出てれば、若干ガタつきは気になるけれども演奏は可能なレベルです。
ちなみに、すべて 60Hz のモニタで垂直帰線同期を使用していますので、vps で最大値の 60 を出せれば、譜面スクロールが最高に滑らかになります。それが最終目標ですね。
さて。希望の光が垣間見えたので、どんどん改良していこう。
……の前に、まずは Reg-Free COM 化が先か。StrokeStyle<T> にはインストーラーなんて付けてないしね。
2012-01-03
初詣2012
雑記 | |
社会人になった頃からすっかり初詣には行かなくなってましたが、今年は行ってきました。
オカルトは半信半疑ですが、それが真だろうが偽だろうが、オカルト思考が人の考えと行動に影響を与えることは信じている、というご都合主義的な人間である訳でして。
去年は半年近くを自宅療養で過ごしたためあまりに平坦な一年だったので、今年はなるべく多くのイベントをこなしていこうと思った次第です。なので、最初のイベントは当然、初詣と相成りました。
で、今の私が行ける範囲の神社は4つあります。
2000年以上の歴史を持つ超有名な神社1つと、同1200年以上の有名な神社が1つ、そして地域に根ざしたほぼ無名の小さな神社が2つ。いずれも1000年以上の歴史を持つ、由緒正しい神社ばかりです。
その中で、小さいながらも1300年以上の歴史を持ち、日本の医療の祖神をまつっているという地元の神社に参拝してきました。
今年の願いというか目標は「マジ健康」ですからね。
医療と健康の神様が軽ーく歩いて行ける距離にあったことに気づいたのはつい最近でした。
出店も何もなく、混雑もなく、かといって参拝客が少ないわけでもなく、つまりとっても参拝客の回転が早い神社でした。
で、鳥居をくぐって聖域に入り、手水で両手と口を清めて、いざ本殿へ。
一礼し、賽銭を入れ、鈴を鳴らして神様を呼んで、二拍。
はいさっそく間違えたー。
「二拝 二拍手 一拝」のところが「二拍手 二拝 二拍手 一拝」になってしまった。
久しぶりすぎたからねー。
神様への誓い事の出だしがいきなり「間違えましたすんません」になるとは思わなんだ。
そう、誓い事。
神社で神様にお伝えするのは、「願い事」じゃなくて「誓い事」なんですよね、基本的に。
「マジ健康を目指して頑張るから見守ってて下さい」みたいな誓いを告げてきました。
次は、お決まりのおみくじ。
末吉でした。健康運は、「日に日に吉」。先は長いかー。
そして、御守り。
でっかい道路がどんどん建設されている近くに建っているせいか、交通安全の多いこと。
無病息災祈願の御守りが2種類しかなかった…… ここほんとに薬祖神の神社?
なお、巫女さんはいませんでした。
その代わり、小学生低学年と思わしき女児(神主家の娘?)が私服で居ました。
商品説明もお金の取り扱いもしっかりしていて、ある意味バイト巫女より優れてたかも。
徒歩での帰り道。
見知らぬおっちゃんから「○○神社ってどこですか?」と聞かれました。
私の参拝した△△神社とは違う、もう一つの小さな神社です。
「○○神社はこっちじゃなくて反対方向ですよ。……あ、でも△△神社ならすぐそこで、ここからなら○○神社より圧倒的に近いですよ?病気の神様奉ってます」
はいまた間違えたー。
病気の神様じゃ疫病神みたいですやん。
そうじゃなくて、医療の神様ですねー。
まあおっちゃんは「ああ、どっちでもいいよ」って言ってたので、私が参拝した△△神社を案内しておきました。
帰宅。
さっそく、御守りを携帯電話に取り付ける。
緑色の小さな勾玉と数珠。自分好みの色と輝き。
最近の御守りはストラップ型が多いのね。
便利でいいけど。
で、取り付けたところ、―― パキッ。
御守りが真っ二つに千切れました。
うおおおおおおおいいいいいい!!!!
正確には、御守りとストラップのヒモをつなげているリングに隙間ができていて、そこから外れたんですけどね。縁起悪いなもー。この家何か居るの?神的なものを受け付けない何かが居るの?
しかしこんなことでは諦めません。
リングに御守りをはめ込み、二度と取れないようしっかりと修正しました。
ペンチで。
……ペンチでリング潰したらそれこそ最低最悪でしたが、無事に何とかなりました。
頼むでおいー。
まあそんなわけで、今年は気合いをそこそこ入れて頑張りたいと思う次第です。