kidoOooOoooOOom

ゲーム開発やってます

Witcher3の開発で使われているSimplygonとUmbra3について

GDCの資料を見て英語とゲーム開発について勉強するシリーズ。

自分がとても好きなゲーム「Witcher3」に関する講演資料を読んでみる。

f:id:gidooom:20190720213318j:plain

今回は、GDC2014で発表された資料2つを読んだ。

まず1つ目の資料は、

GDC Vault - Speed Up Your Game Using Simplygon (Presented by Simplygon)

Withcer3ではLODの生成に、Simplygonを採用している。

LODとは

Level Of Detail の略で、カメラからの距離に応じて3Dモデルのディテールを切り替え、シーンの計算負荷を軽減する方法。

カメラから離れた位置にある3Dモデルのポリゴン数やテクスチャ容量を減らすことで、シーンの見た目を大きく損なうことなく、描画を高速化できる。

Unityでも標準でサポートされていて、設定自体は割と簡単にできる。

LOD グループ - Unity マニュアル

Simplygonとは

ハイポリゴンのモデルを自動的にリダクションしてローポリゴンのモデルを生成してくれるツール。(2017年にMicrosoftに買収されている)

www.gamebusiness.jp

自分も前に使おうとしたけど、Windowsじゃないと動かなかったので諦めた。

実績も多く、性能は優秀っぽい。

Withcer3で Simplygonを採用した結果

GDC2014の発表資料によると、前作のWitcher2ではLODを主に3段階用意しており、Artistが手作業で作っていた。

しかし、この手作業でLODを作るのは数ヶ月単位の作業になるし、何よりArtistにとっては苦痛な作業になっていた。

とはいえ、LODのローポリゴンモデルを生成するツールを自作するのは非常にHardである。

f:id:gidooom:20190720211511p:plain

そこでSimplygonを採用したところ、LODを作るコストが99%削減され、クオリティもArtistが手動で作ったものと同等かそれ以上のものが出来たとのこと

f:id:gidooom:20190720212139p:plain

f:id:gidooom:20190720212230p:plain

これが自動で生成されるんだったら、確かに便利。

参考サイト: doope.jp


次に、2つ目のGDC2014での講演資料は、

GDC Vault - Solving Visibility and Streaming in the The Witcher 3: Wild Hunt with Umbra 3 (Presented by Umbra Software)

Withcer3では、Occlusion culling に Umbra3というミドルウェアを採用しているとのこと。

Occlusion culling とは

あるオブジェクトが他のオブジェクトに隠されていて現在カメラに映らないときに、オブジェクトのレンダリングを無効にする機能。

Witcherのような広大なマップがあるゲームにおいては、処理の節約のためにもほぼ必須の機能になる。

Unityにも標準で搭載されている。

docs.unity3d.com

Umbra3とは

Umbra3は、Occlusion culling に特化したミドルウェア

資料によると Call of Duty, Destiny, KILLZONEなどのトップクラスのタイトルでも採用されている。

描画処理の無駄を削減するミドルウェア「Umbra」、スタッフインタビュー - GAME Watch

Umbraの特徴は、上の記事によると

「『Umbra』は、三次元空間の中で、カメラから見てどのオブジェクトが見え、どのオブジェクトが見えないのかを優れたアルゴリズムで判定し、レンダリングエンジンにかかるオーバーヘッドを最小化する技術です」

Umbra Softwareのスタッフは、会社の設立よりずっと前となる1997年頃よりこの技術を専門的に研究してきており、製品となったミドルウェアには非常に高度なアルゴリズムが実装されている。

という感じで、Occlusion Cullingにとにかく特化している製品だと分かる。

そして以下の記事を見ると、実はUnityのOcclusion Culling も内部で Umbraのライブラリを使っているっぽい?

tsubakit1.hateblo.jp

ちなみにこのOcclusion Cullingは Umbra Softwareの提供するライブラリを使ってるとか何とか。

SlideShareに、Umbra社が公開している資料も挙がっていたので、詳しくアルゴリズムを知りたくなった場合はこれを見てみるとよさそう。

Visibility Optimization for Games

Withcer3で Umbra3を採用した結果

Withcer3では自社製のゲームエンジンであるREDEngine3が使われており、Engine teamのメンバーは16人と限られている。

また、Witcher3の世界は前作のWitcher2の世界と比べて、35倍以上の大きさになっている。

この広大な世界を効率よく表示するために、高度なOcclusion Cullingのアルゴリズムを持っている Umbra3をミドルウェアとして採用したとのこと。

f:id:gidooom:20190721081840p:plain

また資料の中で、Witcher3におけるマップのスケリッジが8km8km, ノヴィグラドが8.5km8.5kmのサイズのマップであることが公開されている。

f:id:gidooom:20190721085435p:plain

実寸台のサイズで世界が作られているとして、8km * 8kmもの広大な土地を原作の雰囲気やレベルデザインを考慮しながら作っていくのはめちゃくちゃ大変だろうなぁ・・・と思った。

参考サイト: doope.jp

まとめ

自分がメインで触っているUnityでもこの辺の知識は必要になるので、仕事の制作や自作ゲームでもパフォーマンス改善を考慮したい場面があったらすぐに思い出せるようにしておきたい。