前回 p930 でUnityの3つのレンダリングパイプラインを比べたとき、最後に「次回はUnreal側でも同じこと――設定を切り替えると見た目と重さがどこまで変わるか――を試す」と予告しました。さらにさかのぼると p924 で、同じ3DゲームをUnityとUnrealで作ったとき、UnrealがMacで約12FPSと重かったのが引っかかっていました。今回はその宿題の回収です。

🎮 この記事でわかること
・Unrealが「重い」と言われがちな本当の理由(=初期値が“全部盛り”だから)
Lumen(リアルタイムの光の回り込み)をオフにすると、見た目と重さがどう変わるか
Nanite(超高密度メッシュ技術)が「見た目そのままで軽い」とはどういうことか
スケーラビリティを一段落とすだけで、見た目ほぼ同じで約2倍速くなる

前回までの宿題:「Unrealは重い」って本当?

スポンサーリンク

「Unrealは画質がすごいけど重い」――よく聞く評判です。確かにp924でMacで動かしたとき、Unreal版は約12FPSとカクついていました。でもあれは、Unrealの初期設定が“いきなり全部盛り”だったから、というのが今回の主張です。

Unrealは初期状態で Lumen(リアルタイムの間接光・反射)Nanite(超高密度メッシュ) が両方オン、しかも品質プリセットは最上位の「シネマティック」に近い設定で動きます。つまり“映画向けのフル装備”が最初から入っている状態。これを用途に合わせて調整すれば、見た目をほぼ保ったままグッと軽くできるはず。今回はそれを、設定を1つずつ切り替えて実機で確かめます。

Unrealの考え方:1つのレンダラーを“設定で調整”する

前回のUnity(p930)は、ビルトインRP・URP・HDRP という3つの“描き方の土台”を選んで差し替える方式でした。Unrealはそこが対照的で、強力な1つのレンダラーを、設定で調整する方式です。

Unity(前回)Unreal(今回)
考え方土台を3つから選ぶ
(ビルトイン/URP/HDRP)
1つの強力な土台を“設定で調整”
軽くしたいとき軽いパイプラインに替えるLumen・品質設定などを下げる
リッチにしたいときHDRPに替える初期値のまま(もう全部入り)

だから今回はプロジェクトは1つだけ同じシーンのまま、設定スイッチを切り替えて、見た目と重さの変化を見ていきます。主役は次の3つの設定です。

  • Lumen…リアルタイムで光の回り込みや反射を計算する仕組み(オン/オフ)。
  • Nanite…超高密度のメッシュを、見た目を保ったまま軽く描く仕組み(オン/オフ)。
  • スケーラビリティ…全体の品質プリセット(低・中・高・エピック・シネマティックの5段階)。

今回の比べ方(同じ1シーンを設定だけ替えて)

比較は条件を揃えて行いました。今回はこうしています。

  • 同じWindows PC(GeForce RTX 3060)で、同じ1つのシーンを使い、設定だけを切り替える。
  • 差が見えるよう、暗い部屋+色つきの壁+濡れた床+大量の岩を仕込む。岩は合計およそ1,228万ポリゴン(Naniteの効きを見るため意図的に高密度に)。
  • 明るさが勝手に変わらないよう露出は手動固定。画面の内部解像度も固定して、純粋に「設定の差」だけが出るようにする。
仕込んだもの見たい差
🔴🔵 赤い壁・青い壁+白い天井Lumen:壁の色が床や陰に回り込むか
🪞 濡れた床(鏡面寄り)Lumen反射:景色が床に映り込むか
🪨 高密度の岩(約1,228万ポリ)Nanite:見た目を保ったまま軽いか
🌇 窓から差す夕日(動的な影)スケーラビリティ:影や描画距離の質

※ Unrealのバージョンは 5.7 を使いました(前回p929のPLATEAU検証は専用環境で5.5.4でしたが、今回は描画設定の比較が目的なので最新の5.7で統一)。シーンの“作り方”自体は今回の主題ではないので、配置やライトはスクリプトで自動構築しています。一方で、差を生んでいる描画設定は、画像と数値の両方で残します。

Lumen オン/オフ:見た目と重さが激変

まずは今回いちばんの主役、Lumen。リアルタイムで「光の回り込み(間接光)」と「反射」を計算する仕組みです。左がオン、右がオフ。同じシーン・同じカメラです。

Lumen オンの絵
Lumen オン(20.5ms/44.6 FPS)
Lumen オフの絵
Lumen オフ(7.3ms/118.7 FPS)

違いは一目瞭然です。オンでは、赤い壁・青い壁の色が床や岩、陰の部分ににじみ、濡れた床には岩や壁が映り込みます。光が当たっていない面もぼんやり明るく、立体的でリッチ。いっぽうオフにすると、直接光が当たらない面は真っ黒に沈み、床の映り込みも消えて、一気に平面的な絵になります。

項目Lumen オンLumen オフ
壁の色の回り込み赤→床/岩、青→床に色がにじむなし(陰が真っ黒)
濡れ床の映り込み岩・壁・光が映る消える(床はほぼ黒)
陰の明るさ持ち上がって色が乗る沈んで黒い
GPUフレーム時間(短いほど軽い)20.5 ms7.3 ms
FPS44.6118.7
💡 Lumenはおよそ13ミリ秒ぶんの“ごちそう”
Lumen(間接光+反射)だけで、GPU時間の約13ms(20.5→7.3)を使っていました。オフにすると約3倍軽くなる計算です。その対価が「色の回り込み・映り込み・陰のやわらかさ」というリッチさ。p924でUnrealがMacで重かった主因が、このLumenだったことが数字でハッキリしました。逆に言えば、そのリッチさが要らない場面では、Lumenを下げるのが一番効くということです。

※ Lumenのオン/オフは「ポストプロセスボリューム」または r.DynamicGlobalIlluminationMethodr.ReflectionMethod というコンソール設定で切り替えられます。今回は陰の差をハッキリ見せるため、環境光(Sky Light)をあえて置かず、夕日1灯にしています。

Nanite オン/オフ:見た目そのままで“中身”が218倍

次は Nanite。ものすごく細かい(高ポリゴンな)メッシュを、見た目を保ったまま軽く描く仕組みです。今回の岩は合計約1,228万ポリゴン。これをオン/オフで比べます。

Nanite オンの絵
Nanite オン(描画プリミティブ 約15,500)
Nanite オフの絵
Nanite オフ(描画プリミティブ 約337万=218倍)

面白いのは、見た目はほとんど区別がつかないこと。なのに“中身”はまったく違います。Naniteがオンのとき、実際に描いている細かい部品(プリミティブ)の数は約15,500。オフにすると約337万=オンの約218倍に膨れ上がります。つまりNaniteは「見た目はフル詳細のまま、描く手間だけを約218分の1に圧縮している」わけです。

指標Nanite オンNanite オフ
見た目ほぼ同じ(近くで見ても区別困難)
描画プリミティブ数約15,500約337万(218倍
GPUフレーム時間20.7 ms24.1 ms
FPS44.639.1

今回はGPUが優秀なRTX3060だったため、体感のFPS差は控えめ(44.6→39.1)でしたが、プリミティブ数の差は歴然。ジオメトリの密度や画面に占める面積が増えるほど(数千万ポリ級・影の計算も含めると)、Naniteの効きはさらに大きくなります。Naniteは「重くする技術」ではなく、「重くせずに細かく盛れる技術」。だから基本はオンのままでOKです。

※ ひとつ注意。Naniteを切るときに r.Nanite 0 だけだと、自動生成された“低ポリの代役”が表示されてGPU負荷が変わりません。今回はメッシュ側のNaniteそのものを無効化して、本来の全ポリゴンを描かせた値です。

スケーラビリティ5段階:どこまで落とせる?

最後は全体の品質プリセット スケーラビリティ低・中・高・エピック・シネマティックの5段階を切り替えました(画面の内部解像度は固定し、品質設定の差だけを見ています)。代表として「低・高・シネマティック」を並べます。

スケーラビリティ 低
低(3.5ms)GI・影が消えてフラット
スケーラビリティ 高
高(7.2ms)色フィルと影が戻る
スケーラビリティ シネマティック
シネマティック(20.5ms)フル品質
段階主な見た目GPU時間FPS
GI・影がほぼ消えてフラット(別物の絵)3.5 ms119.8
影は出るがGIが弱く陰が暗い5.0 ms119.6
Lumen GIが戻り、陰に色フィル・柔らかい影7.2 ms102.4
エピック見た目はシネマティックにほぼ並ぶ9.8 ms90.2
シネマティックフル品質(GI・反射・影が最高)20.5 ms44.6
🎯 実用の最適は「エピック」
注目はエピック(9.8ms/90 FPS)→シネマティック(20.5ms/44.6 FPS)見た目はほぼ同じなのに、シネマティックは約2倍重いのです。シネマティックは“盛りすぎ”で、映像書き出しなど止め絵向け。リアルタイムで動かすなら「エピック」に一段落とすだけで、見た目そのままに約2倍速くなる――これが今回いちばんの収穫でした。なお「低」はGIも影も消えて軽い代わりに、絵がフラットな別物になります。

Forward と Deferred(用途の違い)

もうひとつ、Unrealにはレンダラーの方式として Deferred(ディファード)Forward(フォワード) の2つがあります。今回の比較はすべて初期設定のDeferredで行いました。ざっくりの使い分けはこうです。

Deferred(既定)Forward
得意なことLumen・多数の動的ライトMSAA(くっきりした輪郭)・軽さ
向いている用途リッチな表現・通常のPCゲームVR・モバイル・半透明が多いシーン
注意点MSAAが使えない(TAA/TSR前提)Lumenが使えない

ポイントは、ForwardではLumenが使えないこと。なので今回の主役(Lumen・Nanite・スケーラビリティ)はすべてDeferredで比べました。Forwardは「VRやモバイルなど、軽さと輪郭のくっきりさが欲しい場面で選ぶ別の道」と覚えておけば十分です(用途が違うので、同じリッチな絵を比べる土俵には乗りません)。

まとめ:「Unrealは重い」は誤解だった

今回の検証を一言でまとめると、「Unrealは重い」は誤解でした。重いのは初期値が“全部盛り(Lumen+シネマティック品質)”だからで、用途に合わせて調整すれば十分コントロールできます。

  • Lumen:リッチさの主役だが、GPU時間の約13msを消費。不要ならオフ/品質を下げると一番効く(約3倍軽い)。
  • Nanite見た目そのままで“描く手間”だけを大幅圧縮する技術。重さの主因ではないので基本オンのままでOK
  • スケーラビリティシネマティック→エピックに一段落とすだけで、見た目ほぼ同じで約2倍速。実用の最適はエピック。

実際、p924で重かった“全部盛り”(44.6 FPS)も、エピックに落とすだけで90 FPSへ。RTX3060でもこの通りです。軽くしたいときに最初に下げるべきは①品質プリセット(→エピック)→②Lumen→③解像度の順。Naniteはそのまま、というのが今回の結論です。

前回のUnity(p930)は「土台を選んで差し替える」、今回のUnreal(p931)は「1つの土台を設定で調整する」。アプローチは違っても、“何を最初から欲しいかで決める”という勘どころは同じでした。エンジン選びや設定で迷ったときの、ひとつの手がかりになれば嬉しいです。

それでは、今回はここまで。最後までありがとうございました😊