void ParseEffect(Effect effect, BabylonScene scene) { var material = new StandardMaterial(effect.GetHashCode().ToString()); exportedMaterials.Add(material); var basicEffect = effect as BasicEffect; var skinnedEffect = effect as SkinnedEffect; if (basicEffect != null) { material.Alpha = basicEffect.Alpha; material.Diffuse = basicEffect.DiffuseColor.ToColor3(); material.Emissive = basicEffect.EmissiveColor.ToColor3(); material.Specular = basicEffect.SpecularColor.ToColor3(); material.SpecularPower = basicEffect.SpecularPower; } else { material.Alpha = skinnedEffect.Alpha; material.Diffuse = skinnedEffect.DiffuseColor.ToColor3(); material.Emissive = skinnedEffect.EmissiveColor.ToColor3(); material.Specular = skinnedEffect.SpecularColor.ToColor3(); material.SpecularPower = skinnedEffect.SpecularPower; } var texture = basicEffect != null ? basicEffect.Texture : skinnedEffect.Texture; if (texture != null) { var id = texture.GetHashCode().ToString(); if (!exportedTexturesFilename.ContainsKey(id)) { var tempPath = Path.GetTempPath(); var width = texture.Width; var height = texture.Height; string filename; if (texture.Format != SurfaceFormat.Dxt1) { filename = Path.Combine(tempPath, texturesCount + ".png"); } else { filename = Path.Combine(tempPath, texturesCount + ".jpg"); } texturesCount++; using (var file = new FileStream(filename, FileMode.Create, FileAccess.Write)) { if (texture.Format != SurfaceFormat.Dxt1) { texture.SaveAsPng(file, width, height); } else { texture.SaveAsJpeg(file, width, height); } } exportedTexturesFilename.Add(id, filename); } material.DiffuseTexture = exportedTexturesFilename[id]; } material.CreateBabylonMaterial(scene); }