トップページ > 記事閲覧
MV1のRoughnessやMetallic、Emissiveに使用されているテクスチャを取得したい
名前:E_Nock 日時: 2025/11/13 06:03

現在DxLibを使用してゲーム開発フレームワークを作成しております。 モデルの描画に自前でマテリアルやシェーダーを管理するシステムを作成しているのですが、 モデルによってはPBRで自己発光やラフネス、メタリックを使用しているものがあり、 シェーダー側でサンプリングするためにそのテクスチャをSRVとして渡したいと思っています。 しかしヘッダを拝見したところ、モデルに使われているノーマルマップ、Diffuse、Specularのみ取得できるようで、これらのテクスチャを取得する方法がありません。 お忙しいところ恐縮ですが、何とかテクスチャ取得用のメソッドを用意していただけませんでしょうか?
メンテ

Page: 1 |

Re: MV1のRoughnessやMetallic、Emissiveに使用されているテクスチャを取得したい ( No.1 )
名前:管理人 日時:2025/11/13 23:56

了解しました、自己発光、ラフネス、メタリックのテクスチャ取得機能ですね すみません、手元にそれらのテクスチャが含まれるfbxファイルが無いので お手数で申し訳ありませんが自己発光、ラフネス、メタリックのテクスチャが含まれる fbxファイルをご提供頂けないでしょうか? m(_ _;m
メンテ
Re: MV1のRoughnessやMetallic、Emissiveに使用されているテクスチャを取得したい ( No.2 )
名前:E_Nock 日時:2025/11/14 12:35

かしこまりました。ご対応ありがとうございます。 ファイルはメールの方で共有させていただきます。
メンテ
Re: MV1のRoughnessやMetallic、Emissiveに使用されているテクスチャを取得したい ( No.3 )
名前:管理人 日時:2025/11/15 11:11

ファイルのご共有ありがとうございます 自己発光、ラフネス、メタリックのテクスチャを取得できるようにしてみましたので、 よろしければこちらの機能追加版をダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) // ビューアー https://dxlib.xsrv.jp/temp/DxLibModelViewerTest.zip 上記の DxLibModelViewer で fbxファイルを読み込み mv1ファイルとして保存すると、 mv1ファイルの中に自己発光、ラフネス、メタリックのテクスチャの情報が Diffuse等と同じように保存されます その mv1ファイルを上記のバージョンのDXライブラリで MV1LoadModel で読み込んだモデルハンドルに対して 今回新たに追加した以下の関数でマテリアルに設定されている自己発光などのテクスチャの番号が取得できます // 指定のマテリアルで自己発光マップとして使用されているテクスチャのインデックスを取得する int MV1GetMaterialEmissiveMapTexture( int MHandle, int MaterialIndex ) ; // 指定のマテリアルでラフネスマップとして使用されているテクスチャのインデックスを取得する int MV1GetMaterialShininessMapTexture( int MHandle, int MaterialIndex ) ; // 指定のマテリアルでメタリックマップとして使用されているテクスチャのインデックスを取得する int MV1GetMaterialReflectionFactorMapTexture( int MHandle, int MaterialIndex ) ; ( 関数名が Roughness や Metallic ではないですが、これは fbxファイル内での名称に合わせたためです ) 上記関数で取得できるテクスチャ番号を使用して MV1GetTextureGraphHandle を使用すると、 実際の描画に使用できるグラフィックハンドルを取得することが出来ます // テクスチャのグラフィックハンドルを取得する int MV1GetTextureGraphHandle( int MHandle, int TexIndex ) ; レンダリングは独自に行われているとのことなので現状では MV1DrawModel 内で自己発光、ラフネス、 メタリックのテクスチャはシェーダーパラメータとして設定していないのですが、DXライブラリ側で 設定した方が良いでしょうか? ( もし設定する場合は 3, 4, 5番に設定することになるかと思います )
メンテ
Re: MV1のRoughnessやMetallic、Emissiveに使用されているテクスチャを取得したい ( No.4 )
名前:E_Nock 日時:2025/11/15 16:25

迅速な対応ありがとうございます。 使用してみた感じ、概ね思った通りに動いてくれて安心しました。 しかし、一つだけ問題が... 頂いた新型ModelViewerでモデルを吐き出したのですが、ライティング計算結果がおかしくなってしまいました。 RenderDocで確認したところ、旧型Viewerと新型で該当モデルのノーマルがYのみ+-反転しているみたいです... テクスチャ自体は変わっておらず、マッピング後のワールド法線がおかしいようです。 私が知らないだけで、ノーマルマッピングの方式が変わっていたりするのでしょうか? > レンダリングは独自に行われているとのことなので現状では MV1DrawModel 内で自己発光、ラフネス、 > メタリックのテクスチャはシェーダーパラメータとして設定していないのですが、DXライブラリ側で > 設定した方が良いでしょうか? 私も学生しながらの開発でして、ひたすら授業と並行してやるのが精いっぱいなので、 その辺りの需要はちょっとわかりません... 私個人としてはデフォルトのMV1DrawModelを使うことがほとんどなく、MV1DrawTriangleListからfor文回して描いてるので、 そこまで必要性は感じていない、というのが率直な意見になります。
メンテ
Re: MV1のRoughnessやMetallic、Emissiveに使用されているテクスチャを取得したい ( No.5 )
名前:管理人 日時:2025/11/16 00:03

追加した機能については正常に動作したようで何よりです > 頂いた新型ModelViewerでモデルを吐き出したのですが、ライティング計算結果がおかしくなってしまいました。 > RenderDocで確認したところ、旧型Viewerと新型で該当モデルのノーマルがYのみ+-反転しているみたいです... >  > テクスチャ自体は変わっておらず、マッピング後のワールド法線がおかしいようです。 > 私が知らないだけで、ノーマルマッピングの方式が変わっていたりするのでしょうか? いえ、特に変更は行っていないはずですが… 旧型Viewerの実行時にウィンドウタイトルに記載されているバージョンや DxModelViewer.exeのファイル更新日時はいつになっていますでしょうか? > 私個人としてはデフォルトのMV1DrawModelを使うことがほとんどなく、MV1DrawTriangleListからfor文回して描いてるので、 > そこまで必要性は感じていない、というのが率直な意見になります。 了解です では現状のままDXライブラリ側ではテクスチャの設定は行わないようにします
メンテ
Re: MV1のRoughnessやMetallic、Emissiveに使用されているテクスチャを取得したい ( No.6 )
名前:E_Nock(解決済み) 日時:2025/11/16 10:24

すみません、どうやら法線再計算オプションをオフにしていたみたいです... 有効化したところ上手くいきました。お騒がせして申し訳ありません
メンテ

Page: 1 |

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

   クッキー保存