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
|
|
}
|