What should I do or Where should I begin to become a good computer graphics engineer/programmer?
-
I've a bachelor degree in Computer Science and Engineering and have enrolled for a masters degree, I've literally zero drawing skills. Are all graphic engineers good at drawing? If yes what should I do to improve my skills? I had done a beginners course on Computer Graphics during my bachelors but it was not rewarding as I did not grasp most of the core concepts. Which book should I start with to get the basics and How can I improve from there?
-
Answer:
You don't need to be good at drawing, though having some artistic training or ability can help if you want to go in to entertainment. At both Disney and Dreamworks we had engineers, and then artists that were engineers. (The latter was paid higher, but we needed both.) If you are going to be a graphics programmer, you're fine learning OpenGL and DirectX. One of the most basic types of programs to create is something that programmatically creates and displays geometry (like a sphere) and lets someone rotate it with the mouse. Then you can add textures and animation. This would be a good first project. If you want to be a graphics engineer, you're going to need to understand graphics at a much deeper level than either of those APIs. You'll need to understand what those APIs are doing to visualize formulas and data sets. The good news is today there are a number of open-source projects you can learn from. Pixie is one such project I would recommend. It's a photorealistic renderman-compliant renderer. http://en.wikipedia.org/wiki/Pixie_%28renderer%29 If want to work on feature films, knowing about RIBs and Renderman shaders (via Pixie) would be useful. Blender is an open-source 3D animation package which would also be helpful. http://en.wikipedia.org/wiki/Blender_%28software%29 LuxRender is an OSS hardware-accelerated physically-based renderer. http://www.luxrender.net/en_GB/index POV-Ray is an OSS raytracer (that has been around forever) http://en.wikipedia.org/wiki/POV-Ray There's also a OSS software-based implementation of OpenGL called Mesa http://www.mesa3d.org/ If you need a very simple introduction to 3D Computer Graphics, there's an old book called http://www.amazon.com/Black-Art-Game-Programming-High-Speed/dp/1571690042/ref=cm_cr_pr_product_top Chapters 10 - 17 cover, in very basic, simple details, the fundamentals of geometry and scanline rendering. The book was written for a completely different era of computer graphics, however, if you're having trouble with core concepts (I'm guessing from "Computer Graphics: Principles and Practice" a.k.a "the Foley-Van Dam"?), this book will provide you with the foundation, written for hobbist programmers in very simple terms. There may be other such books that are more modern, but this was the book when I was learning CG. At $3.00 for a used copy it's a reasonable buy.
Pat Roberts at Quora Visit the source
Other answers
I will answer assuming you are talking about graphics programming. Graphics programming is about rendering a 3D scene with shading applied to it. There are two graphics APIs which can be used to write such programs, OpenGL and Direct3D. Pick any of these two APIs (however, underlying principles are same for both APIs), and start programming. You will find a lot of online tutorials that can guide you to write basic programs. Start with a "Hello Triangle" program and move on to render a cube. Then, there are shading techniques like gouraud shading, phong shading, etc. Try implementing those also. Once you are comfortable with the basic stuff, you are ready to move on to a little advanced techniques like shadow mapping, SSAO, etc. EDIT: For OpenGL API, OpenGL Programming Guide is a nice book. For in-depth understanding of real time rendering, Real Time Rendering, 3rd Edition is a great book.
Chirag Varde
I think it depends on what you want to do. Chirag's answer is a good one if you're interested in doing games and/or game engines or interactive systems. But there is little utility to OpenGL (and none at all to Direct3D) if you're interested in doing something like visual effects for film. In that case, you will want to learn a system like Renderman for imaging and/or one of the scripting systems built into interactive 3D systems (back in the day, the big one was MEL which was the modeling language built into the Alias system. Your mileage may vary). But in the end, the challenge is really not the programming languages or APIs. It's really just having (or developing) the ability to think in spatial terms, being able to visualize things in 3D space and implementing things based on that understanding. I spent almost 25 years doing computer graphics of all kinds, and that's what I really saw people struggle with. From my experience, about 30%-40% of the population will get there. The rest probably wont.
Peter de Vroede
My advice, write a raytracer from scratch. It has such a shallow learning curve and you are constantly rewarded with better and better images, also debugging is very visual. You will learn a lot about vectors, matrices, lighting, physics, data structures/algorithms, optimisation techniques (BVH, kd trees, BSP, octrees, etc). You can also get into making it realtime, which is a great challenge and will lead you into GPU programming. A lot of what you learn will be useful for other fields, such as games or medical imaging. There is a good beginner article here: http://flipcode.com
Dale Thomas
No. We have artists to do our artwork :) WHile it helps to be able to throw together "programmer art" for prototypes, its not essential. Yo can either get proto art from your artists or scrounge it on the net. I do recommend at least one intro design course as it will teach you language that your artists use and make communication easier. Im not sure why you didn't grasp the graphics coruse concepts-- its all math. Mostly Trig for 2D and Vector Algebra for 3D. Id think as an engineering major you would have had vector algebra, yes? if not, you need it.
Jeff Kesselman
Writing dots, picking a color, alpha color layer, copy-and-paste in Adobe Photoshop is enough. More important skill is making a good relationship to graphics artists. Don't focus to your portfolio. Even though you are writing an app which show a simple mesh object with texture and a directional light, it is more worthy if you made it from the scratch: your own model file format, your own simple model exporter for 3dsmax or maya and your own simple renderer (using Direct3D, OpenGL API directly, or your own software renderer). Regardless of which API you use, deep understanding of 3D graphics mathematics is more useful. It allows you understand harder technologies well. I have seen many programmers who cannot do anything other than copying and pasting shader code from books or googled results. If you have strong knowledge of 3D graphics theory, then you can create your own beautiful techniques.
Hyunjik Bae
Related Q & A:
- How to become a good programmer in C language?Best solution by Quora
- What should I get my boyfriend that I have been dating a year?Best solution by Yahoo! Answers
- Where do I start to become a model or commercial actress?Best solution by Yahoo! Answers
- Where should I study to be a medical computer programmer?Best solution by Quora
- Where to buy a good cheap graphics card in India?Best solution by Yahoo! Answers
Just Added Q & A:
- How many active mobile subscribers are there in China?Best solution by Quora
- How to find the right vacation?Best solution by bookit.com
- How To Make Your Own Primer?Best solution by thekrazycouponlady.com
- How do you get the domain & range?Best solution by ChaCha
- How do you open pop up blockers?Best solution by Yahoo! Answers
For every problem there is a solution! Proved by Solucija.
-
Got an issue and looking for advice?
-
Ask Solucija to search every corner of the Web for help.
-
Get workable solutions and helpful tips in a moment.
Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.