super-three 0.154.1 → 0.156.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/build/three.cjs +360 -160
- package/build/three.js +360 -160
- package/build/three.min.js +1 -1
- package/build/three.module.js +355 -161
- package/build/three.module.min.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +155 -25
- package/examples/jsm/csm/CSMShader.js +35 -1
- package/examples/jsm/environments/RoomEnvironment.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +1 -0
- package/examples/jsm/interactive/SelectionHelper.js +7 -0
- package/examples/jsm/libs/tween.module.js +790 -735
- package/examples/jsm/libs/utif.module.js +1644 -1558
- package/examples/jsm/loaders/DDSLoader.js +46 -3
- package/examples/jsm/loaders/EXRLoader.js +4 -4
- package/examples/jsm/loaders/FBXLoader.js +3 -1
- package/examples/jsm/loaders/GLTFLoader.js +25 -10
- package/examples/jsm/loaders/KTX2Loader.js +128 -79
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LogLuvLoader.js +2 -2
- package/examples/jsm/loaders/MMDLoader.js +10 -7
- package/examples/jsm/loaders/NRRDLoader.js +3 -3
- package/examples/jsm/loaders/PLYLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +48 -66
- package/examples/jsm/loaders/STLLoader.js +7 -0
- package/examples/jsm/loaders/TGALoader.js +10 -10
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +0 -9
- package/examples/jsm/misc/Volume.js +4 -6
- package/examples/jsm/nodes/Nodes.js +8 -6
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +29 -3
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +20 -3
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +15 -4
- package/examples/jsm/nodes/accessors/InstanceNode.js +8 -8
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +31 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +73 -61
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +3 -0
- package/examples/jsm/nodes/accessors/Object3DNode.js +2 -2
- package/examples/jsm/nodes/accessors/SceneNode.js +6 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +54 -9
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +29 -0
- package/examples/jsm/nodes/core/AttributeNode.js +2 -2
- package/examples/jsm/nodes/core/LightingModel.js +7 -9
- package/examples/jsm/nodes/core/Node.js +28 -3
- package/examples/jsm/nodes/core/NodeBuilder.js +94 -12
- package/examples/jsm/nodes/core/NodeUniform.js +1 -1
- package/examples/jsm/nodes/core/OutputStructNode.js +58 -0
- package/examples/jsm/nodes/core/PropertyNode.js +6 -0
- package/examples/jsm/nodes/core/StackNode.js +4 -4
- package/examples/jsm/nodes/core/StructTypeNode.js +24 -0
- package/examples/jsm/nodes/display/BumpMapNode.js +77 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportNode.js +19 -5
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -2
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +13 -0
- package/examples/jsm/nodes/functions/PhongLightingModel.js +53 -14
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +236 -97
- package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +13 -0
- package/examples/jsm/nodes/lighting/AONode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +58 -20
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +7 -10
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -12
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/LightingContextNode.js +12 -9
- package/examples/jsm/nodes/lighting/PointLightNode.js +7 -10
- package/examples/jsm/nodes/lighting/SpotLightNode.js +7 -10
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +54 -0
- package/examples/jsm/nodes/materials/Materials.js +2 -0
- package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +34 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -0
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +19 -2
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/NodeMaterial.js +61 -26
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
- package/examples/jsm/nodes/math/HashNode.js +35 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +6 -2
- package/examples/jsm/nodes/utils/SplitNode.js +1 -1
- package/examples/jsm/objects/Reflector.js +1 -9
- package/examples/jsm/objects/Refractor.js +0 -8
- package/examples/jsm/offscreen/scene.js +0 -1
- package/examples/jsm/postprocessing/FilmPass.js +3 -5
- package/examples/jsm/postprocessing/MaskPass.js +4 -1
- package/examples/jsm/postprocessing/OutputPass.js +33 -14
- package/examples/jsm/postprocessing/RenderPass.js +30 -12
- package/examples/jsm/postprocessing/SAOPass.js +23 -98
- package/examples/jsm/postprocessing/SSAOPass.js +10 -30
- package/examples/jsm/postprocessing/UnrealBloomPass.js +21 -17
- package/examples/jsm/renderers/common/Backend.js +11 -8
- package/examples/jsm/renderers/common/Background.js +22 -20
- package/examples/jsm/renderers/common/Binding.js +14 -0
- package/examples/jsm/renderers/common/Bindings.js +7 -10
- package/examples/jsm/renderers/common/Geometries.js +1 -1
- package/examples/jsm/renderers/common/Pipelines.js +96 -47
- package/examples/jsm/renderers/common/RenderContext.js +1 -0
- package/examples/jsm/renderers/common/RenderContexts.js +41 -5
- package/examples/jsm/renderers/common/RenderList.js +12 -4
- package/examples/jsm/renderers/common/RenderObject.js +26 -6
- package/examples/jsm/renderers/common/RenderObjects.js +10 -7
- package/examples/jsm/renderers/common/Renderer.js +82 -42
- package/examples/jsm/renderers/common/SampledTexture.js +2 -1
- package/examples/jsm/renderers/common/Sampler.js +1 -1
- package/examples/jsm/renderers/common/StorageBuffer.js +1 -1
- package/examples/jsm/renderers/common/Textures.js +172 -20
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +2 -2
- package/examples/jsm/renderers/common/nodes/NodeSampler.js +1 -1
- package/examples/jsm/renderers/common/nodes/Nodes.js +58 -13
- package/examples/jsm/renderers/webgl/WebGLBackend.js +607 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +118 -17
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +84 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +26 -0
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +529 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +199 -0
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +242 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +340 -0
- package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodeBuilder.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +320 -84
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +18 -2
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +120 -66
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -2
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +55 -36
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +96 -5
- package/examples/jsm/renderers/webgpu/utils/WebGPUConstants.js +24 -22
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +117 -139
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +60 -142
- package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +7 -6
- package/examples/jsm/shaders/FilmShader.js +11 -54
- package/examples/jsm/shaders/OutputShader.js +19 -2
- package/examples/jsm/shaders/SAOShader.js +0 -13
- package/examples/jsm/shaders/SSAOShader.js +33 -26
- package/examples/jsm/utils/BufferGeometryUtils.js +13 -4
- package/examples/jsm/webxr/OculusHandPointerModel.js +2 -2
- package/package.json +2 -2
- package/src/Three.js +3 -0
- package/src/animation/PropertyBinding.js +1 -1
- package/src/audio/Audio.js +6 -0
- package/src/cameras/CubeCamera.js +1 -4
- package/src/constants.js +4 -1
- package/src/core/BufferAttribute.js +20 -0
- package/src/core/Object3D.js +2 -15
- package/src/core/RenderTarget.js +122 -0
- package/src/core/UniformsGroup.js +2 -2
- package/src/geometries/CapsuleGeometry.js +1 -1
- package/src/loaders/DataTextureLoader.js +19 -2
- package/src/materials/Material.js +2 -2
- package/src/math/Vector2.js +2 -2
- package/src/math/Vector3.js +3 -3
- package/src/math/Vector4.js +4 -4
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/renderers/WebGLMultipleRenderTargets.js +0 -2
- package/src/renderers/WebGLRenderTarget.js +3 -110
- package/src/renderers/WebGLRenderer.js +83 -57
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +11 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
- package/src/renderers/webgl/WebGLBackground.js +5 -14
- package/src/renderers/webgl/WebGLGeometries.js +5 -1
- package/src/renderers/webgl/WebGLMaterials.js +1 -1
- package/src/renderers/webgl/WebGLProgram.js +2 -0
- package/src/renderers/webgl/WebGLPrograms.js +19 -3
- package/src/renderers/webgl/WebGLTextures.js +101 -16
- package/src/renderers/webgl/WebGLUtils.js +27 -20
- package/src/textures/CompressedCubeTexture.js +19 -0
- package/src/textures/Texture.js +2 -2
- package/src/utils.js +9 -1
- package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +0 -30
- package/examples/jsm/renderers/common/RenderTarget.js +0 -15
- package/examples/jsm/renderers/common/nodes/NodeRender.js +0 -302
- /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/SlotNode.js +0 -0
- /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodes.js +0 -0
|
@@ -32,7 +32,7 @@ import { CopyShader } from '../shaders/CopyShader.js';
|
|
|
32
32
|
|
|
33
33
|
class SSAOPass extends Pass {
|
|
34
34
|
|
|
35
|
-
constructor( scene, camera, width, height ) {
|
|
35
|
+
constructor( scene, camera, width, height, kernelSize = 32 ) {
|
|
36
36
|
|
|
37
37
|
super();
|
|
38
38
|
|
|
@@ -45,7 +45,6 @@ class SSAOPass extends Pass {
|
|
|
45
45
|
this.scene = scene;
|
|
46
46
|
|
|
47
47
|
this.kernelRadius = 8;
|
|
48
|
-
this.kernelSize = 32;
|
|
49
48
|
this.kernel = [];
|
|
50
49
|
this.noiseTexture = null;
|
|
51
50
|
this.output = 0;
|
|
@@ -57,17 +56,15 @@ class SSAOPass extends Pass {
|
|
|
57
56
|
|
|
58
57
|
//
|
|
59
58
|
|
|
60
|
-
this.generateSampleKernel();
|
|
59
|
+
this.generateSampleKernel( kernelSize );
|
|
61
60
|
this.generateRandomKernelRotations();
|
|
62
61
|
|
|
63
|
-
//
|
|
62
|
+
// depth texture
|
|
64
63
|
|
|
65
64
|
const depthTexture = new DepthTexture();
|
|
66
65
|
depthTexture.format = DepthStencilFormat;
|
|
67
66
|
depthTexture.type = UnsignedInt248Type;
|
|
68
67
|
|
|
69
|
-
this.beautyRenderTarget = new WebGLRenderTarget( this.width, this.height, { type: HalfFloatType } );
|
|
70
|
-
|
|
71
68
|
// normal render target with depth buffer
|
|
72
69
|
|
|
73
70
|
this.normalRenderTarget = new WebGLRenderTarget( this.width, this.height, {
|
|
@@ -93,7 +90,8 @@ class SSAOPass extends Pass {
|
|
|
93
90
|
blending: NoBlending
|
|
94
91
|
} );
|
|
95
92
|
|
|
96
|
-
this.ssaoMaterial.
|
|
93
|
+
this.ssaoMaterial.defines[ 'KERNEL_SIZE' ] = kernelSize;
|
|
94
|
+
|
|
97
95
|
this.ssaoMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;
|
|
98
96
|
this.ssaoMaterial.uniforms[ 'tDepth' ].value = this.normalRenderTarget.depthTexture;
|
|
99
97
|
this.ssaoMaterial.uniforms[ 'tNoise' ].value = this.noiseTexture;
|
|
@@ -160,7 +158,6 @@ class SSAOPass extends Pass {
|
|
|
160
158
|
|
|
161
159
|
// dispose render targets
|
|
162
160
|
|
|
163
|
-
this.beautyRenderTarget.dispose();
|
|
164
161
|
this.normalRenderTarget.dispose();
|
|
165
162
|
this.ssaoRenderTarget.dispose();
|
|
166
163
|
this.blurRenderTarget.dispose();
|
|
@@ -178,16 +175,10 @@ class SSAOPass extends Pass {
|
|
|
178
175
|
|
|
179
176
|
}
|
|
180
177
|
|
|
181
|
-
render( renderer, writeBuffer /*,
|
|
178
|
+
render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
|
|
182
179
|
|
|
183
180
|
if ( renderer.capabilities.isWebGL2 === false ) this.noiseTexture.format = LuminanceFormat;
|
|
184
181
|
|
|
185
|
-
// render beauty
|
|
186
|
-
|
|
187
|
-
renderer.setRenderTarget( this.beautyRenderTarget );
|
|
188
|
-
renderer.clear();
|
|
189
|
-
renderer.render( this.scene, this.camera );
|
|
190
|
-
|
|
191
182
|
// render normals and depth (honor only meshes, points and lines do not contribute to SSAO)
|
|
192
183
|
|
|
193
184
|
this.overrideVisibility();
|
|
@@ -225,14 +216,6 @@ class SSAOPass extends Pass {
|
|
|
225
216
|
|
|
226
217
|
break;
|
|
227
218
|
|
|
228
|
-
case SSAOPass.OUTPUT.Beauty:
|
|
229
|
-
|
|
230
|
-
this.copyMaterial.uniforms[ 'tDiffuse' ].value = this.beautyRenderTarget.texture;
|
|
231
|
-
this.copyMaterial.blending = NoBlending;
|
|
232
|
-
this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
|
|
233
|
-
|
|
234
|
-
break;
|
|
235
|
-
|
|
236
219
|
case SSAOPass.OUTPUT.Depth:
|
|
237
220
|
|
|
238
221
|
this.renderPass( renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer );
|
|
@@ -249,7 +232,7 @@ class SSAOPass extends Pass {
|
|
|
249
232
|
|
|
250
233
|
case SSAOPass.OUTPUT.Default:
|
|
251
234
|
|
|
252
|
-
this.copyMaterial.uniforms[ 'tDiffuse' ].value =
|
|
235
|
+
this.copyMaterial.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
|
|
253
236
|
this.copyMaterial.blending = NoBlending;
|
|
254
237
|
this.renderPass( renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer );
|
|
255
238
|
|
|
@@ -332,7 +315,6 @@ class SSAOPass extends Pass {
|
|
|
332
315
|
this.width = width;
|
|
333
316
|
this.height = height;
|
|
334
317
|
|
|
335
|
-
this.beautyRenderTarget.setSize( width, height );
|
|
336
318
|
this.ssaoRenderTarget.setSize( width, height );
|
|
337
319
|
this.normalRenderTarget.setSize( width, height );
|
|
338
320
|
this.blurRenderTarget.setSize( width, height );
|
|
@@ -345,9 +327,8 @@ class SSAOPass extends Pass {
|
|
|
345
327
|
|
|
346
328
|
}
|
|
347
329
|
|
|
348
|
-
generateSampleKernel() {
|
|
330
|
+
generateSampleKernel( kernelSize ) {
|
|
349
331
|
|
|
350
|
-
const kernelSize = this.kernelSize;
|
|
351
332
|
const kernel = this.kernel;
|
|
352
333
|
|
|
353
334
|
for ( let i = 0; i < kernelSize; i ++ ) {
|
|
@@ -432,9 +413,8 @@ SSAOPass.OUTPUT = {
|
|
|
432
413
|
'Default': 0,
|
|
433
414
|
'SSAO': 1,
|
|
434
415
|
'Blur': 2,
|
|
435
|
-
'
|
|
436
|
-
'
|
|
437
|
-
'Normal': 5
|
|
416
|
+
'Depth': 3,
|
|
417
|
+
'Normal': 4
|
|
438
418
|
};
|
|
439
419
|
|
|
440
420
|
export { SSAOPass };
|
|
@@ -94,7 +94,7 @@ class UnrealBloomPass extends Pass {
|
|
|
94
94
|
|
|
95
95
|
this.separableBlurMaterials.push( this.getSeperableBlurMaterial( kernelSizeArray[ i ] ) );
|
|
96
96
|
|
|
97
|
-
this.separableBlurMaterials[ i ].uniforms[ '
|
|
97
|
+
this.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );
|
|
98
98
|
|
|
99
99
|
resx = Math.round( resx / 2 );
|
|
100
100
|
|
|
@@ -192,7 +192,7 @@ class UnrealBloomPass extends Pass {
|
|
|
192
192
|
this.renderTargetsHorizontal[ i ].setSize( resx, resy );
|
|
193
193
|
this.renderTargetsVertical[ i ].setSize( resx, resy );
|
|
194
194
|
|
|
195
|
-
this.separableBlurMaterials[ i ].uniforms[ '
|
|
195
|
+
this.separableBlurMaterials[ i ].uniforms[ 'invSize' ].value = new Vector2( 1 / resx, 1 / resy );
|
|
196
196
|
|
|
197
197
|
resx = Math.round( resx / 2 );
|
|
198
198
|
resy = Math.round( resy / 2 );
|
|
@@ -298,17 +298,25 @@ class UnrealBloomPass extends Pass {
|
|
|
298
298
|
|
|
299
299
|
getSeperableBlurMaterial( kernelRadius ) {
|
|
300
300
|
|
|
301
|
+
const coefficients = [];
|
|
302
|
+
|
|
303
|
+
for ( let i = 0; i < kernelRadius; i ++ ) {
|
|
304
|
+
|
|
305
|
+
coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( kernelRadius * kernelRadius ) ) / kernelRadius );
|
|
306
|
+
|
|
307
|
+
}
|
|
308
|
+
|
|
301
309
|
return new ShaderMaterial( {
|
|
302
310
|
|
|
303
311
|
defines: {
|
|
304
|
-
'KERNEL_RADIUS': kernelRadius
|
|
305
|
-
'SIGMA': kernelRadius
|
|
312
|
+
'KERNEL_RADIUS': kernelRadius
|
|
306
313
|
},
|
|
307
314
|
|
|
308
315
|
uniforms: {
|
|
309
316
|
'colorTexture': { value: null },
|
|
310
|
-
'
|
|
311
|
-
'direction': { value: new Vector2( 0.5, 0.5 ) }
|
|
317
|
+
'invSize': { value: new Vector2( 0.5, 0.5 ) }, // inverse texture size
|
|
318
|
+
'direction': { value: new Vector2( 0.5, 0.5 ) },
|
|
319
|
+
'gaussianCoefficients': { value: coefficients } // precomputed Gaussian coefficients
|
|
312
320
|
},
|
|
313
321
|
|
|
314
322
|
vertexShader:
|
|
@@ -322,23 +330,19 @@ class UnrealBloomPass extends Pass {
|
|
|
322
330
|
`#include <common>
|
|
323
331
|
varying vec2 vUv;
|
|
324
332
|
uniform sampler2D colorTexture;
|
|
325
|
-
uniform vec2
|
|
333
|
+
uniform vec2 invSize;
|
|
326
334
|
uniform vec2 direction;
|
|
335
|
+
uniform float gaussianCoefficients[KERNEL_RADIUS];
|
|
327
336
|
|
|
328
|
-
float gaussianPdf(in float x, in float sigma) {
|
|
329
|
-
return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;
|
|
330
|
-
}
|
|
331
337
|
void main() {
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
float weightSum = gaussianPdf(0.0, fSigma);
|
|
335
|
-
vec3 diffuseSum = texture2D( colorTexture, vUv).rgb * weightSum;
|
|
338
|
+
float weightSum = gaussianCoefficients[0];
|
|
339
|
+
vec3 diffuseSum = texture2D( colorTexture, vUv ).rgb * weightSum;
|
|
336
340
|
for( int i = 1; i < KERNEL_RADIUS; i ++ ) {
|
|
337
341
|
float x = float(i);
|
|
338
|
-
float w =
|
|
342
|
+
float w = gaussianCoefficients[i];
|
|
339
343
|
vec2 uvOffset = direction * invSize * x;
|
|
340
|
-
vec3 sample1 = texture2D( colorTexture, vUv + uvOffset).rgb;
|
|
341
|
-
vec3 sample2 = texture2D( colorTexture, vUv - uvOffset).rgb;
|
|
344
|
+
vec3 sample1 = texture2D( colorTexture, vUv + uvOffset ).rgb;
|
|
345
|
+
vec3 sample2 = texture2D( colorTexture, vUv - uvOffset ).rgb;
|
|
342
346
|
diffuseSum += (sample1 + sample2) * w;
|
|
343
347
|
weightSum += 2.0 * w;
|
|
344
348
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
let vector2 = null;
|
|
2
2
|
let vector4 = null;
|
|
3
3
|
|
|
4
|
-
import { Vector2, Vector4 } from 'three';
|
|
4
|
+
import { Vector2, Vector4, REVISION, createCanvasElement } from 'three';
|
|
5
5
|
|
|
6
6
|
class Backend {
|
|
7
7
|
|
|
@@ -118,7 +118,12 @@ class Backend {
|
|
|
118
118
|
|
|
119
119
|
if ( domElement === null ) {
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
domElement = ( this.parameters.canvas !== undefined ) ? this.parameters.canvas : createCanvasElement();
|
|
122
|
+
|
|
123
|
+
// OffscreenCanvas does not have setAttribute, see #22811
|
|
124
|
+
if ( 'setAttribute' in domElement ) domElement.setAttribute( 'data-engine', `three.js r${REVISION}` );
|
|
125
|
+
|
|
126
|
+
this.domElement = domElement;
|
|
122
127
|
|
|
123
128
|
}
|
|
124
129
|
|
|
@@ -126,16 +131,14 @@ class Backend {
|
|
|
126
131
|
|
|
127
132
|
}
|
|
128
133
|
|
|
129
|
-
|
|
134
|
+
// resource properties
|
|
135
|
+
|
|
136
|
+
set( object, value ) {
|
|
130
137
|
|
|
131
|
-
|
|
132
|
-
canvas.style.display = 'block';
|
|
133
|
-
return canvas;
|
|
138
|
+
this.data.set( object, value );
|
|
134
139
|
|
|
135
140
|
}
|
|
136
141
|
|
|
137
|
-
// resource properties
|
|
138
|
-
|
|
139
142
|
get( object ) {
|
|
140
143
|
|
|
141
144
|
let map = this.data.get( object );
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import { Color, Mesh, SphereGeometry, BackSide } from 'three';
|
|
3
|
-
import { context,
|
|
3
|
+
import { vec4, context, normalWorld, backgroundBlurriness, backgroundIntensity, NodeMaterial, modelViewProjection } from '../../nodes/Nodes.js';
|
|
4
4
|
|
|
5
5
|
let _clearAlpha;
|
|
6
6
|
const _clearColor = new Color();
|
|
@@ -14,15 +14,15 @@ class Background extends DataMap {
|
|
|
14
14
|
this.renderer = renderer;
|
|
15
15
|
this.nodes = nodes;
|
|
16
16
|
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
17
|
+
this.backgroundMesh = null;
|
|
18
|
+
this.backgroundMeshNode = null;
|
|
19
19
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
update( scene, renderList, renderContext ) {
|
|
23
23
|
|
|
24
24
|
const renderer = this.renderer;
|
|
25
|
-
const background =
|
|
25
|
+
const background = this.nodes.getBackgroundNode( scene ) || scene.background;
|
|
26
26
|
|
|
27
27
|
let forceClear = false;
|
|
28
28
|
|
|
@@ -49,31 +49,33 @@ class Background extends DataMap {
|
|
|
49
49
|
_clearColor.copy( renderer._clearColor );
|
|
50
50
|
_clearAlpha = renderer._clearAlpha;
|
|
51
51
|
|
|
52
|
-
let
|
|
52
|
+
let backgroundMesh = this.backgroundMesh;
|
|
53
53
|
|
|
54
|
-
if (
|
|
54
|
+
if ( backgroundMesh === null ) {
|
|
55
55
|
|
|
56
|
-
this.
|
|
56
|
+
this.backgroundMeshNode = context( backgroundNode, {
|
|
57
57
|
// @TODO: Add Texture2D support using node context
|
|
58
|
-
getUVNode: () =>
|
|
58
|
+
getUVNode: () => normalWorld,
|
|
59
59
|
getSamplerLevelNode: () => backgroundBlurriness
|
|
60
|
-
} );
|
|
60
|
+
} ).mul( backgroundIntensity );
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
let viewProj = modelViewProjection();
|
|
63
|
+
viewProj = vec4( viewProj.x, viewProj.y, viewProj.w, viewProj.w );
|
|
64
|
+
|
|
65
|
+
const nodeMaterial = new NodeMaterial();
|
|
66
|
+
nodeMaterial.outputNode = this.backgroundMeshNode;
|
|
64
67
|
nodeMaterial.side = BackSide;
|
|
65
68
|
nodeMaterial.depthTest = false;
|
|
66
69
|
nodeMaterial.depthWrite = false;
|
|
67
70
|
nodeMaterial.fog = false;
|
|
71
|
+
nodeMaterial.vertexNode = viewProj;
|
|
68
72
|
|
|
69
|
-
this.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
boxMesh.onBeforeRender = function ( renderer, scene, camera ) {
|
|
73
|
+
this.backgroundMesh = backgroundMesh = new Mesh( new SphereGeometry( 1, 32, 32 ), nodeMaterial );
|
|
74
|
+
backgroundMesh.frustumCulled = false;
|
|
73
75
|
|
|
74
|
-
|
|
76
|
+
backgroundMesh.onBeforeRender = function ( renderer, scene, camera ) {
|
|
75
77
|
|
|
76
|
-
this.matrixWorld.
|
|
78
|
+
this.matrixWorld.copyPosition( camera.matrixWorld );
|
|
77
79
|
|
|
78
80
|
};
|
|
79
81
|
|
|
@@ -83,15 +85,15 @@ class Background extends DataMap {
|
|
|
83
85
|
|
|
84
86
|
if ( sceneData.backgroundCacheKey !== backgroundCacheKey ) {
|
|
85
87
|
|
|
86
|
-
this.
|
|
88
|
+
this.backgroundMeshNode.node = backgroundNode;
|
|
87
89
|
|
|
88
|
-
|
|
90
|
+
backgroundMesh.material.needsUpdate = true;
|
|
89
91
|
|
|
90
92
|
sceneData.backgroundCacheKey = backgroundCacheKey;
|
|
91
93
|
|
|
92
94
|
}
|
|
93
95
|
|
|
94
|
-
renderList.unshift(
|
|
96
|
+
renderList.unshift( backgroundMesh, backgroundMesh.geometry, backgroundMesh.material, 0, 0, null );
|
|
95
97
|
|
|
96
98
|
} else {
|
|
97
99
|
|
|
@@ -34,9 +34,7 @@ class Bindings extends DataMap {
|
|
|
34
34
|
|
|
35
35
|
this._init( bindings );
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.backend.createBindings( bindings, pipeline );
|
|
37
|
+
this.backend.createBindings( bindings );
|
|
40
38
|
|
|
41
39
|
}
|
|
42
40
|
|
|
@@ -58,9 +56,7 @@ class Bindings extends DataMap {
|
|
|
58
56
|
|
|
59
57
|
this._init( bindings );
|
|
60
58
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
this.backend.createBindings( bindings, pipeline );
|
|
59
|
+
this.backend.createBindings( bindings );
|
|
64
60
|
|
|
65
61
|
}
|
|
66
62
|
|
|
@@ -84,9 +80,11 @@ class Bindings extends DataMap {
|
|
|
84
80
|
|
|
85
81
|
for ( const binding of bindings ) {
|
|
86
82
|
|
|
87
|
-
if ( binding.
|
|
83
|
+
if ( binding.isSampledTexture ) {
|
|
84
|
+
|
|
85
|
+
const store = binding.store === true;
|
|
88
86
|
|
|
89
|
-
this.textures.updateTexture( binding.texture );
|
|
87
|
+
this.textures.updateTexture( binding.texture, { store } );
|
|
90
88
|
|
|
91
89
|
} else if ( binding.isStorageBuffer ) {
|
|
92
90
|
|
|
@@ -113,10 +111,9 @@ class Bindings extends DataMap {
|
|
|
113
111
|
|
|
114
112
|
for ( const binding of bindings ) {
|
|
115
113
|
|
|
116
|
-
const isShared = binding.isShared;
|
|
117
114
|
const isUpdated = updateMap.get( binding ) === frame;
|
|
118
115
|
|
|
119
|
-
if (
|
|
116
|
+
if ( isUpdated ) continue;
|
|
120
117
|
|
|
121
118
|
if ( binding.isUniformBuffer ) {
|
|
122
119
|
|