         let cam = MDLCamera()
         
         // TODO: the following are required.  make them optional with defaults?
-        let nearVisibility = elem.attributes["near-visibility-distance"]!
-        let farVisibility = elem.attributes["far-visibility-distance"]!
-        let fieldOfView = elem.attributes["field-of-view"]!
+        if let nearVisibility = elem.attributes["near-visibility-distance"] {
+            cam.nearVisibilityDistance = Float(nearVisibility)!
+        }
+        if let farVisibility = elem.attributes["far-visibility-distance"] {
+            cam.farVisibilityDistance = Float(farVisibility)!
+        }
+        if let fieldOfView = elem.attributes["field-of-view"] {
+            cam.fieldOfView = Float(fieldOfView)!
+        }
+        
+        // TODO: apply SpectraXML lens
+        // TODO: apply SpectraXML imaging surface
         
         if let lookAt = elem.attributes["look-at"] {
-            //TODO: fix the float3()
-//            cam.lookAt(Float(lookAt)!, from: Float(elem.attributes["look-from"]))
+            if let lookFrom = elem.attributes["look-from"] {
+                cam.lookAt(SpectraXMLSimd.parseFloat3(lookAt), from: SpectraXMLSimd.parseFloat3(lookFrom))
+            } else {
+                cam.lookAt(SpectraXMLSimd.parseFloat3(lookAt))
+            }
         }
         
         return cam

// - there's also the mesh-generator pattern from the original SceneGraphXML
//   - this draws from a map of monads passed in and executes the one for a specific type, if found

public struct SpectraPhysicalLensParams {
    // TODO: determine which are required and which are not
    public var key: String?
    public var barrelDistorion: Float?
    public var fisheyeDistorion: Float?
    public var opticalVignetting: Float?
    public var chromaticAberration: Float?
    public var focalLength: Float?
    public var fStop: Float?
    public var apertureBladeCount: Int?
//    public var bokehKernelWithSize: vector_int2 -> MDLTexture
    public var maximumCircleOfConfusion: Float?
    public var focusDistance: Float?
    public var shutterOpenInterval: NSTimeInterval?
}

public class SpectraXMLPhysicalLensNode: SpectraXMLNode {
    public typealias NodeType = SpectraPhysicalLensParams
    
    public func parse(container: Container, elem: XMLElement, options: [String: Any]) -> NodeType {
        return SpectraPhysicalLensParams()
    }
}

public struct SpectraPhysicalImagingSurfaceParams {
    // TODO: determine which are required and which are not
    public var key: String?
    public var sensorVerticalAperture: Float?
    public var sensorAspect: Float?
    public var sensorEnlargement: vector_float2?

// TODO: public class SpectraXMLScatteringFunctionNode: SpectraXMLNode {
// TODO: public class .. voxel array?  maybe a generator
// TODO: public class .. voxel morphism (morphology in 3D)

public class SpectraEnum {
    let name: String
