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) {
|
||||
|
||||
if (!_can_modify(format)) {
|
||||
|
|
|
@ -220,6 +220,7 @@ public:
|
|||
Error generate_mipmaps(bool p_renormalize = false);
|
||||
|
||||
void clear_mipmaps();
|
||||
void normalize(); //for normal maps
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
if (normal) {
|
||||
image->normalize();
|
||||
}
|
||||
}
|
||||
|
||||
if (fix_alpha_border) {
|
||||
|
|
|
@ -100,7 +100,7 @@ public:
|
|||
ARRAY_FLAG_USE_16_BIT_BONES = ARRAY_COMPRESS_INDEX << 2,
|
||||
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_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