#if VEGETATION_STUDIO_PRO using AwesomeTechnologies.VegetationSystem; using UnityEngine; namespace AwesomeTechnologies.Shaders { // ReSharper disable once InconsistentNaming public class FAETreeShaderController : IShaderController { private static readonly string[] BranchShaderNames = { "FAE/Tree Branch" }; private static readonly string[] TrunkShaderNames = { "FAE/Tree Trunk" }; public bool MatchShader(string shaderName) { if (string.IsNullOrEmpty(shaderName)) return false; for (int i = 0; i <= BranchShaderNames.Length - 1; i++) { if (BranchShaderNames[i].Contains(shaderName)) return true; } for (int i = 0; i <= TrunkShaderNames.Length - 1; i++) { if (TrunkShaderNames[i].Contains(shaderName)) return true; } return false; } public bool MatchBillboardShader(Material[] materials) { for (int i = 0; i <= materials.Length - 1; i++) { if (materials[i].shader.name == "FAE/Tree Billboard") return true; } return false; } bool IsTrunkShader(string shaderName) { for (int i = 0; i <= TrunkShaderNames.Length - 1; i++) { if (TrunkShaderNames[i].Contains(shaderName)) return true; } return false; } public ShaderControllerSettings Settings { get; set; } public void CreateDefaultSettings(Material[] materials) { Settings = new ShaderControllerSettings { Heading = "Fantasy Adventure Environment Tree", Description = "", LODFadePercentage = false, LODFadeCrossfade = false, SampleWind = true, SupportsInstantIndirect = false }; Settings.AddLabelProperty("Branch"); Settings.AddColorProperty("HueVariation", "Hue Variation", "", ShaderControllerSettings.GetColorFromMaterials(materials, "_HueVariation")); Settings.AddColorProperty("TransmissionColor", "Transmission Color", "", ShaderControllerSettings.GetColorFromMaterials(materials, "_TransmissionColor")); Settings.AddLabelProperty("Trunk"); Settings.AddFloatProperty("GradientBrightness", "Gradient Brightness", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_GradientBrightness"), 0, 2); Settings.AddFloatProperty("AmbientOcclusion", "Ambient Occlusion", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_AmbientOcclusion"), 0, 1); Settings.AddLabelProperty("Wind"); Settings.AddFloatProperty("WindInfluence", "Influence", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_MaxWindStrength"), 0, 1); Settings.AddFloatProperty("WindAmplitude", "Amplitude Multiplier", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_WindAmplitudeMultiplier"), 0, 10); } public void UpdateMaterial(Material material, EnvironmentSettings environmentSettings) { if (Settings == null) return; bool isTrunk = IsTrunkShader(material.shader.name); if (isTrunk) { float ambientOcclusion = Settings.GetFloatPropertyValue("AmbientOcclusion"); float gradientBrightness = Settings.GetFloatPropertyValue("GradientBrightness"); material.SetFloat("_AmbientOcclusion", ambientOcclusion); material.SetFloat("_GradientBrightness", gradientBrightness); } else { material.SetColor("_HueVariation", Settings.GetColorPropertyValue("HueVariation")); material.SetColor("_TransmissionColor", Settings.GetColorPropertyValue("TransmissionColor")); material.SetFloat("_MaxWindStrength", Settings.GetFloatPropertyValue("WindInfluence")); material.SetFloat("_WindAmplitudeMultiplier", Settings.GetFloatPropertyValue("WindAmplitude")); } } public void UpdateWind(Material material, WindSettings windSettings) { } } } #endif