From d7c015f52281718eb57daf01bf89ab9e60203883 Mon Sep 17 00:00:00 2001 From: Andy Baker Date: Sat, 1 Feb 2025 13:53:43 +0000 Subject: [PATCH] Experimental support for uploading newglb to Icosa --- Assets/Scripts/Export/Export.cs | 38 +++++++++++++----------- Assets/Scripts/Sharing/VrAssetService.cs | 13 +++++++- Assets/Scripts/UserConfig.cs | 1 + 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/Assets/Scripts/Export/Export.cs b/Assets/Scripts/Export/Export.cs index 3961f1c967..f680ce00c8 100644 --- a/Assets/Scripts/Export/Export.cs +++ b/Assets/Scripts/Export/Export.cs @@ -293,27 +293,10 @@ public static void ExportScene() if (App.PlatformConfig.EnableExportGlb && IsExportEnabled("newglb")) { - // 'New' GLTF export using UnityGLTF - string extension = "glb"; using (var unused = new AutoTimer("glb export")) { OverlayManager.m_Instance.UpdateProgress(0.7f); - var settings = App.Config.m_UnityGLTFSettings; - var context = new ExportContext(settings); - - // Beware the two meanings of "layer" in the following code - Unity layers and Open Brush layers - - var layerCanvases = App.Scene.LayerCanvases.Select(x => x.transform).ToList(); - var layerMask = LayerMask.GetMask("MainCanvas"); - if (App.UserConfig.Export.ExportEnvironment) - { - layerCanvases.Add(App.Instance.m_EnvironmentTransform); - layerMask |= LayerMask.GetMask("Environment"); - } - context.ExportLayers = layerMask; - var unityGltfexporter = new GLTFSceneExporter(layerCanvases.ToArray(), context); - - unityGltfexporter.SaveGLB(Path.Combine(parent, $"newglb"), $"{basename}.{extension}"); + ExportNewGlb(Path.Combine(parent, $"newglb"), basename, App.UserConfig.Export.ExportEnvironment); } progress.CompleteWork("newglb"); } @@ -329,5 +312,24 @@ public static void ExportScene() File.WriteAllText(readmeFilename, kExportReadmeBody); } } + + public static void ExportNewGlb(string destinationPath, string fileBaseName, bool exportEnvironment) + { + // 'New' GLTF style export. Exports to GLB format using UnityGLTF + var settings = App.Config.m_UnityGLTFSettings; + var context = new ExportContext(settings); + + // Beware the two meanings of "layer" in the following code - Unity layers and Open Brush layers + var layerCanvases = App.Scene.LayerCanvases.Select(x => x.transform).ToList(); + var layerMask = LayerMask.GetMask("MainCanvas"); + if (exportEnvironment) + { + layerCanvases.Add(App.Instance.m_EnvironmentTransform); + layerMask |= LayerMask.GetMask("Environment"); + } + context.ExportLayers = layerMask; + var unityGltfexporter = new GLTFSceneExporter(layerCanvases.ToArray(), context); + unityGltfexporter.SaveGLB(destinationPath, $"{fileBaseName}.glb"); + } } } // namespace TiltBrush diff --git a/Assets/Scripts/Sharing/VrAssetService.cs b/Assets/Scripts/Sharing/VrAssetService.cs index 7598826ea3..1e1f259744 100644 --- a/Assets/Scripts/Sharing/VrAssetService.cs +++ b/Assets/Scripts/Sharing/VrAssetService.cs @@ -702,7 +702,18 @@ private async Task CreateZipFileAsync( // Collect files into a .zip file, including the .tilt file and thumbnail string zipName = Path.Combine(tempUploadDir, "archive.zip"); - var filesToZip = exportResults.exportedFiles.ToList().Append(tempTiltPath).Append(tempThumbnailPath); + + var filesToZip = exportResults.exportedFiles.ToList() + .Append(tempTiltPath) + .Append(tempThumbnailPath); + + if (App.UserConfig?.Sharing.GenerateNewGlb ?? false) + { + string newGlbPath = Path.Combine(tempUploadDir, $"{uploadName}.glb"); + Export.ExportNewGlb(tempUploadDir, uploadName, true); + filesToZip = filesToZip.Append(newGlbPath); + } + await CreateZipFileAsync(zipName, tempUploadDir, filesToZip.ToArray(), token); var service = new IcosaService(App.Instance.IcosaToken); diff --git a/Assets/Scripts/UserConfig.cs b/Assets/Scripts/UserConfig.cs index ed1b38478a..6970925cc4 100644 --- a/Assets/Scripts/UserConfig.cs +++ b/Assets/Scripts/UserConfig.cs @@ -340,6 +340,7 @@ public struct SharingConfig { public string IcosaApiRoot; public string IcosaHomePage; + [FormerlySerializedAs("ExportNewGlb")] public bool GenerateNewGlb; } public SharingConfig Sharing;