お世話になっております。
UE 5.6.1 環境にて、SDF フォントを UMG 上に描画した際、
添付画像のように文字の周りに薄い色の矩形が発生することがあります。
※1 枚目 High Quality 40 → 発生、2 枚目 High Quality 56 → 発生しない、3 枚目 High Quality 80 → 発生
アセットの設定や画面の解像度などの違いで挙動が変わるようなのですが、
こちらの症状を回避する方法はありますでしょうか?
[Image Removed]
[Image Removed]
[Image Removed]
Steps to Reproduce
・UE 5.6.1 + ContentExamples(機能別サンプル) 環境を準備する
・/Content/ExampleContent/UMG/MSDFText/Fonts/RobotoRegular_MSDF の
DistanceFieldMode → Multi-ChannelDistanceField → High Quality を 80 に変更
・/Content/Maps/UI/UI_UMG を開いて PIE 開始
・「MSDF Outline and Glow」を選択
・左上、右上、右下のテキストで現象が発生
お待たせしております。現象の再現に成功しておりマテリアル中のFontSignedDistanceの値が影響を与えている可能性が高いです。
レンダリング解像度の切り替えなどで問題が消失するなどの原因の究明とワークアラウンドの調査を行っておりますもう少々お時間をいただけますでしょうか。
Multi-ChannelDistanceField の各パラメータは正にFontSignedDistanceが返すパラメータの幅に影響します。
(具体的な計算式は、FSlateElementBatcher::BuildShapedTextSequenceおよびSlateElementPixelShader.usfのGetFontSignedDistanceDataをご覧ください)
値を変更したことによりフォントマテリアルおよびマテリアルインスタンス内で設定されている各閾値の想定を超えてしまうため
Opacityの値が0にならなくなり矩形のアーティファクトが出てしまっています。
この値を変更するのであれば、連動してフォントマテリアルのFontSignedDistanceが返す値に適用している値を調整する必要がございます。
特にFontSignedDistanceの返す値に問題が無いのであればパラメータを変更せずにご利用いただくことをお勧めします。
ご確認ありがとうございます。
Multi-ChannelDistanceField の閾値についてですが、
UFontFace::UpdateDeviceRasterizationSettings で設定する FFontRasterizationSettings.DistanceFieldPpem の数値に影響しており
UI.SlateSDFText.ResolutionLevel の数値によって「Low Quality」「Medium Quality」「High Quality」のどれかに設定されているものかと思います。
> パラメータを変更せずにご利用
調査を進めたところ、UE の標準では UI.SlateSDFText.ResolutionLevel=2 で「Medium Quality」のデフォルト値(40)を使用しているのに対して、
ContentExamples(機能別サンプル)の方では UI.SlateSDFText.ResolutionLevel=3 で「High Quality」のデフォルト値(56) を使用しているようなのですが、
ContentExamples の設定が推奨されている、になりますでしょうか?
開発中のプロジェクトでは UE の標準設定のまま運用していたため不具合が発生してしまっているのですが、
値を変えずに不具合を回避する方法がありましたらご教示頂けますと幸いです。
※見た目に変化が出たり負荷が高くなるリスクを避けるためとなります
また M_FontSDF_Glow でもパラメーターを変更すると同様の不具合が発生することを確認しております。
値を変更しての運用を行いたいのですが、こちらに関しましても何らか回避方法がございましたらご教示お願い致します。
お手数ですが、宜しくお願い致します。
M_FontSDF_Glow による再現方法については以下となります。
・ /Content/ExampleContent/UMG/MSDFText/EUW_SDF_Font の TextBlock の Font を以下に変更
Size を 30 に変更
FontMaterial を /Game/ExampleContent/UMG/MSDFText/MI_FontSDF_GlowOnTop に変更
・/Content/ExampleContent/UMG/MSDFText/MI_FontSDF_GlowOnTop のパラメータを以下に変更
GlowMax を 0.1 に変更
GlowMin を -0.02 に変更
・/Content/Maps/UI/UI_UMG を開いてPIE開始
・「MSDF Outline and Glow」を選択
解像度を大きくすると発生し、小さくすると発生しなくなります。
また解像度が高い状態でも「High Quality」を(40)にすると発生しなくなります。
※GlowMax を 0.12 に変更した場合、Quality が 40 でも発生します
ContentExample内のフォントマテリアルはUI.SlateSDFText.ResolutionLevel=3に合わせてで実装されているので
これをプロジェクトにマイグレートしてそのまま利用したいのであればUI.SlateSDFText.ResolutionLevel=3をご適用ください。
デフォルトのUI.SlateSDFText.ResolutionLevel=2の設定を適用したいのであればそれに合わせてマテリアルのパラメータを調整してください。
では、検証がされている ContentExample 設定ベースの方が安定しそうですので、そちらにて進めたいと思います。
ご対応、ありがとうございました。