Сообщение от Arton
Godot 3.2.3
GLES 2.0
Android, apk релизный
Сделал простой шейдер, где смешиваются 2 текстуры, с движением UV.
На ПК работает как надо.
Однако на Андроиде, спустя минуту текстуры начинают едва заметно тормозить...
|
По какой бы то не было причине, главная проблема во фрагментом шейдере.
Решение для GLES 2, Android:- Объявить переменную uv для каждой текстуры глобально.
- Анимировать UV в Vertex-шейдере.
- Подставить каждой текстуре свою UV в Fragment-шейдере.
Рабочий код:
shader_type spatial;
uniform sampler2D Texture_0 : hint_albedo;
uniform sampler2D Texture_1 : hint_albedo;
uniform sampler2D Texture_2 : hint_albedo;
varying vec2 uv_out0;
varying vec2 uv_out1;
varying vec2 uv_out2;
void vertex() {
vec2 speed_0 = vec2(0.1, 0.5);
vec2 speed_1 = vec2(-0.1, -0.5);
vec2 speed_2 = vec2(-0.2, 0.7);
uv_out0 = UV + TIME * speed_0;
uv_out1 = UV + TIME * speed_1;
uv_out2 = UV + TIME * speed_2;
}
void fragment() {
vec4 Tex_0 = texture(Texture_0, uv_out0);
vec4 Tex_1 = texture(Texture_1, uv_out1);
vec4 Tex_2 = texture(Texture_2, uv_out2);
vec4 Color = Tex_0 + Tex_1 + Tex_2;
ALBEDO = Color.rgb;
}
P. S. Я уже пошёл в чатик Сканера по Годо. Советы не помогли, однако общение каким-то образом помогло заставить работать то что вчера не получилось. А именно, правильно объявить вектора глобальными
P. P. S. Осталось проверить на разных устройства и словить новые баги.
Потестируйте пожалуйста:
Обычный вариант:
Test_Android_2.apk
Выше точность:
Test_Android_2_H.apk