初めに
マテリアルをTwoSidedに設定したけどパフォーマンスのことを考慮しTwoSidedのオン・オフを動的に切り替えたい場合はあるかと思います。
今回はTwoSidedを疑似的に切り替える方法を紹介します。
環境情報
Windows 11
UE 5.3.2
注意事項
"初めに"のセクションで強調しましたが、今回の実装はあくまで疑似的にTwoSidedのオン・オフ切り替えを再現しています。
TwoSidedの設定自体は静的なものなのでランタイム環境で設定自体は変更できないことには留意してください。
今回の実装はOpacityMaskを用いて裏面を透過することで疑似的にTwoSidedを切り替えます。そのためBlend ModeをMaskedにする必要があります。つまり透明なマテリアルに対しては適用できません。
実装
先に説明してしまいましたが、今回の実装では裏面の場合はOpacity Maskに対して0(裏面透過)または1(裏面表示)を渡すことでTwoSidedのオン・オフを疑似的に再現します。
処理はMaterial Functionで作成していきますが、処理の関係上外部から値を渡す必要があるのでMaterial Collection Parameterを先に用意しておきます。

Parameter名はTwoSidedにしておき、デフォルト値は0にしておきました(裏面非表示)。
そして作成したMaterial Functionがこちらです。

TwoSidedSignは裏面の場合は-1を、表面の場合は1を返してくれます。
Clampで-1(裏面)を0にします。
Collection Parameterには作成したMaterial Collection ParameterのTwoSidedを設定します。
渡したい値は0または1なのでMaterial Function側で値を抑制させるべきですが、今回は省略します。
Lerpを用いることで表面は常に1をOutputとして出力し、裏面はCollection Parameterの値に応じて0または1を出力するようにします。
使用するマテリアルの方ではTwoSidedをオンにしておき、Blend ModeをMaskedにしておきます。
作成したMaterial Function(MF_ChangeTwoSided)をOpacity Maskにつなぎます。

あとはCollection Parameterに値を渡してあげればOKです。
実装はなんでもよいのですが以下が例です。

Parameterに1を渡せば裏面が表示され、0を渡せば非表示になります。