Как я ускорил рендер в Godot Engine: оптимизация шейдеров
Когда пиксели бегут быстрее
На днях решил покопаться в шейдерах своего проекта на Godot Engine. У меня там сцена с большим количеством частиц, и рендер начал подтормаживать. Понял, что нужно что-то менять в шейдерах, чтобы всё летало как раньше.
Первым делом я решил оптимизировать фрагментный шейдер для частиц. Убрал ненужные вычисления и заменил несколько операций на более быстрые аналоги. Вот что получилось:
shader_type spatial;
uniform sampler2D texture;
void fragment() {
vec4 color = texture(texture, UV);
// Убираем ненужные операции
// color *= vec4(1.0, 0.5, 0.5, 1.0);
// color.a *= 0.9;
// Добавляем оптимизацию
color.a *= smoothstep(0.1, 1.0, color.a);
ALBEDO = color.rgb;
ALPHA = color.a;
}
После этих изменений рендер стал заметно быстрее. Но я решил не останавливаться на достигнутом и поковырять ещё немного. В итоге добавил небольшую хитрость с smoothstep для плавного изменения прозрачности. Теперь всё выглядит ещё лучше и работает быстрее.
