【UE5】WasRecentlyRenderedについて

この記事は約3分で読めます。
"WasRecentlyRendered" node returning true even after being occluded by walls
So WasRecentlyRendered node is buggy, whenever the game is played in rendered mode it returns true even when the actor i...

頭上WidgetをScreenに表示している場合は、キャラクターが物陰の後ろに隠れた場合、自分で非表示にしなきゃならない。そのやり方をググると次のサイトがヒットする。

UE4でHPゲージをモデルの頭上に表示しよう - Qiita
UE4でHPゲージをモデルの頭上に表示しよう 目標 アクションゲームの敵キャラの頭上に表示するようなHPゲージをUMGを使って表示してみましょう。 結果 環境 UnrealEngine 4.15.2 手順 1.ThirdPersonのサンプ...

環境がUnreal Engine4.15.2とあるが、当時はちゃんと動いていたはず。それがどうして動かなくなったのか?

UE4のOcclusion Cullingで良く聞かれる質問1: Occlusion Culling自身の処理負荷を減らしたい - だらけ者だらけ
この記事は UE4 Advent Calender 2018 その2 の4日目の記事にあたります。Occlusion Cullingは、沢山のオブジェクトがシーンに存在するときなどに効いてくる、レンダリング関連の最適化手法の一つです。デフォ...

2018年12月の時点では既に仕様が変わった、というよりも調整したらしい。

以前はカリングして描画するものを減らせば軽くなるから、できるだけカリングしておこうとしていたんだと思うが、今はGPUが強力になったせいで、下手にカリングするよりも、どんどん描画させちゃった方が早いってなっちゃったみたいだ。それで動くオブジェクトをカリングの対象外にしたんだと思う。

まあそれでも折角だから、上記サイトの通りにエンジンを弄って動かしてみた。

//, bAllowApproximateOcclusion(InComponent->Mobility != EComponentMobility::Movable)
, bAllowApproximateOcclusion(true)

元のコードをコメントアウトして、常にtrueを返すようにした。動くものも全てカリングさせる。で、WasRecentlyRenderdがどうなるか?上記サイトにあるように不安定。遮蔽物があっても必ずWasRecentlyRenderdがfalseを返すとは限らない。それどころかスケーラビリティ・グループ「Epic」だと常にtrueを返してくる。シッピングしたらまた違うのかもしれないけど、そこまでテストする前に諦める。というか他に良いやり方があるのかな?とりあえずWorldの設定で表示しておく。

ただし、WasRecentlyRenderdはキャラクターが画面外にいるかどうかの判定はちゃんとできるからTickの最初に使う。

https://twitter.com/imori001/status/1799962603898437673

訂正)
ちょっと違ったかもしれない。エンジンを元に戻しても、遮蔽物の陰に隠れた時にWasRecentlyRenderdがfalseを返してくる。どうやらスケーラビリティのシャドウの設定が「Epic」だと必ずtrueを返してくる。「中」と「高」だとXにアップロードした動画くらいになる。「低」だとかなりちゃんとfalseを返してくる。それでもマルチプレーヤーゲームではどうだかな。他に良いやり方があれば一番いいんだけど。

コメント

  1. […] 【UE5】WasRecentlyRenderedについて […]

タイトルとURLをコピーしました