using Unity.Mathematics; namespace Misaki.ArtTool { public static partial class Distribution { public static void GridDistribution(int index, GridDistributionSetting setting, out float4x4 localMatrix, out bool isValid) { var random = Random.CreateFromIndex((uint)index); var localPosition = ShapeHelper.GetCubePosition(index, setting.count) * setting.spacing; switch (setting.shape) { case GridShape.Cube: isValid = true; break; case GridShape.Sphere: var isInsideSphere = ShapeHelper.IsPointInsideSphere(localPosition, 0.0f, setting.count * setting.spacing); isValid = isInsideSphere; break; case GridShape.Cylinder: var isInsideCylinder = ShapeHelper.IsPointInsideCylinder(localPosition, 0.0f, setting.count * setting.spacing); isValid = isInsideCylinder; break; default: isValid = false; break; } if (random.NextFloat() > setting.fill && isValid == true) { isValid = false; } localMatrix = float4x4.TRS(localPosition, quaternion.identity, new float3(1.0f)); } } }