using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif namespace VLB { public static class DummyMaterial { #if UNITY_EDITOR static string GetPath(Shader shader) { const string kDummyFilename = "VLBDummyMaterial.mat"; const string kDummyPathFallback = "Assets/Plugins/VolumetricLightBeam/Shaders/" + kDummyFilename; if (shader == null) return kDummyPathFallback; var shaderPath = AssetDatabase.GetAssetPath(shader); if (string.IsNullOrEmpty(shaderPath)) return kDummyPathFallback; var shaderFolder = System.IO.Path.GetDirectoryName(shaderPath); return System.IO.Path.Combine(shaderFolder, kDummyFilename); } /// /// Create a dummy material with the proper instancing flag to prevent from stripping away needed shader variants when exporting build /// public static Material Create(Shader shader, bool gpuInstanced) { if (shader == null) return null; string path = GetPath(shader); var dummyMat = AssetDatabase.LoadAssetAtPath(path); if (dummyMat == null || dummyMat.shader != shader || BatchingHelper.IsGpuInstancingEnabled(dummyMat) != gpuInstanced) { dummyMat = MaterialManager.NewMaterialPersistent(shader, gpuInstanced); if (dummyMat) AssetDatabase.CreateAsset(dummyMat, path); } return dummyMat; } #endif } }