sdfu 0.3.0

Signed Distance Field (Function) Utilities. Contains functions for creating, combining, modifying, and using analytic SDFs for computer graphics.
Documentation
# `sdfu` - Signed Distance Field Utilities 

This is a small crate designed to help when working with signed distance fields
in the context of computer graphics, especially ray-marching based renderers. Most
of what is here is based on [Inigo Quilez' excellent articles](http://www.iquilezles.org/www/index.htm).

If you're using one of the more popular math libraries in Rust (currently, `nalgebra` or `vek`), then just enable
the corresponding feature and hopefully all the necessary traits are already implemented
for you so that you can just start passing in your `Vec3`s or whatever your lib calls them
and you're off to the races! If not, then you can implement the necessary traits in the
`mathtypes` module and still use this library with your own math lib.

# Demo

![demo image](/demo.png?raw=true)

The image above was rendered with my own path tracing renderer, [`rayn`](https://github.com/termhn/rayn)
by leveraging `sdfu`. The SDF that is rendered above was created with the following code:

```rust
use sdfu::SDF;

let sdf = sdfu::Sphere::new(0.45)
    .subtract(
        sdfu::Box::new(Vec3::new(0.25, 0.25, 1.5)))
    .union_smooth(
        sdfu::Sphere::new(0.3).translate(Vec3::new(0.3, 0.3, 0.0)),
        0.1)
    .union_smooth(
        sdfu::Sphere::new(0.3).translate(Vec3::new(-0.3, 0.3, 0.0)),
        0.1)
    .subtract(
        sdfu::Box::new(Vec3::new(0.125, 0.125, 1.5)).translate(Vec3::new(-0.3, 0.3, 0.0)))
    .subtract(
        sdfu::Box::new(Vec3::new(0.125, 0.125, 1.5)).translate(Vec3::new(0.3, 0.3, 0.0)))
    .subtract(
        sdfu::Box::new(Vec3::new(1.5, 0.1, 0.1)).translate(Vec3::new(0.0, 0.3, 0.0)))
    .subtract(
        sdfu::Box::new(Vec3::new(0.2, 2.0, 0.2)))
    .translate(Vec3::new(0.0, 0.0, -1.0));
```