Тема: Вопросы
Показать сообщение отдельно
Старый 14.11.2020, 08:16   #27
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Вопросы

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


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



Проблема замечена на Huawei P8 Lite и P10, но по всей видимости дело не в аппаратах.
Двигать UV пробовал по разному. Разница только в скорости движения, чем быстрее движется, тем скорее начинаются рывки.

В чём может быть дело, как решить?

Навсякий случай, генерируемый VisualShaders код:
shader_type spatial;
render_mode specular_schlick_ggx, depth_test_disable, unshaded, vertex_lighting;

uniform sampler2D Texture : hint_albedo;
uniform sampler2D Texture2 : hint_albedo;



void vertex() {
// Output:0

}

void fragment() {
// Input:5
	vec3 n_out5p0 = vec3(UV, 0.0);

// Input:8
	float n_out8p0 = TIME;

// VectorMix:17
	vec3 n_in17p2 = vec3(0.03000, -0.02000, 0.00000);
	vec3 n_out17p0 = mix(n_out5p0, vec3(n_out8p0), n_in17p2);

// TextureUniform:2
	vec3 n_out2p0;
	float n_out2p1;
	{
		vec4 n_tex_read = texture(Texture, n_out17p0.xy);
		n_out2p0 = n_tex_read.rgb;
		n_out2p1 = n_tex_read.a;
	}

// VectorMix:18
	vec3 n_in18p2 = vec3(-0.03000, 0.02000, 0.00000);
	vec3 n_out18p0 = mix(n_out5p0, vec3(n_out8p0), n_in18p2);

// TextureUniform:3
	vec3 n_out3p0;
	float n_out3p1;
	{
		vec4 n_tex_read = texture(Texture2, n_out18p0.xy);
		n_out3p0 = n_tex_read.rgb;
		n_out3p1 = n_tex_read.a;
	}

// VectorOp:16
	vec3 n_out16p0 = n_out2p0 + n_out3p0;

// Output:0
	ALBEDO = n_out16p0;

}

void light() {
// Output:0

}



Второй вопрос, что бы не ходить дважды.

Тоже шейдер с расчётом на телефон, смешиваются 2 текстуры по Vertex-маске через VectorMix.
Почему же этот шейдер на единственной такой поверхности, в 35 треугольников отнимает ~10 FPS?
Неужели это настолько тяжёлая операция для смартфона?
В годоте gles 2 вообще лучше не трогать.

А именно с UV там примитивный баг на подуставших мобилках, который тупо не чинят.
https://github.com/godotengine/godot/issues/37935
Кстати возможно ты нашел еще один баг

Еще на gles 2 vertex color рисует не те цвета и тоже все вкурсе, но никто не чинит.
(Offline)
 
Ответить с цитированием