- 仮想テクスチャ
- 水面
- アダプティヴ・シャドウ
- UI の最適化
- 履帯の計算の見直し
- 高度な樹木モデル・システム
- 詳細度の切り替え
- 最適化されたパーティクル・システム
新エンジンへの移行には、グラフィックの見栄えを改良するだけではなく、負荷を高めないように最適化するという 2 つの重要な目標があったため、長く複雑な過程となりました。1.0 ではグラフィックが大幅に美しくなりますが、それが各自の PC でどの程度の負荷になるのかが気になるところでしょう。ですが、開発チームの懸命な努力と献身のおかげで、必要動作環境および推奨動作環境は従来版と同様なのです。
これはつまりどういうことでしょうか? 古い PC (10 年前の PC でプレイしている皆さまがいらっしゃいます) であっても、改良版のグラフィックで問題なくお楽しみ頂ける、ということなのです。各自の PC において最適な設定でお楽しみ頂くためには、ゲームの開始時に自動検出機能をご利用ください。その後に、必要に応じて細かな設定変更を加えましょう…
新エンジンには、ブレンド負荷が高い要素を事前に計算して仮想テクスチャに保存し、事前に読み込んでおいて、必要になった場合のみに表示する、という仕組みが実装されています。加えて、テッセレーション・ステージにおいてマテリアル・ブレンディングを行う必要がなくなりました。これに伴い、負荷をあまり高めることなくテッセレーション (細部をより詳細・滑らかに描写するための手法) を利用することが可能になりました。
動作の解説:
地形は、草や砂、岩石など多数のマテリアル (材質) を含む極めて複雑な要素であり、最も複雑なケースにおいては、毎フレームにおいて各ピクセルに対し 8 種類のマテリアルをブレンドする必要がありますが、これは GPU に対する大きな負荷になります。従来版では、地形は毎フレームにおいてレンダリングされていました。
従来版では、水面での反射を生成するために、反射方向からシーンを再レンダリングするという「力業」を用いていました。ですがこれは今でも最も効率的な手法なのでしょうか? そうではありません。新グラフィックエンジンでは、スクリーンスペース・リフレクションという手法により改良を図っています。
動作の解説:
私たちは、スクリーンスペース・リフレクションを、事前計算された反射データを保存する視差補正リフレクション・プローブと組み合わせました。これに伴う追加の恩恵として、この新たなアプローチにより、水面反射の描写を忠実なものにすることができました。従来版では、水面反射の描写が簡略化されていました。
影を描写するためには多大なグラフィック・リソースが必要であるということが知られています。しかし私たちの場合は違います! 私たちは、仮想テクスチャに似たアプローチで負荷を軽減することに成功しました。
動作の解説:
影の大半がマップを読み込んだ際に計算され、マップが変化した際のみに再計算されます。これはパフォーマンスを高める上で大きな効果があり、ローエンド PC においても正しく照明計算されたオブジェクトを実現できます。
UI にも、パフォーマンスおよびメモリ消費量への負荷を軽減すべく、大幅な最適化を加えました。
動作の解説:
不透明な UI 要素 (ミニマップやダメージパネル) に隠された部分は、3D シナリーのレンダリングを省くようにしました。これにより GPU 負荷が軽減されます。
ちょっとしたシンプルなトリック:
従来版では、クライアント側での履帯周りの物理演算は、履帯モデルの個々の頂点に対して適用されていました。具体的な数値としては、10,000 頂点を超える場合があったのです。それも、たった 1 両分の履帯で、です。これが非効率であることは明白でした。
変更点:
履帯の挙動計算を、個々の頂点毎ではなくセグメント毎 (平均的な車輌 1 両あたり 100 程度) に行なうようにしました。この最適化によりパフォーマンスが向上する一方で、ヴィジュアル品質には影響しません。GPU 負荷を下げつつも、自然でリアルな履帯の挙動を実現しています。
アップデート 1.0 では、樹木用の高度なビルボード・システムが実装されます。
動作の解説:
遠方の樹木はビルボード (平坦な四角形にテクスチャを貼ったもの) として描画されますが、新エンジンにおいては、樹木をビルボードに焼き込む際に、深度やライティングなどの様々な情報を含めるようにしました。これに伴い、ビルボードによる樹木の描画品質が向上したため、従来版に比してカメラからずっと近い距離でビルボードに切り替えることができるようになりました (そして、違いは全く分からないはずです!)。
各オブジェクトを描画する際の詳細度 (Level of Detail; LoD) は、設定とカメラからの距離に応じて調整され、カメラからの距離が近いほど、より詳細に描画されます。逆に、カメラからの距離が遠くなるほど、簡略化されて描画されます。距離が遠くて判別できない場合には、壁の割れ目を詳細に描画する必要はありませんから。
変更点:
新エンジンへの移行に伴い、詳細度の調整は、短時間の間にできる限りスムーズに行われるようになり、詳細度の切り替えに伴う違和感が生じないようになります。そして何といっても、このシームレスな変化を実現するためには、追加のリソースを必要としません。
注: その全てを標準的なレンダリングと併せて行なうためには、詳細度の変化をゼロにする (最高品質) オプションの使用を廃止する必要がありました。次善設定との品質の差は実質的に見分けることができない程度ですが、この決断は、必要動作環境を従来と同じに維持する上で役立ちました。
若干数の爆発が同時に発生しただけでフレームレートが低下し、最悪の場合はフリーズさえ起こっていた、ということを覚えているでしょうか? そこで、これが発生しないように、パーティクルにマルチレゾリューション・レンダリングを追加しました。
動作の解説:
新エンジンでは、複数の爆発が同時に発生した際に、輪郭部のみを高解像度で描画し、内部に関しては低解像度で描画するようにしました。この切り替えは実質的に気付くことができない程度ですが、重要な曲面においてパフォーマンスを効果的に維持してくれます。
自分自身の目で確かめてみたいと思いませんか? ぜひ enCore プログラムをお試しください。このプログラムでは、ご利用の PC におけるアップデート 1.0 のパフォーマンスをテストすることができます。