mattnewport comments on What are our domains of expertise? A marketplace of insights and issues - Less Wrong
You are viewing a comment permalink. View the original post to see all comments and the full post content.
You are viewing a comment permalink. View the original post to see all comments and the full post content.
Comments (63)
I'm a games programmer, specializing in real-time 3D graphics. My degree is in Experimental Psychology and I maintain an amateur interest in that but don't have up to date domain expertise there.
Performance is a major concern in graphics programming (we have quite a lot of work to do in 33ms). Optimization in graphics requires both a deep understanding of the algorithms, programming language and hardware you are working with but also the ability to step outside the immediate problem and see creative shortcuts or workarounds that achieve the desired high level end result your artists are asking for by some alternative means.
Familiarity with the latest research in the offline rendering world is valuable but just as important is the ability to have an understanding of what attributes of a scene are important to human perception and a willingness to throw mathematical or physical correctness out the window to get the visual results you are after.
I think working a problem like 3D rendering with hard time constraints makes me more aware than average of the importance of tradeoffs between accuracy and timeliness. A brilliant technique that doesn't run in 1/30s on your target platform isn't nearly as useful as a creative hack that does. I tend to think that the value of a fast approximation over a slow exact result is sometimes underappreciated in discussions of AI and human rationality.
In terms of specific technical knowledge, the games industry has been ahead of most of the mainstream software industry in coming to grips with massively parallel hardware in the form of GPUs and novel parallel processors like the Cell in the PS3. This is potentially relevant to areas of interest to Less Wrong that require large amounts of computing power. I won't suggest AI specifically as the tendency to embrace shortcuts in graphics programming is perhaps not something that would be encouraged when creating an AI...
There are a lot of applications of compression in graphics. PCA was originally developed for statistical analysis and I believe has had some application in machine learning but is known in graphics as a compression technique. I suspect the connections between compression and learning are probably rather deep and profound.
Various somewhat esoteric bits of math have found their way into computer graphics. Quaternions are widely used as an efficient rotation representation and there is a fair amount of interest in geometric algebra. I imagine there are other useful areas of math that we could benefit from but that haven't come to the attention of the field.
We ruthlessly exploit any and every 'flaw' in human perception to optimize 3D graphics. If there's something that people tend not to notice we look for ways to avoid calculating it so we can use those cycles somewhere else. My Experimental Psychology background has been helpful in this regard.
Hi Matt,
I'm not a game programmer but always found it a fascinating subject. What language do you use for it? C++ I suppose?
Generally the majority of low level graphics code is written in C++, sometimes with smatterings of assembly to take advantage of SIMD hardware (or more likely nowadays compiler intrinsics which allow access to specialized processor features through C++ function calls and types). Increasingly I spend a lot of my time working with various shader languages that target GPU hardware.
Many games nowadays also use a higher level scripting language for gameplay (rather than engine) code. As a graphics programmer I usually spend less time working at that level than a gameplay programmer would but I usually end up dealing with some UnrealScript, lua or whatever the current project is using for scripting.
Although my focus is on the runtime side I also work on graphics related tools and pipelines on occasion (level editors, model viewers, data compression, data build pipelines, etc.). The technologies used vary but I've done a fair bit of C# and Python coding plus bits of things like MaxScript and javascript (for scripting Photoshop).