lachdanan's picture

Professional 3d application

Hi all,

I just found this site and and I really like the stuff you guys are doing. Really impressive that I thought I might ask a question too :)

I plan to write a fully blown 3d application that is gonna be in the league of Maya, Softimage XSI, 3ds Max, LightWave, etc. I have some friends as part of the group. C# is our target language.

We are all professional 3d artists working in the film industry and some of us are more in the programming/art area.

Anyway the problem is we don't know which 3d framework to use as the base.

Right now these are on our list (some might be irrelevant due to our misinformation):

XNA
Managed DirectX
csGL
OpenTK
Tao
WPF

Please add others that we could use if we have missed them?

We included WPF because some people suggested that it has "serious" 3d capabilities, I doubt it, but haven't tried.

So if you guys can help us find the right framework to use, we would be most that grateful.

Thanks all.


Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
the Fiddler's picture

Scratch csGL and Managed DirectX from that list, as they are no longer supported. Tao/OpenTK and SlimDX are the alternatives.

Regarding your question, it all depends on what you are trying to achieve. Do you want cross-platform compatibility? If so, anything DirectX- and WPF-related is out. Do you want low-level access to the rendering API, or would you prefer a higher-level abstraction? If it's the latter, take a look at Unity3D or Irrlicht3D.

OpenTK can and has been used for modeling and CAD applcations. It provides access to the OpenGL API, it can be integrated with Windows.Forms or (with a little more work) with GTK# and is cross-platform.

What exactly are your requirements?

lachdanan's picture

Thanks Fiddler for replying.

I don't know where to start but what we need to be able to have the same level of access used in other 3d apps like Maya, Softimage XSI, 3ds Max, LightWave, etc. I wrote some Maya tools using its SDK but haven't really dealt with directx, opengl calls as I was using Maya functions.

Cross platform compatibility would be very good for us although not written in stone.

What we really care mostly is having a consistent, nicely designed API (also in .NET sense) we can use that's gonna give us the ultimate performance. So if the framework we choose ends up 3 times slower than something else we could use, then that wouldn't be desirable. We know that by using C# we already trade some performance, so don't wanna trade much more of it.

Also another thing that really confuses me is there are all these frameworks you mentioned:

Unity3d, Irrlicht3D, SlimDX, Tao/OpenTK, XNA etc what are their difference? It's hard to read the clear line defined between them, as I don't see much of a line :)

Thanks again.

flopoloco's picture

I raise 2 issues here:

- DirectX vs OpenGL
- OpenTK vs Tao

In my personal opinion OpenGL is considered "safer" for applications with long lifecycles. For instance one crucial parameter is that DirectX technology is updated constantly, that might sound good to game companies but I think that OpenGL can release you from the constant updates.

Well I am not the one to decide, there are many deeper details for you to search. But I choose OpenTK... More of a personal taste, because it is modernized version of OpenGL based on OpenGL stability.

flopoloco's picture

Descriptions on the fly:

Unity3d = Game related development application suite for MacOS users (targeting DX Windows users)
Irrlicht3D = simple and rock-solid open source game engine.
SlimDX = open source wrapper for DX9 and DX10
Tao = A collection of native library wrapper for the CLI (all Open source)
OpenTK = ...
XNA = Game framework for .NET developers targeting Windows, Xbox360 and Zune developers. (XNA is DX9 and is closed source).

lachdanan's picture

Thanks flopoloco.

DirectX vs OpenGL is right on. On a similar note, OpenTK and Tao is the only continued managed wrappers for OpenGL, right?

lachdanan's picture

Another thing I wonder is whether frameworks like Unity3d and Irrlicht3D, etc provides way more functionality than just wrapping a core framework like OpenGL or DirectX. It looks to me that they are like UnrealEngine3, with or without an end user interface?

If so, I don't think much of their functionality would be useful to us, like pathfinding, etc. But if it's about how well they wrapped OpenGL, DirectX with some related core functionality (like linear algebra, etc), then I can see their power.

What do you guys think?

Thanks.

nythrix's picture

[OpenGL vs DirectX]
Since you already took off with C# it would be a pitty to stick to DirectX, giving up cross-platformity.
[Full engine vs lowlevel]
You will probably never find an engine that's perfect for your needs. There's always some tweaking here and there. Building your own instead gives you more control and some extra speed leaving out all the junk engines come up with these days.
I faced the same problem two years ago when I choose to go with my own engine. I had zero knowledge of 3D graphics (or big projects) so it took some time, yet I don't regret it.
[Math]
Copy paste the above.
[OpenTK vs Tao]
I had a texture problem with Tao on ubuntu that I couldn't fix. Switching to OpenTK made it disappear. I never quite got this one.
Today OpenTK features brilliant compile time support that walks you through the OpenGL mess. Not to mention the naming conventions. I know it's not functionality but feels very .NETish. Which is good.

This is the experience of a single developer building a train sim over OpenTK. Modify accordingly.

the Fiddler's picture

Another important question is how you are going to build your GUI:

  1. Windows.Forms - this is a safe choice. Pros: works on all platforms, OpenTK can interface with it directly, has a good GUI builder. Cons: native look only on windows (can be worked around with custom widgets), almost impossible to build flexible, resolution-independent layouts.
  2. WPF - introduced in .Net 3.0 as the Windows.Forms replacement. Pros: resolution independent, hardware accelerated, good media / animation capabilities. Cons: windows only, font rendering is not native, 3d capabilities are not enough. OpenTK can also interact with WPF, as the latter offers limited backwards compatibility.
  3. GTK# - comes with Mono but is available on windows, too. Pros: flexible, looks native on all platforms, can be used with OpenTK. Cons: does not always achieve the "native" part 100%, no GUI builder for windows, documentation is sometimes lacking.

There are other options, such as Kimono (builds on QT) or wx.Net (builds on wxWindows), but I have no experience with those. If you are going to develop on Visual Studio, and if you wish to go cross-platform at some point, then the best choice is probably Windows.Forms.

The GUI toolkit will also dictate how you interact with the 3d toolkit. For example, OpenTK, Tao and (AFAIK) SlimDX all offer Controls usable by the Windows.Forms designer (just drag & drop the Control and you get 3d support). Engines, like Irrlicht3D, tend to create their own windows and may need some extra work to be integrated in an existing GUI.

[Engine vs Raw access]
As you said, you don't need anything game-related functionality, such as pathfinding etc. In my mind, a graphics engine such as Irrlicht3D (unlike Unity3D, which is a game engine) has two significant advantages:

  1. It abstracts away the underlying 3d API (Irrlicht3D can change between D3D, OpenGL and a software renderer at the flip of a switch).
  2. It can load many different model formats out of the box.

On the flip-side, 3d engines tend to have specific workflows (e.g. create scene graph, add model, select effects, render), which may or may not be suitable for a 3d editor.

objarni's picture

lachdanan: Why do you want to build another 3d modeller? Who's back are you scratching - I mean what niche will it fill? Will it be commercial? JTalton, a OpenTK user builds the Golem3d modeller, you might want to discuss things with him:

http://opentk.com/node/560

Inertia's picture

[Maya, XSI, etc.]
This link might be what you're looking for, it's an SDK for .fbx and collada import/export.

[DirectX vs. OpenGL]
I would not recommend developing anything serious for XNA, it's limited to DX 9 hardware and afaik will not evolve beyond that. The true question is, can you live with supporting Windows only? If you're only targeting Windows, do not bother with OpenGL.

It is possible to design your application so that is has no knowledge of the underlying rendering API and only issues abstract commands, which are translated to the corresponding GL or DX commands. However this is easier said than done and I'd really recommend sticking with either GL or DX and get a deep knowledge of one API, rather than trying to master both.

You can't do anything with DX that is impossible with GL. GL's mechanism to add new hardware functionality are Extensions while DX programmers must wait for a new version to use new hardware features.

[OpenTK vs. Tao]
I don't think there's actually a "versus" there. OpenTK's GL and AL bindings are much more user-friendly and it ships with a Math library. A Nobrainer. Tao on the other hand binds libraries for video playback, physics, file systems, etc. which OpenTK does not cover. Interoperability between the libraries is good, a recent example was that you can use OpenTK's OpenGL together with Tao's Cg bindings. I remember using Tao.DevIL together with OpenTK which did work painless, too.

[Engine vs. Custom Solution]
Be aware that the decision to write your own may consume serious amounts of time and does not guarantee the expected outcome. I'm mentioning this because you said you're representing a group of artists, and your programming experience is not described very clearly.
(Writing a software of Maya's scope takes a group of experienced full-time programmers and a few years. Getting it error-free, fast and into a state where every user is happy takes a lifetime, assuming this is achievable at all for a software of that dimension.)