Multiplies this matrix by another value. Multiplying by a matrix combines their two transforms together. Multiplying by a vector applies the transformation from the matrix to the vector and returns a new transformed vector.
When multiplying with a table, the returned table will try to match the input: it will have the same metatable as the input, and it will either use numeric keys for the components or x/y/z keys, based on the table length of the input.
There are some differences between this function and the * operator. * always assumes that the w component of the input vector is 1, and performs a w divide at the end. This function allows specifying the w as the last argument, and does not perform a w divide at the end.