穴日記

どうだ明るくなったろう

一流グラフィックスプログラマへの道~リアルタイム編~

はじめに

こんにちは。holeです。
この記事は第三回レイトレ合宿のアドベントカレンダーです。

今回は一流グラフィックスプログラマ(リアルタイム)になる方法を探ってみました。
一流のことは一流の会社を調べるのが一番!ということで海外15社(18種)、国内4社(4種)のグラフィックスプログラマの募集要項を調査しグラフィックスプログラマに求められるスキルを考察してみました。ゲーム会社に偏ってしまいましたが、やはりリアルタイムCGはゲーム屋に一日の長があるためそのようなチョイスになっています。

 対象の会社

対象としたのは以下の会社・職種です。他の会社については、グラフィックス系のプログラマの募集を明示的に行っていなかった(2015/06時点)ため載せていません。

海外

Naughty Dog/Graphics Programmer
Infinity Ward/Sr. Rendering Enginner
Sledgehammer Games/Sr. Rendering Enginner
Sledgehammer Games/Rendering Enginner
Bungie/Graphics Programmer (Sr. or Lead)
Rockstar North/Jr. Graphics Programmer
Rockstar North/Sr. Graphics Programmer
Bethesda Game Studios/Graphics Programmer
DICE L.A./Sr. Rendering Enginner
Crytek/Sr. Rendering Enginner
Crytek/R&D Graphics Enginner
Epic Games/Lead Rendering Programmer
Unity Technologies/Graphics Programmer
Santa Monica Studio/Sr. Engine/Graphics Programmer
Firaxis/Graphics Programmer
Avalance Studios/Sr. Graphics Programmer
Codemasters/Graphics Programmer
Quantic Dreams/Sr. Graphics Programmer

日本
スクウェア・エニックス/第3BD/3Dグラフィックスプログラマー
カプコン/レンダリングエンジニア
シリコンスタジオ/グラフィックス開発エンジニア
Tango Gameworks/グラフィックプログラマー

 それぞれの募集について、要項をまとめました。似たようなスキルは適当にまとめました。精度は何とも言えないところですが、まあ感じをつかむということであんまり統計的データとしての意味はないでしょう。

必須スキル

上位を占めたのはやはりGPU&グラフィックスAPIの知識とC/C++の知識でした。あまりにも当然の結論ですね。前者はかなり大ざっぱな分類ですが22ポイント、後者は19ポイントでした。

ゲーム系のリアルタイムグラフィックスプログラマで募集かけてんだからGPUとかDirectXとかシェーダの知識が要求されるのはあまりにも当然ですね。書き忘れてる会社とかはさすがに存在しませんでした。

Crytek/R&D Graphics Enginnerは少し面白く、「特にDirect3D」と明記されていました。CrytekといえばXBoxOne独占タイトルとしてRYSEをリリースしたのは記憶に新しいですが、開発においてMS陣営との結びつきが強いためにD3D知識が重視されてるのかもしれません。

C/C++知識については、現状、AAAタイトルの開発はC++を中心に行われているからでしょう。世の中には無数のプログラミング言語がありますがいわゆるコンソール開発を中心としてプロダクションにおけるゲーム開発はC++が支配的です。ハイレイヤーはまだしも、グラフィックスプログラミングはかなりローレイヤー寄りに分類され、場合によってはエンジン開発と密接にかかわることからC++が選ばれるのも納得です。

重要スキル

続いて、多くの会社が要求スキルとして指定している重要なスキルについてです。上位を占めたのはコンピュータグラフィックス知識全般、3D数学、ローレベルなデバッグ・最適化の技術です。

グラフィックス知識はかなり漠然とした話ですが、モダンなレンダリング技法(大域照明や影、ポストエフェクトといった全て)のアルゴリズムについての知識といった形になるでしょうか。こういったスキルについて明確に要求していない会社も暗に要求していると考えられるのでほぼ必須スキルになりますね。

次に重要度の高いのが3D数学です。最近のグラフィックスは高度化が進み、それに伴い必要とされる数学力の水準も上昇傾向にあります。多くの会社が明確に「Strong Math Skill」を要求していました。あくまで3D方面のCG数学(線形代数とかその他)という意味合いなのでしょうが、とくに何の指定もなく「数学」と言い切っている会社もあります。

カプコンのレンダリングエンジニアは歓迎条件として「光学、数学、物理学の深い知識 」を挙げています。これは、近年の物理ベースレンダリングの流行に伴い光学・物理の知識の重要度が上がっていることの顕れでしょう。しかし、海外の会社は数学を要求することはあっても光学や物理については特に言及のある会社はありませんでした。強いて言えば、Avalance Studios/Sr. Graphics ProgrammerはPhsyically Based Renderingの知識を歓迎条件として挙げていたくらいです。

Infinity Ward/Sr. Rendering Enginner(以下、リンク切れの可能性あり)は

* Strong 3D math, particularly as it relates to modern rendering techniques such as energy. conservation, alternate basis representations, voxelization, and path tracing etc. 

としてあります。パストレーシングくらいは書けないとCall of Dutyは作れないということでしょうか。こういう会社は他にはありませんでした。レイトレをはじめとしたオフラインレンダリングの知識を要求スキルに挙げている会社はほぼありませんでしたが、あると便利な裏スキルに間違いないという確信を持っているので皆さんもレイトレをしましょう。

ローレベルなデバッグ・最適化技術は、やはりグラフィックスプログラマには求められることが多いようで、14ポイントでした。グラフィックスは速度にシビアなケースが多いので当然でしょう。また、各種のグラフィックスプロファイリングツールの習熟を求める会社もかなりの数存在しました。

学歴

今回調査して驚いたのは、コンピュータサイエンスの学士号を要求する会社がとても多い(海外)ということでした。具体的には以下のように記述されます。(Naughty Dog/Graphics Programmerより)

Bachelor’s Degree in Computer Science or equivalent work experience

 要するにコンピュータサイエンスの学士号またはそれに準ずる経験の持ち主であること、を要求してるわけです。日本のゲーム会社は学歴不問としてる場合が多いのでこれはちょっと新鮮でした。別に学士号を持ってなくても相当の能力を示せば良いことになっているので別に門戸が狭いわけではないと思います。

しかし、Quantic Dreams/Sr. Graphics Programmerは明確に

Graduated with a Master Degree in Computer Sciences (Engineering school)

としています。このような、学歴に関する要求は全部で14ポイントでした。ちなみに、Rockstar North/Jr. Graphics Programmerは数学の学士号でもOK!としてます。学歴に関する条件が無い海外のゲーム会社は、Rockstar North/Sr. Graphics Programmer、Epic Games/Lead Rendering Programmer、Unity Technologies/Graphics Programmer、Avalance Studios/Sr. Graphics Programmerでした。エンジン開発系の会社が二社出てきたのは少し面白いですね。

コミュ力とか自主性

コミュ力もかなり重要度は高そうです。何らかの形でGood communication skillを求める会社が多いです。Bethesda Game Studios/Graphics Programmerは対人関係スキルとコミュニケーションスキルをわざわざ別の項目として記述するほどです。ゲーム会社といえやはり社会的能力はあったほうが良いということでしょう。

また、Self motivationという単語を使う会社も多めでした。自主的に行動し、問題に立ち向かい解決する、そういう人間が高く評価されるわけです。

過去の経験

今回調べたのは基本的に中途向けの募集要項なので過去の経験も重要になります。結構具体的に要求している会社も多かったです。

まず、コンソールやPCでのゲーム開発経験を求めるケースが10ポイントに上りました。日本の会社が内3ポイントを占めており、日本においては前職の経験がかなり大事になりそうです。一方、海外ではコンソール経験を明確に求めていないケースも多くありました。海外においてはCG産業はゲーム以外にも幅広く広がっているため、多様な人材を求めているのかもしれません。

経験年数については、普通のプログラマよりもシニアプログラマの方が長め、といった感じです。五年以上のグラフィックスプログラミング経験は8ポイントにも上りました。特に、Crytek/Sr. Rendering Enginnerは少なくも二年間のシニアプログラマ経験を要求しておりなかなかに水準の高いものになっています。

Sledgehammer Games/Sr. Rendering Enginnerは七年以上のグラフィックスプログラミング経験を要求しており今回調べた中では最長でした。

ゲーム開発への情熱

一般に、欧米のゲーム会社は分業が進み自分の専門領域に特化していると言われています。そのためか、一部には海外では個々のプログラマレベルではゲームデザインにコミットしないと考えている人もいるようです。しかし、実際は募集要項に面白い、良いゲームを開発するということについての貢献を求められるケースが見受けられます。実に半分近くの会社で何らかの形でゲームや、ゲーム開発への情熱を要求されています。例えば以下のような形です。(Naughty Dog/Graphics Programmerより)

Passion for playing and developing exceptional games 

 また、Bethesda Game Studios/Graphics Programmerは過去のBethesda Game Studiosのゲームのプレイ経験を求めています。

その他の重要そうなスキル

読みやすく、移植しやすく、信頼性の高い最適化されたコードを書ける人間を明示的に求める会社もいくつかありました。特に、Santa Monica Studio/Sr. Engine/Graphics Programmerはドキュメントをちゃんと書きプログラムのテストを書き高い品質のコードを書くことを要求しています。

次世代機(PS4、XBoxOne)への移行が急激に進んでいる今、次世代機の経験も貴重な能力です。五つの会社が次世代機における開発を重要なスキルとしてとらえていました。

ゲームにおけるグラフィックスはシステム全体に広がるため、グラフィックスプログラマはエンジン部分と密接に連携しなければなりません。実際、エンジンプログラマとして募集している会社もあります。そこで、ソフトウェアデザインの知識や大規模なコードの経験を求める会社もあります。明確にリーダーとしての能力について示す必要がある会社もありました。

基本的に欧米の会社を中心に調べたのですが、世界中から人があつまるような会社は英語スキルについても記述がありました。CrytekとUnity Technologiesです。また、スクウェア・エニックスとカプコンも同様でした。コンピュータグラフィックスの本場は欧米なので、最新技術を追うために英語は避けられません。特に、日本のエンジニアは英語スキルを求められるでしょう。

グラフィックスプログラマはゲーム内のアセットを作る、いわゆるアーティストとも密接に連携する必要があります。Rockstar North/Sr. Graphics Programmer、Epic Games/Lead Rendering Programmer、Avalance Studios/Sr. Graphics Programmer、Tango Gameworks/グラフィックプログラマーはアーティストとの連携について明確に記述がありました。やはり、リード、シニアクラスになると他チームとのコミュニケーションも重要になりそうです。

小ネタ

Sledgehammer GamesとBungieはPS3のプロセッサであるSPUの開発経験を求めていました。これは、彼らの作るゲーム(Call of DutyとDestiny)の主要マーケットとしてPS3がまだまだターゲットに入っているということの証拠ですね。あるいは単に昔の記述を削除し忘れただけなのかもしれませんが。

募集要項の項目の内容と数にも注目です。欧米の会社の要綱は項目数が多く、かつかなり具体的な内容になっています。一例を挙げると、Quantic Dreams/Sr. Graphics Programmerは全部で18項目あり、しかも以下のように具体的な手法にまで踏み込んでいました。

- Excellent knowledge of various rendering techniques such as:
o SSAO
o Deferred Shading technical
o Shadows
o Global Illumination
o Particles
o Etc. .  

他の会社も、項目数が10を超えることは珍しくありません。欧米の会社の項目数の平均は約11.8個でした。一方、日本の会社の項目数の平均は9.25個でした。これも、BethesdaグループのTango Gameworksが押し上げた結果です(16個)。こういうところにも微妙な文化の違いを感じますね。 

まとめ

というわけで各ゲーム会社のグラフィックスプログラマの募集要項を調べてみました。これらを全て満たせば自ずから一流グラフィックスプログラマになれることでしょう。

とりあえずC++・数学・GPU知識・グラフィックスAPI・英語あたりを押さえておくのが重要そうです。