Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.17 ) |
- 名前:珈琲 日時:2013/06/01 17:06
とりあえずDirectX9と11編を読みました
シェーダや3Dの描画にも色々あるということがわかりました。
例によってコードの方はチンプンカンプンでした
気になったのは
ソフトパーティクル、フォンシェーディング、ボリュームライト、ソフトシャドー、リムライティング
あたりです。
道のりは長いですがDxlibで出来うる限り実装したいです。
まずはDirectXのコードを解読するところからですかね
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.18 ) |
- 名前:softya(ソフト屋) 日時:2013/06/01 17:34
データの方はポリゴン数が少ないのに妙に重い(FPSが出ない)ので何らかの問題があるデータと思われます。
※ まだ原因不明。ただしテクスチャがなくても重い。
あとDirectX10,11系はDxlibは使えないので気をつけてください。
何処かに書いてあると思いますがDirectX9系で実装されてたはずです。
※ 掲示板の過去ログかも。
【追記】DirectX9の機能で実装してしまうなら別です。
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.19 ) |
- 名前:珈琲 日時:2013/06/01 18:05
ありがとうございます
モデルは1から作り直します。
何にしてもまずはソフトシャドウを実装することから始めてみます。
ありがとうございました
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.20 ) |
- 名前:珈琲 日時:2013/06/01 18:52
作りなおしてみましたが同じ現象が・・
mv1に変換前のmqoファイルを描画
ttp://gyazo.com/4f5cf8c7fa7e0e93ffc69e0a22b05139
mqoから変換したmv1ファイルを描画
ttp://gyazo.com/059909e28a2de282118b26e1b9c732d8
IDEではモデルのロードと描画しかしていない(座標はデフォルトのまま)
ので、
DxlibModelViewerか、Metasequoiaに原因があるのでしょうか
ただ、別のバージョンのMetasequoiaで新しく落としたDxlibModelViewerで変換しても同じ結果でした。
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.21 ) |
- 名前:softya(ソフト屋) 日時:2013/06/01 21:42
私もxファイルは日頃使っていなので勘違いしている可能性があります。
なので、基本に返りましょう。
まず、物事を単純化させて調べるのがデバッグの基本です。
1.バージョン問題を避けるためMetaseqとDxlibModelViewerを両方最新にする。
2.単純モデルとして四角形にテクスチャを張ります。
3.mqoとxファイルで、それぞれ表示してみます。DxlibModelViewerと本体で確認してみましょう。
これが問題なければ、だんだん複雑にして再現ポイントを探します。
それと私が遅いのは10.0aの性かもしれないのでバージョンアップ中です。
・・・判明しました。なぜかDxlibModelViewerのアンチエリアスがONで激遅の原因でした。申し訳ないです。
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.22 ) |
- 名前:softya(ソフト屋) 日時:2013/06/01 22:04
念の為に表示してみましたが正常に見えますね。
問題はどうやると再現されるのでしょうか?
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle,ModelHandle2;
ChangeWindowMode(TRUE);
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "menu_gamestart.mv1" ) ;
ModelHandle2 = MV1LoadModel( "menu_gamestart.x" ) ;
// 3Dモデルを設定
MV1SetMaterialAmbColor( ModelHandle, 0, GetColorF( 1.0f, 0.0f, 1.0f, 1.0f ) ) ;
MV1SetPosition( ModelHandle, VGet( 0.0f, -35.0f, 0.0f ) ) ;
MV1SetMaterialAmbColor( ModelHandle2, 0, GetColorF( 1.0f, 0.0f, 1.0f, 1.0f ) ) ;
MV1SetPosition( ModelHandle2, VGet( 0.0f, 35.0f, 0.0f ) ) ;
// カメラ
SetCameraPositionAndTarget_UpVecY(VGet(0,0,-150),VGet(0,0,0));
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
MV1DrawModel( ModelHandle2 ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.23 ) |
- 名前:珈琲 日時:2013/06/01 23:24
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
CWindowControl WindowControl = CWindowControl::GetInstance();
ChangeWindowMode(TRUE);
SetGraphMode(WindowControl.GetXWindowSize(),WindowControl.GetYWindowSize(),16);
DxLib_Init();
SetDrawMode( DX_DRAWMODE_BILINEAR );
// 3Dモデルの読み込み
int ModelHandle = MV1LoadModel( "Model/menu_gamestart.mv1" ) ;
int ModelHandle2 = MV1LoadModel( "Model/menu_gamestart.mqo" ) ;
// 3Dモデルを設定
MV1SetMaterialAmbColor( ModelHandle, 0, GetColorF( 1.0f, 0.0f, 1.0f, 1.0f ) ) ;
MV1SetPosition( ModelHandle, VGet( 0.0f, -70.0f, 0.0f ) ) ;
MV1SetMaterialAmbColor( ModelHandle2, 0, GetColorF( 1.0f, 0.0f, 1.0f, 1.0f ) ) ;
MV1SetPosition( ModelHandle2, VGet( 0.0f, 70.0f, 0.0f ) ) ;
// カメラ
SetCameraPositionAndTarget_UpVecY(VGet(200,200,-400),VGet(0,0,0));
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
MV1DrawModel( ModelHandle2 ) ;
WaitKey();
DxLib_End(); // DXライブラリ終了処理
return 0;
}
ちょっとごちゃまぜですが、カメラの向きと、モデルの高さだけ変えさせて頂き実行しました。
ttp://gyazo.com/4e2a35b9358ad866c4c74f247e215d1c
画像は、新しいのを上書きしてしまったためモデルが違います。
Y方向がマイナスであるmv1のモデルのテクスチャがずれてます。
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.24 ) |
- 名前:珈琲 日時:2013/06/01 23:31
現在のモデルを含んだプロジェクトファイルです。
ttp://ll.la/ClqN*
短縮URLなので若干不自然ですが、axfcです。
これで再現できなかったらDirectX再インストールでしょうか
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.25 ) |
- 名前:softya(ソフト屋) 日時:2013/06/02 00:15
>これで再現できなかったらDirectX再インストールでしょうか
DirectX再インストールの問題じゃない気がします。
こちらで表示してみたもの。
http://dixq.net/forum/gallery/image.php?mode=medium&album_id=53&image_id=608
このコードを、そのまま実行してみて貰えませんか。
こちらでは正常でした。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle,ModelHandle2;
SetGraphMode(640,480,16);
ChangeWindowMode(TRUE);
// DXライブラリの初期化
if( DxLib_Init() < 0 )
{
// エラーが発生したら直ちに終了
return -1 ;
}
SetDrawMode( DX_DRAWMODE_BILINEAR );
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "menu_gamestart.mv1" ) ;
ModelHandle2 = MV1LoadModel( "menu_gamestart.mqo" ) ;
// 3Dモデルを設定
MV1SetMaterialAmbColor( ModelHandle, 0, GetColorF( 1.0f, 0.0f, 1.0f, 1.0f ) ) ;
MV1SetPosition( ModelHandle, VGet( 0.0f, -70.0f, 0.0f ) ) ;
MV1SetMaterialAmbColor( ModelHandle2, 0, GetColorF( 1.0f, 0.0f, 1.0f, 1.0f ) ) ;
MV1SetPosition( ModelHandle2, VGet( 0.0f, 70.0f, 0.0f ) ) ;
// カメラ
SetCameraPositionAndTarget_UpVecY(VGet(200,200,-400),VGet(0,0,0));
// 念のためバージョン
DrawFormatString(0,0,GetColor(255,255,255),"DxLib:%s",DXLIB_VERSION_STR);
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
MV1DrawModel( ModelHandle2 ) ;
// キーの入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.26 ) |
- 名前:珈琲 日時:2013/06/02 08:10
ttp://gyazo.com/f47020db82489c65a36457b81a04994f
このように・・
ディレクトリもモデル側を移動させて同じフォルダにしましたが
・・・バージョン?
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.27 ) |
- 名前:珈琲 日時:2013/06/02 08:20
ttp://gyazo.com/38330bc49bdf337bdc99d5adb07ed549
バージョンが変更されてない?
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.28 ) |
- 名前:珈琲 日時:2013/06/02 08:30
IDEのインクルード文を消してまた入力したらバージョン3.10cになりました!!
ファイル側を更新してもプロジェクト側でもう一回更新かけないとキャッシュか何かに残ってるのでしょうか。
何の疑いもなく最新バージョンだと錯覚していました。
ありがとうございました!
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.29 ) |
- 名前:珈琲 日時:2013/06/02 08:32
テクスチャの方も正常になりました
テクスチャ自体はDXライブラリ側のバグだったんですね
バグフィックス行なっても更新しないと意味ないと・・・
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.30 ) |
- 名前:softya(ソフト屋) 日時:2013/06/02 13:48
ライブラリだけ更新しても再リンクは掛かりません。
リビルドするか、ソースを何処か修正する必要があります。
【追記】
ふと思ったのですが、フライト系を開発されているようですが本当にソフトシャドウは必要なのでしょうか?
ゲームの場合はリアルに作用する最小限の物を採用する事で最大限の効果を求めるのが普通です。
※ 処理が重くなりゲーム性が失われては元も子もないのです。
セルフシャドウは必要かもしれませんが、ビルとか地形に必要なのって事は考える必要が大有りです。
少なくともPS3やXbox360並の処理はアマチュアのコードでやると激遅になりかねないので取捨選択を十分に行なってください。
「特別インタビュー Xbox 360「ACE COMBAT 6 解放への戦火」」
http://game.watch.impress.co.jp/docs/20070427/ace6.htm
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.31 ) |
- 名前:珈琲 日時:2013/06/02 19:05
私も、よく考えたらフライトシューティングに影は必要ないんじゃないか
と思いましたが、
一年ぐらいまえにPS3の雑誌か何かで、
テクスチャの解像度に特化したサッカーの和ゲーと
影と光源を若干強めに強調したサッカーの洋ゲーのクオリティを比較する、という特集があって、
結果はテクスチャよりも影を強めにつけたほうがリアルな感じが出る
というのを思い出して、影をつけよう思いました。
当初、というか今でも、
影を強調してフォグと被写界深度を調整すれば、それだけでそこそこ見れるようになると思ってます。MMDで試してから言えって話ですが。
で、フライト系になぜ影がいるのかという話に戻るのですが、
キャラクターが街を低い高さで飛ぶようなゲームが作りたくて影が必要なんじゃないかと。
個人的には、でっかいビルの影にキャラクターとカメラが入った瞬間画面が真っ暗になるような演出もしたかったのですが、マスクじゃ再現できないかな・・
しかし、影処理がためらうレベルで遅いのなら考え直します
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.32 ) |
- 名前:softya(ソフト屋) 日時:2013/06/02 19:13
>結果はテクスチャよりも影を強めにつけたほうがリアルな感じが出る
それに関わるとしたらアンビエントやらスペキャラや基礎をしっかり固めてセルフシャドウですね。
あと、飛行機なら金属光沢なので環境マッピングなどです。
>キャラクターが街を低い高さで飛ぶようなゲームが作りたくて影が必要なんじゃないかと。
擬似的な影でもある程度実現出来ます。なぜなら動いているのは飛行機だけですから。
>個人的には、でっかいビルの影にキャラクターとカメラが入った瞬間画面が真っ暗になるような演出もしたかったのですが、マスクじゃ再現できないかな・・
そっちはHDRとか別の技術です。
>しかし、影処理がためらうレベルで遅いのなら考え直します
実験して時間計測して必要かどうか考えた上で実装してみてください。
全部がいらないとは思いますが、必要最低限にスべきです。
いろんな知識を実感として持っていないと選択出来ませんので、高度な技術ではなく基礎からちゃんと勉強してください。
マテリアルのパラメータの働きを理解することからです。
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.33 ) |
- 名前:珈琲 日時:2013/06/02 19:45
ありがとうございます。
>それに関わるとしたらアンビエントやらスペキャラや基礎をしっかり固めてセルフシャドウですね。
Dxlibの3Dのゲームを作るための基礎講座なるものはないのでしょうか?
サンプルプログラム
ttp://homepage2.nifty.com/natupaji/DxLib/program/dxprogram_3D.html
は、まぁ確かにそれに近いですが
>擬似的な影でもある程度実現出来ます。
それは、例えばビル設置予定のマップ座標周辺にビルの影のテクスチャを書き込んどくとかでしょうか
”深度値を利用した影表現基本”を
カメラの近くにある影(狭い範囲のため高解像度と、
カメラから距離が離れている大型の設置物用の影(広い範囲のため低解像度)
とか影を2種類組み合わせるつもりでしたけど
(未だにパラメータとか意味不明なので影アルゴリズムと合うかわかりませんが)
DXlib標準の3DのZバッファでどこまで影を表現できるかイマイチつかめませんが、
とりあえずソフトシャドウを目標にして、
そこからまずは負荷実験することからですね
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.34 ) |
- 名前:softya(ソフト屋) 日時:2013/06/02 20:16
アンビエントやスペキュラの効果はメタセコイア上でも確認できます。基本パラメータですので。
それから、気になっていたので聞きますがXファイルに拘る理由を教えて下さい。
DirectX10からXファイルは標準ファイルじゃないので拘る必要性が無いと思いますよ。
>擬似的な影でもある程度実現出来ます。
>それは、例えばビル設置予定のマップ座標周辺にビルの影のテクスチャを書き込んどくとかでしょうか
光源と自機の位置から計算した影ができるであろう位置に自機の影の平面モデルを貼り付けるのです。
地面との距離でアルファ率を変えたりすればそれらしく見えます。
PS2とか結構当たり前でしたよ。
建物ならプリレンダーでも十分です。
それらしく見えれば、それは正解なのです。
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.35 ) |
- 名前:珈琲 日時:2013/06/02 20:40
>気になっていたので聞きますがXファイルに拘る理由を教えて下さい。
なるべく機能の少ない、標準的なファイルから利用することで3Dを学べると思ったからです。
xファイルが標準ではなくなったと聞いて見事に当てが外れましたが・・
>光源と自機の位置から計算した影ができるであろう位置に自機の影の平面モデルを貼り付けるのです。
地面が平面でなかったとき(でこぼこしてたり)や、
垂直の建物など、ポリゴンの接合部分とか難しそうですね・・・
>それらしく見えれば、それは正解なのです。
なるほど、確かにゲームプログラミングを始めた頃に"画面に描画されてればいいや"とか思ってましたが、
今一度認識する必要があるようで・・・
あと、今までちょっとサイトの解説と小一時間睨めっこしていたのですが、
深度値を利用した影表現基本
というのはもしかして、自分で画面のピクセルから一番近いモデルの面のマテリアルを取得して、そのピクセルに描画する、という流れを自分でやらないといけないような・・・
(影に当たる部分のピクセルシェーダーの明るさを半分にするために自分でピクセルシェーダを描画する必要がある?)
|
Re: 画面が真っ暗になって世界の終わりみたいになってしまう ( No.36 ) |
- 名前:softya(ソフト屋) 日時:2013/06/02 22:49
>深度値を利用した影表現基本
>というのはもしかして、自分で画面のピクセルから一番近いモデルの面のマテリアルを取得して、そのピクセルに描画する、という流れを自分でやらないといけないような・・・
>(影に当たる部分のピクセルシェーダーの明るさを半分にするために自分でピクセルシェーダを描画する必要がある?)
それこそソースコードを理解してくださいとしか言えませんが(私も実装は見てません)
説明から言えることは、ピクセルシューダーがそれぞれのピクセルを描画するときに
「深度値画像」から深度値を得て補正しつつ描画しているのでは?と思います。
なので2回描画する必要はないはずです。
|