super-three 0.155.0 → 0.157.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 +361 -324
- package/build/three.js +361 -324
- package/build/three.min.js +2 -2
- package/build/three.module.js +354 -323
- package/build/three.module.min.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +17 -0
- package/examples/jsm/controls/DragControls.js +3 -2
- package/examples/jsm/controls/OrbitControls.js +13 -5
- package/examples/jsm/csm/CSMShader.js +59 -21
- package/examples/jsm/exporters/EXRExporter.js +102 -24
- package/examples/jsm/exporters/GLTFExporter.js +1 -1
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +8726 -4
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +8737 -4
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/libs/tween.module.js +790 -735
- package/examples/jsm/libs/utif.module.js +1644 -1558
- package/examples/jsm/lights/LightProbeGenerator.js +37 -3
- package/examples/jsm/lines/LineMaterial.js +90 -156
- package/examples/jsm/loaders/3DMLoader.js +378 -104
- package/examples/jsm/loaders/DDSLoader.js +46 -3
- package/examples/jsm/loaders/EXRLoader.js +4 -4
- package/examples/jsm/loaders/FBXLoader.js +2 -0
- package/examples/jsm/loaders/GLTFLoader.js +18 -8
- package/examples/jsm/loaders/KTX2Loader.js +126 -77
- package/examples/jsm/loaders/LDrawLoader.js +22 -16
- package/examples/jsm/loaders/LogLuvLoader.js +2 -2
- package/examples/jsm/loaders/MMDLoader.js +10 -7
- package/examples/jsm/loaders/RGBELoader.js +48 -66
- package/examples/jsm/loaders/STLLoader.js +7 -0
- package/examples/jsm/loaders/USDZLoader.js +215 -12
- package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
- package/examples/jsm/nodes/Nodes.js +8 -1
- package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +30 -4
- package/examples/jsm/nodes/accessors/BufferNode.js +1 -1
- package/examples/jsm/nodes/accessors/CameraNode.js +1 -1
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +19 -4
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +4 -5
- package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +29 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +23 -13
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +12 -9
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +5 -4
- package/examples/jsm/nodes/accessors/MorphNode.js +4 -4
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/Object3DNode.js +3 -3
- package/examples/jsm/nodes/accessors/PointUVNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +13 -7
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -2
- package/examples/jsm/nodes/accessors/SceneNode.js +2 -2
- package/examples/jsm/nodes/accessors/SkinningNode.js +2 -2
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +1 -1
- package/examples/jsm/nodes/accessors/TangentNode.js +1 -1
- package/examples/jsm/nodes/accessors/TextureBicubicNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureNode.js +18 -8
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +29 -0
- package/examples/jsm/nodes/accessors/UVNode.js +1 -1
- package/examples/jsm/nodes/accessors/UserDataNode.js +2 -2
- package/examples/jsm/nodes/code/CodeNode.js +1 -1
- package/examples/jsm/nodes/code/ExpressionNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionCallNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionNode.js +18 -7
- package/examples/jsm/nodes/code/ScriptableNode.js +2 -2
- package/examples/jsm/nodes/code/ScriptableValueNode.js +2 -2
- package/examples/jsm/nodes/core/ArrayUniformNode.js +1 -1
- package/examples/jsm/nodes/core/AttributeNode.js +3 -3
- package/examples/jsm/nodes/core/BypassNode.js +1 -1
- package/examples/jsm/nodes/core/CacheNode.js +1 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/ContextNode.js +2 -2
- package/examples/jsm/nodes/core/IndexNode.js +1 -1
- package/examples/jsm/nodes/core/InputNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +45 -14
- package/examples/jsm/nodes/core/NodeBuilder.js +83 -15
- package/examples/jsm/nodes/core/NodeFrame.js +37 -14
- package/examples/jsm/nodes/core/NodeUniform.js +1 -1
- package/examples/jsm/nodes/core/OutputStructNode.js +62 -0
- package/examples/jsm/nodes/core/PropertyNode.js +3 -1
- package/examples/jsm/nodes/core/StackNode.js +5 -5
- package/examples/jsm/nodes/core/StructTypeNode.js +24 -0
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformNode.js +3 -1
- package/examples/jsm/nodes/core/VarNode.js +1 -1
- package/examples/jsm/nodes/core/VaryingNode.js +1 -1
- package/examples/jsm/nodes/core/constants.js +1 -1
- package/examples/jsm/nodes/display/BlendModeNode.js +2 -2
- package/examples/jsm/nodes/display/BumpMapNode.js +2 -2
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -2
- package/examples/jsm/nodes/display/ColorSpaceNode.js +2 -2
- package/examples/jsm/nodes/display/FrontFacingNode.js +1 -1
- package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
- package/examples/jsm/nodes/display/PosterizeNode.js +2 -2
- package/examples/jsm/nodes/display/ToneMappingNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportDepthNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +21 -7
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportTextureNode.js +1 -1
- package/examples/jsm/nodes/fog/FogExp2Node.js +2 -2
- package/examples/jsm/nodes/fog/FogNode.js +2 -2
- package/examples/jsm/nodes/fog/FogRangeNode.js +2 -2
- package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AONode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +4 -4
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +4 -4
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +2 -2
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/IESSpotLightNode.js +2 -2
- package/examples/jsm/nodes/lighting/LightNode.js +2 -2
- package/examples/jsm/nodes/lighting/LightingContextNode.js +3 -3
- package/examples/jsm/nodes/lighting/LightingNode.js +1 -1
- package/examples/jsm/nodes/lighting/LightsNode.js +4 -4
- package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/SpotLightNode.js +4 -4
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +449 -0
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +54 -0
- package/examples/jsm/nodes/materials/Materials.js +2 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/NodeMaterial.js +39 -29
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
- package/examples/jsm/nodes/math/CondNode.js +1 -1
- package/examples/jsm/nodes/math/HashNode.js +34 -0
- package/examples/jsm/nodes/math/MathNode.js +2 -2
- package/examples/jsm/nodes/math/OperatorNode.js +1 -1
- package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
- package/examples/jsm/nodes/shadernode/ShaderNode.js +85 -28
- package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
- package/examples/jsm/nodes/utils/ConvertNode.js +1 -1
- package/examples/jsm/nodes/utils/DiscardNode.js +1 -1
- package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -2
- package/examples/jsm/nodes/utils/JoinNode.js +1 -1
- package/examples/jsm/nodes/utils/LoopNode.js +11 -11
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -2
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/OscNode.js +2 -2
- package/examples/jsm/nodes/utils/PackingNode.js +2 -2
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/RotateUVNode.js +2 -2
- package/examples/jsm/nodes/utils/SetNode.js +62 -0
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +2 -2
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +2 -2
- package/examples/jsm/nodes/utils/TimerNode.js +2 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +2 -2
- package/examples/jsm/objects/Sky.js +1 -3
- package/examples/jsm/postprocessing/FilmPass.js +3 -5
- package/examples/jsm/postprocessing/OutputPass.js +3 -2
- 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/renderers/common/Backend.js +11 -8
- package/examples/jsm/renderers/common/Background.js +2 -2
- package/examples/jsm/renderers/common/Binding.js +6 -0
- package/examples/jsm/renderers/common/Bindings.js +4 -5
- package/examples/jsm/renderers/common/Pipelines.js +9 -9
- package/examples/jsm/renderers/common/RenderContext.js +3 -0
- package/examples/jsm/renderers/common/RenderContexts.js +26 -1
- package/examples/jsm/renderers/common/RenderList.js +12 -4
- package/examples/jsm/renderers/common/RenderObject.js +43 -15
- package/examples/jsm/renderers/common/RenderObjects.js +8 -14
- package/examples/jsm/renderers/common/Renderer.js +52 -16
- package/examples/jsm/renderers/common/SampledTexture.js +6 -3
- package/examples/jsm/renderers/common/Sampler.js +1 -1
- package/examples/jsm/renderers/common/StorageBuffer.js +1 -1
- package/examples/jsm/renderers/common/StorageTexture.js +19 -0
- package/examples/jsm/renderers/common/Textures.js +166 -21
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +21 -11
- package/examples/jsm/renderers/common/nodes/NodeSampler.js +1 -7
- package/examples/jsm/renderers/common/nodes/Nodes.js +79 -18
- package/examples/jsm/renderers/webgl/WebGLBackend.js +702 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +207 -20
- 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 +212 -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 +4 -4
- package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodes.js +14 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +282 -43
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +18 -2
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +93 -60
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -2
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +15 -2
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -14
- package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +205 -284
- package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +6 -5
- package/examples/jsm/shaders/FilmShader.js +11 -54
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/MMDToonShader.js +4 -4
- package/examples/jsm/shaders/OutputShader.js +2 -2
- package/examples/jsm/shaders/SAOShader.js +0 -13
- package/examples/jsm/shaders/SSAOShader.js +33 -26
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +6 -6
- package/examples/jsm/utils/BufferGeometryUtils.js +6 -4
- package/package.json +1 -1
- package/src/Three.js +1 -2
- package/src/animation/AnimationUtils.js +3 -20
- package/src/animation/KeyframeTrack.js +8 -8
- package/src/audio/Audio.js +6 -0
- package/src/cameras/Camera.js +1 -5
- package/src/cameras/CubeCamera.js +14 -8
- package/src/constants.js +10 -1
- package/src/core/Object3D.js +1 -14
- package/src/core/RenderTarget.js +16 -7
- package/src/core/UniformsGroup.js +2 -2
- package/src/extras/core/CurvePath.js +4 -1
- package/src/loaders/DataTextureLoader.js +0 -2
- package/src/loaders/MaterialLoader.js +1 -1
- package/src/loaders/ObjectLoader.js +6 -0
- package/src/materials/Material.js +10 -10
- package/src/math/Color.js +1 -5
- package/src/math/ColorManagement.js +82 -60
- 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/objects/Sprite.js +2 -2
- package/src/renderers/WebGLRenderer.js +42 -51
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +35 -2
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -9
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +19 -15
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +4 -4
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -6
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +4 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +16 -16
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +11 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +2 -2
- package/src/renderers/webgl/WebGLBackground.js +9 -17
- package/src/renderers/webgl/WebGLLights.js +14 -3
- package/src/renderers/webgl/WebGLProgram.js +36 -5
- package/src/renderers/webgl/WebGLPrograms.js +9 -1
- package/src/renderers/webgl/WebGLTextures.js +19 -8
- package/src/renderers/webgl/WebGLUtils.js +25 -20
- package/src/scenes/Fog.js +1 -0
- package/src/scenes/FogExp2.js +1 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +2 -2
- package/src/utils.js +9 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
- package/src/lights/AmbientLightProbe.js +0 -21
- package/src/lights/HemisphereLightProbe.js +0 -30
- /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/SlotNode.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 };
|
|
@@ -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 {
|
|
3
|
+
import { context, normalWorld, backgroundBlurriness, backgroundIntensity, NodeMaterial, modelViewProjection } from '../../nodes/Nodes.js';
|
|
4
4
|
|
|
5
5
|
let _clearAlpha;
|
|
6
6
|
const _clearColor = new Color();
|
|
@@ -60,7 +60,7 @@ class Background extends DataMap {
|
|
|
60
60
|
} ).mul( backgroundIntensity );
|
|
61
61
|
|
|
62
62
|
let viewProj = modelViewProjection();
|
|
63
|
-
viewProj =
|
|
63
|
+
viewProj = viewProj.setZ( viewProj.w );
|
|
64
64
|
|
|
65
65
|
const nodeMaterial = new NodeMaterial();
|
|
66
66
|
nodeMaterial.outputNode = this.backgroundMeshNode;
|
|
@@ -48,9 +48,9 @@ class Bindings extends DataMap {
|
|
|
48
48
|
|
|
49
49
|
if ( data.bindings === undefined ) {
|
|
50
50
|
|
|
51
|
-
const
|
|
51
|
+
const nodeBuilderState = this.nodes.getForCompute( computeNode );
|
|
52
52
|
|
|
53
|
-
const bindings =
|
|
53
|
+
const bindings = nodeBuilderState.bindings;
|
|
54
54
|
|
|
55
55
|
data.bindings = bindings;
|
|
56
56
|
|
|
@@ -80,7 +80,7 @@ class Bindings extends DataMap {
|
|
|
80
80
|
|
|
81
81
|
for ( const binding of bindings ) {
|
|
82
82
|
|
|
83
|
-
if ( binding.
|
|
83
|
+
if ( binding.isSampledTexture ) {
|
|
84
84
|
|
|
85
85
|
this.textures.updateTexture( binding.texture );
|
|
86
86
|
|
|
@@ -109,10 +109,9 @@ class Bindings extends DataMap {
|
|
|
109
109
|
|
|
110
110
|
for ( const binding of bindings ) {
|
|
111
111
|
|
|
112
|
-
const isShared = binding.isShared;
|
|
113
112
|
const isUpdated = updateMap.get( binding ) === frame;
|
|
114
113
|
|
|
115
|
-
if (
|
|
114
|
+
if ( isUpdated ) continue;
|
|
116
115
|
|
|
117
116
|
if ( binding.isUniformBuffer ) {
|
|
118
117
|
|
|
@@ -109,31 +109,31 @@ class Pipelines extends DataMap {
|
|
|
109
109
|
|
|
110
110
|
// get shader
|
|
111
111
|
|
|
112
|
-
const
|
|
112
|
+
const nodeBuilderState = renderObject.getNodeBuilderState();
|
|
113
113
|
|
|
114
114
|
// programmable stages
|
|
115
115
|
|
|
116
|
-
let stageVertex = this.programs.vertex.get(
|
|
116
|
+
let stageVertex = this.programs.vertex.get( nodeBuilderState.vertexShader );
|
|
117
117
|
|
|
118
118
|
if ( stageVertex === undefined ) {
|
|
119
119
|
|
|
120
120
|
if ( previousPipeline && previousPipeline.vertexProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.vertexProgram );
|
|
121
121
|
|
|
122
|
-
stageVertex = new ProgrammableStage(
|
|
123
|
-
this.programs.vertex.set(
|
|
122
|
+
stageVertex = new ProgrammableStage( nodeBuilderState.vertexShader, 'vertex' );
|
|
123
|
+
this.programs.vertex.set( nodeBuilderState.vertexShader, stageVertex );
|
|
124
124
|
|
|
125
125
|
backend.createProgram( stageVertex );
|
|
126
126
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
let stageFragment = this.programs.fragment.get(
|
|
129
|
+
let stageFragment = this.programs.fragment.get( nodeBuilderState.fragmentShader );
|
|
130
130
|
|
|
131
131
|
if ( stageFragment === undefined ) {
|
|
132
132
|
|
|
133
133
|
if ( previousPipeline && previousPipeline.fragmentProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.fragmentProgram );
|
|
134
134
|
|
|
135
|
-
stageFragment = new ProgrammableStage(
|
|
136
|
-
this.programs.fragment.set(
|
|
135
|
+
stageFragment = new ProgrammableStage( nodeBuilderState.fragmentShader, 'fragment' );
|
|
136
|
+
this.programs.fragment.set( nodeBuilderState.fragmentShader, stageFragment );
|
|
137
137
|
|
|
138
138
|
backend.createProgram( stageFragment );
|
|
139
139
|
|
|
@@ -343,7 +343,7 @@ class Pipelines extends DataMap {
|
|
|
343
343
|
data.stencilWrite !== material.stencilWrite || data.stencilFunc !== material.stencilFunc ||
|
|
344
344
|
data.stencilFail !== material.stencilFail || data.stencilZFail !== material.stencilZFail || data.stencilZPass !== material.stencilZPass ||
|
|
345
345
|
data.stencilFuncMask !== material.stencilFuncMask || data.stencilWriteMask !== material.stencilWriteMask ||
|
|
346
|
-
data.side !== material.side
|
|
346
|
+
data.side !== material.side || data.alphaToCoverage !== material.alphaToCoverage
|
|
347
347
|
) {
|
|
348
348
|
|
|
349
349
|
data.material = material; data.materialVersion = material.version;
|
|
@@ -355,7 +355,7 @@ class Pipelines extends DataMap {
|
|
|
355
355
|
data.stencilWrite = material.stencilWrite; data.stencilFunc = material.stencilFunc;
|
|
356
356
|
data.stencilFail = material.stencilFail; data.stencilZFail = material.stencilZFail; data.stencilZPass = material.stencilZPass;
|
|
357
357
|
data.stencilFuncMask = material.stencilFuncMask; data.stencilWriteMask = material.stencilWriteMask;
|
|
358
|
-
data.side = material.side;
|
|
358
|
+
data.side = material.side; data.alphaToCoverage = material.alphaToCoverage;
|
|
359
359
|
|
|
360
360
|
needsUpdate = true;
|
|
361
361
|
|
|
@@ -12,7 +12,32 @@ class RenderContexts {
|
|
|
12
12
|
get( scene, camera, renderTarget = null ) {
|
|
13
13
|
|
|
14
14
|
const chainKey = [ scene, camera ];
|
|
15
|
-
|
|
15
|
+
|
|
16
|
+
let attachmentState;
|
|
17
|
+
|
|
18
|
+
if ( renderTarget === null ) {
|
|
19
|
+
|
|
20
|
+
attachmentState = 'default';
|
|
21
|
+
|
|
22
|
+
} else {
|
|
23
|
+
|
|
24
|
+
let format, count;
|
|
25
|
+
|
|
26
|
+
if ( renderTarget.isWebGLMultipleRenderTargets ) {
|
|
27
|
+
|
|
28
|
+
format = renderTarget.texture[ 0 ].format;
|
|
29
|
+
count = renderTarget.texture.length;
|
|
30
|
+
|
|
31
|
+
} else {
|
|
32
|
+
|
|
33
|
+
format = renderTarget.texture.format;
|
|
34
|
+
count = 1;
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
attachmentState = `${count}:${format}:${renderTarget.samples}:${renderTarget.depthBuffer}:${renderTarget.stencilBuffer}`;
|
|
39
|
+
|
|
40
|
+
}
|
|
16
41
|
|
|
17
42
|
const chainMap = this.getChainMap( attachmentState );
|
|
18
43
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LightsNode } from '../../nodes/Nodes.js';
|
|
2
2
|
|
|
3
3
|
function painterSortStable( a, b ) {
|
|
4
4
|
|
|
@@ -58,12 +58,14 @@ class RenderList {
|
|
|
58
58
|
this.opaque = [];
|
|
59
59
|
this.transparent = [];
|
|
60
60
|
|
|
61
|
-
this.lightsNode =
|
|
61
|
+
this.lightsNode = new LightsNode( [] );
|
|
62
62
|
this.lightsArray = [];
|
|
63
63
|
|
|
64
|
+
this.occlusionQueryCount = 0;
|
|
65
|
+
|
|
64
66
|
}
|
|
65
67
|
|
|
66
|
-
|
|
68
|
+
begin() {
|
|
67
69
|
|
|
68
70
|
this.renderItemsIndex = 0;
|
|
69
71
|
|
|
@@ -71,6 +73,8 @@ class RenderList {
|
|
|
71
73
|
this.transparent.length = 0;
|
|
72
74
|
this.lightsArray.length = 0;
|
|
73
75
|
|
|
76
|
+
this.occlusionQueryCount = 0;
|
|
77
|
+
|
|
74
78
|
return this;
|
|
75
79
|
|
|
76
80
|
}
|
|
@@ -117,6 +121,8 @@ class RenderList {
|
|
|
117
121
|
|
|
118
122
|
const renderItem = this.getNextRenderItem( object, geometry, material, groupOrder, z, group );
|
|
119
123
|
|
|
124
|
+
if ( object.occlusionTest === true ) this.occlusionQueryCount ++;
|
|
125
|
+
|
|
120
126
|
( material.transparent === true ? this.transparent : this.opaque ).push( renderItem );
|
|
121
127
|
|
|
122
128
|
}
|
|
@@ -166,7 +172,9 @@ class RenderList {
|
|
|
166
172
|
renderItem.object = null;
|
|
167
173
|
renderItem.geometry = null;
|
|
168
174
|
renderItem.material = null;
|
|
169
|
-
renderItem.
|
|
175
|
+
renderItem.groupOrder = null;
|
|
176
|
+
renderItem.renderOrder = null;
|
|
177
|
+
renderItem.z = null;
|
|
170
178
|
renderItem.group = null;
|
|
171
179
|
|
|
172
180
|
}
|
|
@@ -18,16 +18,21 @@ export default class RenderObject {
|
|
|
18
18
|
this.context = renderContext;
|
|
19
19
|
|
|
20
20
|
this.geometry = object.geometry;
|
|
21
|
+
this.version = material.version;
|
|
21
22
|
|
|
22
23
|
this.attributes = null;
|
|
23
24
|
this.pipeline = null;
|
|
24
25
|
this.vertexBuffers = null;
|
|
25
26
|
|
|
26
|
-
this.
|
|
27
|
-
|
|
27
|
+
this.initialCacheKey = this.getCacheKey();
|
|
28
|
+
|
|
29
|
+
this._nodeBuilderState = null;
|
|
30
|
+
this._bindings = null;
|
|
28
31
|
|
|
29
32
|
this.onDispose = null;
|
|
30
33
|
|
|
34
|
+
this.isRenderObject = true;
|
|
35
|
+
|
|
31
36
|
this.onMaterialDispose = () => {
|
|
32
37
|
|
|
33
38
|
this.dispose();
|
|
@@ -38,15 +43,15 @@ export default class RenderObject {
|
|
|
38
43
|
|
|
39
44
|
}
|
|
40
45
|
|
|
41
|
-
|
|
46
|
+
getNodeBuilderState() {
|
|
42
47
|
|
|
43
|
-
return this._nodes.getForRender( this );
|
|
48
|
+
return this._nodeBuilderState || ( this._nodeBuilderState = this._nodes.getForRender( this ) );
|
|
44
49
|
|
|
45
50
|
}
|
|
46
51
|
|
|
47
52
|
getBindings() {
|
|
48
53
|
|
|
49
|
-
return this.
|
|
54
|
+
return this._bindings || ( this._bindings = this.getNodeBuilderState().createBindings() );
|
|
50
55
|
|
|
51
56
|
}
|
|
52
57
|
|
|
@@ -66,7 +71,7 @@ export default class RenderObject {
|
|
|
66
71
|
|
|
67
72
|
if ( this.attributes !== null ) return this.attributes;
|
|
68
73
|
|
|
69
|
-
const nodeAttributes = this.
|
|
74
|
+
const nodeAttributes = this.getNodeBuilderState().nodeAttributes;
|
|
70
75
|
const geometry = this.geometry;
|
|
71
76
|
|
|
72
77
|
const attributes = [];
|
|
@@ -98,23 +103,46 @@ export default class RenderObject {
|
|
|
98
103
|
|
|
99
104
|
}
|
|
100
105
|
|
|
101
|
-
|
|
106
|
+
getMaterialCacheKey() {
|
|
107
|
+
|
|
108
|
+
const material = this.material;
|
|
109
|
+
|
|
110
|
+
let cacheKey = material.customProgramCacheKey();
|
|
111
|
+
|
|
112
|
+
for ( const property in material ) {
|
|
113
|
+
|
|
114
|
+
if ( /^(is[A-Z])|^(visible|version|uuid|name|opacity|userData)$/.test( property ) ) continue;
|
|
115
|
+
|
|
116
|
+
let value = material[ property ];
|
|
117
|
+
|
|
118
|
+
if ( value !== null ) {
|
|
102
119
|
|
|
103
|
-
|
|
120
|
+
const type = typeof value;
|
|
104
121
|
|
|
105
|
-
|
|
122
|
+
if ( type === 'number' ) value = value !== 0 ? '1' : '0'; // Convert to on/off, important for clearcoat, transmission, etc
|
|
123
|
+
else if ( type === 'object' ) value = '{}';
|
|
106
124
|
|
|
107
|
-
|
|
108
|
-
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
cacheKey += /*property + ':' +*/ value + ',';
|
|
109
128
|
|
|
110
129
|
}
|
|
111
130
|
|
|
112
|
-
|
|
131
|
+
return cacheKey;
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
getNodesCacheKey() {
|
|
136
|
+
|
|
137
|
+
// Environment Nodes Cache Key
|
|
113
138
|
|
|
114
|
-
|
|
115
|
-
|
|
139
|
+
return this._nodes.getCacheKey( this.scene, this.lightsNode );
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
getCacheKey() {
|
|
116
144
|
|
|
117
|
-
return
|
|
145
|
+
return `{material:${ this.getMaterialCacheKey() },nodes:${ this.getNodesCacheKey()}`;
|
|
118
146
|
|
|
119
147
|
}
|
|
120
148
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import DataMap from './DataMap.js';
|
|
2
1
|
import ChainMap from './ChainMap.js';
|
|
3
2
|
import RenderObject from './RenderObject.js';
|
|
4
3
|
|
|
@@ -14,7 +13,6 @@ class RenderObjects {
|
|
|
14
13
|
this.info = info;
|
|
15
14
|
|
|
16
15
|
this.chainMaps = {};
|
|
17
|
-
this.dataMap = new DataMap();
|
|
18
16
|
|
|
19
17
|
}
|
|
20
18
|
|
|
@@ -33,14 +31,17 @@ class RenderObjects {
|
|
|
33
31
|
|
|
34
32
|
} else {
|
|
35
33
|
|
|
36
|
-
|
|
37
|
-
const cacheKey = renderObject.getCacheKey();
|
|
34
|
+
if ( renderObject.version !== material.version ) {
|
|
38
35
|
|
|
39
|
-
|
|
36
|
+
renderObject.version = material.version;
|
|
40
37
|
|
|
41
|
-
renderObject.
|
|
38
|
+
if ( renderObject.initialCacheKey !== renderObject.getCacheKey() ) {
|
|
42
39
|
|
|
43
|
-
|
|
40
|
+
renderObject.dispose();
|
|
41
|
+
|
|
42
|
+
renderObject = this.get( object, material, scene, camera, lightsNode, renderContext, passId );
|
|
43
|
+
|
|
44
|
+
}
|
|
44
45
|
|
|
45
46
|
}
|
|
46
47
|
|
|
@@ -59,24 +60,17 @@ class RenderObjects {
|
|
|
59
60
|
dispose() {
|
|
60
61
|
|
|
61
62
|
this.chainMaps = {};
|
|
62
|
-
this.dataMap = new DataMap();
|
|
63
63
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
createRenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, passId ) {
|
|
67
67
|
|
|
68
68
|
const chainMap = this.getChainMap( passId );
|
|
69
|
-
const dataMap = this.dataMap;
|
|
70
69
|
|
|
71
70
|
const renderObject = new RenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext );
|
|
72
71
|
|
|
73
|
-
const data = dataMap.get( renderObject );
|
|
74
|
-
data.cacheKey = renderObject.getCacheKey();
|
|
75
|
-
|
|
76
72
|
renderObject.onDispose = () => {
|
|
77
73
|
|
|
78
|
-
dataMap.delete( renderObject );
|
|
79
|
-
|
|
80
74
|
this.pipelines.delete( renderObject );
|
|
81
75
|
this.bindings.delete( renderObject );
|
|
82
76
|
this.nodes.delete( renderObject );
|