| 123456789101112131415161718192021222324252627282930313233343536 | 
struct EllipsZones{    float3 pos;    float radius;    float3 axis;    float stretch;     float density;    float feather;    float padding1;    float padding2;}; StructuredBuffer<EllipsZones> _EllipsZones;float _EllipsZonesCount;void WeatherEllipsoids(float3 pos, inout float density){    for (int i = 0; i < _EllipsZonesCount; i++)    {        float3 dir = _EllipsZones[i].pos - pos;        float3 axis = _EllipsZones[i].axis;        float3 dirAlongAxis = dot(dir, axis) * axis;        dir = dir + dirAlongAxis * _EllipsZones[i].stretch;        float distsq = dot(dir, dir);        float radius = _EllipsZones[i].radius;        float feather = 1.0;        feather = (1.0 - smoothstep (radius * feather, radius, distsq));        float contribution = feather * _EllipsZones[i].density;        density = clamp(density + contribution,0,1);    }}
 |