Hello everyone, PBRLighting cannot be optimized using InstancedNode and has reported an error. I can’t find a solution
The code is as follows:
public class TestPBRSimple extends SimpleApplication {
private boolean REALTIME_BAKING = false;
public static void main(String[] args) {
new TestPBRSimple().start();
}
@Override
public void simpleInitApp() {
InstancedNode inst = new InstancedNode("inst");
rootNode.attachChild(inst);
Geometry model = (Geometry) assetManager.loadModel("Models/Tank/tank.j3o");
MikktspaceTangentGenerator.generate(model);
Material pbrMat = assetManager.loadMaterial("Models/Tank/tank.j3m");
pbrMat.setBoolean("UseInstancing", true);
model.setMaterial(pbrMat);
inst.attachChild(model);
inst.instance();
ChaseCamera chaseCam = new ChaseCamera(cam, model, inputManager);
chaseCam.setDragToRotate(true);
chaseCam.setMinVerticalRotation(-FastMath.HALF_PI);
chaseCam.setMaxDistance(1000);
chaseCam.setSmoothMotion(true);
chaseCam.setRotationSensitivity(10);
chaseCam.setZoomSensitivity(5);
flyCam.setEnabled(false);
Spatial sky = SkyFactory.createSky(assetManager, "Textures/Sky/Path.hdr", SkyFactory.EnvMapType.EquirectMap);
rootNode.attachChild(sky);
// Create baker control
EnvironmentProbeControl envProbe=new EnvironmentProbeControl(assetManager,256);
rootNode.addControl(envProbe);
// Tag the sky, only the tagged spatials will be rendered in the env map
envProbe.tag(sky);
}
float lastBake = 0;
@Override
public void simpleUpdate(float tpf) {
if (REALTIME_BAKING) {
lastBake += tpf;
if (lastBake > 1.4f) {
rootNode.getControl(EnvironmentProbeControl.class).rebake();
lastBake = 0;
}
}
}
}
Error message:
com.jme3.renderer.RendererException: compile error in: ShaderSource[name=Common/MatDefs/Light/PBRLighting.vert, defines, type=Vertex, language=GLSL150]
ERROR: 0:724: ‘Use_the_instancing_functions_for_this’ : undeclared identifier
at com.jme3.renderer.opengl.GLRenderer.updateShaderSourceData(GLRenderer.java:1659)
at com.jme3.renderer.opengl.GLRenderer.updateShaderData(GLRenderer.java:1686)
at com.jme3.renderer.opengl.GLRenderer.setShader(GLRenderer.java:1751)
at com.jme3.material.logic.SinglePassAndImageBasedLightingLogic.render(SinglePassAndImageBasedLightingLogic.java:277)
at com.jme3.material.Technique.render(Technique.java:168)
at com.jme3.material.Material.render(Material.java:1099)
at com.jme3.renderer.RenderManager.renderGeometry(RenderManager.java:842)
at com.jme3.renderer.RenderManager.renderGeometry(RenderManager.java:772)
at com.jme3.renderer.queue.RenderQueue.renderGeometryList(RenderQueue.java:273)
at com.jme3.renderer.queue.RenderQueue.renderQueue(RenderQueue.java:315)
at com.jme3.renderer.RenderManager.renderViewPortQueues(RenderManager.java:1117)
at com.jme3.renderer.RenderManager.flushQueue(RenderManager.java:1012)
at com.jme3.renderer.pipeline.ForwardPipeline.pipelineRender(ForwardPipeline.java:117)
at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1313)
at com.jme3.renderer.RenderManager.render(RenderManager.java:1355)
at com.jme3.app.SimpleApplication.update(SimpleApplication.java:283)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:163)
at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:246)
ERROR: 0:724: ‘Use_the_instancing_functions_for_this’ : undeclared identifier
at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:245)
at java.base/java.lang.Thread.run(Thread.java:842)
724 wPosition = (g_WorldMatrix * vec4(inPosition, 1.0)).xyz;