type rgb = float * float * floattype light = | Sun of {towards : Vec3.t;color : rgb;
}| Lamp of {position : Vec3.t;radius : float;color : rgb;
}| Spot of {position : Vec3.t;aim : Vec3.t;angle : float;falloff : float;color : rgb;
}
type scene = {camera : Camera.t;solids : Solid.t list;lights : light list;ambient : float;background : int;
}type algorithm = | Ray_casting| Lambert| Shadow_rays| Whitted| Soft_shadows| Path_tracing
type acceleration = | Brute_force| Bvh of Bvh.split
type options = {algorithm : algorithm;epsilon : float;acceleration : acceleration;depth : int;cutoff : float;samples : int;seed : int;
}val camera_ray_through :
Camera.t ->
width:int ->
height:int ->
float ->
float ->
Ray.t * float * floatval camera_ray :
Camera.t ->
width:int ->
height:int ->
x:int ->
y:int ->
Ray.t * float * floatval nearest :
?min_t:float ->
?max_t:float ->
Ray.t ->
Solid.t list ->
(float * Solid.t) optionval schlick : n1:float -> n2:float -> float -> floatval trace : world -> Ray.t -> min_t:float -> max_t:float -> intval secondary_rays : world -> intval saved_rays : world -> intval pixel : world -> width:int -> height:int -> x:int -> y:int -> intval advance : progress -> rays:int -> unit