allow most of the options to be changed by passing an array of them to the constructor of surface