Тема: Вопросы
Показать сообщение отдельно
Старый 15.11.2020, 18:57   #31
Arton
Быдлокодер
 
Аватар для Arton
 
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,019
Написано 2,312 полезных сообщений
(для 5,349 пользователей)
Стрелка Ответ: Вопросы

Сообщение от Arton Посмотреть сообщение
Godot 3.2.3
GLES 2.0
Android, apk релизный


Сделал простой шейдер, где смешиваются 2 текстуры, с движением UV.
На ПК работает как надо.
Однако на Андроиде, спустя минуту текстуры начинают едва заметно тормозить...
По какой бы то не было причине, главная проблема во фрагментом шейдере.

Решение для GLES 2, Android:
  1. Объявить переменную uv для каждой текстуры глобально.
  2. Анимировать UV в Vertex-шейдере.
  3. Подставить каждой текстуре свою 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.10.5);
    
vec2 speed_1 vec2(-0.1, -0.5);
    
vec2 speed_2 vec2(-0.20.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_0uv_out0);
    
vec4 Tex_1 texture(Texture_1uv_out1);
    
vec4 Tex_2 texture(Texture_2uv_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
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ant0N (15.11.2020)