游戏邦在:
杂志专栏:
gamerboom.com订阅到鲜果订阅到抓虾google reader订阅到有道订阅到QQ邮箱订阅到帮看

如何成为游戏行业的图像程序员

发布时间:2014-07-28 11:01:59 Tags:,,,

作者:Oliver Franzke

因为我们最近正在招聘一名图像程序员,所以我得确定潜在求职者具备哪些技术知识和技能。虽然这个定义主要是针对我们的求职者,但我想也适用于行业中其他正在求职中的程序员,比如渲染工程师。

不论你是刚完成学业的新人,还是已经在行业中试水不同角色的老手,希望本文能够让你获知成为一名图像工程师需要具备的知识。如果你是一名经验丰富的渲染程序员,那么你可能已经了解了所有情况,我也希望听听你的看法。

programmer(from dreamstime.com)

programmer(from dreamstime.com)

了解硬件

了解将执行你代码的硬件优势和弱点对于任何程序员来说都很重要,但它却是图像工程师的必需技能。让你的游戏看起来美观很重要,但要让这些精致的效果以目标帧率运行却是一项更为棘手的任务。

当然,寄希望于你了解基本硬件的每一个细节也太不现实了(对于刚上任的新人来说尤其如此),但在我看来,你至少要比较清楚制作3D模型涉及到哪些技能。这一领域的求职者应该知道普遍的GPU管道阶段(例如,顶点和像素着色器,光栅化程序等),了解它们的功能,以及它们是否可编程、配置或修复。

通常情况下,我们有许多方法可以执行一个渲染效果,所以很有必要知道在特定的目标设备上最好使用哪个解决方案。没有什么比因为GPU并不能很好地支持一个必要功能而要求美术人员调整其所有现成资产的情况更糟糕的了。

例如,我目前正在开发的一款游戏瞄准的是桌面电脑以及移动设备,这一点很重要,因为移动GPU的性能特点与桌面电脑极为不同。我们的团队在制定场景复杂度以及特效类型的决策时就要考虑这些不同点。

了解更多关于GPU的一个好方法就是去看看《Real-Time Rendering》(第三版)的第18章,因为它包含了关于Xbox 360、Playstation 3和Mali(移动)渲染构架的详细概况。

优秀的数学能力

渊博的三角法,线性代数甚至是微积分知识对于图像程序员来说极为重要,因为这一职业的许多日常工作就涉及到多种复杂程度的数学问题。

我当然希望求职者了解圆点和向量积产品,以及它们在计算机图像中的作用。除此之外,了解矩阵内容也很有必要,因为调试一个渲染问题可能有必要手动“分解”一个矩阵,以便鉴别错误值。例如,不久前我就不得不修复我们动画系统的一个问题,并且纯粹是通过查看结点矩阵找到了问题的根源。

在我看来,求职者应该能够分析性地计算射线与平面之间的相交情况。此外,我还希望每个渲染工程师都能够轻松获得反射向量。

我们可以在网上找到许多相关资源。《3D Math Primer for Graphics and Game Development》一书就很好地解释了许多关于向量、矩阵和四元法等相关话题的基础知识。我强烈推荐大家在纸上运算而不是查看现成的方案来解决这些问题。这个过程的确很有趣,所以你不妨自己动手一试。

对计算机图像的激情

理想的求职者应该能够跟上最新的计算机图像发展速度,对于这个不断而迅速发展的领域来说尤其如此(比较一下10年前和今天的游戏图像保真度就清楚了)。

这方面有许多有趣的调查报告,开发者演讲和技术博客(你可以在网络上找到),所以你应该很容易找到自己感兴趣的内容。

当然,执行一个算法就是了解它的最佳方法,它还可以成为你面试中的谈资。编写很棒的图像样本也有助于锻练你的技能,并且这个过程也实在有趣。

如果你想最大化自己成功求职的机率,就要确保投入了一定时间将样本制作得更美观。你可能执行了最有效的细分曲面算法,但如果人们看不到效果就不会产生什么深刻的印象。创造令人愉悦的图像是这个职业的一个重要部分,所以最好还要证明你的技术过硬。

性能分析和优化

图像程序员的职责之一就是分析游戏,以便确定和移除其中与渲染相关的瓶颈。如果你才刚入行,我也不会寄希望于你在此领域拥有大量的实战经验,但你应该知道与CPU和GPU相关的区别。

理想的求职者至少要能够使用诸如PIX(DirectX SDK的一部分)、gDEBugger或英特尔的GPA等图像分析工具。这些应用都是免费的,有助于你进一步查看GPU内部的情况,隔离漏洞(游戏邦注:例如在绘制几何体时出现的不正确的渲染状态)以及鉴定性能问题(例如纹理延迟,着色器运行缓慢等)。

总结

图像程序员的工作很棒,因为它与产品的视觉外观直接相关。游戏的外观(如预告片,截图等)通常决定玩家对产品的第一印象,对我个人来说这是个十分愉快的体验。

说实话,你无法每天都编写出色的着色器。你应该准备从事其他的任务,例如数据压缩(如纹理、网格、动画),数学和几何问题(如选择,相交计算)以及大量分析和优化工具。后一项任务尤其具有挑战性,因为GPU及其相关驱动器无法调整。

总而言之,成为渲染工程师需要大量的专业知识,它当然并不是在游戏行业立足的最便捷方式,但如果你对计算机图像很感兴趣,也许它就是你命中注定的选择了。(本文为游戏邦/gamerboom.com编译,拒绝任何不保留版权的转载,如需转载请联系:游戏邦

How to become a Graphics Programmer in the games industry

by Oliver Franzke

As we were recently hiring a new Graphics Programmer at work I had to identify what kind of technical knowledge and skills we would expect from a potential candidate. Although this definition will be somewhat specific to what we look for in a candidate, it might still be of interest to other coders trying to score a job in the industry as a Rendering Engineer.

This post might help you to identify areas to learn about in order to get you closer to your goal of becoming a Graphics Engineer, whether you just finished your degree or perhaps have been working in the games industry in a different role. Alternately, if you are a seasoned Rendering Programmer, then you know all of this stuff and I would love to hear your comments on the topic.

Know the Hardware

Learning about the strengths and weaknesses of the hardware that will execute your code should be important for any programmer, but it’s an essential skill for a Graphics Engineer. Making your game look beautiful is important; getting all of the fancy effects to run at target frame rate is often the trickier part.

Of course, it would be unrealistic to expect you to know every little detail about the underlying hardware (especially if you are just starting out) but having a good high-level understanding of what is involved to make a 3D model appear on screen is a mandatory skill, in my opinion. A candidate should definitely know about the common GPU pipeline stages (e.g. vertex- and pixel-shader, rasterizer, etc.), what their functionality is and whether or not they are programmable, configurable or fixed.

Very often, there are many ways to implement a rendering effect, so it’s important to know which solution will work best on a given target device. Nothing is worse than having to tell the artists that they will have to modify all of the existing assets, because the GPU doesn’t support a necessary feature very well.

For example, the game that I am currently working on is targeting desktop computers as well as mobile devices, which is important because mobile GPUs have very different performance characteristics compared to their desktop counterparts (check out my 5 minute micro talk on this topic if you are interested). Our team took this difference into account when making decisions about the scene complexity and what kind of effects we would be able to draw.

A great way to learn more about GPUs is to read chapter 18 of Real-Time Rendering (Third Edition), because it contains an excellent overview of the Xbox 360, Playstation 3 and Mali (mobile) rendering architectures.

Good Math Skills

Extensive knowledge of trigonometry, linear algebra and even calculus is very important for a Graphics Programmer, since a lot of the day to day work involves dealing with math problems of varying complexities.

I certainly expect a candidate to know about the dot and cross products and why they are very useful in computer graphics. In addition to that, it is essential to have an intuitive understanding for the contents of a matrix, because debugging a rendering problem can make it necessary to manually ‘decompose’ a matrix in order to identify incorrect values. For example, not that long ago I had to fix a problem in our animation system and was able to identify the source of the problem purely by looking at the joint matrices.

In my opinion, a candidate should be able to analytically calculate the intersection between a ray and a plane. Also, given an incident vector and a normal, I would expect every Rendering Engineer to be able to easily derive the reflected vector.

There are plenty of resources available on the web. You can find some good resources here. The book “3D Math Primer for Graphics and Game Development” does a great job explaining a lot of the fundamentals like vectors, matrices and quaternions to name just a few topics. I would also strongly recommend attempting to solve some of these problems on a piece of paper instead of looking at a preexisting solution. It’s actually kind of fun, so you should definitely give it a try.

Passion for Computer Graphics

An ideal candidate will keep up to date with the latest developments in computer graphics especially since the field is constantly and rapidly advancing (just compare the visual fidelity of games made 10 years ago with what is possible today).

There are plenty of fascinating research papers (e.g. current SIGGRAPH publications), developer talks (e.g. GDC presentations) and technical blogs available on the internet, so it should be pretty easy to find something that interests you. Make sure to check out the blogs of fellow Rendering Engineers for some really inspiring articles!

Of course implementing an algorithm is the best way to learn about it, plus it gives you something to talk about in an interview. Writing a cool graphics demo also helps you to practice your skills and most of all it is a lot of fun.

If you want to maximize your chances of getting a job make sure to spend some time making your demo look pretty. You may have implemented the most efficient tessellation algorithm, but if people can’t see what’s going on they might not be as impressed as they should be. Creating visually pleasing images is a big part of the profession, so it’s generally a good idea to show that you have this skill as well.

Performance Analysis and Optimization

One of the responsibilities of a Graphics Programmer is to profile the game in order to identify and remove rendering related bottlenecks. If you are just starting out I wouldn’t necessarily expect you to have a lot of practical experience in this area, but you should definitely know the difference between being CPU and GPU bound.

An ideal candidate will have used at least one graphics analysis tool like PIX (part of the DirectX SDK), gDEBugger or Intel’s GPA. These applications are available for free allowing you to take a closer look at what’s going on inside of a GPU, isolate bugs (e.g. incorrect render-state when drawing geometry) and identify performance problems (e.g. texture stalls, slow shaders, etc.)

Conclusion

The job of a Graphics Programmer is pretty awesome since you’ll be directly involved with the visual appearance of a product. The look of a game is very often the first thing a player will know about it (e.g. trailers, screenshots) which has been very gratifying for me personally.

Truth be told, you won’t be able to write fancy shaders every day. You should be prepared to work on other tasks such as: data compression (e.g. textures, meshes, animations), mathematical and geometry problems (e.g. culling, intersection computations) as well as plenty of profiling and optimizations. Especially, the latter task can be very challenging since the GPU and the associated driver cannot be modified.

To sum up, becoming Rendering Engineer requires a lot of expert knowledge, and it is certainly not the easiest way to get a foot in the proverbial games industry door, but if you are passionate about computer graphics it might be the right place for you!(source:gamasutra


上一篇:

下一篇: