Sprawdziłbym jeszcze te D*(T0 + T1 - 0.5) [wydaje się nauralniejsze], ale właśnie nie mogę zaskoczyć, jak to zapisać (ciężki dzień) :-) A co pixel shaderów, to nie mam jeszcze żadnego doświadczenia i będę dopiero z tym startował :-)
D*(T0 + T1 - 0.5) nie da się zrobić na dwóch stage'ach w jednym przebiegu renderowania. Musisz albo użyć 3 stage'ów, albo 2 passów z odpowiednio ustawionym blendingiem.
Rozwiązanie dla 3 stage'ów to coś w tym stylu:
Stage0 = { Arg1 = TEXTURE, Arg2 = cokolwiek, Op = SELECTARG1 }
Stage1 = { Arg1 = CURRENT, Arg2 = TEXTURE, Op = ADDSIGNED }
Stage2 = { Arg1 = CURRENT, Arg2 = DIFFUSE, Op = MODULATE }
Nie da się tego zrobić na dwa, bo w jednym stage'u możesz odczytać tylko jedną teksturę.