Scene 上のオブジェクトには Bloom 効果がかかっているのに、RenderTexture を利用した際に Bloom 効果が反映されないことがあるという現象が起きました。
この問題を解決するために、以下のコードを使用しテストを行いました。
using UnityEngine; using UnityEngine.UI; public class BlogComponent : MonoBehaviour { [SerializeField] private Camera _targetCamera; [SerializeField] private RawImage _targetRawImage; private RenderTexture _renderTexture; private void Start() { var width = Screen.width; var height = Screen.height; _renderTexture = RenderTexture.GetTemporary(width, height, 16); _targetCamera.targetTexture = _renderTexture; _targetRawImage.texture = _renderTexture; } private void OnDestroy() { if (_renderTexture != null) { RenderTexture.ReleaseTemporary(_renderTexture); _renderTexture = null; } } }
Bloom、つまり HDR カラーを利用する際には RenderTexture の FormatがB10G11R11_UFloatPack32
または R16G16B16A16_SFloat
にする必要があります。デフォルトの RenderTexture のフォーマット R8G8B8A8_UNorm
では、輝度の広範な変動を正確に表現するのが難しく、Bloom 効果には適していません。
そのため、Bloomを利用したい場合は以下のようにフォーマットを指定してあげる必要があります。
_renderTexture = RenderTexture.GetTemporary(width, height, 16, GraphicsFormat.R16G16B16A16_SFloat);
この変更により、RenderTexture にも正しく Bloom 効果が反映されるようになりました。