Godotバージョン:
v3.1.alpha.calinou.5b8dde4
バージョンを含むOS /デバイス:
テストされたWindows10およびAndroidデバイス
問題の説明:
基本的に、特定のclip_heightでオブジェクトをフェードアウトさせるカスタムシェーダーコードを作成しました。 オブジェクトの下部50%などをレンダリングするために使用できます。 GLES3では機能しますが、GLES2では機能しません。
問題を明確にするために、サンプルプロジェクトを作成しました。
これがGLES3でどのように見えるかです
そしてこれがGLES2でどのように見えるかです
再現する手順:
問題を基本的に次の2行のシェーダーコードに分解することができました。
vec4 world_vertex = camera_matrix * vec4(VERTEX, 1.0);
ALPHA = smoothstep(1, 0, (world_vertex.y - clip_height)/fade_offset);
カメラのマトリックスは、頂点シェーダーから渡されます。 残念ながら、エラーの原因を正確に調査する方法がわかりません。
最小限の複製プロジェクト:
AlphaIssue.zip
いいキャッチ! バグを見つけました。 これは、gles2シェーダーコンパイラの問題です。 ユーザー定義コードのINV_CAMERA_MATRIX
とCAMERA_MATRIX
を交換します。 数分でこれを修正するためのPRを提出します。 それまでの間、 CAMERA_MATRIX
を使用する場合は、フラグメント関数でINV_CAMERA_MATRIX
を使用してください。
最も参考になるコメント
いいキャッチ! バグを見つけました。 これは、gles2シェーダーコンパイラの問題です。 ユーザー定義コードの
INV_CAMERA_MATRIX
とCAMERA_MATRIX
を交換します。 数分でこれを修正するためのPRを提出します。 それまでの間、CAMERA_MATRIX
を使用する場合は、フラグメント関数でINV_CAMERA_MATRIX
を使用してください。