super-three 0.177.0 → 0.179.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/three.cjs +959 -231
- package/build/three.core.js +751 -170
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +210 -64
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +78 -29
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +3269 -1545
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +3093 -1545
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -2
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +61 -14
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/USDZExporter.js +676 -299
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/interactive/HTMLMesh.js +5 -3
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- package/examples/jsm/loaders/ColladaLoader.js +1 -1
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +212 -30
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/SkyMesh.js +2 -2
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +226 -86
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +197 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/BloomNode.js +8 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +8 -10
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +181 -172
- package/examples/jsm/tsl/display/hashBlur.js +3 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +1 -1
- package/package.json +1 -1
- package/src/Three.Core.js +1 -0
- package/src/Three.TSL.js +77 -28
- package/src/Three.WebGPU.js +2 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +3 -3
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +1 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/core/Path.js +22 -22
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/loaders/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +27 -4
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- package/src/materials/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +28 -5
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -2
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +2 -3
- package/src/nodes/TSL.js +5 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/Camera.js +12 -12
- package/src/nodes/accessors/Normal.js +95 -29
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +18 -3
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +1 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +12 -0
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/core/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +3 -0
- package/src/nodes/core/CacheNode.js +0 -14
- package/src/nodes/core/ContextNode.js +20 -1
- package/src/nodes/core/Node.js +15 -3
- package/src/nodes/core/NodeBuilder.js +228 -92
- package/src/nodes/core/NodeUtils.js +4 -1
- package/src/nodes/core/StackNode.js +49 -29
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +91 -2
- package/src/nodes/core/VaryingNode.js +6 -4
- package/src/nodes/display/BlendModes.js +2 -2
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +157 -9
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +67 -23
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/LightsNode.js +4 -4
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +1 -1
- package/src/nodes/lighting/ShadowNode.js +2 -2
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +90 -55
- package/src/nodes/math/OperatorNode.js +22 -39
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +114 -55
- package/src/nodes/utils/DebugNode.js +1 -1
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +0 -17
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +11 -4
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +4 -2
- package/src/renderers/WebGLRenderer.js +26 -24
- package/src/renderers/common/Background.js +2 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderObject.js +68 -3
- package/src/renderers/common/Renderer.js +19 -16
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +19 -3
- package/src/renderers/common/XRManager.js +31 -12
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +1 -1
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLProgram.js +12 -6
- package/src/renderers/webgl/WebGLPrograms.js +6 -4
- package/src/renderers/webgl/WebGLShadowMap.js +11 -1
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +19 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +103 -72
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -5
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +2 -0
- package/src/renderers/webgpu/WebGPUBackend.js +63 -16
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +64 -79
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -0
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +45 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +5 -5
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +12 -65
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +68 -6
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +11 -1
- package/src/textures/VideoTexture.js +30 -2
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -171,6 +171,15 @@ class XRManager extends EventDispatcher {
|
|
|
171
171
|
*/
|
|
172
172
|
this._supportsLayers = false;
|
|
173
173
|
|
|
174
|
+
/**
|
|
175
|
+
* Whether the device supports binding gl objects.
|
|
176
|
+
*
|
|
177
|
+
* @private
|
|
178
|
+
* @type {boolean}
|
|
179
|
+
* @readonly
|
|
180
|
+
*/
|
|
181
|
+
this._supportsGlBinding = typeof XRWebGLBinding !== 'undefined';
|
|
182
|
+
|
|
174
183
|
this._frameBufferTargets = null;
|
|
175
184
|
|
|
176
185
|
/**
|
|
@@ -357,7 +366,7 @@ class XRManager extends EventDispatcher {
|
|
|
357
366
|
* @type {boolean}
|
|
358
367
|
* @readonly
|
|
359
368
|
*/
|
|
360
|
-
this._useLayers = (
|
|
369
|
+
this._useLayers = ( this._supportsGlBinding && 'createProjectionLayer' in XRWebGLBinding.prototype ); // eslint-disable-line compat/compat
|
|
361
370
|
|
|
362
371
|
/**
|
|
363
372
|
* Whether the usage of multiview has been requested by the application or not.
|
|
@@ -641,7 +650,7 @@ class XRManager extends EventDispatcher {
|
|
|
641
650
|
resolveStencilBuffer: false
|
|
642
651
|
} );
|
|
643
652
|
|
|
644
|
-
renderTarget.
|
|
653
|
+
renderTarget._autoAllocateDepthBuffer = true;
|
|
645
654
|
|
|
646
655
|
const material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } );
|
|
647
656
|
material.map = renderTarget.texture;
|
|
@@ -732,7 +741,7 @@ class XRManager extends EventDispatcher {
|
|
|
732
741
|
resolveStencilBuffer: false
|
|
733
742
|
} );
|
|
734
743
|
|
|
735
|
-
renderTarget.
|
|
744
|
+
renderTarget._autoAllocateDepthBuffer = true;
|
|
736
745
|
|
|
737
746
|
const material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } );
|
|
738
747
|
material.map = renderTarget.texture;
|
|
@@ -806,7 +815,7 @@ class XRManager extends EventDispatcher {
|
|
|
806
815
|
for ( const layer of this._layers ) {
|
|
807
816
|
|
|
808
817
|
layer.renderTarget.isXRRenderTarget = this._session !== null;
|
|
809
|
-
layer.renderTarget.
|
|
818
|
+
layer.renderTarget._hasExternalTextures = layer.renderTarget.isXRRenderTarget;
|
|
810
819
|
|
|
811
820
|
if ( layer.renderTarget.isXRRenderTarget && this._supportsLayers ) {
|
|
812
821
|
|
|
@@ -915,9 +924,18 @@ class XRManager extends EventDispatcher {
|
|
|
915
924
|
|
|
916
925
|
//
|
|
917
926
|
|
|
927
|
+
if ( this._supportsGlBinding ) {
|
|
928
|
+
|
|
929
|
+
const glBinding = new XRWebGLBinding( session, gl );
|
|
930
|
+
this._glBinding = glBinding;
|
|
931
|
+
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
//
|
|
935
|
+
|
|
918
936
|
if ( this._useLayers === true ) {
|
|
919
937
|
|
|
920
|
-
// default path using
|
|
938
|
+
// default path using XRProjectionLayer
|
|
921
939
|
|
|
922
940
|
let depthFormat = null;
|
|
923
941
|
let depthType = null;
|
|
@@ -945,11 +963,9 @@ class XRManager extends EventDispatcher {
|
|
|
945
963
|
|
|
946
964
|
}
|
|
947
965
|
|
|
948
|
-
const
|
|
949
|
-
const glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
|
|
966
|
+
const glProjLayer = this._glBinding.createProjectionLayer( projectionlayerInit );
|
|
950
967
|
const layersArray = [ glProjLayer ];
|
|
951
968
|
|
|
952
|
-
this._glBinding = glBinding;
|
|
953
969
|
this._glProjLayer = glProjLayer;
|
|
954
970
|
|
|
955
971
|
renderer.setPixelRatio( 1 );
|
|
@@ -974,7 +990,7 @@ class XRManager extends EventDispatcher {
|
|
|
974
990
|
multiview: this._useMultiview
|
|
975
991
|
} );
|
|
976
992
|
|
|
977
|
-
this._xrRenderTarget.
|
|
993
|
+
this._xrRenderTarget._hasExternalTextures = true;
|
|
978
994
|
this._xrRenderTarget.depth = this._useMultiview ? 2 : 1;
|
|
979
995
|
|
|
980
996
|
this._supportsLayers = session.enabledFeatures.includes( 'layers' );
|
|
@@ -1036,6 +1052,7 @@ class XRManager extends EventDispatcher {
|
|
|
1036
1052
|
}
|
|
1037
1053
|
);
|
|
1038
1054
|
|
|
1055
|
+
this._xrRenderTarget._isOpaqueFramebuffer = true;
|
|
1039
1056
|
this._referenceSpace = await session.requestReferenceSpace( this.getReferenceSpaceType() );
|
|
1040
1057
|
|
|
1041
1058
|
}
|
|
@@ -1094,9 +1111,11 @@ class XRManager extends EventDispatcher {
|
|
|
1094
1111
|
|
|
1095
1112
|
}
|
|
1096
1113
|
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1114
|
+
// inherit camera layers and enable eye layers (1 = left, 2 = right)
|
|
1115
|
+
cameraXR.layers.mask = camera.layers.mask | 0b110;
|
|
1116
|
+
cameraL.layers.mask = cameraXR.layers.mask & 0b011;
|
|
1117
|
+
cameraR.layers.mask = cameraXR.layers.mask & 0b101;
|
|
1118
|
+
|
|
1100
1119
|
|
|
1101
1120
|
const parent = camera.parent;
|
|
1102
1121
|
const cameras = cameraXR.cameras;
|
|
@@ -34,10 +34,11 @@ class XRRenderTarget extends RenderTarget {
|
|
|
34
34
|
* are defined by external textures. This flag is
|
|
35
35
|
* set to `true` when using the WebXR Layers API.
|
|
36
36
|
*
|
|
37
|
+
* @private
|
|
37
38
|
* @type {boolean}
|
|
38
39
|
* @default false
|
|
39
40
|
*/
|
|
40
|
-
this.
|
|
41
|
+
this._hasExternalTextures = false;
|
|
41
42
|
|
|
42
43
|
/**
|
|
43
44
|
* Whether a depth buffer should automatically be allocated
|
|
@@ -50,10 +51,25 @@ class XRRenderTarget extends RenderTarget {
|
|
|
50
51
|
*
|
|
51
52
|
* Reference: {@link https://www.w3.org/TR/webxrlayers-1/#dom-xrprojectionlayer-ignoredepthvalues}.
|
|
52
53
|
*
|
|
54
|
+
* @private
|
|
53
55
|
* @type {boolean}
|
|
54
56
|
* @default true
|
|
55
57
|
*/
|
|
56
|
-
this.
|
|
58
|
+
this._autoAllocateDepthBuffer = true;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Whether this render target is associated with a XRWebGLLayer.
|
|
62
|
+
*
|
|
63
|
+
* A XRWebGLLayer points to an opaque framebuffer. Basically,
|
|
64
|
+
* this means that you don't have access to its bound color,
|
|
65
|
+
* stencil and depth buffers. We need to handle this framebuffer
|
|
66
|
+
* differently since its textures are always bound.
|
|
67
|
+
*
|
|
68
|
+
* @private
|
|
69
|
+
* @type {boolean}
|
|
70
|
+
* @default false
|
|
71
|
+
* */
|
|
72
|
+
this._isOpaqueFramebuffer = false;
|
|
57
73
|
|
|
58
74
|
}
|
|
59
75
|
|
|
@@ -61,8 +77,9 @@ class XRRenderTarget extends RenderTarget {
|
|
|
61
77
|
|
|
62
78
|
super.copy( source );
|
|
63
79
|
|
|
64
|
-
this.
|
|
65
|
-
this.
|
|
80
|
+
this._hasExternalTextures = source._hasExternalTextures;
|
|
81
|
+
this._autoAllocateDepthBuffer = source._autoAllocateDepthBuffer;
|
|
82
|
+
this._isOpaqueFramebuffer = source._isOpaqueFramebuffer;
|
|
66
83
|
|
|
67
84
|
return this;
|
|
68
85
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import NodeMaterial from '../../../materials/nodes/NodeMaterial.js';
|
|
2
2
|
import { getDirection, blur } from '../../../nodes/pmrem/PMREMUtils.js';
|
|
3
|
-
import { equirectUV } from '../../../nodes/utils/
|
|
3
|
+
import { equirectUV } from '../../../nodes/utils/EquirectUV.js';
|
|
4
4
|
import { uniform } from '../../../nodes/core/UniformNode.js';
|
|
5
5
|
import { uniformArray } from '../../../nodes/accessors/UniformArrayNode.js';
|
|
6
6
|
import { texture } from '../../../nodes/accessors/TextureNode.js';
|
|
@@ -45,18 +45,6 @@ class NodeSampledTexture extends SampledTexture {
|
|
|
45
45
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
/**
|
|
49
|
-
* Overwrites the default to additionally check if the node value has changed.
|
|
50
|
-
*
|
|
51
|
-
* @param {number} generation - The generation.
|
|
52
|
-
* @return {boolean} Whether an update is required or not.
|
|
53
|
-
*/
|
|
54
|
-
needsBindingsUpdate( generation ) {
|
|
55
|
-
|
|
56
|
-
return this.textureNode.value !== this.texture || super.needsBindingsUpdate( generation );
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
|
|
60
48
|
/**
|
|
61
49
|
* Updates the binding.
|
|
62
50
|
*
|
|
@@ -75,7 +75,17 @@ export default /* glsl */`
|
|
|
75
75
|
|
|
76
76
|
float texture2DCompare( sampler2D depths, vec2 uv, float compare ) {
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
float depth = unpackRGBAToDepth( texture2D( depths, uv ) );
|
|
79
|
+
|
|
80
|
+
#ifdef USE_REVERSEDEPTHBUF
|
|
81
|
+
|
|
82
|
+
return step( depth, compare );
|
|
83
|
+
|
|
84
|
+
#else
|
|
85
|
+
|
|
86
|
+
return step( compare, depth );
|
|
87
|
+
|
|
88
|
+
#endif
|
|
79
89
|
|
|
80
90
|
}
|
|
81
91
|
|
|
@@ -91,7 +101,15 @@ export default /* glsl */`
|
|
|
91
101
|
|
|
92
102
|
vec2 distribution = texture2DDistribution( shadow, uv );
|
|
93
103
|
|
|
94
|
-
|
|
104
|
+
#ifdef USE_REVERSEDEPTHBUF
|
|
105
|
+
|
|
106
|
+
float hard_shadow = step( distribution.x, compare ); // Hard Shadow
|
|
107
|
+
|
|
108
|
+
#else
|
|
109
|
+
|
|
110
|
+
float hard_shadow = step( compare , distribution.x ); // Hard Shadow
|
|
111
|
+
|
|
112
|
+
#endif
|
|
95
113
|
|
|
96
114
|
if (hard_shadow != 1.0 ) {
|
|
97
115
|
|
|
@@ -80,8 +80,17 @@ void main() {
|
|
|
80
80
|
|
|
81
81
|
#include <logdepthbuf_fragment>
|
|
82
82
|
|
|
83
|
-
// Higher precision equivalent of gl_FragCoord.z
|
|
84
|
-
|
|
83
|
+
// Higher precision equivalent of gl_FragCoord.z
|
|
84
|
+
|
|
85
|
+
#ifdef USE_REVERSEDEPTHBUF
|
|
86
|
+
|
|
87
|
+
float fragCoordZ = vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ];
|
|
88
|
+
|
|
89
|
+
#else
|
|
90
|
+
|
|
91
|
+
float fragCoordZ = 0.5 * vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ] + 0.5;
|
|
92
|
+
|
|
93
|
+
#endif
|
|
85
94
|
|
|
86
95
|
#if DEPTH_PACKING == 3200
|
|
87
96
|
|
|
@@ -21,6 +21,10 @@ function WebGLAttributes( gl ) {
|
|
|
21
21
|
|
|
22
22
|
type = gl.FLOAT;
|
|
23
23
|
|
|
24
|
+
} else if ( typeof Float16Array !== 'undefined' && array instanceof Float16Array ) {
|
|
25
|
+
|
|
26
|
+
type = gl.HALF_FLOAT;
|
|
27
|
+
|
|
24
28
|
} else if ( array instanceof Uint16Array ) {
|
|
25
29
|
|
|
26
30
|
if ( attribute.isFloat16BufferAttribute ) {
|
|
@@ -92,7 +92,7 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;
|
|
95
|
-
const
|
|
95
|
+
const reversedDepthBuffer = parameters.reversedDepthBuffer === true && extensions.has( 'EXT_clip_control' );
|
|
96
96
|
|
|
97
97
|
const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );
|
|
98
98
|
const maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );
|
|
@@ -120,7 +120,7 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
|
|
|
120
120
|
|
|
121
121
|
precision: precision,
|
|
122
122
|
logarithmicDepthBuffer: logarithmicDepthBuffer,
|
|
123
|
-
|
|
123
|
+
reversedDepthBuffer: reversedDepthBuffer,
|
|
124
124
|
|
|
125
125
|
maxTextures: maxTextures,
|
|
126
126
|
maxVertexTextures: maxVertexTextures,
|
|
@@ -57,7 +57,9 @@ function getEncodingComponents( colorSpace ) {
|
|
|
57
57
|
function getShaderErrors( gl, shader, type ) {
|
|
58
58
|
|
|
59
59
|
const status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );
|
|
60
|
-
|
|
60
|
+
|
|
61
|
+
const shaderInfoLog = gl.getShaderInfoLog( shader ) || '';
|
|
62
|
+
const errors = shaderInfoLog.trim();
|
|
61
63
|
|
|
62
64
|
if ( status && errors === '' ) return '';
|
|
63
65
|
|
|
@@ -654,7 +656,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
654
656
|
parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
|
|
655
657
|
|
|
656
658
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
657
|
-
parameters.
|
|
659
|
+
parameters.reversedDepthBuffer ? '#define USE_REVERSEDEPTHBUF' : '',
|
|
658
660
|
|
|
659
661
|
'uniform mat4 modelMatrix;',
|
|
660
662
|
'uniform mat4 modelViewMatrix;',
|
|
@@ -821,7 +823,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
821
823
|
parameters.decodeVideoTextureEmissive ? '#define DECODE_VIDEO_TEXTURE_EMISSIVE' : '',
|
|
822
824
|
|
|
823
825
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
824
|
-
parameters.
|
|
826
|
+
parameters.reversedDepthBuffer ? '#define USE_REVERSEDEPTHBUF' : '',
|
|
825
827
|
|
|
826
828
|
'uniform mat4 viewMatrix;',
|
|
827
829
|
'uniform vec3 cameraPosition;',
|
|
@@ -967,9 +969,13 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
967
969
|
// check for link errors
|
|
968
970
|
if ( renderer.debug.checkShaderErrors ) {
|
|
969
971
|
|
|
970
|
-
const
|
|
971
|
-
const
|
|
972
|
-
const
|
|
972
|
+
const programInfoLog = gl.getProgramInfoLog( program ) || '';
|
|
973
|
+
const vertexShaderInfoLog = gl.getShaderInfoLog( glVertexShader ) || '';
|
|
974
|
+
const fragmentShaderInfoLog = gl.getShaderInfoLog( glFragmentShader ) || '';
|
|
975
|
+
|
|
976
|
+
const programLog = programInfoLog.trim();
|
|
977
|
+
const vertexLog = vertexShaderInfoLog.trim();
|
|
978
|
+
const fragmentLog = fragmentShaderInfoLog.trim();
|
|
973
979
|
|
|
974
980
|
let runnable = true;
|
|
975
981
|
let haveDiagnostics = true;
|
|
@@ -108,7 +108,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
111
|
-
const
|
|
111
|
+
const reversedDepthBuffer = renderer.state.buffers.depth.getReversed();
|
|
112
112
|
|
|
113
113
|
const numMultiviewViews = currentRenderTarget && currentRenderTarget.isWebGLMultiviewRenderTarget ? currentRenderTarget.numViews : 0;
|
|
114
114
|
|
|
@@ -305,11 +305,11 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
305
305
|
useFog: material.fog === true,
|
|
306
306
|
fogExp2: ( !! fog && fog.isFogExp2 ),
|
|
307
307
|
|
|
308
|
-
flatShading: material.flatShading === true,
|
|
308
|
+
flatShading: ( material.flatShading === true && material.wireframe === false ),
|
|
309
309
|
|
|
310
310
|
sizeAttenuation: material.sizeAttenuation === true,
|
|
311
311
|
logarithmicDepthBuffer: logarithmicDepthBuffer,
|
|
312
|
-
|
|
312
|
+
reversedDepthBuffer: reversedDepthBuffer,
|
|
313
313
|
|
|
314
314
|
skinning: object.isSkinnedMesh === true,
|
|
315
315
|
|
|
@@ -518,6 +518,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
518
518
|
_programLayers.enable( 20 );
|
|
519
519
|
if ( parameters.batchingColor )
|
|
520
520
|
_programLayers.enable( 21 );
|
|
521
|
+
if ( parameters.gradientMap )
|
|
522
|
+
_programLayers.enable( 22 );
|
|
521
523
|
|
|
522
524
|
array.push( _programLayers.mask );
|
|
523
525
|
_programLayers.disableAll();
|
|
@@ -530,7 +532,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
530
532
|
_programLayers.enable( 2 );
|
|
531
533
|
if ( parameters.logarithmicDepthBuffer )
|
|
532
534
|
_programLayers.enable( 3 );
|
|
533
|
-
if ( parameters.
|
|
535
|
+
if ( parameters.reversedDepthBuffer )
|
|
534
536
|
_programLayers.enable( 4 );
|
|
535
537
|
if ( parameters.skinning )
|
|
536
538
|
_programLayers.enable( 5 );
|
|
@@ -84,7 +84,17 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
84
84
|
|
|
85
85
|
// Set GL state for depth map.
|
|
86
86
|
_state.setBlending( NoBlending );
|
|
87
|
-
|
|
87
|
+
|
|
88
|
+
if ( _state.buffers.depth.getReversed() ) {
|
|
89
|
+
|
|
90
|
+
_state.buffers.color.setClear( 0, 0, 0, 0 );
|
|
91
|
+
|
|
92
|
+
} else {
|
|
93
|
+
|
|
94
|
+
_state.buffers.color.setClear( 1, 1, 1, 1 );
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
88
98
|
_state.buffers.depth.setTest( true );
|
|
89
99
|
_state.setScissorTest( false );
|
|
90
100
|
|
|
@@ -667,7 +667,7 @@ function WebGLState( gl, extensions ) {
|
|
|
667
667
|
break;
|
|
668
668
|
|
|
669
669
|
case MultiplyBlending:
|
|
670
|
-
gl.blendFuncSeparate( gl.
|
|
670
|
+
gl.blendFuncSeparate( gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE );
|
|
671
671
|
break;
|
|
672
672
|
|
|
673
673
|
default:
|
|
@@ -685,15 +685,15 @@ function WebGLState( gl, extensions ) {
|
|
|
685
685
|
break;
|
|
686
686
|
|
|
687
687
|
case AdditiveBlending:
|
|
688
|
-
gl.
|
|
688
|
+
gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE );
|
|
689
689
|
break;
|
|
690
690
|
|
|
691
691
|
case SubtractiveBlending:
|
|
692
|
-
|
|
692
|
+
console.error( 'THREE.WebGLState: SubtractiveBlending requires material.premultipliedAlpha = true' );
|
|
693
693
|
break;
|
|
694
694
|
|
|
695
695
|
case MultiplyBlending:
|
|
696
|
-
|
|
696
|
+
console.error( 'THREE.WebGLState: MultiplyBlending requires material.premultipliedAlpha = true' );
|
|
697
697
|
break;
|
|
698
698
|
|
|
699
699
|
default:
|
|
@@ -519,7 +519,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
519
519
|
|
|
520
520
|
if ( texture.isVideoTexture ) updateVideoTexture( texture );
|
|
521
521
|
|
|
522
|
-
if ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
522
|
+
if ( texture.isRenderTargetTexture === false && texture.isExternalTexture !== true && texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
523
523
|
|
|
524
524
|
const image = texture.image;
|
|
525
525
|
|
|
@@ -541,6 +541,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
541
541
|
|
|
542
542
|
}
|
|
543
543
|
|
|
544
|
+
} else if ( texture.isExternalTexture ) {
|
|
545
|
+
|
|
546
|
+
textureProperties.__webglTexture = texture.sourceTexture ? texture.sourceTexture : null;
|
|
547
|
+
|
|
544
548
|
}
|
|
545
549
|
|
|
546
550
|
state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );
|
|
@@ -551,7 +555,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
551
555
|
|
|
552
556
|
const textureProperties = properties.get( texture );
|
|
553
557
|
|
|
554
|
-
if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
558
|
+
if ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
555
559
|
|
|
556
560
|
uploadTexture( textureProperties, texture, slot );
|
|
557
561
|
return;
|
|
@@ -566,7 +570,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
566
570
|
|
|
567
571
|
const textureProperties = properties.get( texture );
|
|
568
572
|
|
|
569
|
-
if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
573
|
+
if ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {
|
|
570
574
|
|
|
571
575
|
uploadTexture( textureProperties, texture, slot );
|
|
572
576
|
return;
|
|
@@ -2167,13 +2171,21 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
2167
2171
|
const attachment = textures[ i ];
|
|
2168
2172
|
const attachmentProperties = properties.get( attachment );
|
|
2169
2173
|
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2174
|
+
let glTextureType = _gl.TEXTURE_2D;
|
|
2175
|
+
|
|
2176
|
+
if ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
|
|
2177
|
+
|
|
2178
|
+
glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;
|
|
2179
|
+
|
|
2180
|
+
}
|
|
2181
|
+
|
|
2182
|
+
state.bindTexture( glTextureType, attachmentProperties.__webglTexture );
|
|
2183
|
+
setTextureParameters( glTextureType, attachment );
|
|
2184
|
+
setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, glTextureType, 0 );
|
|
2173
2185
|
|
|
2174
2186
|
if ( textureNeedsGenerateMipmaps( attachment ) ) {
|
|
2175
2187
|
|
|
2176
|
-
generateMipmap(
|
|
2188
|
+
generateMipmap( glTextureType );
|
|
2177
2189
|
|
|
2178
2190
|
}
|
|
2179
2191
|
|