ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

GDC 2012 | The Tricks Up Our Sleeves(前半)

GDC2012 と 10 年前の講演になりますが、Naughty DogUncharted 3 のツール環境やそれまでの開発環境の変遷について紹介されています。

スライドが公開されているので、興味深い部分をピックアップしてみたいと思います。

講演者は当時 Lead VFX Artist をされていた Keith Guerette 氏。
タイトルの「trick up one's sleeve」は「秘策」という意味を持つようです。

こちらのスライド(pdf)は講演時の動画を再生できない状況を埋めるために Keith 氏の大量の注釈が残されています。非常にありがたい配慮!

I haven't found a worthwhile way to demonstrate the videos through pdf, but I hope the inclusion of my narration in these comment boxes will help to fill the gap a little.
pdf を通して価値のある動画を実演する方法が見つかっていませんが、このコメント欄に私のナレーションを入れることで、そのギャップを少しでも埋める助けになればと願っています。


ちなみに PDF はダウンロードすると注釈を読みやすいです。
▼ Source: page 2 of "The Tricks Up Our Sleeves," 2012, by Keith Guerrette at Naughty Dog

Adobe Acrobat Reader の注釈のプルダウンメニューからテキストをコピーできるので、DeepL 翻訳にかけたい場合はこちらからが楽です。

スライド内の吹き出しアイコンをクリックすると、その注釈にジャンプしてくれます。

EVOLUTION OF THE TOOLS


● Uncharted 1 FX Pipeline

この頃は DC と呼ばれる LISP のような独自スクリプト言語によるコーディングでエフェクトを制御していたそうです。またシェーダーは HLSL で書いていたとのこと。

当時はオーサリングできるようなエフェクトエディタが無かったということですね。

PS1 ~ PS2 の時代だとエフェクトをコーディングで実装する例は国内でもよく聞く話でした。Metal Gear Solid シリーズや ANUBIS なども CGWORLD のメイキングやゲームのエンドクレジットから、実装はプログラマが行っている印象でした。

しかしプログラマが直接実装している場合は、それ故にパフォーマンス面で極限まで無駄が無いメリットがあったのではと思います。

ちなみに当時、海外だとエフェクトアーティストはコーディングするイメージは確かにありました。(10 年くらい前に市販のエフェクトエディタ「PopcornFX」を少し調べた際に、スクリプトで制御する様子だったのでこれは厳しいなと思いました。。

Keith 氏は初代アンチャーテッドの頃にはまだ在籍していなかったようですが「for us artists, this would suck the soul out of me.(私たちアーティストにとって、これは魂を吸い取られるようなものです。)」とコメントされていて、少し安心しました。。

● Uncharted 2 FX Pipeline

ゴールとして Artist friendly pipeline の他「Meet artistic standards set by the top of the industry(業界のトップが定める芸術的な基準を満たす)」と定められています。

また、エフェクトのパイプラインとビジュアルのために「Marshall was assigned to the task full time(プログラマMarshall Robin 氏が専任で就いた)」とのこと。コンソール向け大型タイトルではエフェクト専任のプログラマが存在するかどうかはかなり大きな差になると思います。

そして Maya ベースのエフェクトエディタが用意されたようです。
理由は下記の2点が挙げられています。

There’s already a great infrastructure for creating our own UI and tool workflow (MEL/Python)
MEL/Python による UI やツールワークフロー作成のための素晴らしいインフラがすでにある

The particle tools seemed to provide a decent base upon which to grow – particles, emitters, fields, ramps, and expressions
パーティクル ツールは、パーティクル・エミッター・フィールド・ランプ・エクスプレッションなど、成長するための適切な基盤を提供しているように思える


国内でも PS3 の頃は Maya や 3dsMax 上でエフェクトデータを作成して、出力時に実装用のフォーマットにコンバートして組み込む事例を見かけたりしました(当時ナルティメットストームシリーズのメイキングでもそのような感じだったかと思います)。

エフェクト制作環境がどう成長していったかを、炎のパーティクルを例に説明がされています。

最初は「パーティクルごとにランダムにスケールや上昇させる」ことと「様々なテクスチャを混ぜること」は可能だったものの「ディティールや動きがリアルさに欠ける」「Maya のスプライトエンジンがひどかったので自分たちで構築しないといけないことに早くから気付いていた」状況だったそうです。

そこでまずは Flipbooks を再生できるようにしたり、Keith 氏が前の職場で UE を使っていた経験を活かし Marshall 氏と協力しながら UV 歪みなどを実装していった模様です。

● Uncharted 3 FX Pipeline

掲げているゴールに「Remove dependency on Programmers(プログラマへの依存をなくす)」とあるのが興味深いです。Keith 氏は下記のようにコメントしています。

The dependency upon Marshall for iteration on our shaders was killing us. 
シェーダーのイテレーションを Marshall に依存することは、私たちを死に至らしめました。


ノードベース GUI のシェーダーエディタが当たり前になってきている今でも、マテリアルをアーティストが作るかプログラマが作るかはチームによって大きな議論になるかと思いますが、Keith 氏らはアーティストが作成する道を選んだようです。

P.23 に当時のエフェクトエディタの画面が紹介されています。
グラデーションランプを作成できる機能があるのは良いですね!
▼ Source: page 23 of "The Tricks Up Our Sleeves," 2012, by Keith Guerrette at Naughty Dog

P.25 で Keith 氏らが「Noodler」と呼んでいるシェーダーエディタが紹介されています。
▼ Source: page 25 of "The Tricks Up Our Sleeves," 2012, by Keith Guerrette at Naughty Dog

また、こちらは Sony ATG から来たツールだそうです。

聞き慣れなかったのでググってみると‥
SCEE Advanced Technology Group

"ATG" stands for Advanced Technology Group.
「ATG」とは Advanced Technology Group の略です。

It's part of the SCE (Playstation) Worldwide Studios group, which is the bit that creates the so-called first-party games you buy, the games exclusive to Playstation.
SCEプレイステーション)ワールドワイドスタジオグループの一部で、いわゆるファーストパーティゲーム、つまりプレイステーション専用のゲームを作っているところです。

stand for ~ ~の略
bit 部分
so-called いわゆる

ATG is a little different than the normal games studios, because it also has heavy links with what we call "Platform Development", that is, building Playstation itself.
ATG は通常のゲームスタジオとは少し異なり「プラットフォーム開発」と呼ばれる、プレイステーション本体の開発とも深いつながりがあります。

So ATG has a dual identity: by day the mild-mannered creator of some of Playstation's System Software and developers tools; by night, wild experiments on some of the runtimes and tools to push games beyond where they have been before.
ATG は2つの顔を持つ会社です。
昼は PlayStation のシステムソフトウェアや開発者用ツールの温厚な開発者・夜はゲームをこれまで以上に進化させるためのランタイムやツール上でのワイルドな実験。

This puts it in quite a unique position in the console world.
これはコンソールゲームの世界で非常にユニークな立場にあるのです。

by day 昼間は・日中は
mild-mannered 温厚な・穏やかな

なるほど、ATG は当時の SCE グループの1つで、ファーストパーティでありつつプレステ本体や開発環境のための様々な機能やツールを手掛けているようです。

「Noodle」と呼ばれる(Naughty Dog 内での呼称なのかソニーによる正式名称かは分かりませんが)シェーダーエディタもその1つということなのでしょうね。

we now have a fully artistic, programmer supported, but not involved, method to create powerful custom shaders for use upon our particles!
我々は今やパーティクルに使用する強力なカスタムシェーダーを作成するための、完全に芸術的で、プログラマーがサポートするが関与しない方法を得ました。


これらの環境によりクールな表現が可能になったとのこと。

それから、Uncharted 3 のパーティクルのアトリビュートはこちら。

Current Readable Particles Attributes:
● Ramp output (with custom V inputs)
● Position (world, local)
● Velocity (world, local)
● Age (particle)
● Time (emitter)
● Bouncecount
● Timedelta
Bounce Count


ランタイムで使用できる Particle Expression 関数はこちら。

Current Particle Expression Functions:
● +-x/
Modulus 係数
● Random
● Linstep & Smoothstep
Clamp
● Magnitude
Sign(値が 0 なら 0 / 0 未満なら -1 / 0 より大きいなら 1 を出力する関数)
● Sin & Cos


そして、開発環境の特徴として下記が挙げられています。

Very powerful, math oriented pipeline
非常に強力で数学志向のパイプライン

Many different types of controls & customizations
沢山の異なるコントロールとカスタム性

Fully supportive team of programmers
プログラマのチームによる完全な支援

 ● Open communication
  オープンなコミュニケーション

 ● No Politics
  政治なし

 ● Easy, understanding discussions of priorities
  優先順位を理解しやすい議論


「No Politics」というのが面白いですね!

確かにエフェクトの開発環境・表現力の向上には、プログラマさんとの良い協力関係が構築できていることが非常に重要に感じます。

また、シェーダーで利用可能なアトリビュートについても記載があります。

Up to 8 real-time inputs into the shader, not including the vertex color and vertex opacity (12 Total)
頂点カラーと頂点の不透明度を含まず、最大8つのシェーダへのリアルタイム入力(つまり合計12個)


これは UE で言うところの Particle Color (RGBA) に加えて Dynamic Parameter が 8 つ(Dynamic Parameter ノード 2 個分)扱えるということになるかと思います。現在 Niagara では Dynamic Parameter は最大 16 個のパラメータを扱えますが、Cascade は 4 個までだったので制約的に結構厳しかったです。

8 つあれば大体カバーできますね!

そしてここからはアンチャーテッド3での具体的なエフェクト表現への取り組みについて紹介されています。ですが長くなりそうなので記事を分けたいと思います