Version Godot:
v3.1.alpha.calinou.5b8dde4
OS / appareil, y compris la version:
Appareils Windows 10 et Android testés
Description du problème:
J'ai écrit un code de shader personnalisé, qui fait en gros un fondu de l'objet à un clip_height donné. Il peut être utilisé pour restituer uniquement les 50% inférieurs d'un objet, etc. Cela fonctionne sur GLES3, mais pas sur GLES2.
J'ai créé un exemple de projet pour clarifier le problème.
Voici à quoi ça ressemble sur GLES3
Et voici à quoi ça ressemble sur GLES2
Étapes à suivre pour reproduire:
J'ai pu résumer le problème à ces deux lignes de code de shader:
vec4 world_vertex = camera_matrix * vec4(VERTEX, 1.0);
ALPHA = smoothstep(1, 0, (world_vertex.y - clip_height)/fade_offset);
La matrice de la caméra est transmise à partir du vertex shader. Malheureusement, je n'ai aucune idée de la manière d'étudier plus en détail la cause exacte de l'erreur.
Projet de reproduction minimale:
AlphaIssue.zip
Bonne prise! J'ai trouvé le bogue. C'est un problème avec le compilateur de shader gles2. Il échange INV_CAMERA_MATRIX
et CAMERA_MATRIX
dans le code défini par l'utilisateur. Je vais soumettre un PR pour résoudre ce problème dans quelques minutes. En attendant, utilisez INV_CAMERA_MATRIX
dans la fonction de fragment si vous voulez utiliser CAMERA_MATRIX
.
Commentaire le plus utile
Bonne prise! J'ai trouvé le bogue. C'est un problème avec le compilateur de shader gles2. Il échange
INV_CAMERA_MATRIX
etCAMERA_MATRIX
dans le code défini par l'utilisateur. Je vais soumettre un PR pour résoudre ce problème dans quelques minutes. En attendant, utilisezINV_CAMERA_MATRIX
dans la fonction de fragment si vous voulez utiliserCAMERA_MATRIX
.