ページ 11

Zバッファが狂って表示順序がおかしくなる

Posted: 2017年11月18日(土) 13:08
by 葡萄
Directx11でFBXSDKを使いFBXデータを読み込み描画をしようとしているのですが
オブジェクトからカメラを離すとDepthのせいで表示順がおかしくなります。
DepthのformatにはDXGI_FORMAT_D24_UNORM_S8_UINTを使っています。
よりDepthのbitの小さいformatを使うと目に見えて悪化してるのが分かるので正しく動いていると思います。
この以上大きいサイズのDepthは見つからずどうすれば良いのか分からない状況です。
画像
画像

Re: Zバッファが狂って表示順序がおかしくなる

Posted: 2017年11月18日(土) 13:10
by 葡萄
Unityちゃんを外部にあげてしまったのでライセンス
© UTJ/UCL

Re: Zバッファが狂って表示順序がおかしくなる

Posted: 2017年11月18日(土) 23:09
by manntera
D3D11_DEPTH_STENCIL_DESC に設定してる内容と、
射影行列の作り方を見せて頂けますか?

Re: Zバッファが狂って表示順序がおかしくなる

Posted: 2017年11月19日(日) 00:13
by 葡萄
DESCの中身

コード:

//ステンシルステートの初期化(3D用)
	ZeroMemory(&depthStencilDesc, sizeof(depthStencilDesc));

	//ステンシルステート設定
	depthStencilDesc.DepthEnable = true;
	depthStencilDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
	depthStencilDesc.DepthFunc = D3D11_COMPARISON_LESS;

	depthStencilDesc.StencilEnable = true;
	depthStencilDesc.StencilReadMask = 0xFF;
	depthStencilDesc.StencilWriteMask = 0xFF;

	depthStencilDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
	depthStencilDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR;
	depthStencilDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
	depthStencilDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;

	depthStencilDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
	depthStencilDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR;
	depthStencilDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
	depthStencilDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
射影行列

コード:

FLOAT fov = XM_PIDIV4;
FLOAT Asspect = Viewport.Width / Viewport.Height; //Viewportの中身は正しいウィンドウ幅が入っている
FLOAT Near = 0.01f, Far = 1000.0f;
 XMMatrixTranspose(XMMatrixPerspectiveFovLH(fov, Asspect, Near, Far));
このようになっています。

Re: Zバッファが狂って表示順序がおかしくなる

Posted: 2017年11月19日(日) 11:38
by manntera
多分違うとは思いますが、一度
depthStencilDesc.StencilEnable = true;
をfalseにしてみてください。
ちょっとこのバグは予想がつかないですね…

ちなみにグラフィックスデバッガは使ってますか?
画面上部のメニューバーから、デバッグ→グラフィックス→グラフィックスデバッグの開始→(プログラムが起動)→確認したい画面まで操作したら→フレームのキャプチャをクリック→左上に出て来るフレームxxxをクリック→なんか色々チェック出来る。

チェック出来る内容は色々といじって確かめてみて下さい。

Re: Zバッファが狂って表示順序がおかしくなる

Posted: 2017年11月19日(日) 16:07
by ISLe
コード見ただけですが、0.01f(Near)~1000.0f(Far)の有効桁数6桁がfloatの精度ギリギリなのは関係ないですかね。

Re: Zバッファが狂って表示順序がおかしくなる

Posted: 2017年11月19日(日) 16:34
by 葡萄
depthStencilDesc.StencilEnable = false;
にしても駄目でした。
Near = 1.0f;
にしましたが変化は無かったです。

fov = XM_PIDIV2;と角度を小さくしたら一応治りました。
可能性がありそうな部分をいじり続けたら治っただけなのでどうして治ったのか分かりません。
解決?はしているので解決をつけておきますが、fovを小さくしたら治った理由について教えて欲しいです。