@plastic-software/three 0.174.0 → 0.175.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +10744 -1476
- package/build/three.core.js +9633 -1096
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +918 -189
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1432 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +58 -1
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
- package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +6 -5
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLProgram.js +25 -5
- package/src/renderers/webgl/WebGLPrograms.js +21 -7
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
package/examples/jsm/csm/CSM.js
CHANGED
|
@@ -20,38 +20,179 @@ const _lightOrientationMatrix = new Matrix4();
|
|
|
20
20
|
const _lightOrientationMatrixInverse = new Matrix4();
|
|
21
21
|
const _up = new Vector3( 0, 1, 0 );
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* An implementation of Cascade Shadow Maps (CSM).
|
|
25
|
+
*
|
|
26
|
+
* This module can only be used with {@link WebGLRenderer}. When using {@link WebGPURenderer},
|
|
27
|
+
* use {@link CSMShadowNode} instead.
|
|
28
|
+
*/
|
|
23
29
|
export class CSM {
|
|
24
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Constructs a new CSM instance.
|
|
33
|
+
*
|
|
34
|
+
* @param {CSM~Data} data - The CSM data.
|
|
35
|
+
*/
|
|
25
36
|
constructor( data ) {
|
|
26
37
|
|
|
38
|
+
/**
|
|
39
|
+
* The scene's camera.
|
|
40
|
+
*
|
|
41
|
+
* @type {Camera}
|
|
42
|
+
*/
|
|
27
43
|
this.camera = data.camera;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The parent object, usually the scene.
|
|
47
|
+
*
|
|
48
|
+
* @type {Object3D}
|
|
49
|
+
*/
|
|
28
50
|
this.parent = data.parent;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The number of cascades.
|
|
54
|
+
*
|
|
55
|
+
* @type {number}
|
|
56
|
+
* @default 3
|
|
57
|
+
*/
|
|
29
58
|
this.cascades = data.cascades || 3;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The maximum far value.
|
|
62
|
+
*
|
|
63
|
+
* @type {number}
|
|
64
|
+
* @default 100000
|
|
65
|
+
*/
|
|
30
66
|
this.maxFar = data.maxFar || 100000;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The frustum split mode.
|
|
70
|
+
*
|
|
71
|
+
* @type {('practical'|'uniform'|'logarithmic'|'custom')}
|
|
72
|
+
* @default 'practical'
|
|
73
|
+
*/
|
|
31
74
|
this.mode = data.mode || 'practical';
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The shadow map size.
|
|
78
|
+
*
|
|
79
|
+
* @type {number}
|
|
80
|
+
* @default 2048
|
|
81
|
+
*/
|
|
32
82
|
this.shadowMapSize = data.shadowMapSize || 2048;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The shadow bias.
|
|
86
|
+
*
|
|
87
|
+
* @type {number}
|
|
88
|
+
* @default 0.000001
|
|
89
|
+
*/
|
|
33
90
|
this.shadowBias = data.shadowBias || 0.000001;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The light direction.
|
|
94
|
+
*
|
|
95
|
+
* @type {Vector3}
|
|
96
|
+
*/
|
|
34
97
|
this.lightDirection = data.lightDirection || new Vector3( 1, - 1, 1 ).normalize();
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* The light intensity.
|
|
101
|
+
*
|
|
102
|
+
* @type {number}
|
|
103
|
+
* @default 3
|
|
104
|
+
*/
|
|
35
105
|
this.lightIntensity = data.lightIntensity || 3;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* The light near value.
|
|
109
|
+
*
|
|
110
|
+
* @type {number}
|
|
111
|
+
* @default 1
|
|
112
|
+
*/
|
|
36
113
|
this.lightNear = data.lightNear || 1;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The light far value.
|
|
117
|
+
*
|
|
118
|
+
* @type {number}
|
|
119
|
+
* @default 2000
|
|
120
|
+
*/
|
|
37
121
|
this.lightFar = data.lightFar || 2000;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* The light margin.
|
|
125
|
+
*
|
|
126
|
+
* @type {number}
|
|
127
|
+
* @default 200
|
|
128
|
+
*/
|
|
38
129
|
this.lightMargin = data.lightMargin || 200;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Custom split callback when using `mode='custom'`.
|
|
133
|
+
*
|
|
134
|
+
* @type {Function}
|
|
135
|
+
*/
|
|
39
136
|
this.customSplitsCallback = data.customSplitsCallback;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Whether to fade between cascades or not.
|
|
140
|
+
*
|
|
141
|
+
* @type {boolean}
|
|
142
|
+
* @default false
|
|
143
|
+
*/
|
|
40
144
|
this.fade = false;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* The main frustum.
|
|
148
|
+
*
|
|
149
|
+
* @type {CSMFrustum}
|
|
150
|
+
*/
|
|
41
151
|
this.mainFrustum = new CSMFrustum( { webGL: true } );
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* An array of frustums representing the cascades.
|
|
155
|
+
*
|
|
156
|
+
* @type {Array<CSMFrustum>}
|
|
157
|
+
*/
|
|
42
158
|
this.frustums = [];
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* An array of numbers in the range `[0,1]` the defines how the
|
|
162
|
+
* mainCSM frustum should be split up.
|
|
163
|
+
*
|
|
164
|
+
* @type {Array<number>}
|
|
165
|
+
*/
|
|
43
166
|
this.breaks = [];
|
|
44
167
|
|
|
168
|
+
/**
|
|
169
|
+
* An array of directional lights which cast the shadows for
|
|
170
|
+
* the different cascades. There is one directional light for each
|
|
171
|
+
* cascade.
|
|
172
|
+
*
|
|
173
|
+
* @type {Array<DirectionalLight>}
|
|
174
|
+
*/
|
|
45
175
|
this.lights = [];
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* A Map holding enhanced material shaders.
|
|
179
|
+
*
|
|
180
|
+
* @type {Map<Material,Object>}
|
|
181
|
+
*/
|
|
46
182
|
this.shaders = new Map();
|
|
47
183
|
|
|
48
|
-
this.
|
|
184
|
+
this._createLights();
|
|
49
185
|
this.updateFrustums();
|
|
50
|
-
this.
|
|
186
|
+
this._injectInclude();
|
|
51
187
|
|
|
52
188
|
}
|
|
53
189
|
|
|
54
|
-
|
|
190
|
+
/**
|
|
191
|
+
* Creates the directional lights of this CSM instance.
|
|
192
|
+
*
|
|
193
|
+
* @private
|
|
194
|
+
*/
|
|
195
|
+
_createLights() {
|
|
55
196
|
|
|
56
197
|
for ( let i = 0; i < this.cascades; i ++ ) {
|
|
57
198
|
|
|
@@ -72,7 +213,12 @@ export class CSM {
|
|
|
72
213
|
|
|
73
214
|
}
|
|
74
215
|
|
|
75
|
-
|
|
216
|
+
/**
|
|
217
|
+
* Inits the cascades according to the scene's camera and breaks configuration.
|
|
218
|
+
*
|
|
219
|
+
* @private
|
|
220
|
+
*/
|
|
221
|
+
_initCascades() {
|
|
76
222
|
|
|
77
223
|
const camera = this.camera;
|
|
78
224
|
camera.updateProjectionMatrix();
|
|
@@ -81,7 +227,12 @@ export class CSM {
|
|
|
81
227
|
|
|
82
228
|
}
|
|
83
229
|
|
|
84
|
-
|
|
230
|
+
/**
|
|
231
|
+
* Updates the shadow bounds of this CSM instance.
|
|
232
|
+
*
|
|
233
|
+
* @private
|
|
234
|
+
*/
|
|
235
|
+
_updateShadowBounds() {
|
|
85
236
|
|
|
86
237
|
const frustums = this.frustums;
|
|
87
238
|
for ( let i = 0; i < frustums.length; i ++ ) {
|
|
@@ -130,7 +281,13 @@ export class CSM {
|
|
|
130
281
|
|
|
131
282
|
}
|
|
132
283
|
|
|
133
|
-
|
|
284
|
+
/**
|
|
285
|
+
* Computes the breaks of this CSM instance based on the scene's camera, number of cascades
|
|
286
|
+
* and the selected split mode.
|
|
287
|
+
*
|
|
288
|
+
* @private
|
|
289
|
+
*/
|
|
290
|
+
_getBreaks() {
|
|
134
291
|
|
|
135
292
|
const camera = this.camera;
|
|
136
293
|
const far = Math.min( camera.far, this.maxFar );
|
|
@@ -197,6 +354,10 @@ export class CSM {
|
|
|
197
354
|
|
|
198
355
|
}
|
|
199
356
|
|
|
357
|
+
/**
|
|
358
|
+
* Updates the CSM. This method must be called in your animation loop before
|
|
359
|
+
* calling `renderer.render()`.
|
|
360
|
+
*/
|
|
200
361
|
update() {
|
|
201
362
|
|
|
202
363
|
const camera = this.camera;
|
|
@@ -243,13 +404,23 @@ export class CSM {
|
|
|
243
404
|
|
|
244
405
|
}
|
|
245
406
|
|
|
246
|
-
|
|
407
|
+
/**
|
|
408
|
+
* Injects the CSM shader enhancements into the built-in materials.
|
|
409
|
+
*
|
|
410
|
+
* @private
|
|
411
|
+
*/
|
|
412
|
+
_injectInclude() {
|
|
247
413
|
|
|
248
414
|
ShaderChunk.lights_fragment_begin = CSMShader.lights_fragment_begin;
|
|
249
415
|
ShaderChunk.lights_pars_begin = CSMShader.lights_pars_begin;
|
|
250
416
|
|
|
251
417
|
}
|
|
252
418
|
|
|
419
|
+
/**
|
|
420
|
+
* Applications must call this method for all materials that should be affected by CSM.
|
|
421
|
+
*
|
|
422
|
+
* @param {Material} material - The material to setup for CSM support.
|
|
423
|
+
*/
|
|
253
424
|
setupMaterial( material ) {
|
|
254
425
|
|
|
255
426
|
material.defines = material.defines || {};
|
|
@@ -269,7 +440,7 @@ export class CSM {
|
|
|
269
440
|
material.onBeforeCompile = function ( shader ) {
|
|
270
441
|
|
|
271
442
|
const far = Math.min( scope.camera.far, scope.maxFar );
|
|
272
|
-
scope.
|
|
443
|
+
scope._getExtendedBreaks( breaksVec2 );
|
|
273
444
|
|
|
274
445
|
shader.uniforms.CSM_cascades = { value: breaksVec2 };
|
|
275
446
|
shader.uniforms.cameraNear = { value: scope.camera.near };
|
|
@@ -283,7 +454,12 @@ export class CSM {
|
|
|
283
454
|
|
|
284
455
|
}
|
|
285
456
|
|
|
286
|
-
|
|
457
|
+
/**
|
|
458
|
+
* Updates the CSM uniforms.
|
|
459
|
+
*
|
|
460
|
+
* @private
|
|
461
|
+
*/
|
|
462
|
+
_updateUniforms() {
|
|
287
463
|
|
|
288
464
|
const far = Math.min( this.camera.far, this.maxFar );
|
|
289
465
|
const shaders = this.shaders;
|
|
@@ -293,7 +469,7 @@ export class CSM {
|
|
|
293
469
|
if ( shader !== null ) {
|
|
294
470
|
|
|
295
471
|
const uniforms = shader.uniforms;
|
|
296
|
-
this.
|
|
472
|
+
this._getExtendedBreaks( uniforms.CSM_cascades.value );
|
|
297
473
|
uniforms.cameraNear.value = this.camera.near;
|
|
298
474
|
uniforms.shadowFar.value = far;
|
|
299
475
|
|
|
@@ -315,7 +491,13 @@ export class CSM {
|
|
|
315
491
|
|
|
316
492
|
}
|
|
317
493
|
|
|
318
|
-
|
|
494
|
+
/**
|
|
495
|
+
* Computes the extended breaks for the CSM uniforms.
|
|
496
|
+
*
|
|
497
|
+
* @private
|
|
498
|
+
* @param {Array<Vector2>} target - The target array that holds the extended breaks.
|
|
499
|
+
*/
|
|
500
|
+
_getExtendedBreaks( target ) {
|
|
319
501
|
|
|
320
502
|
while ( target.length < this.breaks.length ) {
|
|
321
503
|
|
|
@@ -336,15 +518,21 @@ export class CSM {
|
|
|
336
518
|
|
|
337
519
|
}
|
|
338
520
|
|
|
521
|
+
/**
|
|
522
|
+
* Applications must call this method every time they change camera or CSM settings.
|
|
523
|
+
*/
|
|
339
524
|
updateFrustums() {
|
|
340
525
|
|
|
341
|
-
this.
|
|
342
|
-
this.
|
|
343
|
-
this.
|
|
344
|
-
this.
|
|
526
|
+
this._getBreaks();
|
|
527
|
+
this._initCascades();
|
|
528
|
+
this._updateShadowBounds();
|
|
529
|
+
this._updateUniforms();
|
|
345
530
|
|
|
346
531
|
}
|
|
347
532
|
|
|
533
|
+
/**
|
|
534
|
+
* Applications must call this method when they remove the CSM usage from their scene.
|
|
535
|
+
*/
|
|
348
536
|
remove() {
|
|
349
537
|
|
|
350
538
|
for ( let i = 0; i < this.lights.length; i ++ ) {
|
|
@@ -356,6 +544,10 @@ export class CSM {
|
|
|
356
544
|
|
|
357
545
|
}
|
|
358
546
|
|
|
547
|
+
/**
|
|
548
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
549
|
+
* method whenever this instance is no longer used in your app.
|
|
550
|
+
*/
|
|
359
551
|
dispose() {
|
|
360
552
|
|
|
361
553
|
const shaders = this.shaders;
|
|
@@ -382,3 +574,22 @@ export class CSM {
|
|
|
382
574
|
}
|
|
383
575
|
|
|
384
576
|
}
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* Constructor data of `CSM`.
|
|
580
|
+
*
|
|
581
|
+
* @typedef {Object} CSM~Data
|
|
582
|
+
* @property {Camera} camera - The scene's camera.
|
|
583
|
+
* @property {Object3D} parent - The parent object, usually the scene.
|
|
584
|
+
* @property {number} [cascades=3] - The number of cascades.
|
|
585
|
+
* @property {number} [maxFar=100000] - The maximum far value.
|
|
586
|
+
* @property {('practical'|'uniform'|'logarithmic'|'custom')} [mode='practical'] - The frustum split mode.
|
|
587
|
+
* @property {Function} [customSplitsCallback] - Custom split callback when using `mode='custom'`.
|
|
588
|
+
* @property {number} [shadowMapSize=2048] - The shadow map size.
|
|
589
|
+
* @property {number} [shadowBias=0.000001] - The shadow bias.
|
|
590
|
+
* @property {Vector3} [lightDirection] - The light direction.
|
|
591
|
+
* @property {number} [lightIntensity=3] - The light intensity.
|
|
592
|
+
* @property {number} [lightNear=1] - The light near value.
|
|
593
|
+
* @property {number} [lightNear=2000] - The light far value.
|
|
594
|
+
* @property {number} [lightMargin=200] - The light margin.
|
|
595
|
+
**/
|
|
@@ -2,14 +2,35 @@ import { Vector3, Matrix4 } from 'three';
|
|
|
2
2
|
|
|
3
3
|
const inverseProjectionMatrix = new Matrix4();
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Represents the frustum of a CSM instance.
|
|
7
|
+
*/
|
|
5
8
|
class CSMFrustum {
|
|
6
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Constructs a new CSM frustum.
|
|
12
|
+
*
|
|
13
|
+
* @param {CSMFrustum~Data} [data] - The CSM data.
|
|
14
|
+
*/
|
|
7
15
|
constructor( data ) {
|
|
8
16
|
|
|
9
17
|
data = data || {};
|
|
10
18
|
|
|
19
|
+
/**
|
|
20
|
+
* The zNear value. This value depends on whether the CSM
|
|
21
|
+
* is used with WebGL or WebGPU. Both API use different
|
|
22
|
+
* conventions for their projection matrices.
|
|
23
|
+
*
|
|
24
|
+
* @type {number}
|
|
25
|
+
*/
|
|
11
26
|
this.zNear = data.webGL === true ? - 1 : 0;
|
|
12
27
|
|
|
28
|
+
/**
|
|
29
|
+
* An object representing the vertices of the near and
|
|
30
|
+
* far plane in view space.
|
|
31
|
+
*
|
|
32
|
+
* @type {Object}
|
|
33
|
+
*/
|
|
13
34
|
this.vertices = {
|
|
14
35
|
near: [
|
|
15
36
|
new Vector3(),
|
|
@@ -33,6 +54,13 @@ class CSMFrustum {
|
|
|
33
54
|
|
|
34
55
|
}
|
|
35
56
|
|
|
57
|
+
/**
|
|
58
|
+
* Setups this CSM frustum from the given projection matrix and max far value.
|
|
59
|
+
*
|
|
60
|
+
* @param {Matrix4} projectionMatrix - The projection matrix, usually of the scene's camera.
|
|
61
|
+
* @param {number} maxFar - The maximum far value.
|
|
62
|
+
* @returns {Object} An object representing the vertices of the near and far plane in view space.
|
|
63
|
+
*/
|
|
36
64
|
setFromProjectionMatrix( projectionMatrix, maxFar ) {
|
|
37
65
|
|
|
38
66
|
const zNear = this.zNear;
|
|
@@ -80,6 +108,14 @@ class CSMFrustum {
|
|
|
80
108
|
|
|
81
109
|
}
|
|
82
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Splits the CSM frustum by the given array. The new CSM frustum are pushed into the given
|
|
113
|
+
* target array.
|
|
114
|
+
*
|
|
115
|
+
* @param {Array<number>} breaks - An array of numbers in the range `[0,1]` the defines how the
|
|
116
|
+
* CSM frustum should be split up.
|
|
117
|
+
* @param {Array<CSMFrustum>} target - The target array that holds the new CSM frustums.
|
|
118
|
+
*/
|
|
83
119
|
split( breaks, target ) {
|
|
84
120
|
|
|
85
121
|
while ( breaks.length > target.length ) {
|
|
@@ -134,6 +170,13 @@ class CSMFrustum {
|
|
|
134
170
|
|
|
135
171
|
}
|
|
136
172
|
|
|
173
|
+
/**
|
|
174
|
+
* Transforms the given target CSM frustum into the different coordinate system defined by the
|
|
175
|
+
* given camera matrix.
|
|
176
|
+
*
|
|
177
|
+
* @param {Matrix4} cameraMatrix - The matrix that defines the new coordinate system.
|
|
178
|
+
* @param {CSMFrustum} target - The CSM to convert.
|
|
179
|
+
*/
|
|
137
180
|
toSpace( cameraMatrix, target ) {
|
|
138
181
|
|
|
139
182
|
for ( let i = 0; i < 4; i ++ ) {
|
|
@@ -152,4 +195,13 @@ class CSMFrustum {
|
|
|
152
195
|
|
|
153
196
|
}
|
|
154
197
|
|
|
198
|
+
/**
|
|
199
|
+
* Constructor data of `CSMFrustum`.
|
|
200
|
+
*
|
|
201
|
+
* @typedef {Object} CSMFrustum~Data
|
|
202
|
+
* @property {boolean} [webGL] - Whether this CSM frustum is used with WebGL or WebGPU.
|
|
203
|
+
* @property {Matrix4} [projectionMatrix] - A projection matrix usually of the scene's camera.
|
|
204
|
+
* @property {number} [maxFar] - The maximum far value.
|
|
205
|
+
**/
|
|
206
|
+
|
|
155
207
|
export { CSMFrustum };
|
|
@@ -12,14 +12,51 @@ import {
|
|
|
12
12
|
DoubleSide
|
|
13
13
|
} from 'three';
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* A helper for visualizing the cascades of a CSM instance.
|
|
17
|
+
*
|
|
18
|
+
* @augments Group
|
|
19
|
+
*/
|
|
15
20
|
class CSMHelper extends Group {
|
|
16
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new CSM helper.
|
|
24
|
+
*
|
|
25
|
+
* @param {CSM|CSMShadowNode} csm - The CSM instance to visualize.
|
|
26
|
+
*/
|
|
17
27
|
constructor( csm ) {
|
|
18
28
|
|
|
19
29
|
super();
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The CSM instance to visualize.
|
|
33
|
+
*
|
|
34
|
+
* @type {CSM|CSMShadowNode}
|
|
35
|
+
*/
|
|
20
36
|
this.csm = csm;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Whether to display the CSM frustum or not.
|
|
40
|
+
*
|
|
41
|
+
* @type {boolean}
|
|
42
|
+
* @default true
|
|
43
|
+
*/
|
|
21
44
|
this.displayFrustum = true;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Whether to display the cascade planes or not.
|
|
48
|
+
*
|
|
49
|
+
* @type {boolean}
|
|
50
|
+
* @default true
|
|
51
|
+
*/
|
|
22
52
|
this.displayPlanes = true;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Whether to display the shadow bounds or not.
|
|
56
|
+
*
|
|
57
|
+
* @type {boolean}
|
|
58
|
+
* @default true
|
|
59
|
+
*/
|
|
23
60
|
this.displayShadowBounds = true;
|
|
24
61
|
|
|
25
62
|
const indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );
|
|
@@ -37,6 +74,9 @@ class CSMHelper extends Group {
|
|
|
37
74
|
|
|
38
75
|
}
|
|
39
76
|
|
|
77
|
+
/**
|
|
78
|
+
* This method must be called if one of the `display*` properties is changed at runtime.
|
|
79
|
+
*/
|
|
40
80
|
updateVisibility() {
|
|
41
81
|
|
|
42
82
|
const displayFrustum = this.displayFrustum;
|
|
@@ -63,6 +103,9 @@ class CSMHelper extends Group {
|
|
|
63
103
|
|
|
64
104
|
}
|
|
65
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Updates the helper. This method should be called in the app's animation loop.
|
|
108
|
+
*/
|
|
66
109
|
update() {
|
|
67
110
|
|
|
68
111
|
const csm = this.csm;
|
|
@@ -160,6 +203,10 @@ class CSMHelper extends Group {
|
|
|
160
203
|
|
|
161
204
|
}
|
|
162
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Frees the GPU-related resources allocated by this instance. Call this
|
|
208
|
+
* method whenever this instance is no longer used in your app.
|
|
209
|
+
*/
|
|
163
210
|
dispose() {
|
|
164
211
|
|
|
165
212
|
const frustumLines = this.frustumLines;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { ShaderChunk } from 'three';
|
|
2
2
|
|
|
3
|
+
/** @module CSMShader */
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The object that holds the GLSL enhancements to enable CSM. This
|
|
7
|
+
* code is injected into the built-in material shaders by {@link CSM}.
|
|
8
|
+
*
|
|
9
|
+
* @type {Object}
|
|
10
|
+
*/
|
|
3
11
|
const CSMShader = {
|
|
4
12
|
lights_fragment_begin: /* glsl */`
|
|
5
13
|
vec3 geometryPosition = - vViewPosition;
|
|
@@ -46,7 +54,8 @@ IncidentLight directLight;
|
|
|
46
54
|
|
|
47
55
|
#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )
|
|
48
56
|
pointLightShadow = pointLightShadows[ i ];
|
|
49
|
-
directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;
|
|
57
|
+
directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;
|
|
58
|
+
|
|
50
59
|
#endif
|
|
51
60
|
|
|
52
61
|
RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );
|