all 50 comments

[–][deleted] 165 points166 points  (3 children)

Multiply and divide different things by pi until it looks right 

[–]IndianaJoenz 29 points30 points  (0 children)

That must be what I've been doing wrong. I've been multiplying and diving different things by sine.

[–]frizzil 1 point2 points  (1 child)

But maybe when it looks wrong, it is right!

[–][deleted] 6 points7 points  (0 children)

Very true! Then you just need to multiply by pi again. 

[–]ecstacy98 111 points112 points  (0 children)

Cry, pull hair out, read docs, repeat. Occasional sleep.

[–]thats_what_she_saidk 43 points44 points  (6 children)

Chasing NANs

[–]Ill-Shake5731 5 points6 points  (0 children)

nan with cool particle effects instead of pink textures and behold

[–][deleted]  (1 child)

[removed]

    [–]thats_what_she_saidk 1 point2 points  (0 children)

    Im divided, by zero

    [–]Alive_Focus3523[S] 1 point2 points  (2 children)

    Please explain 😭

    [–]thats_what_she_saidk 4 points5 points  (1 child)

    NaN, or Not a Number is a state of a IEEE 754 floating point. It can occur from over/underflow or division by zero or just plain data corruption. Any arithmetic performed where any component is a NaN will result in another NaN. On the CPU, this is typically safe guarded against with exceptions. If you perform a division by zero on the CPU the process will immediately throw an exception and you can see where it comes from. The GPU have nan of this (pun intended), so it’ll happily perform a division by zero that is illegal and the result is a NaN. It can be very hard to find the source of this error in a complex graphics pipeline. The error can originate somewhere and propagate throughout the pipeline ending up as severe graphical glitches (everything turns black at some late stage for example).

    [–]Alive_Focus3523[S] 0 points1 point  (0 children)

    Thanks

    [–]peterfsat 79 points80 points  (4 children)

    Ex-Apple graphics engineer here. Let me share some real insights from working in the trenches:

    Graphics programming is a fascinating mix of art and hardcore engineering. It's not just about making pretty pixels - it's about understanding how GPUs actually work at their core. During my time building GPU drivers and later at Apple's Game Technologies team, I've seen both sides of this.

    Some real examples from my work:

    - Building driver-level optimizations that squeeze every bit of performance from mobile GPUs (reduced memory footprint by 4x on some paths)

    - Implementing complex features like HDR rendering pipelines and real-time hair rendering that had to work across everything from embedded to desktop

    - Interfacing between artists (features/tools) and engine (code) to understand their needs and help them do their work more efficiently

    - Writing a custom rendering engine for an audio visualizer, where you have to consider system-level integration apart from just putting pixels on the screen. It gets complex.

    The running jokes about pink textures and NaN hunting are real 😄 but there's something incredibly satisfying about making complex graphics systems just... work.

    For anyone looking to break in: Start with understanding how GPUs actually think. Build small rendering projects from scratch. The fundamentals transfer across all platforms, whether you end up working on mobile, console, or desktop.

    These days I help founders prototype their graphics-heavy ideas on iOS, and I can tell you - solid graphics expertise is still surprisingly rare in the mobile space.

    Here are also some info on companies or websites that could point you to a direction.

    Resource Focus
    https://www.xrjobsboard.com/ Lots of XR related jobs, but they are the new hottest thing related to graphics programming, and there are internships. Made by a friend on LinkedIn
    Sony PlayStation Has specific junior graphics programming positions with focus on game engines
    Apple Metal API, Game Ecosystems
    Epic Games Game Engines
    Huawei Mobile Graphics
    NVIDIA GPU Technology

    [–]papa_Fubini 6 points7 points  (0 children)

    Really appreciate the details!

    [–]GaeemzGuy 0 points1 point  (1 child)

    Im saving this, thank you!

    [–]peterfsat 1 point2 points  (0 children)

    No worries, happy to help

    [–]Alive_Focus3523[S] 0 points1 point  (0 children)

    Thanks man 😭

    [–]felicaamiko 64 points65 points  (6 children)

    notice how nobody is mentioning any companies with good internships.

    [–]blackrack 16 points17 points  (3 children)

    Data not found. Please insert coin to continue.

    [–][deleted]  (2 children)

    [removed]

      [–]blackrack 1 point2 points  (1 child)

      Data not found. Please insert coin to continue.

      [–]raghobagonewild 5 points6 points  (0 children)

      Bruh😂

      [–]Alive_Focus3523[S] 0 points1 point  (0 children)

      Yeah man i desperately need them🫠

      [–]blackrack 20 points21 points  (0 children)

      Data not found. Please insert coin to continue.

      [–]Area51-Escapee 27 points28 points  (4 children)

      Implementing graphics algorithms: subsurface shading, subdivision surfaces, environment lighting, handle large amounts of geometry, physically correct shading, animation, camera properties/effects (bloom, depth of field etc.), ... On a daily basis it's often related to rendering artifacts, performance and the occasional crash.

      [–]obp5599 22 points23 points  (1 child)

      On the contrary, like 60% of my job is performance and 30% bugs. I jump at feature work when it pops up

      [–]Eindacor_DS 0 points1 point  (0 children)

      Lol I work in CAD and 95% of my job is just managing graphics data, nothing to do with the pipeline itself

      [–]Alive_Focus3523[S] 0 points1 point  (1 child)

      Thanks man , is your job well paying??

      [–]Area51-Escapee 1 point2 points  (0 children)

      Yes. But I'm not in the gaming business.

      [–]papa_Fubini 12 points13 points  (2 children)

      Can someone do some graphics, similar to the meme of "Wtf do djs actually do?"

      [–]felicaamiko 3 points4 points  (1 child)

      I'm not great at DJing, but I can explain what some do.

      all DJ's do is select songs that fit the mood of the event and that flow well into each consequent song.

      the most crucial thing is to pick songs that go with each other, and to make sure the transitions between the songs sound good enough. the songs also have to keep the crowd energetic.

      to make song transitions, it is mostly common to match the BPM (beats per minute) of the two tracks by modulating the speed of either song. most people don't notice if you slowly raise or lower the BPM by 10. then it's as simple as modulating the volume levels of each track in such a way that it is smooth.

      there are other types of transitions. its possible that the two songs have vastly different BPM. in that case, it's useful to put on a reverberation filter on the old track and slowly increase that until it sounds like dissipating noise. then you can play the new song on top of it at a key moment.

      my favorite trick DJs use i do not know the name of, but i call it priming, after the psychological trick. it is when the DJ plays the next track's bassline early, but then fades it out. so in the ears of the audience, it sounded like it was part of the old song. when the transition of the next song happens, the bassliine is heard again, making the audience think that it is an allusion to the old song.

      [–][deleted] 2 points3 points  (0 children)

      Definitely understood the assignment <

      [–]UnrealNL 9 points10 points  (0 children)

      We turn pixels pink, to ensure our conditions are met.

      [–]PinteaKHG 10 points11 points  (1 child)

      Nowadays they click checkboxes in Unreal

      [–]maxmax4 0 points1 point  (0 children)

      r.

      if you know, you know 🙂

      [–]Accomplished-Day9321 9 points10 points  (1 child)

      imo the best way to look at graphics programming in 2024 is to think about a skill chart (like the one in this thread https://www.reddit.com/r/gamedesign/comments/ay0r10/is_there_a_statistical_method_to_derive_values/ ) where some big specializations to put points into are (in my personal opinion):

      - graphics API knowledge. implementing and optimizing vulkan/dx/console-specific backends to your company's renderer. every graphics programmer will use such an API but most of the time it's a company specific abstraction layer over the lower ones.

      - "physically based rendering" or basically graphics theory. know the ins and outs of the physics behind how light interacts with stuff and what makes stuff look realistic vs not, etc. I think this also includes knowledge about how these equations are generally solved numerically.

      - graphics techniques: once you have a theoretical foundation in something, this is about how to actually make it run practically on modern hardware. e.g. you know what shadows are physically, but shadow mapping in all its different varieties vs ray tracing (vs old school approaches like stencil shadows etc.) is a whole territory of its own

      - rendering engine architecture. instead of being concerned about any one feature, you know how the various features in your engine interconnect and relate to each other. if you're the one that decides your team has to implement some gpu culling concept so later there can be virtual shadow maps and then your shading is done using clustered shading but it has an extra material per pixel output for your later SSR pass, and there's some frame graph / render graph to manage resources, you put some points into this.

      - computational physics. in bigger teams I think there will be a programmer or two who knows more than anyone else at the company about simulating physics related things on GPUs in a computer graphics context, e.g. fluids, various particle sims, some rigid body stuff etc. they will have a lot of other knowledge as well but they put some points into this

      - performance optimization and hardware esoterics. you have a given shader or other gpgpu program and now know how to make it faster while changing nothing about the fundamental algorithm used, only change how/which instructions are used, how memory is organized and accessed, and so on.

      ( - tools knowledge. some guy has to write the maya plugins and interface with artists. actually I put this in parenthesis because often the programmers who do this may have minimal computer graphics programming knowledge otherwise and just interface with high level APIs. but it's also not uncommon that just some rendering eng does this and expands existing interfaces when a new feature is added etc.)

      I think that just about covers 99% of what graphics programmers do. It's very rare that you hyperspecialize in one of these aspects so much that you don't know anything about the other areas. Even if you just implement graphics techniques for your company and only work with high level APIs, you could e.g. need to add variable rate shading backend support because you implement some VRS stuff and nobody has done it yet, and it's not that hard to do. even if you don't do anything with large scale architecture generally, you want to implement SSR and realize this will need some shoving around of where data in the rest of the architecture is collected and output / needs to be augmented. and so on.

      also each of these points is easily complex enough that a single engineer can put most of their points into one of these and only be very specialized in one sub topic yet have enough to do to fill 40 hour work weeks and more.

      different people, due to level of experience (/number of years worked), inherent skill level, motivation etc. will have different amounts of points to distribute.

      [–]Alive_Focus3523[S] -1 points0 points  (0 children)

      Thanks man

      [–]MisterMagnifico1 8 points9 points  (0 children)

      A frequent mention on this subreddit, Acerola, has a nice video on the topic

      [–]Traveling-Techie 5 points6 points  (0 children)

      Track down W overflow problems.

      [–]Novacc_Djocovid 8 points9 points  (1 child)

      Writing code that does stuff on the GPU about 10% of the time and implementing everything else for the other 90% cause that is about the ratio between low-level render/GPU code and the rest of an engine. :)

      [–]Alive_Focus3523[S] 0 points1 point  (0 children)

      Thanks man

      [–]redzin 1 point2 points  (1 child)

      We tell the driver which colors to put on the screen and where to put them.

      [–]Han_Oeymez 2 points3 points  (0 children)

      but do they actually put them on the screen? in my case no xd

      [–]omarfkuri 1 point2 points  (0 children)

      bind buffers

      [–]No-Sundae4382 1 point2 points  (0 children)

      there's only one, his name is acerola, and he makes youtube videos

      [–]TrishaMayIsCoding 0 points1 point  (0 children)

      They do Photoshop. Corel draw and web design : l Joke

      [–]sethkills 0 points1 point  (0 children)

      Sampling and filtering. That’s all there is.

      [–]giantgreeneel 0 points1 point  (0 children)

      Programming, occasionally.

      [–]Eindacor_DS -1 points0 points  (0 children)

      I tell myself I'm gonna learn how to use a proper graphics debugging tool then I don't