Out.normal = normalize(mul(In.normal,World)); /* Доманажаем нормаль на
мировую матрицу и нормализуем */
кстати, с каких пор это правильно ? нормали умножают на специальную матрицу
потому что если у тебя будет нормаль к примеру (0,1,0), а на экране она должна быть (0,0.7,0.7), а мировая матрица содержит смещение и сделает из неё (1,1.7,1.7) то после нормализации ты получишь совсем не то что нужно
это написано и сдесь
http://msdn.microsoft.com/en-us/library/bb172390.aspx