トップページ > 記事閲覧
Zバッファ状態の取得方法
名前:s3 日時: 2022/06/23 12:48

お忙しい中、失礼致します。 自作シェーダーを用いて、色々な表現を試行しておりまして、 水際や特殊バリアなどの衝突表現にデプス値を利用しております。 下記のサンプル集にまとめて頂いている、 ttps://dxlib.xsrv.jp/program/dxprogram_VolumeWater.html 専用のデプススクリーンを用意して、メインスクリーンと、それぞれにモデル描画していく手法にて、実装&表現自体はできたのですが、 Blur表現など、その他諸々の用途もあり、専用スクリーンに個々を描画する手法にて、ドローコールが気になって参りました。 現在、描画対象となっているスクリーンのZバッファ状態を使いまわしたく、 取得できないか試行しているのですが、 @CopyGraphZBufferImage()  →DX11では未実装(※DX11環境にて、自作シェーダを動かしております) AGetUseDirect3D11DepthStencilTexture2D()  →auto imgF = GetUseDirect3D11DepthStencilTexture2D(); auto grId = CreateGraphFromID3D11Texture2D(imgF );   使い方が誤っているかもしれませんが、CreateGraphFromID3D11Texture2Dにて例外エラー。 BGetGraphID3D11DepthStencilView()  →auto imgF = GetGraphID3D11DepthStencilView(mainGrId); auto grId = CreateGraphFromID3D11Texture2D(imgF );   A同様 A、Bにつきましては、使用方法の理解も怪しく、上手くいっていない状況です。 Zバッファ状態の参照方法や、負荷軽減のためのマルチレンダーターゲットの使用方法など、 アドバイスございましたら、頂けますと幸いです。 よろしくお願い致します。
メンテ

Page: 1 |

Re: Zバッファ状態の取得方法 ( No.1 )
名前:管理人 日時:2022/06/25 22:38

個人的な印象では Direct3D 11 の頃になるとデプス値を使用したい場合は カラーテクスチャにデプス値を書き込んで利用する感じで、デプスバッファの 値を利用することはあまりないように思います( カラーテクスチャに比べて 制限が多いのが原因かもしれません ) というわけで、マルチレンダーターゲットの使用方法についてお答えします ( 因みに CreateGraphFromID3D11Texture はカラーテクスチャのみ対応しているので、 デプスバッファを渡すと例外で落ちるのは仕様となります ) マルチレンダーターゲットは SetRenderTargetToShader を使用して行います // シェーダーを使用した描画での描画先を設定する( DrawScreen に -1 を渡すと無効化 ) int SetRenderTargetToShader( int TargetIndex, int DrawScreen, int SurfaceIndex = 0, int MipLevel = 0 ) ; 第一引数に 0 を渡して設定すると SetDrawScreen を使用した場合と同じメインの レンダーターゲットに設定することになります 1 以上を指定するとマルチレンダーターゲット機能をしようすることになります ( 最近の GPU では 8つのマルチレンダーターゲットに対応しているようなので、 指定できる値は 0 〜 7 となります ) マルチレンダーターゲットにした場合に、何番目のレンダーターゲットに何の値を 代入するかは、ピクセルシェーダーのコードで指定します 出力する構造体の定義は以下のように SV_TARGET0 以外に SV_TARGET1 や SV_TARGET2 の ものも追加して、 // ピクセルシェーダーの出力 struct PS_OUTPUT { float4 Color0 : SV_TARGET0 ; float4 Color1 : SV_TARGET1 ; float4 Color2 : SV_TARGET2 ; } ; 後はそれぞれのメンバー変数に値を代入するだけなので簡単です PS_OUTPUT main( PS_INPUT PSInput ) { PS_OUTPUT PSOutput ; // レンダーターゲット0 は赤を出力 PSOutput.Color0.r = 1.0f ; PSOutput.Color0.g = 0.0f ; PSOutput.Color0.b = 0.0f ; PSOutput.Color0.a = 1.0f ; // レンダーターゲット1 は緑を出力 PSOutput.Color1.r = 0.0f ; PSOutput.Color1.g = 1.0f ; PSOutput.Color1.b = 0.0f ; PSOutput.Color1.a = 1.0f ; // レンダーターゲット2 は青を出力 PSOutput.Color2.r = 0.0f ; PSOutput.Color2.g = 0.0f ; PSOutput.Color2.b = 1.0f ; PSOutput.Color2.a = 1.0f ; return PSOutput ; } よろしければお試しください m(_ _)m
メンテ
Re: Zバッファ状態の取得方法 ( No.2 )
名前:s3 日時:2022/06/25 15:45

ご回答ありがとうございます! デプスを2度書きしているようで、不安がありましたが、 ご記載頂いている"制限"の理解をしていくことで納得することできそうです。 また、マルチレンダーターゲットのサンプルも頂きまして、 ありがとうございました! 早速試させて頂きます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存