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:
parent
74369229de
commit
e179bf0726
5 changed files with 37 additions and 2 deletions
|
@ -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)) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue