2022年11月21日月曜日

【Unreal Engine 5.1 on macOS 】UE5.0と比べて影が濃くなった現象と回避方法 Lumen on macOS

【環境】
MacBook Pro (2021年モデル M1 Pro, 14-inch, 16GB Memory) macOS Ventura 13.1
Unreal Engine 5.1.0 正式版(Preview版では無いの意味)
※2023.2.8 Unreal Engine 5.1.1 でも試してみました。末尾参照。
※2023.3.23 また、Unreal Engine 5.2.0 Preview 1 にて本事象が解消されました!
※2023.5.12 Unreal Engine 5.2.0 正式版リリースされ、問題ありませんでした!

【症状】
Unreal Engine 5.1.0がリリースされたので使ってみた。
Unreal Engine 5.0.xと比べて全体的に動作も爽快になって素晴らしい!と思っていたが、そういえばなんとなく影が暗くなった気がする。

よってThirdPersonプロジェクトで比較してみた。

まずUE5.0.3の場合:


次にUE5.1.0の場合:


UE5.0.3では右端の壁の影の格子線がうっすらと見えるが、UE5.1.0では真っ黒である。

壁に寄って、マネキンも置いてみる。

【UE5.0.3】

【UE5.1.0】


UE5.1.0では影が完全に漆黒である。


【回避策】
根本解決では無いと思うが、PostProcessVolumeのパラメータを変えることで、真っ黒現象は回避可能だった。

設定対象:レベル上の Lighting → PostProcessVolume
設定内容:Global Illumination → Lumen Global Illumination → Final Gather Quality をデフォルトの 1.0 から最小値(0.25)にする。



【UE5.1.0 対応後】
UE5.0.3の見た目とほぼ同じになった。

なお、以下の値を境界にして、真っ黒↔︎見えるが切り替わる。(これがいわゆる「マジックナンバー」? Unreal Engineとしては初めて見つけました✌️)
・0.472657以上:影が真っ暗
・0.472656以下:影が真っ暗ではなくなる

また、不思議なことにマネキンの関節部分だけが、真っ黒から白に変わるのである。
メッシュ内部の何か(Material)の要因も関係しているということだろうか?


なお、エディタ上では漆黒問題は回避できたが、シーケンサーの Movie Scene Capture (Legacy) や Movie Render Queueで動画出力した場合には、やはり残念ながら影が真っ黒になってしまう。。
シーケンサーで使用するカメラ側のFinal Gather Qualityを0.472656以下にしてもダメだった。


【考察】
Unreal EngineをUE5.1.0から使い始める人は、この影が真っ暗なThirdPersonプロジェクトとかから触る訳で、「なんじゃこれは?Unreal Engineってすごいと聞いてたけどこんなに見づらいの?」とか思われないか、Epic Games社が心配である^^
(むしろ問題のなかったUE5.0から使い始めた私がラッキーだったのか???)

今回触った設定値にもLumenとある通り、Lumenバージョンアップ周りの影響か、またはMacならではの現象なのだろうか?

リリースノートも以下の通りである。(新機能紹介のトップバッターですね。)
Lumen、Nanite、および仮想シャドウ マップの更新

次世代コンソールや次世代対応 PC で 60 fps で動作するゲームや体験に対応するための 
Lumen ダイナミック グローバル イルミネーションおよび反射システム、Nanite 仮想化
マイクロポリゴン ジオメトリ システム、仮想シャドウ マップ (VSM) の基盤を確立することで、
高速の対戦ゲームや詳細度の高いシミュレーションをレイテンシーなく動作させることができるように
なりました。

私は初心者すぎて、一体どの技術が影響しているのか見当もつかないのだが、以下のようなフォーラムでも議論されている通り、最近でもやはりMac上でLumenが動くだの動かないだのの話は続いているようである。
※トピックはいくつもあるのだが、Epicからの公式返答がどこを見ても見当たらない^^この件については明言を避けることに内部的になっているのだろうか?^^
→上記1つ目のフォーラムにて、Epicスタッフの方から返答がありましたね!末尾参照。

※なお、タイトルに「Lumen on MacOS」と記載したのはDeveloper Forumを眺めていると同じようなトピックが多かったから。原因の可能性であるかも知れないが、明確に原因という意味で書いたわけではない。
ただし、公式ページにもLumenグローバルイルミネーション部分に、実は同じような比較画像付きで説明があった。
比較画像でもLumen GIがOFFの場合は、影部分が漆黒になっていることがわかる。

また、Lumen Global Illuminationの「Final Gather Quality」とは、Lumen のグローバル イルミネーションの品質を向上させ、レンダリングされるノイズを低減する値っぽい。色々サンプルを見ると、値が大きいほどノイズ除去効果があるようだ。
今回の事象は、値を上げて品質を上げたつもりが、むしろ影が漆黒になってしまう、といった感じだろうか。
精度をあげることで反射とかを計算しすぎて、ある臨界点を超えて明るさよりも影の力がまさってしまっているのだろうか?
UE5.0 で問題なかった頃は、影部分もうっすら見えていたので、明るさ>暗さ だったが、UE5.1 でFinal Gather Qualityの値を上げて品質向上させると、なぜか 明るさ<暗さ になっているとも言える。しかしいくら品質を良くしようが悪くしようが、明るさ>暗さ の不等式が逆転することはありえないはず。。
上記は単なる直感的な説明になり、また、繰り返しになるが、MacOS環境上でもUE5.0では問題なかったので、MacOS環境上でUEを動作させた場合のLumenがらみの何かの「噛み合わせ」の問題と思いたい。

※そもそもWindowsでは問題ないか気になるところです。(試して比較できればいいのですが。。)
※キーワードだけでも、Lumen, PostProcess, Global Illumination (GI), 仮想シャドウマップ(VSM)とかがあって、さらにプラットフォームとしてのMacOSが絡んでくる訳ですね^^
MacOSもちょうどMontereyからVenturaへのバージョンがあったりと。。(VenturaではゲームAPIのMetal 3が話題でしたね。BioHazard Villageが移植されたりしました!ただしMetal 3が今回の問題と関係あるかどうかは私の知識では不明です。そもそもUEのMetalに対する取り組みとかロードマップとかも私はまだ知識が追いついておりません。。(あくまでもiOS用にビルドするためだけに使う、という姿勢?))

私としては、早く改善版が出てくれるか、解決策がフォーラムで議論されるかを待つばかりである。(UE5.0.xでは問題なかった訳であるし、個人的にはUnreal Engineのデフォルトパラメータが噛み合ってない系の話であって欲しい。。)

※なお、私が知らない間にエンジン全体に関する設定を変えてしまっていて、そのせいではいけないと思ったため、UE5.0.3及びUE5.1.0はアンインストールした上で再インストールして試してます。(1日がかりの作業だった。とは言っても約16GB×2つのダウンロードを待つだけでしたが。。)

※ちょっとだけUEについて知見を得たので書いておくと、やはりNaniteとLumenとかPostProcess, GI, VSM, ... は密接に関わってるようで、やはりMac+Naniteの問題の影響なのだろうか?
こちらにも書いたが、MacではNatiteは対応されていないし対応予定もないので、Macは置いてけぼりにされるのだろうか。。。?😢
それとも下記はあくまでも、「Mac上のグラフィックス API (Metal) にはUnreal Engineのエンジンの根本的なところから対応することはないけど、動く範囲では動かせる」と言った意味合いなのだろうか?
UE5で(もしかするともっと前から?)ノンゲーム(映像制作とかアニメとか)分野でも「最終アウトプットに近い状態で制作が進められるので、制作フローが根本的に変わる」とかあったと思い、映像分野(アート分野)に強いMacに対するUEの対応方向は気になるところである。
There is no Mac OS support for Nanite, nor is any likely in the future due to 
graphics API limitations.

(Google翻訳) Nanite に対する Mac OS のサポートはありません。また、グラフィックス API の制限により、
今後もサポートされる可能性はありません。

NANITE FOR EDUCATORS AND STUDENTS より抜粋


(余談)実はもう一つの問題があって、Megascanから追加したメッシュが何故かある日突然、表面の見た目が真っ白になってしまった現象があり、現在未解決である。
一応、一時的な回避策としては、画面右上のSettings → Preview Rendering Level をAndroid Vulkanとかにすれば、モバイル上の見た目を再現してくれて表面画像も描画されるのだが、根本解決ではない。
ちょっと余談で書くにはボリュームが大きくなってしまうので、こちらも解決したら別記事を書く予定です!

→こちらの問題もUE5.2.0にて解消されておりました!
 (こういったエンジン側の問題(?)となると、もう原因は追えませんね。。)

ーーー
2023.2.8 追記
Unreal Engine 5.1.1 がリリースされました!
早速、新規ThirdPersonプロジェクトを作成して確認してみましたが、残念ながら影漆黒問題はそのままでした。。。

でも、Point LightとRect Lightは効くようになったんですね。
UE-157521	Point and Rect Lights on Mac do not cast or project any light
最初に書きましたが、またそもそも話になりますが、もしかして「現実に近づけた結果UE5.1.xの影描画になったので、UE5.1.xの方が正しい。UE5.0.xの方が現実とずれていた。UE5.1.xからは使う人が自分で少なくとも何らかのライティング(Lighting)設定することが前提!」ということなのでしょうか?(Windows版と比較できないことが痛い。。)

Point and Rect Lights on Mac ということで、Mac上の問題として認識されている訳で、それであれば、Point LightとかRect Lightとかの話以前に、影漆黒問題も認識されてると思うのだが、何せ公式見解(回答)がないので推測するしかない状況なのである。。

ーーー
ちなみに、UE5.1.1 でPoint LightとRect Lightは効くようになった訳だが、UE5.1.0で漆黒問題の調査時にPoint Light・Rect Lightも試してたが、どうりで効果がなかった訳だ^^
Point LightとRect Lightの問題だけ取り上げても「一体何が正解か?」がわからなくなってしまった感がある。(改めて、UEを期待を持って使おうとしてるユーザさんに対してEpicさん大丈夫だろうか?^^)
Point LightとRect Lightとか、結構基本的な機能な訳で、テスト・動作確認もしてたのかな?的な話になり、一体UE5.1.xからはベータ版リリースになったのだろうか?とユーザに思われないか、とても心配である。。

ーーー
こちらに別の回避策が投稿されてました。
Lumenは諦めて、Global Illumination (GI) Method をScreen Space (Beta) にする、という回避策ですね。
これであればシーケンサーからの動画出力も漆黒問題はありませんので、シーケンサーで動画作成されてる方は、根本解決されるまではこちらの回避策の方が現実的かも知れません。
ただし、「絵作り」(Postprocessとか)を実施済みの場合は、GIをLumenからScreen Spaceにすると見た目に結構な影響があるため、もう一度絵作りのやり直しは必要になってきそうですが。。

さらに、こちらにスタッフの方から内部的な回答もありましたね!!!
恐縮ながらGoogle翻訳させて頂きます。
M1 および M2 アーキテクチャは現在、HW で 64 ビット アトミックをサポートしていないため、
現時点では Nanite と Lumen with RayTracing を実装できません。
レイ トレーシングなしのルーメンは動作するはずですが、特定の問題が発生している場合は、
バグ レポート システムからお知らせください。

今後の M3 アーキテクチャがこれをサポートすることを期待していますが、これらの機能をさらに
実装する方法をコミットする前に、まだ様子を見るのを待っています.

どうやらM1/M2チップでは、「64 bit atomics」をサポートしていないため、Nanite と Lumen with RayTracingが対応されてないようです。
何かしらやりようはあるのかも知れませんが、少なくともM3チップのアーキテクチャが判明してからとなりそうです。
(結果としてM3チップで上記機能サポートされ一件落着するのか、またはM3チップ上で機能サポートされず、UEも未サポートが続くのか、はたまた、UE側が「しょうがないか」とか言って次善策で対応してくれるのかは、蓋を開けてみないと分からない。。)

とりあえず、MacOS上ではしかるべき理由があってNanite & Lumen (の全機能まで)はサポートされていないということが分かってよかったです。
また、着地点がお互いにベストな結果になることを期待したいと思います!

ーーー
ソフトウェア開発をされた方であれば分かると思うが、今回の件で言うと、UE5.0.xからUE5.1.xへのバージョンアップによって漆黒問題が発生した訳だが、バグだからといって簡単に「引っ込める(バージョンを戻す)」ことができる箇所と、そうでない箇所がある。

UE5.0.xからUE5.1.xに切り替えて、エディタ全体の動作が爽快になって驚かれた方もたくさんいるかと思うが、それはやはり全体にわたる修正とか、アーキテクチャに関わる修正な訳であって、「漆黒問題が発生したから、ここだけバージョン戻せ」とはいかない訳である。
(もしも戻したら、そこのソースコードはUE5.0.x→UE5.1.xで作業した分がまるまる無駄になるということ。)
無駄にならない・させないために、次期バージョンアップで実現したいこと(ビジョン)から入って、細かい設計まで慎重に行う訳である。
(もしもそこがミスっていては、確かに残念な結果になってしまうのであるが、ここまでユーザの支持を得ながら成長されてきて、場を重ねてきた猛者の方々が方針を打ち出しているはずなので、流石にそこまで大きな過ちはないと思う。)

よって漆黒問題はいわば二次的・副次的な結果生じた問題であって、解決するには現状路線を進んで行って解決するか、または大幅に方針転換して(それこそこの問題のためだけに)対応するか、のどちらかになるのだが、上記の通り後者はまずあり得ないだろう。

いちUEユーザとしては、MacOS + UE 環境がお互いにベストな着地点に到達してもらうことを願うばかりである。

ただ、本記事の記載動機でもあるが、MacOS + UE5.0.xから使い始めて漆黒問題もなかったことを知ってるだけに、UE5.1.xの間はLumenを諦めなければならないのがなかなか決心が付かない、と言いたいだけであった。

まあ今回スタッフの方からも原因の説明があった訳で、また私個人的にはMacOS + UEで映像制作をメインに使っているため、解決されるまではGI MethodをScreen Spaceにすることで対応しようと思う。
※あ、あとM3チップ + UEで解決されたとしても、M1/M2 Macはどうなるか次第ですね^^M1/M2 Macもどこをどう通るか分かりませんが、うまいこと対応されるといいですね!または、このためだけに買い替えるか!?(というか、このためだけに買い替える余裕があるのであれば、MacBookは10,20,30,...万はするのでWindows + RTX30xxとかにした方が良さそう?^^これもUEとかゲーム分野に目覚めて本格的にやりたければですが。←Macで3D映像制作したい人マイナス1人^^こう言うところの「シェア」的な点でもMacはまだ弱いですかね?(こう言う意味まで含めてMac側もWin-Winの関係を作れるかですね!) まぁホットな話題といえばホットな話題でした。。)

ーーー
2023.3.23 Unreal Engine 5.2.0 Preview 1 が利用可能になりました!
早速ThirdPersonプロジェクトで試したところ、漆黒問題も直っておりました!!!🎉

シーケンサーの Movie Scene Capture (Legacy) や Movie Render Queueで動画出力しても問題ありませんでした。
対応ありがとうございました!
(Macで3D映像制作したい人がマイナス1人しなくて済みました😅)

ーーー
2023.5.12 Unreal Engine 5.2.0 正式版がリリースされ、漆黒問題も問題ありませんでした!
Movie Scene Capture (Legacy)、 Movie Render Queueも大丈夫でした。

リリースノートのBug Fixedや改善項目中には、本トピックの影漆黒問題に対する直接的なものは見つけられませんでしたが、リリースノート中に以下が挙げられており、この辺の話だったのでしょうか?
Hardware ray-tracing support for Lumen is not supported on macOS, 
which means Lumen will fall back to using a software-only ray-tracer. 
This means Lumen will produce lower-quality results (for example, 
reflections are less detailed and dynamic meshes are not visible in them) 
on Apple Silicon compared with devices that have hardware ray tracing support.
Unreal Engine 5.2 Release Notes | Unreal Engine 5.2 Documentation より抜粋

ハードウェア・レイトレーシングからソフトウェア・レイトレーシングに「戻す」(fall back) するとありますね。

UE5.1.x での回避策として、Final Gather Quality ≦ 0.472656 を境に、漆黒⇔そうでないが、綺麗にOFF/ON状態になっており、これがH/W Ray-TracingかS/W Ray-Tracingの境界線だったのでしょうか?
Final Gather Quality ≧ 0.472657 ではクオリティを上げるためにH/W Ray-Tracing処理になるが、Apple Silicon MacのGPUとの相性?とかの問題で、うまく処理されずに、結果的に影部分が漆黒状態になっていたとか?

そしてこの問題点はすぐには解決できないとかで、UE5.2.0 では(諦めて)全てS/W Ray-Tracingに「戻した」(fall back)ということだろうか?

ということで、本事象はどうやら UE5.1.x だけ特有の問題だったっぽい。
直ってくれれば問題ないわけで、この点について対応していただいて本当に助かりました!

ちなみに最後に、この内容はEpic Games DEV COMMUNITYフォーラムにも投稿させていただきました。