2

DirectX 10 でアンチエイリアス処理を行うために必要なプロセスについて混乱しています。これまでまったく行ったことがないので、一般的な手順で混乱している可能性があります。

私がこれまでに知っている (または知っていると思う) ことは次のとおりです。シェーダーで使用する RasterizerState オブジェクトのマルチサンプリングを有効にする必要があり、スワップ チェーンの説明 (DXGI_SWAP_CHAIN_DESC) の SampleDesc をサポートされている値に設定する必要があります。カウントします(そして、他の値またはハードウェア固有であるため、品質は0のままにする必要がありますが、何のためにあるのかわかりません)。さらに描画するための呼び出し (ClearRenderTargetView および IASetInputLayout) と Present の呼び出しの間に、バック バッファーを (ResolveSubresource を介して) ダウンサンプリングして、同じサイズのテクスチャにする必要があります。次に、(これは私が何も見つけることができない部分です) どういうわけか、ダウンサンプリングされたテクスチャを提示します。

途中で何かがおかしいのでしょうか?それとも、最後のステップで間違っていますか?マルチサンプリングされたシェーダー テクスチャ (Texture2DMS<>) を使用したフルスクリーン クワッドへの最後の描画中にサンプリング解像度を実行することを参照しているリソースをいくつか見ましたが、それが何を伴うのか、またはなぜそれをやり直すのかを理解できません。そのように解決するためのデバイス呼び出し。

私がこれを試みたとしても、画質は向上しません。

4

1 に答える 1

5

編集: 私は DX11 を使用しています。D3D11_ の代わりに D3D10_ を使用してください。DeadMG に感謝します。

ダウンサンプリングを行う必要はありません。

お使いの GPU がサポートしている品質モードとサンプル カウントの種類を確認してください。品質レベルは 0 であるべきだとおっしゃいましたが、それは誤りです。これを使用して、サンプル数でサポートされている品質モードを取得します。

UINT GetMSAAQuality(UINT numSamples,DXGI_FORMAT format)
    {
        UINT q=-1;
        HR(m_device->CheckMultisampleQualityLevels(format,numSamples,&q));
        return q-1;
    }

    // Use it like this:
    UINT sampleCount=4; // You set this
    UINT sampleQuality=GetMSAAQuality(sampleCount,DXGI_FORMAT_CHOOSE_ONE);

    // For swap chain
    DXGI_SWAP_CHAIN_DESC d;
    d.SampleDesc.Count=sampleCount;
    d.SampleDesc.Quality=sampleQuality;

        // Now for all the textures that you create for your
        // render targets and also for your depth buffer
        D3D11_TEXTURE2D_DESC dtex;
        dtex.SampleDesc.Quality=sampleQuality;
        dtex.SampleDesc.Count=sampleCount;

        // Now for all your render target views you must set the correct dimension type
        // based on if you use multisampling or not
        D3D11_RENDER_TARGET_VIEW_DESC drtv;
        dRtSwapChain.ViewDimension=sampleQuality==0?D3D11_RTV_DIMENSION_TEXTURE2D:D3D11_RTV_DIMENSION_TEXTURE2DMS;

 // For depth stencil view
D3D11_DEPTH_STENCIL_VIEW_DESC ddsv;
ddsv.ViewDimension=sampleQuality==0?D3D11_DSV_DIMENSION_TEXTURE2D:D3D11_DSV_DIMENSION_TEXTURE2DMS;

シェーダーでマルチサンプリング テクスチャを読み取りたい場合 (たとえば、フルスクリーン クワッドをレンダリングする場合)、テクスチャ Texture2DMS<> を宣言する必要があります。

于 2011-07-24T10:06:00.773 に答える