Solidtype pattern = | Plain| Checker of int * float| Marble of int * float| Wood of int * float| Solid_function of Vec3.t -> int| Uv_function of u:float -> v:float -> inttype t = | Sphere of Vec3.t * float * surface| Plane of Vec3.t * float * surface| Triangle of {points : Vec3.t * Vec3.t * Vec3.t;normals : Vec3.t * Vec3.t * Vec3.t;uvs : (float * float) * (float * float) * (float * float);surface : surface;}| Placed of {primitive : primitive;transform : Transform.t;surface : surface;}| Csg of Csg.op * t * tval intervals : Ray.t -> t -> t Csg.interval listval first_hit : ?min_t:float -> Ray.t -> t -> t Csg.boundary optionval transform : Transform.t -> t -> t