UE5のLumenに関して、Tiwtter上で呟いたTipsなどをこちらにまとめていこうと思います。
見づらくてごめんなさい!
Lumen GIやLumen Sceneなど全体の設定について
Lumenのライティングのもやもやを改善したいとき
LumenのLightingのもやもやを改善したい場合、最初の一歩としてPostProcessingの"Final Gather Quality"をあげると良いかもしれません。動画の様に、パラメータを上げることによりGI計算のレイの数が増え、ライティングのにじみが減っているのがわかるかと思います。
— スミオ(SUMIO) (@tempkinder) March 15, 2022
#UE5 #UE5Study pic.twitter.com/WApL9yfez6
Lumenのライティングの変化のスピードをあげたいとき
Lumenのライティングの変化がじわじわしすぎだと感じる場合、ポスプロ設定の"Final Gather Lighting Update Speed"をあげることで改善できるかもしえれません。ただし1フレームで一度に更新するRadiance Cacheの数が増えGPU処理負荷が増えるので、そこ注意は注意が必要と思われます。
— スミオ(SUMIO) (@tempkinder) March 16, 2022
#UE5 #UE5Study pic.twitter.com/kcAxagyiVv
Lumen上でのマテリアル更新頻度を上げたい場合
Lumen界ではマテリアルパラメータの動的変化を捉えられないので、フレームに分散してオブジェクトの情報(カード)を更新します。更新頻度が低いと反射などでは目立ちます。更新頻度は
— スミオ(SUMIO) (@tempkinder) March 13, 2022
r.LumenScene.SurfaceCache.CardCaptureRefreshFractionの値を上げることで改善します。ただし(続)
#UE5 #UE5Study pic.twitter.com/uliwl4WK13
Emissiveオブジェクトなど影響が大きいオブジェクトを必ずLumenの計算に含めるようにする設定
Lumenはスクリーン上の小さなオブジェクトを処理負荷のためにlumen界から省きますがEmissiveオブジェクトが省かれるとライティングの影響が大きくなります。対策としてメッシュの"Emissive Light Source"をONにすると、そのオブジェクトは常にLumenのシーン内にいるようになります。#UE5 #UE5Study pic.twitter.com/Y4PcVL7DJy
— スミオ(SUMIO) (@tempkinder) March 12, 2022
Lumen Scene Lightingの効果
Lumenの二次反射の参照先となるLumenSceneですが、その”LumenSceneの”ライティングのクオリティを調整するのがポスプロの"Lumen Scene Lighting Quality"です。シーンの絵よりもデバッグの表示のライティングが大きく変わっているのがわかるかと思います。#UE5 #UE5Study pic.twitter.com/26ymuHJHBZ
— スミオ(SUMIO) (@tempkinder) March 17, 2022
Lumen Scene Lighting Update Speedの効果
"Lumen Scene Lighting Update Speed"もLumen Sceneののライティングの更新速度をあげます。このパラメータを変えると上部分のDebug Viewのライティング更新が速くなっているのがわかるかと思います。メインのシーンの更新速度には大きく影響していないのが注意点かもしれません。
— スミオ(SUMIO) (@tempkinder) March 17, 2022
#UE5 #UE5Study pic.twitter.com/6pNT4sMDwc
## LumenはSkylgihtのオクルージョンも考慮してくれる
Lumenはリアルタイムの間接照明の印象が強いかもですが、直接光への恩恵としてスカイライトの影もリアルタイムで計算します。なので、GIを切ると間接光がなくなり暗くなるかと思いきや、スカイライトの影がなくなり明るく。。ここをどう制御するかが縦マルチなどで重要になるのでは。。#UE5 #UE5Study pic.twitter.com/mGltJ6KANu
— スミオ(SUMIO) (@tempkinder) March 29, 2022
SkeletalMeshのオクルージョンなどがLumenのGI内で出ないとき
LumenでDistanceFieldを使用すると、SkeletalMeshはLumen界に入れないのでScreenTraceでのみ作用し限定的です。Lumenでハードウェアレイトレを使用するとLumenがレイトレ界を参照するため、SkeletalMeshもGIの計算で参照されるようになります。うれしい。#UE5 #UE5Study pic.twitter.com/8flJitTuiO
— スミオ(SUMIO) (@tempkinder) April 1, 2022
LumenをHardwareRayTracingのみで使用しDistance Fieldを読み込まない方法
LumenはDistance Field必須の機能ではありません。レイトレのアルゴリズムに依存せず、ハードウェアレイトレがONならばデフォルトではDFを見ません。r.DistanceFields.SupportEvenIfHardwareRayTracingSupported=0として起動するとDFを読み込まずDF分の大量?のメモリ消費が改善します
— スミオ(SUMIO) (@tempkinder) March 25, 2022
#UE5 #UE5Study pic.twitter.com/K8TGpmQRHL
Lumenのライティングの遅延を可能な限りなくしていく(処理負荷が増えたとしても)
処理負荷はいったん置いといてLumenのGI及びSkylightのシャドウの遅延を改善したい場合、第一手としてr.Lumen.RadianceCache.ForceFullUpdateを1にすることで、LumenのシーンのProbeを全て毎フレーム更新する様になり遅延が改善します。。(続く)#UE5 pic.twitter.com/Cl2dRwUlhr
— スミオ(SUMIO) (@tempkinder) April 12, 2022
Lumenのカードは実はLODを持っていて、簡略化できる
CitySampleのルーメンの設定掘り下げ中。
— スミオ(SUMIO) (@tempkinder) April 25, 2022
r.LumenScene.SurfaceCache.MeshCardsMaxLOD
各メッシュのカード表現はに簡易版と詳細版の二種類がありデフォルトでは詳細版(=1)が使われてますが、本サンプルでは大規模のためかこれを簡易版(=0)にしてメッシュ毎のカード数を減らしていました。#UE5 pic.twitter.com/cchKbN3zrI
LumenのデバッグビューでSurface Cacheにピンクの部分は悪なのか??
Lumen界では計算簡略化のために各メッシュをカードで覆うのですが、基本的にはバウンディングボックスの様に覆うのでトーラスなどの中身部分はLumen界で計算ができず、エラー(ピンクの部分)として扱われます。GIに寄与しないだけで大きなビジュアルエラーは出ないはずです。。が(続く)#UE5 #UE5Study pic.twitter.com/hysgTcgtET
— スミオ(SUMIO) (@tempkinder) April 6, 2022
LumenSceneのLighting、特にRadiosityが重たいとき
Lumenの複数回バウンスはLumenScene内で実現されており、r.lumenscene.Radiosityにてオフにすることができます。処理負荷が結構重たい処理で、オフにするとLumenScene内が直接光のみになり黒くつぶれた場所が出てきますが、意外と実際の絵を大きく崩さないことも。。試してみると良いかも?#UE5 pic.twitter.com/sgzb4Oc2NO
— スミオ(SUMIO) (@tempkinder) May 1, 2022
Emissiveオブジェクトからのライティングを完全に排除したい場合
もしくは、Lumenのトレーシング方法によって、Distance FieldやRay Tracingの世界からそもそも排除することによってLumen Sceneからもそのオブジェクトを排除するという方法もあります。が、こちらでもScreen Traceはオフにしなければ完全にEmissiveのライティングを排除できないかと思います。#UE5 pic.twitter.com/QQKuZzerXy
— スミオ(SUMIO) (@tempkinder) May 19, 2022
Lumenのカードの解像度を上げたり調整したりしたい
密度による変更はr.LumenScene.SurfaceCache.CardMaxTexelDensity (Default: 0.2)の変更で可能です。
— スミオ(SUMIO) (@tempkinder) May 23, 2022
Lumen界の解像度がもう少し欲しいなと思った方はお試し頂ければ幸いです#UE5 pic.twitter.com/g7bqTxxx1M
LumenScene内で建物などの複数メッシュのカードを一つにまとめたいとき
RayTracingGroupIDが設定されている場合、実はLumenのMeshCardも動的にマージしてくれてかなりの軽量化につながっていました。GroupIDによるマージをしないようしてみたら、各パーツがカードを持つようになって
— スミオ(SUMIO) (@tempkinder) May 17, 2022
激重で操作不能に。。#UE5 https://t.co/JWLNxndBBS pic.twitter.com/Nj6mlvOpyR
Distance FieldのLumen。。Detail Tracieはいる?
DistanceFieldのLumenでDetail Traceはいるか?ですが、Luemen Sceneで見るとGlobal Traceだけにすると詳細がかなり失われてるのがわかるかと思います。ただ実際のライティングで見ると影響は限定的でもあります。処理負荷とクオリティをチェックしつつ、動的に変更してくのが良いかもしれません#UE5 pic.twitter.com/FR9aHaeiDN
— スミオ(SUMIO) (@tempkinder) May 27, 2022
LumenでWorld Position Offsetを使ってみたい
LumenでのWorld Position Offset。DistanceFieldはエディタで事前に作られるので未対応。Hardware Ray Tracingでは対応。しているがCardが事前計算なのでカードからはみ出してしまったり。ささやかに揺れる程度なら。。ありかも?#UE5 pic.twitter.com/q4KqflDwIq
— スミオ(SUMIO) (@tempkinder) May 18, 2022
Lumenのクオリティ上げたら逆にGIでグリッド上のノイズが出てしまったとき
Lumenのクオリティ上げたら逆にGIでグリッド上のノイズが出てしまった場合、
— スミオ(SUMIO) (@tempkinder) May 23, 2022
r.Lumen.ScreenProbeGather.RadianceCache.ReprojectionRadiusScale(Default1.5)を3などにあげてみてください。これによる負荷増加はないのですが、ライトリークが若干発生するかもとのことでお試し頂ければ。。#UE5 pic.twitter.com/Yh4XDwH1fR
#Lumenの半透明に関する問題
Lumenの半透明ライティングだけがライティングの更新が遅いとき
r.Lumen.TranslucencyVolume.RadianceCache.NumProbesToTraceBudget
— スミオ(SUMIO) (@tempkinder) March 28, 2022
をあげることで、一フレームで更新する半透明のProbeの数が増えて更新速度が速くなります。
"半透明用のFinal Gather Lighting Update Speedの様な設定"と言えるかもしれません#UE5 #UE5Study https://t.co/31BdV9xQ78
LumenのReflection固有の問題
Lumen上でのキャラクタなどの動的物体の反射の注意点 (Distance Field使用時)
先ほどのツイートはハードウェアレイトレース使用時の挙動で、DistanceFieldでの反射は静的なオブジェクトも厳しく、キャラはいません。。鏡の様な挙動が必要な場合はハードウェアレイトレ一択になるかなと思います。 (DFの時の鏡の中のキャラの影がシュール。。)
— スミオ(SUMIO) (@tempkinder) April 8, 2022
#UE5 #UE5Study https://t.co/97LirsKMWe pic.twitter.com/2Ntn7V8KQr
Lumen上でのキャラクタなどの動的物体の反射の注意点 (Hadware Ray Tracing使用時)
これはキャラクタはLumen内部でカードの表現がされていないので、Surface Cacheが存在しないことに起因するのだと思います。#UE5 #UE5Study pic.twitter.com/Y4n4YonXQH
— スミオ(SUMIO) (@tempkinder) April 8, 2022
Lumenの反射のライティングがモヤモヤしてしまう場合
更にもやもやを改善したい場合、または処理負荷をある程度抑えたままもやもやを軽減したい場合、
— スミオ(SUMIO) (@tempkinder) April 7, 2022
r.LumenScene.Radiosity.Temporal.MaxFramesAccumulated(デフォルト 4)をあげることで、合成する過去のフレームの枚数の最大値を変えてもやもやを改善することができそうです。
Lumenの半透明オブジェクトのリフレクションがぼけてしまう
Lumenの半透明の反射がUE5.0だとぼけてしまうという意見がありますが、UE5のMainでは"High Quality Translucency Reflections"が実装済みであり、ガラスなどへの映り込みを表現できます。半透明でも"Surface ForwardShading"のライティングのみ対応の様。5.1までお待ち頂ければ。。
— スミオ(SUMIO) (@tempkinder) March 31, 2022
#UE5 #UE5Study pic.twitter.com/CZK7eQeC0O
LumenのReflectionで半透明が変に映り込んでいるとき
LumenのReflectionはLumen界でもレイトレでも半透明を描画できないのですが、Lumenは近傍はスクリーントレースをするため、半透明物体が画面内にあると誤った反射をします。r.lumen.reflections.screentracesを0にすることで反射のスクリーントレースだけ無効かできます(GIは維持)#UE5 #UE5Study pic.twitter.com/pfi4DcAZPc
— スミオ(SUMIO) (@tempkinder) March 14, 2022
LumenのReflectionがレイトレでもぼやけてしまうとき (しゅーやさん情報)
ミラー反射のご質問で言ったCVarは
— しゅーや (@syu_ya23) May 26, 2022
「r.Lumen.Reflections.Temporal 0」になります
クリアになりますが、チラついたりするかもです
Lumenについては @tempkinder さんのツイートとQiitaもぜひ!https://t.co/7bgpukomnS#uefest #UE5 pic.twitter.com/22egke2pH7
City Sample についての投稿
City SampleのLumenはHardware Ray Tracingを用いており、Distance Fieldは読み込んですらいない
豆知識: UE5のCitySampleでは、Lumenはハードウェアレイトレが使えるならばそちらを使います。下記設定により、ランタイムではDistanceFieldを読み込んですらいません。#UE5 #UE5Study https://t.co/28KU58L9wC pic.twitter.com/Y0L6DFtcIv
— スミオ(SUMIO) (@tempkinder) April 7, 2022
Far Fieldを使ってLumenのハードウェアレイトレで遠景を計算対象にする
CitySampleは大規模なシーンでのLumenの良いサンプルになりそう。LumenのOverviewで見ると、右上のピンクはLumen界でレンダリングできてない部分で、黄色はそもそもLumen界にいないオブジェクト。また、r.LumenScene.FarFieldが1になっており、遠方のオブジェクトがLumen界で考慮される様に。#UE5 pic.twitter.com/0kAPv3v4HF
— スミオ(SUMIO) (@tempkinder) April 10, 2022
CIty SampleはLumen経由でHWRayTracingを使用しているので、「Naniteとレイトレをどう共存させるか?どう使うか?」という良いサンプルにもなりそう。例えば、Lumenの機能だけどr.LumenScene.FarFieldによって近景と遠景のトレースを分けていたりする様です。#UE5 pic.twitter.com/7wQDjgnP7J
— スミオ(SUMIO) (@tempkinder) April 14, 2022
Lumenの反射、"Hit Lightging~"よりも"Surface Cache"の方がマテリアルを正確に捉えられる場合がある
City SampleのLumenの反射はSurface Cache。なので映り込むキャラクターは真っ黒に。じゃあ"Hit Lighting~"で改善しようとすると、建物の複雑なマテリアルがレイトレ界で計算できず黒に、キャラクタも結局GIが当たらず黒いままに。見た目も処理負荷もSurface Cacheの方が良い塩梅なのかと。#UE5 pic.twitter.com/xXu9kR8FgN
— スミオ(SUMIO) (@tempkinder) April 11, 2022
PIE中にViewModeが変えられない!! (おかずさん投稿)
Cityサンプルの実行中、ビューポート上部の各アイコンをクリックできなくて困っている方へ
— おかず (@pafuhana1213) June 2, 2022
BP_CitySampleControlsOverlayがクリック入力を奪ってしまってるので、VisibleからNon-Hit Testable~に変更すれば解決します!(チーム内で話題になったので共有#UE5 #UE5Study pic.twitter.com/ZNHZfA4Knk
CitySampleの.iniで個別に設定されているLumenのもやもや対策
Lumenの処理負荷及びもやもや対策。CitySampleでは、LumenScene.Radiosity.ProbeSpacingがデフォルト4から8に変更されています。こうするとLumenSceneの負荷が下がりつつもやもやもが軽減しますが、その分ディティールが失われます。サンプルでは主に処理負荷軽減のための設定と思われます。#UE5 pic.twitter.com/2aLY1jGL7Y
— スミオ(SUMIO) (@tempkinder) April 24, 2022
CitySampleはレイトレは建物単位でカリングをしています
City Sampleではr.RayTracing.Culling.UseGroupIdsが1に設定されていて、建物単位で一括でカリングを行ってます。(レイトレ界の話)
— スミオ(SUMIO) (@tempkinder) May 17, 2022
オフにするとパーツ単位でのカリングに。#UE5 pic.twitter.com/dn1l1B4idw
HLODもNanite化しています
CitySampleはHLODもNanite#UE5 pic.twitter.com/B9vS0h7fo3
— スミオ(SUMIO) (@tempkinder) May 25, 2022