Słyszałem, że jeśli należy unikać instrukcji w modułach cieniujących, ponieważ obie części instrukcji zostaną wykonane, a następnie niewłaściwe zostaną usunięte (co szkodzi wydajności).
To wciąż problem w DirectX 10? Ktoś mi powiedział, że w nim zostanie wykonana tylko odpowiednia gałąź.
Do ilustracji mam kod:
float y1 = 5; float y2 = 6; float b1 = 2; float b2 = 3;
if(x>0.5){
x = 10 * y1 + b1;
}else{
x = 10 * y2 + b2;
}
Czy istnieje inny sposób na przyspieszenie?
Jeśli tak, jak to zrobić?
Obie gałęzie wyglądają podobnie, jedyną różnicą są wartości „stałych” ( y1, y2, b1, b2
są takie same dla wszystkich pikseli w module Pixel Shader).