Up to date
This page is up to date for Godot 4.3.
If you still find outdated information, please open an issue.
3Dレンダリングの制限
はじめに
リアルタイムレンダリングエンジンはパフォーマンスに重点を置いているため、多くの制限があります。Godot のレンダラーも例外ではありません。効果的にレンダリングさせるには、様々な制限を理解する必要があります。
テクスチャサイズの制限
デスクトップやラップトップでは、8192×8192 より大きいテクスチャは古いデバイスではサポートされない可能性があります。ターゲット GPU の制限については、GPUinfo.org で確認できます。
モバイルGPUは通常、テクスチャは 4096×4096 までに制限されています。また一部のモバイル GPU は、2の累乗サイズ以外のテクスチャのリピートをサポートしていません。したがってテクスチャをすべてのプラットフォームで正しく表示したい場合は、4096×4096 より大きいテクスチャの使用を避け、テクスチャをリピートする必要がある場合は2の累乗サイズを使用する必要があります。
レンダリングするには大きすぎる可能性がある特定のテクスチャのサイズを制限するには、インポートオプションの インポートプロセス > サイズ制限 を 0 より大きい値に設定します。これによりソース ファイルに影響を与えることなく、インポート時にテクスチャのサイズが縮小されます (アスペクト比は維持されます)。
色の縞模様 (バンディング)
Forward+ または Forward Mobile レンダリング方法を使用する場合、Godot の 3Dエンジンは内部的に HDR でレンダリングします。ただしレンダリング結果は画面に表示できるようにLDR (低いダイナミックレンジ)にトーンマップされます。これにより特にテクスチャのないマテリアルを使用する場合に、目に見える縞模様(バンディング)が発生する可能性があります。パフォーマンス上の理由から Forward Mobile レンダリングを使用する場合、色の精度も Forward+ に比べて低くなります。
互換性レンダリングを使用する場合、HDR は使用されず、色の精度はすべてのレンダリング方法の中で最も低くなります。これは2Dレンダリングにも当てはまり、滑らかなグラデーションテクスチャを使用するとバンドが見える場合があります。
バンディングを軽減するには、主に2つの方法があります。
If using the Forward+ or Forward Mobile rendering methods, enable Use Debanding in Project Settings > Rendering > Anti Aliasing. This applies a fullscreen debanding shader as a post-processing effect and is very cheap.
あるいはテクスチャにノイズを焼き付けます。これは主に2Dで効果的で、たとえばビネット効果を使うときに有効です。3Dでは カスタムデバンドシェーダー を使用して マテリアル に適用することもできます。このテクニックはプロジェクトが低い色精度でレンダリングされている場合でも機能します。つまりモバイルおよび互換性レンダリングを使用する場合も機能します。
色のバンディングの比較(視認性を高めるためにコントラストを強めています)
参考
バンディングとその対処方法の詳細については Banding in Games: A Noisy Rant (PDF) を参照してください。
深度バッファの精度
3D空間でオブジェクトをソートするために、レンダリングエンジンは 深度バッファ (Zバッファとも呼ばれます) に依存します。パフォーマンス上の理由からこのバッファの精度は有限で、デスクトッププラットフォームでは24ビット、モバイル プラットフォームでは16ビットになることもあります。2つの異なるオブジェクトが同じバッファ値になると、Zファイティングが発生します。これはカメラが移動または回転するとテクスチャが前後にちらつくことで現れます。
レンダリングされた領域で深度バッファをより正確にするには、Cameraノードの Near プロパティを 増やす 方法があります。ただし注意が必要で、Near値が高すぎるとプレイヤーは近くのジオメトリが透明になってしまいます。またCameraノードの Far プロパティを、使用ケースで許容される最小値まで 減らす 方法もありますが、Near プロパティほど精度に影響しないことに注意してください。
プレイヤーが遠くを見るときにのみ高精度にする場合は、ゲームの状況に応じて動的に変更することもできます。たとえばプレイヤーが飛行機に乗ったとき、遠くのZファイティングを回避するために、Near プロパティを一時的に増加させます。そしてプレイヤーが飛行機を離れたら、Near プロパティを減らします。
シーンや表示条件によっては、プレイヤーに違いが見えない状態で、Zファイティングが発生するオブジェクトをさらに離すこともできます。
Z ファイティングの比較 (Label3D を床からオフセットしてシーンを微調整する前と後)
半透明のソート
Godot では半透明マテリアルは不透明マテリアルの後に描画されます。半透明オブジェクトはワールド空間の頂点位置ではなく、Node3D の位置に基づいて描画される前に後ろから前にソートされます。このため重なり合ったオブジェクトは順序どおりにソートされないことがよくあります。不適切にソートされたオブジェクトを修正するには、マテリアルの レンダリング優先順位 プロパティまたはノードの ソートオフセット を微調整します。レンダリング優先順位は特定のマテリアルを他の半透明マテリアルの前または後ろに表示するように強制し、ソートオフセットはソートのためにオブジェクトを前後に移動します。しかしこれらを行っても、必ずしも十分ではない場合があります。
一部のレンダリングエンジンでは、この問題を軽減するために 順序に依存しない半透明 技術を採用していますが、これは GPU に負担がかかります。Godot は現在この機能を提供していません。この問題を回避する方法はいくつかあります。
実際に必要なものだけマテリアルを半透明にしてください。マテリアルに小さな半透明部分しかない場合は、別のマテリアルに分割することを検討してください。これにより不透明部分は影を落とすことができ、パフォーマンスも向上します。
テクスチャのほとんどが完全に不透明で完全に半透明な領域である場合は、アルファブレンディングの代わりにアルファテストを使用できます。この透過モードはレンダリングが高速で、半透明の問題が発生しません。StandardMaterial3D で Transparency > Transparency から Alpha Scissor を有効にし、必要に応じて Transparency > Alpha Scissor Threshold を調整します。マテリアルのプロパティでアルファアンチエイリアシングが有効になっていない限り、MSAA はテクスチャのエッジをアンチエイリアシングしないことに注意してください。ただし、FXAA、TAA、およびスーパーサンプリングは、マテリアルでアルファアンチエイリアシングが有効になっているかどうかに関係なく、テクスチャのエッジをアンチエイリアシングできます。
テクスチャの半透明領域をレンダリングする必要がある場合、アルファシザーは適していません。代わりに StandardMaterial3D の Transparency > Transparency プロパティを Depth Pre-Pass に設定すると、機能する場合があります (いくらかパフォーマンス コストがかかります)。Alpha Hash モードを試すこともできます。
距離に応じてマテリアルをフェードさせたい場合は、Pixel Alpha ではなく、StandardMaterial3D 距離フェード モードの Pixel Dither または Object Dither を使用します。これによりマテリアルが不透明になり、レンダリングも高速化されます。
半透明のタイプの比較(左がアルファブレンド、右がアルファシザー)
MSAA
参考
アンチエイリアシングについては、 3D antialiasing ページで詳しく説明されています。
MSAA (マルチサンプルアンチエイリアシング)は、オブジェクトをレンダリングするときにポリゴンのエッジで複数の カバレッジ サンプルを取得します。シーンのレンダリングに使用される カラー サンプルの数は増加しません。これは実際には次のことを意味します。
メッシュのエッジは(スーパーサンプリングと同様に)きれいに滑らかになります。
アルファテスト (1ビットの透明度) を使用するマテリアルは滑らかになりません。
鏡面反射エイリアシング (反射面に現れる「輝き」) は軽減されません。
パフォーマンスの制約に応じて、この制限を回避する方法はいくつかあります:
鏡面反射エイリアシングを目立たなくするには、プロジェクト設定を開き、レンダリング > アンチエイリアス > Screen Space Roughness Limiter を有効にします。このフィルターはパフォーマンスに中程度の負荷がかかるため、実際に必要な場合にのみ有効にしてください。
MSAA に加えて (または MSAA の代わりに) 高速近似アンチエイリアシング (FXAA) を有効にします。FXAA はスクリーンスペース方式であるため、あらゆるものを滑らかにします。欠点として FXAA では、特に 1440p 未満の解像度では、シーンがぼやけて見えることがあります。FXAA には時間情報もないため、鏡面反射エイリアシングへの影響は限られています。
MSAA に加えて (または MSAA の代わりに) テンポラルアンチエイリアシング (TAA) を有効にします。TAA はスクリーンスペース方式であるため、あらゆるものを滑らかにします。欠点としては TAA を使用すると、特に 1440p 未満の解像度では、シーンがぼやけて見えることがあります。TAA は FXAA に比べて優れた品質を提供し、鏡面反射エイリアシングを効果的に抑制できます。ただし TAA は FXAA に比べてパフォーマンス コストが高く、動きが速い場合にゴーストアーティファクトが発生する可能性があります。
プロジェクト設定の 3Dスケール > スケール を
1.0より大きくして、シーンをより高い解像度でレンダリングします。この手法はスーパーサンプルアンチエイリアシング (SSAA) と呼ばれ、品質は最高ですが非常に低速です。一般的にオフラインレンダリングでのみ使用することをお勧めします。