過去の独りごち/独りごとはこちら
過去のJavaアプレットは
こちら

 

9/2 恐怖の…

 Radeon9600でも被写界深度ブラー、やってみました。


shader0902.zip
(452KB ソース+バイナリ)
注意:要PixelShader2.0以降、D3DFMT_R32Fサポート
(ほぼ最近のRadeon専用っす)

操作方法 : 右ドラッグで視点の回転、左ドラッグでズームインアウト

 CopyRectsは無くなってしまったものの、DirectX9からはStretchRectメソッドが付いたようで。な〜んだ、そんないいものがあるなら…という感じでした。むしろ気づくの遅すぎ〜

 今回用いたRadeonでの被写界深度ブラーの実装方法としては、

  1. 通常のレンダリングを行う
  2. StretchRectでバックバッファの内容をブラー用テクスチャ(低解像度)にコピー
  3. レンダリングターゲットをD3DFMT_R32Fなテクスチャに設定、Zバッファをつけてレンダリング。Zバッファに格納される値をそのままレンダリングターゲットに書き込むようなPixelShaderを書いておく(今回はシャドウマップ作成用のコードを流用)
  4. ブラー用テクスチャを画面全体とブレンド。ブレンド比率は 3.で取得したZ値格納用テクスチャの内容から、さらに深度→ブレンド比変換テーブル用テクスチャをルックアップして決定する。

 で、4.にある深度→ブレンド比変換テーブル用テクスチャは今回はこんなのにしました。

u=0.0 u=1.0

 Z値格納用テクスチャに書かれている値をu座標にして、このテーブルをルックアップするわけです。Z値そのままだとあんまり精度がよろしくないので、やっぱり1/Zとかの方がいいのかなぁ。

 今回はブラー用テクスチャはかなり解像度を低めにしてあるので、やりすぎやろ、それはと突っ込みたくなるくらいにブラーがかかります。しかもクライアント領域のサイズ変えて解像度を上げたりしてもブラー用テクスチャのサイズは変わらないので、ボケ加減が激しいことになります。

 なんだか前回より間が空いてますけど…まぁその。

 とりあえず、夏休みも明けて九州に戻ってきました。

 ADSL1.5Mなんですけど、昨日・今日とADSL 64Kな感じです。放っておいたらいつの間にかISDNになっちゃったとかかッ。 んー、まあ、件のウイルスのせいでトラフィックが大変な事になってたりしたらイヤですね…。

 最近は一息ついてといいますか、VC++いじってたりします。Delphiでしたいこと事はわりとなんでもやる、というのが自分のアイデンティティだったわけですが、アイデンティティ崩壊の危機!?それはともかく、VC++も多少はいじれた方がいいんじゃないかと思いまして。

 C++の分野も2、3年前からですが標準C++ライブラリですとかホットな話題がちらほらと見受けられ、VC++も6.0から.NETに変わったという事で、VC++環境でもそうしたモノを安心して扱えるんじゃないかな、という期待をこめていじりまわしています。vectorとか、かなり便利ですね。

 今のところ、C++は言語そのものはObjectPascalより強力な点も多いけど、ライブラリの面では標準C++ライブラリ込みにしてもDelphiのSysUtilsやClassesにはやっぱりかなわないかなぁという印象があります。Delphiのライブラリは本当に実践的に研ぎ澄まされていて、特に言語自体が型として備えているStringなどは所詮は後付にすぎないSTLのstringよりも数段上の存在に思えます。

 また、VC++のライブラリは同じstrcpyやstrcmpにしても、メモリモデルの違いやらワイドキャラクター対応やら変なマクロやらで似たような名前の関数がゴロゴロあって大変分かりづらいです。Delphiにも、文字列操作関数にはANSI〜とかありますけど。

 なんにしても、stringとPCharとの相互代入の利便性とか、そうした既存の物との共生の点ではDelphiか…といった感じです。

 それから、VC++(というより、VS.NET)はヘルプが最悪です。日本語だったり英語だったりするのはまだしも、VC++のメソッドを探したいのにVJ++やらVBScriptやら全然関係ない物ばっかり引っかかります。一応どの言語用のヘルプを引くかというのは「フィルタ条件」とかいうので設定できるようなのですが、これがまともに働いてくれませんm(__ 僕の場合ではC++の演算子の優先順位とか、C++の型付き定数の宣言の仕方すらGoogleで調べたほうが早かったです。なんとかしろよヽ(`Д´)ノ やっぱり「インストールしない」事で回避するしかないのかなぁ…

 デバッガはVC++の方がいいのに、勿体無いです。そういえば、VC++6.0と比較するとデバッガが格段に安定しましたね(^^;) 今のところはDelphi並みかそれ以上に信用して良さそうに思えます。

 ともかく、今しばらくはVC++メインにすることはなさそうだなぁと思いました。Delphi7Personalのアカデミック版でも買おうかと思ってるんですが、どうでしょうね。僕としてはコードエクスプローラがPersonalでも付いてくれば問題ないんです。商業目的で使用する段階になったらProfessional買えばいいわけでして。とりあえず、Cマガジンとかに体験版付いてたりしないかな?

 

Taku Hayase(SANDMAN)

戻る