WebGL 2.0は2017年にリリースされ、 OpenGL ES 3.0グラフィックスタック(2012)をもたらしました。最近のすべてのブラウザーは、長い間それをサポートしていたはずです。ただし、リーダーの間には遅れがあり、Safariユーザーは依然として(2021年初頭)、OpenGL ES2.0に基づいて2011年に公開されたWebGL1.0の機能に制限することを余儀なくされています。
OpenGL ES 2.0に出くわした開発者は、このグラフィックスタックがいかに制限されているかを直接知っています。ソフトウェアインターフェイスの制限は、当時のモバイルグラフィックカードの弱点を主に反映していたため、数年前のAndroidデバイスのOpenGL ES 3.0への大規模な移行は、デスクトップビデオからの深刻な遅延から始まりましたが、非常に有用であることが判明しました。カード。
ブラウザテクノロジーはさらに不活性であることが判明しました-Androidデバイスは計算シェーダーを備えたOpenGLES 3.2を長い間サポートし、Vulkanのサポートを実装し、Web標準開発者はWebGPUを準備していますが、通常の開発者は当時の古いWebGL2.0にアクセスできます出版物の、そしてストーンエイジWebGL 1.0 .. ..
最近、Open CASCADE Technology(OCCT)C ++グラフィックエンジンは、金属粗さ材料モデルのPBR(物理ベースの照明)サポートを追加しました。 「JPEGfor3D」として知られるglTF2.0の進歩により、このマテリアルモデルがグラフィックエンジン間の交換標準として登場しました。
PBR / OpenGL 1.1. , PBR “” OpenGL 3.0 ( 2008 !) OpenGL ES 3.0.
( WebAssembly) - WebKit Safari WebGL 2.0! Safari macOS , iOS Apple. AppStore , WebKit, , Safari - AppStore .
, WebGL 1.0 , Apple , OpenGL ES 3.0 iOS .
, Safari , WebGL 2.0. , , - WebGL 2.0 iOS 14. , Emscripten, WebGL 2.0, OCCT PBR :
function _glUniform4fv(location, count, value) {
GL.validateGLObjectID(GL.uniforms, location, 'glUniform4fv', 'location');
if (GL.currentContext.version >= 2) {
// WebGL 2 provides new garbage-free entry points to call to WebGL.
// Use those always when possible.
- GLctx.uniform4fv(GL.uniforms[location], HEAPF32, value>>2, count*4);
- return;
+ //GLctx.uniform4fv(GL.uniforms[location], HEAPF32, value>>2, count*4);
+ //return;
}
...
-: OCCT PBR WebGL 1.0
, Safari - WebGL 2.0, - ( ). , PBR WebGL 2.0, , PBR WebGL 1.0 .
, , “” WebGL 1.0, PBR iPad WebGL. iPad ‘2020 (Apple A12 Bionic) iOS 14.4 / Safari:
EGLVersion: 1.4 Emscripten EGL
EGLVendor: Emscripten
EGLClientAPIs: OpenGL_ES
GLvendor: WebKit
GLdevice: WebKit WebGL
GLunmaskedVendor: Apple Inc.
GLunmaskedDevice: Apple GPU
GLversion: OpenGL ES 2.0 (WebGL 1.0)
GLSL: OpenGL ES GLSL ES 1.00 (WebGL GLSL ES 1.0 (1.0))
Max texture size: 16384
Max FBO dump size: 16384x16384
Max combined texture units: 32
Viewport: 1560x1080
GLextensions: GL_EXT_blend_minmax GL_EXT_sRGB GL_OES_texture_float
GL_OES_texture_half_float GL_OES_texture_half_float_linear
GL_OES_standard_derivatives GL_EXT_shader_texture_lod
GL_EXT_texture_filter_anisotropic GL_OES_vertex_array_object
GL_OES_element_index_uint GL_WEBGL_lose_context GL_WEBGL_compressed_texture_astc
GL_WEBGL_compressed_texture_etc GL_WEBGL_compressed_texture_etc1
GL_WEBKIT_WEBGL_compressed_texture_pvrtc GL_WEBGL_depth_texture
GL_ANGLE_instanced_arrays GL_WEBGL_debug_shaders GL_WEBGL_debug_renderer_info
GL_EXT_color_buffer_half_float
- , WebGL 1.0:
WebGL 2.0 Firefox.
“
webgl.enable-webgl2=false
” “about:config
”.
- WebGL 1.0, WebGL 1.0 WebGL 2.0.
JavaScript .
WebGL 2.0 Emscripten.
“
MAX_WEBGL_VERSION=1
”.
- WebGL 1.0.
JavaScript ( ).
Chromium “
MAX_WEBGL_VERSION=1
”.
WebGL 1.0, - .
JavaScript ( ).
Draw Harness OpenGL ES, ANGLE.
OpenGL ES, .
“
vcaps -maxversion 2 0
” OpenGL ES 2.0 ( OpenGL ES 3.0).
, - WebGL .
Safari macOS.
- WebGL 1.0.
Apple M1 (ARM64) iPad, !
JavaScript .
Safari iOS.
- WebGL 1.0.
JavaScript .
- , , … . WebGL - OpenGL OpenGL ES , - , WebGL GLSL.
WebGL, ANGLE, OpenGL Metal Apple. CG NVIDIA , AMD , OpenGL Apple , GLSL 110 GLSL 120!
PBR WebGL 1.0 :
PBR -
128x128
GL_RG32F
GL_RG16F
.
#1:
GL_RG32F
/GL_RG16F
iPad + WebGL 1.0 ( GL_EXT_texture_rg ).
#2:
GL_RGBA32F
iPad + WebGL 1.0. iPad GL_OES_texture_float_linear, GL_OES_texture_float. , iPad GL_OES_texture_half_float_linear, .
#3:
GL_RGBA16F
OpenGL ES 3.0 / WebGL 2.0, WebGL 1.0 + GL_OES_texture_half_float .
PBR
9x1 GL_RGBA32F
.
:
GL_RGBA32F
FBO iPad + WebGL 1.0. iPad WEBGL_color_buffer_float.
- PBR
512x512x6
GL_RGBA8
.
: iPad + WebGL 1.0 -, ( GL_OES_fbo_render_mipmap ).
PBR GLSL - , .
:
textureCubeLod()
GLSL 100 es
, GL_EXT_shader_texture_lod iPad + WebGL 1.0.
PBR GLSL ,
%
.
#1:
%
GLSL 100 es
,mod()
.
#2:
GLSL 100 es
.
#3:
GLSL 100 es
(non-constant index expressions).
sRGB .
#1: GL_EXT_sRGB iPad + WenGL 1.0, , -
glGenerateMipmap()
.
#2: - sRGB WebGL 2.0 (5 !).
- OpenGL. - glGetError()
, WebGL , . , GLSL , , .
GL_RGBA16F
WebGL 1.0 + GL_OES_texture_half_float 32 16 - C/C++ . OpenGL 3.0 OpenGL ES 3.0 , WebGL 1.0 . GL_RGBA32F
GL_RGBA16F
:
GL_RGBA32F
PBR, . , PBR 9x1 - OpenGL, … , : 9x3 GL_RGBA8
( RGB ), glReadPixels()
, GL_RGBA32F
.
- PBR , - - glCopyTexImage2D()
. , - , , .
textureCubeLod()
PBR , , WebGL 1.0 GL_EXT_shader_texture_lod, GLSL :
+#extension GL_EXT_shader_texture_lod : enable
+#define textureCubeLod textureCubeLodEXT
PBR , textureCubeLod()
textureCube()
, .. - :
GLSL 100 es
. %
mod()
, :
GLSL :
> const float aSHBasisFuncCoeffs[9] = float[9] { 0.0, 1.0, 2.0, … };
uniform , C/C++ - , -, , , .
for(;;)
. PBR , ():
> uniform int uSamplesNum;
> for (int aSampleIter = 0; aSampleIter < uSamplesNum; ++aSampleIter) {}
, , , , - .
GLSL 100 es
-uniform
. :
> uniform int uSamplesNum;
> int TheMaxSamples = 1024;
> for (int aSampleIter = 0; aSampleIter < TheMaxSamples; ++aSampleIter) {
> if (aSampleIter >= uSamplesNum) { break; }
> }
“Non-constant index expressions are disallowed”. PBR :
> int anIndex = int(gl_FragCoord.x);
> float aCoef = aSHCosCoeffs[anId] * aSHBasisFuncCoeffs[anId];
GLSL 100 es
if/else.
> if (anId == 0) { aCoef = aSHCosCoeffs[0] * aSHBasisFuncCoeffs[0]; }
> else if (anId == 1) { aCoef = aSHCosCoeffs[1] * aSHBasisFuncCoeffs[1]; }
> else if (anId == 2) { aCoef = aSHCosCoeffs[2] * aSHBasisFuncCoeffs[2]; }
GLSL 100 es
, . GLSL , , (trivially unrolled) , .. .
sRGB
sRGB . , WebGL 1.0 + GL_EXT_sRGB - -. sRGB , -. - ( ), PBR - .
WebGL 2.0, - sRGB , . - 2048x2048x6 5 ! OpenGL / OpenGL ES .
, WebGL - - WebGL sRGB, , - . , WebGL sRGB ( ), - , mip-map .
- PBR OCCT Safari iPad c WebGL 1.0. , (iPad ‘2020, Apple A12 SoC 2018 ), , Apple .
, WebGL 2.0 - - .
, Microsoft Internet Explorer Microsoft Edge Legacy ( -Chromium ) -, . - (Mozilla Firefox, Chromium, Safari/WebKit) - , .
iOSエコシステムを内部に保持し、競合他社の決定を排除するというAppleの戦略は、ユーザーが自分で選択したシステムを奪うことになります。多くの噂によると、WebKitによるWebGL 2.0の実験的サポートは、その実験的サポートを終了しようとしています(ANGLEライブラリによるOpenGL ES実装への切り替えのおかげで、他のブラウザで長い間使用されてきました)。 、いつものように、不明のままです。
英語の元の出版物はここにあります。