kidoOooOoooOOom

ゲーム開発やってます

UniteTokyo2019 DAY1 参加レポート

Unite Tokyo 2019 参加してきたので、まずはDAY1で自分が参加してきた講演のレポートを書いとく。

<七つの大罪>をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介

youtu.be

「えっ!?スマホでこんなハイクオリティなゲーム作っちゃう!?」

と、日本のスマホゲーム開発者を戦慄させる高品質さでリリース後トップセールス上位をキープしている「グラクロ」のゲーム開発に関する講演。

(講演スライドはまだ上がってないので、上がり次第リンクを追加する)

本セッションでは『七つの大罪 光と闇の交戦 : グラクロ』の開発において、〈七つの大罪〉の感性を徹底的に再現するための工夫や方法、そして、実際に使用したレンダリング技術やグラフィックテクニックをご紹介致します。 また、開発効率を向上させるための最適化方法についてもご説明致します。

ラクロは「七つの大罪」という原作があるため、その原作の良さを最大限発揮できるための演出力を作ることに力を入れている。

キャラクター表現

キャラクターは最初、ノーマルマップなどを駆使したフォトリアルな表現で作っていたが、これじゃない感が出たので作り直したとのこと。

原作アニメの表現を参考にしてToon表現のシェーダーが作られており、伝統的なLightingだと顔などに不自然な陰影ができるので、原作アニメに寄せるためにMatCap Shaderなども作成している。

MatCap参考: 【Unity】【シェーダ】MatCap(スフィアマッピング)を実装する - LIGHT11

また、DCCツールとUnity間のイテレーション改善のため、3dsMax上で同じ表現ができるShaderを作成してモデル編集時に確認できるようにしている(MeshSyncは使われてなかった感じ)。

Effect

Effectにも光源効果を持たせたいので、MatCapを追加している。

上はゲーム画面だけど、エフェクトから光出てるっぽい。

Effectのために、かなり多くのshaderが作成されていた(講演スライドが上がったら見れるはず)

LUTを用いたColor Grading

Lookup Texture(LUT)を用いて、同じ背景モデルでも昼や夜などで様々な雰囲気を出させるようにしている。

テクスチャを用意するだけで背景バリエーションを増やせるので、便利だなと思った。

f:id:gidooom:20190928110755p:plain (画像は、Unity Manual に載ってあったやつ)

Unity - Manual: Color Grading

建物の中はFake Interior

PS4スパイダーマンのゲームでも使われていた方式。

建物の中の家具をTextureで用意しておき、あたかも3Dオブジェクトがあるように見せかけるテクニック。

coposuke.hateblo.jp

こういうテクニックを採用することで、クオリティとパフォーマンスのバランスを取っているのがゲームのクオリティを支えている。

大量のオブジェクトは、Impostor(2Dビルボードへ)

Impostor は今まで知らなかったが、様々な角度で3Dモデルをキャプチャしてアトラス化しておき、疑似3Dとして扱う手法のこと。

www.asset-sale.net

遠景のオブジェクトや大量の民衆などは Impostor を用いて描画していると説明していた。 (これも講演スライド上がったらそっち見たほうが良さそう)

生産性

講演の後半はスピーカーが代わり、「生産性」を上げるためにどんなツールや仕組みを用意したかを紹介していた。

技術的な内容で難しめなので、サラッと箇条書きでメモ。詳しくは講演スライド参考で・・・。

  • Facial Animation
    • Blend Shape使用。基本13個ぐらいのモーションで、各キャラ共通化してて効率よくしてる。
  • LookAt System
    • キャラクターが後ろを向く時などに、自然に頭・首・胸が回転するようにシステム化している。スライドに分かりやすい画像貼ってあった。
  • PostEffect
    • もちろん様々なPostEffect必要なので、UberShader作られている。
  • Behaviour Tree
    • チュートリアルは特にコロコロ変わる箇所なので、Behaviour Treeでロジックを構築して効率化している。
    • -> 気になったので質問してみたところ、チュートリアルだけでなくメインのゲームロジック部分でもBehaviour Treeで構築できるようにしていたとのこと。
    • また独自ツールを作っているわけではなく、Behaviour DesignerをAssetStoreで買って使っていると教えてくれた。
  • Machine Learning
    • バランス調整のために、AIも活用している。

所感

ラクロはたまたま売れたようなタイトルではなく、しっかりとした技術基盤や演出方針を築いた上で作られたハイクオリティなゲームなんだと改めて理解した。 今後はこのクオリティがデフォルトラインになってくると思うので、「凄いなぁ」とぼーっと見てたら取り残されてしまうという危機感を抱いた・・・。


『The Heretic』で学ぶ映像制作テクニック

learning.unity3d.jp

(Unity画面上でのデモがメインだったので、動画上がったらそっち観てもらったほうが良さげ)

Topicは下記の通りで、HDRPやVFXなどハイエンド向けの映像制作に関する講演になっている。 f:id:gidooom:20190928120923p:plain

デモ動画の「The Heretic」の主人公は実在の人間がモデルになっていて、下図のようなフローでUnity上に持ってきている。 f:id:gidooom:20190928121003p:plain

キャラクターの皮膚には、SSS(Subsurface Scattering)の表現が用いられており、下の画像だと耳のところの透明感のある表現が凄いと感じた。 f:id:gidooom:20190928121039p:plain

ja.wikipedia.org

The Heretic でワープをするようなTransitionのシーンでは、Meshを年輪のように輪切りにしてゴニョゴニョしたという話をしていたが、ハイレベル過ぎて話についていけなかった・・・。

f:id:gidooom:20190928121120p:plain

f:id:gidooom:20190928121139p:plain

所感

今はスマホゲーム作ってるのでHDRPは関係ないと思ってたけど、講演を見たら触りたくなった。

仕事関係なく、個人でなんか綺麗なデモ動画作りたい時なんかHDRPが便利そうなので年末までに勉強がてらなんか作ってみようかと思う。


Unity 映像制作パイプライン完全マスター

learning.unity3d.jp

この講演におけるパイプライン

f:id:gidooom:20190928093925p:plain

Unity を中心として、

  • Python経由でShotgunと連携
  • OpenTimelineIOを使ってVideo Editing / Storyboard 連携
  • FBX/USD/AlembicフォーマットでDCCsと連携

を、本公演における映像制作の効率的なパイプラインとして紹介していた。

Unity - Shotgun連携

f:id:gidooom:20190928094027p:plain

Unity - Shotgun間の連携の仕組みがUnity公式で用意されるとのこと。

単純な連携はShotgun for Unity でやって、処理をカスタマイズしたい場合や既存ツールを使いまわしたい場合はPython for Unityを使うことになりそう。

f:id:gidooom:20190928094127p:plain

Shotgunのlauncher からUnity起動後に特定の処理を挟むとかもできる感じ。

f:id:gidooom:20190928094355p:plain

Shotgunのnoteに記載した特定のassetの特定frameに直接Unityで開くとかもできる。

f:id:gidooom:20190928094422p:plain

2019.3 でpublic release されて、順次拡張していくとのこと。

ただ、自分もTAやってた時にShotgunを少し検証させてもらったけれど、Shotgun自体の管理も結構大変そうなので、そこもセットに考える必要あり。 Shotgun連携できるようになったからとりあえずShotgun導入するぞーって動いちゃうと、Shotgunの構成設計や管理に1人つきっきりになるかもしれないので注意。

んで、Shotgunで扱うアセットのバージョン管理方法については、ShotgunとPerforceが蜜月の関係なので、Perforceの導入も更にセットで考えたほうがいいかも・・・。 https://support.shotgunsoftware.com/hc/ja/articles/219033058-Perforce-%E4%B8%80%E8%88%AC%E6%A9%9F%E8%83%BD

OpenTimelineIOを使ったパイプライン

ここは未経験の領域なのであまり良く分かってないけど、ラフ絵とUnity間の連携をしやすくするイメージ?

f:id:gidooom:20190928094530p:plain

f:id:gidooom:20190928094549p:plain

(詳しくは公開されたスライドを参照で)

USD for Unity

これは結構でかい話になりそう。

USD(Universal Scene Description) はピクサーの開発した3Dシーングラフ形式及びその形式を扱うプログラム群のことで、詳しくはwiki参照。 Universal Scene Description - Wikipedia

UnityのUSD対応について blogs.unity3d.com

f:id:gidooom:20190928094645p:plain f:id:gidooom:20190928094659p:plain

USDファイルの中に、カメラやTimeline、マテリアルやシェーディングの情報も含めることができるため、DCCツール上で生成したUSDがUnityでも扱えるようになると、映像制作に必要なデータが一括で扱えるようになる。

f:id:gidooom:20190928094729p:plain

USDはLayer Stack で複数重ねることもできるとのこと。

f:id:gidooom:20190928094750p:plain

ただ、USD対応のRoadmapも凄いことになっており、まだまだ大変な道のりであることは分かった・・・。

まとめと所感

Unityでも映像制作ができるようにパイプライン機能を強化していく流れが感じられる。 (映画「Hello World」 のカット再現などにも取り組んでいるし)

このへんは、エンジニアだけでなくクリエイターの人にも知ってもらい、すり合わせをしていく必要がある分野だと思った。 グラクロのようなハイクオリティのゲームを作るには、パイプライン改善は必須だろうし、特にUSD対応は大きな変化になりそうなので今後もアンテナ張っておいたほうがよさげ。


DOTSの講演2つ

learning.unity3d.jp

learning.unity3d.jp

DOTSは Data Oriented Technology Stack の略で、オブジェクト指向ではなくデータ指向でプログラム組んでいったほうが今後のUnity的に効率良いよねって感じ。

正直今までDOTS関連の情報は仕入れても頭から抜けていったので、今回の講演を聞いてもすぐに忘れてしまいそう・・・。

ただ、安原さんの「たのしいDOTS〜初級から上級まで〜」の講演では、なんでDOTSがいいの?という初級から説明してくれたので分かりやすかった。

なんでDOTSがいいの?

現在のUnityでは普通にC#プログラムを書くと、Managed Memory として各オブジェクトが勝手に管理されていて、安全で便利な構成にはなっている。

f:id:gidooom:20190928135632p:plain

んで、この汎用的なManaged Memoryは便利なもののゲーム特化の仕組みではない。

なので、ゲームに適したUnmanaged Memory にしてより効率よく扱おうってのがDOTSの設計の1つになっている。

f:id:gidooom:20190928135647p:plain

f:id:gidooom:20190928135719p:plain

このUnmanaged Memory に最適化していく流れは、struct への理解も必須になるので、河合さんのstructに関する濃厚な講演スライドもよく理解しておきたい。

learning.unity3d.jp

Chunkとアーキタイプ

図解で、Chunkの必要性とアーキタイプの概念が分かりやすく理解できた。

f:id:gidooom:20190928145112p:plain

f:id:gidooom:20190928145127p:plain

f:id:gidooom:20190928145139p:plain

f:id:gidooom:20190928145150p:plain

ChunkとSystem

んでChunkを用意したら、どのChunkを入力として扱って何かしらの処理を行うかを、Systemとして用意する。

f:id:gidooom:20190928150127p:plain

f:id:gidooom:20190928150138p:plain

f:id:gidooom:20190928150151p:plain

上の「データの流れ」の図が、DOTSによるプログラミングを図示化したフローなので、今後はこのフローを想像しながらプログラム書く必要がありそう。

Unity Physics

DOTSの流れについていった方がいいかもしれない材料の1つとして、Unity Physicsが登場してきた。

f:id:gidooom:20190928150617p:plain

特徴の1つである「決定的(deterministic)」は確かに強力で、入力を与えたら出力は必ず同じになるので、自動テストへの道が更に進むことにもなる。

Unity Physicsに対応したほうがUnityアプリのパフォーマンスが上がるようので、今後の選択肢として考慮に入れたほうが良さそう。

f:id:gidooom:20190928150630p:plain

ただ、まだまだ突き放してくるようなので、様子見しつつになりそうだけど・・・。

所感

「今はまだ準備段階なのでDOTS使えなくてもok」と講演者も言ってるぐらいなので今すぐ実戦投入しないほうが安全だけど、準備ができたらいつでもいけるようにスタンバっておくのは戦略として有りだと思う。

今までのノウハウそのままで作るのは難しくなるものの、このDOTS環境に適応してきた新世代のゲームたちの方がUnityとの相性的に良いパフォーマンスを出すんだったら、旧世代のゲームたちが駆逐される未来ルートも一応ありうる。

こういう革命的なビッグウェーブは好きなので、乗っかっていくためにもDOTS自分で勉強しておかねば・・・。

基調講演

とても良かった。

下のサイトでかなり詳しくレポートされているので、ここ見てもらったほうがいいと思う。

jp.gamesindustry.biz

UniteTokyo2019とほぼ同じ時期に行われたUniteCopenhagen2019のkeynoteYoutubeに上がっていたので参考に観てみたら、意外と内容を変えていて驚いた。

見比べた感じだと、日本の方が「HELLO WORLD」のカット再現の紹介を入れてたように、アニメーション制作へのUnity適当を推してる?

個人的には、Unityがゲーム制作だけに閉じずに「Shape the World」というコンセプトの元に色々できる幅を広げていってくれるのは嬉しい。

f:id:gidooom:20190928153246p:plain

1日目の所感

料理

Twitter上でも流れてたように、Unity社の料理提供サービス精神が凄くてUnite中は空腹になることが無かった(自分はバナナとコーヒーをめっちゃ頂きました)。

英語多読の成果ちょっと出てきた疑惑

DAY1で参加した下記の3つは、英語での講演だったので同時通訳レシーバーが配られた。

  • "『The Heretic』で学ぶ映像制作テクニック"
  • "Unity 映像制作パイプライン完全マスター"
  • "基調講演"の一部

最初ちょっと聴いた感じ、分かりやすい英語で話してくれてるのと、Unityの話だから英単語聞くだけでも何となく意味わかった感覚があったので、英語多読の一環であえて通訳無しで聴いたけど割と理解できた。

英語多読の効果が少しは出てきたんじゃないかぁと思って嬉しかった。

kidooom.hatenadiary.jp

モチベ湧いた

最近はマネジメント的なタスク割合も増えてるんだけど、やっぱりUnityとか触っていきたいなと思った。

そのためにも、自分で手を動かして個人制作とかもどんどんやっていかないとなぁというモチベーションがアップしたので、Unite参加して本当に良かった。