@plastic-software/three 0.175.14 → 0.179.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/README.md +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +2 -1
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +22 -8
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +57 -38
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +679 -300
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -2
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +211 -22
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +213 -30
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +4 -3
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +22 -19
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +149 -13
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +14 -12
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +22 -19
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +12 -10
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +9 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +110 -24
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +71 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +20 -6
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +505 -143
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -2,7 +2,6 @@ import { Material } from '../Material.js';
|
|
|
2
2
|
import { NormalBlending } from '../../constants.js';
|
|
3
3
|
|
|
4
4
|
import { getNodeChildren, getCacheKey } from '../../nodes/core/NodeUtils.js';
|
|
5
|
-
import { attribute } from '../../nodes/core/AttributeNode.js';
|
|
6
5
|
import { output, diffuseColor, emissive, varyingProperty } from '../../nodes/core/PropertyNode.js';
|
|
7
6
|
import { materialAlphaTest, materialColor, materialOpacity, materialEmissive, materialNormal, materialLightMap, materialAO } from '../../nodes/accessors/MaterialNode.js';
|
|
8
7
|
import { modelViewProjection } from '../../nodes/accessors/ModelViewProjectionNode.js';
|
|
@@ -14,7 +13,7 @@ import { positionLocal, positionView } from '../../nodes/accessors/Position.js';
|
|
|
14
13
|
import { skinning } from '../../nodes/accessors/SkinningNode.js';
|
|
15
14
|
import { morphReference } from '../../nodes/accessors/MorphNode.js';
|
|
16
15
|
import { mix } from '../../nodes/math/MathNode.js';
|
|
17
|
-
import { float, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
|
|
16
|
+
import { float, vec3, vec4, bool } from '../../nodes/tsl/TSLBase.js';
|
|
18
17
|
import AONode from '../../nodes/lighting/AONode.js';
|
|
19
18
|
import { lightingContext } from '../../nodes/lighting/LightingContextNode.js';
|
|
20
19
|
import IrradianceNode from '../../nodes/lighting/IrradianceNode.js';
|
|
@@ -24,6 +23,9 @@ import { clipping, clippingAlpha, hardwareClipping } from '../../nodes/accessors
|
|
|
24
23
|
import NodeMaterialObserver from './manager/NodeMaterialObserver.js';
|
|
25
24
|
import getAlphaHashThreshold from '../../nodes/functions/material/getAlphaHashThreshold.js';
|
|
26
25
|
import { modelViewMatrix } from '../../nodes/accessors/ModelNode.js';
|
|
26
|
+
import { vertexColor } from '../../nodes/accessors/VertexColorNode.js';
|
|
27
|
+
import { premultiplyAlpha } from '../../nodes/display/BlendModes.js';
|
|
28
|
+
import { subBuild } from '../../nodes/core/SubBuildNode.js';
|
|
27
29
|
|
|
28
30
|
/**
|
|
29
31
|
* Base class for all node materials.
|
|
@@ -188,7 +190,7 @@ class NodeMaterial extends Material {
|
|
|
188
190
|
this.opacityNode = null;
|
|
189
191
|
|
|
190
192
|
/**
|
|
191
|
-
* This node can be used to
|
|
193
|
+
* This node can be used to implement a variety of filter-like effects. The idea is
|
|
192
194
|
* to store the current rendering into a texture e.g. via `viewportSharedTexture()`, use it
|
|
193
195
|
* to create an arbitrary effect and then assign the node composition to this property.
|
|
194
196
|
* Everything behind the object using this material will now be affected by a filter.
|
|
@@ -229,6 +231,15 @@ class NodeMaterial extends Material {
|
|
|
229
231
|
*/
|
|
230
232
|
this.alphaTestNode = null;
|
|
231
233
|
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Discards the fragment if the mask value is `false`.
|
|
237
|
+
*
|
|
238
|
+
* @type {?Node<bool>}
|
|
239
|
+
* @default null
|
|
240
|
+
*/
|
|
241
|
+
this.maskNode = null;
|
|
242
|
+
|
|
232
243
|
/**
|
|
233
244
|
* The local vertex positions are computed based on multiple factors like the
|
|
234
245
|
* attribute data, morphing or skinning. This node property allows to overwrite
|
|
@@ -278,7 +289,16 @@ class NodeMaterial extends Material {
|
|
|
278
289
|
* @type {?Node<float>}
|
|
279
290
|
* @default null
|
|
280
291
|
*/
|
|
281
|
-
this.
|
|
292
|
+
this.receivedShadowPositionNode = null;
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Allows to overwrite the geometry position used for shadow map projection which
|
|
296
|
+
* is by default {@link positionLocal}, the vertex position in local space.
|
|
297
|
+
*
|
|
298
|
+
* @type {?Node<float>}
|
|
299
|
+
* @default null
|
|
300
|
+
*/
|
|
301
|
+
this.castShadowPositionNode = null;
|
|
282
302
|
|
|
283
303
|
/**
|
|
284
304
|
* This node can be used to influence how an object using this node material
|
|
@@ -362,6 +382,26 @@ class NodeMaterial extends Material {
|
|
|
362
382
|
*/
|
|
363
383
|
this.vertexNode = null;
|
|
364
384
|
|
|
385
|
+
// Deprecated properties
|
|
386
|
+
|
|
387
|
+
Object.defineProperty( this, 'shadowPositionNode', { // @deprecated, r176
|
|
388
|
+
|
|
389
|
+
get: () => {
|
|
390
|
+
|
|
391
|
+
return this.receivedShadowPositionNode;
|
|
392
|
+
|
|
393
|
+
},
|
|
394
|
+
|
|
395
|
+
set: ( value ) => {
|
|
396
|
+
|
|
397
|
+
console.warn( 'THREE.NodeMaterial: ".shadowPositionNode" was renamed to ".receivedShadowPositionNode".' );
|
|
398
|
+
|
|
399
|
+
this.receivedShadowPositionNode = value;
|
|
400
|
+
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
} );
|
|
404
|
+
|
|
365
405
|
}
|
|
366
406
|
|
|
367
407
|
/**
|
|
@@ -406,7 +446,7 @@ class NodeMaterial extends Material {
|
|
|
406
446
|
*/
|
|
407
447
|
setup( builder ) {
|
|
408
448
|
|
|
409
|
-
builder.context.setupNormal = () => this.setupNormal( builder );
|
|
449
|
+
builder.context.setupNormal = () => subBuild( this.setupNormal( builder ), 'NORMAL', 'vec3' );
|
|
410
450
|
builder.context.setupPositionView = () => this.setupPositionView( builder );
|
|
411
451
|
builder.context.setupModelViewProjection = () => this.setupModelViewProjection( builder );
|
|
412
452
|
|
|
@@ -417,7 +457,9 @@ class NodeMaterial extends Material {
|
|
|
417
457
|
|
|
418
458
|
builder.addStack();
|
|
419
459
|
|
|
420
|
-
const
|
|
460
|
+
const mvp = subBuild( this.setupVertex( builder ), 'VERTEX' );
|
|
461
|
+
|
|
462
|
+
const vertexNode = this.vertexNode || mvp;
|
|
421
463
|
|
|
422
464
|
builder.stack.outputNode = vertexNode;
|
|
423
465
|
|
|
@@ -632,7 +674,7 @@ class NodeMaterial extends Material {
|
|
|
632
674
|
|
|
633
675
|
if ( depthNode !== null ) {
|
|
634
676
|
|
|
635
|
-
depth.assign( depthNode ).
|
|
677
|
+
depth.assign( depthNode ).toStack();
|
|
636
678
|
|
|
637
679
|
}
|
|
638
680
|
|
|
@@ -693,13 +735,13 @@ class NodeMaterial extends Material {
|
|
|
693
735
|
|
|
694
736
|
if ( geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color ) {
|
|
695
737
|
|
|
696
|
-
morphReference( object ).
|
|
738
|
+
morphReference( object ).toStack();
|
|
697
739
|
|
|
698
740
|
}
|
|
699
741
|
|
|
700
742
|
if ( object.isSkinnedMesh === true ) {
|
|
701
743
|
|
|
702
|
-
skinning( object ).
|
|
744
|
+
skinning( object ).toStack();
|
|
703
745
|
|
|
704
746
|
}
|
|
705
747
|
|
|
@@ -715,19 +757,19 @@ class NodeMaterial extends Material {
|
|
|
715
757
|
|
|
716
758
|
if ( object.isBatchedMesh ) {
|
|
717
759
|
|
|
718
|
-
batch( object ).
|
|
760
|
+
batch( object ).toStack();
|
|
719
761
|
|
|
720
762
|
}
|
|
721
763
|
|
|
722
764
|
if ( ( object.isInstancedMesh && object.instanceMatrix && object.instanceMatrix.isInstancedBufferAttribute === true ) ) {
|
|
723
765
|
|
|
724
|
-
instancedMesh( object ).
|
|
766
|
+
instancedMesh( object ).toStack();
|
|
725
767
|
|
|
726
768
|
}
|
|
727
769
|
|
|
728
770
|
if ( this.positionNode !== null ) {
|
|
729
771
|
|
|
730
|
-
positionLocal.assign( this.positionNode
|
|
772
|
+
positionLocal.assign( subBuild( this.positionNode, 'POSITION', 'vec3' ) );
|
|
731
773
|
|
|
732
774
|
}
|
|
733
775
|
|
|
@@ -743,17 +785,29 @@ class NodeMaterial extends Material {
|
|
|
743
785
|
*/
|
|
744
786
|
setupDiffuseColor( { object, geometry } ) {
|
|
745
787
|
|
|
788
|
+
// MASK
|
|
789
|
+
|
|
790
|
+
if ( this.maskNode !== null ) {
|
|
791
|
+
|
|
792
|
+
// Discard if the mask is `false`
|
|
793
|
+
|
|
794
|
+
bool( this.maskNode ).not().discard();
|
|
795
|
+
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
// COLOR
|
|
799
|
+
|
|
746
800
|
let colorNode = this.colorNode ? vec4( this.colorNode ) : materialColor;
|
|
747
801
|
|
|
748
802
|
// VERTEX COLORS
|
|
749
803
|
|
|
750
804
|
if ( this.vertexColors === true && geometry.hasAttribute( 'color' ) ) {
|
|
751
805
|
|
|
752
|
-
colorNode =
|
|
806
|
+
colorNode = colorNode.mul( vertexColor() );
|
|
753
807
|
|
|
754
808
|
}
|
|
755
809
|
|
|
756
|
-
//
|
|
810
|
+
// INSTANCED COLORS
|
|
757
811
|
|
|
758
812
|
if ( object.instanceColor ) {
|
|
759
813
|
|
|
@@ -771,8 +825,7 @@ class NodeMaterial extends Material {
|
|
|
771
825
|
|
|
772
826
|
}
|
|
773
827
|
|
|
774
|
-
|
|
775
|
-
// COLOR
|
|
828
|
+
// DIFFUSE COLOR
|
|
776
829
|
|
|
777
830
|
diffuseColor.assign( colorNode );
|
|
778
831
|
|
|
@@ -783,9 +836,11 @@ class NodeMaterial extends Material {
|
|
|
783
836
|
|
|
784
837
|
// ALPHA TEST
|
|
785
838
|
|
|
839
|
+
let alphaTestNode = null;
|
|
840
|
+
|
|
786
841
|
if ( this.alphaTestNode !== null || this.alphaTest > 0 ) {
|
|
787
842
|
|
|
788
|
-
|
|
843
|
+
alphaTestNode = this.alphaTestNode !== null ? float( this.alphaTestNode ) : materialAlphaTest;
|
|
789
844
|
|
|
790
845
|
diffuseColor.a.lessThanEqual( alphaTestNode ).discard();
|
|
791
846
|
|
|
@@ -799,10 +854,18 @@ class NodeMaterial extends Material {
|
|
|
799
854
|
|
|
800
855
|
}
|
|
801
856
|
|
|
802
|
-
|
|
857
|
+
// OPAQUE
|
|
858
|
+
|
|
859
|
+
const isOpaque = this.transparent === false && this.blending === NormalBlending && this.alphaToCoverage === false;
|
|
860
|
+
|
|
861
|
+
if ( isOpaque ) {
|
|
803
862
|
|
|
804
863
|
diffuseColor.a.assign( 1.0 );
|
|
805
864
|
|
|
865
|
+
} else if ( alphaTestNode === null ) {
|
|
866
|
+
|
|
867
|
+
diffuseColor.a.lessThanEqual( 0 ).discard();
|
|
868
|
+
|
|
806
869
|
}
|
|
807
870
|
|
|
808
871
|
}
|
|
@@ -1008,7 +1071,7 @@ class NodeMaterial extends Material {
|
|
|
1008
1071
|
|
|
1009
1072
|
output.assign( outputNode );
|
|
1010
1073
|
|
|
1011
|
-
outputNode = vec4( fogNode );
|
|
1074
|
+
outputNode = vec4( fogNode.toVar() );
|
|
1012
1075
|
|
|
1013
1076
|
}
|
|
1014
1077
|
|
|
@@ -1016,6 +1079,19 @@ class NodeMaterial extends Material {
|
|
|
1016
1079
|
|
|
1017
1080
|
}
|
|
1018
1081
|
|
|
1082
|
+
/**
|
|
1083
|
+
* Setups premultiplied alpha.
|
|
1084
|
+
*
|
|
1085
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
1086
|
+
* @param {Node<vec4>} outputNode - The existing output node.
|
|
1087
|
+
* @return {Node<vec4>} The output node.
|
|
1088
|
+
*/
|
|
1089
|
+
setupPremultipliedAlpha( builder, outputNode ) {
|
|
1090
|
+
|
|
1091
|
+
return premultiplyAlpha( outputNode );
|
|
1092
|
+
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1019
1095
|
/**
|
|
1020
1096
|
* Setups the output node.
|
|
1021
1097
|
*
|
|
@@ -1033,6 +1109,14 @@ class NodeMaterial extends Material {
|
|
|
1033
1109
|
|
|
1034
1110
|
}
|
|
1035
1111
|
|
|
1112
|
+
// PREMULTIPLIED ALPHA
|
|
1113
|
+
|
|
1114
|
+
if ( this.premultipliedAlpha === true ) {
|
|
1115
|
+
|
|
1116
|
+
outputNode = this.setupPremultipliedAlpha( builder, outputNode );
|
|
1117
|
+
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1036
1120
|
return outputNode;
|
|
1037
1121
|
|
|
1038
1122
|
}
|
|
@@ -1160,12 +1244,14 @@ class NodeMaterial extends Material {
|
|
|
1160
1244
|
this.backdropNode = source.backdropNode;
|
|
1161
1245
|
this.backdropAlphaNode = source.backdropAlphaNode;
|
|
1162
1246
|
this.alphaTestNode = source.alphaTestNode;
|
|
1247
|
+
this.maskNode = source.maskNode;
|
|
1163
1248
|
|
|
1164
1249
|
this.positionNode = source.positionNode;
|
|
1165
1250
|
this.geometryNode = source.geometryNode;
|
|
1166
1251
|
|
|
1167
1252
|
this.depthNode = source.depthNode;
|
|
1168
|
-
this.
|
|
1253
|
+
this.receivedShadowPositionNode = source.receivedShadowPositionNode;
|
|
1254
|
+
this.castShadowPositionNode = source.castShadowPositionNode;
|
|
1169
1255
|
this.receivedShadowNode = source.receivedShadowNode;
|
|
1170
1256
|
this.castShadowNode = source.castShadowNode;
|
|
1171
1257
|
|
|
@@ -35,6 +35,11 @@ class PointsNodeMaterial extends SpriteNodeMaterial {
|
|
|
35
35
|
/**
|
|
36
36
|
* This node property provides an additional way to set the point size.
|
|
37
37
|
*
|
|
38
|
+
* Note that WebGPU only supports point primitives with 1 pixel size. Consequently,
|
|
39
|
+
* this node has no effect when the material is used with {@link Points} and a WebGPU
|
|
40
|
+
* backend. If an application wants to render points with a size larger than 1 pixel,
|
|
41
|
+
* the material should be used with {@link Sprite} and instancing.
|
|
42
|
+
*
|
|
38
43
|
* @type {?Node<vec2>}
|
|
39
44
|
* @default null
|
|
40
45
|
*/
|
|
@@ -5,6 +5,7 @@ const refreshUniforms = [
|
|
|
5
5
|
'anisotropyMap',
|
|
6
6
|
'anisotropyRotation',
|
|
7
7
|
'aoMap',
|
|
8
|
+
'aoMapIntensity',
|
|
8
9
|
'attenuationColor',
|
|
9
10
|
'attenuationDistance',
|
|
10
11
|
'bumpMap',
|
|
@@ -17,8 +18,10 @@ const refreshUniforms = [
|
|
|
17
18
|
'dispersion',
|
|
18
19
|
'displacementMap',
|
|
19
20
|
'emissive',
|
|
21
|
+
'emissiveIntensity',
|
|
20
22
|
'emissiveMap',
|
|
21
23
|
'envMap',
|
|
24
|
+
'envMapIntensity',
|
|
22
25
|
'gradientMap',
|
|
23
26
|
'ior',
|
|
24
27
|
'iridescence',
|
|
@@ -26,6 +29,7 @@ const refreshUniforms = [
|
|
|
26
29
|
'iridescenceMap',
|
|
27
30
|
'iridescenceThicknessMap',
|
|
28
31
|
'lightMap',
|
|
32
|
+
'lightMapIntensity',
|
|
29
33
|
'map',
|
|
30
34
|
'matcap',
|
|
31
35
|
'metalness',
|
|
@@ -51,6 +55,16 @@ const refreshUniforms = [
|
|
|
51
55
|
'transmissionMap'
|
|
52
56
|
];
|
|
53
57
|
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* A WeakMap to cache lights data for node materials.
|
|
61
|
+
* Cache lights data by render ID to avoid unnecessary recalculations.
|
|
62
|
+
*
|
|
63
|
+
* @private
|
|
64
|
+
* @type {WeakMap<LightsNode,Object>}
|
|
65
|
+
*/
|
|
66
|
+
const _lightsCache = new WeakMap();
|
|
67
|
+
|
|
54
68
|
/**
|
|
55
69
|
* This class is used by {@link WebGPURenderer} as management component.
|
|
56
70
|
* It's primary purpose is to determine whether render objects require a
|
|
@@ -126,6 +140,20 @@ class NodeMaterialObserver {
|
|
|
126
140
|
|
|
127
141
|
}
|
|
128
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Returns `true` if the current rendering produces motion vectors.
|
|
145
|
+
*
|
|
146
|
+
* @param {Renderer} renderer - The renderer.
|
|
147
|
+
* @return {boolean} Whether the current rendering produces motion vectors or not.
|
|
148
|
+
*/
|
|
149
|
+
needsVelocity( renderer ) {
|
|
150
|
+
|
|
151
|
+
const mrt = renderer.getMRT();
|
|
152
|
+
|
|
153
|
+
return ( mrt !== null && mrt.has( 'velocity' ) );
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
|
|
129
157
|
/**
|
|
130
158
|
* Returns monitoring data for the given render object.
|
|
131
159
|
*
|
|
@@ -178,6 +206,8 @@ class NodeMaterialObserver {
|
|
|
178
206
|
|
|
179
207
|
}
|
|
180
208
|
|
|
209
|
+
data.lights = this.getLightsData( renderObject.lightsNode.getLights() );
|
|
210
|
+
|
|
181
211
|
this.renderObjects.set( renderObject, data );
|
|
182
212
|
|
|
183
213
|
}
|
|
@@ -229,7 +259,7 @@ class NodeMaterialObserver {
|
|
|
229
259
|
|
|
230
260
|
}
|
|
231
261
|
|
|
232
|
-
if ( builder.renderer.
|
|
262
|
+
if ( builder.renderer.overrideNodes.modelViewMatrix !== null || builder.renderer.overrideNodes.modelNormalViewMatrix !== null )
|
|
233
263
|
return true;
|
|
234
264
|
|
|
235
265
|
return false;
|
|
@@ -281,9 +311,10 @@ class NodeMaterialObserver {
|
|
|
281
311
|
* Returns `true` if the given render object has not changed its state.
|
|
282
312
|
*
|
|
283
313
|
* @param {RenderObject} renderObject - The render object.
|
|
314
|
+
* @param {Array<Light>} lightsData - The current material lights.
|
|
284
315
|
* @return {boolean} Whether the given render object has changed its state or not.
|
|
285
316
|
*/
|
|
286
|
-
equals( renderObject ) {
|
|
317
|
+
equals( renderObject, lightsData ) {
|
|
287
318
|
|
|
288
319
|
const { object, material, geometry } = renderObject;
|
|
289
320
|
|
|
@@ -444,6 +475,22 @@ class NodeMaterialObserver {
|
|
|
444
475
|
|
|
445
476
|
}
|
|
446
477
|
|
|
478
|
+
// lights
|
|
479
|
+
|
|
480
|
+
if ( renderObjectData.lights ) {
|
|
481
|
+
|
|
482
|
+
for ( let i = 0; i < lightsData.length; i ++ ) {
|
|
483
|
+
|
|
484
|
+
if ( renderObjectData.lights[ i ].map !== lightsData[ i ].map ) {
|
|
485
|
+
|
|
486
|
+
return false;
|
|
487
|
+
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
}
|
|
493
|
+
|
|
447
494
|
// center
|
|
448
495
|
|
|
449
496
|
if ( renderObjectData.center ) {
|
|
@@ -470,6 +517,61 @@ class NodeMaterialObserver {
|
|
|
470
517
|
|
|
471
518
|
}
|
|
472
519
|
|
|
520
|
+
/**
|
|
521
|
+
* Returns the lights data for the given material lights.
|
|
522
|
+
*
|
|
523
|
+
* @param {Array<Light>} materialLights - The material lights.
|
|
524
|
+
* @return {Array<Object>} The lights data for the given material lights.
|
|
525
|
+
*/
|
|
526
|
+
getLightsData( materialLights ) {
|
|
527
|
+
|
|
528
|
+
const lights = [];
|
|
529
|
+
|
|
530
|
+
for ( const light of materialLights ) {
|
|
531
|
+
|
|
532
|
+
if ( light.isSpotLight === true && light.map !== null ) {
|
|
533
|
+
|
|
534
|
+
// only add lights that have a map
|
|
535
|
+
|
|
536
|
+
lights.push( { map: light.map.version } );
|
|
537
|
+
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
return lights;
|
|
543
|
+
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
/**
|
|
547
|
+
* Returns the lights for the given lights node and render ID.
|
|
548
|
+
*
|
|
549
|
+
* @param {LightsNode} lightsNode - The lights node.
|
|
550
|
+
* @param {number} renderId - The render ID.
|
|
551
|
+
* @return {Array} The lights for the given lights node and render ID.
|
|
552
|
+
*/
|
|
553
|
+
getLights( lightsNode, renderId ) {
|
|
554
|
+
|
|
555
|
+
if ( _lightsCache.has( lightsNode ) ) {
|
|
556
|
+
|
|
557
|
+
const cached = _lightsCache.get( lightsNode );
|
|
558
|
+
|
|
559
|
+
if ( cached.renderId === renderId ) {
|
|
560
|
+
|
|
561
|
+
return cached.lightsData;
|
|
562
|
+
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
const lightsData = this.getLightsData( lightsNode.getLights() );
|
|
568
|
+
|
|
569
|
+
_lightsCache.set( lightsNode, { renderId, lightsData } );
|
|
570
|
+
|
|
571
|
+
return lightsData;
|
|
572
|
+
|
|
573
|
+
}
|
|
574
|
+
|
|
473
575
|
/**
|
|
474
576
|
* Checks if the given render object requires a refresh.
|
|
475
577
|
*
|
|
@@ -479,7 +581,7 @@ class NodeMaterialObserver {
|
|
|
479
581
|
*/
|
|
480
582
|
needsRefresh( renderObject, nodeFrame ) {
|
|
481
583
|
|
|
482
|
-
if ( this.hasNode || this.hasAnimation || this.firstInitialization( renderObject ) )
|
|
584
|
+
if ( this.hasNode || this.hasAnimation || this.firstInitialization( renderObject ) || this.needsVelocity( nodeFrame.renderer ) )
|
|
483
585
|
return true;
|
|
484
586
|
|
|
485
587
|
const { renderId } = nodeFrame;
|
|
@@ -498,7 +600,8 @@ class NodeMaterialObserver {
|
|
|
498
600
|
if ( isStatic || isBundle )
|
|
499
601
|
return false;
|
|
500
602
|
|
|
501
|
-
const
|
|
603
|
+
const lightsData = this.getLights( renderObject.lightsNode, renderId );
|
|
604
|
+
const notEqual = this.equals( renderObject, lightsData ) !== true;
|
|
502
605
|
|
|
503
606
|
return notEqual;
|
|
504
607
|
|
package/src/math/Box3.js
CHANGED
|
@@ -714,6 +714,34 @@ class Box3 {
|
|
|
714
714
|
|
|
715
715
|
}
|
|
716
716
|
|
|
717
|
+
/**
|
|
718
|
+
* Returns a serialized structure of the bounding box.
|
|
719
|
+
*
|
|
720
|
+
* @return {Object} Serialized structure with fields representing the object state.
|
|
721
|
+
*/
|
|
722
|
+
toJSON() {
|
|
723
|
+
|
|
724
|
+
return {
|
|
725
|
+
min: this.min.toArray(),
|
|
726
|
+
max: this.max.toArray()
|
|
727
|
+
};
|
|
728
|
+
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
/**
|
|
732
|
+
* Returns a serialized structure of the bounding box.
|
|
733
|
+
*
|
|
734
|
+
* @param {Object} json - The serialized json to set the box from.
|
|
735
|
+
* @return {Box3} A reference to this bounding box.
|
|
736
|
+
*/
|
|
737
|
+
fromJSON( json ) {
|
|
738
|
+
|
|
739
|
+
this.min.fromArray( json.min );
|
|
740
|
+
this.max.fromArray( json.max );
|
|
741
|
+
return this;
|
|
742
|
+
|
|
743
|
+
}
|
|
744
|
+
|
|
717
745
|
}
|
|
718
746
|
|
|
719
747
|
const _points = [
|
package/src/math/Color.js
CHANGED
|
@@ -208,7 +208,7 @@ class Color {
|
|
|
208
208
|
this.g = ( hex >> 8 & 255 ) / 255;
|
|
209
209
|
this.b = ( hex & 255 ) / 255;
|
|
210
210
|
|
|
211
|
-
ColorManagement.
|
|
211
|
+
ColorManagement.colorSpaceToWorking( this, colorSpace );
|
|
212
212
|
|
|
213
213
|
return this;
|
|
214
214
|
|
|
@@ -229,7 +229,7 @@ class Color {
|
|
|
229
229
|
this.g = g;
|
|
230
230
|
this.b = b;
|
|
231
231
|
|
|
232
|
-
ColorManagement.
|
|
232
|
+
ColorManagement.colorSpaceToWorking( this, colorSpace );
|
|
233
233
|
|
|
234
234
|
return this;
|
|
235
235
|
|
|
@@ -266,7 +266,7 @@ class Color {
|
|
|
266
266
|
|
|
267
267
|
}
|
|
268
268
|
|
|
269
|
-
ColorManagement.
|
|
269
|
+
ColorManagement.colorSpaceToWorking( this, colorSpace );
|
|
270
270
|
|
|
271
271
|
return this;
|
|
272
272
|
|
|
@@ -537,7 +537,7 @@ class Color {
|
|
|
537
537
|
*/
|
|
538
538
|
getHex( colorSpace = SRGBColorSpace ) {
|
|
539
539
|
|
|
540
|
-
ColorManagement.
|
|
540
|
+
ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
|
|
541
541
|
|
|
542
542
|
return Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );
|
|
543
543
|
|
|
@@ -567,7 +567,7 @@ class Color {
|
|
|
567
567
|
|
|
568
568
|
// h,s,l ranges are in 0.0 - 1.0
|
|
569
569
|
|
|
570
|
-
ColorManagement.
|
|
570
|
+
ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
|
|
571
571
|
|
|
572
572
|
const r = _color.r, g = _color.g, b = _color.b;
|
|
573
573
|
|
|
@@ -617,7 +617,7 @@ class Color {
|
|
|
617
617
|
*/
|
|
618
618
|
getRGB( target, colorSpace = ColorManagement.workingColorSpace ) {
|
|
619
619
|
|
|
620
|
-
ColorManagement.
|
|
620
|
+
ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
|
|
621
621
|
|
|
622
622
|
target.r = _color.r;
|
|
623
623
|
target.g = _color.g;
|
|
@@ -635,7 +635,7 @@ class Color {
|
|
|
635
635
|
*/
|
|
636
636
|
getStyle( colorSpace = SRGBColorSpace ) {
|
|
637
637
|
|
|
638
|
-
ColorManagement.
|
|
638
|
+
ColorManagement.workingToColorSpace( _color.copy( this ), colorSpace );
|
|
639
639
|
|
|
640
640
|
const r = _color.r, g = _color.g, b = _color.b;
|
|
641
641
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SRGBColorSpace, LinearSRGBColorSpace, SRGBTransfer, LinearTransfer, NoColorSpace } from '../constants.js';
|
|
2
2
|
import { Matrix3 } from './Matrix3.js';
|
|
3
|
+
import { warnOnce } from '../utils.js';
|
|
3
4
|
|
|
4
5
|
const LINEAR_REC709_TO_XYZ = /*@__PURE__*/ new Matrix3().set(
|
|
5
6
|
0.4123908, 0.3575843, 0.1804808,
|
|
@@ -76,13 +77,13 @@ function createColorManagement() {
|
|
|
76
77
|
|
|
77
78
|
},
|
|
78
79
|
|
|
79
|
-
|
|
80
|
+
workingToColorSpace: function ( color, targetColorSpace ) {
|
|
80
81
|
|
|
81
82
|
return this.convert( color, this.workingColorSpace, targetColorSpace );
|
|
82
83
|
|
|
83
84
|
},
|
|
84
85
|
|
|
85
|
-
|
|
86
|
+
colorSpaceToWorking: function ( color, sourceColorSpace ) {
|
|
86
87
|
|
|
87
88
|
return this.convert( color, sourceColorSpace, this.workingColorSpace );
|
|
88
89
|
|
|
@@ -134,7 +135,25 @@ function createColorManagement() {
|
|
|
134
135
|
|
|
135
136
|
return this.spaces[ colorSpace ].workingColorSpaceConfig.unpackColorSpace;
|
|
136
137
|
|
|
137
|
-
}
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
// Deprecated
|
|
141
|
+
|
|
142
|
+
fromWorkingColorSpace: function ( color, targetColorSpace ) {
|
|
143
|
+
|
|
144
|
+
warnOnce( 'THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().' ); // @deprecated, r177
|
|
145
|
+
|
|
146
|
+
return ColorManagement.workingToColorSpace( color, targetColorSpace );
|
|
147
|
+
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
toWorkingColorSpace: function ( color, sourceColorSpace ) {
|
|
151
|
+
|
|
152
|
+
warnOnce( 'THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().' ); // @deprecated, r177
|
|
153
|
+
|
|
154
|
+
return ColorManagement.colorSpaceToWorking( color, sourceColorSpace );
|
|
155
|
+
|
|
156
|
+
},
|
|
138
157
|
|
|
139
158
|
};
|
|
140
159
|
|