@plastic-software/three 0.181.3 → 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/README.md +3 -4
- package/build/three.cjs +11330 -10017
- package/build/three.core.js +10011 -9493
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1414 -631
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +21 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +8007 -5427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +8005 -5426
- 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/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +109 -6
- package/examples/jsm/controls/TrackballControls.js +6 -6
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -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/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Inspector.js +74 -14
- package/examples/jsm/inspector/RendererInspector.js +12 -2
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Parameters.js +18 -2
- package/examples/jsm/inspector/tabs/Performance.js +2 -2
- package/examples/jsm/inspector/tabs/Viewer.js +4 -4
- package/examples/jsm/inspector/ui/Profiler.js +1836 -31
- package/examples/jsm/inspector/ui/Style.js +973 -14
- package/examples/jsm/inspector/ui/Tab.js +188 -1
- package/examples/jsm/inspector/ui/Values.js +17 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- 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/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -4
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/HDRLoader.js +0 -1
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +19 -3
- package/examples/jsm/loaders/LDrawLoader.js +2 -3
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +1 -1
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- 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/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +127 -10
- 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/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +268 -30
- package/examples/jsm/renderers/SVGRenderer.js +193 -60
- 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/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -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 +16 -6
- 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 +5 -4
- 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 +7 -6
- 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 +8 -20
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TRAANode.js +273 -125
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/math/Bayer.js +40 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/package.json +20 -26
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +19 -11
- 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/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- 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 +90 -5
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- 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 +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- 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/MaterialLoader.js +2 -1
- package/src/loaders/ObjectLoader.js +21 -2
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +7 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +72 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +74 -65
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Vector3.js +3 -5
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +6 -6
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +98 -12
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +20 -1
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
- package/src/nodes/accessors/ReferenceNode.js +4 -4
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +4 -21
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +4 -2
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionNode.js +1 -2
- package/src/nodes/core/ArrayNode.js +20 -1
- package/src/nodes/core/AssignNode.js +2 -2
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +103 -4
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +170 -53
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +10 -8
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +3 -3
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +65 -16
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +16 -2
- package/src/nodes/core/StructTypeNode.js +11 -17
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +47 -22
- 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 +39 -4
- package/src/nodes/display/PassNode.js +98 -9
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +3 -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/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +2 -2
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +97 -41
- package/src/nodes/math/BitcountNode.js +433 -0
- 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/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLCore.js +17 -14
- package/src/nodes/utils/ArrayElementNode.js +13 -0
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/EventNode.js +1 -2
- 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/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +27 -14
- package/src/objects/InstancedMesh.js +11 -0
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/renderers/WebGLRenderer.js +178 -92
- package/src/renderers/common/Backend.js +29 -0
- package/src/renderers/common/Background.js +24 -11
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +27 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +29 -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 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +15 -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 +257 -72
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +17 -1
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +61 -0
- package/src/renderers/common/XRManager.js +3 -2
- package/src/renderers/common/extras/PMREMGenerator.js +2 -8
- 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/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- 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_begin.glsl.js +5 -2
- 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_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +3 -3
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -5
- 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/WebGLCapabilities.js +3 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +45 -109
- package/src/renderers/webgl/WebGLPrograms.js +45 -49
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +32 -37
- package/src/renderers/webgl/WebGLTextures.js +89 -28
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
- package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +119 -13
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +3 -3
- package/src/utils.js +258 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- 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/functions/BSDF/DFGApprox.js +0 -71
- 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,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,31 +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 ) {
|
|
21
16
|
|
|
22
17
|
/**
|
|
23
|
-
*
|
|
24
|
-
* for each attachment state.
|
|
18
|
+
* The renderer.
|
|
25
19
|
*
|
|
26
|
-
* @type {
|
|
20
|
+
* @type {Renderer}
|
|
27
21
|
*/
|
|
28
|
-
this.
|
|
22
|
+
this.renderer = renderer;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A dictionary that manages render contexts.
|
|
26
|
+
*
|
|
27
|
+
* @type {Object<string,RenderContext>}
|
|
28
|
+
*/
|
|
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.
|
|
37
|
+
* @param {?MRTNode} [mrt=null] - The MRT configuration
|
|
38
|
+
* @param {?number} [callDepth=0] - The call depth of the renderer.
|
|
38
39
|
* @return {RenderContext} The render context.
|
|
39
40
|
*/
|
|
40
|
-
get(
|
|
41
|
+
get( renderTarget = null, mrt = null, callDepth = 0 ) {
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
_chainKeys[ 1 ] = camera;
|
|
43
|
+
//
|
|
44
44
|
|
|
45
45
|
let attachmentState;
|
|
46
46
|
|
|
@@ -51,54 +51,38 @@ class RenderContexts {
|
|
|
51
51
|
} else {
|
|
52
52
|
|
|
53
53
|
const format = renderTarget.texture.format;
|
|
54
|
+
const type = renderTarget.texture.type;
|
|
54
55
|
const count = renderTarget.textures.length;
|
|
55
56
|
|
|
56
|
-
attachmentState = `${ count }:${ format }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
|
|
57
|
+
attachmentState = `${ count }:${ format }:${ type }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
|
|
57
58
|
|
|
58
59
|
}
|
|
59
60
|
|
|
60
|
-
|
|
61
|
+
//
|
|
62
|
+
|
|
63
|
+
const mrtState = ( mrt !== null ) ? mrt.id : 'default';
|
|
61
64
|
|
|
62
|
-
|
|
65
|
+
//
|
|
66
|
+
|
|
67
|
+
const renderStateKey = attachmentState + '-' + mrtState + '-' + callDepth;
|
|
68
|
+
|
|
69
|
+
let renderState = this._renderContexts[ renderStateKey ];
|
|
63
70
|
|
|
64
71
|
if ( renderState === undefined ) {
|
|
65
72
|
|
|
66
73
|
renderState = new RenderContext();
|
|
74
|
+
renderState.mrt = mrt;
|
|
67
75
|
|
|
68
|
-
|
|
76
|
+
this._renderContexts[ renderStateKey ] = renderState;
|
|
69
77
|
|
|
70
78
|
}
|
|
71
79
|
|
|
72
|
-
_chainKeys.length = 0;
|
|
73
|
-
|
|
74
80
|
if ( renderTarget !== null ) renderState.sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;
|
|
75
81
|
|
|
76
|
-
|
|
82
|
+
renderState.clearDepthValue = this.renderer.getClearDepth();
|
|
83
|
+
renderState.clearStencilValue = this.renderer.getClearStencil();
|
|
77
84
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Returns a render context intended for clear operations.
|
|
82
|
-
*
|
|
83
|
-
* @param {?RenderTarget} [renderTarget=null] - The active render target.
|
|
84
|
-
* @return {RenderContext} The render context.
|
|
85
|
-
*/
|
|
86
|
-
getForClear( renderTarget = null ) {
|
|
87
|
-
|
|
88
|
-
return this.get( _defaultScene, _defaultCamera, renderTarget );
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Returns a chain map for the given attachment state.
|
|
94
|
-
*
|
|
95
|
-
* @private
|
|
96
|
-
* @param {string} attachmentState - The attachment state.
|
|
97
|
-
* @return {ChainMap} The chain map.
|
|
98
|
-
*/
|
|
99
|
-
_getChainMap( attachmentState ) {
|
|
100
|
-
|
|
101
|
-
return this.chainMaps[ attachmentState ] || ( this.chainMaps[ attachmentState ] = new ChainMap() );
|
|
85
|
+
return renderState;
|
|
102
86
|
|
|
103
87
|
}
|
|
104
88
|
|
|
@@ -107,7 +91,7 @@ class RenderContexts {
|
|
|
107
91
|
*/
|
|
108
92
|
dispose() {
|
|
109
93
|
|
|
110
|
-
this.
|
|
94
|
+
this._renderContexts = {};
|
|
111
95
|
|
|
112
96
|
}
|
|
113
97
|
|
|
@@ -444,6 +444,17 @@ class RenderObject {
|
|
|
444
444
|
|
|
445
445
|
}
|
|
446
446
|
|
|
447
|
+
/**
|
|
448
|
+
* Returns the byte offset into the indirect attribute buffer.
|
|
449
|
+
*
|
|
450
|
+
* @return {number|Array<number>} The byte offset into the indirect attribute buffer.
|
|
451
|
+
*/
|
|
452
|
+
getIndirectOffset() {
|
|
453
|
+
|
|
454
|
+
return this._geometries.getIndirectOffset( this );
|
|
455
|
+
|
|
456
|
+
}
|
|
457
|
+
|
|
447
458
|
/**
|
|
448
459
|
* Returns an array that acts as a key for identifying the render object in a chain map.
|
|
449
460
|
*
|
|
@@ -500,8 +511,7 @@ class RenderObject {
|
|
|
500
511
|
|
|
501
512
|
// geometry attribute
|
|
502
513
|
attribute = geometry.getAttribute( nodeAttribute.name );
|
|
503
|
-
|
|
504
|
-
attributesId[ nodeAttribute.name ] = attribute.version;
|
|
514
|
+
attributesId[ nodeAttribute.name ] = attribute.id;
|
|
505
515
|
|
|
506
516
|
}
|
|
507
517
|
|
|
@@ -778,6 +788,8 @@ class RenderObject {
|
|
|
778
788
|
|
|
779
789
|
}
|
|
780
790
|
|
|
791
|
+
cacheKey += this.context.id + ',';
|
|
792
|
+
|
|
781
793
|
cacheKey += object.receiveShadow + ',';
|
|
782
794
|
|
|
783
795
|
return hashString( cacheKey );
|
|
@@ -869,7 +881,7 @@ class RenderObject {
|
|
|
869
881
|
|
|
870
882
|
}
|
|
871
883
|
|
|
872
|
-
cacheKey = hash( cacheKey, this.
|
|
884
|
+
cacheKey = hash( cacheKey, this.renderer.contextNode.id, this.renderer.contextNode.version );
|
|
873
885
|
|
|
874
886
|
return cacheKey;
|
|
875
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
|
|