private void UpdateTexture(bool asPreview) { finalTexture = new Texture2D(texSize.x, texSize.y, TextureFormat.RGBAFloat, true); if (Metallic) { r_Metallic = DuplicateTexture.duplicateTexture(Metallic); } if (AmbientOcclusion) { r_AmbientOcclusion = DuplicateTexture.duplicateTexture(AmbientOcclusion); } if (DetailMask) { r_DetailMask = DuplicateTexture.duplicateTexture(DetailMask); } if (Smooth_Rough) { r_Smooth_Rough = DuplicateTexture.duplicateTexture(Smooth_Rough); } for (var x = 0; x < texSize.x; x++) { for (var y = 0; y < texSize.y; y++) { float A; var R = Metallic ? r_Metallic.GetPixel(x, y).r : defaultMetal; var G = AmbientOcclusion ? r_AmbientOcclusion.GetPixel(x, y).r : defaultAO; var B = DetailMask ? r_DetailMask.GetPixel(x, y).r : defaultDetail; if (Smooth_Rough) { if (useRough) { A = 1 - r_Smooth_Rough.GetPixel(x, y).r; } else { A = r_Smooth_Rough.GetPixel(x, y).r; } } else { if (useRough) { A = 1 - defaultSmooth; } else { A = defaultSmooth; } } finalTexture.SetPixel(x, y, new Color(R, G, B, A)); } } finalTexture.Apply(); EditorUtility.ClearProgressBar(); }
private void FlipChannel(Channels _channel) { //TODO: Funciona pero solo para texturas con alpha, hay que hacerlo para las otras var tempTexture = new Texture2D(textureMap.width, textureMap.height, TextureFormat.RGBAFloat, true); var dupTexture = DuplicateTexture.duplicateTexture(textureMap); var x = textureMap.width; var y = textureMap.height; var hasAlpha = HasAlpha.hasAlpha(textureMap); //Invert green of texture with alpha if (hasAlpha && _channel == Channels.Green) { for (var i = 0; i < x; i++) { for (var j = 0; j < y; j++) { tempTexture.SetPixel(i, j, new Color(dupTexture.GetPixel(i, j).r, 1 - dupTexture.GetPixel(i, j).g, dupTexture.GetPixel(i, j).b, dupTexture.GetPixel(i, j).a)); } } } //Invert alpha else if (hasAlpha && _channel == Channels.Alpha) { for (var i = 0; i < x; i++) { for (var j = 0; j < y; j++) { tempTexture.SetPixel(i, j, new Color(dupTexture.GetPixel(i, j).r, dupTexture.GetPixel(i, j).g, dupTexture.GetPixel(i, j).b, 1 - dupTexture.GetPixel(i, j).a)); } } } //Invert red of image with alpha else if (hasAlpha && _channel == Channels.Red) { for (var i = 0; i < x; i++) { for (var j = 0; j < y; j++) { tempTexture.SetPixel(i, j, new Color(1 - dupTexture.GetPixel(i, j).r, dupTexture.GetPixel(i, j).g, dupTexture.GetPixel(i, j).b, dupTexture.GetPixel(i, j).a)); } } } //Invert blue of image with alpha else if (hasAlpha && _channel == Channels.Blue) { for (var i = 0; i < x; i++) { for (var j = 0; j < y; j++) { tempTexture.SetPixel(i, j, new Color(dupTexture.GetPixel(i, j).r, dupTexture.GetPixel(i, j).g, 1 - dupTexture.GetPixel(i, j).b, dupTexture.GetPixel(i, j).a)); } } } tempTexture.Apply(); string path; if (saveToDifferentTexture) { path = EditorUtility.SaveFilePanelInProject("Save texture to directory", textureMap.name + "Inverted", "png", "Saved"); } else { path = EditorUtility.SaveFilePanelInProject("Save texture to directory", textureMap.name, "png", "Saved"); } var textureData = tempTexture.EncodeToPNG(); if (path.Length == 0) { return; } if (textureData != null) { File.WriteAllBytes(path, textureData); } AssetDatabase.Refresh(); Debug.Log("Saved"); /* * if(_channel == Channels.Green) * { * for (var i = 0; i < x; i++) * { * for (var j = 0; j < y; j++) * { * tempTexture.SetPixel(i, j, new Color(textureMap.GetPixel(i, j).r, 1-textureMap.GetPixel(i, j).g, textureMap.GetPixel(i, j).b)); * } * } * } */ }