Re: SetDrawMode が反映されない ( No.1 ) |
- 名前:管理人 日時:2023/06/18 22:26
> DxLib::SetDrawMode(DX_DRAWMODE_NEAREST);
こちらはデフォルトの設定です
> DxLib::SetDrawMode(DX_DRAWMODE_BILINEAR);
バイリニアフィルタリングは原理上元の画像サイズの1/2以下のサイズで描画を行うと
最近点フィルタリング( DX_DRAWMODE_NEAREST )と殆ど変わらない描画結果となります
745*1040 -> 200*300
↑こちらの場合では ほぼ1/4のサイズになっていますので、558*780 など1/2以上のサイズで試してみてください
> DxLib::SetDrawMode(DX_DRAWMODE_ANISOTROPIC);
こちらは3Dモデル用に読み込まれたテクスチャ画像でのみ有効な描画モードなので
LoadGraph で読み込んだ画像では使用することができません
|
Re: SetDrawMode が反映されない ( No.2 ) |
- 名前:初心者 日時:2023/06/19 19:31
ご返答ありがとうございます。
詳しい解説ありがとうございます。
仕組みについて調べて見たところ、確かに1/2以下のサイズで表示するとバイリニアフィルタリングではサンプル数が足りなくなる(表現あってるのでしょうか?)みたいですね。
ということはこの現象を解決するには、「※元画像を Gimp 等画像処理ソフトを利用して綺麗に縮小変換してから使う」しかないのでしょうか?
DxLib の機能を利用して綺麗に(例えばキュービック)補間出来ないのでしょうか?
補足
※の方法を利用した場合に少し問題がありまして、
例えば同じ画像を 1000*200 と 100*20 で利用したい場合、同じ画像の img.png と img_small.png が必要になってくるかと思います。
更に複数の解像度をサポートする場合、HD では 1000*200、FHD では 1500*300、4K では…と大変なことになります。
|
Re: SetDrawMode が反映されない ( No.3 ) |
- 名前:管理人 日時:2023/06/19 23:09
> DxLib の機能を利用して綺麗に(例えばキュービック)補間出来ないのでしょうか?
キュービック補間はできませんが、GraphFilter の DX_GRAPH_FILTER_DOWN_SCALE を使用すると
1/2, 1/4, 1/8 の何れかのサイズにバイリニアフィルタリングより綺麗に縮小できます
<GraphFilter DX_GRAPH_FILTER_DOWN_SCALE>
https://dxlib.xsrv.jp/function/dxfunc_graph1.html#R3N26S2
なので 1/3 に縮小したい場合は DX_GRAPH_FILTER_DOWN_SCALE で 1/2 にした後、更に
1/1.5 にバイリニアフィルタリングで縮小することで、バイリニアフィルタリングで直接
1/3 に縮小するよりも綺麗な縮小画像を得ることが出来ます
ただ、それでもペイントソフトなどの縮小機能を使用した方が綺麗な縮小画像になると思います
> ということはこの現象を解決するには、「※元画像を Gimp 等画像処理ソフトを利用して綺麗に縮小変換してから使う」しかないのでしょうか?
2Dのゲームでしたら解像度の数だけ画像ファイルがあっても良いかと思います
( 開発をお手伝いした ASTLIBRA Revision では 4種類の解像度用の画像を別々のファイルとして用意していました
( 単純な縮小・拡大では必要な画像処理ができないという事情もありましたが… ) )
|
Re: SetDrawMode が反映されない ( No.4 ) |
- 名前:初心者 日時:2023/06/24 18:48
なるほどありがとうございます。
クオリティを追求しなければ DxLib 内でも完結することは出来るのですね。
規模の大きい(例えばチーム制作のような)ゲームを作ったことが無いのでお聞きしたいのですが、解像度別に画像を用意するのが一般的なのでしょうか?
それと試しに Gimp で縮小してみたところ、キュービックで縮小しただけではぼやけていたのでシャープ補正をかけると良い感じになりました。
こういうところまで一般のゲームはしてるんでしょうか?
|
Re: SetDrawMode が反映されない ( No.5 ) |
- 名前:初心者 日時:2023/06/24 18:52
少し補足です。
ASTLIBRA Revision の例まで挙げていただいて一般的には〜と質問するのは少し失礼でした。
申し訳ございません。
私が言いたかったのはその他の例も教えていただけたら嬉しいなということです。
管理人様以外からもコメントお待ちしております!
|
Re: SetDrawMode が反映されない ( No.6 ) |
- 名前:たろう 日時:2023/06/24 21:09
初心者さんこんにちは、質問の内容と関係なかったらごめんなさい
DXライブラリにはSaveDrawScreenToPNGがあるので、例えばNo.3で管理人さんがおっしゃっていたやり方で
小さな画像を作って(MakeScreenで作った画像に張り付けるなどする)
それを.pngにして吐き出す仕組みで自動生成する様にしたらどうでしょうか?
私も近い方法をやっていますが、例えばゲームのデバッグモード(※これも作る)で起動したときに
必要なサイズの画像を自動生成する仕組みにすれば、製品版は
ただその画像を読み込むだけなので、無駄な処理は発生しなくて便利ですm(__)m
|
Re: SetDrawMode が反映されない ( No.7 ) |
- 名前:管理人 日時:2023/06/25 02:13
> 規模の大きい(例えばチーム制作のような)ゲームを作ったことが無いのでお聞きしたいのですが、解像度別に画像を用意するのが一般的なのでしょうか?
> それと試しに Gimp で縮小してみたところ、キュービックで縮小しただけではぼやけていたのでシャープ補正をかけると良い感じになりました。
> こういうところまで一般のゲームはしてるんでしょうか?
すみません、私も分かりません…
私は一応ゲーム業界で働いている人間なのですが、3Dアクションばかり作っているので、2Dメインのゲームの場合は
どうなのかは分かりません…
3Dアクションの場合2D要素は UIのみとなりますが、その UIについては、メインターゲットとなる解像度より
極端に低解像度の画面モードで実行した場合は『ただ縮小しただけのぼやけた状態( シャープ補正なし )』で
表示していると思います
|
Re: SetDrawMode が反映されない ( No.8 ) |
- 名前:初心者 日時:2023/06/25 17:06
お二人とも貴重なご意見ありがとうございます。
それぞれ長所短所があると思いますので試行錯誤して決めたいと思います。(出来れば自動生成したいなぁと思いつつ…)
ありがとうございました。
これにて解決とさせて頂きます。
|
Re: SetDrawMode が反映されない ( No.9 ) |
- 名前:初心者(解決済み) 日時:2023/06/25 17:07
解決済みと書くのを忘れていました(>_<)
|
Re: SetDrawMode が反映されない ( No.10 ) |
- 名前:名無三 日時:2023/07/03 13:11
横からすいません、MV1DrawTextureならミップマップを生成するのでDrawExtendGraphなどの縮小でも対応できると思います(テクスチャサイズに縛りができますが)
dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=5438
|