@plastic-software/three 0.182.0 → 0.183.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/LICENSE +1 -1
- package/build/three.cjs +11520 -10877
- package/build/three.core.js +11732 -11340
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +509 -262
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +7 -11
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +3072 -2607
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +3071 -2607
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -3
- package/examples/jsm/animation/CCDIKSolver.js +2 -2
- package/examples/jsm/controls/ArcballControls.js +3 -3
- package/examples/jsm/controls/OrbitControls.js +103 -0
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +1 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +131 -4
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Inspector.js +21 -5
- package/examples/jsm/inspector/tabs/Console.js +39 -5
- package/examples/jsm/inspector/tabs/Parameters.js +16 -0
- package/examples/jsm/inspector/ui/Style.js +25 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +5 -5
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +3 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +182 -30
- package/examples/jsm/loaders/VRMLLoader.js +77 -0
- package/examples/jsm/loaders/VTKLoader.js +37 -24
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/usd/USDAParser.js +447 -366
- package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +114 -7
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/JoltPhysics.js +7 -5
- package/examples/jsm/physics/RapierPhysics.js +6 -4
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/SVGRenderer.js +2 -2
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +456 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/examples/jsm/tsl/display/BloomNode.js +5 -5
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +2 -2
- package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +3 -3
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +5 -5
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +2 -2
- package/examples/jsm/tsl/display/SSRNode.js +7 -7
- package/examples/jsm/tsl/display/SSSNode.js +2 -2
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TRAANode.js +9 -12
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/math/Bayer.js +40 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/package.json +11 -19
- package/src/Three.Core.js +1 -1
- package/src/Three.TSL.js +5 -9
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/KeyframeTrack.js +46 -7
- package/src/animation/PropertyMixer.js +4 -4
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +30 -1
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +4 -8
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +0 -24
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/LightShadow.js +15 -3
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/ImageBitmapLoader.js +8 -3
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/ObjectLoader.js +18 -1
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/nodes/Line2NodeMaterial.js +5 -5
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -0
- package/src/materials/nodes/NodeMaterial.js +15 -24
- package/src/materials/nodes/manager/NodeMaterialObserver.js +9 -3
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +35 -26
- package/src/math/Quaternion.js +3 -29
- package/src/math/Vector3.js +3 -3
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +2 -5
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +1 -1
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/InstanceNode.js +105 -40
- package/src/nodes/accessors/Normal.js +9 -9
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +12 -24
- package/src/nodes/accessors/StorageBufferNode.js +0 -19
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +6 -34
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +2 -0
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +115 -40
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeUtils.js +5 -3
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +2 -1
- package/src/nodes/core/StackNode.js +9 -8
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +15 -0
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +2 -1
- package/src/nodes/core/VarNode.js +1 -1
- package/src/nodes/core/VaryingNode.js +1 -18
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +2 -2
- package/src/nodes/display/PassNode.js +21 -2
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +2 -1
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportTextureNode.js +21 -4
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/PhysicalLightingModel.js +25 -3
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/PointShadowNode.js +24 -12
- package/src/nodes/lighting/ShadowFilterNode.js +15 -43
- package/src/nodes/lighting/ShadowNode.js +54 -32
- package/src/nodes/math/ConditionalNode.js +2 -2
- package/src/nodes/math/MathNode.js +3 -40
- package/src/nodes/math/OperatorNode.js +2 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLCore.js +13 -10
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -3
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +4 -2
- package/src/objects/BatchedMesh.js +22 -12
- package/src/objects/InstancedMesh.js +11 -0
- package/src/renderers/WebGLRenderer.js +34 -60
- package/src/renderers/common/Backend.js +21 -0
- package/src/renderers/common/Background.js +7 -4
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Bindings.js +20 -5
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +17 -3
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +4 -4
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/RenderBundles.js +2 -1
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -56
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +2 -3
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +18 -2
- package/src/renderers/common/RenderPipeline.js +203 -17
- package/src/renderers/common/Renderer.js +207 -40
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +16 -0
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +60 -0
- package/src/renderers/common/XRManager.js +2 -2
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +23 -1
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +55 -24
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib.js +4 -2
- package/src/renderers/shaders/UniformsLib.js +0 -3
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +2 -2
- package/src/renderers/webgl/WebGLPrograms.js +10 -4
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +5 -4
- package/src/renderers/webgl/WebGLState.js +12 -17
- package/src/renderers/webgl-fallback/WebGLBackend.js +71 -7
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +98 -29
- package/src/renderers/webgl-fallback/utils/WebGLState.js +168 -7
- package/src/renderers/webgpu/WebGPUBackend.js +58 -9
- package/src/renderers/webgpu/WebGPURenderer.js +1 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +257 -45
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +8 -19
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -31
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +25 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +10 -6
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/Texture.js +2 -2
- package/src/utils.js +246 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -433
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { LightsNode } from '../../nodes/Nodes.js';
|
|
2
|
-
import ChainMap from './ChainMap.js';
|
|
3
2
|
|
|
4
3
|
const _defaultLights = /*@__PURE__*/ new LightsNode();
|
|
5
|
-
const
|
|
4
|
+
const _weakMap = /*@__PURE__*/ new WeakMap();
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* This renderer module manages the lights nodes which are unique
|
|
@@ -12,18 +11,8 @@ const _chainKeys = [];
|
|
|
12
11
|
* with the actual lights from the scene.
|
|
13
12
|
*
|
|
14
13
|
* @private
|
|
15
|
-
* @augments ChainMap
|
|
16
14
|
*/
|
|
17
|
-
class Lighting
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Constructs a lighting management component.
|
|
21
|
-
*/
|
|
22
|
-
constructor() {
|
|
23
|
-
|
|
24
|
-
super();
|
|
25
|
-
|
|
26
|
-
}
|
|
15
|
+
class Lighting {
|
|
27
16
|
|
|
28
17
|
/**
|
|
29
18
|
* Creates a new lights node for the given array of lights.
|
|
@@ -44,26 +33,21 @@ class Lighting extends ChainMap {
|
|
|
44
33
|
* @param {Camera} camera - The camera.
|
|
45
34
|
* @return {LightsNode} The lights node.
|
|
46
35
|
*/
|
|
47
|
-
getNode( scene
|
|
36
|
+
getNode( scene ) {
|
|
48
37
|
|
|
49
38
|
// ignore post-processing
|
|
50
39
|
|
|
51
40
|
if ( scene.isQuadMesh ) return _defaultLights;
|
|
52
41
|
|
|
53
|
-
|
|
54
|
-
_chainKeys[ 1 ] = camera;
|
|
55
|
-
|
|
56
|
-
let node = this.get( _chainKeys );
|
|
42
|
+
let node = _weakMap.get( scene );
|
|
57
43
|
|
|
58
44
|
if ( node === undefined ) {
|
|
59
45
|
|
|
60
46
|
node = this.createNode();
|
|
61
|
-
|
|
47
|
+
_weakMap.set( scene, node );
|
|
62
48
|
|
|
63
49
|
}
|
|
64
50
|
|
|
65
|
-
_chainKeys.length = 0;
|
|
66
|
-
|
|
67
51
|
return node;
|
|
68
52
|
|
|
69
53
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
|
-
import
|
|
2
|
+
import RenderObjectPipeline from './RenderObjectPipeline.js';
|
|
3
3
|
import ComputePipeline from './ComputePipeline.js';
|
|
4
4
|
import ProgrammableStage from './ProgrammableStage.js';
|
|
5
5
|
|
|
@@ -146,7 +146,7 @@ class Pipelines extends DataMap {
|
|
|
146
146
|
*
|
|
147
147
|
* @param {RenderObject} renderObject - The render object.
|
|
148
148
|
* @param {?Array<Promise>} [promises=null] - An array of compilation promises which is only relevant in context of `Renderer.compileAsync()`.
|
|
149
|
-
* @return {
|
|
149
|
+
* @return {RenderObjectPipeline} The render pipeline.
|
|
150
150
|
*/
|
|
151
151
|
getForRender( renderObject, promises = null ) {
|
|
152
152
|
|
|
@@ -344,7 +344,7 @@ class Pipelines extends DataMap {
|
|
|
344
344
|
* @param {ProgrammableStage} stageFragment - The programmable stage representing the fragment shader.
|
|
345
345
|
* @param {string} cacheKey - The cache key.
|
|
346
346
|
* @param {?Array<Promise>} promises - An array of compilation promises which is only relevant in context of `Renderer.compileAsync()`.
|
|
347
|
-
* @return {
|
|
347
|
+
* @return {RenderObjectPipeline} The render pipeline.
|
|
348
348
|
*/
|
|
349
349
|
_getRenderPipeline( renderObject, stageVertex, stageFragment, cacheKey, promises ) {
|
|
350
350
|
|
|
@@ -356,7 +356,7 @@ class Pipelines extends DataMap {
|
|
|
356
356
|
|
|
357
357
|
if ( pipeline === undefined ) {
|
|
358
358
|
|
|
359
|
-
pipeline = new
|
|
359
|
+
pipeline = new RenderObjectPipeline( cacheKey, stageVertex, stageFragment );
|
|
360
360
|
|
|
361
361
|
this.caches.set( cacheKey, pipeline );
|
|
362
362
|
|
|
@@ -1,223 +1,25 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
3
|
-
import { vec4, renderOutput } from '../../nodes/TSL.js';
|
|
4
|
-
import { NoToneMapping } from '../../constants.js';
|
|
5
|
-
import QuadMesh from '../../renderers/common/QuadMesh.js';
|
|
1
|
+
import RenderPipeline from './RenderPipeline.js';
|
|
6
2
|
import { warnOnce } from '../../utils.js';
|
|
7
3
|
|
|
8
4
|
/**
|
|
9
|
-
*
|
|
10
|
-
* You usually create a single instance of this class and use it to define
|
|
11
|
-
* the output of your post processing effect chain.
|
|
12
|
-
* ```js
|
|
13
|
-
* const postProcessing = new PostProcessing( renderer );
|
|
5
|
+
* @deprecated since r183. Use {@link RenderPipeline} instead. PostProcessing has been renamed to RenderPipeline.
|
|
14
6
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* postProcessing.outputNode = scenePass;
|
|
18
|
-
* ```
|
|
19
|
-
*
|
|
20
|
-
* Note: This module can only be used with `WebGPURenderer`.
|
|
7
|
+
* This class is a wrapper for backward compatibility and will be removed in a future version.
|
|
21
8
|
*/
|
|
22
|
-
class PostProcessing {
|
|
9
|
+
class PostProcessing extends RenderPipeline {
|
|
23
10
|
|
|
24
11
|
/**
|
|
25
12
|
* Constructs a new post processing management module.
|
|
26
13
|
*
|
|
27
14
|
* @param {Renderer} renderer - A reference to the renderer.
|
|
28
15
|
* @param {Node<vec4>} outputNode - An optional output node.
|
|
16
|
+
* @deprecated since r183. Use {@link RenderPipeline} instead.
|
|
29
17
|
*/
|
|
30
|
-
constructor( renderer, outputNode
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* A reference to the renderer.
|
|
34
|
-
*
|
|
35
|
-
* @type {Renderer}
|
|
36
|
-
*/
|
|
37
|
-
this.renderer = renderer;
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* A node which defines the final output of the post
|
|
41
|
-
* processing. This is usually the last node in a chain
|
|
42
|
-
* of effect nodes.
|
|
43
|
-
*
|
|
44
|
-
* @type {Node<vec4>}
|
|
45
|
-
*/
|
|
46
|
-
this.outputNode = outputNode;
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Whether the default output tone mapping and color
|
|
50
|
-
* space transformation should be enabled or not.
|
|
51
|
-
*
|
|
52
|
-
* It is enabled by default by it must be disabled when
|
|
53
|
-
* effects must be executed after tone mapping and color
|
|
54
|
-
* space conversion. A typical example is FXAA which
|
|
55
|
-
* requires sRGB input.
|
|
56
|
-
*
|
|
57
|
-
* When set to `false`, the app must control the output
|
|
58
|
-
* transformation with `RenderOutputNode`.
|
|
59
|
-
*
|
|
60
|
-
* ```js
|
|
61
|
-
* const outputPass = renderOutput( scenePass );
|
|
62
|
-
* ```
|
|
63
|
-
*
|
|
64
|
-
* @type {boolean}
|
|
65
|
-
*/
|
|
66
|
-
this.outputColorTransform = true;
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Must be set to `true` when the output node changes.
|
|
70
|
-
*
|
|
71
|
-
* @type {Node<vec4>}
|
|
72
|
-
*/
|
|
73
|
-
this.needsUpdate = true;
|
|
74
|
-
|
|
75
|
-
const material = new NodeMaterial();
|
|
76
|
-
material.name = 'PostProcessing';
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* The full screen quad that is used to render
|
|
80
|
-
* the effects.
|
|
81
|
-
*
|
|
82
|
-
* @private
|
|
83
|
-
* @type {QuadMesh}
|
|
84
|
-
*/
|
|
85
|
-
this._quadMesh = new QuadMesh( material );
|
|
86
|
-
this._quadMesh.name = 'Post-Processing';
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* The context of the post processing stack.
|
|
90
|
-
*
|
|
91
|
-
* @private
|
|
92
|
-
* @type {?Object}
|
|
93
|
-
* @default null
|
|
94
|
-
*/
|
|
95
|
-
this._context = null;
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* When `PostProcessing` is used to apply post processing effects,
|
|
101
|
-
* the application must use this version of `render()` inside
|
|
102
|
-
* its animation loop (not the one from the renderer).
|
|
103
|
-
*/
|
|
104
|
-
render() {
|
|
105
|
-
|
|
106
|
-
const renderer = this.renderer;
|
|
107
|
-
|
|
108
|
-
this._update();
|
|
109
|
-
|
|
110
|
-
if ( this._context.onBeforePostProcessing !== null ) this._context.onBeforePostProcessing();
|
|
111
|
-
|
|
112
|
-
const toneMapping = renderer.toneMapping;
|
|
113
|
-
const outputColorSpace = renderer.outputColorSpace;
|
|
114
|
-
|
|
115
|
-
renderer.toneMapping = NoToneMapping;
|
|
116
|
-
renderer.outputColorSpace = ColorManagement.workingColorSpace;
|
|
117
|
-
|
|
118
|
-
//
|
|
119
|
-
|
|
120
|
-
const currentXR = renderer.xr.enabled;
|
|
121
|
-
renderer.xr.enabled = false;
|
|
122
|
-
|
|
123
|
-
this._quadMesh.render( renderer );
|
|
124
|
-
|
|
125
|
-
renderer.xr.enabled = currentXR;
|
|
126
|
-
|
|
127
|
-
//
|
|
128
|
-
|
|
129
|
-
renderer.toneMapping = toneMapping;
|
|
130
|
-
renderer.outputColorSpace = outputColorSpace;
|
|
131
|
-
|
|
132
|
-
if ( this._context.onAfterPostProcessing !== null ) this._context.onAfterPostProcessing();
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Returns the current context of the post processing stack.
|
|
138
|
-
*
|
|
139
|
-
* @readonly
|
|
140
|
-
* @type {?Object}
|
|
141
|
-
*/
|
|
142
|
-
get context() {
|
|
143
|
-
|
|
144
|
-
return this._context;
|
|
145
|
-
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Frees internal resources.
|
|
150
|
-
*/
|
|
151
|
-
dispose() {
|
|
152
|
-
|
|
153
|
-
this._quadMesh.material.dispose();
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Updates the state of the module.
|
|
159
|
-
*
|
|
160
|
-
* @private
|
|
161
|
-
*/
|
|
162
|
-
_update() {
|
|
163
|
-
|
|
164
|
-
if ( this.needsUpdate === true ) {
|
|
165
|
-
|
|
166
|
-
const renderer = this.renderer;
|
|
167
|
-
|
|
168
|
-
const toneMapping = renderer.toneMapping;
|
|
169
|
-
const outputColorSpace = renderer.outputColorSpace;
|
|
170
|
-
|
|
171
|
-
const context = {
|
|
172
|
-
postProcessing: this,
|
|
173
|
-
onBeforePostProcessing: null,
|
|
174
|
-
onAfterPostProcessing: null
|
|
175
|
-
};
|
|
176
|
-
|
|
177
|
-
let outputNode = this.outputNode;
|
|
178
|
-
|
|
179
|
-
if ( this.outputColorTransform === true ) {
|
|
180
|
-
|
|
181
|
-
outputNode = outputNode.context( context );
|
|
182
|
-
|
|
183
|
-
outputNode = renderOutput( outputNode, toneMapping, outputColorSpace );
|
|
184
|
-
|
|
185
|
-
} else {
|
|
186
|
-
|
|
187
|
-
context.toneMapping = toneMapping;
|
|
188
|
-
context.outputColorSpace = outputColorSpace;
|
|
189
|
-
|
|
190
|
-
outputNode = outputNode.context( context );
|
|
191
|
-
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
this._context = context;
|
|
195
|
-
|
|
196
|
-
this._quadMesh.material.fragmentNode = outputNode;
|
|
197
|
-
this._quadMesh.material.needsUpdate = true;
|
|
198
|
-
|
|
199
|
-
this.needsUpdate = false;
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* When `PostProcessing` is used to apply post processing effects,
|
|
207
|
-
* the application must use this version of `renderAsync()` inside
|
|
208
|
-
* its animation loop (not the one from the renderer).
|
|
209
|
-
*
|
|
210
|
-
* @async
|
|
211
|
-
* @deprecated
|
|
212
|
-
* @return {Promise} A Promise that resolves when the render has been finished.
|
|
213
|
-
*/
|
|
214
|
-
async renderAsync() {
|
|
215
|
-
|
|
216
|
-
warnOnce( 'PostProcessing: "renderAsync()" has been deprecated. Use "render()" and "await renderer.init();" when creating the renderer.' ); // @deprecated r181
|
|
18
|
+
constructor( renderer, outputNode ) {
|
|
217
19
|
|
|
218
|
-
|
|
20
|
+
warnOnce( 'PostProcessing: "PostProcessing" has been renamed to "RenderPipeline". Please update your code to use "THREE.RenderPipeline" instead.' ); // @deprecated, r183
|
|
219
21
|
|
|
220
|
-
|
|
22
|
+
super( renderer, outputNode );
|
|
221
23
|
|
|
222
24
|
}
|
|
223
25
|
|
|
@@ -25,6 +25,14 @@ class RenderContext {
|
|
|
25
25
|
*/
|
|
26
26
|
this.id = _id ++;
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* The MRT configuration.
|
|
30
|
+
*
|
|
31
|
+
* @type {?MRTNode}
|
|
32
|
+
* @default null
|
|
33
|
+
*/
|
|
34
|
+
this.mrt = null;
|
|
35
|
+
|
|
28
36
|
/**
|
|
29
37
|
* Whether the current active framebuffer has a color attachment.
|
|
30
38
|
*
|
|
@@ -214,6 +222,14 @@ class RenderContext {
|
|
|
214
222
|
*/
|
|
215
223
|
this.clippingContext = null;
|
|
216
224
|
|
|
225
|
+
/**
|
|
226
|
+
* The current camera.
|
|
227
|
+
*
|
|
228
|
+
* @type {?Camera}
|
|
229
|
+
* @default null
|
|
230
|
+
*/
|
|
231
|
+
this.camera = null;
|
|
232
|
+
|
|
217
233
|
/**
|
|
218
234
|
* This flag can be used for type testing.
|
|
219
235
|
*
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
import ChainMap from './ChainMap.js';
|
|
2
1
|
import RenderContext from './RenderContext.js';
|
|
3
|
-
import { Scene } from '../../scenes/Scene.js';
|
|
4
|
-
import { Camera } from '../../cameras/Camera.js';
|
|
5
|
-
|
|
6
|
-
const _chainKeys = [];
|
|
7
|
-
const _defaultScene = /*@__PURE__*/ new Scene();
|
|
8
|
-
const _defaultCamera = /*@__PURE__*/ new Camera();
|
|
9
2
|
|
|
10
3
|
/**
|
|
11
4
|
* This module manages the render contexts of the renderer.
|
|
@@ -16,38 +9,38 @@ class RenderContexts {
|
|
|
16
9
|
|
|
17
10
|
/**
|
|
18
11
|
* Constructs a new render context management component.
|
|
12
|
+
*
|
|
13
|
+
* @param {Renderer} renderer - The renderer.
|
|
19
14
|
*/
|
|
20
|
-
constructor() {
|
|
15
|
+
constructor( renderer ) {
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The renderer.
|
|
19
|
+
*
|
|
20
|
+
* @type {Renderer}
|
|
21
|
+
*/
|
|
22
|
+
this.renderer = renderer;
|
|
21
23
|
|
|
22
24
|
/**
|
|
23
|
-
* A dictionary that manages render contexts
|
|
24
|
-
* for each attachment state.
|
|
25
|
+
* A dictionary that manages render contexts.
|
|
25
26
|
*
|
|
26
|
-
* @type {Object<string,
|
|
27
|
+
* @type {Object<string,RenderContext>}
|
|
27
28
|
*/
|
|
28
|
-
this.
|
|
29
|
+
this._renderContexts = {};
|
|
29
30
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
/**
|
|
33
34
|
* Returns a render context for the given scene, camera and render target.
|
|
34
35
|
*
|
|
35
|
-
* @param {Scene} scene - The scene.
|
|
36
|
-
* @param {Camera} camera - The camera that is used to render the scene.
|
|
37
36
|
* @param {?RenderTarget} [renderTarget=null] - The active render target.
|
|
38
|
-
* @param {?
|
|
37
|
+
* @param {?MRTNode} [mrt=null] - The MRT configuration
|
|
38
|
+
* @param {?number} [callDepth=0] - The call depth of the renderer.
|
|
39
39
|
* @return {RenderContext} The render context.
|
|
40
40
|
*/
|
|
41
|
-
get(
|
|
42
|
-
|
|
43
|
-
_chainKeys[ 0 ] = scene;
|
|
44
|
-
_chainKeys[ 1 ] = camera;
|
|
45
|
-
|
|
46
|
-
if ( mrt !== null ) {
|
|
41
|
+
get( renderTarget = null, mrt = null, callDepth = 0 ) {
|
|
47
42
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
43
|
+
//
|
|
51
44
|
|
|
52
45
|
let attachmentState;
|
|
53
46
|
|
|
@@ -58,54 +51,38 @@ class RenderContexts {
|
|
|
58
51
|
} else {
|
|
59
52
|
|
|
60
53
|
const format = renderTarget.texture.format;
|
|
54
|
+
const type = renderTarget.texture.type;
|
|
61
55
|
const count = renderTarget.textures.length;
|
|
62
56
|
|
|
63
|
-
attachmentState = `${ count }:${ format }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
|
|
57
|
+
attachmentState = `${ count }:${ format }:${ type }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
|
|
64
58
|
|
|
65
59
|
}
|
|
66
60
|
|
|
67
|
-
|
|
61
|
+
//
|
|
62
|
+
|
|
63
|
+
const mrtState = ( mrt !== null ) ? mrt.id : 'default';
|
|
64
|
+
|
|
65
|
+
//
|
|
68
66
|
|
|
69
|
-
|
|
67
|
+
const renderStateKey = attachmentState + '-' + mrtState + '-' + callDepth;
|
|
68
|
+
|
|
69
|
+
let renderState = this._renderContexts[ renderStateKey ];
|
|
70
70
|
|
|
71
71
|
if ( renderState === undefined ) {
|
|
72
72
|
|
|
73
73
|
renderState = new RenderContext();
|
|
74
|
+
renderState.mrt = mrt;
|
|
74
75
|
|
|
75
|
-
|
|
76
|
+
this._renderContexts[ renderStateKey ] = renderState;
|
|
76
77
|
|
|
77
78
|
}
|
|
78
79
|
|
|
79
|
-
_chainKeys.length = 0;
|
|
80
|
-
|
|
81
80
|
if ( renderTarget !== null ) renderState.sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;
|
|
82
81
|
|
|
83
|
-
|
|
82
|
+
renderState.clearDepthValue = this.renderer.getClearDepth();
|
|
83
|
+
renderState.clearStencilValue = this.renderer.getClearStencil();
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Returns a render context intended for clear operations.
|
|
89
|
-
*
|
|
90
|
-
* @param {?RenderTarget} [renderTarget=null] - The active render target.
|
|
91
|
-
* @return {RenderContext} The render context.
|
|
92
|
-
*/
|
|
93
|
-
getForClear( renderTarget = null ) {
|
|
94
|
-
|
|
95
|
-
return this.get( _defaultScene, _defaultCamera, renderTarget );
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Returns a chain map for the given attachment state.
|
|
101
|
-
*
|
|
102
|
-
* @private
|
|
103
|
-
* @param {string} attachmentState - The attachment state.
|
|
104
|
-
* @return {ChainMap} The chain map.
|
|
105
|
-
*/
|
|
106
|
-
_getChainMap( attachmentState ) {
|
|
107
|
-
|
|
108
|
-
return this.chainMaps[ attachmentState ] || ( this.chainMaps[ attachmentState ] = new ChainMap() );
|
|
85
|
+
return renderState;
|
|
109
86
|
|
|
110
87
|
}
|
|
111
88
|
|
|
@@ -114,7 +91,7 @@ class RenderContexts {
|
|
|
114
91
|
*/
|
|
115
92
|
dispose() {
|
|
116
93
|
|
|
117
|
-
this.
|
|
94
|
+
this._renderContexts = {};
|
|
118
95
|
|
|
119
96
|
}
|
|
120
97
|
|
|
@@ -511,8 +511,7 @@ class RenderObject {
|
|
|
511
511
|
|
|
512
512
|
// geometry attribute
|
|
513
513
|
attribute = geometry.getAttribute( nodeAttribute.name );
|
|
514
|
-
|
|
515
|
-
attributesId[ nodeAttribute.name ] = attribute.version;
|
|
514
|
+
attributesId[ nodeAttribute.name ] = attribute.id;
|
|
516
515
|
|
|
517
516
|
}
|
|
518
517
|
|
|
@@ -882,7 +881,7 @@ class RenderObject {
|
|
|
882
881
|
|
|
883
882
|
}
|
|
884
883
|
|
|
885
|
-
cacheKey = hash( cacheKey, this.
|
|
884
|
+
cacheKey = hash( cacheKey, this.renderer.contextNode.id, this.renderer.contextNode.version );
|
|
886
885
|
|
|
887
886
|
return cacheKey;
|
|
888
887
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import Pipeline from './Pipeline.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Class for representing render pipelines.
|
|
5
|
+
*
|
|
6
|
+
* @private
|
|
7
|
+
* @augments Pipeline
|
|
8
|
+
*/
|
|
9
|
+
class RenderObjectPipeline extends Pipeline {
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Constructs a new render object pipeline.
|
|
13
|
+
*
|
|
14
|
+
* @param {string} cacheKey - The pipeline's cache key.
|
|
15
|
+
* @param {ProgrammableStage} vertexProgram - The pipeline's vertex shader.
|
|
16
|
+
* @param {ProgrammableStage} fragmentProgram - The pipeline's fragment shader.
|
|
17
|
+
*/
|
|
18
|
+
constructor( cacheKey, vertexProgram, fragmentProgram ) {
|
|
19
|
+
|
|
20
|
+
super( cacheKey );
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The pipeline's vertex shader.
|
|
24
|
+
*
|
|
25
|
+
* @type {ProgrammableStage}
|
|
26
|
+
*/
|
|
27
|
+
this.vertexProgram = vertexProgram;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The pipeline's fragment shader.
|
|
31
|
+
*
|
|
32
|
+
* @type {ProgrammableStage}
|
|
33
|
+
*/
|
|
34
|
+
this.fragmentProgram = fragmentProgram;
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default RenderObjectPipeline;
|
|
@@ -91,12 +91,15 @@ class RenderObjects {
|
|
|
91
91
|
|
|
92
92
|
const chainMap = this.getChainMap( passId );
|
|
93
93
|
|
|
94
|
-
//
|
|
94
|
+
// set chain keys
|
|
95
|
+
|
|
95
96
|
_chainKeys[ 0 ] = object;
|
|
96
97
|
_chainKeys[ 1 ] = material;
|
|
97
98
|
_chainKeys[ 2 ] = renderContext;
|
|
98
99
|
_chainKeys[ 3 ] = lightsNode;
|
|
99
100
|
|
|
101
|
+
//
|
|
102
|
+
|
|
100
103
|
let renderObject = chainMap.get( _chainKeys );
|
|
101
104
|
|
|
102
105
|
if ( renderObject === undefined ) {
|
|
@@ -107,6 +110,12 @@ class RenderObjects {
|
|
|
107
110
|
|
|
108
111
|
} else {
|
|
109
112
|
|
|
113
|
+
// update references
|
|
114
|
+
|
|
115
|
+
renderObject.camera = camera;
|
|
116
|
+
|
|
117
|
+
//
|
|
118
|
+
|
|
110
119
|
renderObject.updateClipping( clippingContext );
|
|
111
120
|
|
|
112
121
|
if ( renderObject.needsGeometryUpdate ) {
|
|
@@ -133,7 +142,14 @@ class RenderObjects {
|
|
|
133
142
|
|
|
134
143
|
}
|
|
135
144
|
|
|
136
|
-
|
|
145
|
+
// reset chain array
|
|
146
|
+
|
|
147
|
+
_chainKeys[ 0 ] = null;
|
|
148
|
+
_chainKeys[ 1 ] = null;
|
|
149
|
+
_chainKeys[ 2 ] = null;
|
|
150
|
+
_chainKeys[ 3 ] = null;
|
|
151
|
+
|
|
152
|
+
//
|
|
137
153
|
|
|
138
154
|
return renderObject;
|
|
139
155
|
|