負荷について
ETS2はオープンワールドのゲームであり、様々な不確定要素が組み合わさることで秒間あたりのフレーム描写数が落ちる、いわゆる”重い”状態になることがあります。
これらの原因は複数あり、一般的には"ポリゴンが多すぎる"と"ドローコールが多い"などと言われますが自分の経験上これは完璧に間違っています。
まずポリゴンですが正確にはvertexと呼ばれる頂点の個数が負荷に関わっています。
この頂点の数が増えると重くなるという話ですが、極端な例を除き処理能力の高い現在のCPUなら問題にならないと思います。
ドローコールとは、テクスチャなどの読み出し時にCPUに負荷がかかるのですが現在のCPUなら問題にならないです。
演算能力の低い家庭用ゲーム機やスマートフォンと違いPCはドローコールには強いはずで、実際のCPU使用率を確認することで負荷の具合が確認できます。
では何が重いのか?
実際にはグラフィックボードへかかる負荷の方が問題になっており、主としてシェーダーとテクスチャの2つです。
ケース1 透過シェーダー
特に透過処理とよばれる背景が透けるようなシェーダーはそうでないものの何十倍もの負荷をグラフィックボードへ一度にかける為、2ポリゴンであっても10万ポリゴンのトラックに匹敵する破壊的な重さになることがあります。
通常のオブジェクトは後ろから前、もしくは前から後ろで描画するだけでいいのですが、透過ポリゴンは前後の計算を何度も行う必要があるため重くなる、そうです。
ちなみに透過は透明部分の面積を削ること、地面のペイントなどはoverの設定にすると軽くなる。
- Vegetationの草や木は相対的に軽い気がする。これらにはSprite処理が行われるためか?
- Spriteって何よ?炭酸飲料?
- 2D合成。ETS2の葉っぱや草は常にカメラの方を向いている。(というかカメラに対して2Dの板を合成している)
ケース2 高解像度テクスチャ
次にテクスチャで、テクスチャの解像度は256x256と512x512だと2倍...に見えますが面積では実に4倍のピクセルを含むことになります。
この大量のピクセルはグラフィックボードへの負荷として圧し掛かり、処理が間に合わなくなれば最終的にフレームレートを下げることになります。
巷で出回っている高解像度テクスチャModの中には不必要に解像度の高いものや、解像度に対して書き込みが不足しており意味の無いものが存在します。ETS2では荒い解像度を利用して質感を見せる方法が随所にみられます。解像度が低いことは必ずしも悪ではありません。
後述するミップマップの問題もあり遠くのオブジェクトには自動的に縮小されたテクスチャが適用されるため意味がない可能性もあります。
ケース3 不適切な乗算シェーダー
これらはETS2のスカンジナビアDLCのパーツに非常に多く見られます。
複数のテクスチャをシェーダーとして重ねることで、軽くて高い質感を目指したのだと思われますが逆に高解像のテクスチャの何倍も重くなっています。
問題点にSCSも学んだのか、AmericanTruckSimulator以降では高解像度のテクスチャに一本化し、周囲の景観や植生も可能な限り削減することで軽量かつ贅沢な景観が作られるようになりました。
今のバージョンだと少し軽くなったかもしれません。
ケース4 Fresnel反射シェーダー
Fresnelは面に対して角度がつくほど反射が見えるようになり、垂直状態では反射が弱くなるシェーダーです。
通常 弱0.2 強0.9で設定されています。
SCS公式で負荷が高いことが明言されており特にホイールなどの動きの激しいオブジェクトでは負荷も高いようです。
(オブジェクトの面の変化に対してFresnelを計算しなおすためだと思われる)
こういった場合にはno fresnelを適用することでかなり軽くなります。
Fresnel反射を利用しないため均一に反射が入りますが、全体的に弱く反射する場合や小さなオブジェクトであれば十分な効果が得られます。
重さの原因5 重なったオブジェクト
ダブルフェース、二重オブジェクト。
まったく同一位置にオブジェクトや面がある場合は描画が非常に重くなります。
激しくチラつくのが確認できる場合がありますが、制作時には注意しましょう。
未確認だけど予想されること
- ハイポリゴン+反射や透過シェーダー
タダでさえ重いものが大量の処理を強いられるから。
必要なときはNormalMapの方が軽そう?
- でっかいオブジェクト
同じ256x256で郵便ポストと六本木ヒルズを作った場合、多分六本木ヒルズは何倍も重い。
というのもミップマップと呼ばれる処理で一定距離離れると処理されるテクスチャが128x128.64x64と小さくなっていく。
ポストは小さいため128x128への切り替わりが早いが、ヒルズは大きすぎて256x256のままでいつまでも描画される、ような気がする。
- ハイポリゴンへの影
計算量が増えるので。あまりにポリゴンが増える時はNormal mapを使いたい。こっちは影は下地のポリゴンに投影される(はず、てかできないはず)
- ボーン・アニメーションオブジェクトの頂点数
GPU・CPU両面から負荷が高いと思われる。
またセルフシャドウについて公式からの言及あり。