Ничего особо умного, но самое интересное, что было для меня - это зачем вводить тип данных normal в рендермане, если есть тип данных vector. Именно из-за преобразований:
Точка : (x,y,z,1)xМ
Вектор : (x,y,z,0)xМ //вектор не надо двигать. Он же относителен.
Нормаль: (x,y,z,0)xM* // M* - это транспонированная обратная матрица.
Если нормаль преобразовывать по общим правилам, то она в случае не пропорционального маштабирования, перестанет быть нормалью.
Ещё раз можно убедиться в том, что если если хочешь что-то понять, то надо объяснить это другим.