Exemple #1
0
    void ApplyMask()
    {
        if (!Directory.Exists(inputDirectory))
        {
            return;
        }
        if (!Directory.Exists(outputDirecotry))
        {
            return;
        }
        var material = new Material(maskingShader);
        var imgTex   = new Texture2D(1, 1);
        var maskTex  = new Texture2D(1, 1);
        var imgs     = Directory.GetFiles(inputDirectory).Where(e => targetExtensions.Contains(Path.GetExtension(e))).ToArray();
        var masks    = Directory.GetFiles(outputDirecotry).Where(e => targetExtensions.Contains(Path.GetExtension(e))).ToArray();

        foreach (var imgPath in imgs)
        {
            var maskPath = masks.FirstOrDefault(e => Path.GetFileName(e) == Path.GetFileName(e));
            if (maskPath == null)
            {
                continue;
            }
            print(maskPath);
            imgTex.LoadImage(File.ReadAllBytes(imgPath));
            maskTex.LoadImage(File.ReadAllBytes(maskPath));
            imgTex.Apply();
            maskTex.Apply();
            var rt = new RenderTexture(imgTex.width, imgTex.height, 0);
            material.SetTexture("_MaskTex", maskTex);
            Graphics.Blit(imgTex, rt, material);
            var tex      = TextureUtils.CreateTexture2DFromRenderTexture(rt);
            var bytes    = tex.EncodeToJPG();
            var savePath = Path.Combine(maskedImagesDirectory, Path.GetFileName(imgPath));
            File.WriteAllBytes(savePath, bytes);
            DestroyImmediate(tex);
        }

        DestroyImmediate(material);
        DestroyImmediate(imgTex);
        DestroyImmediate(maskTex);
    }