super-three 0.162.0 → 0.164.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 +847 -1226
- package/build/three.module.js +846 -1225
- package/build/three.module.min.js +2 -2
- package/examples/jsm/animation/CCDIKSolver.js +4 -2
- package/examples/jsm/controls/TransformControls.js +3 -3
- package/examples/jsm/exporters/GLTFExporter.js +66 -5
- package/examples/jsm/exporters/USDZExporter.js +22 -1
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- package/examples/jsm/libs/draco/README.md +2 -2
- package/examples/jsm/libs/fflate.module.js +694 -496
- package/examples/jsm/lines/LineMaterial.js +0 -2
- package/examples/jsm/loaders/3MFLoader.js +2 -0
- package/examples/jsm/loaders/EXRLoader.js +351 -97
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +59 -0
- package/examples/jsm/loaders/KTX2Loader.js +3 -10
- package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
- package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
- package/examples/jsm/loaders/LUTImageLoader.js +0 -14
- package/examples/jsm/loaders/RGBMLoader.js +16 -0
- package/examples/jsm/loaders/VRMLLoader.js +1 -1
- package/examples/jsm/loaders/lwo/IFFParser.js +8 -5
- package/examples/jsm/materials/MeshGouraudMaterial.js +7 -1
- package/examples/jsm/math/Octree.js +26 -20
- package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
- package/examples/jsm/nodes/Nodes.js +10 -4
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +16 -1
- package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
- package/examples/jsm/nodes/accessors/ClippingNode.js +3 -2
- package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
- package/examples/jsm/nodes/accessors/MaterialNode.js +107 -3
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/MorphNode.js +13 -3
- package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +9 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +51 -10
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionNode.js +0 -8
- package/examples/jsm/nodes/core/Node.js +63 -4
- package/examples/jsm/nodes/core/NodeBuilder.js +26 -25
- package/examples/jsm/nodes/core/NodeFrame.js +10 -10
- package/examples/jsm/nodes/core/NodeUtils.js +2 -2
- package/examples/jsm/nodes/core/OutputStructNode.js +2 -1
- package/examples/jsm/nodes/core/PropertyNode.js +10 -0
- package/examples/jsm/nodes/core/UniformNode.js +20 -0
- package/examples/jsm/nodes/display/BumpMapNode.js +7 -26
- package/examples/jsm/nodes/display/FrontFacingNode.js +13 -0
- package/examples/jsm/nodes/display/PassNode.js +17 -1
- package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
- package/examples/jsm/nodes/display/ViewportDepthNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +4 -2
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
- package/examples/jsm/nodes/display/ViewportTextureNode.js +4 -1
- package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
- package/examples/jsm/nodes/fog/FogNode.js +13 -3
- package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +26 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -3
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
- package/examples/jsm/nodes/functions/PhongLightingModel.js +1 -1
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +164 -10
- package/examples/jsm/nodes/functions/ShadowMaskModel.js +31 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +19 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +22 -70
- package/examples/jsm/nodes/lighting/IrradianceNode.js +24 -0
- package/examples/jsm/nodes/lighting/LightsNode.js +11 -1
- package/examples/jsm/nodes/lighting/PointLightNode.js +2 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +2 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +10 -6
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +76 -5
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +11 -4
- package/examples/jsm/nodes/materials/NodeMaterial.js +55 -43
- package/examples/jsm/nodes/materials/ShadowNodeMaterial.js +34 -0
- package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
- package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +3 -9
- package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
- package/examples/jsm/objects/QuadMesh.js +7 -23
- package/examples/jsm/physics/JoltPhysics.js +281 -0
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/GlitchPass.js +0 -3
- package/examples/jsm/postprocessing/LUTPass.js +5 -71
- package/examples/jsm/postprocessing/RenderTransitionPass.js +193 -0
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SSAOPass.js +0 -3
- package/examples/jsm/renderers/common/Animation.js +3 -0
- package/examples/jsm/renderers/common/Background.js +8 -8
- package/examples/jsm/renderers/common/ClippingContext.js +1 -1
- package/examples/jsm/renderers/common/Info.js +11 -19
- package/examples/jsm/renderers/common/PostProcessing.js +12 -4
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderList.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +47 -5
- package/examples/jsm/renderers/common/RenderObjects.js +1 -1
- package/examples/jsm/renderers/common/Renderer.js +153 -21
- package/examples/jsm/renderers/common/Textures.js +1 -1
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +773 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +34 -63
- package/examples/jsm/renderers/webgl/WebGLBackend.js +146 -36
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +145 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +9 -3
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +1 -1
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +64 -7
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +6 -23
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +77 -60
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +29 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
- package/examples/jsm/utils/GPUStatsPanel.js +10 -45
- package/examples/jsm/utils/SceneUtils.js +60 -1
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -2
- package/package.json +1 -1
- package/src/Three.js +0 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/constants.js +3 -3
- package/src/core/Object3D.js +10 -7
- package/src/core/RenderTarget.js +8 -0
- package/src/extras/PMREMGenerator.js +21 -11
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshPhysicalMaterial.js +20 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/math/Spherical.js +4 -5
- package/src/objects/BatchedMesh.js +27 -3
- package/src/objects/InstancedMesh.js +10 -0
- package/src/objects/Line.js +66 -43
- package/src/renderers/WebGLRenderer.js +130 -158
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +17 -9
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +2 -1
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +6 -33
- package/src/renderers/webgl/WebGLBackground.js +18 -3
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +35 -21
- package/src/renderers/webgl/WebGLCapabilities.js +35 -13
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +4 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +35 -21
- package/src/renderers/webgl/WebGLLights.js +6 -32
- package/src/renderers/webgl/WebGLMaterials.js +8 -3
- package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
- package/src/renderers/webgl/WebGLProgram.js +21 -52
- package/src/renderers/webgl/WebGLPrograms.js +24 -31
- package/src/renderers/webgl/WebGLRenderStates.js +13 -7
- package/src/renderers/webgl/WebGLShadowMap.js +25 -25
- package/src/renderers/webgl/WebGLState.js +15 -59
- package/src/renderers/webgl/WebGLTextures.js +138 -292
- package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
- package/src/renderers/webgl/WebGLUtils.js +9 -78
- package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
- package/src/renderers/webxr/WebXRManager.js +4 -6
- package/src/scenes/Scene.js +7 -1
- package/src/textures/Texture.js +11 -1
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -320
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -794
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
- package/src/renderers/WebGL1Renderer.js +0 -7
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
|
@@ -4,12 +4,7 @@ const LUTShader = {
|
|
|
4
4
|
|
|
5
5
|
name: 'LUTShader',
|
|
6
6
|
|
|
7
|
-
defines: {
|
|
8
|
-
USE_3DTEXTURE: 1,
|
|
9
|
-
},
|
|
10
|
-
|
|
11
7
|
uniforms: {
|
|
12
|
-
lut3d: { value: null },
|
|
13
8
|
|
|
14
9
|
lut: { value: null },
|
|
15
10
|
lutSize: { value: 0 },
|
|
@@ -34,45 +29,7 @@ const LUTShader = {
|
|
|
34
29
|
fragmentShader: /* glsl */`
|
|
35
30
|
|
|
36
31
|
uniform float lutSize;
|
|
37
|
-
|
|
38
|
-
precision highp sampler3D;
|
|
39
|
-
uniform sampler3D lut3d;
|
|
40
|
-
#else
|
|
41
|
-
uniform sampler2D lut;
|
|
42
|
-
|
|
43
|
-
vec3 lutLookup( sampler2D tex, float size, vec3 rgb ) {
|
|
44
|
-
|
|
45
|
-
float sliceHeight = 1.0 / size;
|
|
46
|
-
float yPixelHeight = 1.0 / ( size * size );
|
|
47
|
-
|
|
48
|
-
// Get the slices on either side of the sample
|
|
49
|
-
float slice = rgb.b * size;
|
|
50
|
-
float interp = fract( slice );
|
|
51
|
-
float slice0 = slice - interp;
|
|
52
|
-
float centeredInterp = interp - 0.5;
|
|
53
|
-
|
|
54
|
-
float slice1 = slice0 + sign( centeredInterp );
|
|
55
|
-
|
|
56
|
-
// Pull y sample in by half a pixel in each direction to avoid color
|
|
57
|
-
// bleeding from adjacent slices.
|
|
58
|
-
float greenOffset = clamp( rgb.g * sliceHeight, yPixelHeight * 0.5, sliceHeight - yPixelHeight * 0.5 );
|
|
59
|
-
|
|
60
|
-
vec2 uv0 = vec2(
|
|
61
|
-
rgb.r,
|
|
62
|
-
slice0 * sliceHeight + greenOffset
|
|
63
|
-
);
|
|
64
|
-
vec2 uv1 = vec2(
|
|
65
|
-
rgb.r,
|
|
66
|
-
slice1 * sliceHeight + greenOffset
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
vec3 sample0 = texture2D( tex, uv0 ).rgb;
|
|
70
|
-
vec3 sample1 = texture2D( tex, uv1 ).rgb;
|
|
71
|
-
|
|
72
|
-
return mix( sample0, sample1, abs( centeredInterp ) );
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
#endif
|
|
32
|
+
uniform sampler3D lut;
|
|
76
33
|
|
|
77
34
|
varying vec2 vUv;
|
|
78
35
|
uniform float intensity;
|
|
@@ -88,15 +45,8 @@ const LUTShader = {
|
|
|
88
45
|
float halfPixelWidth = 0.5 / lutSize;
|
|
89
46
|
vec3 uvw = vec3( halfPixelWidth ) + val.rgb * ( 1.0 - pixelWidth );
|
|
90
47
|
|
|
91
|
-
#if USE_3DTEXTURE
|
|
92
48
|
|
|
93
|
-
lutVal = vec4( texture(
|
|
94
|
-
|
|
95
|
-
#else
|
|
96
|
-
|
|
97
|
-
lutVal = vec4( lutLookup( lut, lutSize, uvw ), val.a );
|
|
98
|
-
|
|
99
|
-
#endif
|
|
49
|
+
lutVal = vec4( texture( lut, uvw ).rgb, val.a );
|
|
100
50
|
|
|
101
51
|
gl_FragColor = vec4( mix( val, lutVal, intensity ) );
|
|
102
52
|
|
|
@@ -111,31 +61,15 @@ class LUTPass extends ShaderPass {
|
|
|
111
61
|
set lut( v ) {
|
|
112
62
|
|
|
113
63
|
const material = this.material;
|
|
64
|
+
|
|
114
65
|
if ( v !== this.lut ) {
|
|
115
66
|
|
|
116
|
-
material.uniforms.lut3d.value = null;
|
|
117
67
|
material.uniforms.lut.value = null;
|
|
118
68
|
|
|
119
69
|
if ( v ) {
|
|
120
70
|
|
|
121
|
-
const is3dTextureDefine = v.isData3DTexture ? 1 : 0;
|
|
122
|
-
if ( is3dTextureDefine !== material.defines.USE_3DTEXTURE ) {
|
|
123
|
-
|
|
124
|
-
material.defines.USE_3DTEXTURE = is3dTextureDefine;
|
|
125
|
-
material.needsUpdate = true;
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
71
|
material.uniforms.lutSize.value = v.image.width;
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
material.uniforms.lut3d.value = v;
|
|
133
|
-
|
|
134
|
-
} else {
|
|
135
|
-
|
|
136
|
-
material.uniforms.lut.value = v;
|
|
137
|
-
|
|
138
|
-
}
|
|
72
|
+
material.uniforms.lut.value = v;
|
|
139
73
|
|
|
140
74
|
}
|
|
141
75
|
|
|
@@ -145,7 +79,7 @@ class LUTPass extends ShaderPass {
|
|
|
145
79
|
|
|
146
80
|
get lut() {
|
|
147
81
|
|
|
148
|
-
return this.material.uniforms.lut.value
|
|
82
|
+
return this.material.uniforms.lut.value;
|
|
149
83
|
|
|
150
84
|
}
|
|
151
85
|
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import {
|
|
2
|
+
HalfFloatType,
|
|
3
|
+
ShaderMaterial,
|
|
4
|
+
WebGLRenderTarget
|
|
5
|
+
} from 'three';
|
|
6
|
+
import { FullScreenQuad, Pass } from './Pass.js';
|
|
7
|
+
|
|
8
|
+
class RenderTransitionPass extends Pass {
|
|
9
|
+
|
|
10
|
+
constructor( sceneA, cameraA, sceneB, cameraB ) {
|
|
11
|
+
|
|
12
|
+
super();
|
|
13
|
+
|
|
14
|
+
this.material = this.createMaterial();
|
|
15
|
+
this.fsQuad = new FullScreenQuad( this.material );
|
|
16
|
+
|
|
17
|
+
this.sceneA = sceneA;
|
|
18
|
+
this.cameraA = cameraA;
|
|
19
|
+
this.sceneB = sceneB;
|
|
20
|
+
this.cameraB = cameraB;
|
|
21
|
+
|
|
22
|
+
this.renderTargetA = new WebGLRenderTarget();
|
|
23
|
+
this.renderTargetA.texture.type = HalfFloatType;
|
|
24
|
+
this.renderTargetB = new WebGLRenderTarget();
|
|
25
|
+
this.renderTargetB.texture.type = HalfFloatType;
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
setTransition( value ) {
|
|
30
|
+
|
|
31
|
+
this.material.uniforms.mixRatio.value = value;
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
useTexture( value ) {
|
|
36
|
+
|
|
37
|
+
this.material.uniforms.useTexture.value = value ? 1 : 0;
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
setTexture( value ) {
|
|
42
|
+
|
|
43
|
+
this.material.uniforms.tMixTexture.value = value;
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
setTextureThreshold( value ) {
|
|
48
|
+
|
|
49
|
+
this.material.uniforms.threshold.value = value;
|
|
50
|
+
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
setSize( width, height ) {
|
|
54
|
+
|
|
55
|
+
this.renderTargetA.setSize( width, height );
|
|
56
|
+
this.renderTargetB.setSize( width, height );
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
render( renderer, writeBuffer ) {
|
|
61
|
+
|
|
62
|
+
const uniforms = this.fsQuad.material.uniforms;
|
|
63
|
+
const transition = uniforms.mixRatio.value;
|
|
64
|
+
|
|
65
|
+
// Prevent render both scenes when it's not necessary
|
|
66
|
+
|
|
67
|
+
if ( transition === 0 ) {
|
|
68
|
+
|
|
69
|
+
renderer.setRenderTarget( writeBuffer );
|
|
70
|
+
if ( this.clear ) renderer.clear();
|
|
71
|
+
renderer.render( this.sceneB, this.cameraB );
|
|
72
|
+
|
|
73
|
+
} else if ( transition === 1 ) {
|
|
74
|
+
|
|
75
|
+
renderer.setRenderTarget( writeBuffer );
|
|
76
|
+
if ( this.clear ) renderer.clear();
|
|
77
|
+
renderer.render( this.sceneA, this.cameraA );
|
|
78
|
+
|
|
79
|
+
} else {
|
|
80
|
+
|
|
81
|
+
// When 0 < transition < 1 render transition between two scenes
|
|
82
|
+
|
|
83
|
+
renderer.setRenderTarget( this.renderTargetA );
|
|
84
|
+
renderer.render( this.sceneA, this.cameraA );
|
|
85
|
+
renderer.setRenderTarget( this.renderTargetB );
|
|
86
|
+
renderer.render( this.sceneB, this.cameraB );
|
|
87
|
+
|
|
88
|
+
uniforms.tDiffuse1.value = this.renderTargetA.texture;
|
|
89
|
+
uniforms.tDiffuse2.value = this.renderTargetB.texture;
|
|
90
|
+
|
|
91
|
+
if ( this.renderToScreen ) {
|
|
92
|
+
|
|
93
|
+
renderer.setRenderTarget( null );
|
|
94
|
+
renderer.clear();
|
|
95
|
+
|
|
96
|
+
} else {
|
|
97
|
+
|
|
98
|
+
renderer.setRenderTarget( writeBuffer );
|
|
99
|
+
if ( this.clear ) renderer.clear();
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
this.fsQuad.render( renderer );
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
dispose() {
|
|
110
|
+
|
|
111
|
+
this.renderTargetA.dispose();
|
|
112
|
+
this.renderTargetB.dispose();
|
|
113
|
+
this.material.dispose();
|
|
114
|
+
this.fsQuad.dispose();
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
createMaterial() {
|
|
119
|
+
|
|
120
|
+
return new ShaderMaterial( {
|
|
121
|
+
uniforms: {
|
|
122
|
+
tDiffuse1: {
|
|
123
|
+
value: null
|
|
124
|
+
},
|
|
125
|
+
tDiffuse2: {
|
|
126
|
+
value: null
|
|
127
|
+
},
|
|
128
|
+
mixRatio: {
|
|
129
|
+
value: 0.0
|
|
130
|
+
},
|
|
131
|
+
threshold: {
|
|
132
|
+
value: 0.1
|
|
133
|
+
},
|
|
134
|
+
useTexture: {
|
|
135
|
+
value: 1
|
|
136
|
+
},
|
|
137
|
+
tMixTexture: {
|
|
138
|
+
value: null
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
vertexShader: /* glsl */`
|
|
142
|
+
varying vec2 vUv;
|
|
143
|
+
|
|
144
|
+
void main() {
|
|
145
|
+
|
|
146
|
+
vUv = vec2( uv.x, uv.y );
|
|
147
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
148
|
+
|
|
149
|
+
}
|
|
150
|
+
`,
|
|
151
|
+
fragmentShader: /* glsl */`
|
|
152
|
+
uniform float mixRatio;
|
|
153
|
+
|
|
154
|
+
uniform sampler2D tDiffuse1;
|
|
155
|
+
uniform sampler2D tDiffuse2;
|
|
156
|
+
uniform sampler2D tMixTexture;
|
|
157
|
+
|
|
158
|
+
uniform int useTexture;
|
|
159
|
+
uniform float threshold;
|
|
160
|
+
|
|
161
|
+
varying vec2 vUv;
|
|
162
|
+
|
|
163
|
+
void main() {
|
|
164
|
+
|
|
165
|
+
vec4 texel1 = texture2D( tDiffuse1, vUv );
|
|
166
|
+
vec4 texel2 = texture2D( tDiffuse2, vUv );
|
|
167
|
+
|
|
168
|
+
if (useTexture == 1) {
|
|
169
|
+
|
|
170
|
+
vec4 transitionTexel = texture2D( tMixTexture, vUv );
|
|
171
|
+
float r = mixRatio * ( 1.0 + threshold * 2.0 ) - threshold;
|
|
172
|
+
float mixf = clamp( ( transitionTexel.r - r ) * ( 1.0 / threshold ), 0.0, 1.0 );
|
|
173
|
+
|
|
174
|
+
gl_FragColor = mix( texel1, texel2, mixf );
|
|
175
|
+
|
|
176
|
+
} else {
|
|
177
|
+
|
|
178
|
+
gl_FragColor = mix( texel2, texel1, mixRatio );
|
|
179
|
+
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
#include <tonemapping_fragment>
|
|
183
|
+
#include <colorspace_fragment>
|
|
184
|
+
|
|
185
|
+
}
|
|
186
|
+
`
|
|
187
|
+
} );
|
|
188
|
+
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export { RenderTransitionPass };
|
|
@@ -81,7 +81,6 @@ class SAOPass extends Pass {
|
|
|
81
81
|
vertexShader: SAOShader.vertexShader,
|
|
82
82
|
uniforms: UniformsUtils.clone( SAOShader.uniforms )
|
|
83
83
|
} );
|
|
84
|
-
this.saoMaterial.extensions.derivatives = true;
|
|
85
84
|
this.saoMaterial.defines[ 'PERSPECTIVE_CAMERA' ] = this.camera.isPerspectiveCamera ? 1 : 0;
|
|
86
85
|
this.saoMaterial.uniforms[ 'tDepth' ].value = depthTexture;
|
|
87
86
|
this.saoMaterial.uniforms[ 'tNormal' ].value = this.normalRenderTarget.texture;
|
|
@@ -13,7 +13,6 @@ import {
|
|
|
13
13
|
NearestFilter,
|
|
14
14
|
NoBlending,
|
|
15
15
|
RedFormat,
|
|
16
|
-
LuminanceFormat,
|
|
17
16
|
DepthStencilFormat,
|
|
18
17
|
UnsignedInt248Type,
|
|
19
18
|
RepeatWrapping,
|
|
@@ -177,8 +176,6 @@ class SSAOPass extends Pass {
|
|
|
177
176
|
|
|
178
177
|
render( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
|
|
179
178
|
|
|
180
|
-
if ( renderer.capabilities.isWebGL2 === false ) this.noiseTexture.format = LuminanceFormat;
|
|
181
|
-
|
|
182
179
|
// render normals and depth (honor only meshes, points and lines do not contribute to SSAO)
|
|
183
180
|
|
|
184
181
|
this.overrideVisibility();
|
|
@@ -18,6 +18,8 @@ class Animation {
|
|
|
18
18
|
|
|
19
19
|
this.requestId = self.requestAnimationFrame( update );
|
|
20
20
|
|
|
21
|
+
if ( this.info.autoReset === true ) this.info.reset();
|
|
22
|
+
|
|
21
23
|
this.nodes.nodeFrame.update();
|
|
22
24
|
|
|
23
25
|
this.info.frame = this.nodes.nodeFrame.frameId;
|
|
@@ -33,6 +35,7 @@ class Animation {
|
|
|
33
35
|
dispose() {
|
|
34
36
|
|
|
35
37
|
self.cancelAnimationFrame( this.requestId );
|
|
38
|
+
this.requestId = null;
|
|
36
39
|
|
|
37
40
|
}
|
|
38
41
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import Color4 from './Color4.js';
|
|
3
|
-
import { Mesh, SphereGeometry, BackSide } from 'three';
|
|
4
|
-
import { vec4, context, normalWorld, backgroundBlurriness, backgroundIntensity, NodeMaterial, modelViewProjection
|
|
3
|
+
import { Mesh, SphereGeometry, BackSide, LinearSRGBColorSpace } from 'three';
|
|
4
|
+
import { vec4, context, normalWorld, backgroundBlurriness, backgroundIntensity, NodeMaterial, modelViewProjection } from '../../nodes/Nodes.js';
|
|
5
5
|
|
|
6
6
|
const _clearColor = new Color4();
|
|
7
7
|
|
|
@@ -27,14 +27,14 @@ class Background extends DataMap {
|
|
|
27
27
|
|
|
28
28
|
// no background settings, use clear color configuration from the renderer
|
|
29
29
|
|
|
30
|
-
renderer._clearColor.getRGB( _clearColor,
|
|
30
|
+
renderer._clearColor.getRGB( _clearColor, LinearSRGBColorSpace );
|
|
31
31
|
_clearColor.a = renderer._clearColor.a;
|
|
32
32
|
|
|
33
33
|
} else if ( background.isColor === true ) {
|
|
34
34
|
|
|
35
35
|
// background is an opaque color
|
|
36
36
|
|
|
37
|
-
background.getRGB( _clearColor,
|
|
37
|
+
background.getRGB( _clearColor, LinearSRGBColorSpace );
|
|
38
38
|
_clearColor.a = 1;
|
|
39
39
|
|
|
40
40
|
forceClear = true;
|
|
@@ -50,11 +50,11 @@ class Background extends DataMap {
|
|
|
50
50
|
|
|
51
51
|
if ( backgroundMesh === undefined ) {
|
|
52
52
|
|
|
53
|
-
const backgroundMeshNode = context( vec4( backgroundNode ), {
|
|
53
|
+
const backgroundMeshNode = context( vec4( backgroundNode ).mul( backgroundIntensity ), {
|
|
54
54
|
// @TODO: Add Texture2D support using node context
|
|
55
55
|
getUV: () => normalWorld,
|
|
56
|
-
getTextureLevel: (
|
|
57
|
-
} )
|
|
56
|
+
getTextureLevel: () => backgroundBlurriness
|
|
57
|
+
} );
|
|
58
58
|
|
|
59
59
|
let viewProj = modelViewProjection();
|
|
60
60
|
viewProj = viewProj.setZ( viewProj.w );
|
|
@@ -83,7 +83,7 @@ class Background extends DataMap {
|
|
|
83
83
|
|
|
84
84
|
if ( sceneData.backgroundCacheKey !== backgroundCacheKey ) {
|
|
85
85
|
|
|
86
|
-
sceneData.backgroundMeshNode.node = vec4( backgroundNode );
|
|
86
|
+
sceneData.backgroundMeshNode.node = vec4( backgroundNode ).mul( backgroundIntensity );
|
|
87
87
|
|
|
88
88
|
backgroundMesh.material.needsUpdate = true;
|
|
89
89
|
|
|
@@ -101,7 +101,7 @@ class ClippingContext {
|
|
|
101
101
|
|
|
102
102
|
if ( this !== parent && parent.version !== this.parentVersion ) {
|
|
103
103
|
|
|
104
|
-
this.globalClippingCount =
|
|
104
|
+
this.globalClippingCount = material.isShadowNodeMaterial ? 0 : parent.globalClippingCount;
|
|
105
105
|
this.localClippingEnabled = parent.localClippingEnabled;
|
|
106
106
|
this.planes = Array.from( parent.planes );
|
|
107
107
|
this.parentVersion = parent.version;
|
|
@@ -12,12 +12,14 @@ class Info {
|
|
|
12
12
|
drawCalls: 0,
|
|
13
13
|
triangles: 0,
|
|
14
14
|
points: 0,
|
|
15
|
-
lines: 0
|
|
15
|
+
lines: 0,
|
|
16
|
+
timestamp: 0
|
|
16
17
|
};
|
|
17
18
|
|
|
18
19
|
this.compute = {
|
|
19
20
|
calls: 0,
|
|
20
|
-
computeCalls: 0
|
|
21
|
+
computeCalls: 0,
|
|
22
|
+
timestamp: 0
|
|
21
23
|
};
|
|
22
24
|
|
|
23
25
|
this.memory = {
|
|
@@ -25,11 +27,6 @@ class Info {
|
|
|
25
27
|
textures: 0
|
|
26
28
|
};
|
|
27
29
|
|
|
28
|
-
this.timestamp = {
|
|
29
|
-
compute: 0,
|
|
30
|
-
render: 0
|
|
31
|
-
};
|
|
32
|
-
|
|
33
30
|
}
|
|
34
31
|
|
|
35
32
|
update( object, count, instanceCount ) {
|
|
@@ -62,26 +59,21 @@ class Info {
|
|
|
62
59
|
|
|
63
60
|
updateTimestamp( type, time ) {
|
|
64
61
|
|
|
65
|
-
this
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
resetCompute() {
|
|
70
|
-
|
|
71
|
-
this.compute.computeCalls = 0;
|
|
72
|
-
|
|
73
|
-
this.timestamp.compute = 0;
|
|
62
|
+
this[ type ].timestamp += time;
|
|
74
63
|
|
|
75
64
|
}
|
|
76
65
|
|
|
77
66
|
reset() {
|
|
78
67
|
|
|
79
68
|
this.render.drawCalls = 0;
|
|
69
|
+
this.compute.computeCalls = 0;
|
|
70
|
+
|
|
80
71
|
this.render.triangles = 0;
|
|
81
72
|
this.render.points = 0;
|
|
82
73
|
this.render.lines = 0;
|
|
83
74
|
|
|
84
|
-
this.timestamp
|
|
75
|
+
this.render.timestamp = 0;
|
|
76
|
+
this.compute.timestamp = 0;
|
|
85
77
|
|
|
86
78
|
}
|
|
87
79
|
|
|
@@ -94,8 +86,8 @@ class Info {
|
|
|
94
86
|
this.render.calls = 0;
|
|
95
87
|
this.compute.calls = 0;
|
|
96
88
|
|
|
97
|
-
this.timestamp
|
|
98
|
-
this.timestamp
|
|
89
|
+
this.render.timestamp = 0;
|
|
90
|
+
this.compute.timestamp = 0;
|
|
99
91
|
this.memory.geometries = 0;
|
|
100
92
|
this.memory.textures = 0;
|
|
101
93
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { vec4,
|
|
1
|
+
import { vec4, NodeMaterial } from '../../nodes/Nodes.js';
|
|
2
2
|
import QuadMesh from '../../objects/QuadMesh.js';
|
|
3
3
|
|
|
4
|
-
const quadMesh = new QuadMesh( new
|
|
4
|
+
const quadMesh = new QuadMesh( new NodeMaterial() );
|
|
5
5
|
|
|
6
6
|
class PostProcessing {
|
|
7
7
|
|
|
@@ -12,11 +12,19 @@ class PostProcessing {
|
|
|
12
12
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
render() {
|
|
16
16
|
|
|
17
17
|
quadMesh.material.fragmentNode = this.outputNode;
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
quadMesh.render( this.renderer );
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
renderAsync() {
|
|
24
|
+
|
|
25
|
+
quadMesh.material.fragmentNode = this.outputNode;
|
|
26
|
+
|
|
27
|
+
return quadMesh.renderAsync( this.renderer );
|
|
20
28
|
|
|
21
29
|
}
|
|
22
30
|
|
|
@@ -123,7 +123,7 @@ class RenderList {
|
|
|
123
123
|
|
|
124
124
|
if ( object.occlusionTest === true ) this.occlusionQueryCount ++;
|
|
125
125
|
|
|
126
|
-
( material.transparent === true ? this.transparent : this.opaque ).push( renderItem );
|
|
126
|
+
( material.transparent === true || material.transmission > 0 ? this.transparent : this.opaque ).push( renderItem );
|
|
127
127
|
|
|
128
128
|
}
|
|
129
129
|
|
|
@@ -1,7 +1,41 @@
|
|
|
1
|
-
import ClippingContext from
|
|
1
|
+
import ClippingContext from './ClippingContext.js';
|
|
2
2
|
|
|
3
3
|
let id = 0;
|
|
4
4
|
|
|
5
|
+
function getKeys( obj ) {
|
|
6
|
+
|
|
7
|
+
const keys = Object.keys( obj );
|
|
8
|
+
|
|
9
|
+
let proto = Object.getPrototypeOf( obj );
|
|
10
|
+
|
|
11
|
+
while ( proto ) {
|
|
12
|
+
|
|
13
|
+
const descriptors = Object.getOwnPropertyDescriptors( proto );
|
|
14
|
+
|
|
15
|
+
for ( const key in descriptors ) {
|
|
16
|
+
|
|
17
|
+
if ( descriptors[ key ] !== undefined ) {
|
|
18
|
+
|
|
19
|
+
const descriptor = descriptors[ key ];
|
|
20
|
+
|
|
21
|
+
if ( descriptor && typeof descriptor.get === 'function' ) {
|
|
22
|
+
|
|
23
|
+
keys.push( key );
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
proto = Object.getPrototypeOf( proto );
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return keys;
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
|
|
5
39
|
export default class RenderObject {
|
|
6
40
|
|
|
7
41
|
constructor( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext ) {
|
|
@@ -22,6 +56,8 @@ export default class RenderObject {
|
|
|
22
56
|
this.geometry = object.geometry;
|
|
23
57
|
this.version = material.version;
|
|
24
58
|
|
|
59
|
+
this.drawRange = null;
|
|
60
|
+
|
|
25
61
|
this.attributes = null;
|
|
26
62
|
this.pipeline = null;
|
|
27
63
|
this.vertexBuffers = null;
|
|
@@ -75,7 +111,7 @@ export default class RenderObject {
|
|
|
75
111
|
|
|
76
112
|
}
|
|
77
113
|
|
|
78
|
-
clippingNeedsUpdate
|
|
114
|
+
get clippingNeedsUpdate() {
|
|
79
115
|
|
|
80
116
|
if ( this.clippingContext.version === this.clippingContextVersion ) return false;
|
|
81
117
|
|
|
@@ -153,9 +189,9 @@ export default class RenderObject {
|
|
|
153
189
|
|
|
154
190
|
let cacheKey = material.customProgramCacheKey();
|
|
155
191
|
|
|
156
|
-
for ( const property
|
|
192
|
+
for ( const property of getKeys( material ) ) {
|
|
157
193
|
|
|
158
|
-
if ( /^(is[A-Z])|^(visible|version|uuid|name|opacity|userData)$/.test( property ) ) continue;
|
|
194
|
+
if ( /^(is[A-Z]|_)|^(visible|version|uuid|name|opacity|userData)$/.test( property ) ) continue;
|
|
159
195
|
|
|
160
196
|
let value = material[ property ];
|
|
161
197
|
|
|
@@ -186,13 +222,19 @@ export default class RenderObject {
|
|
|
186
222
|
|
|
187
223
|
}
|
|
188
224
|
|
|
225
|
+
if ( object.isBatchedMesh ) {
|
|
226
|
+
|
|
227
|
+
cacheKey += object._matricesTexture.uuid + ',';
|
|
228
|
+
|
|
229
|
+
}
|
|
230
|
+
|
|
189
231
|
return cacheKey;
|
|
190
232
|
|
|
191
233
|
}
|
|
192
234
|
|
|
193
235
|
get needsUpdate() {
|
|
194
236
|
|
|
195
|
-
return this.initialNodesCacheKey !== this.getNodesCacheKey();
|
|
237
|
+
return this.initialNodesCacheKey !== this.getNodesCacheKey() || this.clippingNeedsUpdate;
|
|
196
238
|
|
|
197
239
|
}
|
|
198
240
|
|
|
@@ -33,7 +33,7 @@ class RenderObjects {
|
|
|
33
33
|
|
|
34
34
|
renderObject.updateClipping( renderContext.clippingContext );
|
|
35
35
|
|
|
36
|
-
if ( renderObject.version !== material.version || renderObject.needsUpdate
|
|
36
|
+
if ( renderObject.version !== material.version || renderObject.needsUpdate ) {
|
|
37
37
|
|
|
38
38
|
if ( renderObject.initialCacheKey !== renderObject.getCacheKey() ) {
|
|
39
39
|
|