/// <summary> /// Generate and save MSMap. /// </summary> /// <param name="destPath">File path to save.</param> internal void GenerateMetallicSmoothness(string destPath) { using (var metallic = metallicMap ? MagickImageUtility.GetMagickImage(metallicMap) : new MagickImage(MagickColors.White, 2, 2)) using (var smoothness = smoothnessMap ? MagickImageUtility.GetMagickImage(smoothnessMap) : new MagickImage(MagickColors.White, 2, 2)) using (var msMap = MagickImageUtility.GenerateMetallicSmoothness(metallic, false, smoothness, invertSmoothness && smoothnessMap)) { MagickImageUtility.SaveAsAsset(destPath, msMap, MagickFormat.Png32, false); } }
/// <summary> /// Generates textures for Toon Lit. /// </summary> /// <param name="materials">Materials to generate textures.</param> /// <param name="assetsDirectory">Root directory for converted avatar.</param> /// <param name="maxTextureSize">Max texture size. 0 for no limits.</param> /// <param name="progressCallback">Callback to show progress.</param> /// <returns>Converted textures (key: original material).</returns> internal Dictionary <Material, Texture2D> GenrateToonLitTextures(Material[] materials, string assetsDirectory, int maxTextureSize, TextureProgressCallback progressCallback) { var saveDirectory = $"{assetsDirectory}/Textures"; Directory.CreateDirectory(saveDirectory); AssetDatabase.Refresh(); var materialsToConvert = materials.Where(m => !VRCSDKUtility.IsMaterialAllowedForQuestAvatar(m)).ToArray(); var convertedTextures = new Dictionary <Material, Texture2D>(); for (int i = 0; i < materialsToConvert.Length; i++) { var m = materialsToConvert[i]; progressCallback(materialsToConvert.Length, i, null, m); try { AssetDatabase.TryGetGUIDAndLocalFileIdentifier(m, out string guid, out long localId); var material = MaterialWrapperBuilder.Build(m); using (var image = material.GenerateToonLitImage()) { Texture2D texture = null; if (image != null) { if (maxTextureSize > 0 && Math.Max(image.Width, image.Height) > maxTextureSize) { image.Resize(maxTextureSize, maxTextureSize); } texture = MagickImageUtility.SaveAsAsset($"{saveDirectory}/{m.name}_from_{guid}.png", image); } convertedTextures.Add(m, texture); } } catch (Exception e) { progressCallback(materialsToConvert.Length, i, e, m); throw e; } } return(convertedTextures); }