算譜の部屋。上に行くほど新しい。
ダウンロードは ⇒ ssao_rev.zip
MSAA無効でインチキできないかと思ったやつ。拡大描画して縮小フィルタかけるのは古代の技法なので適当に。
WIP.メモ書き程度。MSAAだとGenerateMipsできないらしい。無念。
ダウンロードは ⇒ dx11_comp.zip
PIXが動作しない件からできた副産物。
DirectX11のアプリ解析のためにPIXで起動すると、CreateRenderTargetViewで落ちる現象が発生することがある。以下関連スレ。
D3D11CreateDevice failed[gamedev.net]
どうもスレッドによるとランタイムの更新と、特定のKB-WindowsUpdateを削除すると、
動作するようになるらしい。以下私が解決した手順。
[前提環境]
Windows7 Ultimate SP1 64bit
[手順]
[1]
以下のWindowsUpdateをプログラムの追加と削除からアンインストール
Update for Microsoft Windows (KB 2670838) :
http://support.microsoft.com/kb/2670838/ja
※理由は特にないがいろいろみると怪しい。
「DirectX SDK の Pix for Windows ツールは、このプラットフォーム更新プログラムとは互換性がありません」
ということらしいので、そういうことなんだろう。
[2] ※[1]で解決しなかったら実施。
Remote Tools for Visual Studio 2012 (x64) Englishをインストール
http://go.microsoft.com/?linkid=9810454
http://go.microsoft.com/?linkid=9810464
※↑スレの直リンクらしい
再起動後、無事に使用できるようになった。やれやれ。
金持ってるならExpress使用するなということかな。
どうでもいいけどAntialiasedLineEnableはtrueにするとLine重くなる。
MSAA有効 + falseで良い感じ。
ダウンロードは ⇒ d2dcom.zip
供養。気分転換に初触りだったのだが使い方がまずかったのかパフォーマンスが。
pix見ると祭り。
南無。
ダウンロードは ⇒ CS.zip
ComputeShaderを使ってレンダリング + 影。PixelShaderは調整だけで使っている。
きちんとした評価は実施していない。適当。
◆はまったところ◆
DX11だとregister u0〜はレンダリングターゲットに割り振られる。
MSDN廻り参照 http://msdn.microsoft.com/ja-jp/library/ee419707(v=vs.85).aspx
なので最初ComputeShader側で計算した値をPixelShaderでコピーしないと使えないのかと思ってクソだと思ってたら無知をさらして死んだ。
単にRenderTargetの数だけUAVのスロットをずらして参照すればOK。
んが、CShaderの本領はもっとプリミティブチックで、入力された三角形の刈り込みとかを行う感じで今後使われそう感(わしがつかう)
おれ全然気にしてないんだけどpatent回りどうなってるんだろうね。すごい便利。
2015年8月20日 - D3DX11使わないように修正。
元ネタ
メモ。GeometryShaderで遊ぶ。
DirectX11が対応していないと動作しません。
ポリの法線の方向にTriangleStripを辺から突き出して、最後にフタをして終わり。
熱っぽい感じに見えるのは視点からの距離をlerpしてるだけ。
DL : dx11_geometry_shader_temp.zip
作ってて思ったけどやっぱりDirectX11は初期化面倒。
けど、きちんと作り方設計すれば加速的にいろいろできる気がする(気がするだけ)
メッシュデータはD3DX9のCreateTeapotで作って、頂点をコピーして、ちょっとゆがませて使ってる。
d3d9device作らないといけないけど、気にしない。
ちなみにフルスクリーンにできない。
あとこれに似ている。
onion bloom outback
お勉強。頂点バッファは作らず、定数バッファに位置、回転具合を持たせる。
GeometryShaderでSV_InstanceIDを使って定数バッファからポリゴンを作る。
元ネタは頂点バッファ作らなくても描画できますよ的な。
http://wlog.flatlib.jp/archive/1/2007-8-4 : ホイール欲しい ハンドル欲しい
gs_poly2d.zip
これの場合シェーダー側はSV_InstanceIDだけが欲しいので、POINTLIST使って、
d3dcontext->DrawInstance(1, OBJ_MAX, 0, 0);
って感じ。
なんとかDrawInstance(0, ...)とかしたかったけど、1 primitive完結する頂点数を与えないとDraw系ダメみたいです(なのでPOINTLIST)
DrawAutoは使い方がまだわかってない。
しかし、GeometryShaderで2Dを遊ぶなんて罰あたりでござる。南無。