using System.Collections; using System.Collections.Generic; using UnityEngine; [ExecuteInEditMode] public class VolumetricSphere : MonoBehaviour { #region Public Members [Header("Parameters")] [Tooltip("The radius of the sphere")] [Range(0.0f,50.0f)]public float radius = 3.0f; [Tooltip("The density of the sphere")] [Range(0.0f,10.0f)]public float density = 1.0f; [Tooltip("The curve of the fade-out")] [Range(0.2f,5.0f)]public float exponent = 1.0f/3.0f; [Tooltip("The maximum pixelization size")] [Range(1,10)]public int maxPixelizationLevel = 5; [Tooltip("Enabled the interpolation between the layers of different pixels size")] public bool enableLayersInterpolation = true; [Header("Debug")] [Tooltip("Outputs the sphere mask")] public bool debugSphere = false; #endregion #region Functions void Update() { Shader.SetGlobalVector("_SpherePosition", transform.position); Shader.SetGlobalFloat("_SphereRadius", radius); Shader.SetGlobalFloat("_MaskDensity", density); Shader.SetGlobalFloat("_MaskExponent", exponent); Shader.SetGlobalInt("_MaxPixelizationLevel", maxPixelizationLevel); if (enableLayersInterpolation) { Shader.EnableKeyword("_INTERPOLATE_LAYERS_ON"); } else { Shader.DisableKeyword("_INTERPOLATE_LAYERS_ON"); } if (debugSphere) { Shader.EnableKeyword("_DEBUG_MASK_ON"); } else { Shader.DisableKeyword("_DEBUG_MASK_ON"); } } //void OnDrawGizmos() //{ // Color color = Color.green; // color.a = 0.35f; // Gizmos.color = color; // Gizmos.DrawWireSphere(transform.position, radius); //} void OnDrawGizmosSelected() { Gizmos.color = Color.green; Gizmos.DrawWireSphere(transform.position, radius); } #endregion }