public static void GetStandardMaterial(BatchMeshRenderer source, Color color, Color emission) { UnityEngine.Profiling.Profiler.BeginSample("GetStandardMaterial"); if (!SourceToClone.ContainsKey(source.SourceMaterial)) { // We need to assign this source if it doesn't exist. SourceToClone.Add(source.SourceMaterial, new Dictionary <MaterialComparer, Material>()); // We also add the source as a "clone" of itself. That way the original source is still used MaterialComparer sourceMaterialComparer = new MaterialComparer(source.SourceMaterial); SourceToClone[source.SourceMaterial].Add(sourceMaterialComparer, source.SourceMaterial); } Dictionary <MaterialComparer, Material> clones = SourceToClone[source.SourceMaterial]; MaterialComparer currentMaterialComparer = new MaterialComparer(source.Color, source.Emission); MaterialComparer newMaterialComparer = new MaterialComparer(color, emission); if (currentMaterialComparer != newMaterialComparer) { if (!clones.ContainsKey(newMaterialComparer)) { Material clone = new Material(source.SourceMaterial); clone.name = source.SourceMaterial.name + " " + newMaterialComparer.color.ToString(); clone.SetColor("_Color", newMaterialComparer.color); clone.SetColor("_EmissionColor", newMaterialComparer.emission); clones.Add(newMaterialComparer, clone); } source.CurrentMaterial = clones[newMaterialComparer]; } UnityEngine.Profiling.Profiler.EndSample(); }
public bool RemoveMaterialContainer(BatchMeshRenderer materialContainer) { if (materialContainer.CurrentMaterial != null && CloneContainer.ContainsKey(materialContainer.CurrentMaterial)) { if (CloneContainer[materialContainer.CurrentMaterial].Remove(materialContainer)) { BakeNeeded = true; return(true); } } return(false); }
public bool AddMaterialContainer(BatchMeshRenderer materialContainer) { if (materialContainer.CurrentMaterial != null) { if (!CloneContainer.ContainsKey(materialContainer.CurrentMaterial)) { CloneContainer.Add(materialContainer.CurrentMaterial, new HashSet <BatchMeshRenderer>()); } if (!CloneContainer[materialContainer.CurrentMaterial].Contains(materialContainer)) { CloneContainer[materialContainer.CurrentMaterial].Add(materialContainer); BakeNeeded = true; return(true); } } return(false); }
public static void GetStandardMaterial(BatchMeshRenderer source, Color color) { GetStandardMaterial(source, color, source.Emission); }
public static void NewEmission(BatchMeshRenderer source, Color emission) { GetStandardMaterial(source, source.Color, emission); }