4
\$\begingroup\$

One of my hobbies (aside programming, of course) is 3d modeling (completely amateur, using 3ds MAX) and I'd like to mix programming with 3d modeling (what a marriage!). So I've read a little about it and figured I'd have to have good notions on geometry, math, point spacial position (which I do, from my 3d modeling experience), but I don't know how to use API's for it, so I've 'simulated' simple 3d with some simple programs I've made (first a spinning cube, then a more complex Labyrinth (or maze, if you will)).


NOTE: I have no intentions on harming anyone's computers. If you don't trust it, use a VM or something. Once you run it, I'd appreciate if you commented here stating that the EXE's are safe. Thank you.


Here are some questions:
1) What would be a nice 3d development tool for a .NET programmer like me?
2) Is there a way of using 3d models made in 3DS Max ? (I intend on modeling characters)
3) What knowledge should I have in order to render it, and move it around ?
4) Which API should I use ?

The development environment would be nice if it:

  • Had the possibility to import existing 3D models exported by 3DS MAX (not a must, but a plus)
  • Had the ability to create 3d models programmatically (a must)
  • Possibly has a tool for materials and textures (that would be a huge plus)
  • Is Well known (high availability of tutorials, questions in S.O., forums..)

And it would be really nice if I could use C# all the way :)


EDIT
For the ones that asked if I want to do something more UI-guided, just to mess around with some models, and not learn about how to create a game-engine, I say no, that's not the case.

If you download my Labyrinth little game, you'll notice that I've basically MADE a simple renderer from scratch using DrawPolygon on bitmaps created via code. So that's a clue that what I want is to learn, and that I somehow like the idea of mixing images and codes together, along with some user interaction.

Imagine that I have a model, say the weighted companion cube, and I want to make a full-screen, or windowed lil' program that spins it (much like the crappy spinning cube I've made a while before the other one), setting the position, the position and angle of the camera, velocity, a simple ambient (say a simple monocolor box (which would be a room) drawn maybe through code (not an imported model)) and editing it with simple user interaction (say pressing left or right on the keyboard changes direction, or pressing '+' would make it faster), all that without using a wizard or something, but coding.

Now for those that didn't quite get my intentions in here, I hope this example makes it clearer of how powerful and customizable I hope it should be. If there are any more questions, let me know!


EDIT
I'm going to start with UNITY, and I've noticed there's a pro version, is the free version enough to do what I want ? (not counting on the 1 month free pro account)
As for XNA, does the same scenario apply as well ?
Please leave a comment!

\$\endgroup\$
3
  • 1
    \$\begingroup\$ Guys, I'm going to give some of the questions in here a try this week, then the one I think is more adequate will be accepted and upvoted, because this question, as subjective as it is, still has an answer. If you have another technology, comment, or tip to add, please write an answer, and if it's useful, i'd be thankful, and will certainly upvote it! Thank you. \$\endgroup\$ Jul 26, 2010 at 13:57
  • \$\begingroup\$ Just to be clear, you are looking to create a model from code and not import a model into something right? \$\endgroup\$ Jul 29, 2010 at 13:28
  • \$\begingroup\$ As I describe in the first and second items, having both would be nice! But if I have to choose, then just importing. \$\endgroup\$ Jul 29, 2010 at 13:44

5 Answers 5

6
\$\begingroup\$

Unity ( http://unity3d.com/ ) is a good start. It's got C# as one of its core languages, there's a standard workflow for using 3DSMax models, it's got a certain amount of drag-and-drop for rapid prototyping, and there's a free version with somewhat-limited functionality so you can try it out. It's got a supportive community and some tutorials, and creates cross-platform apps.

While it has material and texture creation support, it doesn't have built-in modeling, programmatically or otherwise. I've used Blender in my experimentation, as it's free and I'm somewhat comfortable with it, and I'm sure you can do algorithmic modeling with it (though you'd be coding in Python). If you've got an acceptably legit copy of 3DSMax already, I'm pretty sure it plays well with Unity as well.

\$\endgroup\$
3
  • \$\begingroup\$ My copy of 3DSMax is 'almost legit', you know? =( is that an issue to use unity ? \$\endgroup\$ Jul 24, 2010 at 2:25
  • \$\begingroup\$ Not that I know of, saved files are all the same as long as it isn't one of the crippled student versions (a la Maya PLE). \$\endgroup\$
    – coderanger
    Jul 24, 2010 at 2:28
  • 1
    \$\begingroup\$ I don't think that is going to be a problem.. I've been working with 3DS MAX for 3 versions now, shared models with friends and even imported/exported from other versions and programs.. It's a pity there is no nearly full version for students, not proud it though, but I don't (or intend to) use it for personal or professional profit, just for learning =) \$\endgroup\$ Jul 26, 2010 at 14:34
6
\$\begingroup\$

Not quite as simple as Unity, but XNA is Microsoft's big push for making games in C#. 3DS should be able to export FBX files and the XNA dev environment can import those. Tons of tutorials and libraries available.

\$\endgroup\$
5
\$\begingroup\$

Both Unity and XNA are fine choices, but if you have a passion for learning things (as you imply you do), maybe you'd enjoy using OpenTK. It's an up-to-date .NET wrapper for the OpenGL API + input + window creation functions.

Dealing with OpenGL directly is as low-level as it gets, and, in my opinion, a very rewarding learning experience. I started out learning OpenGL, then moved to higher-level tools (such as Unity). Having direct experience with a graphics API can help you understand what's happening "behind-the-scenes" and be "more at home" when using a higher level tool/framework.

Alternatively, you may wish to start learning, using SlimDX, which is a DirectX wrapper.

\$\endgroup\$
3
  • \$\begingroup\$ Would these 'wrappers' be API's to expose functionalities of these graphic engines (renderers) already present in the system? If so, the development would take place in Visual Studio, right? One more thing, for a .NET developer like me, DirectX would more recommendable as compared to OpenGL, isn't it? \$\endgroup\$ Jul 25, 2010 at 13:04
  • 1
    \$\begingroup\$ They are wrappers in the sense that they let you use the OpenGL/DirectX API from managed languages (which you'd otherwise need to use from C or C++ etc.). As for whether you should pick DirectX - if you plan to stick to just Windows, then DirectX might be a better choice. I chose OpenGL, and I've had no problems (and there's the benefit that your apps can be easily ported to other platforms then). If you wish to use Visual Studio, you can (with either API). \$\endgroup\$ Jul 26, 2010 at 10:48
  • \$\begingroup\$ Hm.. got it, thanks! But wouldn't using managed languages (such as C#, the one that I'm more used to) imply that it would end up not allowing me to port to other plataforms just as easily ? if so, which languages would you recommend me to work with in order to achieve some level of portability, then ? \$\endgroup\$ Jul 26, 2010 at 20:04
2
\$\begingroup\$

My vote goes to Unity as well. It's much more starter friendly than XNA and there's a lot of support out there. XNA on the other hand will (if you persist) give you a more solid game programming background as less is done for you automagically. So again it depends - do you want to play (and make games, it's more than capable) with 3D, or learn to program 3D? If play, Unity. If learn 3d, XNA.

\$\endgroup\$
3
  • \$\begingroup\$ Edited the question to make it clearer, I'd love to know which one would be your final recommendation now! thank you! \$\endgroup\$ Jul 24, 2010 at 16:20
  • 1
    \$\begingroup\$ Still a slightly tough call, whereas Unity offers more functionality out of the box (you can tell the camera to look at something and you're good to go), you can still set the matri manually as well. It's just got a lot more functionality built in, but you can still code to your hearts desire - it's not click and play. XNA on the other hand pretty much forces you to write your own render engine - that part is fairly shielded in Unity. They're both very easy to get up and running though, and both free....maybe give both a chance? \$\endgroup\$
    – Kaj
    Jul 24, 2010 at 16:50
  • \$\begingroup\$ You know what ? you're right I'll give both a shot, starting with unity! Thank you and +1! =) \$\endgroup\$ Jul 24, 2010 at 18:44
1
\$\begingroup\$

Unity will get you displaying models out of 3dsmax in seconds, and you can focus programming efforts on interaction/gameplay. You can get into more depth on the 3D side if you decide to start custom programming shaders, but you won't need to do that. You can use the scripting to do model instancing if that's interesting to you.

With XNA you can also get a model up fairly quickly, but you'll be working at a lower level, and without a visual editor for setting up scenes, if that's important to you. You'll need to personally handle setting up a camera location and the associated transforms and draw calls if your are going to do anything besides just render a basic mesh.

Either way you can use C# and you'll get stuff up on screen quickly. There isn't a single right call here, it's just a question of what you are interested in learning. Do you want something a little more nuts & bolts to learn more about the coding of 3D engines, or do you want to put together some simple games/viewers and mainly want to focus on getting your 3D art in some distributable format.

\$\endgroup\$
1
  • \$\begingroup\$ Edited the question to make it clearer, I'd love to know which one would be your final recommendation now! thank you! \$\endgroup\$ Jul 24, 2010 at 16:20

Not the answer you're looking for? Browse other questions tagged .