ParticlesInclude.cginc 879 B

123456789101112131415161718192021222324252627282930313233343536
  1. struct EllipsZones
  2. {
  3. float3 pos;
  4. float radius;
  5. float3 axis;
  6. float stretch;
  7. float density;
  8. float feather;
  9. float padding1;
  10. float padding2;
  11. };
  12. StructuredBuffer<EllipsZones> _EllipsZones;
  13. float _EllipsZonesCount;
  14. void WeatherEllipsoids(float3 pos, inout float density)
  15. {
  16. for (int i = 0; i < _EllipsZonesCount; i++)
  17. {
  18. float3 dir = _EllipsZones[i].pos - pos;
  19. float3 axis = _EllipsZones[i].axis;
  20. float3 dirAlongAxis = dot(dir, axis) * axis;
  21. dir = dir + dirAlongAxis * _EllipsZones[i].stretch;
  22. float distsq = dot(dir, dir);
  23. float radius = _EllipsZones[i].radius;
  24. float feather = 1.0;
  25. feather = (1.0 - smoothstep (radius * feather, radius, distsq));
  26. float contribution = feather * _EllipsZones[i].density;
  27. density = clamp(density + contribution,0,1);
  28. }
  29. }