Metasequoia BBS

| 新規投稿 | 通常表示 | ツリー表示 |
状態
タグ
キーワード
[6777] 4Kテクスチャを当てていると落ちる / まじかる☆しげぽん
[不具合報告,Ver4.5.7] 返信
メタセコVer4.5.7の32bit版で4096x4096の4Kテクスチャを7枚ほど当てているシーンで下記のエラーが頻発します。
「Direct3D表示でエラーが発生しました」

グラフィックドライバーは最新に更新しても変わりはありません。
テクスチャの最大解像度を2048x2048にするとエラーが収まるようです。
また64bit版では、4096x4096でも問題は起きないようです。
32bit版でエラーが発生するのを改善お願いします。

Metasequoia 4 Ver4.5.7 (32bit) is running.
Windows version : 10.0  (x86)
Number of CPU : 8
Physical memory : 16351 MB
Direct3D11 Driver: NVIDIA GeForce GTX 970
    DeviceID: 5058
    SubsysID: 913904728
    Revision: 161
    FeatureLevel: 11.0
Direct3D device removed.
Direct3D device removed.
Direct3D device removed.

続きを表示...
2016-12-08 23:32
[6778] Re: 4Kテクスチャを当てていると落ちる / 管理者
32bitのみで起こるということは、単に2GB上限に引っかかってドライバー内部でメモリを確保できない状態だと思います。
4K解像度7枚だとそれだけで500GB近く、加えてDirect3Dの仕様上ドライバー内部でも複製を確保するために計1GB必要で、その他にもメモリを使用することを考えると、もう32bitアプリでは物理的に不可能で対策のしようがありません。
表示解像度を2048に下げると大丈夫というのは、後者の複製の使用メモリが1/4になるためだと思います。

メッシュやテクスチャの量が大きいデータは32bit版で扱うべきではありません。
たとえ動作していてもいつメモリが不足してエラーが起こるかわからず、そんな爆弾を抱えた状態で使うよりも、メモリを搭載量いっぱいまで使える安定性に優れた64bit版を使うことをお奨めします。
2016-12-09 12:24
[6779] Re: 4Kテクスチャを当てていると落ちる / 管理者
>500GB近く
じゃなくて500MB近くでした
2016-12-09 15:13
[6780] Re: 4Kテクスチャを当てていると落ちる / まじかる☆しげぽん
当てているテクスチャは、4096x4096のテクスチャ7枚のPSDテクスチャで容量は100MBぐらいで500MBも行ってない状態です。
これをメタセコでオンメモリにすると、展開されて膨れ上がるということでしょうか?

ちなみに、DirectX9やOpenGLでは同じテクスチャを当てていてもエラーは出ません。
DirectX11のみで起こっている問題です。
なのでDirectX11での処理に何か問題があるのではないかと思います。

以前からDirectX11で、時々同様のエラーが出ていて原因がわからなかったのですが今回、全てのテクスチャを4Kにして原因がテクスチャサイズであると判明しました。

DirectX9や、OpenGLで問題が起きてないので何故DirectX11のみで症状が出るのか原因究明と対策をお願いしたいです。

64bit版に移行したいところなのですが、プラグイン類がやはり32bit版までしか対応してないものもあるので現状まだ32bit版を使用しています。
よろしくお願いします。

2016-12-09 17:17
[6781] Re: 4Kテクスチャを当てていると落ちる / まじかる☆しげぽん
GPUのメモリ使用状況のスクリーンショットをアップしました。
(添付機能が使えないためアップローダーにアップしてあります)
http://16.gigafile.nu/1216-gea9eb7ad20824b79ed7ec3bcad3d6e61

2016年12月16日(金)までダウンロード可能です。

DirectX9、11、OpenGLでの最大解像度を2048にした状態と4096の状態のGPU使用状態のスクリーンショットです。
2016-12-09 17:41
[6782] Re: 4Kテクスチャを当てていると落ちる / まじかる☆しげぽん
また、最大解像度を指定でのテクスチャ補間フォーマットは何を使用されているのでしょうか?
2048x2048にした場合、補間があまり綺麗ではないのであまり実用的ではない感じです。
Lanczos3に対応してもらえると補間が綺麗なので綺麗に表示されるかと思います。

また、補間方法そのものを指定できるようになっていると助かります。
Nearest neighbor
Bilinear
Bicubic
Lanczos3
等の、補完方法を選択できるようにできないでしょうか。
2016-12-09 18:13
[6784] Re: 4Kテクスチャを当てていると落ちる / 管理者
Direct3D9/11/OpenGLではそれぞれAPI・ドライバーレベルでテクスチャ等のリソースの管理方法が異なります。
Direct3D 11では通常はCPU/GPU間でのメモリ共有・転送管理をドライバー側で行い、VRAMが足らないときや画面解像度変更等に伴いVRAMの内容がロストした場合でも自動的に再転送を行う機構となっているので、その分メモリを多く消費することがあります。(これもAPI/ドライバーレベルでの話です)

PSDなど多くの種類の画像フォーマットは圧縮されています。DXT/S3TC等の専用画像のためのデコーダーを回路として備えたGPU内で取り扱う場合はともかく、CPUで処理する際は圧縮データをそのまま扱える機構はありませんので、元のファイルサイズがいくつかは表示の際には何の意味もありません。
どのソフトでも横幅×縦幅×色深度分だけのメモリ量は必要で、(一部例外もあるがPhotoshopでも基本としては同様、)また編集機能を備えたソフトだと作業用にさらなるメモリ量が必要になります。

テクスチャの拡大・縮小時に使っているアルゴリズムは、ペイントでリアルタイムに更新する際の速度面を考慮してNearestまたはBilinearを用いています。もちろん表示品質はさほど良くなく、あくまでリソース不足による問題を防ぐ回避策でしかありません。メモリ不足を抱えながら無理に32bit版でどうにかしようとするより、広大なメモリ領域を扱える64bit版を使うのが基本です。
2016-12-10 12:08
[6786] Re: 4Kテクスチャを当てていると落ちる / まじかる☆しげぽん
それぞれの仕様解説ありがとうございます。
広大なメモリ領域が扱える64bit版を使うというのはごもっともなので勿論そちらに移行していく予定ではあります。

その上で、メモリが足りなくなった場合にエラーが出ていると仮定して
足りなくなった場合に、「Direct3D表示でエラーが発生しました」が何度も出てくるとそのエラーダイアログのボタンを連打してなんとか閉じて別の描画モードに切りかえる別名で保存するというのが現状なのですが、ソフトの基本動作としてただエラーを吐くだけでなく別の対処を講じて欲しいです。

上記エラーが発生したら、「Direct3D表示でエラーが発生しました、別の描画方法に切り替えますか?」
というような表示を出して、「DirectX9、OpenGL」に切り替えをエラーダイアログで選択できるようにしてほしいです。
これで描画モードを切り替えることで一旦エラーが回避できます。
また、「データを別名で保存して終了する」というオプションも欲しいです。
これらの選択肢があるだけで、「Direct3D表示でエラーが発生しました」のエラーを履き続けるよりマシかと思います。


テクスチャの拡大縮小アルゴリズムですが、更新の反映に時間がかかっても良いので綺麗に描画されるされるモードとして、BicubicやLanczos3を選べるようにしてほしいです。
リソース不足問題を防ぐ回避策とはいえその描画状態の表示が汚くなってしまうのでは、あまりその表示モードを使う意味がなくなります。
例えば、倍解像度で描いて最終的にはBicubicで縮小するのでその結果をモデリングツール上でリアルタイムに確認したい等行えます。
その点、あくまでもリソース不足の問題を解決するというプログラマ的視点からしか見ておられないと思うのですが、モデリングツールを使うのはデザイナーです。
デザイナー視点からみて、最大解像度を抑えて表示した時に綺麗に表示されてほしいという要望になります。
ですので、選択できるようになっていれば速度を優先する人、表示結果を優先する人のそれぞれに対応出来るかと思います。

それぞれ対応ご検討よろしくお願いします。
2016-12-10 19:57