public IEntitySplat GenerateSplat(MapAreaPosition position, int entityLodLevel)
    {
        List <GrassEntity> outEntities = new List <GrassEntity>();

        for (int i = 0; i < _entitiesCountProvider.GetCount(); i++)
        {
            GrassEntitiesSet grassEntities = _entitiesGenerator.Generate();
            _positionProvider.SetPosition(grassEntities, position);
            _settingGenerator.SetSettings(grassEntities);

            Vector4 color = new Vector4(1, 1, 1, 1);
            if (entityLodLevel == 0)
            {
                color = new Vector4(1, 0, 0, 1);
            }
            else if (entityLodLevel == 1)
            {
                color = new Vector4(1, 1, 0, 1);
            }
            else if (entityLodLevel == 2)
            {
                color = new Vector4(0, 1, 0, 1);
            }
            else if (entityLodLevel == 3)
            {
                color = new Vector4(0, 1, 1, 1);
            }
            else if (entityLodLevel == 4)
            {
                color = new Vector4(0, 0, 1, 1);
            }
            else if (entityLodLevel == 5)
            {
                color = new Vector4(1, 0, 1, 1);
            }
            else if (entityLodLevel == 6)
            {
                color = new Vector4(0.5f, 0.5f, 0, 1);
            }
            else if (entityLodLevel == 7)
            {
                color = new Vector4(0.5f, 0, 0, 1);
            }
            grassEntities.EntitiesBeforeTransform.ForEach(c => c.AddUniform(ShaderUniformName._Color, color));
            // todo repair it

            outEntities.AddRange(grassEntities.EntitiesAfterTransform);
        }
        return(CreateSplat(outEntities, _grassMaterial, _meshProvider.GetMesh(entityLodLevel)));
    }
        public IGrassSplat GenerateSplat(MapAreaPosition position, int entityLodLevel)
        {
            List <GrassEntitiesSet> singleEntities = new List <GrassEntitiesSet>();

            for (int i = 0; i < 20; i++)
            {
                var aTuft = _grassTuftGenerator.CreateGrassTuft();
                _grassTuftPositionProvider.SetPosition(aTuft, position);
                _grassTuftAbstractSettingGenerator.SetSettings(aTuft);
                if (entityLodLevel == 0)
                {
                    aTuft.EntitiesBeforeTransform.ForEach(c => c.AddUniform(GrassShaderUniformName._Color, new Vector4(99.0f, 0f, 0.0f, 1.0f)));
                }
                if (entityLodLevel == 1)
                {
                    aTuft.EntitiesBeforeTransform.ForEach(c => c.AddUniform(GrassShaderUniformName._Color, new Vector4(99.0f, 99.0f, 0.0f, 1.0f)));
                }
                if (entityLodLevel == 2)
                {
                    aTuft.EntitiesBeforeTransform.ForEach(c => c.AddUniform(GrassShaderUniformName._Color, new Vector4(99.0f, 99.0f, 99.0f, 1.0f)));
                }
                if (entityLodLevel == 3)
                {
                    aTuft.EntitiesBeforeTransform.ForEach(c => c.AddUniform(GrassShaderUniformName._Color, new Vector4(0.0f, 99.0f, 0.0f, 1.0f)));
                }
                if (entityLodLevel == 4)
                {
                    aTuft.EntitiesBeforeTransform.ForEach(c => c.AddUniform(GrassShaderUniformName._Color, new Vector4(0.0f, 99.0f, 99.0f, 1.0f)));
                }
                if (entityLodLevel == 5)
                {
                    aTuft.EntitiesBeforeTransform.ForEach(c => c.AddUniform(GrassShaderUniformName._Color, new Vector4(0.0f, 0.0f, 99.0f, 1.0f)));
                }

                singleEntities.Add(aTuft);
            }
            var  bladeTriangleCount = (int)Mathf.Max(Constants.MAX_GRASS_MESH_LEVEL - entityLodLevel, Constants.MIN_GRASS_MESH_LEVEL);
            Mesh mesh = _meshGenerator.GetGrassBladeMesh(bladeTriangleCount);

            return(_grassInstanceContainer.AddGrassEntities(
                       new GrassEntitiesWithMaterials(singleEntities.SelectMany(c => c.EntitiesAfterTransform).ToList(), _grassTuftMaterial, mesh,
                                                      ContainerType.Instancing)));
        }