@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
|
@@ -44,6 +44,17 @@ class Binding {
|
|
|
44
44
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* The shader stages in which the binding's resource is visible.
|
|
49
|
+
*
|
|
50
|
+
* @return {number} The visibility bitmask.
|
|
51
|
+
*/
|
|
52
|
+
getVisibility() {
|
|
53
|
+
|
|
54
|
+
return this.visibility;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
47
58
|
/**
|
|
48
59
|
* Clones the binding.
|
|
49
60
|
*
|
|
@@ -164,6 +164,7 @@ class Bindings extends DataMap {
|
|
|
164
164
|
|
|
165
165
|
for ( const bindGroup of bindings ) {
|
|
166
166
|
|
|
167
|
+
this.backend.deleteBindGroupData( bindGroup );
|
|
167
168
|
this.delete( bindGroup );
|
|
168
169
|
|
|
169
170
|
}
|
|
@@ -181,6 +182,7 @@ class Bindings extends DataMap {
|
|
|
181
182
|
|
|
182
183
|
for ( const bindGroup of bindings ) {
|
|
183
184
|
|
|
185
|
+
this.backend.deleteBindGroupData( bindGroup );
|
|
184
186
|
this.delete( bindGroup );
|
|
185
187
|
|
|
186
188
|
}
|
|
@@ -251,24 +253,31 @@ class Bindings extends DataMap {
|
|
|
251
253
|
|
|
252
254
|
for ( const binding of bindGroup.bindings ) {
|
|
253
255
|
|
|
254
|
-
|
|
256
|
+
const updatedGroup = this.nodes.updateGroup( binding );
|
|
255
257
|
|
|
256
|
-
|
|
258
|
+
// every uniforms group is a uniform buffer. So if no update is required,
|
|
259
|
+
// we move one with the next binding. Otherwise the next if block will update the group.
|
|
257
260
|
|
|
258
|
-
|
|
259
|
-
// we move one with the next binding. Otherwise the next if block will update the group.
|
|
261
|
+
if ( updatedGroup === false ) continue;
|
|
260
262
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
}
|
|
263
|
+
//
|
|
264
264
|
|
|
265
265
|
if ( binding.isStorageBuffer ) {
|
|
266
266
|
|
|
267
267
|
const attribute = binding.attribute;
|
|
268
268
|
const attributeType = attribute.isIndirectStorageBufferAttribute ? AttributeType.INDIRECT : AttributeType.STORAGE;
|
|
269
269
|
|
|
270
|
+
const bindingData = backend.get( binding );
|
|
271
|
+
|
|
270
272
|
this.attributes.update( attribute, attributeType );
|
|
271
273
|
|
|
274
|
+
if ( bindingData.attribute !== attribute ) {
|
|
275
|
+
|
|
276
|
+
bindingData.attribute = attribute;
|
|
277
|
+
|
|
278
|
+
needsBindingsUpdate = true;
|
|
279
|
+
|
|
280
|
+
}
|
|
272
281
|
|
|
273
282
|
}
|
|
274
283
|
|
|
@@ -297,7 +306,7 @@ class Bindings extends DataMap {
|
|
|
297
306
|
|
|
298
307
|
this.textures.updateTexture( texture );
|
|
299
308
|
|
|
300
|
-
// generation: update the bindings if a
|
|
309
|
+
// generation: update the bindings if the binding refers to a different texture object
|
|
301
310
|
|
|
302
311
|
if ( binding.generation !== texturesTextureData.generation ) {
|
|
303
312
|
|
|
@@ -305,10 +314,12 @@ class Bindings extends DataMap {
|
|
|
305
314
|
|
|
306
315
|
needsBindingsUpdate = true;
|
|
307
316
|
|
|
308
|
-
cacheBindings = false;
|
|
309
|
-
|
|
310
317
|
}
|
|
311
318
|
|
|
319
|
+
// keep track which bind groups refer to the current texture (this is needed for dispose)
|
|
320
|
+
|
|
321
|
+
texturesTextureData.bindGroups.add( bindGroup );
|
|
322
|
+
|
|
312
323
|
}
|
|
313
324
|
|
|
314
325
|
const textureData = backend.get( texture );
|
|
@@ -356,14 +367,18 @@ class Bindings extends DataMap {
|
|
|
356
367
|
|
|
357
368
|
needsBindingsUpdate = true;
|
|
358
369
|
|
|
359
|
-
cacheBindings = false;
|
|
360
|
-
|
|
361
370
|
}
|
|
362
371
|
|
|
363
372
|
}
|
|
364
373
|
|
|
365
374
|
}
|
|
366
375
|
|
|
376
|
+
if ( binding.isBuffer && binding.updateRanges.length > 0 ) {
|
|
377
|
+
|
|
378
|
+
binding.clearUpdateRanges();
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
|
|
367
382
|
}
|
|
368
383
|
|
|
369
384
|
if ( needsBindingsUpdate === true ) {
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { NormalBlending, AddEquation, SrcAlphaFactor, OneMinusSrcAlphaFactor } from '../../constants.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represents blending configuration.
|
|
5
|
+
*
|
|
6
|
+
* This class encapsulates all blending-related properties that control how
|
|
7
|
+
* a material's colors are combined with the colors already in the frame buffer.
|
|
8
|
+
*/
|
|
9
|
+
class BlendMode {
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Constructs a new blending configuration.
|
|
13
|
+
*
|
|
14
|
+
* @param {(NoBlending|NormalBlending|AdditiveBlending|SubtractiveBlending|MultiplyBlending|CustomBlending|MaterialBlending)} [blending=NormalBlending] - The blending mode.
|
|
15
|
+
*/
|
|
16
|
+
constructor( blending = NormalBlending ) {
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Defines the blending type.
|
|
20
|
+
*
|
|
21
|
+
* It must be set to `CustomBlending` if custom blending properties like
|
|
22
|
+
* {@link BlendMode#blendSrc}, {@link BlendMode#blendDst} or {@link BlendMode#blendEquation}
|
|
23
|
+
* should have any effect.
|
|
24
|
+
*
|
|
25
|
+
* @type {(NoBlending|NormalBlending|AdditiveBlending|SubtractiveBlending|MultiplyBlending|CustomBlending|MaterialBlending)}
|
|
26
|
+
* @default NormalBlending
|
|
27
|
+
*/
|
|
28
|
+
this.blending = blending;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Defines the blending source factor.
|
|
32
|
+
*
|
|
33
|
+
* This determines how the source (incoming) fragment color is factored before being added
|
|
34
|
+
* to the destination (existing) fragment color in the frame buffer.
|
|
35
|
+
*
|
|
36
|
+
* @type {(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
|
|
37
|
+
* @default SrcAlphaFactor
|
|
38
|
+
*/
|
|
39
|
+
this.blendSrc = SrcAlphaFactor;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Defines the blending destination factor.
|
|
43
|
+
*
|
|
44
|
+
* This determines how the destination (existing) fragment color in the frame buffer
|
|
45
|
+
* is factored before being combined with the source (incoming) fragment color.
|
|
46
|
+
*
|
|
47
|
+
* @type {(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
|
|
48
|
+
* @default OneMinusSrcAlphaFactor
|
|
49
|
+
*/
|
|
50
|
+
this.blendDst = OneMinusSrcAlphaFactor;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Defines the blending equation.
|
|
54
|
+
*
|
|
55
|
+
* This determines how the source and destination colors are combined.
|
|
56
|
+
*
|
|
57
|
+
* @type {(AddEquation|SubtractEquation|ReverseSubtractEquation|MinEquation|MaxEquation)}
|
|
58
|
+
* @default AddEquation
|
|
59
|
+
*/
|
|
60
|
+
this.blendEquation = AddEquation;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Defines the blending source alpha factor.
|
|
64
|
+
*
|
|
65
|
+
* When set, this allows separate control of the alpha channel's source blending factor.
|
|
66
|
+
* If `null`, {@link BlendMode#blendSrc} is used for the alpha channel as well.
|
|
67
|
+
*
|
|
68
|
+
* @type {?(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
|
|
69
|
+
* @default null
|
|
70
|
+
*/
|
|
71
|
+
this.blendSrcAlpha = null;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Defines the blending destination alpha factor.
|
|
75
|
+
*
|
|
76
|
+
* When set, this allows separate control of the alpha channel's destination blending factor.
|
|
77
|
+
* If `null`, {@link BlendMode#blendDst} is used for the alpha channel as well.
|
|
78
|
+
*
|
|
79
|
+
* @type {?(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
|
|
80
|
+
* @default null
|
|
81
|
+
*/
|
|
82
|
+
this.blendDstAlpha = null;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Defines the blending equation of the alpha channel.
|
|
86
|
+
*
|
|
87
|
+
* When set, this allows separate control of the alpha channel's blending equation.
|
|
88
|
+
* If `null`, {@link BlendMode#blendEquation} is used for the alpha channel as well.
|
|
89
|
+
*
|
|
90
|
+
* @type {?(AddEquation|SubtractEquation|ReverseSubtractEquation|MinEquation|MaxEquation)}
|
|
91
|
+
* @default null
|
|
92
|
+
*/
|
|
93
|
+
this.blendEquationAlpha = null;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Defines whether to premultiply the alpha (transparency) value.
|
|
97
|
+
*
|
|
98
|
+
* If `true`, the RGB color of the texture or material is multiplied by its alpha value.
|
|
99
|
+
* This is useful for transparent textures/materials where the color data
|
|
100
|
+
* should already include the transparency information.
|
|
101
|
+
*
|
|
102
|
+
* @type {boolean}
|
|
103
|
+
* @default false
|
|
104
|
+
*/
|
|
105
|
+
this.premultiplyAlpha = false;
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Copies the blending properties from the given source to this instance.
|
|
111
|
+
*
|
|
112
|
+
* @param {BlendMode} source - The blending configuration to copy from.
|
|
113
|
+
* @return {BlendMode} A reference to this instance.
|
|
114
|
+
*/
|
|
115
|
+
copy( source ) {
|
|
116
|
+
|
|
117
|
+
this.blending = source.blending;
|
|
118
|
+
this.blendSrc = source.blendSrc;
|
|
119
|
+
this.blendDst = source.blendDst;
|
|
120
|
+
this.blendEquation = source.blendEquation;
|
|
121
|
+
this.blendSrcAlpha = source.blendSrcAlpha;
|
|
122
|
+
this.blendDstAlpha = source.blendDstAlpha;
|
|
123
|
+
this.blendEquationAlpha = source.blendEquationAlpha;
|
|
124
|
+
this.premultiplyAlpha = source.premultiplyAlpha;
|
|
125
|
+
|
|
126
|
+
return this;
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Returns a clone of this blending configuration.
|
|
132
|
+
*
|
|
133
|
+
* @return {BlendMode} A new Blending instance with the same properties.
|
|
134
|
+
*/
|
|
135
|
+
clone() {
|
|
136
|
+
|
|
137
|
+
return new this.constructor().copy( this );
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export default BlendMode;
|
|
@@ -44,6 +44,46 @@ class Buffer extends Binding {
|
|
|
44
44
|
*/
|
|
45
45
|
this._buffer = buffer;
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* An array of update ranges.
|
|
49
|
+
*
|
|
50
|
+
* @private
|
|
51
|
+
* @type {Array<{start: number, count: number}>}
|
|
52
|
+
*/
|
|
53
|
+
this._updateRanges = [];
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The array of update ranges.
|
|
59
|
+
*
|
|
60
|
+
* @type {Array<{start: number, count: number}>}
|
|
61
|
+
*/
|
|
62
|
+
get updateRanges() {
|
|
63
|
+
|
|
64
|
+
return this._updateRanges;
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Adds an update range.
|
|
70
|
+
*
|
|
71
|
+
* @param {number} start - The start index.
|
|
72
|
+
* @param {number} count - The number of elements.
|
|
73
|
+
*/
|
|
74
|
+
addUpdateRange( start, count ) {
|
|
75
|
+
|
|
76
|
+
this.updateRanges.push( { start, count } );
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Clears all update ranges.
|
|
82
|
+
*/
|
|
83
|
+
clearUpdateRanges() {
|
|
84
|
+
|
|
85
|
+
this.updateRanges.length = 0;
|
|
86
|
+
|
|
47
87
|
}
|
|
48
88
|
|
|
49
89
|
/**
|
|
@@ -44,7 +44,7 @@ class BundleGroup extends Group {
|
|
|
44
44
|
/**
|
|
45
45
|
* Whether the bundle is static or not. When set to `true`, the structure
|
|
46
46
|
* is assumed to be static and does not change. E.g. no new objects are
|
|
47
|
-
* added to the group
|
|
47
|
+
* added to the group.
|
|
48
48
|
*
|
|
49
49
|
* If a change is required, an update can still be forced by setting the
|
|
50
50
|
* `needsUpdate` flag to `true`.
|
|
@@ -14,11 +14,35 @@ class ChainMap {
|
|
|
14
14
|
constructor() {
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* A map of Weak Maps by their key length.
|
|
18
18
|
*
|
|
19
|
-
* @type {
|
|
19
|
+
* @type {Object<number, WeakMap>}
|
|
20
20
|
*/
|
|
21
|
-
this.
|
|
21
|
+
this.weakMaps = {};
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Returns the Weak Map for the given keys.
|
|
28
|
+
*
|
|
29
|
+
* @param {Array<Object>} keys - List of keys.
|
|
30
|
+
* @return {WeakMap} The weak map.
|
|
31
|
+
*/
|
|
32
|
+
_getWeakMap( keys ) {
|
|
33
|
+
|
|
34
|
+
const length = keys.length;
|
|
35
|
+
|
|
36
|
+
let weakMap = this.weakMaps[ length ];
|
|
37
|
+
|
|
38
|
+
if ( weakMap === undefined ) {
|
|
39
|
+
|
|
40
|
+
weakMap = new WeakMap();
|
|
41
|
+
this.weakMaps[ length ] = weakMap;
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return weakMap;
|
|
22
46
|
|
|
23
47
|
}
|
|
24
48
|
|
|
@@ -30,7 +54,7 @@ class ChainMap {
|
|
|
30
54
|
*/
|
|
31
55
|
get( keys ) {
|
|
32
56
|
|
|
33
|
-
let map = this.
|
|
57
|
+
let map = this._getWeakMap( keys );
|
|
34
58
|
|
|
35
59
|
for ( let i = 0; i < keys.length - 1; i ++ ) {
|
|
36
60
|
|
|
@@ -53,7 +77,7 @@ class ChainMap {
|
|
|
53
77
|
*/
|
|
54
78
|
set( keys, value ) {
|
|
55
79
|
|
|
56
|
-
let map = this.
|
|
80
|
+
let map = this._getWeakMap( keys );
|
|
57
81
|
|
|
58
82
|
for ( let i = 0; i < keys.length - 1; i ++ ) {
|
|
59
83
|
|
|
@@ -79,7 +103,7 @@ class ChainMap {
|
|
|
79
103
|
*/
|
|
80
104
|
delete( keys ) {
|
|
81
105
|
|
|
82
|
-
let map = this.
|
|
106
|
+
let map = this._getWeakMap( keys );
|
|
83
107
|
|
|
84
108
|
for ( let i = 0; i < keys.length - 1; i ++ ) {
|
|
85
109
|
|
|
@@ -3,22 +3,21 @@ import { texture as TSL_Texture } from '../../nodes/accessors/TextureNode.js';
|
|
|
3
3
|
import { positionWorldDirection } from '../../nodes/accessors/Position.js';
|
|
4
4
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
7
7
|
import { Scene } from '../../scenes/Scene.js';
|
|
8
8
|
import { CubeCamera } from '../../cameras/CubeCamera.js';
|
|
9
9
|
import { BoxGeometry } from '../../geometries/BoxGeometry.js';
|
|
10
10
|
import { Mesh } from '../../objects/Mesh.js';
|
|
11
|
+
import { CubeTexture } from '../../textures/CubeTexture.js';
|
|
11
12
|
import { BackSide, NoBlending, LinearFilter, LinearMipmapLinearFilter } from '../../constants.js';
|
|
12
13
|
|
|
13
|
-
// @TODO: Consider rename WebGLCubeRenderTarget to just CubeRenderTarget
|
|
14
|
-
|
|
15
14
|
/**
|
|
16
15
|
* This class represents a cube render target. It is a special version
|
|
17
16
|
* of `WebGLCubeRenderTarget` which is compatible with `WebGPURenderer`.
|
|
18
17
|
*
|
|
19
|
-
* @augments
|
|
18
|
+
* @augments RenderTarget
|
|
20
19
|
*/
|
|
21
|
-
class CubeRenderTarget extends
|
|
20
|
+
class CubeRenderTarget extends RenderTarget {
|
|
22
21
|
|
|
23
22
|
/**
|
|
24
23
|
* Constructs a new cube render target.
|
|
@@ -28,7 +27,7 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
|
|
|
28
27
|
*/
|
|
29
28
|
constructor( size = 1, options = {} ) {
|
|
30
29
|
|
|
31
|
-
super( size, options );
|
|
30
|
+
super( size, size, options );
|
|
32
31
|
|
|
33
32
|
/**
|
|
34
33
|
* This flag can be used for type testing.
|
|
@@ -39,6 +38,27 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
|
|
|
39
38
|
*/
|
|
40
39
|
this.isCubeRenderTarget = true;
|
|
41
40
|
|
|
41
|
+
const image = { width: size, height: size, depth: 1 };
|
|
42
|
+
const images = [ image, image, image, image, image, image ];
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Overwritten with a different texture type.
|
|
46
|
+
*
|
|
47
|
+
* @type {DataArrayTexture}
|
|
48
|
+
*/
|
|
49
|
+
this.texture = new CubeTexture( images );
|
|
50
|
+
this._setTextureOptions( options );
|
|
51
|
+
|
|
52
|
+
// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)
|
|
53
|
+
// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,
|
|
54
|
+
// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.
|
|
55
|
+
|
|
56
|
+
// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped
|
|
57
|
+
// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture
|
|
58
|
+
// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).
|
|
59
|
+
|
|
60
|
+
this.texture.isRenderTargetTexture = true;
|
|
61
|
+
|
|
42
62
|
}
|
|
43
63
|
|
|
44
64
|
/**
|
|
@@ -98,6 +118,30 @@ class CubeRenderTarget extends WebGLCubeRenderTarget {
|
|
|
98
118
|
|
|
99
119
|
}
|
|
100
120
|
|
|
121
|
+
/**
|
|
122
|
+
* Clears this cube render target.
|
|
123
|
+
*
|
|
124
|
+
* @param {Renderer} renderer - The renderer.
|
|
125
|
+
* @param {boolean} [color=true] - Whether the color buffer should be cleared or not.
|
|
126
|
+
* @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.
|
|
127
|
+
* @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.
|
|
128
|
+
*/
|
|
129
|
+
clear( renderer, color = true, depth = true, stencil = true ) {
|
|
130
|
+
|
|
131
|
+
const currentRenderTarget = renderer.getRenderTarget();
|
|
132
|
+
|
|
133
|
+
for ( let i = 0; i < 6; i ++ ) {
|
|
134
|
+
|
|
135
|
+
renderer.setRenderTarget( this, i );
|
|
136
|
+
|
|
137
|
+
renderer.clear( color, depth, stencil );
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
renderer.setRenderTarget( currentRenderTarget );
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
|
|
101
145
|
}
|
|
102
146
|
|
|
103
147
|
export default CubeRenderTarget;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import { AttributeType } from './Constants.js';
|
|
3
|
-
import { arrayNeedsUint32 } from '../../utils.js';
|
|
4
3
|
|
|
5
4
|
import { Uint16BufferAttribute, Uint32BufferAttribute } from '../../core/BufferAttribute.js';
|
|
6
5
|
|
|
@@ -18,6 +17,20 @@ function getWireframeVersion( geometry ) {
|
|
|
18
17
|
|
|
19
18
|
}
|
|
20
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Returns the wireframe ID for the given geometry.
|
|
22
|
+
*
|
|
23
|
+
* @private
|
|
24
|
+
* @function
|
|
25
|
+
* @param {BufferGeometry} geometry - The geometry.
|
|
26
|
+
* @return {number} The ID.
|
|
27
|
+
*/
|
|
28
|
+
function getWireframeId( geometry ) {
|
|
29
|
+
|
|
30
|
+
return ( geometry.index !== null ) ? geometry.index.id : geometry.attributes.position.id;
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
21
34
|
/**
|
|
22
35
|
* Returns a wireframe index attribute for the given geometry.
|
|
23
36
|
*
|
|
@@ -63,8 +76,9 @@ function getWireframeIndex( geometry ) {
|
|
|
63
76
|
|
|
64
77
|
}
|
|
65
78
|
|
|
66
|
-
const attribute = new (
|
|
79
|
+
const attribute = new ( geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
|
|
67
80
|
attribute.version = getWireframeVersion( geometry );
|
|
81
|
+
attribute.__id = getWireframeId( geometry );
|
|
68
82
|
|
|
69
83
|
return attribute;
|
|
70
84
|
|
|
@@ -310,6 +324,18 @@ class Geometries extends DataMap {
|
|
|
310
324
|
|
|
311
325
|
}
|
|
312
326
|
|
|
327
|
+
/**
|
|
328
|
+
* Returns the byte offset into the indirect attribute buffer of the given render object.
|
|
329
|
+
*
|
|
330
|
+
* @param {RenderObject} renderObject - The render object.
|
|
331
|
+
* @return {number} The byte offset into the indirect attribute buffer.
|
|
332
|
+
*/
|
|
333
|
+
getIndirectOffset( renderObject ) {
|
|
334
|
+
|
|
335
|
+
return renderObject.geometry.indirectOffset;
|
|
336
|
+
|
|
337
|
+
}
|
|
338
|
+
|
|
313
339
|
/**
|
|
314
340
|
* Returns the index of the given render object's geometry. This is implemented
|
|
315
341
|
* in a method to return a wireframe index if necessary.
|
|
@@ -335,7 +361,7 @@ class Geometries extends DataMap {
|
|
|
335
361
|
|
|
336
362
|
wireframes.set( geometry, wireframeAttribute );
|
|
337
363
|
|
|
338
|
-
} else if ( wireframeAttribute.version !== getWireframeVersion( geometry ) ) {
|
|
364
|
+
} else if ( wireframeAttribute.version !== getWireframeVersion( geometry ) || wireframeAttribute.__id !== getWireframeId( geometry ) ) {
|
|
339
365
|
|
|
340
366
|
this.attributes.delete( wireframeAttribute );
|
|
341
367
|
|
|
@@ -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
|
|