4
$\begingroup$

I want to learn graphics on a lower level but I have no clue where to start.

I know that I will need some hard mathematics (linear algebra, vectors, matrices, transformations...) rooted inside my head. Would it be a viable and better pathway to pursue a degree in mathematics rather than one in computer science ? ... and try to somehow combine this knowledge with the rendering programming part (c++, shaders, geometry, pixels, frame buffers, image processing...) ?

I wanted to learn how to generate the data to draw using algorithms without accessing a video card or API. I think you also need to learn some assembly for this ?

Basically, I want to learn the specific math and algorithms for Computer Graphics and start from these foundations.

Would a degree in mathematics be seen as a risky option to try and enter this industry ?

$\endgroup$
6
  • $\begingroup$ When you study computer science, you can usually choose which direction you want to go in... In my bachelor's degree, I opted for "Basic techniques in computer graphics". Here, the rendering pipeline was explained and we programmed some shaders. My Master's in computer science is in the direction of computer graphics, vision and audio signal processing. Here, too, I could choose from 20 different lectures, e.g. Physics based Modeling, Computer Animation, Advanced Computer Graphics 1 and 2... $\endgroup$
    – Thomas
    Feb 13 at 7:00
  • $\begingroup$ A friend of mine is studying math, and he says that everything gets extremely complicated... He told me that the stuff he's learning is completely useless. You learn things because those things are provable. I personally can't draw any conclusions from that, but I can tell you: computer graphics is math-intensive, but studying math is way too much. You only need a small part of mathematics $\endgroup$
    – Thomas
    Feb 13 at 7:06
  • $\begingroup$ It almost sounds like you are more interested in hardware then software, so you may want to look into computer engineering. $\endgroup$
    – pmw1234
    Feb 13 at 11:51
  • $\begingroup$ Imho, neither degree is wrong. You need mathematics for different things: linear algebra for positioning and animation, analysis for light simulation, stochastic for randomness and approximations... there's a lot to cover. A mathematics degree will go way deeper, but if you were to look at newer ray tracing algorithms like Manifold Exploration, you will need a solid foundation of mathematics. If you just want to apply existing algorithms, you will need less of it. If you don't want to use an API (why?), you need to have more fundamental computer science and maybe embedded systems knowledge $\endgroup$
    – Tare
    Feb 13 at 12:14
  • $\begingroup$ I didn't want to use apis in the beginning. Partially because when I look at sculpting softwares, especially something like Zbrush, I just wanted to have some foundations to understand what magic they are using behind the curtain. I also did look at some books by Eric Lengyel, mainly "Mathematics for 3D Game Programming and Computer Graphics" and "Foundations of Game Engine Development, Volume 1: Mathematics". In my mind, there is no escape from the math. I could buy some c++ books and setup opengl later. I'm leaning towards the math degree, but I would try to use purely for computer graphics. $\endgroup$ Feb 13 at 13:47

2 Answers 2

3
$\begingroup$

As someone who has a degree in "Computer Graphics and Mathematical Modelling" and worked as a CAD/CAM/CAE developer for over 17 years. I would say 100% you want a degree in computer science rather than mathematics if you want to pursue it as a career.

Mainly...

  • You need to know how to program, and beyond basic algorithms/problem solving. Actual hands on experience with a language used in industry. Doing a maths degree, you may go over some basics about program flow and algorithms etc, and you may do some basic programs in something like C (if you're lucky, although it may probably be something like matlab). But you will probably not go into certain concepts like OO, memory, compilers, optimisations, architecture etc, all of which are important in programming no matter which CS path you go down.

  • There are many concepts and processes you will need to understand and use in the industry (source control, issue tracking, tool chains) which you will not learn with a maths degree.

  • A computer science degree will no doubt be modular, and I highly suspect there will be modules specifically for computer graphics. This is very unlikely during a maths degree.

  • Modules in computer graphics will teach you many of the applicable fundamental concepts of computer graphics as well as exposing you to actual modern day graphics programming. There are many things we used to do in the fields of computer graphics which are just not done or needed these days (software rendering, rasterisers etc), but having the skill set you get from programming/CS degree, you will find it a lot easier to do these yourself to satisfy your own curiosity.

  • When you apply for your first job in industry, not having exposure to computing may put you at a disadvantage against other candidates who do (although having a maths a degree will have other advantages... see below).

  • While yes there is overlap, overall a mathematics degree will give you more theoretical skills but also give you more irrelevant knowledge in some quite complex fields of mathematics which will not ever be applicable in computing or specifically computer graphics.

A degree in mathematics is hard, harder than computer science, but it certainly says a lot about your capability to any future employer. It would carry a lot of prestige when looking for a career in computer graphics/software, and any interviewer/employer worth their salt would understand that you would probably be more than capable in the role with a maths degree. However, it also suggests limited exposure to fundamental concepts and processes in the software development world, and thus longer prep time to get you functioning efficiently. Problem solving and understanding concepts is just a part of professional software development, deadlines are a real thing and pressure is a real thing. You need a lot of discipline with processes, patience (bug hunting) and in many cases you need to find solutions which may not always be the most elegant or mathematically pure way of doing things, requiring you to be willing to make exceptions where required to get a solution.

Understanding strong mathematical conecepts is one thing, throw in things like floating point precision error and the fact that real-world data is never like the canned examples you get in scientific papers, and you soon realise that a deeper knowledge of programming with skill sets that are specific to programming (and nothing to do with maths) are required to actually implement this understanding into working solutions. These things you would learn with a CS degree rather than a maths degree.

I wouldn't have been able to do my first job without the degree I had as it gave me all the tools, skills and basic understanding I needed to do the job, but can honestly say I learnt more in the first 3 years of working in industry, and relevant experience, to doing the job that I do (and still love after all these years). I still learn today and suspect will keep learning for the rest of my career. In this respect, it's definately not impossible to have a very sucessful career in computer graphics without a CS degree (or more specifically a maths degree), and having a maths degree will keep more doors open for you, but ultimately, to get there faster, a CS background would be more advantageous.

Degree content may be very different these days (got my degree 20+ years ago), so I can only guide/suggest based on my academic experience. I would suggest also looking in to the modules that would be avaliable to you to fully understand what you would be doing, and then you can be better informed if they would be applicable to what you want to do.

For the record, my maths modules were (iirc)...

Calculus (many modules, higher dimension calculus, vector calculus etc), Geometry (Trigonometry), Groups and Set theory (Graphs, Cyclic groups etc), Trigonometry, Logic and flow, Statistics and Probability (Stochastic, dsitributions etc), Numerical analysis and methods (Newton, Monte Carlo, Fuzzy etc), Fluid Dynamics (losts of ODE, PDE, Fields etc), Number theory (Primes etc), Cryptography... plus others which I can't remember tbh...

And out of them, the areas of maths that I have used the most is geometry by far, with the rest taken up by numerical methods, fluid dynamics (I've done CFD work in the past) and more probability/statistics (tensors) these days...

Over my career, I always specialised more in the computer graphics and geometry realms, however this alone probably hasn't taken up half the time at work. Software architecture and other general stuff (bug fixing, not just in the realm of graphics, but anything) has also been a big part of my time at work.

I hope I haven't put you off with some of the things I have said. I can honestly say that software development (computer graphics) is a very rewarding career and feel priviledged that I made the career choice that I did all those years ago as I still love my job every day. The 'ups' far out-weigh the 'downs'.

$\endgroup$
5
  • $\begingroup$ Most of what you listed regarding the CS part applies to increasing your prospects of getting a software engineering job rather than specifically the study of graphics. I don't think most if any of that would be useful for "Basically, I want to learn the specific math and algorithms for Computer Graphics and start from these foundations." The math modules you mentioned are nice and are essentially applied math. In EU you cannot get a bachelor degree in CS without having to trudge through all the core CS courses I mentioned in my answer - all of which are irrelevant for graphics. $\endgroup$
    – lightxbulb
    Feb 14 at 10:26
  • $\begingroup$ @lightxbulb I'm in the EU, and got my degree from a UK university. My modules consisted of generic CS and maths (both applied and theoritical) as well as the specialisations of my degree (CG). A decent degree program would not limit you to purely computer graphics or purely software engineering as there is much cross over in industry. While there are jobs that are purely CG, you would be hard pressed to find them and would be limited to larger softwrae houses which have dedicated development teams for such fields. $\endgroup$
    – lfgtm
    Feb 14 at 10:48
  • $\begingroup$ Even then it wouldn't be 100% graphics coding/problem solving all the time and professional CG developers are still 'programmers' and still have to adhere to the many processes and practices that all software developers/engineers use in the industry. Granted if it's just about leanring fundamentals of the maths used the majority in CG then use, Vector/Matrix/Geometry all the way (but I would say there are other mathematics fields which come into play as well), however the question asks about which degree would beneficial for getting a job in CG industry. $\endgroup$
    – lfgtm
    Feb 14 at 10:49
  • $\begingroup$ I could be wrong, but I think that the core CS courses I mentioned are mandatory in any EU bachelor CS degree. Something to do with universities having to be interoperable and the credit system etc. It is different for a masters degree of course, but there again the classical CS degree would be focused on core CS disciplines, while graphics/image processing ones are typically termed visual computing (at least in Germany) - it's more blurry for masters however. As I noted your answer is geared more towards becoming a "CG developer" (or I would say any kind of software developer)... $\endgroup$
    – lightxbulb
    Feb 14 at 11:54
  • $\begingroup$ There's nothing wrong with that. I just wanted to make the OP aware of it. Because he seems to have slightly contradictory requirements in the question. Learning graphics for the sake of it, and learning graphics to be a CG software engineer that is likely to get hired are different goals. I typically suggest trying out the first - instead of putting tons of effort into the latter. It could very well turn out that the person is not interested in graphics after trying e.g. writing a software renderer or a ray-tracer. I don't see graphics as being specifically about the programming. $\endgroup$
    – lightxbulb
    Feb 14 at 11:58
2
$\begingroup$

I studied computer science with an emphasis on mathematics for my bachelor degree and computer science with an emphasis in computer graphics, signal processing, numerics for my masters. Most of the core computer science courses (automata, compilers, algorithms and data structures, databases, software engineering, etc.) are entirely irrelevant to anything computer graphics and signal processing related.

What is used in computer graphics is a very specific subset of mathematics and bits and pieces of physics, so also my pure math courses were useless for that. You would likely be better served by an applied mathematics or physics degree, but to be honest one doesn't require a degree to do computer graphics.

If you don't care about APIs I would suggest starting with: ray-tracing in one weekend to familiarise yourself with ray-tracing and maybe https://github.com/ssloy/tinyrenderer to familiarise yourself with software rendering. After ray-tracing in one weekend you can go through the other two books and then jump onto Veach and pbrt. After the software renderer I mentioned, or along with it, you could try to learn an api, e.g. https://learnopengl.com/

As far as the CG industry goes - unless you meant academia or R&D, then the amount of mathematics involved is much more limited than what you would find in Veach and even pbrt.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.