Versão Godot:
v3.1.alpha.calinou.5b8dde4
Sistema operacional / dispositivo incluindo versão:
Dispositivos Windows 10 e Android testados
Descrição do problema:
Eu escrevi um código de sombreador personalizado, que basicamente faz o objeto desaparecer em um determinado clip_height. Ele pode ser usado apenas para renderizar os 50% da parte inferior de um objeto e assim por diante. Funciona no GLES3, mas não no GLES2.
Criei um projeto de exemplo para deixar o problema claro.
Aqui está como fica no GLES3
E aqui está como fica no GLES2
Passos para reproduzir:
Consegui dividir o problema basicamente nessas duas linhas de código de sombreador:
vec4 world_vertex = camera_matrix * vec4(VERTEX, 1.0);
ALPHA = smoothstep(1, 0, (world_vertex.y - clip_height)/fade_offset);
A câmera Matrix é passada do sombreador de vértice. Infelizmente, não tenho ideia de como investigar o que exatamente está causando o erro.
Projeto de reprodução mínima:
AlphaIssue.zip
Boa pegada! Eu encontrei o bug. É um problema com o compilador de sombreador gles2. Ele troca INV_CAMERA_MATRIX
e CAMERA_MATRIX
no código definido pelo usuário. Vou enviar um PR para corrigir isso em alguns minutos. Nesse ínterim, use INV_CAMERA_MATRIX
na função de fragmento se quiser usar CAMERA_MATRIX
.
Comentários muito úteis
Boa pegada! Eu encontrei o bug. É um problema com o compilador de sombreador gles2. Ele troca
INV_CAMERA_MATRIX
eCAMERA_MATRIX
no código definido pelo usuário. Vou enviar um PR para corrigir isso em alguns minutos. Nesse ínterim, useINV_CAMERA_MATRIX
na função de fragmento se quiser usarCAMERA_MATRIX
.