     }
     
     public func createGenerator(container: Container, options: [String : Any] = [:]) -> MeshGenerator {
-        
         let meshGen = container.resolve(MeshGenerator.self, name: self.type)!
         meshGen.processArgs(container, args: self.args)
         return meshGen
+    }
+}
+
+public class TextureNode {
+    public var generator: String = "noise_texture_gen"
+    public var args: [String: GeneratorArg] = [:]
+    
+    public func parseXML(container: Container, elem: XMLElement, options: [String: Any] = [:]) {
+        if let generator = elem.attributes["mesh-generator"] {
+            self.generator = generator
+        }
+        
+        let generatorArgsSelector = "generator-args > generator-arg"
+        for (idx, el) in elem.css(generatorArgsSelector).enumerate() {
+            let name = el.attributes["name"]!
+            let type = el.attributes["type"]!
+            let value = el.attributes["value"]!
+            args[name] = GeneratorArg(name: name, type: type, value: value)
+        }
+    }
+}
+
+public class TextureGeneratorNode {
+    public var type: String = "noise_texture_gen"
+    public var args: [String: GeneratorArg] = [:]
+    
+    public func parseXML(container: Container, elem: XMLElement, options: [String : Any] = [:]) {
+        if let type = elem.attributes["type"] {
+            self.type = type
+        }
+        
+        let texGenArgsSelector = "generator-args > generator-arg"
+        for (idx, el) in elem.css(texGenArgsSelector).enumerate() {
+            let name = el.attributes["name"]!
+            let type = el.attributes["type"]!
+            let value = el.attributes["value"]!
+            
+            self.args[name] = GeneratorArg(name: name, type: type, value: value)
+        }
+    }
+    
+    public func createGenerator(container: Container, options: [String : Any] = [:]) -> TextureGenerator {
+        let texGen = container.resolve(TextureGenerator.self, name: self.type)!
+        texGen.processArgs(container, args: self.args)
+        return texGen
     }
 }
 

                    let transform = SpectraXMLTransformNode().parse(container, elem: child, options: options)
                    container.register(MDLTransform.self, name: key!) { _ in
                        return SpectraXMLTransformNode.copy(transform)
                    }
                case .TextureFilter:
                    let textureFilter = SpectraXMLTextureFilterNode().parse(container, elem: child, options: options)
                    container.register(MDLTextureFilter.self, name: key!) { _ in

    case MaterialProperty = "material-property"
    case ScatteringFunction = "scattering-function"
    case Texture = "texture"
    case TextureGenerator = "texture-generator"
    case TextureFilter = "texture-filter"
    case TextureSampler = "texture-sampler"
    case Light = "light"
    case LightGenerator = "light-generator"
    
    // TODO: reimplement nodeParser() once auto-injection is available in Swinject
    // - until then, I really can't resolve the type
