120 lines
6.0 KiB
C#
120 lines
6.0 KiB
C#
|
using AwesomeTechnologies.VegetationSystem;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
|
|||
|
namespace AwesomeTechnologies.Shaders
|
|||
|
{
|
|||
|
// ReSharper disable once InconsistentNaming
|
|||
|
public class CTIShaderController : IShaderController
|
|||
|
{
|
|||
|
private static readonly string[] AllShaderNames =
|
|||
|
{
|
|||
|
"CTI/LOD Leaves", "CTI/LOD Bark","CTI/LOD Bark Array"
|
|||
|
};
|
|||
|
|
|||
|
private static readonly string[] FoliageShaderNames =
|
|||
|
{
|
|||
|
"CTI/LOD Leaves"
|
|||
|
};
|
|||
|
|
|||
|
private static readonly string[] BarkShaderNames =
|
|||
|
{
|
|||
|
"CTI/LOD Bark","CTI/LOD Bark Array"
|
|||
|
};
|
|||
|
|
|||
|
public bool MatchShader(string shaderName)
|
|||
|
{
|
|||
|
if (string.IsNullOrEmpty(shaderName)) return false;
|
|||
|
|
|||
|
for (int i = 0; i <= AllShaderNames.Length - 1; i++)
|
|||
|
{
|
|||
|
if (AllShaderNames[i] == shaderName) return true;
|
|||
|
}
|
|||
|
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
public ShaderControllerSettings Settings { get; set; }
|
|||
|
public void CreateDefaultSettings(Material[] materials)
|
|||
|
{
|
|||
|
Settings = new ShaderControllerSettings
|
|||
|
{
|
|||
|
Heading = "CTI Tree shader",
|
|||
|
Description = "",
|
|||
|
LODFadePercentage = true,
|
|||
|
LODFadeCrossfade = true,
|
|||
|
SampleWind = false,
|
|||
|
SupportsInstantIndirect = true,
|
|||
|
BillboardHDWind = false,
|
|||
|
BillboardSnow = false,
|
|||
|
OverrideBillboardAtlasNormalShader = "AwesomeTechnologies/Billboards/RenderNormalsAtlasCTI",
|
|||
|
OverrideBillboardAtlasShader = "AwesomeTechnologies/Billboards/RenderDiffuseAtlasCTI"
|
|||
|
};
|
|||
|
|
|||
|
Settings.AddLabelProperty("Bark settings");
|
|||
|
|
|||
|
Settings.AddColorProperty("BarkColorVariation", "Color variation", "", ShaderControllerSettings.GetColorFromMaterials(materials, "_HueVariation",BarkShaderNames));
|
|||
|
Settings.AddFloatProperty("BarkTranslucencyStrength", "Translucency strength", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_TranslucencyStrength",BarkShaderNames), 0, 1);
|
|||
|
Settings.AddFloatProperty("BarkAlphaCutoff", "Alpha cutoff", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_Cutoff",BarkShaderNames), 0, 1);
|
|||
|
|
|||
|
Settings.AddLabelProperty("Foliage settings");
|
|||
|
|
|||
|
Settings.AddColorProperty("ColorVariation", "Color variation", "", ShaderControllerSettings.GetColorFromMaterials(materials, "_HueVariation",FoliageShaderNames));
|
|||
|
Settings.AddFloatProperty("TranslucencyStrength", "Translucency strength", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_TranslucencyStrength",FoliageShaderNames), 0, 1);
|
|||
|
Settings.AddFloatProperty("AlphaCutoff", "Alpha cutoff", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_Cutoff",FoliageShaderNames), 0, 1);
|
|||
|
|
|||
|
Settings.AddLabelProperty("Wind settings");
|
|||
|
|
|||
|
Settings.AddFloatProperty("TumbleStrength", "Tumble Strength", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_TumbleStrength"), -1, 1);
|
|||
|
Settings.AddFloatProperty("TumbleFrequency", "Tumble Frequency", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_TumbleFrequency"), 0, 4);
|
|||
|
Settings.AddFloatProperty("TimeOffset", "Time Offset", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_TimeOffset"), 0, 2);
|
|||
|
Settings.AddFloatProperty("LeafTurbulence", "Leaf Turbulence", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_LeafTurbulence"), 0, 4);
|
|||
|
Settings.AddFloatProperty("EdgeFlutterInfluence", "Edge Flutter Influence", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_EdgeFlutterInfluence"), 0, 1);
|
|||
|
}
|
|||
|
|
|||
|
public void UpdateMaterial(Material material, EnvironmentSettings environmentSettings)
|
|||
|
{
|
|||
|
if (Settings == null) return;
|
|||
|
|
|||
|
Shader.SetGlobalFloat("_Lux_SnowAmount", environmentSettings.SnowAmount);
|
|||
|
Shader.SetGlobalColor("_Lux_SnowColor", environmentSettings.SnowColor);
|
|||
|
Shader.SetGlobalColor("_Lux_SnowSpecColor", environmentSettings.SnowSpecularColor);
|
|||
|
Shader.SetGlobalVector("_Lux_RainfallRainSnowIntensity",new Vector3(environmentSettings.RainAmount, environmentSettings.RainAmount, environmentSettings.SnowAmount));
|
|||
|
Shader.SetGlobalVector("_Lux_WaterFloodlevel",new Vector4(environmentSettings.RainAmount, environmentSettings.RainAmount, environmentSettings.RainAmount,environmentSettings.RainAmount));
|
|||
|
|
|||
|
|
|||
|
if (ShaderControllerSettings.HasShader(material, FoliageShaderNames))
|
|||
|
{
|
|||
|
material.SetColor("_HueVariation", Settings.GetColorPropertyValue("ColorVariation"));
|
|||
|
material.SetFloat("_TranslucencyStrength", Settings.GetFloatPropertyValue("TranslucencyStrength"));
|
|||
|
material.SetFloat("_Cutoff", Settings.GetFloatPropertyValue("AlphaCutoff"));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
material.SetColor("_HueVariation", Settings.GetColorPropertyValue("BarkColorVariation"));
|
|||
|
material.SetFloat("_TranslucencyStrength", Settings.GetFloatPropertyValue("BarkTranslucencyStrength"));
|
|||
|
material.SetFloat("_Cutoff", Settings.GetFloatPropertyValue("BarkAlphaCutoff"));
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
material.SetFloat("_TumbleStrength", Settings.GetFloatPropertyValue("TumbleStrength"));
|
|||
|
material.SetFloat("_TumbleFrequency", Settings.GetFloatPropertyValue("TumbleFrequency"));
|
|||
|
material.SetFloat("_TimeOffset", Settings.GetFloatPropertyValue("TimeOffset"));
|
|||
|
material.SetFloat("_LeafTurbulence", Settings.GetFloatPropertyValue("LeafTurbulence"));
|
|||
|
material.SetFloat("_EdgeFlutterInfluence", Settings.GetFloatPropertyValue("EdgeFlutterInfluence"));
|
|||
|
}
|
|||
|
|
|||
|
public void UpdateWind(Material material, WindSettings windSettings)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public bool MatchBillboardShader(Material[] materials)
|
|||
|
{
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|