Aspiring A Career In Computer Graphics Programming? Know The Basics Now
Perhaps Michael Crichton’s 1990 sci-fi novel “Jurassic Park” about cloned dinosaurs would never be a 1993 blockbuster Steven Spielberg film of the same title without the aid of computer graphics programming.
In a book, any seasoned writer can skillfully describe how a Tyrannosaurus rex appears while escaping from a cage, devouring one hapless human being, and chasing a moving vehicle.
In a movie, how can you show a T. rex doing all that without computer-generated imagery (CGI), aka 3D imaging?
CGI, a kind of technology where images and special effects are created, is just one of the wonders of computer graphics.
Not only in the field of entertainment (movies, TV, video games,) is computer graphics programming applied but as well as in architecture, art, engineering, medical field, and photography, among several other areas.
COPYRIGHT_WI: Published on https://washingtonindependent.com/w/computer-graphics-programming/ by William Willis on 2021-12-27T06:48:59.688Z
In his 2020 LinkedIn article, Indian developer Raj Madhuram identified some of the areas that beginners need to study when learning computer graphics programming:
(a) 3D graphics
(c) data visualization
(d) image processing
(e) ray tracing
Madhuram, the former principal software engineer at Yahoo!, also underlined the importance of math in computer graphics programming. He said that beginners need to study:
(a) analytic geometry or coordinate geometry
(b) linear algebra
In addition, Madhuram said that for “more complex” areas of computer graphics programming (e.g, shaders, render pipelines), beginners must have a “deep knowledge” of the following:
(b) computational geometry
(c) computer graphics algorithms
Specializing in computer graphics, Swedish software engineer Eric Arnebäck offers the following advice in his website (erkaman.github.io):
First Advice: “Start with ray tracing and rasterization.”
For beginners, Arnebäck suggests that they initially stay away from modern graphics API (Application Programming Interface), such as WebGL, Vulcan, OpenGL, Metal, and Direct3D.
Describing the above-mentioned graphics APIs as “not beginner friendly,” he said that they tend to “turn off” many first-time learners.
For Arnebäck, those who are new to computer graphics programming should instead begin writing a ray tracer and a software rasterizer. It will be easy for them to do so because, according to him, those two are just “simple algorithms.” Therefore, writing those two will be a “good” place to start.
In addition, the process of writing those two will expose beginners to several essential computer graphics concepts, including the following:
(b) cross products
(c) dot products
(d) transformation matrices
For writing a ray tracer, Arnebäck told beginners to read books by American computer scientist and computer graphics researcher Peter Shirley, such as the following:
(a) “Ray Tracing in One Weekend” (2016)
(b) “Ray Tracing: The Next Week” (2016)
(c) “Ray Tracing: The Rest of Your Life” (2016)
(d) “Realistic Ray Tracing” (2000)
As for writing a software rasterizer, Arnebäck suggested the following online/offline sources:
(b) “Rasterization in One Weekend, Part I,” a 2018 WordPress blog post by Tayfun Kayhan, a Turkish graphics software engineer at Intel Poland.
(c) “Rasterization: A Practical Implementation” by Scratchapixel 2.0
(d) “Computer Graphics from Scratch: A Programmer's Introduction to 3D Rendering” (2021), a book by Gabriel Gambetta, a Spanish software engineer at Google Zurich. A preview of the contents of the book is available online.
Second Advice: “Learn the necessary math.” The required math is linear algebra.
Listed below are some of the specific areas in computer graphics programming to which linear algebra plays a role:
(a) calculating intersection (usually between a ray and a plane/ sphere/triangle, said Arnebäck)
(b) cross product or vector product
(c) dot product or scalar product
(d) homogeneous coordinates or projective coordinates
(e) spherical coordinate system
(f) matrices (translation matrix, scaling matrix, rotation matrix)
(g) orthonormal basis of a matrix
(h) quaternion number system/quaternions
Special mention to these three (Arnebäck stressed that beginners should study the topics mentioned below thoroughly):
(a) column-major order and row-major order (geometry)
Arnebäck said that based on his experience, these two cause several beginners to make mistakes.
(b) modeling a camera (perspective transformation matrix and view matrix)
This topic is one that many beginners “struggle with,” according to Arnebäck. So, he wants beginners to study it “carefully and in depth.”
(c) transformation matrix
As graphics programmers usually deal with 4x4 matrices, Arnebäck reminded beginners to skip studying large matrices.
In studying linear algebra, Arnebäck recommended the following references:
(a) “The Graphics Codex” (2021), an eBook by MIT alumnus Morgan McGuire, chief scientist at Roblox and former research director at NVIDIA.
(b) “Immersive Linear Algebra” (2017), an eBook by J. Strom, K. Astrom, T. Akenine-Moller (available online via Immersive Math)
(c) “3Blue1Brown,” a YouTube channel (in the Playlist, look for “Essence of Linear Algebra”) by Stanford alumnus Grant Sanderson
Third Advice: Sharpen your skills by doing “good projects.”
Arnebäck advised beginners to do the following “good projects” to kickstart their study of computer graphics programming:
(a) Do heightmap rendering.
(b) Implement the following: gamma correction, normal mapping, particle systems rendering, specular shading, and view frustum culling.
(c) Learn spot lights, point lights, and directional lights.
(d) Through instanced rendering, render several meshes.
(e) Through mesh skinning, do animated meshes.
(f) Using cube maps, do reflection rendering.
(g) Using shadow maps, do shadow rendering.
(h) Using spherical coordinates, create and render a sphere mesh.
Fourth Advice: Learn debugging tools (debuggers) for GPU debugging.
For beginners drawing their first triangle, Arnebäck “strongly” suggested beginners to learn debuggers and specifically mentioned NVIDIA Nsight Graphics and RenderDoc as examples.
Careers.StateUniversity.com describes graphics programmers as “technical experts” who create “specialized computer programs exclusively applicable to complicated 2D and 3D graphics.”
A bachelor’s degree in computer programming (or other related fields) is the minimum requirement to be a professional computer graphics programmer, according to the said website.
It added that one may have “an edge” when applying for a job if he/she completed a certificate (or a two-year degree) course in computer information systems.
A graphics programmer must be knowledgeable in:
(b) graphics user interfaces (GUI)
(c) operating systems
(d) programming languages
(e) systems programming
Aside from the technical skills, a graphics programmer should also exhibit great interpersonal skills, which include skills in verbal and non-verbal communications. Careers.StateUniversity.com reminds future graphics programmers that they will frequently work in groups; so, relational skills are important.
In 2020, Into Games, a computer games company in England, interviewed Howard Price – a former game programmer at Sony Computer Entertainment Europe – on how he became a graphics programmer.
When asked about “the key skills needed” to carry out his current role as a principal programmer at the U.K.-based video game company Codemasters, Price mentioned the following:
(a) C programming
(b) C++ programming
(d) vectors (4x4 matrices, cross products, dot products, points)
(e) “good” and “clear” communication skills
In the U.S., as of December 8, 2021, the range for the annual base salary (gross income before taxes) of a graphics developer is $36,000 – $91,000, according to PayScale.
The average base salary is $52,342.00 per year.
For ZipRecruiter, a graphics programmer’s salary range is $80,000 – $190,000/yr. (average base salary per year: $133,085) as of December 19, 2021.
Below are the five highest-paying jobs related to computer graphics programming in the U.S., according to ZipRecruiter (exact job title is given):
(1) Graphics Software Engineer – $126,332 per year or $10,528 per month
(2) Senior Graphics Programmer – $123,810/yr. ($10,318/mo.)
(3) Graphics Engineer – $119,899/yr. ($9,992/mo.)
(4) 3D Graphics Software Engineer – $112,217/yr. ($9,351/mo.)
(5) 3D Graphics Programmer – $105,072/yr. ($8,756/mo.)
For job search website Glassdoor, the range (as of December 25, 2021) is also higher than what PayScale reported: $61,000 – $121,000/yr. (annual average base salary: $86,148).
In November 2021, ComputerScience.org listed the different computer programming languages used by different industry professionals and in some major companies.
Here they are:
C++ (Adobe Software, Amazon, Firefox, Google)
C# (Hewlett Packard, Microsoft Intel)
C Language (Apple, Cisco, Microsoft, Oracle)
HTML or HyperText Markup Language (Apple, CareerBuilder, CyberCoders)
Java (eBay, Eurotech, V2COM)
Objective-C (Apple, CyberCoders)
PHP or Hypertext Preprocessor (CyberCoders, Facebook, Yahoo!)
Python (DropBox, Google, Instagram, NASA, Pinterest, YouTube)
Ruby/Ruby on Rails (Github, Google, Motorola, Scribd)
The top 10 programming languages used worldwide, according to data published by Statista in August 2021, are the following:
(2) HTML/CSS (56.07%
(3) Python (48.24%)
(4) SQL (47.08%)
(5) Java (35.35%)
(6) Node.js (33.91%)
(7) TypeScript (30.19%)
(8) C# (27.86%)
(9) Bash/Shell (27.13%)
(10) C++ (24.31%)
Built In, an online community for tech companies and startups, published in July 2021 the new programming languages that developers may need to know.
Functional Languages – Elixir, Elm, PureScript, Swift
Procedural Languages – Go
Object-Oriented Languages – Dart, Pony, TypeScript
Others – Hack, Julia, Kotlin, Nim, OCaml, Python 3, Reason, Red, Rust
Most Popular Programming Languages 1965 - 2019
According to Indian career website TimesJobs, those new to computer graphics programming should learn these seven programming languages:
Based on One’s Career Plan
Coding bootcamp Fullstack Academy enumerated on its website what programming languages should be learned depending on one’s interest or choice of profession.
(c) Desktop Applications – Go, Python, Scala
(d) Game Development – TypeScript, Unity
(f) Systems Programming – Go, Swift
The University of California, Berkeley, Extension forecasted that the following programming languages will be the “most in-demand” ones in 2022:
(b) Python (app development, back-end development, data science)
(c) HTML (web documents, website development and maintenance)
(d) CSS (web documents, website design, website development)
(e) Java (app development, e-commerce, finance)
(f) SQL (business management, database management, sales reports)
(g) NoSQL (business management, database management, sales reports)
(h) C# (desktop/web/mobile apps, game development, virtual reality)
(i) Rust (web browsers, operating systems, virtual reality)
(j) Perl (GUI development, network programming, system administration)
(k) Go (audio and video editing, Big Data, system/network programming)
With “Jurassic World: Dominion” coming out in 2022, the public can see how computer graphics programming achieves the impossible. It will once more resurrect some animals – on the big screen, at least – that became extinct some 65 million years ago.
Of course, graphics programming doesn’t only concentrate on creating special effects.
In his November 2021 article for ReadWrite Labs, Nate Nead, CEO of software consulting company DEV.co and a member of Forbes Business Council, wrote that in the coming years, programming languages will continue to evolve.
That’s why for those who are considered beginners in the world of computer graphics programming – as well as the seasoned ones – Nead’s advice for them is to “keep challenging” themselves through education.