Ensure, if a texture meant for a normal map is imported and size limit exists, that it's renormalized after resize.

This commit is contained in:
Juan Linietsky 2018-07-03 10:55:50 -03:00
parent 74369229de
commit e179bf0726
5 changed files with 37 additions and 2 deletions

View file

@ -1076,6 +1076,36 @@ void Image::shrink_x2() {
} }
} }
void Image::normalize() {
bool used_mipmaps = has_mipmaps();
if (used_mipmaps) {
clear_mipmaps();
}
lock();
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
Color c = get_pixel(x, y);
Vector3 v(c.r * 2.0 - 1.0, c.g * 2.0 - 1.0, c.b * 2.0 - 1.0);
v.normalize();
c.r = v.x * 0.5 + 0.5;
c.g = v.y * 0.5 + 0.5;
c.b = v.z * 0.5 + 0.5;
set_pixel(x, y, c);
}
}
unlock();
if (used_mipmaps) {
generate_mipmaps(true);
}
}
Error Image::generate_mipmaps(bool p_renormalize) { Error Image::generate_mipmaps(bool p_renormalize) {
if (!_can_modify(format)) { if (!_can_modify(format)) {

View file

@ -220,6 +220,7 @@ public:
Error generate_mipmaps(bool p_renormalize = false); Error generate_mipmaps(bool p_renormalize = false);
void clear_mipmaps(); void clear_mipmaps();
void normalize(); //for normal maps
/** /**
* Create a new image of a given size and format. Current image will be lost * Create a new image of a given size and format. Current image will be lost

View file

@ -395,6 +395,10 @@ Error ResourceImporterTexture::import(const String &p_source_file, const String
image->resize(new_width, new_height, Image::INTERPOLATE_CUBIC); image->resize(new_width, new_height, Image::INTERPOLATE_CUBIC);
} }
if (normal) {
image->normalize();
}
} }
if (fix_alpha_border) { if (fix_alpha_border) {

View file

@ -100,7 +100,7 @@ public:
ARRAY_FLAG_USE_16_BIT_BONES = ARRAY_COMPRESS_INDEX << 2, ARRAY_FLAG_USE_16_BIT_BONES = ARRAY_COMPRESS_INDEX << 2,
ARRAY_FLAG_USE_DYNAMIC_UPDATE = ARRAY_COMPRESS_INDEX << 3, ARRAY_FLAG_USE_DYNAMIC_UPDATE = ARRAY_COMPRESS_INDEX << 3,
ARRAY_COMPRESS_DEFAULT = ARRAY_COMPRESS_VERTEX | ARRAY_COMPRESS_NORMAL | ARRAY_COMPRESS_TANGENT | ARRAY_COMPRESS_COLOR | ARRAY_COMPRESS_TEX_UV | ARRAY_COMPRESS_TEX_UV2 | ARRAY_COMPRESS_WEIGHTS ARRAY_COMPRESS_DEFAULT = ARRAY_COMPRESS_NORMAL | ARRAY_COMPRESS_TANGENT | ARRAY_COMPRESS_COLOR | ARRAY_COMPRESS_TEX_UV | ARRAY_COMPRESS_TEX_UV2 | ARRAY_COMPRESS_WEIGHTS
}; };

View file

@ -233,7 +233,7 @@ public:
ARRAY_FLAG_USE_16_BIT_BONES = ARRAY_COMPRESS_INDEX << 2, ARRAY_FLAG_USE_16_BIT_BONES = ARRAY_COMPRESS_INDEX << 2,
ARRAY_FLAG_USE_DYNAMIC_UPDATE = ARRAY_COMPRESS_INDEX << 3, ARRAY_FLAG_USE_DYNAMIC_UPDATE = ARRAY_COMPRESS_INDEX << 3,
ARRAY_COMPRESS_DEFAULT = ARRAY_COMPRESS_VERTEX | ARRAY_COMPRESS_NORMAL | ARRAY_COMPRESS_TANGENT | ARRAY_COMPRESS_COLOR | ARRAY_COMPRESS_TEX_UV | ARRAY_COMPRESS_TEX_UV2 | ARRAY_COMPRESS_WEIGHTS ARRAY_COMPRESS_DEFAULT = ARRAY_COMPRESS_NORMAL | ARRAY_COMPRESS_TANGENT | ARRAY_COMPRESS_COLOR | ARRAY_COMPRESS_TEX_UV | ARRAY_COMPRESS_TEX_UV2 | ARRAY_COMPRESS_WEIGHTS
}; };