alexei.garbuzenko Posted August 20, 2010 Posted August 20, 2010 Is it possible to use mip-maps with .PNG/.JPG/.TGA textures? For example, I got 512x512 texture that weights about 44kb in .PNG format and converting it to DXT1-DXT5 ruins the quality while RGBA8 texture with mipmaps weights about 1.4Mb..
frustum Posted August 21, 2010 Posted August 21, 2010 Is it possible to use mip-maps with .PNG/.JPG/.TGA textures? For example, I got 512x512 texture that weights about 44kb in .PNG format and converting it to DXT1-DXT5 ruins the quality while RGBA8 texture with mipmaps weights about 1.4Mb.. Yes, it's possible. But time of png decompression will produce stalls in render. There is another solution: DDS file in rgba8 format with mipmaps. Unigine editor and imagedds.py support following postfixes for automatic texture conversion: "d" : FORMAT_DIFFUSE, "dr" : FORMAT_DIFFUSE_RAW, "d1" : FORMAT_DIFFUSE_DXT1, "d3" : FORMAT_DIFFUSE_DXT3, "d5" : FORMAT_DIFFUSE_DXT5, "s" : FORMAT_SPECULAR, "sr" : FORMAT_SPECULAR_RAW, "s1" : FORMAT_SPECULAR_DXT1, "s3" : FORMAT_SPECULAR_DXT3, "s5" : FORMAT_SPECULAR_DXT5, "n" : FORMAT_NORMAL, "nr" : FORMAT_NORMAL_RAW, "p" : FORMAT_PARALLAX, "pr" : FORMAT_PARALLAX_RAW, "h" : FORMAT_HEIGHT, "hr" : FORMAT_HEIGHT_RAW, "t" : FORMAT_TESSELLATION, "tr" : FORMAT_TESSELLATION_RAW, "a" : FORMAT_AMBIENT, "ar" : FORMAT_AMBIENT_RAW, "e" : FORMAT_EMISSION, "er" : FORMAT_EMISSION_RAW, "l" : FORMAT_LIGHTMAP, "lr" : FORMAT_LIGHTMAP_RAW, RAW format is an unmodified format of source image.
alexei.garbuzenko Posted August 21, 2010 Author Posted August 21, 2010 You said it is possible, but how? In Image.cpp/load_png() I see only calls to create2D(...,...,...,1,0) meaning that only one mipmap is loaded from PNG image. Do you mean that mip-maps could be created on scripts side by using Image class? That not sounds as a solution for me.. It would be even better to re-compress PNGs to RGBA8 DDS in installer or on the first run.
frustum Posted August 21, 2010 Posted August 21, 2010 You said it is possible, but how? In Image.cpp/load_png() I see only calls to create2D(...,...,...,1,0) meaning that only one mipmap is loaded from PNG image. Do you mean that mip-maps could be created on scripts side by using Image class? That not sounds as a solution for me.. It would be even better to re-compress PNGs to RGBA8 DDS in installer or on the first run. source/engine/render/RenderManager.cpp 410 line: if(image.getNumMipmaps() == 1 && (flags & (Texture::FILTER_BILINEAR | Texture::FILTER_TRILINEAR))) { flags = (flags & ~Texture::FILTER_MASK) | Texture::FILTER_LINEAR; } Mipmaps will be generated automatically by texture class if you comment this code.
alexei.garbuzenko Posted August 21, 2010 Author Posted August 21, 2010 Okay, thank you! P.S. I vote to put an option "auto generate mipmaps" to global config file to avoid unnecessary code intrusion.
Recommended Posts