トップページ > 記事閲覧
3DモデルをDxLibModelViewerと同じ表現で描画したい
名前:みこ 日時: 2024/10/02 03:43

いつもお世話になっております ライトや影などDxLibModelViewerと同じように描画したいのですがオープンソースで無いという事もあり、 全く同じ表現が難しいので質問させていただきます。 ※以下にソースコードとスクリーンショットがあります ttps://drive.google.com/open?id=11Qou4hbz9Sk62I_bYjcFzY7UF8wO66SX&usp=drive_fs スクリーンショットのDxLibModelViewer(上)とソースコード実行(下)いずれも同じmv1ファイルを表示しているのですが、 DxLibModelViewerの方が繊細で綺麗に見えますが、ソースコードの方は少し違和感があります お手数をお掛けしますが何卒よろしくお願いいたしますm(__)m 【環境】 DXLib 3.24e (先日共有頂いた最新バージョンです) 64bit Windows11 i9-13900K RAM 64GB GPU RTX4070 Direct3DVersion DX_DIRECT3D_9 〜 DX_DIRECT3D_11 全て確認 【3Dモデルについて】 blenderで出力したfbx(ループテクスチャ+法線マップ+ラフネスマップ) ※ついでに別の質問する形になり申し訳ないですが、DxLibModelViewerでmv1に出力する際ラフネスマップが効きませんでしたが非対応でしょうか? 【DxLibModelViewerの設定】 表示->ライティング計算の使用 オン 表示->アンチエイリアシングの使用 オン 表示->ハードウェア頂点演算の使用 オン 表示->ピクセル単位のライティングを行う オン 【ソースコード内容】 //SetUseDirect3DVersion(DX_DIRECT3D_9); //SetUseDirect3DVersion(DX_DIRECT3D_9EX); //SetUseDirect3DVersion(DX_DIRECT3D_11); // ウィンドウ設定 const int screenX = 1280; const int screenY = 720; SetFullSceneAntiAliasingMode(8, 8); SetWindowSizeExtendRate(1.0); ChangeWindowMode(TRUE); SetGraphMode(screenX, screenY, 32); SetWindowSize(screenX, screenY); SetDoubleStartValidFlag(TRUE); // 多重起動可に設定 SetUseHardwareVertexProcessing(TRUE); // ハードウェア頂点演算の使用 // DXライブラリ初期化処理 DxLib_Init(); // 描画範囲 SetDrawArea(0, 0, screenX, screenY); // バイニリア有効 SetDrawMode(DX_DRAWMODE_BILINEAR); SetFullScreenScalingMode(DX_FSSCALINGMODE_BILINEAR); //SetUseVramFlag(TRUE); // Zバッファを有効化 SetUseZBuffer3D(TRUE); SetWriteZBuffer3D(TRUE); // mv1読み込み //MV1SetLoadModelReMakeNormal(TRUE); // 法線の再計算 int model = MV1LoadModel("data/stage.mv1"); // ピクセル単位のライティングを行う SetUsePixelLighting(TRUE); // 点照明 (DxLibModelViewerのクリップボードから引用) SetLightEnable(FALSE); // 標準ライトを無効にする SetGlobalAmbientLight(GetColorF(0.0f, 0.0f, 0.0f, 0.0f)); int Light2Handle = CreatePointLightHandle(VGet(-1250.000f, 2187.500f, 0.000f), 6022.729f, 0.636f, 0.000f, 0.000f); SetLightDifColorHandle(Light2Handle, GetColorF(1.000f, 1.000f, 1.000f, 1.000f)); // ディフェーズ(拡散光) SetLightSpcColorHandle(Light2Handle, GetColorF(0.500f, 0.500f, 0.500f, 0.000f)); // スペキュラ(反射光) SetLightAmbColorHandle(Light2Handle, GetColorF(0.000f, 0.000f, 0.000f, 0.000f)); // アンビエント(環境光) // カメラのセットアップ (DxLibModelViewerのクリップボードから引用) SetCameraPositionAndTarget_UpVecY(VGet(-0.000141f, 3839.392578f, -3233.579102f), VGet(0.000000f, 2500.000000f, 0.000000f)); SetCameraNearFar(100.000023f, 25000.003906f); // 3Dモデルの描画 MV1DrawModel(model); WaitKey() ; // キーの入力待ち DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了
メンテ

Page: 1 |

Re: 3DモデルをDxLibModelViewerと同じ表現で描画したい ( No.1 )
名前:管理人 日時:2024/10/02 22:43

DxLibModelViewer は裏画面に直接描画せず、MakeScreen で作成できる 仮画面に一度描画しているのが関係しているかもしれません 以下のコードを追加して、アンチエイリアス機能付きの仮画面に描画してから 裏画面に描画する、というのを試してみてください m(_ _)m 〜〜〜〜〜グローバル変数に以下を追加〜〜〜〜〜 // 仮画面のグラフィックハンドルの変数 int TempScreen; 〜〜〜〜〜初期化処理に以下を追加〜〜〜〜〜 // アンチエイリアス機能付きの仮画面を作成する設定を行う SetDrawValidMultiSample( 8, 8 ); // 仮画面を作成する TempScreen = MakeScreen( screenX, screenY, FALSE ); 〜〜〜〜〜メインループの描画処理を以下のように変更〜〜〜〜〜 // 描画先を仮画面にする SetDrawScreen( TempScreen ); =====MV1DrawModel などの描画処理===== // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ); // 裏画面に仮画面を描画する DrawGraph( 0, 0, TempScreen, FALSE ); // 裏画面の内容を表画面に反映 ScreenFlip(); 因みに DxLibModelViewer では SetFullSceneAntiAliasingMode は使用していません ( 代わりに SetDrawValidMultiSample を使用してアンチエイリアスをしています ) > ※ついでに別の質問する形になり申し訳ないですが、DxLibModelViewerでmv1に出力する際ラフネスマップが効きませんでしたが非対応でしょうか? スペキュラマップというラフネスマップに近いものには対応していますが、 ラフネスマップには非対応です
メンテ
Re: 3DモデルをDxLibModelViewerと同じ表現で描画したい ( No.2 )
名前:みこ 日時:2024/10/03 09:23

ご連絡ありがとうございます! ご指摘通りMakeScreenを使用したところかなり近くなりましたが、 DxLibModelViewerの方がコントラストが効いている(?)と言いますか、特に壁が鮮明に見えます ※リンク先に スクリーンショット_2.png を追加しました 壁の凸凹の黒い線についてですが、法線マップによってライトの影になっていますので、 ライティングや影の設定の違いが他にあるのではないかと個人的に思っています >スペキュラマップというラフネスマップに近いものには対応していますが、 >ラフネスマップには非対応です 対応は難しいでしょうか? 今すぐ必要というわけではありませんが今後更に綺麗な描写ができるといいなと思っています。 別スレッドの【ios板のDxLiBMakeとDxMakeUseLibの作り方について】について こちらのスレッド私も興味があり閲覧したのですが、もし良ければAndroid版の方法もご指摘頂けると助かりますm(__)m >( 最近は過去に準備したライブラリファイルビルド用のバッチファイルを実行するだけなのでセットアップの仕方を失念しています… ) もし良ければバッチファイルを共有可能でしたらそちらでも可能ですm(__)m
メンテ
Re: 3DモデルをDxLibModelViewerと同じ表現で描画したい ( No.3 )
名前:名無三 日時:2024/10/03 14:30

ラフネスマップはPBR向けのモノなのでファンシェーディングでは使い道がないように思います… 法線が逆転してる気がするのでそれの再計算を入れてみるとどうでしょう?
メンテ
Re: 3DモデルをDxLibModelViewerと同じ表現で描画したい ( No.4 )
名前:管理人 日時:2024/10/04 01:31

> ご指摘通りMakeScreenを使用したところかなり近くなりましたが、 > DxLibModelViewerの方がコントラストが効いている(?)と言いますか、特に壁が鮮明に見えます > ※リンク先に スクリーンショット_2.png を追加しました 一つご質問させてください DxLibModelViewer のメニューの『読み込みオプション』の『法線再計算』はONになっていますでしょうか? > >スペキュラマップというラフネスマップに近いものには対応していますが、 > >ラフネスマップには非対応です > 対応は難しいでしょうか? > 今すぐ必要というわけではありませんが今後更に綺麗な描写ができるといいなと思っています。 ラフネスマップというものについて知らなかったのですが、調べてみたところ名無三さんも仰られています通り PBR(物理ベースレンダリング)用のマップのようです DXライブラリのレンダリング方式はPBRではない( 物理ベースではない )旧来のレンダリング方式なので対応はできません、すみません ( 尚、PBRは実装難度が高く、また仮にPBRを実装できたとしてもビルドして作成される実行ファイルの容量がかなり大きくなることが 予想されるため、DXライブラリにPBRを実装する予定はありません ) > こちらのスレッド私も興味があり閲覧したのですが、もし良ければAndroid版の方法もご指摘頂けると助かりますm(__)m > >( 最近は過去に準備したライブラリファイルビルド用のバッチファイルを実行するだけなのでセットアップの仕方を失念しています… ) > もし良ければバッチファイルを共有可能でしたらそちらでも可能ですm(__)m 了解です
メンテ

Page: 1 |

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

   クッキー保存