Models in scene editor look different than in game

I’m playing around with jME’s PBR shaders, and in the scene editor, the models look pretty good. However, when I import them into my game, they look much darker, with some of the colors appearing nearly black. However, I know the model is using the data from the light probe, as the undersides of the green planes are slightly greenish and not completely black. Am I doing anything wrong?

Comparison w/the game on top and the scene editor on the bottom (the forum will only let me upload one image b/c I’m a newbie):

Notice that the brown poles in particular look really dark in game and much brighter in the scene editor.

Code:

package mygame;

import com.jme3.app.SimpleApplication;
import com.jme3.renderer.RenderManager;

public class Main extends SimpleApplication {

    public static void main(String[] args) {
        Main app = new Main();
        app.start();
    }

    @Override
    public void simpleInitApp() {
        rootNode.attachChild(assetManager.loadModel("Scenes/scene.j3o"));
    }

    @Override
    public void simpleUpdate(float tpf) {
        //TODO: add update code
    }

    @Override
    public void simpleRender(RenderManager rm) {
        //TODO: add render code
    }
}

As a side note, from what I can tell, jME doesn’t seem to support subsurface scattering. Is there a way to get this into my game?

Welcome to the JME community :slightly_smiling_face:

The top picture appears as though the light probe is not attached to the same node as the models, or more likely out of range of the models due to its radius being reset when the scene is attached (in either case, a PBR model without a lightProbe can appear darker in certain areas depending on the metallic value)’

This code could help you to see if your light probe is misplaced or needs to have a larger radius after being loaded into the game.

@Override
public void simpleInitApp() {
    Node yourSceneNode = (Node) assetManager.loadModel("Scenes/scene.j3o");
    rootNode.attachChild(yourSceneNode );
    
    LightList lightList = yourSceneNode .getLocalLightList();
            for(int i = 0; i< lightList.size(); i++){
                Light light = lightList.get(i);
                
                 if(light instanceof LightProbe){
                    
                    LightProbe lightProbe =  (LightProbe) light ;
                    lightProbe.setBounds(new BoundingSphere(1000, lightProbe.getPosition()));

      //              lightProbe.setRadius(1000); //slightly older JME version had a different method for setting radius, but if you are using 3.3 then you would instead use this method rather than .setBounds()
                    lightProbe.setPosition(picLoc);
                  System.out.println("LightProbe's location in world space: " + lightProbe.getPosition());


            }
      }
}

It is common for a light to end up mis-placed whenever it is part of a saved j3o scene, because lights do not follow their parent node like a standard Spatial does.
If a scene is loaded into your game and is moved away from the origin of the scene graph, then you will also need to manually move the light into its correct place when the scene is attached - or you can attach your lights to a LightNode object to do this for you.

Edit: im not sure about your final question, but hopefully someone more knowledgeable in that area can help you soon.

There are two rules when talking about lights:

  • They only affect the children Nodes of the Nodes they are attached to
  • They are no Spatials but added to a simple List under any Node/Spatial(?)

The first might hit you in cases where you wonder why something wasn’t lit: It’s not under that light emitting node.
The second one is no problem for most lights, as they are location independant, but a LightProbe is not.

I suggest you storing your Lightprobes besides your Models, as a light probe is more of an environment. Then you can use some logic to place the desired (here: Desert) lightprobes under the rootNode and at position A and B.

You can use LightProbes attached only to your Model, then we would be talking about a specific game level with things like per room lighting. But there you need to ensure that you move the lights when moving the scene (I don’t know if LightControl works there).

For the image now it looks like the SDK (Scene Editor) uses some additional ambient lighting or direct lighting, as your game looks rather expected (with shadows). Double check that the light bulb is disabled, or double click it to try to re-disable it. Also note that the Scene Editor might have it’s own Light Probe added in and then they could over-amplify each other (there should be a button next to the light bulb, not sure if this is present on the latest release version already).

Subsurface Scattering iirc is just a Filter to implement. Much like the BloomFilter, iirc.

1 Like

i belive you just clicked on “lamp icon” in scene editor that add additional camera light.(if its not light probe problem)