アキアキノヒロロさんのスレッドのNO.95458のレスの要望に従って、別スレッドを立てました。
このスレッドでは「HGIMG4でスクリプト上の問題がなくてもエラーが発生する場合の説明と報告」について記述します。
当該のレスを引用します。
youdai
リンク
2022/2/18(Fri) 09:39:39
>それ以前の問題として、Hgimg4でカスタムシェーダーやBufferを利用した場合、プログラム終了時にHgimg4がクラッシュする(Windowsのエラー(○○は動作を停止しました)でWindowsのイベントログにも追加されます)環境がある事を確認しており不安を払拭できず、そもそもHgimg4でカスタムシェーダーを使うこと自体殆どありません。
HGIMG4において、いわゆる標準のcoloredシェーダー等と、そうでない自作のシェーダーとの実装上の違いはありません。
どちらも単にGLSLで記述されているものが動作しているに過ぎないからです。
自作シェーダーを使ってクラッシュするのはそのシェーダーか、もしくはグラフィックボードのOpenGL系の設定に問題があるからだと思います。
>hgimg4dx.as使用時はPCに備わるOpenGLの性能に関係なくAngleが正しい動作を完全にエミュレートしてしまうために問題が起こらない…のか?とも勝手に想像しています。
HGIMG4DXの場合は自分のPC環境の場合、自作のシェーダーがほとんどの場合、正確に反映されない(変換されない)ことを確認しています。
これは全くの想像なのですが、HGIMG4DXは標準のcolorer等が動作しやすいよう最適化され、アレンジがされているのかもしれません。
そのため、そのアレンジ部分が邪魔をして自作シェーダーの再現率が非常に低いのかもしれないと思いました。
もし使用しているPC環境で、HGIMG4DXの方では動くが、HGIMG4の方では動かない、もしくは不具合が起きる場合、
グラフィックボードのOpenGL系の設定を変えると正常に動作する可能性があります。
もし不具合が起きている場合、OpenGL系の設定のクオリティを高く設定し過ぎているとそれが原因で処理が追いつかなくなり、
HGIMG4のスクリプトの方には問題がなくても結果的にエラーが発生していることもありえるからです。
youdai
リンク
2022/2/18(Fri) 09:39:39NO.95457
せっかくなので、その他の不具合の起きる可能性も記述しておきます。
●何も間違っていなくてもエラーが起きる可能性がある
シェーダーも正しく、HGIMG4のスクリプトも正しく、グラフィックボードのOpenGL系の設定も正しいのにエラーが起きる場合、
使用しているテクスチャのサイズが大きすぎるとエラーが起きることも確認しています。
例えば、4Kだったテクスチャを512*512にリサイズして、.materialのテクスチャの品質系の設定を低くすると問題なく動作したことがあります。
●画像ファイルが壊れている場合がある
上記のようにテクスチャのサイズを小さくしても動かなかったケースでは、画像ファイルが壊れていたことが原因だったケースがあります。
これは実はとても分かりにくい不具合で、画像ビュアーによっては、画像ファイルが壊れていても自動で補正して正常に表示する機能を持っているものがあるので、
使っている画像ビュアーがまさにその機能で自動補正していたので、画像ファイルが壊れていたことにしばらく気が付きませんでした。
これは色々な画像ビュアーで画像を閲覧してみて、閲覧できないビュアーがあったことから、画像ファイルが壊れていることに気づけました。
(引用終了)
上記の記述の通り、上記のような場合では、HGIMG4でスクリプト上の問題がなくても不具合が発生する場合があります。
他にも補足としては、
・ファイルやフォルダに日本語等の文字列が入っているとFBX->GPBのコンバートが失敗する
・.materialの主マテリアル名と従マテリアル名が同一だとエラーが発生する(主マテリアル名とは適用元のマテリアル名のことで、従マテリアル名とは適用先のマテリアル名のこと)
・自作シェーダーを作成する場合、.vertや.fragのエンコードはHSP3の仕様と同じく、Shift-JISで出力すること(UTF-8でも動作するが恐らく仕様外)
等があります。
テクスチャのサイズについてさらに補足すると、基本的に最大でも1K(1024*1024)程度にして、.materialのテクスチャ品質関係の設定を低めに抑えるようにしておけば、とりあえずほとんど場合、問題なく動作することを確認しています。
テクスチャ品質関係とは、主に.materialのsamplerの部分です。
リファレンスから引用すると、
設定名 内容 ------------------------------------------------- path 画像ファイルのパス wrapS 横方向のラップ設定(REPEAT/CLAMP) wrapT 縦方向のラップ設定(REPEAT/CLAMP) mipmap ミップマップ設定(true/false) minFilter 縮小フィルター設定(*1) magFilter 拡大フィルター設定(*1) (*1) 以下から選択 NEAREST / LINEAR / NEAREST_MIPMAP_NEAREST / LINEAR_MIPMAP_NEAREST / NEAREST_MIPMAP_LINEAR / LINEAR_MIPMAP_LINEAR
上記の部分です。下に行くに従って処理が重くなります。NEARESTが最も軽く、LINEAR_MIPMAP_LINEARが最も重いです。
もしパフォーマンスを気にするのであれば、LINERを選択して、mipmap=falseにしておけばとりあえず大丈夫だと思います。それで何かテクスチャに違和感があれば、すこしずつこの設定のクオリティを上げて調整していくといいと思います。
また、表現として「テクスチャがボヤける状態ではなく、くっきりとビビットに表現したい」場合はNEARESTを選択すればテクスチャが補正されてボヤけることなく、くっきりと表現することができます。
これらはリファレンスには記述されていない事項なので注意してみるといいでしょう。