Language:
Page Info
Engine Version:

範囲外のピクセル

オブジェクトが点滅している、あるいはオブジェクトの一部がまだスクリーン上に残っているにも関わらず消滅している状態は、 範囲外にあるオブジェクトの一部が原因の場合があります。一般的な理由は、シェーダー内での world position offset や displacement の使用、物理アセットのないスケルタルメッシュ、 オーナーの範囲を継承するためのコンポーネント設定です。

これは、視推体カリング、シャドウ キャスティング、間接ライティングのキャッシュ、その他様々なレンダリング機能が正しく行えなくなる原因になります。ゲームが複数のゲームセッションの種類を持つ最も顕著なケースとしては、 中でも一際目立つアーティファクトは、カメラを回転させたときの点滅です。範囲がスクリーン外になった途端に正しいカリングが行えなくなります。

[Visualize (可視化)] -> [Out of Bounds Pixels (範囲外のピクセル)] では、オブジェクトの範囲外にある全てのピクセルが表示されます。

使用方法

ビューポート上でこのモードを有効にするには、ビューポート上の [Show (表示)] ボタンを 左クリック し、[Visualize (可視化)] から [Out of Bounds Pixels (範囲外のピクセル)]を選択します。

OOBP_showMenu.png

オーナーの境界を継承する

ブループリントは、多くの場合、親の範囲を継承する設定が可能なので、親の範囲が子よりも小さい場合に問題が発生します。

以下のキューブ オブジェクトは ボックス コンポーネント (イメージ中の赤いボックス) と スタティックメッシュ コンポーネント で構成されたブループリントです。スタティック メッシュは ボックスから範囲を継承するように設定されます。ボックス イベントがスタティック メッシュよりも小さい場合、 Visualize Out of Bounds Pixels がこれらの部分を様々な色 (青、黄色、白) で表示します。

World Position Offset または Displacement

それ以外にも、シェーダーがリアルタイムで頂点のワールド位置を修正し、それがオブジェクトのオリジナルの境界ボックスの範囲より大きく外れて押し出されてしまった場合に この現象が頻繁に発生します。

このオブジェクトの部分は、境界ボックスが完全に非表示あるいはカメラから外れた後で可視化されるので、タイミングが適切でないと点滅または消滅します。

このケースでは、コンポーネントの [Details (詳細)] パネルにある Rendering を展開すると出てくる [Bounds Scale] を使って、すべてのピクセルが含まれるように境界ボックスを広げることができます。ただし、シャドー キャスティングでこれを行う場合、 シャドー キャスターが大きいとパフォーマンス負荷も大きくなるので注意してください。スケルタルメッシュ上では、範囲は物理アセットから抽出され、 個々のボーンは範囲に貢献しているかどうかでマークされます。

OOBP_BoundsScale.png

スケルタル メッシュ

スケルタルメッシュがその範囲から変位する主な理由は、メッシュをアクタ ルートから遠ざけてしまうアニメーションです。ただし、物理アセットのあるスケルタルメッシュは、 物理アセットを使って範囲を計算します。これを有効にするためには、 コンテンツ ブラウザ でスケルタルメッシュを 右クリック して
[Create Physics Asset (物理アセットを作成)] を選択します。デフォルト設定を使用すれば、スケルタルメッシュの範囲に起因するエラーを通過することができますが、恐らく結果は編集したいと思います。 物理アセット の編集に関する詳細は、 物理アセットツール を参照してください。