Jump to content

  • Log In with Google      Sign In   
  • Create Account


I don't know anything about 3D Computer Graphics/Modeling, could someone point me in the right direction?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
18 replies to this topic

#1 Bill Fountaine   Members   -  Reputation: 193

Like
0Likes
Like

Posted 19 December 2012 - 07:33 AM

People have told me I need to learn about the "graphics pipeline", and stuff like "matrices/matrix multiplication". Can anyone recommend me a resource that teaches me all that stuff? I am in the process of learning Blender3D and I apparently need to know all that other stuff.

Sponsor:

#2 Morley   Members   -  Reputation: 111

Like
0Likes
Like

Posted 19 December 2012 - 10:42 AM

Well, define "Stuff"?

For example, are you planning on programming yourself your own 3D pipeline? Or maybe even starting from scratch using the base DX10/11 SDK and going from there?

This is a very broad question.

There is a great deal of math involved in programming 3D rendering systems from scratch, but if you are simply creating 3D models, the math you need to learn and terms you need to acquire aren't as complex (mind you I think you would really benefit from learning them regardless.)

So I guess my question is, are you just asking about 3D art, or do you want to know more about the math behind 3D programming?
Morley

Aspiring programmer, modeler and game designer.

#3 Bill Fountaine   Members   -  Reputation: 193

Like
0Likes
Like

Posted 19 December 2012 - 11:06 AM

Well, define "Stuff"?

For example, are you planning on programming yourself your own 3D pipeline? Or maybe even starting from scratch using the base DX10/11 SDK and going from there?

This is a very broad question.

There is a great deal of math involved in programming 3D rendering systems from scratch, but if you are simply creating 3D models, the math you need to learn and terms you need to acquire aren't as complex (mind you I think you would really benefit from learning them regardless.)

So I guess my question is, are you just asking about 3D art, or do you want to know more about the math behind 3D programming?


mainly the stuff dealing with 3D Programming I'd think. It seems whenever I think I am learning what I need to learn, 500 different concepts come up that I didn't know about that I need to know. Learning how to model is one thing, the thing I need to learn deals with using them in games/programming. Should I ever get skilled enough at programming to get that far.

#4 BCullis   Crossbones+   -  Reputation: 1813

Like
0Likes
Like

Posted 19 December 2012 - 12:17 PM

If you want to learn about the math behind 3d graphics programming (vector spaces, matrix multiplication, etc) then you're talking about a field called Linear Algebra. Several prominent colleges put their Linear Algebra courses on youtube for free, MIT being one of them. Sometimes vector-manipulation math (things like dot- and cross-products) is also covered as part of a Calculus series (Calc 3 in my personal experience). Depends on the school where they categorize the material.

If your goal is to import 3d models into software and use them in games, then this is a field you either need to become familiar with, or find an engine that has already handled the loading and conversion of model files for you. Ultimately the model information can be black-boxed enough that you can just reference animation frames by name (i.e. "walk_cycle_1") and the underlying code does heavy lifting of interpolating and applying chained bone-weighted transforms to all the vertices in the model.

Engines do exist like that, so unless you just want to learn it because it's interesting (which is awesome) there are quicker routes to getting a game running :)
Hazard Pay :: FPS/RTS in SharpDX
DeviantArt :: Because right-brain needs love too

#5 Bill Fountaine   Members   -  Reputation: 193

Like
0Likes
Like

Posted 19 December 2012 - 12:27 PM

If you want to learn about the math behind 3d graphics programming (vector spaces, matrix multiplication, etc) then you're talking about a field called Linear Algebra. Several prominent colleges put their Linear Algebra courses on youtube for free, MIT being one of them. Sometimes vector-manipulation math (things like dot- and cross-products) is also covered as part of a Calculus series (Calc 3 in my personal experience). Depends on the school where they categorize the material.

If your goal is to import 3d models into software and use them in games, then this is a field you either need to become familiar with, or find an engine that has already handled the loading and conversion of model files for you. Ultimately the model information can be black-boxed enough that you can just reference animation frames by name (i.e. "walk_cycle_1") and the underlying code does heavy lifting of interpolating and applying chained bone-weighted transforms to all the vertices in the model.

Engines do exist like that, so unless you just want to learn it because it's interesting (which is awesome) there are quicker routes to getting a game running Posted Image


Yeah, I know I have to learn Linear Algebra, and I am working on that.

It just seems like the concepts to just get STARTED on making 3D models/programming them into games never end. I feel like I am learning what I need to learn, then it comes up that theres 5 other concepts/ideas I need to learn to get started. It just seems like it's never ending.

#6 0r0d   Members   -  Reputation: 797

Like
1Likes
Like

Posted 19 December 2012 - 01:35 PM

Yeah, I know I have to learn Linear Algebra, and I am working on that.

It just seems like the concepts to just get STARTED on making 3D models/programming them into games never end. I feel like I am learning what I need to learn, then it comes up that theres 5 other concepts/ideas I need to learn to get started. It just seems like it's never ending.

I know it can seem like that, but once you get a basic grasp of a few topics it becomes much better. Of course then, the question is what topics and where do you get that "basic" information. I'd recommend you try to find a good book that goes into 3d game programming with either OpenGL or DirectX... I'm sure there's probably several adequate ones geared for beginners.

The other way to do it is to try to find the info yourself online. Yes, it's all there, but it can be daunting to find it at the level you need.

Just find a good book and work your way through it.

#7 BCullis   Crossbones+   -  Reputation: 1813

Like
1Likes
Like

Posted 19 December 2012 - 01:45 PM

Sorry if I covered something you were already doing. I prefer to undershoot and be corrected than fire over someone's head and make them ask for an explanation.

Part of the problem might be that you're tackling multiple fields at once, based on how you phrased that. 3d modeling (the art side) has its own terminology and best-practices list, independent of the terms, concepts, and math for the code side. You can cull out a lot of the modeling portion by just focusing on the geometry part of modeling (just vertex/face/topology manipulation). Once you get more comfortable with the building portion, then you can add on UV mapping for the texture, or your 3d tool's material editor.

As for the code, this is one of the reasons a higher-level framework is suggested for beginners in 3d: your list keeps growing likely because you keep discovering lower and lower levels of code that people might bring up. Something like UDK or Unity just lets you stop at the "import model" level. Lower level stuff (like directly programming and controlling the render pipeline for Direct3D) brings its own laundry list of new concepts.

Like 0r0d mentioned, give it time. Eventually you do get a good grip on a certain threshold of information, and that'll make successive additions to your skillset easier to aquire.

Edited by BCullis, 19 December 2012 - 01:46 PM.

Hazard Pay :: FPS/RTS in SharpDX
DeviantArt :: Because right-brain needs love too

#8 Bill Fountaine   Members   -  Reputation: 193

Like
0Likes
Like

Posted 19 December 2012 - 02:11 PM

Sorry if I covered something you were already doing. I prefer to undershoot and be corrected than fire over someone's head and make them ask for an explanation.

Part of the problem might be that you're tackling multiple fields at once, based on how you phrased that. 3d modeling (the art side) has its own terminology and best-practices list, independent of the terms, concepts, and math for the code side. You can cull out a lot of the modeling portion by just focusing on the geometry part of modeling (just vertex/face/topology manipulation). Once you get more comfortable with the building portion, then you can add on UV mapping for the texture, or your 3d tool's material editor.

As for the code, this is one of the reasons a higher-level framework is suggested for beginners in 3d: your list keeps growing likely because you keep discovering lower and lower levels of code that people might bring up. Something like UDK or Unity just lets you stop at the "import model" level. Lower level stuff (like directly programming and controlling the render pipeline for Direct3D) brings its own laundry list of new concepts.

Like 0r0d mentioned, give it time. Eventually you do get a good grip on a certain threshold of information, and that'll make successive additions to your skillset easier to aquire.


Yeah, I am working with coding and (completely ignoring the 3D modeling aspect, thats just something I NOW want to get into doing) when I have wanted to start learning to do that. People have said I need a GUI, an API, I need this topic, I need that topic, it just seems like the amount of "topics I need to start making a game are never ending, and I got overwhlemed to the point I didn't know where the heck to begin.

#9 BCullis   Crossbones+   -  Reputation: 1813

Like
0Likes
Like

Posted 19 December 2012 - 02:23 PM

You don't need a GUI, not when you're just getting started in 3D programming. GUIs are for later, they're easy to lay in on top of an already existing 3d rendering system.
An API (specifically a graphics API in your case) is just a library used to do the communication with the graphics card. The most common are DirectX and OpenGL. There are hundreds of APIs for every conceivable domain.

What language are you using? You might get quicker results if I can point you towards references that teach you the basics in the context of middleware. I'll attest that quicker results mean higher, continued motivation.
Hazard Pay :: FPS/RTS in SharpDX
DeviantArt :: Because right-brain needs love too

#10 Bill Fountaine   Members   -  Reputation: 193

Like
0Likes
Like

Posted 19 December 2012 - 02:40 PM

You don't need a GUI, not when you're just getting started in 3D programming. GUIs are for later, they're easy to lay in on top of an already existing 3d rendering system.
An API (specifically a graphics API in your case) is just a library used to do the communication with the graphics card. The most common are DirectX and OpenGL. There are hundreds of APIs for every conceivable domain.

What language are you using? You might get quicker results if I can point you towards references that teach you the basics in the context of middleware. I'll attest that quicker results mean higher, continued motivation.


I am working with C++ atm.

right now I'm focusing on understanding specific C++ syntax, and OOP as a whole. I hear Allegro is beginner friendly, but I'm just focusing on being decent with C++ first.

#11 BCullis   Crossbones+   -  Reputation: 1813

Like
0Likes
Like

Posted 19 December 2012 - 02:50 PM

I'm just focusing on being decent with C++ first

If that's really the case, don't even think about 3D graphics yet. Don't even think about graphics yet. Or do, but use something like SFML, and only once you think "okay, i think I can throw together some classes now, and use a library written by someone else". That'll just be 2D graphics, but it's a great introduction to dealing with the concept of backbuffer flipping and general concepts of displaying in a render loop.

Once you get more comfortable with that, rastertek.com starts at the basics of 3d (the 3d equivalent of a "hello world" is a blank render window, followed by a single triangle). That's a Direct3D-based tutorial though.

But if you're still working on being comfortable with language syntax and programming approaches, that's not a good place to start learning 3d graphics. There's just too much foundation lacking for any of the 3d stuff to stick.
Hazard Pay :: FPS/RTS in SharpDX
DeviantArt :: Because right-brain needs love too

#12 0r0d   Members   -  Reputation: 797

Like
1Likes
Like

Posted 19 December 2012 - 02:52 PM

Yeah, I am working with coding and (completely ignoring the 3D modeling aspect, thats just something I NOW want to get into doing) when I have wanted to start learning to do that. People have said I need a GUI, an API, I need this topic, I need that topic, it just seems like the amount of "topics I need to start making a game are never ending, and I got overwhlemed to the point I didn't know where the heck to begin.

What you need to do is reduce the scope of what you want to accomplish. Sure, there are like 100 topics you'll need to learn to work as a professional game developer, but right now you just need to learn one thing at a time.

Start with a very simple project... create an app that just sets up the 3d environment (DX example: set up D3DDevice, set default render states, set buffers) and draws a box in world space. The box should be a hard-coded set of points, no texturing. Once you've learned that, learn how to move the camera around with user input. Once you do that you can try texturing, or even play around with shaders. After that you might try to learn a little about collision detection... keep your camera from going through the box. Then you can worry about a data pipeline to load 3d objects from files instead of hard-coding them.

See what I mean? You need to break down the problem into small chunks that you can bite off and digest easily, but that build on each other. Dont worry about everything that's out there, it will only overwhelm you.

"Small moves, Ellie, small moves."

#13 3Ddreamer   Crossbones+   -  Reputation: 2961

Like
0Likes
Like

Posted 19 December 2012 - 09:04 PM

Blender environment and support software such as GIMP will keep you busy learning the graphics pipeline for quite a while before you need something else, but of course there are many online sources of information in graphics in general so you need to research it. If you intend to get deep into graphics, then you need a course and/or good books on the subject. Mr. Search is very willing to help you. Posted Image

Personal life and your private thoughts always effect your career. Research is the intellectual backbone of game development and the first order. Version Control is crucial for full management of applications and software.  The better the workflow pipeline, then the greater the potential output for a quality game.  Completing projects is the last but finest order.

 

by Clinton, 3Ddreamer


#14 spiralseven   Members   -  Reputation: 132

Like
0Likes
Like

Posted 22 December 2012 - 05:50 PM

Blender environment and support software such as GIMP will keep you busy learning the graphics pipeline for quite a while before you need something else, but of course there are many online sources of information in graphics in general so you need to research it. If you intend to get deep into graphics, then you need a course and/or good books on the subject. Mr. Search is very willing to help you. smile.png

I agree with this statement. I use GIMP for making textures and bump maps, character reference layers etc.. I  like them because they're open source and fairly stable. Blender can be a bit buggy with there being so many releases and constant updates but its super powerful. The little Geico lizard is made in Blender lol



#15 Khatharr   Crossbones+   -  Reputation: 2852

Like
0Likes
Like

Posted 22 December 2012 - 11:40 PM

If you understand linear algebra then the basic idea is that there is no actual 3D space. There's just vertexes that represent primitives based on their order and the primitive type (the most common primitive type is a triangle -> 3 vertexes).  The vertexes are stored in "model space", which is what you're probably messing with in Blender if you're making a model. The pipeline uses 3 matrix transforms on your model's vertexes to get them into position for rasterization (conversion to pixel colors). The first changes the model coordinates into "world" coordinates and also applies scaling and rotation. The second rotates the world space such that the "camera" is at the origin and facing along the z axis. (Note that it's moving the world rather than the camera.) The final transform corrects the perspective, since the viewing angle creates a sort of rectangular cone where the near plane is smaller than the far plane. It basically stretches the theoretical space so that the near and far planes are the same size. This causes nearer objects to appear larger than distant ones. Once this is done it just maps the pixel positions to the near and far plane and then goes through all the primitives, checking to see if a pixel intersects the primitive being rendered. If it does then the point of intersection determines the color to place in the pixel.

 

Matrices are used to describe these three transforms because once the three transforms are set they can be multiplied together to create a single transform to apply to all the vertexes for the model, greatly reducing the number of calculations that the GPU must perform.

 

There are a lot of optimizations that exist in most renderers. The most common are probably viewport clipping, depth buffering and face culling. Viewport clipping simply means that stuff outside the viewport gets ignored, which is sensible because you wouldn't be able to see it anyway. face culling is slightly more complex, but modelers should definitely know about this one:

 

When you create a model you need to know whether to use clockwise or widdershins "vertex winding". Basically what that means is that you want the vertexes for every primitive to be either clockwise or widdershins when viewed from the outside of the model. This is because once a model is positioned for rendering the culling test gets applied. If your program is using clockwise culling then any primitive whose verts are in widdershins order when viewed from the camera position will get dropped, since they're assumed to be facing away from the camera. For instance, imagine a single triangle with verts A, B and C, defined in clockwise order starting at the top. Once the triangle is positioned relative to the camera if the vertexes still appear in clockwise order from that perspective then the triangle is facing the camera. If they've become widdershins then the triangle is facing away and shouldn't be rendered. This saves a huge amount of work for the GPU. If you're making models for someone else then ask them what winding order to use. If you're just making them for yourself then just pick an order and stick with it for all your models for that project (which one you choose doesn't matter).

 

Finally the depth buffer doesn't really have to do with modelling, but it's a good thing to know about if you're involved with rendering. Basically if you have a 640x480 viewport that you're rending to you'll probably have a 640x480 depth buffer lurking in the background. When the rasterizer finds a collision with a primitive for a pixel it stores the color value in the color buffer and it stores the z depth of the collision in the depth buffer. However, before it does this it checks that z value against the z value for that pixel in the depth buffer. If the comparison indicates that the new color is 'underneath' the existing one then the pixel doesn't get rendered. Because of this it's best to render 3D scenes from front-to-back in order to avoid as many color operations as possible (since the nearer objects will 'hide' rather than 'overwrite' the farther objects). The exception is when you're rendering something transparent, in which case it needs to be rendered after the objects behind it so that it can blend with their colors. Because of this it's good to keep in mind that transparency in models requires a bit more work for the rendering to do. It's not a huge hit but you don't want to get carried away - and let your developer know if you use transparency in a model.


Edited by Khatharr, 22 December 2012 - 11:54 PM.

void hurrrrrrrr() {__asm sub [ebp+4],5;}

There are ten kinds of people in this world: those who understand binary and those who don't.

#16 Suese   Members   -  Reputation: 110

Like
-1Likes
Like

Posted 23 December 2012 - 06:37 AM

Obviously he just wants to know how to display 3D images on the screen.   Use an engine like Unity.



#17 Nick C.   Members   -  Reputation: 165

Like
0Likes
Like

Posted 23 December 2012 - 07:22 AM

Note:
-This is my personal opinion.
-Don't read this if you're not interested in programming.

My guess would be, and I ALWAYS think that when I want to learn a new aspect of programming or anything like that: buy a book. Really, there's no better way to learn something new.
A few weeks ago I knew almost nothing about graphics programming (DirectX as my chosen API), and right now I know really, a lot. Books are written by people who are (or should be XD) very experienced in a certain field, and the books I've read were all written and explained very well, with many examples etc. The problem with learning something online is that a lot of info is widely spread on many places, and often written by "amateurs" (don't really like to use that word). So after have read some things, you may still have problems. You have to find all the info on many places, and you don't always know where. I know there are a lot of online places to learn about programming, and yes they are often good. But reading a book would be even better, and you will be spending your time more efficiently. Of course, it's still a matter of perseverance. You have to want to learn it. Because, when things get difficult, some people tend to give up.
Anyway, that's just my opinion, books may not be the best way for someone to learn something, but for me it has worked very well so far.

And to finish with, some books that may help YOU on the way (so skipping AI etc.) :)
- Ivor Horton's beginning visual C++ 2012 (I have the 2010 version, but I suppose this one will be even better xd): For the complete beginner in the first few chapters to the more experience programmer in the later chapters. This was my first book I ever read about C++, and it has helped me a lot.
- Introduction to 3D Game Programming with DirectX 11, by Frank D. Luna: I've read a big part of this, but I'm often having problems with it. It's a very nice book to start learning to program in DirectX 11 (and it covers quite a lot!), but not for the beginner. It also covers the basic math for computer graphics (especially in the first few chapters). I don't know any good books for OpenGL (I have the OpenGL superbible, but haven't read much in it yet xd).

I've also read good reviews for the following (will read them soon):
-Mathematics for 3D Game Programming and Computer Graphics, Third Edition, by Eric Lengyel
-The C++ Standard Library: A Tutorial and Reference (2nd Edition), by Nicolai M. Josuttis

That'll keep you busy for a few months or years xd. After that you can specialise in AI, algorithms, networking, ot whatever you want.

Have a nice day :)
Nick

Edit1: Oh yeah, my advice: don't use an engine linke Unity or anything like that. If you really want to learn to program, go hardcore and start from "scratch" in an API like DirectX or OpenGL ;) If you just want to make games, without knowing too much of the technical aspect, you can use an engine.

Edited by Nick C., 23 December 2012 - 09:21 AM.


#18 Cod   Members   -  Reputation: 166

Like
1Likes
Like

Posted 23 December 2012 - 02:12 PM

Check out http://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/.  The author provides a very concise introduction to the pipeline in thirteen parts.  Worth the read if you have some time.



#19 JackBid   Members   -  Reputation: 453

Like
1Likes
Like

Posted 25 December 2012 - 05:29 PM

If you want to learn 3D graphics, the best thing to do (in my opinion) is to just research it online and then follow some online tutorials. In addition, you may also want to consider purchasing a book on the topic as they are often extremely informative, helpful and NOT full of bs. This is my general rule for learning anything really, let me know how goes ;)






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS