CliffAppearance.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. // Fantasy Adventure Environment
  2. // Copyright Staggart Creations
  3. // staggart.xyz
  4. using UnityEngine;
  5. using System.Collections;
  6. namespace FAE
  7. {
  8. [ExecuteInEditMode]
  9. public class CliffAppearance : MonoBehaviour
  10. {
  11. public Shader cliffShader;
  12. public Shader cliffCoverageShader;
  13. public Material[] targetMaterials = new Material[0];
  14. //Objects
  15. public Color objectColor = Color.white;
  16. [Range(0f, 1f)]
  17. public float roughness = 0.15f;
  18. //Detail norma
  19. public Texture detailNormalMap;
  20. [Range(0f, 1f)]
  21. public float detailNormalStrength = 0.5f;
  22. //Global
  23. public Texture globalColorMap;
  24. public Color globalColor = Color.white;
  25. [Range(0f, 5f)]
  26. public float globalTiling = 0.01f;
  27. //Coverage
  28. public bool useCoverageShader;
  29. public Texture coverageColorMap;
  30. public Texture coverageNormalMap;
  31. [Range(0f, 2f)]
  32. public float coverageAmount = 0.01f;
  33. [Range(0f, 5f)]
  34. public float coverageTiling = 1f;
  35. public Texture coverageMap;
  36. public void OnEnable()
  37. {
  38. if (targetMaterials.Length == 0)
  39. {
  40. this.enabled = false;
  41. }
  42. if (UnityEngine.Rendering.GraphicsSettings.renderPipelineAsset == null)
  43. {
  44. cliffShader = Shader.Find("FAE/Cliff");
  45. cliffCoverageShader = Shader.Find("FAE/Cliff coverage");
  46. }
  47. else
  48. {
  49. cliffShader = Shader.Find("Universal Render Pipeline/FAE/FAE_Cliff");
  50. cliffCoverageShader = Shader.Find("Universal Render Pipeline/FAE/FAE_Cliff_Coverage");
  51. }
  52. Apply();
  53. }
  54. private void GetSettings()
  55. {
  56. if (!targetMaterials[0])
  57. {
  58. return;
  59. }
  60. Material mat = targetMaterials[0];
  61. globalColorMap = mat.GetTexture("_Globalalbedo");
  62. detailNormalMap = mat.GetTexture("_Detailnormal");
  63. objectColor = mat.GetColor("_ObjectColor");
  64. globalColor = mat.GetColor("_GlobalColor");
  65. detailNormalStrength = mat.GetFloat("_Detailstrength");
  66. globalTiling = mat.GetFloat("_Globaltiling");
  67. roughness = mat.GetFloat("_Roughness");
  68. if (mat.shader == cliffCoverageShader)
  69. {
  70. useCoverageShader = true;
  71. coverageNormalMap = mat.GetTexture("_CoverageNormals");
  72. coverageColorMap = mat.GetTexture("_CoverageAlbedo");
  73. coverageMap = mat.GetTexture("_CoverageMap");
  74. coverageAmount = mat.GetFloat("_CoverageAmount");
  75. coverageTiling = mat.GetFloat("_CoverageTiling");
  76. }
  77. else
  78. {
  79. useCoverageShader = false;
  80. }
  81. }
  82. public void Apply()
  83. {
  84. if (targetMaterials.Length != 0)
  85. foreach (Material mat in targetMaterials)
  86. {
  87. if (!mat) continue;
  88. if (useCoverageShader)
  89. {
  90. mat.shader = cliffCoverageShader;
  91. mat.SetTexture("_CoverageNormals", coverageNormalMap);
  92. mat.SetTexture("_CoverageAlbedo", coverageColorMap);
  93. mat.SetTexture("_CoverageMap", coverageMap);
  94. mat.SetFloat("_CoverageAmount", coverageAmount);
  95. mat.SetFloat("_CoverageTiling", coverageTiling);
  96. }
  97. else
  98. {
  99. mat.shader = cliffShader;
  100. }
  101. //Textures
  102. mat.SetTexture("_Globalalbedo", globalColorMap);
  103. mat.SetTexture("_Detailnormal", detailNormalMap);
  104. //Colors
  105. mat.SetColor("_ObjectColor", objectColor);
  106. mat.SetColor("_GlobalColor", globalColor);
  107. //Floats
  108. mat.SetFloat("_Detailstrength", detailNormalStrength);
  109. mat.SetFloat("_Globaltiling", globalTiling);
  110. mat.SetFloat("_Roughness", roughness);
  111. }
  112. }
  113. }
  114. }