I’m rendering spaceships to an image and want to add some eye candy to it. In order for it to work, I create an offscreen viewport (2 of them actually, one for background and one for the actual spaceship) and a framebuffer.
When I add a FilterPostProcessor to the viewport nothing happens, since it is empty. But if I add any filters to the fpp, the output image goes bananas, no matter which filter I use.
Example of a render without fpp:
Example of a render with fpp which has a filter (FXAA in this case, but results are the same if I use anything else):
As you can see, the background becomes black and some colors go very weird.
Here is the code that sets everything up:
renderCam = new Camera(1280, 720);
renderCam.setLocation(new Vector3f(20, 20, 20));
renderCam.lookAt(new Vector3f(0, -5, 0), Vector3f.UNIT_Y);
Camera c = CPU.game.getCam();
renderCam.setFrustum(c.getFrustumNear(), c.getFrustumFar(), c.getFrustumLeft(), c.getFrustumRight(), c.getFrustumTop(), c.getFrustumBottom());
renderCam.setFrustumPerspective(45f, 16f/9f, 1f, 1000f);
//Create a background
bgViewport = renderManager.createPreView("background", renderCam);
bgViewport.setClearFlags(true, true, true);
bgViewport.setBackgroundColor(ColorRGBA.LightGray);
bgPic = new Picture("background");
bgPic.setImage(CPU.game.getAssetManager(), "assets/img/menu/workshopbackground.jpg", false);
bgPic.setHeight(720);
bgPic.setWidth(1280);
bgPic.setPosition(0, 0);
renderingViewport = renderManager.createPreView("imageRenderer", renderCam);
renderingViewport.setClearFlags(false, true, true);
dl = new DirectionalLight(new Vector3f(1, -1, -2));
dl.setColor(ColorRGBA.White);
DirectionalLightShadowRenderer dlsr = new DirectionalLightShadowRenderer(CPU.game.getAssetManager(), 1024, 2);
dlsr.setLight(dl);
dlsr.setEdgeFilteringMode(EdgeFilteringMode.PCF8);
dlsr.setEnabledStabilization(true);
dlsr.setRenderBackFacesShadows(true);
dlsr.setEdgesThickness(10);
dlsr.setShadowZExtend(800);
dlsr.setShadowZFadeLength(100);
dlsr.setLambda(1f);
dlsr.getPreShadowForcedRenderState().setPolyOffset(6, 3);
FilterPostProcessor fpp = new FilterPostProcessor(CPU.game.getAssetManager());
FXAAFilter fxaa = new FXAAFilter();
fpp.addFilter(fxaa);
renderingViewport.addProcessor(dlsr);
renderingViewport.addProcessor(fpp);
renderingViewport.addProcessor(this);
fbuff = new FrameBuffer(1280, 720, 1);
fbuff.setDepthBuffer(Image.Format.Depth);
fbuff.setColorBuffer(Image.Format.RGBA8);
bgViewport.setOutputFrameBuffer(fbuff);
renderingViewport.setOutputFrameBuffer(fbuff);
Help?