Как я ускорил рендер в 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 для плавного изменения прозрачности. Теперь всё выглядит ещё лучше и работает быстрее.