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); }