gles2和gles3之间的差异

本页记录了gles2和gles3之间的设计差异,这些差异不是错误的结果。可能存在无意的差异,但它们应该作为错误报告。

注解

“gles2”和“gles3”是godot中用于两个基于OpenGL的渲染后端的名称。在图形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。

粒子

gles2不能使用 ParticlesParticles2D 节点需要高级GPU功能。相反,使用 CPUParticlesCPUParticles2D ,它提供与 ParticlesMaterial .

小技巧

粒子和粒子2d可以通过编辑器中的“Convert to CPUParticles”选项转换为其CPU等效节点。

SCREEN_TEXTURE MIP地图

在GLES2中, SCREEN_TEXTURE (通过A访问 ShaderMaterial )没有计算出MIP映射。因此,当访问不同的LOD时,纹理不会显得模糊。

DEPTH_TEXTURE

而gles2支持 DEPTH_TEXTURE 在着色器中,它可能无法在某些旧硬件(尤其是移动硬件)上工作。

色空间

gles2和gles3在不同的颜色空间中。这意味着它们之间的颜色会略有不同,尤其是在使用照明时。

如果你的游戏要同时使用gles2和gles3,你可以使用 if 语句检查并查看输出是否在sRGB中,使用 OUTPUT_IS_SRGB . OUTPUT_IS_SRGBtrue 在欢乐2和 false 欢呼雀跃。

HDR

GLES不能使用高动态范围(HDR)渲染功能。如果为项目或给定的视区设置了HDR,Godot仍将使用低动态范围(LDR),该范围将视区值限制为 0-1 范围。

空间材料特征

在gles2中,在 SpatialMaterial 缺少:

  • 折射

  • 次表面散射

  • 各向异性

  • 透明涂层

  • 深度映射

使用空间材质时,它们甚至不会显示在编辑器中。

自定义 ShaderMaterials ,您可以为这些功能设置值,但它们将不起作用。例如,您仍然可以设置 SSS 在您的明暗器中内置(通常添加次表面散射),但不会发生任何事情。

环境特点

在gles2中,在 Environment 缺少:

  • 自动曝光

  • 色调映射

  • 屏幕空间反射

  • 空间环境光遮蔽

  • 景深

  • 辉光(也称为花)

  • 调整

这意味着在gles2环境中,只能设置:

  • 天空(包括程序天空)

  • 环境光

GIProbes

GIProbes 不要在GLES2中工作。而是使用 Baked Lightmaps . 有关烘焙光照贴图如何工作的描述,请参见 Baked Lightmaps tutorial .

接触阴影

这个 shadow_contact 性质 Lights 在gles2中不支持,所以什么也不支持。

轻性能

在gles2中,由于每个灯光都在一个单独的渲染过程中处理(与gles3相反,gles3都是在一个单独的过程中完成的),因此使用多个灯光时性能会很差。尽量将场景限制在尽可能少的灯光范围内,以获得最佳的性能。

纹理压缩

在移动设备上,gles2需要etc纹理压缩,而gles3需要etc2。默认情况下启用ETC2,因此如果使用gles2导出到移动设备,请确保设置项目设置。 rendering/vram_compression/import_etc 然后重新导入纹理。

混合形状

gles2不支持混合形状。

底纹语言

gles3提供了许多gles2没有的内置函数。以下是在gles2中不可用或支持有限的函数列表。

有关内置glsl函数的完整列表,请参见 Shading Language doc .

功能

注意

vec_type sinh (vec_型)

vec_type cosh (vec_型)

vec_type tanh (vec_型)

vec_type 反双曲正弦 (vec_型)

vec_type 阿科什 (vec_型)

vec_type 反双曲正切 (vec_型)

vec_type (vec_型)

vec_type 圆场 (vec_型)

vec_type 躯干 (vec_型)

vec_type modf (vec_类型x,out vec_类型i)

vec_bool_type 伊斯南 (vec_型)

vec_bool_type 伊辛 (vec_型)

vec_int_type 浮动位图 (vec_型)

vec_uint_type 漂浮物 (vec_型)

vec_type intbitstofloat (vec_int_类型)

vec_type uintbitstofloat (vec-uint-u型)

mat_type 外部产品 (vec_型,vec_型)

mat_type 转置 (材料类型)

浮动 行列式 (材料类型)

mat_type (材料类型)

IVEC2 纹理化 (sampler2d_类型S,int lod)

IVEC2 纹理化 (采样立方体S,int lod)

vec4_type 纹理 (S型,Vec2紫外线采样器 [,浮动偏差] )

bias 在顶点着色中不可用

vec4_type 纹理 (采样立方体S,vec3 uv [,浮动偏差] )

bias 在顶点着色中不可用

vec4_type 纹理项目 (S型、Vec3紫外线采样器 [,浮动偏差] )

bias 在顶点着色中不可用

vec4_type 纹理项目 (S型,Vec4-uv采样器 [,浮动偏差] )

bias 在顶点着色中不可用

vec4_type 纹理图 (S型、Vec2-UV、Float Lod样品)

仅在某些硬件上的顶点明暗器中可用

vec4_type 纹理图 (采样立方体S、vec3 uv、float lod)

仅在某些硬件上的顶点明暗器中可用

vec4_type 纹理项目 (S型、Vec3紫外、Float Lod样品)

仅在顶点明暗器中可用

vec4_type 纹理项目 (S型、Vec4紫外线、Float Lod样品)

仅在顶点明暗器中可用

vec4_type 特赛尔费特 (sampler2d_类型S,ivec2 uv,int lod)

vec_type dFdx (vec_型)

vec_type dFdy (vec_型)

vec_type 宽度 (vec_型)

Godot还提供许多内置变量和渲染模式。有些在gles2中不受支持。下面是一个内置变量和呈现模式的列表,这些内置变量和呈现模式在写入时将不起作用,甚至在使用gles2后端时可能导致问题。

变量/渲染模式

ensure_correct_normals

INSTANCE_ID

DEPTH

ANISOTROPY

ANISOTROPY_FLOW

SSS_STRENGTH