public void FlipTexture() { var texture = new Texture2D(2, 2); texture.SetPixels(new [] { Color.white, Color.black, Color.black, Color.black }); texture.Apply(); ToolboxHelper.FlipTexture(texture, true); var horizontalFlip = texture.GetPixels(); Assert.That(horizontalFlip[1], Is.EqualTo(Color.white)); ToolboxHelper.FlipTexture(texture, false); var verticalFlip = texture.GetPixels(); Assert.That(verticalFlip[3], Is.EqualTo(Color.white)); }
// Unity PNG encoder does not support 16bit export, change will come later 2019 public static void ExportTerrainHeightsToTexture(TerrainData terrainData, Heightmap.Format format, string path, bool flipVertical, Vector2 inputLevelsRange) { RenderTexture oldRT = RenderTexture.active; int width = terrainData.heightmapTexture.width - 1; int height = terrainData.heightmapTexture.height - 1; var texture = new Texture2D(width, height, terrainData.heightmapTexture.graphicsFormat, TextureCreationFlags.None); RenderTexture.active = terrainData.heightmapTexture; texture.ReadPixels(new Rect(0, 0, width, height), 0, 0); //Remap Texture Color[] pixels = texture.GetPixels(); for (int i = 0; i < pixels.Length; i += 4) { pixels[i].r = (pixels[i].r * 2) * (inputLevelsRange.y - inputLevelsRange.x) + inputLevelsRange.x; pixels[i + 1].r = (pixels[i + 1].r * 2) * (inputLevelsRange.y - inputLevelsRange.x) + inputLevelsRange.x; pixels[i + 2].r = (pixels[i + 2].r * 2) * (inputLevelsRange.y - inputLevelsRange.x) + inputLevelsRange.x; pixels[i + 3].r = (pixels[i + 3].r * 2) * (inputLevelsRange.y - inputLevelsRange.x) + inputLevelsRange.x; } texture.SetPixels(pixels); texture.Apply(); //Flip Texture if (flipVertical) { ToolboxHelper.FlipTexture(texture, true); } byte[] bytes; switch (format) { case Heightmap.Format.TGA: bytes = texture.EncodeToTGA(); path = path + ".tga"; break; default: bytes = texture.EncodeToPNG(); path = path + ".png"; break; } File.WriteAllBytes(path, bytes); RenderTexture.active = oldRT; }