jME3/Ardor3D question

I am restarting a long-dormant 3D simulation project, and have a fundamental question about which 3D engine I should choose.



There are many reasons to choose jME3 (I’ve done a little work with jME2 which boosted my esteem for the project, and there is a workable networking engine tailored to it, etc… plus some intangibles such as these forums).



One thing that makes me think I lean toward Ardor3D, however, is its use of double-precision which I worry might be a must-have for my project.



My project is a naval simulator with items that must be examined at close ranges (hand-held devices) as well as ship-sized objects that will be up to 30,000 meters away (seen by eye or through optical devices). The ships at a distance need to have modest but important geometry displayed correctly and without defect – primarily the training and elevation of guns, and the smoke issuing from funnel(s). My past experience with a VERY dated 3D system (WildTangent Web Driver) led me to expect that shimmering Z-buffer defects visible on distant ships might be a natural consequence of a single-precision 3D engine whose camera had clipping planes configured such that something at arm’s length could be shown without getting a cutaway view.



Can anyone comment whether I would find a single-precision system workable and what accommodations my design might have to offer the engine (e.g., the client might be coded such that the camera is always at the origin and the rest of the world moves inversely about it – though this might require the server to use a slightly different representation of geometry) to make the platform suffice?



Thanks in advance for your honest views and ideas.



tone

Just an aside, Z-buffer shimmer has nothing to do with the precision of the spatials. That’s the precision of the depth buffer which as far as I know will never be ‘double’ anyway.



The other thing, as far as I know, all geometry has to be float when it goes down to the GPU anyway. That’s certainly been my experience.



Where ‘double’ has advantages is in representing the positions and transformations of your objects. Even though it all has to end up as single precision in the end, accumulating transforms in doubles first will give better results… presuming your scene is setup in such a way that artifacts are not still apparent. That last bit will be a problem no matter what precision you start with since it all ends up as float in the end. Imagine trying to draw a galaxy of stars as seen from a solar system… it’s quite likely that those distance stars will end up on top of each other because the single precision GPU cannot properly resolve them.



Working in single precision presents a few different challenges but they are not too bad. Personally, I’d still keep you domain objects in double precision and just convert them to single precision relative to the camera… and then let the world move around the camera. That’s not a server problem, that’s a client problem. Keep the domain objects pure and adjust as close to the camera as possible. JME likes to encourage you to keep Spatial and “game object” the same thing but I’ve never bought into that, personally. :slight_smile:



And as implied above, it’s also possible that double precision, in the extreme cases, only moves some problems rather than eliminate them.

2 Likes

Same for me, I have the server running in pure double on a 64bit pc, the client then converts those data to camera relative float space.

Still trying to get to terms with this a bit. Can you explain your use of the word “domain objects”?



One idea the Ogre3D developer threw out (if I understood him correctly) was the possibility of rendering the world in 2 passes using different clipping plane settings, based on a simplified understanding that nothing NOT on one’s own ship will ever be closer to the camera than items in the same line of sight ON his own ship:


  1. the first pass renders all the ships (and landmasses) the local player is not one, using a near clip planes of about 10 meters
  2. a second pass acts on the player’s own ship with tight clipping planes so he can get close to items without cutting into them



    I’m not sure if that is something that can be done or if I am talking nonsense.



    tone

That’s an approach and fairly easy to do in JME using layered ViewPorts. It’s what you’d have to do if the far aways things are so far away that they start to be drawn on top of each other. You render some far field of objects at a different scale and then render the near field objects on top of them. And note: these issues would crop up even if you were building your scene graph with double precision… since it all has to resolve to float before going to the GPU.



By domain objects, I mean the actual abstract “things” you are rendering. The ships, the people, the objects on the ships. These things have properties and positions independent of their geometry and all of that stuff can use doubles. You only need to worry about single precision when it comes time to combine that geometry with the object position and orientation. For example, turning the ship’s position into a float x,y,z relative to the camera and use that as the translation for the spatial containing the mesh (and meshes will always be float anyway). And that’s a client-side problem not a server side problem.

Thanks for all your input and insight. I am going to work with jME3 (you also “just worked” with IDEA, pretty much … a huge plus).



Maybe Ardor3D has a role on the server for me for the double-precision location tracking.



tone

question…



i am new here and new to the concept of simulation design. my own project i must say is somewhere in between a traditional game and a simulation. i have similar requirements, however



when you simulation guys in this thread talk about a server and a client and they both somehow control graphics rendering?



the statement above about potentially using ardor3d on the server and jmonkey on the client to maintain graphical fidelity … what is involved with that or what does the architecture look like?



i currently have client, server, reddwarf/darkstar node, physics, ai/fann to deal with…



this would be a seperate like “graphics server” or would be attached to the game server… and what server is built using the ardor3d or jmonkey?



can someone give a brief explanation of that design or pointers?



i am working on what will eventually be a planet sized combat sim (currently planning size equivalent to a large metropolitan area with varying environments)

I don’t know. Using Ardor3D on the server just to get double precision for some locations seems a bit like using a truck to crush walnuts. Sure it works… but it seems like overkill. Really keeping double-precision locations is not that hard. I don’t think it’s worth bringing a whole new scene graph library into play just to do it.