プロジェクト

プロフィール

ヘルプ

タスク #32

未完了

[バグ] モデル読み込みで落ちる

みょうじ さんが4年以上前に追加. 3年以上前に更新.

ステータス:
進行中
優先度:
低め
担当者:
カテゴリ:
強制終了
対象バージョン:

説明

概要

添付のモデルでアプリケーションが強制終了される。

考察

メモリかリソース(タイムライン)の問題と予想を立てている。

解決の方向性

対応したくない場合は落ちるままよりも警告を出して読み込まないを選んだ方がいいかと考える。


ファイル

test_3000bones.zip (41.4 KB) test_3000bones.zip みょうじ, 2019/11/24 07:48

みょうじ さんが4年以上前に更新

追記

MMDとMMMでもバラバラな結果が出ている。

  • GeForceの場合MMDは1688本あたりから落ちるようになる。
  • Radeonの場合はMMDは2250本でも読み込める。ただしボーンの表示が崩れるようになる。(デフォームとスキニングは正常)

このあたりはドライバ差異と言えると思うものの、NNDはそもそももっと少なくても読めなく、GeForceとRadeonで差異は見受けられない(現状)

猫のしもべ さんが4年以上前に更新

  • 要因1:ボーン数で初期化するべき箇所を頂点数で初期化している
  • 要因2:要因1を修正しても子ボーンの段数が多すぎてスタックオーバーフローを起こす。(ボーン2275でXMMSの確保に失敗して例外送出)

1は簡単だが2は根治が難しい。

みょうじ さんが4年以上前に更新

最悪スタック初期値を倍にするとかの対応を取る模様

みょうじ さんが4年以上前に更新

  • ステータス新規 から 進行中 に変更

猫のしもべ さんが約4年前に更新

https://docs.microsoft.com/ja-jp/cpp/build/reference/stack-stack-allocations?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DJA-JP%26k%3Dk(VC.Project.VCLinkerTool.StackReserveSize)%26rd%3Dtrue&view=vs-2019

exeのプロジェクト設定>リンカー>スタックサイズにバイト単位で指定する。 8MB程度で試したところ、落ちなくなったのを確認。 落ちるに任せるのは問題があるので、仕様としてボーン数制限を盛り込み、モデル読み込み時に弾くようにする必要があると思われる。 ボーン何本を上限とするかは要検討。

猫のしもべ さんが約4年前に更新

  • 対象バージョンプロダクトバックログ から ファーストリリース に変更

猫のしもべ さんが3年以上前に更新

  • 対象バージョンファーストリリース から プロダクトバックログ に変更

他の形式にエクスポート: Atom PDF