// Fantasy Adventure Environment // Copyright Staggart Creations // staggart.xyz using UnityEngine; using System.Collections; namespace FAE { [ExecuteInEditMode] public class CliffAppearance : MonoBehaviour { public Shader cliffShader; public Shader cliffCoverageShader; public Material[] targetMaterials = new Material[0]; //Objects public Color objectColor = Color.white; [Range(0f, 1f)] public float roughness = 0.15f; //Detail norma public Texture detailNormalMap; [Range(0f, 1f)] public float detailNormalStrength = 0.5f; //Global public Texture globalColorMap; public Color globalColor = Color.white; [Range(0f, 5f)] public float globalTiling = 0.01f; //Coverage public bool useCoverageShader; public Texture coverageColorMap; public Texture coverageNormalMap; [Range(0f, 1f)] public float coverageAmount = 0.01f; [Range(0f, 20f)] public float coverageTiling = 1f; public Texture coverageMap; public void OnEnable() { if (targetMaterials.Length == 0) { this.enabled = false; } if (UnityEngine.Rendering.GraphicsSettings.renderPipelineAsset == null) { cliffShader = Shader.Find("FAE/Cliff"); cliffCoverageShader = Shader.Find("FAE/Cliff coverage"); } else { cliffShader = Shader.Find("Universal Render Pipeline/FAE/FAE_Cliff"); cliffCoverageShader = Shader.Find("Universal Render Pipeline/FAE/FAE_Cliff_Coverage"); } Apply(); } private void GetSettings() { if (!targetMaterials[0]) { return; } Material mat = targetMaterials[0]; globalColorMap = mat.GetTexture("_Globalalbedo"); detailNormalMap = mat.GetTexture("_Detailnormal"); objectColor = mat.GetColor("_ObjectColor"); globalColor = mat.GetColor("_GlobalColor"); detailNormalStrength = mat.GetFloat("_Detailstrength"); globalTiling = mat.GetFloat("_Globaltiling"); roughness = mat.GetFloat("_Roughness"); if (mat.shader == cliffCoverageShader) { useCoverageShader = true; coverageNormalMap = mat.GetTexture("_CoverageNormals"); coverageColorMap = mat.GetTexture("_CoverageAlbedo"); coverageMap = mat.GetTexture("_CoverageMap"); coverageAmount = mat.GetFloat("_CoverageAmount"); coverageTiling = mat.GetFloat("_CoverageTiling"); } else { useCoverageShader = false; } } public void Apply() { if (targetMaterials.Length != 0) foreach (Material mat in targetMaterials) { if (!mat) continue; if (useCoverageShader) { mat.shader = cliffCoverageShader; mat.SetTexture("_CoverageNormals", coverageNormalMap); mat.SetTexture("_CoverageAlbedo", coverageColorMap); mat.SetTexture("_CoverageMap", coverageMap); mat.SetFloat("_CoverageAmount", coverageAmount); mat.SetFloat("_CoverageTiling", coverageTiling); } else { mat.shader = cliffShader; } //Textures mat.SetTexture("_Globalalbedo", globalColorMap); mat.SetTexture("_Detailnormal", detailNormalMap); //Colors mat.SetColor("_ObjectColor", objectColor); mat.SetColor("_GlobalColor", globalColor); //Floats mat.SetFloat("_Detailstrength", detailNormalStrength); mat.SetFloat("_Globaltiling", globalTiling); mat.SetFloat("_Roughness", roughness); } } } }