diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 63b89456b1..3762e90b74 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -48,6 +48,8 @@ nifty-style-black = { module = "com.github.nifty-gui:nifty-style-black",
spotbugs-gradle-plugin = "com.github.spotbugs.snom:spotbugs-gradle-plugin:6.4.8"
vecmath = "javax.vecmath:vecmath:1.5.2"
+stb-image = "org.ngengine:stb-image:2.30.4"
+
[bundles]
[plugins]
diff --git a/jme3-android/src/main/resources/com/jme3/asset/Android.cfg b/jme3-android/src/main/resources/com/jme3/asset/Android.cfg
index 0d58c3a960..953f7bbc12 100644
--- a/jme3-android/src/main/resources/com/jme3/asset/Android.cfg
+++ b/jme3-android/src/main/resources/com/jme3/asset/Android.cfg
@@ -3,6 +3,4 @@ INCLUDE com/jme3/asset/General.cfg
# Android specific locators
LOCATOR / com.jme3.asset.plugins.AndroidLocator
-# Android specific loaders
-LOADER com.jme3.texture.plugins.AndroidNativeImageLoader : jpg, bmp, gif, png, jpeg
LOADER com.jme3.texture.plugins.AndroidBufferImageLoader : webp, heic, heif
diff --git a/jme3-core/src/main/java/com/jme3/texture/image/ImageCodec.java b/jme3-core/src/main/java/com/jme3/texture/image/ImageCodec.java
index 993ce508b4..0fe86270d8 100644
--- a/jme3-core/src/main/java/com/jme3/texture/image/ImageCodec.java
+++ b/jme3-core/src/main/java/com/jme3/texture/image/ImageCodec.java
@@ -103,13 +103,21 @@ public ImageCodec(int bpp, int flags, int maxAlpha, int maxRed, int maxGreen, in
params.put(Format.RGB8, new ByteOffsetImageCodec(3, 0, -1, 0, 1, 2));
- params.put(Format.RGB32F, new ByteAlignedImageCodec(12, FLAG_F32,
- 0, 4, 4, 4,
- 0, 0, 4, 8));
-
- ByteAlignedImageCodec rgb16f = new ByteAlignedImageCodec(6, FLAG_F16,
- 0, 2, 2, 2,
- 0, 0, 2, 4);
+ params.put(Format.RGB32F, new ByteAlignedImageCodec(12, FLAG_F32,
+ 0, 4, 4, 4,
+ 0, 0, 4, 8));
+
+ params.put(Format.R16F, new ByteAlignedImageCodec(2, FLAG_F16,
+ 0, 2, 0, 0,
+ 0, 0, 0, 0));
+
+ params.put(Format.RG16F, new ByteAlignedImageCodec(4, FLAG_F16,
+ 0, 2, 2, 0,
+ 0, 0, 2, 0));
+
+ ByteAlignedImageCodec rgb16f = new ByteAlignedImageCodec(6, FLAG_F16,
+ 0, 2, 2, 2,
+ 0, 0, 2, 4);
params.put(Format.RGB16F, rgb16f);
params.put(Format.RGB16F_to_RGB111110F, rgb16f);
params.put(Format.RGB16F_to_RGB9E5, rgb16f);
diff --git a/jme3-core/src/main/resources/com/jme3/asset/Desktop.cfg b/jme3-core/src/main/resources/com/jme3/asset/Desktop.cfg
index bf18898811..b350b696f6 100644
--- a/jme3-core/src/main/resources/com/jme3/asset/Desktop.cfg
+++ b/jme3-core/src/main/resources/com/jme3/asset/Desktop.cfg
@@ -1,5 +1,4 @@
INCLUDE com/jme3/asset/General.cfg
# Desktop-specific loaders
-LOADER com.jme3.texture.plugins.AWTLoader : jpg, bmp, gif, png, jpeg
LOADER com.jme3.cursors.plugins.CursorLoader : ani, cur, ico
diff --git a/jme3-core/src/main/resources/com/jme3/asset/General.cfg b/jme3-core/src/main/resources/com/jme3/asset/General.cfg
index 0cec3717e0..238d42dceb 100644
--- a/jme3-core/src/main/resources/com/jme3/asset/General.cfg
+++ b/jme3-core/src/main/resources/com/jme3/asset/General.cfg
@@ -9,8 +9,6 @@ LOADER com.jme3.material.plugins.ShaderNodeDefinitionLoader : j3sn
LOADER com.jme3.font.plugins.BitmapFontLoader : fnt
LOADER com.jme3.texture.plugins.DDSLoader : dds
LOADER com.jme3.texture.plugins.PFMLoader : pfm
-LOADER com.jme3.texture.plugins.HDRLoader : hdr
-LOADER com.jme3.texture.plugins.TGALoader : tga
LOADER com.jme3.export.binary.BinaryLoader : j3o
LOADER com.jme3.export.binary.BinaryLoader : j3f
LOADER com.jme3.scene.plugins.OBJLoader : obj
@@ -23,4 +21,5 @@ LOADER com.jme3.shader.plugins.GLSLLoader : vert, frag, geom, tsctrl, tseval, gl
LOADER com.jme3.scene.plugins.gltf.GltfLoader : gltf
LOADER com.jme3.scene.plugins.gltf.BinLoader : bin
LOADER com.jme3.scene.plugins.gltf.GlbLoader : glb
+LOADER com.jme3.texture.plugins.StbImageLoader : jpg, bmp, gif, png, jpeg, tga, psd, hdr
LOADER com.jme3.audio.plugins.OGGLoader : ogg
diff --git a/jme3-core/src/plugins/java/com/jme3/texture/plugins/HDRLoader.java b/jme3-core/src/plugins/java/com/jme3/texture/plugins/HDRLoader.java
index e93c3b038f..0e1bf901b2 100644
--- a/jme3-core/src/plugins/java/com/jme3/texture/plugins/HDRLoader.java
+++ b/jme3-core/src/plugins/java/com/jme3/texture/plugins/HDRLoader.java
@@ -46,6 +46,11 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+/**
+ * @deprecated use {@link StbImageLoader} instead, which supports HDR images and more formats. This loader is
+ * kept for backward compatibility but may be removed in future versions.
+ */
+@Deprecated
public class HDRLoader implements AssetLoader {
private static final Logger logger = Logger.getLogger(HDRLoader.class.getName());
diff --git a/jme3-core/src/plugins/java/com/jme3/texture/plugins/TGALoader.java b/jme3-core/src/plugins/java/com/jme3/texture/plugins/TGALoader.java
index 6ef6272ea0..66211d1e7c 100644
--- a/jme3-core/src/plugins/java/com/jme3/texture/plugins/TGALoader.java
+++ b/jme3-core/src/plugins/java/com/jme3/texture/plugins/TGALoader.java
@@ -46,15 +46,16 @@
import java.nio.ByteBuffer;
/**
- * TextureManager provides static methods for building a
- * Texture object. Typically, the information supplied is the
- * filename and the texture properties.
+ * TextureManager provides static methods for building a Texture object. Typically,
+ * the information supplied is the filename and the texture properties.
*
* @author Mark Powell
* @author Joshua Slack - cleaned, commented, added ability to read 16bit true color and color-mapped TGAs.
* @author Kirill Vainer - ported to jME3
* @version $Id: TGALoader.java 4131 2009-03-19 20:15:28Z blaine.dev $
+ * @deprecated use {@link StbImageLoader} instead
*/
+@Deprecated
public final class TGALoader implements AssetLoader {
// 0 - no image data in file
diff --git a/jme3-desktop/build.gradle b/jme3-desktop/build.gradle
index bfc5138e77..f6a7426712 100644
--- a/jme3-desktop/build.gradle
+++ b/jme3-desktop/build.gradle
@@ -1,3 +1,4 @@
dependencies {
api project(':jme3-core')
+ api project(':jme3-plugins')
}
\ No newline at end of file
diff --git a/jme3-desktop/src/main/java/com/jme3/texture/plugins/AWTLoader.java b/jme3-desktop/src/main/java/com/jme3/texture/plugins/AWTLoader.java
index 926e7305af..49e318b59e 100644
--- a/jme3-desktop/src/main/java/com/jme3/texture/plugins/AWTLoader.java
+++ b/jme3-desktop/src/main/java/com/jme3/texture/plugins/AWTLoader.java
@@ -47,6 +47,12 @@
import java.nio.ByteBuffer;
import javax.imageio.ImageIO;
+/**
+ * @deprecated use {@link StbImageLoader} instead, which supports more formats and is more efficient and
+ * platform agnostic. This loader is kept for backward compatibility but may be removed in future
+ * versions.
+ */
+@Deprecated
public class AWTLoader implements AssetLoader {
public static final ColorModel AWT_RGBA4444 = new DirectColorModel(16,
diff --git a/jme3-plugins/build.gradle b/jme3-plugins/build.gradle
index 44e80f017f..93b9a1b8ce 100644
--- a/jme3-plugins/build.gradle
+++ b/jme3-plugins/build.gradle
@@ -14,5 +14,7 @@ dependencies {
implementation "org.jmonkeyengine:drako:1.4.5-jme"
implementation project(':jme3-plugins-json')
implementation project(':jme3-plugins-json-gson')
+ implementation libs.stb.image
+
testRuntimeOnly project(':jme3-desktop')
}
diff --git a/jme3-plugins/src/main/java/com/jme3/texture/plugins/StbImageLoader.java b/jme3-plugins/src/main/java/com/jme3/texture/plugins/StbImageLoader.java
new file mode 100644
index 0000000000..94bc3b839a
--- /dev/null
+++ b/jme3-plugins/src/main/java/com/jme3/texture/plugins/StbImageLoader.java
@@ -0,0 +1,146 @@
+package com.jme3.texture.plugins;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+
+import org.ngengine.stbimage.StbDecoder;
+import org.ngengine.stbimage.StbImage;
+import org.ngengine.stbimage.StbImageInfo;
+import org.ngengine.stbimage.StbImageResult;
+
+import com.jme3.asset.AssetInfo;
+import com.jme3.asset.AssetKey;
+import com.jme3.asset.AssetLoader;
+import com.jme3.asset.TextureKey;
+import com.jme3.export.binary.ByteUtils;
+import com.jme3.math.FastMath;
+import com.jme3.texture.Image;
+import com.jme3.texture.image.ColorSpace;
+import com.jme3.util.BufferUtils;
+
+public class StbImageLoader implements AssetLoader {
+ private final StbImage stbImage = new StbImage(BufferUtils::createByteBuffer);
+
+ @Override
+ public Object load(AssetInfo assetInfo) throws IOException {
+ AssetKey> key = assetInfo.getKey();
+ TextureKey textureKey = null;
+ if(key instanceof TextureKey){
+ textureKey = (TextureKey) key;
+ }
+
+ boolean flip = textureKey != null && textureKey.isFlipY();
+
+ try(InputStream is = assetInfo.openStream()) {
+ byte[] data = ByteUtils.getByteContent(is);
+ ByteBuffer buffer = ByteBuffer.wrap(data);
+ stbImage.setConvertIphonePngToRgb(true);
+ stbImage.setUnpremultiplyOnLoad(true);
+
+ StbDecoder decoder = stbImage.getDecoder(buffer, flip);
+ StbImageInfo info = decoder.info();
+ int channels = info.getChannels();
+
+ int width = info.getWidth();
+ int height = info.getHeight();
+ int desiredChannels = channels;
+
+ boolean is16bit = info.is16Bit();
+ boolean isFloat = info.isFloat();
+ boolean sRGB = false;
+
+
+ Image.Format jmeFormat;
+ if (is16bit || isFloat) {
+ switch (channels) {
+ case 1:
+ jmeFormat = Image.Format.R16F;
+ desiredChannels = 1;
+ break;
+ case 2:
+ jmeFormat = Image.Format.RG16F;
+ desiredChannels = 2;
+ break;
+ case 3:
+ jmeFormat = Image.Format.RGB16F;
+ desiredChannels = 3;
+ break;
+ case 4:
+ jmeFormat = Image.Format.RGBA16F;
+ desiredChannels = 4;
+ break;
+ default:
+ throw new IOException("Unsupported number of channels: " + channels);
+
+ }
+ } else {
+ switch (channels) {
+ case 1:
+ jmeFormat = Image.Format.Luminance8;
+ desiredChannels = 1;
+ break;
+ case 2:
+ jmeFormat = Image.Format.Luminance8Alpha8;
+ desiredChannels = 2;
+ break;
+ case 3:
+ jmeFormat = Image.Format.RGB8;
+ desiredChannels = 3;
+ sRGB = true;
+ break;
+ case 4:
+ jmeFormat = Image.Format.RGBA8;
+ desiredChannels = 4;
+ sRGB = true;
+ break;
+ default:
+ throw new IOException("Unsupported number of channels: " + channels);
+ }
+ }
+
+ StbImageResult imgData;
+ if(isFloat){
+ imgData = decoder.loadf(desiredChannels);
+ } else if(is16bit){
+ imgData = decoder.load16(desiredChannels);
+ } else {
+ imgData = decoder.load(desiredChannels);
+ }
+
+ ByteBuffer jmeImageBuffer = convertImageData(imgData, jmeFormat);
+
+ Image jmeImage = new Image(jmeFormat, width, height, jmeImageBuffer, sRGB ? ColorSpace.sRGB : ColorSpace.Linear);
+ return jmeImage;
+ }
+ }
+
+ private ByteBuffer convertImageData(StbImageResult imgData, Image.Format jmeFormat) {
+ int outputSize = jmeFormat.getBitsPerPixel() / 8 * imgData.getWidth() * imgData.getHeight();
+ ByteBuffer jmeImageBuffer = BufferUtils.createByteBuffer(outputSize);
+ ByteBuffer source = imgData.getData().duplicate();
+ source.order(imgData.getData().order());
+ source.position(0).limit(imgData.getDataSize());
+
+ if (!imgData.is16Bit() && !imgData.isFloat()) {
+ jmeImageBuffer.put(source);
+ jmeImageBuffer.flip();
+ return jmeImageBuffer;
+ }
+
+ int sampleCount = imgData.getWidth() * imgData.getHeight() * imgData.getRequestedChannels();
+ if (imgData.is16Bit()) {
+ for (int i = 0; i < sampleCount; i++) {
+ float value = (source.getShort() & 0xFFFF) / 65535f;
+ jmeImageBuffer.putShort(FastMath.convertFloatToHalf(value));
+ }
+ } else {
+ for (int i = 0; i < sampleCount; i++) {
+ jmeImageBuffer.putShort(FastMath.convertFloatToHalf(source.getFloat()));
+ }
+ }
+
+ jmeImageBuffer.flip();
+ return jmeImageBuffer;
+ }
+}
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.animation.TestIssue2076.testIssue2076_f1.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.animation.TestIssue2076.testIssue2076_f1.png
index f4cbc42002..6a08dd05fd 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.animation.TestIssue2076.testIssue2076_f1.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.animation.TestIssue2076.testIssue2076_f1.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.animation.TestMotionPath.testMotionPath_f10.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.animation.TestMotionPath.testMotionPath_f10.png
index 028530e9c8..da2cbdd0f1 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.animation.TestMotionPath.testMotionPath_f10.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.animation.TestMotionPath.testMotionPath_f10.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.animation.TestMotionPath.testMotionPath_f60.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.animation.TestMotionPath.testMotionPath_f60.png
index cca8ae963f..a390d2b709 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.animation.TestMotionPath.testMotionPath_f60.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.animation.TestMotionPath.testMotionPath_f60.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestExplosionEffect.testExplosionEffect_f15.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestExplosionEffect.testExplosionEffect_f15.png
index b22da40fc7..6e3344211a 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestExplosionEffect.testExplosionEffect_f15.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestExplosionEffect.testExplosionEffect_f15.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestExplosionEffect.testExplosionEffect_f2.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestExplosionEffect.testExplosionEffect_f2.png
index b7f4833cbc..41def1fc46 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestExplosionEffect.testExplosionEffect_f2.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestExplosionEffect.testExplosionEffect_f2.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestIssue1773.testIssue1773_localSpace_f45.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestIssue1773.testIssue1773_localSpace_f45.png
index bdeeb01eb1..271760e4b3 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestIssue1773.testIssue1773_localSpace_f45.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestIssue1773.testIssue1773_localSpace_f45.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestIssue1773.testIssue1773_worldSpace_f45.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestIssue1773.testIssue1773_worldSpace_f45.png
index 620d7bb3f2..1c2f34ceee 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestIssue1773.testIssue1773_worldSpace_f45.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.effects.TestIssue1773.testIssue1773_worldSpace_f45.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.export.TestOgreConvert.testOgreConvert_f1.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.export.TestOgreConvert.testOgreConvert_f1.png
index 61bd29c0b4..65e893c9b9 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.export.TestOgreConvert.testOgreConvert_f1.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.export.TestOgreConvert.testOgreConvert_f1.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.export.TestOgreConvert.testOgreConvert_f5.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.export.TestOgreConvert.testOgreConvert_f5.png
index 603680a81d..967bc1a2ed 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.export.TestOgreConvert.testOgreConvert_f5.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.export.TestOgreConvert.testOgreConvert_f5.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.gui.TestBitmapText3D.testBitmapText3D_f1.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.gui.TestBitmapText3D.testBitmapText3D_f1.png
index 40ea199165..4848c0a651 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.gui.TestBitmapText3D.testBitmapText3D_f1.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.gui.TestBitmapText3D.testBitmapText3D_f1.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_DefaultDirectionalLight_f12.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_DefaultDirectionalLight_f12.png
index 28a15327ec..97aae3887f 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_DefaultDirectionalLight_f12.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_DefaultDirectionalLight_f12.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_HighRoughness_f12.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_HighRoughness_f12.png
index 0a67bb7b0c..875502a664 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_HighRoughness_f12.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_HighRoughness_f12.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_LowRoughness_f12.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_LowRoughness_f12.png
index 9ced70ea22..b6d285b212 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_LowRoughness_f12.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_LowRoughness_f12.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_UpdatedDirectionalLight_f12.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_UpdatedDirectionalLight_f12.png
index 90dbfa7414..8f2676ffe5 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_UpdatedDirectionalLight_f12.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRLighting.testPBRLighting_UpdatedDirectionalLight_f12.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRSimple.testPBRSimple_WithRealtimeBaking_f10.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRSimple.testPBRSimple_WithRealtimeBaking_f10.png
index e5a00bf998..7131cc3f41 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRSimple.testPBRSimple_WithRealtimeBaking_f10.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRSimple.testPBRSimple_WithRealtimeBaking_f10.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRSimple.testPBRSimple_WithoutRealtimeBaking_f10.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRSimple.testPBRSimple_WithoutRealtimeBaking_f10.png
index e5a00bf998..7131cc3f41 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRSimple.testPBRSimple_WithoutRealtimeBaking_f10.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.light.pbr.TestPBRSimple.testPBRSimple_WithoutRealtimeBaking_f10.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.material.TestSimpleBumps.testSimpleBumps_f10.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.material.TestSimpleBumps.testSimpleBumps_f10.png
index 4bc480e4e3..4f26d70e8c 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.material.TestSimpleBumps.testSimpleBumps_f10.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.material.TestSimpleBumps.testSimpleBumps_f10.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.material.TestSimpleBumps.testSimpleBumps_f60.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.material.TestSimpleBumps.testSimpleBumps_f60.png
index bc7bc3ca84..62404a5079 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.material.TestSimpleBumps.testSimpleBumps_f60.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.material.TestSimpleBumps.testSimpleBumps_f60.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.post.TestCartoonEdge.testCartoonEdge_f1.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.post.TestCartoonEdge.testCartoonEdge_f1.png
index 0623641582..403bddc88f 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.post.TestCartoonEdge.testCartoonEdge_f1.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.post.TestCartoonEdge.testCartoonEdge_f1.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.post.TestFog.testFog_f1.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.post.TestFog.testFog_f1.png
index 39ac7fa79f..8c425e1579 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.post.TestFog.testFog_f1.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.post.TestFog.testFog_f1.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.post.TestLightScattering.testLightScattering_f1.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.post.TestLightScattering.testLightScattering_f1.png
index f8aff97dfd..00e087af9a 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.post.TestLightScattering.testLightScattering_f1.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.post.TestLightScattering.testLightScattering_f1.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.scene.instancing.TestInstanceNodeWithPbr.testInstanceNodeWithPbr_f1.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.scene.instancing.TestInstanceNodeWithPbr.testInstanceNodeWithPbr_f1.png
index 3b53fb7635..76a9e23c75 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.scene.instancing.TestInstanceNodeWithPbr.testInstanceNodeWithPbr_f1.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.scene.instancing.TestInstanceNodeWithPbr.testInstanceNodeWithPbr_f1.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.scene.instancing.TestInstanceNodeWithPbr.testInstanceNodeWithPbr_f10.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.scene.instancing.TestInstanceNodeWithPbr.testInstanceNodeWithPbr_f10.png
index 7804afd415..84750ba755 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.scene.instancing.TestInstanceNodeWithPbr.testInstanceNodeWithPbr_f10.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.scene.instancing.TestInstanceNodeWithPbr.testInstanceNodeWithPbr_f10.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_FinalRender_f5.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_FinalRender_f5.png
index aa8c62dcd4..81191794ba 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_FinalRender_f5.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_FinalRender_f5.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_GeometryNormals_f5.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_GeometryNormals_f5.png
index 215274f23d..a1fd8254b9 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_GeometryNormals_f5.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_GeometryNormals_f5.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_MetallicMap_f5.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_MetallicMap_f5.png
index dbbe6cf3a5..92df11b936 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_MetallicMap_f5.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_MetallicMap_f5.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_NormalMap_f5.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_NormalMap_f5.png
index 791339d4c3..ff55a9d22f 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_NormalMap_f5.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_NormalMap_f5.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_RoughnessMap_f5.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_RoughnessMap_f5.png
index 167ec2eeb7..c471dad04c 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_RoughnessMap_f5.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrain.testPBRTerrain_RoughnessMap_f5.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrainAdvanced.testPBRTerrainAdvanced_AmbientOcclusion_f5.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrainAdvanced.testPBRTerrainAdvanced_AmbientOcclusion_f5.png
index 5c515e1e26..bf04ab2c95 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrainAdvanced.testPBRTerrainAdvanced_AmbientOcclusion_f5.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrainAdvanced.testPBRTerrainAdvanced_AmbientOcclusion_f5.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrainAdvanced.testPBRTerrainAdvanced_Emissive_f5.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrainAdvanced.testPBRTerrainAdvanced_Emissive_f5.png
index f1304956c3..fa7134a313 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrainAdvanced.testPBRTerrainAdvanced_Emissive_f5.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrainAdvanced.testPBRTerrainAdvanced_Emissive_f5.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrainAdvanced.testPBRTerrainAdvanced_FinalRender_f5.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrainAdvanced.testPBRTerrainAdvanced_FinalRender_f5.png
index aa8c62dcd4..81191794ba 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrainAdvanced.testPBRTerrainAdvanced_FinalRender_f5.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.terrain.TestPBRTerrainAdvanced.testPBRTerrainAdvanced_FinalRender_f5.png differ
diff --git a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.water.TestPostWater.testPostWater_f1.png b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.water.TestPostWater.testPostWater_f1.png
index cfc9503619..f2ebee49a3 100644
Binary files a/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.water.TestPostWater.testPostWater_f1.png and b/jme3-screenshot-tests/src/test/resources/org.jmonkeyengine.screenshottests.water.TestPostWater.testPostWater_f1.png differ