Large World Coordinates (LWC) の導入により、浮動小数値の精度を向上するために、広範囲に及ぶ変更をすべてのエンジン システムで実装する Unreal Engine 5 (UE5) で、倍精度のデータ バリアント タイプがサポートされるようになりました。これらのエンジン システムには、建築ビジュアライゼーション、シミュレーション、レンダリング (Niagara と HLSL コード)、そして広大なワールド スケールのプロジェクトが含まれます。
Unreal Engine 4(UE4) では、32 ビットの浮動小数精度タイプによってワールドのサイズが制限されていました。LWC では、主要なデータ タイプに 64 ビットの倍精度を提供することで、プロジェクトのサイズを大幅に向上します。これらの新しい変更により、ユーザーは広大な規模のワールドをビルドできるようになり、アクタの配置に関する正確性と方向の精度が大幅に改善されます。Large World Coordinates は、UE5 で新規プロジェクトを開始する際に使用できます。
プロジェクトを Unreal Engine 5 にアップグレードする
UE4 プロジェクトを UE5 にアップグレードする際は、コードベースの精度が失われるエッジ ケースが生じることがあるため、「移行ガイド」を参照することを推奨します。これは、LWC を使用していないプロジェクトではそれほど問題にはなりませんが、ワールドのスケールを高めるためにプロジェクトで倍精度タイプを使用する予定であれば、「Large World Coordinates の変換ガイドライン」を使用することをお勧めします。
Large World Coordinates をテストする
UE5 の Large World Coordinates はベータ版であるため、デフォルトの WORLD_MAX
サイズはUE4 の WORLD_MAX
サイズ (21 km) で維持され、ワールドの境界チェックはデフォルトで有効になります。ラージ ワールドの規模を試すには、次の 2 つのオプションがあります。
WorldSettings クラスにアクセスし、bEnableLargeWorlds
ブール値を true に設定することで、境界チェックを無効にできます。
AWorldSettings::bEnableLargeWorlds = true
これにより WORLD_MAX
の値は約 21 キロメートルに保たれて、Unreal Engine 5.0 の初期リリースにおいて実験の安定性が改善されます。
あるいは、UE_USE_UE4_WORLD_MAX のグローバル値を設定してラージ ワールド境界:
UE_USE_UE4_WORLD_MAX=0 を有効にすることができます。
これにより、WORLD_MAX
の値がおよそ 8,800 万 km にまで広がります。
この数値は、Unreal Engine の将来のリリースで変更される可能性があります。また、安定性の問題が発生する可能性がありますが、Unreal Eigne 5 の開発を通じて継続的に最適化される予定です。
プロジェクトを Unreal Engine 5 にアップグレードする
UE4 プロジェクトを UE5 にアップグレードする際は、コードベースの精度が失われるエッジ ケースが生じることがあるため、「移行ガイド」を参照することを推奨します。これは、LWC を使用していないプロジェクトではそれほど問題にはなりませんが、ワールドのスケールを高めるためにプロジェクトで倍精度タイプを使用する予定であれば、「Large World Coordinates の変換ガイドライン」を使用することをお勧めします。
ソース コード インターフェース
ソース コードで浮動小数と倍精度の各タイプを公開できるようになりました。Unreal Header Tool (UHT) では、コード内のブループリントによるアクセスが可能な浮動小数点タイプを、適切な単精度 (C++ float) または倍精度 (C++ double) サブタイプを含むブループリント浮動小数と解釈するため、あらゆるブループリント ノードで提供されるいずれかの精度の浮動小数値の自動変換が可能になります。
UFUNCTION プロパティ指定子の予期される浮動小数値を公開する
ブループリント浮動小数値はより低精度の浮動小数にキャストされるため、UFUNCTION プロパティ指定子でマーキングされた、浮動小数値データを含むあらゆるメソッドには精度を低下させるリスクが伴います。既存の UFUNCTION プロパティをすべて監査することが重要です。これにより、パラメータまたは戻り値を倍精度値に切り替えることが、将来的に精度に関する問題を回避する上で必要であるかどうかを判断しやすくなります。浮動小数と倍精度のタイプの切り替えはいずれの方向も安全で、いつでも実行できます。
これは、コードで構築済みまたは公開済みのあらゆる K2 ノードに適用されます。
レンダリング
Unreal Engine にはさまざまな座標空間と、ワールド内におけるオブジェクトの存在を定義するトランスフォーメーションが備わっています。ワールド空間 (レベル/ワールドの座標) と ローカル空間 (特定のオブジェクトに相対) の詳細については、ドキュメント「座標空間の用語」を参照してください。
プロジェクトのワールド内に配置可能なオブジェクトには、それぞれ座標系、方向、そして原点が含まれています。追加情報については、「アクタをトランスフォームする」を参照してください。
シェーダー
Large World Coordinates とともに新しい HLSL タイプが導入されました。これは「LargeWorldCoordinates.ush
」ファイルに含まれていますシェーダー コードを UE5 に変換する方法の詳細については、「LWC レンダリングに関するドキュメント」を参照してください。
Niagara
Niagara ではメイン エンジンと実装が異なります。パーティクル エフェクトのパフォーマンスを維持するために、データは倍精度値を使用してではなく、一連の浮動小数値として格納されます。十分に大きなワールドは、複数のグリッド セルに分割されます。その後、最初の浮動小数値によってそのグリッド セル内の Niagara システムが定義され、2 番目の浮動小数値によってそのシステムが含まれるグリッド セルが表されます。
この追加情報に対応するために、Particles.Position によって参照されるベクターの格納用に Position と呼ばれる新しいデータ タイプが導入されました。 詳細については、「Niagara での Large World Coordinates」ドキュメントを参照してください。
Chaos
Chaos Destruction 物理 は、省略されることなく倍精度タイプを使って引き続き機能します。例えば、エンジンは両方向に暗黙的にキャストします。
FVector3f -> Chaos::FVec3!
However, the only explicit cast is from:
Chaos::FVec3 -> FVector3f
//これにより、浮動小数値へのダウングレードによる精度の低下を防ぐことができます。
今後の Unreal Engine 5 のリリースを通じて、FVector キャストにより、浮動小数値が引き続き暗黙的に倍精度値にアップグレードされる予定です。倍精度値を浮動小数値にキャストする場合は、明示的に変換を実行する必要があります。詳細については、「Large World Coordinates 変換ガイド」を参照してください。