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とGLES3は異なる色空間にあります。これは、特に照明を使用する場合、色がわずかに異なるように見えることを意味します。
ゲームでGLES2とGLES3の両方を使用する場合、if
ステートメントチェックと OUTPUT_IS_SRGB
を使用して出力がsRGBであるかどうかを確認できます。OUTPUT_IS_SRGB
はGLES2では true
で、GLES3では false
です。
HDR¶
GLES2は、ハイダイナミックレンジ(HDR)レンダリング機能を使用できません。プロジェクトまたは特定のビューポートにHDRが設定されている場合、Godotは引き続きビューポート値を 0-1
の範囲に制限する低ダイナミックレンジ(LDR)を使用します。
SpatialMaterialの機能¶
GLES2では、SpatialMaterial の次の高度なレンダリング機能がありません:
- Refraction(屈折)
- サブサーフェススキャタリング
- Anisotropy(異方性)
- Clearcoat(クリアコート)
- 深度マッピング
SpatialMaterialsを使用する場合、エディタには表示されません。
カスタム ShaderMaterials では、これらの機能の値を設定できますが、機能はしません。たとえば、シェーダーで SSS
ビルトイン(通常はサブサーフェス スキャタリングを追加)を設定することはできますが、何も起こりません。
環境機能¶
GLES2では、Environment に次の機能がありません:
- 自動露出
- トーンマッピング
- スクリーンスペースリフレクション
- スクリーンスペースアンビエントオクルージョン
つまり、GLES2の環境では次の設定のみが可能です:
- 空(手続き型の空を含む)
- 環境光
- Fog(霧)
- 被写界深度
- グロー(ブルームとも呼ばれます)
- 調整
GIProbes¶
GIProbes はGLES2では機能しません。代わりに、Baked Lightmaps を使用します。ベイク処理されたライトマップの機能の説明については、Baked Lightmaps tutorial を参照してください。
ライトの性能¶
GLES2では、各ライトが個別のレンダーパスで処理されるため、GLES2では(1回のパスで行われるGLES3に対して)ライトの増加に伴いパフォーマンスが低下します。最高のパフォーマンスを実現するために、シーンをできるだけ少ないライトに制限してください。
テクスチャ圧縮¶
モバイルでは、GLES2にはETCテクスチャ圧縮が必要ですが、GLES3にはETC2が必要です。 ETC2はデフォルトで有効になっているため、GLES2を使用してモバイルにエクスポートする場合は、プロジェクト設定 rendering/vram_compression/import_etc
を設定してからテクスチャを再インポートしてください。
警告
ETCは透明度をサポートしていないため、アルファチャネルを含むテクスチャを再インポートして、(ビデオRAMの代わりに)非圧縮、非可逆、または可逆圧縮モードを使用する必要があります。これは、ファイルシステムドックでそれらを選択した後、インポートドックで実行できます。
形状のブレンド¶
ブレンドシェイプはGLES2ではサポートされていません。
シェーディング言語¶
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 |