ちゃんと前の記事で「年内は公開しない」と言ったので公開しません。とりあえずデバッグ段階です。
今度はSMAAの実装だ~
FXAAに続いて掲示板にもあったAMD側が推奨しているMLAAを実装・・・と思ったのですが、どうにも資料が少なすぎるので実装がしづらいことが判明。FXAAとMLAAで検索を行うとSMAAという言葉に行き当たり実装することにしました。
どちらにしてもFSAA(FullScreen Anti-Aliasing)の仲間なのですが、FXAAが1PassのPixelShaderなのに対してMLAAやSMAAが3PassのPixelShader(+VertexShader)なのでPresent処理前の拡大・縮小処理の方もPostProcessとしてまとめ直すことにしまして、修正を行っていました。おかげでアンチエイリアス処理部分などが分離されれコードが非常に見やすくなりました。ちなみに、MLAAは実装する気はもうありません。
次回バージョンではFXAAやSMAAは選択制(アンチエイリアス処理)であり、それが終わってからウィンドウサイズへの適応処理が入る形になります。この機能だけを見るとアンチエイリアス処理をinjectionしているのとさほど変わらないのでは?という疑問がわいてきます。もちろん、そんな目的で機能を実装したわけではないですが、そういう使い方もあるというのがまた。
なお、SMAAですがFXAAから比べるとアンチエイリアス処理が余りかかっているような気がしません。多少はかかっていることは確認しているのですが・・・。このあたりは人それぞれなので良さそうなものを使ってみるといいと思います。ぼかしすぎも困るけれどもジャギーが取り切れていないのも困る、ですね。
D3DVERTEXELEMENT9を使うときにはD3DDECLUSAGE_POSITIONTに注意
デバッグしているときに陥ってしまった現象なので書いておきます。たぶんDirect3D9系特有のちょっとした動作の考え方なので。
IDirect3DVertexDeclaration9をつかって頂点定義を行うときの構造体D3DVERTEXELEMENT9ですが、この中で「変換済み座標系」を扱う定義としてD3DDECLUSAGE_POSITIONTがあります。頂点データで2D座標をそのまま指定するときに使うのですが、なんとこの定義を持った頂点データを設定すると頂点変換が動かない。・・・当たり前です(「変換済み座標」なので)が、これをさらに解釈しなおすとVertexShaderも動かない、という状態であることがわかります。VertexShaderを設定しているのになぜ動かないのか・・・と思っていたらこんなところに原因があったわけですね。
なお、このことからVertexShaderの出力座標は(-1.0,1.0,0.0)[左上前]-(1.0,-1.0,1.0)[右下後]の直方体を有効とする座標系に変換されます。なのでVertexShaderを通った後で「画面いっぱい」をやるときや、VertexShaderを単なるテクスチャ座標計算として使う場合にはこの値を使うことになります。(座標定義はD3DDECLUSAGE_POSITIONを使用する)VertexShaderを読んで何をやっているか調べたい人はちょっと気にするといいと思います。
そして無視しているコミケと年始のピタゴラスイッチが楽しみ
そりゃ行かないのであればコミケを気にする必要はないですね。まあ2chのまとめくらいは多少読んでいますのでそのくらいです。ずっとカタログだけは集めているので今回もとりあえず買いましたが、こうなると買う意味なんて無いですね。しかも売っている場所がかなり限定されるのでそこまで行くのが面倒なのと。
あとはピタゴラスイッチですか。2014年もやるみたいなので深夜帯ですが見てみるとおもしろいでしょうね。私が見た場合はまた感想やら解説やらを書いてみたいと思います。できればまた夕方の時間帯に再放送があればなおよし、だと思います。
しかしまあ、年末ともなるとblogのアクセスがおもしろいですね。年始にピタゴラスイッチの特番をやる影響でその関係の検索がきていますし、年末の忘年会シーズンと言うことでカラオケに関する検索がいろいろときています。私の場合はそもそも所属がないですので忘年会などに誘われるなんてこともほぼなく。・・・なんともはや。
低解像度のノートPCでゲームがすることが多く、このソフトはよく使わせてもらっていますが、ひなたのつきというゲームでこれを使って、画面設定をいじってみたところ、黒い外枠と白い四角のみで何も表示されなくなってしまいました。
適当にカーソルを動かすとSEが流れるので起動はできてるのでしょうが。
デフォルトの解像度だと画面からはみ出してしまい非常に見づらいのでどうにかできないでしょうか
ご意見ありがとうございます。
この現象については「Ver 0.46への更新時でウィンドウサイズに関する問題を対応」と「いくつかの特殊な設定が必要」となります。
詳しい状態についてはVer 0.46の更新記事で紹介しています。