#memo

indiedev太郎

距離によるカリング

UE4 4.16.1


距離によるカリングとは

プレイヤー位置(PlayerCameraManagerが現在扱っているカメラ位置)からの距離でカリング(非表示)を行う設定
UE4ではデフォルトでオクルージョンカリングと視錐体カリングが有効になっているけれど、この機能が必要な場合は手動でセットアップする必要がある
LOD, HLODなどは画面内の割合に応じてDetailが決定するため、例えばゲーム内距離は離れているオブジェクトでも、スコープで拡大注視するとDetailが上がるなどになるが、この機能に関しては、プレイヤー距離が設定以上離れていたら一切描写は行われない

WorldOutlinerからアクタ毎に個別に設定を行う方法と、Cull Distance VolumeというVolumeをレベル内に配置して設定する2通りの方法がある


WorldOutlinerからの設定

距離によるカリングを設定したいアクタを選択し、
Detailタブ > Rendering > LODを開く

https://i.gyazo.com/d4a16538b56a772b13f2bf4749a5986e.png

Min Draw Distance 描写を保証する最低距離
Desired Max Draw Distance 距離に寄るカリングを発生させる閾値、Desiredというのは後述するCullDistanceVolumeにより変化する可能性があるため
Current Max Draw Distance 実際に設定されたカリングの閾値、CullDistanceVolumeの影響がない場合、DesiredMaxDrawDistanceがそのまま反映される、0ならカリングは行われない
Allow Cull Distance Volume 後述するCullDistanceVolumeの影響を受けるかどうかの設定

Desired Max Draw Distanceを100に設定したアクタは、Runtimeで1m離れた瞬間に強制的に描写されなくなる


Cull Distance Volumeからの設定

Level内にCullDistanceVolumeを配置し、距離によるカリングを設定したいアクタを覆う用に配置

https://i.gyazo.com/0ce75f033afd5d0b4a18294f90f4bbe0.png

配置したVolumeのCullDistances内の配列を設定することで、Volume内に存在するアクタに対しMaxDrawDistanceを設定する

またVolumeはアクタのサイズを確認し、サイズごとに異なるMaxDrawDistanceを設定している、
画像では、一つ目のSizeが0, 二つ目のSizeが300なので、この場合の閾値は 150 となっていて、 150以下のアクタに対してはMaxDrawDistanceを500, 150以上に対してはMaxDrawDistanceを1000を設定するという状態(設定した配列数 - 1 の閾値が発生し、割当が行われる)

配列最後のCullDistanceは0としておくことで、閾値最大以上のアクタは(巨大)必ずどこからでも見える(距離によるカリングを発生させない)としておくことが出来る

またこのさい実際に設定されたDrawDistanceを確認したい場合は、前述したWorldOutlinerから個別にアクタを選択することで確認することが可能、Desired Max Draw DistanceはCullDistanceにより設定されたDrawDistanceより小さい値の場合、ユーザーが任意で上書きできるようになっている