トップページ > 過去ログ > 記事閲覧
一部PMDモデルの読み込み不具合について
名前:Drile 日時: 2011/06/28 17:36

DxLibModelViewerで一部のpmdモデルを読み込むと、 テクスチャが正常に表示されないことがあるようです。 使用したモデルはこちらです。 tp://www1.axfc.net/uploader/Sc/so/249686&key=mmd 目の部分がうまく表示されず、肌色になっているのがわかると思います。 髪の毛の色も変わっています。 よろしくお願いします。

Page: 1 |

Re: 一部PMDモデルの読み込み不具合について ( No.1 )
名前:いっち 日時:2011/06/28 19:55

> 目の部分がうまく表示されず、肌色になっているのがわかると思います。 > 髪の毛の色も変わっています。 どのように表示されるのが正しいのか分かる例示を頂けますか?
Re: 一部PMDモデルの読み込み不具合について ( No.2 )
名前:Drile 日時:2011/06/28 23:12

たしかに、例を示すべきでした。すみません。 tp://blog-imgs-45.fc2.com/3/d/g/3dgm/model.jpg 私の環境ではこのようになります。 左がMikuMikuDance Ver7.39での描写 右がDxLibModelViewer Ver3.05での描写です。 目のテクスチャと、髪の毛のテクスチャが正常に表示されていないのがわかると思います。
Re: 一部PMDモデルの読み込み不具合について ( No.3 )
名前:いっち 日時:2011/06/29 23:30

拝見しました。ありがとうございます。 パラメータの調整で何とかならないかと試してみたのですが、駄目でした。 DXライブラリ Ver.3.03 付属の DxLibModelViewer ですと頭髪の質感だけは例示に近い結果が得られるようでしたが、 そういったことも含めて、私には分かりませんでした。 お役に立てず、すみません。他の方の回答をお待ち下さい。
Re: 一部PMDモデルの読み込み不具合について ( No.4 )
名前:管理人 日時:2011/07/04 01:12

ご報告ありがとうございます 目の部分や髪が正常に表示されないことを確認しました 調べてみた結果、32ビットBMPの上位8ビット( アルファチャンネル )の部分が すべてのドットで0になっている画像を使っている部分が正常に表示されていなかったようです MikuMikuDance ではどのように判断しているのかは分かりませんが、とりあえず DXライブラリではすべてのドットのアルファ値が0の32ビットBMPはアルファチャンネルが無いものとして、 すべてのドットのアルファ値を255( 最大値 )とすることで正常に表示することができました 修正版をこちらにアップしましたので、よろしければお試しください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Gnu C++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) // ビューアー http://homepage2.nifty.com/natupaji/DxLib/DxLibModelViewerTest.zip ところで、ちょっと話が逸れるのですがDXライブラリにはまだリファレンスに載せていませんが フルシーンアンチエイリアシング( 以後FSAA )の設定を行う関数があります トゥーンレンダリングという表現はエッジがはっきり現れるのでFSAAを 掛ける場合と掛けない場合でジャギの目立ち具合がかなり変わります そこそこの性能を持ったGPUではないとそもそも FSAAに対応していなかったり 対応していても FSAA は重い処理なのでそれなりの性能を持ったGPUではないと 実用に耐えなかったりしますが、よろしければオプション機能として FSAAの使用を 検討してみていただけないでしょうか? FSAA の設定を行う関数は以下の関数です // 画面のフルスクリーンアンチエイリアスモードの設定をする( DxLib_Init の前でのみ使用可能 ) int SetFullSceneAntiAliasingMode( int Samples, int Quality ) ; // 描画可能な画像のマルチサンプリング設定を行う int SetDrawValidMultiSample( int Samples, int Quality ) ; SetFullScreenAntiAliasingMode は画面自体に FSAA 設定を行うもので、注釈にもありますが こちらは DxLib_Init の前でのみ使用可能です SetDrawValidMultiSample は以降に作成する描画可能画像を FSAA 付きにします こんな感じで使用します SetDrawValidMultiSample( 4, 8 ) ; DrawScreen = MakeScreen( 640, 480 ) ; SetDrawValidMultiSample( 0, 0 ) ; こちらは DxLib_Init の後でも使用できます、今回アップしたビューアーで使用しているのは SetDrawValidMultiSample で、FSAA をONにした状態ではまずこの関数で作成した FSAA 付きの 描画可能画像に3D映像を描画して、それを裏画面に普通に DrawGraph で描画した後、 2D表示( ボタンやリストなど )を後から描画するという手法をとっています ( 「表示」メニューで FSAA をOFFにした場合は、3D映像も2D表示もそのまま裏画面に描画します ) オプション画面で即座に変更できるようにしようとすると SetDrawValidMultiSample と 描画可能画像を使う方法しか選択肢がありません・・・ 引数の Samples は1ドットを何個のドットで表現した場合に相当するクオリティを持たせるかというもので ( 例えば 4 と指定すると 1 ドットを 4ドット分、つまり縦横2倍の面積を持つ画像に描画した場合に 相当するクオリティになります )、今回アップしたビューアーで使用している FSAA 設定では見た目を重視して 8 を使用していますが、4 でも FSAA 無しに比べるとかなりの差があります( 今回拝見したモデルで言えば 頭髪のディティールに大きな差がでます )ので、実用的な負荷を考えると 4 で、パワーの有り余っているGPUであれば 8 や 12 などの値にしてしまってもそこそこ行けると思います Quality は FSAA の質で、こちらも値が大きいとそれだけ見た目も良くなりますが負荷も上がります こちらは Samples よりは若干値を大きくしても負荷が顕著に上がりませんので、4 や 8 くらいが 丁度良いと思います よろしければお使いになってみてください m(_ _)m
Re: 一部PMDモデルの読み込み不具合について ( No.5 )
名前:Drile(解決済み) 日時:2011/07/04 16:26

きちんと表示されているのを確認しました。 いっちさん、管理人さん、お忙しい中ありがとうございます。 >FSAA 残念ながら私のGPUでは対応していないようですが、 オプションとして追加してみますね。 ありがとうございます!

Page: 1 |