function parseMaterial( materialNode, textureMap, connections ) {

					var FBX_ID = materialNode.id;
					var name = materialNode.attrName;
					var type = materialNode.properties.ShadingModel;

					var children = connections.get( FBX_ID ).children;

					var parameters = parseParameters( materialNode.properties, textureMap, children );

					var material;
					switch ( type ) {

						case 'phong':
							material = new THREE.MeshPhongMaterial();
							break;
						case 'lambert':
							material = new THREE.MeshLambertMaterial();
							break;
						default:
							console.warn( 'No implementation given for material type ' + type + ' in FBXLoader.js.  Defaulting to basic material' );
							material = new THREE.MeshBasicMaterial( { color: 0x3300ff } );
							break;

					}

					material.setValues( parameters );
					material.name = name;

					return material;

					/**
					 * @typedef {{Diffuse: FBXVector3, Specular: FBXVector3, Shininess: FBXValue, Emissive: FBXVector3, EmissiveFactor: FBXValue, Opacity: FBXValue}} FBXMaterialProperties
					 */
					/**
					 * @typedef {{color: THREE.Color=, specular: THREE.Color=, shininess: number=, emissive: THREE.Color=, emissiveIntensity: number=, opacity: number=, transparent: boolean=, map: THREE.Texture=}} THREEMaterialParameterPack
					 */
					/**
					 * @param {FBXMaterialProperties} properties
					 * @param {Map<number, THREE.Texture>} textureMap
					 * @param {{ID: number, relationship: string}[]} childrenRelationships
					 * @returns {THREEMaterialParameterPack}
					 */
					function parseParameters( properties, textureMap, childrenRelationships ) {

						var parameters = {};

						if ( properties.Diffuse ) {

							parameters.color = parseColor( properties.Diffuse );

						}
						if ( properties.Specular ) {

							parameters.specular = parseColor( properties.Specular );

						}
						if ( properties.Shininess ) {

							parameters.shininess = properties.Shininess.value;

						}
						if ( properties.Emissive ) {

							parameters.emissive = parseColor( properties.Emissive );

						}
						if ( properties.EmissiveFactor ) {

							parameters.emissiveIntensity = properties.EmissiveFactor.value;

						}
						if ( properties.Opacity ) {

							parameters.opacity = properties.Opacity.value;

						}
						if ( parameters.opacity < 1.0 ) {

							parameters.transparent = true;

						}

						childrenRelationships.forEach( function ( relationship ) {

							var type = relationship.relationship;
							switch ( type ) {

								case " \"AmbientColor":
									//TODO: Support AmbientColor textures
									break;

								case " \"DiffuseColor":
									parameters.map = textureMap.get( relationship.ID );
									break;

								default:
									console.warn( 'Unknown texture application of type ' + type + ', skipping texture' );
									break;

							}

						} );

						return parameters;

					}

				}
Takes information from Material node and returns a generated THREE.Material
@param {FBXMaterialNode} materialNode
@param {Map<number, THREE.Texture>} textureMap
@param {Map<number, {parents: {ID: number, relationship: string}[], children: {ID: number, relationship: string}[]}>} connections
@returns {THREE.Material}