private void ApplyMask()
        {
            //Set predefined maskee mats for UI and sprites (Shaders 2D sprite)
            //Set cloned maskee mats for mesh renderer (Shaders 3D)

            Mask maskTarget = (Mask)target;

            maskTarget.FlagForRefresh();

            if ((MaskedSpriteShader == null) || (MaskedUnlitShader == null))
            {
                Debug.Log("Shaders necessary for masking don't seem to be present in the project.");
                return;
            }

            List <Graphic>  maskeeGraphics  = new List <Graphic>();
            List <Renderer> maskeeRenderers = new List <Renderer>();

            maskeeRenderers.AddRange(maskTarget.transform.parent.gameObject.GetComponentsInChildren <Renderer>(true));
            maskeeGraphics.AddRange(maskTarget.transform.parent.gameObject.GetComponentsInChildren <Graphic>(true));

            //Mask materials that already exist within this masks hierarchy
            List <Material> reusableMaterials = GetAllReusableMaterials(maskeeRenderers);

            //Twin lists
            List <Material> originalMaterials = new List <Material>();
            List <Material> newMaterials      = new List <Material>();

            //Non-ui material loop
            foreach (Renderer mRenderer in maskeeRenderers)
            {
                //Don't mask the mask itself
                if (mRenderer.gameObject == maskTarget.gameObject)
                {
                    continue;
                }

                if (mRenderer is SpriteRenderer)
                {
                    ApplyMaskToSpriteRenderer((SpriteRenderer)mRenderer, maskTarget);
                }
                else
                {
                    ApplyMaskToGenericRenderer(mRenderer, maskTarget, originalMaterials, newMaterials, reusableMaterials);
                }
            }

            //UI material loop
            foreach (Graphic mGraphic in maskeeGraphics)
            {
                //Don't mask the mask itself
                if (mGraphic.gameObject == maskTarget.gameObject)
                {
                    continue;
                }

                ApplyMaskToUIElement(mGraphic, maskTarget);
            }
            Debug.Log("Mask applied." + (maskTarget.IsMaskingEnabled ? "" : " Have in mind that masking is disabled, so you will not see the effect, until you enable masking!"));
        }