public void Bake() { // Validate Project Platform if (!Unity3D2Babylon.Tools.ValidateProjectPlatform()) { return; } try { string inputFile = AssetDatabase.GetAssetPath(convertCube); string inputExt = Path.GetExtension(inputFile); if (cubemapTool == BabylonCubemapTool.ReflectionProbes) { if (inputExt.Equals(".hdr", StringComparison.OrdinalIgnoreCase) || inputExt.Equals(".exr", StringComparison.OrdinalIgnoreCase)) { ExporterWindow.ReportProgress(1, "Baking cubemap reflection probe... This may take a while."); string outputFile = inputFile.Replace(inputExt, "Probe.hdr"); int reflectionResolution = (int)reflectionType; FREE_IMAGE_FORMAT srcType = FREE_IMAGE_FORMAT.FIF_HDR; if (inputExt.Equals(".hdr", StringComparison.OrdinalIgnoreCase)) { srcType = FREE_IMAGE_FORMAT.FIF_HDR; } else if (inputExt.Equals(".exr", StringComparison.OrdinalIgnoreCase)) { srcType = FREE_IMAGE_FORMAT.FIF_EXR; } FREE_IMAGE_FILTER rescaleFilter = FREE_IMAGE_FILTER.FILTER_LANCZOS3; int rescaleWidth = reflectionResolution * 4; int rescaleHeight = rescaleWidth / 2; FileStream destStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write); FileStream sourceStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read); try { Tools.ConvertFreeImage(sourceStream, srcType, destStream, FREE_IMAGE_FORMAT.FIF_HDR, FREE_IMAGE_TYPE.FIT_UNKNOWN, true, FREE_IMAGE_COLOR_DEPTH.FICD_AUTO, FREE_IMAGE_LOAD_FLAGS.DEFAULT, FREE_IMAGE_SAVE_FLAGS.DEFAULT, 0.0, false, false, rescaleWidth, rescaleHeight, rescaleFilter); } catch (Exception ex) { UnityEngine.Debug.LogException(ex); } finally { destStream.Close(); sourceStream.Close(); } if (System.IO.File.Exists(outputFile)) { AssetDatabase.ImportAsset(outputFile, ImportAssetOptions.ForceUpdate); var importTool = new BabylonTextureImporter(outputFile); importTool.textureImporter.textureShape = TextureImporterShape.TextureCube; importTool.textureImporter.isReadable = true; importTool.ForceUpdate(); } } else { ExporterWindow.ShowMessage("You must select a high dynamic range cubemap"); } } else if (cubemapTool == BabylonCubemapTool.CubemapSplitter) { ExporterWindow.ReportProgress(1, "Baking cubemap texture faces... This may take a while."); bool jpeg = (imageFormat == BabylonImageFormat.JPEG); string faceExt = (jpeg) ? ".jpg" : ".png"; var splitterOpts = new BabylonSplitterOptions(); var outputFile = inputFile.Replace(inputExt, faceExt); Tools.ExportCubemap(convertCube, outputFile, imageFormat, splitterOpts); if (createSkyboxMaterial == true) { ExporterWindow.ReportProgress(1, "Generating skybox material assets... This may take a while."); AssetDatabase.Refresh(); Material skyboxMaterial = new Material(Shader.Find("Mobile/Skybox")); if (skyboxMaterial != null) { string frontFilename = outputFile.Replace(faceExt, ("_pz" + faceExt)); AssetDatabase.ImportAsset(frontFilename, ImportAssetOptions.ForceUpdate); Texture2D frontTexture = (Texture2D)AssetDatabase.LoadAssetAtPath(frontFilename, typeof(Texture2D)); if (frontTexture != null) { skyboxMaterial.SetTexture("_FrontTex", frontTexture); } string backFilename = outputFile.Replace(faceExt, ("_nz" + faceExt)); AssetDatabase.ImportAsset(backFilename, ImportAssetOptions.ForceUpdate); Texture2D backTexture = (Texture2D)AssetDatabase.LoadAssetAtPath(backFilename, typeof(Texture2D)); if (backTexture != null) { skyboxMaterial.SetTexture("_BackTex", backTexture); } string leftFilename = outputFile.Replace(faceExt, ("_px" + faceExt)); AssetDatabase.ImportAsset(leftFilename, ImportAssetOptions.ForceUpdate); Texture2D leftTexture = (Texture2D)AssetDatabase.LoadAssetAtPath(leftFilename, typeof(Texture2D)); if (leftTexture != null) { skyboxMaterial.SetTexture("_LeftTex", leftTexture); } string rightFilename = outputFile.Replace(faceExt, ("_nx" + faceExt)); AssetDatabase.ImportAsset(rightFilename, ImportAssetOptions.ForceUpdate); Texture2D rightTexture = (Texture2D)AssetDatabase.LoadAssetAtPath(rightFilename, typeof(Texture2D)); if (rightTexture != null) { skyboxMaterial.SetTexture("_RightTex", rightTexture); } string upFilename = outputFile.Replace(faceExt, ("_py" + faceExt)); AssetDatabase.ImportAsset(upFilename, ImportAssetOptions.ForceUpdate); Texture2D upTexture = (Texture2D)AssetDatabase.LoadAssetAtPath(upFilename, typeof(Texture2D)); if (upTexture != null) { skyboxMaterial.SetTexture("_UpTex", upTexture); } string downFilename = outputFile.Replace(faceExt, ("_ny" + faceExt)); AssetDatabase.ImportAsset(downFilename, ImportAssetOptions.ForceUpdate); Texture2D downTexture = (Texture2D)AssetDatabase.LoadAssetAtPath(downFilename, typeof(Texture2D)); if (downTexture != null) { skyboxMaterial.SetTexture("_DownTex", downTexture); } string outputMaterialName = Path.GetFileNameWithoutExtension(inputFile); string outputMaterialPath = Path.GetDirectoryName(inputFile); string outputMaterialFile = outputMaterialPath + "/" + outputMaterialName + ".mat"; AssetDatabase.CreateAsset(skyboxMaterial, outputMaterialFile); } else { throw new Exception("Failed to create 'Mobile/Skybox' material"); } } } } catch (Exception ex) { UnityEngine.Debug.LogException(ex); } finally { ExporterWindow.ReportProgress(1, "Refresing assets database..."); AssetDatabase.Refresh(); } ExporterWindow.ReportProgress(1, "Cubemap conversion complete."); EditorUtility.ClearProgressBar(); if (this.keepGeneratorOpen) { ExporterWindow.ShowMessage("Cubemap optimzation complete.", "Babylon.js"); } else { this.Close(); } }
public void Split(string inputFile, string inputExt, bool createSkybox) { bool jpeg = (skyboxSplitter == BabylonImageFormat.JPG); string faceExt = (jpeg) ? ".jpg" : ".png"; var splitterOpts = new BabylonSplitterOptions(); var outputFile = inputFile.Replace(inputExt, faceExt); if (createSkybox == true && generateSkybox == true) { ExporterWindow.ReportProgress(1, "Splitting cubemap texture faces... This may take a while."); Tools.ExportSkybox(convertCube, outputFile, splitterOpts, skyboxSplitter); } if (createSkybox == true && generateSkybox == true && createSkyboxMaterial == true) { ExporterWindow.ReportProgress(1, "Generating skybox material assets... This may take a while."); AssetDatabase.Refresh(); Material skyboxMaterial = new Material(Shader.Find("Skybox/6 Sided")); if (skyboxMaterial != null) { string frontFilename = outputFile.Replace(faceExt, ("_pz" + faceExt)); AssetDatabase.ImportAsset(frontFilename, ImportAssetOptions.ForceUpdate); Texture2D frontTexture = (Texture2D)AssetDatabase.LoadAssetAtPath(frontFilename, typeof(Texture2D)); if (frontTexture != null) { skyboxMaterial.SetTexture("_FrontTex", frontTexture); } string backFilename = outputFile.Replace(faceExt, ("_nz" + faceExt)); AssetDatabase.ImportAsset(backFilename, ImportAssetOptions.ForceUpdate); Texture2D backTexture = (Texture2D)AssetDatabase.LoadAssetAtPath(backFilename, typeof(Texture2D)); if (backTexture != null) { skyboxMaterial.SetTexture("_BackTex", backTexture); } string leftFilename = outputFile.Replace(faceExt, ("_px" + faceExt)); AssetDatabase.ImportAsset(leftFilename, ImportAssetOptions.ForceUpdate); Texture2D leftTexture = (Texture2D)AssetDatabase.LoadAssetAtPath(leftFilename, typeof(Texture2D)); if (leftTexture != null) { skyboxMaterial.SetTexture("_LeftTex", leftTexture); } string rightFilename = outputFile.Replace(faceExt, ("_nx" + faceExt)); AssetDatabase.ImportAsset(rightFilename, ImportAssetOptions.ForceUpdate); Texture2D rightTexture = (Texture2D)AssetDatabase.LoadAssetAtPath(rightFilename, typeof(Texture2D)); if (rightTexture != null) { skyboxMaterial.SetTexture("_RightTex", rightTexture); } string upFilename = outputFile.Replace(faceExt, ("_py" + faceExt)); AssetDatabase.ImportAsset(upFilename, ImportAssetOptions.ForceUpdate); Texture2D upTexture = (Texture2D)AssetDatabase.LoadAssetAtPath(upFilename, typeof(Texture2D)); if (upTexture != null) { skyboxMaterial.SetTexture("_UpTex", upTexture); } string downFilename = outputFile.Replace(faceExt, ("_ny" + faceExt)); AssetDatabase.ImportAsset(downFilename, ImportAssetOptions.ForceUpdate); Texture2D downTexture = (Texture2D)AssetDatabase.LoadAssetAtPath(downFilename, typeof(Texture2D)); if (downTexture != null) { skyboxMaterial.SetTexture("_DownTex", downTexture); } string outputMaterialName = Path.GetFileNameWithoutExtension(outputFile); string outputMaterialPath = Path.GetDirectoryName(outputFile); string outputMaterialFile = outputMaterialPath + "/" + outputMaterialName + ".mat"; AssetDatabase.CreateAsset(skyboxMaterial, outputMaterialFile); } else { UnityEngine.Debug.LogError("CMFT: Failed to locate 'Skybox/6 Sided' shader material"); } } }
private void ConvertUnitySkyboxToBabylon(Camera camera, float progress) { // Note: Only Support Main Camera Skyboxes if (Camera.main == camera && (camera.clearFlags & CameraClearFlags.Skybox) == CameraClearFlags.Skybox) { // Note: Only Support Tone Mapped Skyboxes if (RenderSettings.skybox != null) { BabylonTexture skytex = null; if (RenderSettings.skybox.shader.name == "Skybox/Cubemap") { var cubeMap = RenderSettings.skybox.GetTexture("_Tex") as Cubemap; if (cubeMap != null) { var cubeTextureFile = AssetDatabase.GetAssetPath(cubeMap); var cubeTextureExt = Path.GetExtension(cubeTextureFile); if (!cubeTextureExt.Equals(".dds", StringComparison.OrdinalIgnoreCase)) { ExporterWindow.ReportProgress(progress, "Baking skybox environment textures... This may take a while."); var faceTextureExt = ".jpg"; var faceTextureFormat = BabylonImageFormat.JPEG; if (exportationOptions.ImageEncodingOptions == (int)BabylonImageFormat.PNG) { faceTextureExt = ".png"; faceTextureFormat = BabylonImageFormat.PNG; } string frontTextureExt = "_pz" + faceTextureExt; string backTextureExt = "_nz" + faceTextureExt; string leftTextureExt = "_px" + faceTextureExt; string rightTextureExt = "_nx" + faceTextureExt; string upTextureExt = "_py" + faceTextureExt; string downTextureExt = "_ny" + faceTextureExt; skytex = new BabylonTexture(); skytex.name = String.Format("{0}_Skybox", SceneName); skytex.isCube = true; skytex.coordinatesMode = 5; skytex.extensions = new string[] { leftTextureExt, upTextureExt, frontTextureExt, rightTextureExt, downTextureExt, backTextureExt }; Tools.SetTextureWrapMode(skytex, cubeMap); var outputFile = Path.Combine(babylonScene.OutputPath, skytex.name + faceTextureExt); var splitterOpts = new BabylonSplitterOptions(); this.skyboxTextures = Tools.ExportCubemap(cubeMap, outputFile, faceTextureFormat, splitterOpts); } else { UnityEngine.Debug.LogWarning("SKYBOX: Unsupported cubemap texture type of " + cubeTextureExt + " for " + Path.GetFileName(cubeTextureFile)); return; } } } else if (RenderSettings.skybox.shader.name == "Skybox/6 Sided" || RenderSettings.skybox.shader.name == "Mobile/Skybox") { // 6-Sided Skybox Textures (Tone Mapped Image Formats Only) var frontTexture = RenderSettings.skybox.GetTexture("_FrontTex") as Texture2D; var backTexture = RenderSettings.skybox.GetTexture("_BackTex") as Texture2D; var leftTexture = RenderSettings.skybox.GetTexture("_LeftTex") as Texture2D; var rightTexture = RenderSettings.skybox.GetTexture("_RightTex") as Texture2D; var upTexture = RenderSettings.skybox.GetTexture("_UpTex") as Texture2D; var downTexture = RenderSettings.skybox.GetTexture("_DownTex") as Texture2D; if (frontTexture != null && backTexture != null && leftTexture != null && rightTexture != null && upTexture != null && downTexture != null) { ExporterWindow.ReportProgress(progress, "Exporting skybox environment textures... This may take a while."); string frontTextureExt = "_pz.jpg"; string backTextureExt = "_nz.jpg"; string leftTextureExt = "_px.jpg"; string rightTextureExt = "_nx.jpg"; string upTextureExt = "_py.jpg"; string downTextureExt = "_ny.jpg"; skytex = new BabylonTexture(); skytex.name = String.Format("{0}_Skybox", SceneName); skytex.isCube = true; skytex.coordinatesMode = 5; Tools.SetTextureWrapMode(skytex, frontTexture); List <Tools.TextureInfo> faces = new List <Tools.TextureInfo>(); var faceTextureFile = AssetDatabase.GetAssetPath(frontTexture); var faceTextureExt = Path.GetExtension(faceTextureFile); var faceImportTool = new BabylonTextureImporter(faceTextureFile); if (faceTextureExt.Equals(".png", StringComparison.OrdinalIgnoreCase) || faceTextureExt.Equals(".jpg", StringComparison.OrdinalIgnoreCase) || faceTextureExt.Equals(".jpeg", StringComparison.OrdinalIgnoreCase)) { frontTextureExt = "_pz" + faceTextureExt; var frontTextureName = String.Format("{0}_pz{1}", skytex.name, faceTextureExt); var frontTexturePath = Path.Combine(babylonScene.OutputPath, frontTextureName); faceImportTool.SetReadable(); CopyTextureFace(frontTexturePath, frontTextureName, frontTexture); faces.Add(new Tools.TextureInfo { filename = frontTexturePath, texture = frontTexture.Copy() }); } else { UnityEngine.Debug.LogWarning("SKYBOX: Unsupported cube face texture type of " + faceTextureExt + " for " + Path.GetFileName(faceTextureFile)); } faceTextureFile = AssetDatabase.GetAssetPath(backTexture); faceTextureExt = Path.GetExtension(faceTextureFile); faceImportTool = new BabylonTextureImporter(faceTextureFile); if (faceTextureExt.Equals(".png", StringComparison.OrdinalIgnoreCase) || faceTextureExt.Equals(".jpg", StringComparison.OrdinalIgnoreCase) || faceTextureExt.Equals(".jpeg", StringComparison.OrdinalIgnoreCase)) { backTextureExt = "_nz" + faceTextureExt; var backTextureName = String.Format("{0}_nz{1}", skytex.name, faceTextureExt); var backTexturePath = Path.Combine(babylonScene.OutputPath, backTextureName); faceImportTool.SetReadable(); CopyTextureFace(backTexturePath, backTextureName, backTexture); faces.Add(new Tools.TextureInfo { filename = backTexturePath, texture = backTexture.Copy() }); } else { UnityEngine.Debug.LogWarning("SKYBOX: Unsupported cube face texture type of " + faceTextureExt + " for " + Path.GetFileName(faceTextureFile)); } faceTextureFile = AssetDatabase.GetAssetPath(leftTexture); faceTextureExt = Path.GetExtension(faceTextureFile); faceImportTool = new BabylonTextureImporter(faceTextureFile); if (faceTextureExt.Equals(".png", StringComparison.OrdinalIgnoreCase) || faceTextureExt.Equals(".jpg", StringComparison.OrdinalIgnoreCase) || faceTextureExt.Equals(".jpeg", StringComparison.OrdinalIgnoreCase)) { leftTextureExt = "_px" + faceTextureExt; var leftTextureName = String.Format("{0}_px{1}", skytex.name, faceTextureExt); var leftTexturePath = Path.Combine(babylonScene.OutputPath, leftTextureName); faceImportTool.SetReadable(); CopyTextureFace(leftTexturePath, leftTextureName, leftTexture); faces.Add(new Tools.TextureInfo { filename = leftTexturePath, texture = leftTexture.Copy() }); } else { UnityEngine.Debug.LogWarning("SKYBOX: Unsupported cube face texture type of " + faceTextureExt + " for " + Path.GetFileName(faceTextureFile)); } faceTextureFile = AssetDatabase.GetAssetPath(rightTexture); faceTextureExt = Path.GetExtension(faceTextureFile); faceImportTool = new BabylonTextureImporter(faceTextureFile); if (faceTextureExt.Equals(".png", StringComparison.OrdinalIgnoreCase) || faceTextureExt.Equals(".jpg", StringComparison.OrdinalIgnoreCase) || faceTextureExt.Equals(".jpeg", StringComparison.OrdinalIgnoreCase)) { rightTextureExt = "_nx" + faceTextureExt; var rightTextureName = String.Format("{0}_nx{1}", skytex.name, faceTextureExt); var rightTexturePath = Path.Combine(babylonScene.OutputPath, rightTextureName); faceImportTool.SetReadable(); CopyTextureFace(rightTexturePath, rightTextureName, rightTexture); faces.Add(new Tools.TextureInfo { filename = rightTexturePath, texture = rightTexture.Copy() }); } else { UnityEngine.Debug.LogWarning("SKYBOX: Unsupported cube face texture type of " + faceTextureExt + " for " + Path.GetFileName(faceTextureFile)); } faceTextureFile = AssetDatabase.GetAssetPath(upTexture); faceTextureExt = Path.GetExtension(faceTextureFile); faceImportTool = new BabylonTextureImporter(faceTextureFile); if (faceTextureExt.Equals(".png", StringComparison.OrdinalIgnoreCase) || faceTextureExt.Equals(".jpg", StringComparison.OrdinalIgnoreCase) || faceTextureExt.Equals(".jpeg", StringComparison.OrdinalIgnoreCase)) { upTextureExt = "_py" + faceTextureExt; var upTextureName = String.Format("{0}_py{1}", skytex.name, faceTextureExt); var upTexturePath = Path.Combine(babylonScene.OutputPath, upTextureName); faceImportTool.SetReadable(); CopyTextureFace(upTexturePath, upTextureName, upTexture); faces.Add(new Tools.TextureInfo { filename = upTexturePath, texture = upTexture.Copy() }); } else { UnityEngine.Debug.LogWarning("SKYBOX: Unsupported cube face texture type of " + faceTextureExt + " for " + Path.GetFileName(faceTextureFile)); } faceTextureFile = AssetDatabase.GetAssetPath(downTexture); faceTextureExt = Path.GetExtension(faceTextureFile); faceImportTool = new BabylonTextureImporter(faceTextureFile); if (faceTextureExt.Equals(".png", StringComparison.OrdinalIgnoreCase) || faceTextureExt.Equals(".jpg", StringComparison.OrdinalIgnoreCase) || faceTextureExt.Equals(".jpeg", StringComparison.OrdinalIgnoreCase)) { downTextureExt = "_ny" + faceTextureExt; var downTextureName = String.Format("{0}_ny{1}", skytex.name, faceTextureExt); var downTexturePath = Path.Combine(babylonScene.OutputPath, downTextureName); faceImportTool.SetReadable(); CopyTextureFace(downTexturePath, downTexturePath, downTexture); faces.Add(new Tools.TextureInfo { filename = downTexturePath, texture = downTexture.Copy() }); } else { UnityEngine.Debug.LogWarning("SKYBOX: Unsupported cube face texture type of " + faceTextureExt + " for " + Path.GetFileName(faceTextureFile)); } skytex.extensions = new string[] { leftTextureExt, upTextureExt, frontTextureExt, rightTextureExt, downTextureExt, backTextureExt }; this.skyboxTextures = (faces.Count > 0) ? faces.ToArray() : null; } } if (skytex != null) { skytex.level = (SceneController != null) ? SceneController.skyboxOptions.skyTextureLevel : 1.0f; string meshTags = (SceneController != null) ? SceneController.skyboxOptions.meshTags : String.Empty; float skyboxSize = (SceneController != null) ? SceneController.skyboxOptions.skyMeshSize : 1000; bool skyboxSphere = (SceneController != null) ? (SceneController.skyboxOptions.meshType == BabylonSkyboxType.Sphere) : false; // Babylon Skybox Mesh var skybox = new BabylonMesh(); skybox.id = Guid.NewGuid().ToString(); skybox.infiniteDistance = true; skybox.numBoneInfluencers = Tools.GetMaxBoneInfluencers(); if (!String.IsNullOrEmpty(meshTags)) { skybox.tags = meshTags; } if (skyboxSphere) { skybox.name = "sceneSkyboxSphere"; Mesh sphereMesh = Tools.CreateSphereMesh(skyboxSize * 0.5f, 48, 48); Tools.GenerateBabylonMeshData(sphereMesh, skybox); } else { skybox.name = "sceneSkyboxCube"; Mesh boxMesh = Tools.CreateBoxMesh(skyboxSize, skyboxSize, skyboxSize); Tools.GenerateBabylonMeshData(boxMesh, skybox); } // Babylon Default Skybox var skyboxMaterial = new BabylonDefaultMaterial(); skyboxMaterial.name = "sceneSkyboxMaterial"; skyboxMaterial.id = Guid.NewGuid().ToString(); skyboxMaterial.backFaceCulling = false; skyboxMaterial.disableLighting = true; skyboxMaterial.diffuse = Color.black.ToFloat(); skyboxMaterial.specular = Color.black.ToFloat(); skyboxMaterial.ambient = Color.clear.ToFloat(); skyboxMaterial.reflectionTexture = skytex; // Babylon Skybox Material skybox.materialId = skyboxMaterial.id; babylonScene.MeshesList.Add(skybox); babylonScene.MaterialsList.Add(skyboxMaterial); babylonScene.AddTextureCube("sceneSkyboxMaterial"); } } } }
private void ExportMainCameraSkyboxToBabylon() { if (RenderSettings.sun != null) { var direction = new Vector3(0, 0, 1); var transformedDirection = RenderSettings.sun.transform.TransformDirection(direction); SceneBuilder.SunlightDirection = transformedDirection.ToFloat(); SceneBuilder.SunlightIndentifier = GetID(RenderSettings.sun.gameObject); } if (Camera.main != null) { babylonScene.clearColor = Camera.main.backgroundColor.ToFloat(1.0f); if ((Camera.main.clearFlags & CameraClearFlags.Skybox) == CameraClearFlags.Skybox) { if (RenderSettings.skybox != null) { bool dds = false; BabylonTexture skytex = null; if (RenderSettings.skybox.shader.name == "Skybox/Cubemap") { skytex = new BabylonCubeTexture(); skytex.name = String.Format("{0}_Skybox", SceneName); skytex.coordinatesMode = 5; Cubemap cubeMap = RenderSettings.skybox.GetTexture("_Tex") as Cubemap; if (cubeMap != null) { var srcTexturePath = AssetDatabase.GetAssetPath(cubeMap); var srcTextureExt = Path.GetExtension(srcTexturePath); if (srcTextureExt.Equals(".dds", StringComparison.OrdinalIgnoreCase)) { ExporterWindow.ReportProgress(1, "Exporting skybox direct draw surface... This may take a while."); // .. // Export Draw Surface Skybox Textures // .. dds = true; skytex.name += ".dds"; skytex.extensions = null; ((BabylonCubeTexture)skytex).prefiltered = true; CopyCubemapTexture(skytex.name, cubeMap, skytex); } else { ExporterWindow.ReportProgress(1, "Baking skybox environment textures... This may take a while."); var imageFormat = (BabylonImageFormat)ExporterWindow.exportationOptions.ImageEncodingOptions; // .. // Export Tone Mapped Cubemap To 6-Sided Skybox Textures // .. bool jpeg = (imageFormat == BabylonImageFormat.JPG); string faceTextureExt = (jpeg) ? ".jpg" : ".png"; string frontTextureExt = "_pz" + faceTextureExt; string backTextureExt = "_nz" + faceTextureExt; string leftTextureExt = "_px" + faceTextureExt; string rightTextureExt = "_nx" + faceTextureExt; string upTextureExt = "_py" + faceTextureExt; string downTextureExt = "_ny" + faceTextureExt; skytex.extensions = new string[] { leftTextureExt, upTextureExt, frontTextureExt, rightTextureExt, downTextureExt, backTextureExt }; Tools.SetTextureWrapMode(skytex, cubeMap); var outputFile = Path.Combine(babylonScene.OutputPath, skytex.name + faceTextureExt); var splitterOpts = new BabylonSplitterOptions(); Tools.ExportSkybox(cubeMap, outputFile, splitterOpts, imageFormat); } } } else if (RenderSettings.skybox.shader.name == "Skybox/6 Sided" || RenderSettings.skybox.shader.name == "Mobile/Skybox") { skytex = new BabylonCubeTexture(); skytex.name = String.Format("{0}_Skybox", SceneName); skytex.coordinatesMode = 5; // .. // 6-Sided Skybox Textures (Tone Mapped Image Formats Only) // .. var frontTexture = RenderSettings.skybox.GetTexture("_FrontTex") as Texture2D; var backTexture = RenderSettings.skybox.GetTexture("_BackTex") as Texture2D; var leftTexture = RenderSettings.skybox.GetTexture("_LeftTex") as Texture2D; var rightTexture = RenderSettings.skybox.GetTexture("_RightTex") as Texture2D; var upTexture = RenderSettings.skybox.GetTexture("_UpTex") as Texture2D; var downTexture = RenderSettings.skybox.GetTexture("_DownTex") as Texture2D; DumpSkyboxTextures(ref skytex, ref frontTexture, ref backTexture, ref leftTexture, ref rightTexture, ref upTexture, ref downTexture); } else if (RenderSettings.skybox.name.Equals("Default-Skybox")) { skytex = new BabylonCubeTexture(); skytex.name = String.Format("{0}_Skybox", SceneName); skytex.coordinatesMode = 5; // .. // 6-Sided Skybox Textures (Toolkit Skybox Template Images) // .. string skyboxPath = "Assets/Babylon/Template/Skybox/"; var frontTexture = AssetDatabase.LoadAssetAtPath <Texture2D>(skyboxPath + "DefaultSkybox_pz.png"); var backTexture = AssetDatabase.LoadAssetAtPath <Texture2D>(skyboxPath + "DefaultSkybox_nz.png"); var leftTexture = AssetDatabase.LoadAssetAtPath <Texture2D>(skyboxPath + "DefaultSkybox_px.png"); var rightTexture = AssetDatabase.LoadAssetAtPath <Texture2D>(skyboxPath + "DefaultSkybox_nx.png"); var upTexture = AssetDatabase.LoadAssetAtPath <Texture2D>(skyboxPath + "DefaultSkybox_py.png"); var downTexture = AssetDatabase.LoadAssetAtPath <Texture2D>(skyboxPath + "DefaultSkybox_ny.png"); DumpSkyboxTextures(ref skytex, ref frontTexture, ref backTexture, ref leftTexture, ref rightTexture, ref upTexture, ref downTexture); } else { UnityEngine.Debug.LogWarning("SKYBOX: " + RenderSettings.skybox.shader.name + " shader type is unsupported. Skybox and reflections will be disabled."); } if (skytex != null) { float size = (SceneController != null) ? SceneController.skyboxOptions.skyboxMeshSize : 1000; string tags = (SceneController != null) ? SceneController.skyboxOptions.skyboxMeshTags : String.Empty; // .. // PBR Skybox Material Support // .. bool pbr = (SceneController != null) ? SceneController.skyboxOptions.directDrawSurface.physicalBased : false; float pbr_ms = (SceneController != null) ? SceneController.skyboxOptions.directDrawSurface.microSurface : 1.0f; float pbr_cc = (SceneController != null) ? SceneController.skyboxOptions.directDrawSurface.cameraContrast : 1.0f; float pbr_ce = (SceneController != null) ? SceneController.skyboxOptions.directDrawSurface.cameraExposure : 1.0f; float pbr_di = (SceneController != null) ? SceneController.skyboxOptions.directDrawSurface.directIntensity : 1.0f; float pbr_ei = (SceneController != null) ? SceneController.skyboxOptions.directDrawSurface.emissiveIntensity : 1.0f; float pbr_si = (SceneController != null) ? SceneController.skyboxOptions.directDrawSurface.specularIntensity : 1.0f; float pbr_ri = (SceneController != null) ? SceneController.skyboxOptions.directDrawSurface.environmentIntensity : 1.0f; var skybox = new BabylonMesh(); skybox.id = Guid.NewGuid().ToString(); skybox.infiniteDistance = true; skybox.numBoneInfluencers = Tools.GetMaxBoneInfluencers(); if (!String.IsNullOrEmpty(tags)) { skybox.tags = tags; } skybox.name = "SceneSkyboxMesh"; Mesh boxMesh = Tools.CreateBoxMesh(size, size, size); Tools.GenerateBabylonMeshData(boxMesh, skybox); BabylonMaterial skyboxMaterial = null; if (dds == true && pbr == true) { var skyboxMaterialPbr = new BabylonSystemMaterial { name = "SceneSkyboxMaterial", id = Guid.NewGuid().ToString(), backFaceCulling = false, disableLighting = true, albedo = Color.white.ToFloat(), ambient = Color.black.ToFloat(), emissive = Color.black.ToFloat(), metallic = null, roughness = null, sideOrientation = 1, reflectivity = Color.white.ToFloat(), reflection = Color.white.ToFloat(), microSurface = pbr_ms, cameraContrast = pbr_cc, cameraExposure = pbr_ce, directIntensity = pbr_di, emissiveIntensity = pbr_ei, specularIntensity = pbr_si, environmentIntensity = pbr_ri, maxSimultaneousLights = 4, useSpecularOverAlpha = false, useRadianceOverAlpha = false, usePhysicalLightFalloff = false, useAlphaFromAlbedoTexture = false, useEmissiveAsIllumination = false, reflectionTexture = skytex }; skyboxMaterial = skyboxMaterialPbr; } else { var skyboxMaterialStd = new BabylonDefaultMaterial { name = "SceneSkyboxMaterial", id = Guid.NewGuid().ToString(), backFaceCulling = false, disableLighting = true, diffuse = Color.black.ToFloat(), specular = Color.black.ToFloat(), ambient = Color.clear.ToFloat(), reflectionTexture = skytex }; skyboxMaterial = skyboxMaterialStd; } if (skyboxMaterial != null) { skybox.materialId = skyboxMaterial.id; babylonScene.MeshesList.Add(skybox); babylonScene.MaterialsList.Add(skyboxMaterial); babylonScene.AddTextureCube("SceneSkyboxMaterial"); } } } } } }