Firstborn/Assets/AwesomeTechnologies/VegetationStudioPro/Runtime/ShaderSystem/VSGrassShaderController.cs

84 lines
3.4 KiB
C#
Raw Permalink Normal View History

using AwesomeTechnologies.VegetationSystem;
using UnityEngine;
namespace AwesomeTechnologies.Shaders
{
// ReSharper disable once InconsistentNaming
public class VSGrassShaderController : IShaderController
{
private static readonly string[] FoliageShaderNames =
{
"AwesomeTechnologies/Grass/Grass",
"AwesomeTechnologies/Release/Grass/Grass"
};
public bool MatchShader(string shaderName)
{
if (string.IsNullOrEmpty(shaderName)) return false;
for (int i = 0; i <= FoliageShaderNames.Length - 1; i++)
{
if (FoliageShaderNames[i] == shaderName) return true;
}
return false;
}
public ShaderControllerSettings Settings { get; set; }
public void CreateDefaultSettings(Material[] materials)
{
Settings = new ShaderControllerSettings
{
Heading = "Vegetation Studio Grass",
Description = "",
LODFadePercentage = true,
LODFadeCrossfade = true,
SampleWind = false,
SupportsInstantIndirect = true,
BillboardHDWind = false
};
Settings.AddLabelProperty("Foliage settings");
Settings.AddColorProperty("TintColor1", "Dry color tint", "",
ShaderControllerSettings.GetColorFromMaterials(materials, "_Color"));
Settings.AddColorProperty("TintColor2", "Healthy color tint", "",
ShaderControllerSettings.GetColorFromMaterials(materials, "_ColorB"));
Vector4 colorScale = ShaderControllerSettings.GetVector4FromMaterials(materials, "_AG_ColorNoiseArea");
Settings.AddFloatProperty("TintAreaScale", "Tint area scale", "", colorScale.y, 10f, 150f);
Settings.AddFloatProperty("RandomDarkening", "Random darkening", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_RandomDarkening"), 0, 1);
Settings.AddFloatProperty("RootAmbient", "Root ambient", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_RootAmbient"), 0, 1);
Settings.AddFloatProperty("AlphaCutoff", "Alpha cutoff", "", ShaderControllerSettings.GetFloatFromMaterials(materials, "_Cutoff"), 0, 1);
}
public void UpdateMaterial(Material material, EnvironmentSettings environmentSettings)
{
if (Settings == null) return;
material.SetColor("_Color", Settings.GetColorPropertyValue("TintColor1"));
material.SetColor("_ColorB", Settings.GetColorPropertyValue("TintColor2"));
material.SetFloat("_Cutoff", Settings.GetFloatPropertyValue("AlphaCutoff"));
material.SetFloat("_RandomDarkening", Settings.GetFloatPropertyValue("RandomDarkening"));
material.SetFloat("_RootAmbient", Settings.GetFloatPropertyValue("RootAmbient"));
Vector4 colorScale = material.GetVector("_AG_ColorNoiseArea");
colorScale = new Vector4(colorScale.x, Settings.GetFloatPropertyValue("TintAreaScale"), colorScale.z, colorScale.w);
material.SetVector("_AG_ColorNoiseArea", colorScale);
}
public void UpdateWind(Material material, WindSettings windSettings)
{
}
public bool MatchBillboardShader(Material[] materials)
{
return false;
}
}
}