forked from bartvdbraak/blender
Fix T51529: Black boxes on a denoising render when using a .exr image as a environmental texture
It is caused by NaN value in the input texture. Now we check for all the pixels having proper finite values. Should also help here in the studio,
This commit is contained in:
parent
cc2755b443
commit
1d49205b1a
@ -639,6 +639,37 @@ bool ImageManager::file_load_image(Image *img,
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Make sure we don't have buggy values. */
|
||||
if(FileFormat == TypeDesc::FLOAT) {
|
||||
/* For RGBA buffers we put all channels to 0 if either of them is not
|
||||
* finite. This way we avoid possible artifacts caused by fully changed
|
||||
* hue.
|
||||
*/
|
||||
if(is_rgba) {
|
||||
for(size_t i = 0; i < num_pixels; i += 4) {
|
||||
StorageType *pixel = &pixels[i*4];
|
||||
if(!isfinite(pixel[0]) ||
|
||||
!isfinite(pixel[1]) ||
|
||||
!isfinite(pixel[2]) ||
|
||||
!isfinite(pixel[3]))
|
||||
{
|
||||
pixel[0] = 0;
|
||||
pixel[1] = 0;
|
||||
pixel[2] = 0;
|
||||
pixel[3] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for(size_t i = 0; i < num_pixels; ++i) {
|
||||
StorageType *pixel = &pixels[i*4];
|
||||
if(!isfinite(pixel[0])) {
|
||||
pixel[0] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Scale image down if needed. */
|
||||
if(pixels_storage.size() > 0) {
|
||||
float scale_factor = 1.0f;
|
||||
while(max_size * scale_factor > texture_limit) {
|
||||
|
Loading…
Reference in New Issue
Block a user