3D Math Primer for Graphics and Game Development (2011)
gamemath.com
gamemath.com
The problem was about vertex welding. Some books, like Real-Time Rendering, only mention the N log N solution.
I was annoyed after the interview and thought, which book would I have had to read to get this question right? The only 2 books I could find that had the optimal answer were the 1st edition of this math book and Real-Time Collision Detection.
I suppose if I was smarter I could have figured out the "bucket" trick. I find interviews too stressful to think clearly.
I've forgotten more than I know, but I know where to find it.
For many problems, someone tackling it might not even understand that there is a problem, and might have no clue where to start searching for answers.
I've seen many developers who burn a crazy amount of hours by going down the wrong path, and then try to StackOverflow or Google their way out of the mess they initiated. It takes experience (either gained or learned) to avoid such traps.
Then again, it really depends on the job. The interview question suggests this was not for a CRUD job, though :)
Another question was about some low level assembly performance instruction trick. Afterwards I did the same thing and tried to figure out which text book I would have had to read to know the answer. I only found one Computer Architecture book that mentioned the instruction and that wasn't the book I read in university.
For my first 3D game dev job I just turned up with a floppy which had my 3D engine on it and got them to stick it in a PC. That was all that it needed to get hired. That and be incredibly naive about salary negotiations :D
I also turned down a possible position at Argonaut at Star Fox time. I got that one by arguing repeatedly with Jez San on Usenet lol
A close sibling of this mentality lives in academia as well, manifested as that professor who bases 50%+ of one's grade on the final. Also, pass/fail filtering exams (and the cultures that endorse them) generally, such as the MCAT.
This was less true for my Master's and is generally less true for non STEM.
I kind of liked it tbh
Meanwhile I wouldn't even know where to start if asked such a question. Is this a tech artist or animation programmer position?
Thanks!
Chapter 12 of Real-Time Collision Detection has a section on vertex welding.
The 1st edition of 3D Math Primer has it in Chapter 14.4.2: Vertex Welding.
If you want to merge vertices that are within WELD_EPSILON then you can create a 3D grid of cells with cell sizes being at least as large as 2*WELD_EPSILON and put each vertex in its cell. For each cell, you only need to check the 8 neighboring cells to see if the vertex should be merged with a nearby vertex.
The worst case could be worse than O(N) if most of the vertices end up in the same grid cell but don't require merging.
One day though
"Punching above your weight" and taking on an experimental or otherwise complex game design for a game development project is a good way to learn, but it can be frustrating and you can get burned out when you run into unforeseen design and implementation issues. I think this is the way most people go about independent game development, and it's how I started out when I was much younger, too. "Punching below your weight" and choosing a smaller-scoped project—ideally one with a predefined and tested design—is extremely underrated. Unless you've done something like this many times before, it might seem "beneath you" (especially if you have some ideas of the ideal long-term game project you want to work on that you're excited about), but it's actually a great way to solidify your skills (especially your design skills, as you play around with modifying an existing game design once you've implemented the basics of it), and prove to yourself that you can finish something you set out to do. Plus, in the process, you might find something unexpected in terms of either tech or design that you can take with you to your next "real" project.
I'd also advise it for anyone getting into ML or LLMs, the intuition it can help you build up around the linear algebra stuff like vectors and matrices is very helpful for understanding what's going on in ML.
A lot of the math for 3D graphics programming uses the concepts of affine spaces/transformations since standard 3x3 matrices don't have enough information to support translation/projection. I had no clue about this branch of math at all until I started learning graphics programming--in fact I think graphics programming requires you to learn the most math of just about any discipline of computer science outside theoretical computer science. The amount of math you need to truly "understand" path tracing is immense.
Me: *becomes 3D game developer, has to write 3D entire 3D engines from scratch*
They always say school is wasted on kids :D
Even the posted primer suggests you can skip the section that mentions complex numbers.
What do you use them for?
If your gripe is over programming languages not having support for 3D math, then I think that should be expected. Most languages try to keep their standard libraries small, and their built-in types smaller. A language that has built-in support for such things would be incredible niche. Maybe JAI is what you're looking for? I'm not sure if that even contains built in support however.
however it can be found at anna's archive
This is the direct link to the online content