Godotバージョン:
3.0.2モノ
バージョンを含むOS /デバイス:
KDEネオン
GTX 1060
問題の説明:
シェーダーでは、 isnan()
を使用して、floatがNaNであるかどうかを確認できます。 あなたが(例えば、整数、ベクトル、行列、などなど)それにフロートではない何かを渡した場合しかし、それはシェーダを壊し、まだエディタでエラーメッセージを与えるものではありません。 ただし、ゲームの実行時に多くのエラースパムが発生します。
drivers/gles3/shader_gles3.h:377 - Condition ' !version ' is true. returned: -1
たとえば、次のシェーダーを試してください。
shader_type spatial;
void fragment()
{
ALBEDO = isnan(vec2(0,0)) ? vec3(1.0) : vec3(0.0);
}
ここで球に割り当てました。ご覧のとおり、球は奇妙に引き伸ばされ、画面スペースに描画されます。
再現する手順:
最小限の複製プロジェクト:
shadernanbug.zip
再現可能なバグレポートをありがとう。 このバグを修正するプルリクエストを作成しました。
isnan(vec2)がブールvec2を返すため、修正してもシェーダーコードがコンパイルされないことをお知らせしたいと思います。 チェックするvec2の要素を指定すると、コードがコンパイルされます。 例えば:
shader_type spatial;
void fragment()
{
ALBEDO = isnan(vec2(0,0)).x ? vec3(1.0) : vec3(0.0);
}
最も参考になるコメント
再現可能なバグレポートをありがとう。 このバグを修正するプルリクエストを作成しました。
isnan(vec2)がブールvec2を返すため、修正してもシェーダーコードがコンパイルされないことをお知らせしたいと思います。 チェックするvec2の要素を指定すると、コードがコンパイルされます。 例えば: