В сценарии мультиплексирования, подобном вашему, вы можете использовать программирование без ответвлений.Вы можете, например, использовать что-то вроде этого.Булевы операторы являются «приближенными».
colorOut.r = mix(colorOut.r, (colorOut.r*color_1.r),
( clamp(pow(1-colorOut.r, 20), 0, 1)
* clamp(pow(colorOut.r-0.7, 20), 0, 1) ) );
Обратите внимание, что троичный обычно не вызывает таких проблем, и это должно быть легко для ресурсов, так как не вызывает расходящихся ветвей:
colorOut.r = mix(colorOut.r, (colorOut.r*color_1.r),
( colorOut.r <= 1 && colorOut.r > 0.7 ? 1 : 0 );