Better interop with matrix multiplication. Better test case. Added more types for the Surface discriminated union.