GLES2とGLES3の違い

このページには、設計によるものであり、バグの結果ではないGLES2とGLES3の違いが記載されています。意図しない違いもあるかもしれませんが、それはバグとして報告する必要があります。

注釈

"GLES2" と "GLES3" は、2つのOpenGLベースのレンダリングバックエンドのGodotで使用される名前です。グラフィックAPIに関しては、GLES2バックエンドはデスクトップのOpenGL 2.1、モバイルのOpenGL ES 2.0、およびWebのWebGL 1.0にマップされます。 GLES3バックエンドは、デスクトップのOpenGL 3.3、モバイルのOpenGL ES 3.0、およびWebのWebGL 2.0にマップします。

パーティクル

高度なGPU機能を必要とするため、(それに対応していない)GLES2では Particles または Particles2D ノードを使用できません。代わりに、CPUParticles または CPUParticles2D を使用します。これは、ParticlesMaterial と同様のインターフェースを提供します。

ちなみに

ParticlesとParticles2Dは、エディタの[CPUパーティクルに変換]オプションを使用して、相当するCPUタイプのノードに変換できます。

SCREEN_TEXTURE ミップマップ

GLES2では、``SCREEN_TEXTURE``(ShaderMaterial を介してアクセス)には計算済のミップマップがありません。そのため、異なるLODでアクセスする場合に、テクスチャの解像度は変更されません。

DEPTH_TEXTURE

GLES2はシェーダーで DEPTH_TEXTURE をサポートしますが、一部の古いハードウェア(特にモバイル)では機能しない場合があります。

色空間

GLES2 and GLES3 are in different color spaces. This means that colors will appear slightly different between them especially when lighting is used.

ゲームでGLES2とGLES3の両方を使用する場合、if ステートメントチェックと OUTPUT_IS_SRGB を使用して出力がsRGBであるかどうかを確認できます。OUTPUT_IS_SRGB はGLES2では true で、GLES3では false です。

HDR

GLES2 is not capable of using High Dynamic Range (HDR) rendering features. If HDR is set for your project, or for a given viewport, Godot will still use Low Dynamic Range (LDR) which limits viewport values to the 0-1 range.

The Viewport Debanding property and associated project setting will also have no effect when HDR is disabled. This means debanding can't be used in GLES2.

SpatialMaterialの機能

GLES2では、SpatialMaterial の次の高度なレンダリング機能がありません:

  • Refraction(屈折)

  • サブサーフェススキャタリング

  • Anisotropy(異方性)

  • Clearcoat(クリアコート)

  • 深度マッピング

SpatialMaterialsを使用する場合、エディタには表示されません。

カスタム ShaderMaterials では、これらの機能の値を設定できますが、機能はしません。たとえば、シェーダーで SSS ビルトイン(通常はサブサーフェス スキャタリングを追加)を設定することはできますが、何も起こりません。

環境機能

GLES2では、Environment に次の機能がありません:

  • 自動露出

  • トーンマッピング

  • スクリーンスペースリフレクション

  • スクリーンスペースアンビエントオクルージョン

つまり、GLES2の環境では次の設定のみが可能です:

  • 空(手続き型の空を含む)

  • 環境光

  • Fog

  • 被写界深度

  • グロー(ブルームとも呼ばれます)

  • 調整

GIProbes

GIProbes はGLES2では機能しません。代わりに、Baked Lightmaps を使用します。ベイク処理されたライトマップの機能の説明については、Baked Lightmaps tutorial を参照してください。

コンタクトシャドウ

Lightsshadow_contact プロパティはGLES2ではサポートされていないため、何もしません。

ライトの性能

GLES2では、各ライトが個別のレンダーパスで処理されるため、GLES2では(1回のパスで行われるGLES3に対して)ライトの増加に伴いパフォーマンスが低下します。最高のパフォーマンスを実現するために、シーンをできるだけ少ないライトに制限してください。

テクスチャ圧縮

モバイルでは、GLES2にはETCテクスチャ圧縮が必要ですが、GLES3にはETC2が必要です。 ETC2はデフォルトで有効になっているため、GLES2を使用してモバイルにエクスポートする場合は、プロジェクト設定 rendering/vram_compression/import_etc を設定してからテクスチャを再インポートしてください。

警告

ETCは透明度をサポートしていないため、アルファチャネルを含むテクスチャを再インポートして、(ビデオRAMの代わりに)非圧縮、非可逆、または可逆圧縮モードを使用する必要があります。これは、ファイルシステムドックでそれらを選択した後、インポートドックで実行できます。

形状のブレンド

In GLES2, blend shapes are implemented on the CPU instead of the GPU. Accordingly, they may not perform as well as blend shapes in GLES3. To avoid performance issues when using blend shapes in GLES2, try to minimize the number of blend shapes that are updated each frame.

シェーディング言語

GLES3は、GLES2にはない多くの組み込み関数を提供します。以下は、GLES2で使用できない機能またはサポートが制限されている機能のリストです。

組み込みGLSL関数の完全なリストについては、Shading Language doc を参照してください。

関数

vec_type modf ( vec_type x, out vec_type i )

vec_int_type floatBitsToInt ( vec_type x )

vec_uint_type floatBitsToUint ( vec_type x )

vec_type intBitsToFloat ( vec_int_type x )

vec_type uintBitsToFloat ( vec_uint_type x )

ivec2 textureSize ( sampler2D_type s, int lod )

以下の回避策を参照してください

ivec2 textureSize ( samplerCube s, int lod )

以下の回避策を参照してください

vec4_type texture ( sampler_type s, vec_type uv [, float bias] )

bias は頂点シェーダーでは使用できません

vec4_type textureProj ( sampler_type s, vec_type uv [, float bias] )

vec4_type textureLod ( sampler_type s, vec_type uv, float lod )

一部のハードウェアの頂点シェーダーでのみ使用可能

vec4_type textureProjLod ( sampler_type s, vec_type uv, float lod )

vec4_type textureGrad ( sampler_type s, vec_type uv, vec_type dPdx, vec_type dPdy )

vec_type dFdx ( vec_type p )

vec_type dFdy ( vec_type p )

vec_type fwidth ( vec_type p )

注釈

GLES2のGLSLにない関数は、Godot独自のシェーダー標準ライブラリで追加されました。これらの関数は、GLES3と比較してGLES2ではパフォーマンスが低下する可能性があります。

textureSize() 回避策

GLES2は textureSize() をサポートしていません。テクスチャサイズのユニフォームを自分で渡すことで、古い方法でテクスチャのサイズを取得できます。

// In the shader:
uniform sampler2D textureName;
uniform vec2 textureName_size;
# In GDScript:
material_name.set_shader_param("textureName", my_texture)
material_name.set_shader_param("textureName_size", my_texture_size)

組み込み変数とレンダリングモード

Godotは、多くの組み込み変数とレンダリングモードも提供します。 GLES2でサポートできないものもあります。以下は、ビルトイン変数とレンダリングモードのリストです。これらは、書き込まれたときに効果がなかったり、GLES2バックエンドの使用時に問題が発生したりする可能性さえあります。

変数/レンダリング モード

ensure_correct_normals

INSTANCE_ID

DEPTH

ANISOTROPY

ANISOTROPY_FLOW

SSS_STRENGTH