We are developing a GIS based application which simulates the real word objects (i.e. Pipes, Roads, etc) in a virtual reality environment. Currently we use ArcScene from ESRI ArcGIS package for 3D rendering, and in future we intend to replace it with our own 3D environment.
Question: What is the best way to have realtime 3D rendering in above mentioned application? I do not have any experience in this field and i'm really confused. Should I use one of the available 3D rendering engine (some listed below)? if the answer is yes, then which parameters should be considered (regardless of its cost)? Does any one have any experience or suggestion in this field?
circumstance and necessities:
Rendring Engines: After some search I found the following 3D rendering solutions:
CadFaster|Engine: "The CadFaster|Engine is a unique and the most scalable 3D rendering solution for technical applications. It is over ten times faster than usual CAD applications. The engine includes patented real-time synchronization mechanisms for 3D data sets and geometry which allows automatic integration to the master application. CadFaster|Engine also contains patented real-time polygon reduction which improves the 3D performance." cited from DevMaster
Quest3D: "Use Quest3D to create software, web and simulators. Quest3D is the perfect solution for architecture visualization, product visualization, digital entertainment, computer aided training and high-end VR applications." cited from Quest3D introduction
OpenSceneGraph: "The OpenSceneGraph is an open source high performance 3D graphics toolkit, used by application developers in fields such as visual simulation, games, virtual reality, scientific visualization and modelling. Written entirely in Standard C++ and OpenGL ... . The OpenSceneGraph is now well established as the world leading scene graph technology, used widely in the vis-sim, space, scientific, oil-gas, games and virtual reality industries. The main language: C/C++ Language wrappers: C#, ... ." cited from OSG home page.
Also there is a list of nearly complete available engines at DevMaster and 3DLinks
Good Render = Detailed Render Details promote realism so that you don't get a feeling that you are looking at computer-generated visual. Attention to shadows, textures, light, and materials are often overlooked, but you would not believe the impact these little details make on the overall perception of the Renders.
Blender: Blender definitely tops the list of the most popular rendering software for animation filmmakers and is completely open-source.
3D rendering is a computer graphics process that uses three-dimensional data and models. The goal is to create a lifelike or non-photorealistic image. 3D models are a digital file of an object created using software or through 3D scanning. 3D rendering is also a form of virtual photography.
Regardless of which engine you use, there are some key concepts to understand.
Since you are dealing with so many objects, the main one is that of Level of Detail (LoD). Make sure your objects have realistic LoD associated with them. For example, you won't bother to render the high-detail model of the screw when viewing the whole scene. Also, when closer to it yet still far enough away, a low-detail version of the screw is good enough for rendering.
Also, you can do tricks like Virtual Earth and tile your data (which is related to LoD). Finally, culling is going to be very important, but probably dealt with any of those engines you have already mentioned.
If you are dealing with GIS stuff, check out AGI's Insight3D. Still in early development, but backed by a lot of good technology, and designed to handle large quantities of objects, culling, LoD, etc. They even have ways to embed video as a texture.
EDIT:
If you are dealing in C# as you stated, I really would take a look at Insight3D. It is a 3D GIS engine. Not a game engine. It is scene-graph based, which means you don't have to worry about frame-by-frame rendering as you might have to with other engines.
They have all the constructs you need for
For me, the difference between a 3D engine and a game engine can get pretty blurred. From what I've seen, the key difference is that game engines are more worried about making things look good than accurate. For example, we used the Unreal engine to render our office, but we had to make everything to different scales than real-life. It looked great, but not to real-life dimensions. This might make a difference when dealing with details down to screws as you are doing.
A little disclaimer: I do not work for AGI, but I have personally met the engineers that are creating this engine. They are integrating the latest GPU and rendering techniques, so it is by far one of the best fastest, well-done engines I've used. It leverages knowledge and technology used by their main application (STK) which is used by many people for high-resolution astronomical calculations.
SlimDX SDK might be option, if your willing to start a bit from the bottom, its basically a way of giving you access to DirectX from .NET. They also have a collection of samples for you to start from.
Ogre - a 3d engine under LGPL or purcache a license
garagegames.com - also has a few engines, depending on your language of choice ( Also "low" price. no 500k $ engines here )
Both Ogre and garagegames.com have "old" 3d engines, so you should be able to find either full games or demos so you can check out the performance. Im not familiar with writing cad applications, so when you say you have 3D objects im not sure if thats static or objects that can change while the application is running.
I have worked with OpenSceneGraph and in my opinion if you are not very good at organizing your graph you could end up with poor performance given the specifics of your models (high detail, high object count, scattered scenes). You will need to be able to partition your scene spatialy (like oct-trees, kd-trees, etc).
If cost is not an issue you could go for vendors that also provide consulting services and sell engines that don't require quite the same 3D graphics expertise as the OSG for instance.
Another issue to think of is how do you import your models into the engine. If you work with documented file formats you could do it yourself, otherwise you'll need to rely on external libraries for reading and/or importing the model into your engine of choice.
If your models are extremely large you'll need something that is capable of paging as your model won't fit into the available memory (relying on the OS for paging in this case is not the best idea IMO).
Here you can find a list of 3D engines, some of them commercial: http://en.wikipedia.org/wiki/List_of_3D_graphics_APIs
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With