There seems to be a problem with the billboard node when viewed from around (0,1,0). I have written a test method to demonstrate:
move closer a tiny bit to see the original
Strafe left or right while the billboard (red) torus is visible to see what I think is a bug.
Also, turning on bounding boxes helps show whats going on.
private void testBillBoardSwitchNode() {
Spatial realObject = new Torus( "", 40, 40, 2, 5 );
Spatial billboardObject = new Torus( "", 40, 40, 2, 5 );
Utils.color( realObject, ColorRGBA.white, 128 );
Utils.color( billboardObject, ColorRGBA.red, 128 );
realObject.setModelBound( new BoundingBox() );
realObject.updateModelBound();
billboardObject.setModelBound( new BoundingBox() );
billboardObject.updateModelBound();
ZBufferState buf = display.getRenderer().createZBufferState();
buf.setEnabled( true );
buf.setFunction( ZBufferState.CF_LEQUAL );
billboardObject.setRenderState(buf);
billboardObject.setRenderState( lightState );
billboardObject.updateRenderState();
ImposterNode iNode = new ImposterNode("model imposter", 50, 512, 512 );
iNode.attachChild( billboardObject );
iNode.setCameraDistance( 50 );
iNode.setRedrawRate( 0.05f );
BillboardNode bnode = new BillboardNode("imposter bbnode");
bnode.setAlignment(BillboardNode.SCREEN_ALIGNED);
bnode.attachChild(iNode);
DistanceSwitchModel switchModel = new DistanceSwitchModel( 2 );
switchModel.setModelDistance( 0, 0, 50 );
switchModel.setModelDistance( 1, 50, 1000 );
DiscreteLodNode gfxModel = new DiscreteLodNode( "Gfx Table", switchModel );
gfxModel.attachChild( realObject );
gfxModel.attachChild( bnode );
gfxModel.setActiveChild( 0 );
cam.getLocation().set( billboardObject.getLocalTranslation().clone().add( 0, -70, 0 ) );
cam.lookAt( gfxModel.getLocalTranslation(), Vector3f.UNIT_Y );
rootNode.attachChild(gfxModel);
}