@plastic-software/three 0.175.13 → 0.178.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 +3 -3
- package/build/three.cjs +7747 -6792
- package/build/three.core.js +7371 -6576
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +190 -30
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +19 -11
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +4989 -2235
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +5082 -2469
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -1
- 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 +1 -0
- 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 +18 -4
- 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 +49 -35
- 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 +12 -10
- 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 +2 -1
- 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 +7 -0
- 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/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +1 -0
- package/examples/jsm/loaders/USDZLoader.js +1 -0
- 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/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/Timer.js +2 -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 +1 -0
- 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 +20 -17
- 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 +139 -12
- 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 +4 -3
- 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 +5 -2
- 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 +2 -1
- 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 +4 -1
- 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 +226 -87
- 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 +1 -0
- 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 +4 -29
- 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 +5 -4
- 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 +4 -3
- 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 +1 -1
- package/src/Three.TSL.js +18 -10
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -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/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/SkeletonHelper.js +1 -1
- package/src/lights/LightShadow.js +14 -0
- 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 +2 -2
- package/src/loaders/ImageBitmapLoader.js +25 -9
- package/src/loaders/ImageLoader.js +55 -8
- 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/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 +105 -19
- package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
- 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 +6 -1
- package/src/math/FrustumArray.js +253 -0
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +2 -3
- package/src/nodes/TSL.js +5 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +31 -4
- 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 +102 -16
- 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 +1 -1
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +14 -3
- 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 +59 -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/AssignNode.js +27 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +69 -20
- package/src/nodes/core/NodeBuilder.js +248 -29
- package/src/nodes/core/NodeUtils.js +42 -0
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +129 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/VarNode.js +11 -2
- 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 +18 -19
- package/src/nodes/display/ScreenNode.js +0 -26
- 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 +14 -14
- 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 +1 -1
- 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 +78 -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/lib/mx_noise.js +1 -1
- package/src/nodes/math/ConditionalNode.js +0 -19
- package/src/nodes/math/MathNode.js +68 -21
- package/src/nodes/math/OperatorNode.js +108 -98
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +160 -65
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +13 -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 +16 -4
- 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 +25 -11
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +116 -8
- package/src/renderers/common/Storage3DTexture.js +79 -0
- package/src/renderers/common/StorageArrayTexture.js +63 -0
- package/src/renderers/common/Textures.js +15 -21
- 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 +157 -27
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLPrograms.js +4 -2
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +144 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
- 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 +451 -128
- 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 +86 -33
- 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 +28 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +2 -1
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/Source.js +22 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +1 -1
- 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,6 +2,8 @@ import { Cache } from './Cache.js';
|
|
|
2
2
|
import { Loader } from './Loader.js';
|
|
3
3
|
import { createElementNS } from '../utils.js';
|
|
4
4
|
|
|
5
|
+
const _loading = new WeakMap();
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* A loader for loading images. The class loads images with the HTML `Image` API.
|
|
7
9
|
*
|
|
@@ -48,19 +50,36 @@ class ImageLoader extends Loader {
|
|
|
48
50
|
|
|
49
51
|
const scope = this;
|
|
50
52
|
|
|
51
|
-
const cached = Cache.get( url );
|
|
53
|
+
const cached = Cache.get( `image:${url}` );
|
|
52
54
|
|
|
53
55
|
if ( cached !== undefined ) {
|
|
54
56
|
|
|
55
|
-
|
|
57
|
+
if ( cached.complete === true ) {
|
|
58
|
+
|
|
59
|
+
scope.manager.itemStart( url );
|
|
60
|
+
|
|
61
|
+
setTimeout( function () {
|
|
62
|
+
|
|
63
|
+
if ( onLoad ) onLoad( cached );
|
|
64
|
+
|
|
65
|
+
scope.manager.itemEnd( url );
|
|
66
|
+
|
|
67
|
+
}, 0 );
|
|
56
68
|
|
|
57
|
-
|
|
69
|
+
} else {
|
|
58
70
|
|
|
59
|
-
|
|
71
|
+
let arr = _loading.get( cached );
|
|
60
72
|
|
|
61
|
-
|
|
73
|
+
if ( arr === undefined ) {
|
|
62
74
|
|
|
63
|
-
|
|
75
|
+
arr = [];
|
|
76
|
+
_loading.set( cached, arr );
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
arr.push( { onLoad, onError } );
|
|
81
|
+
|
|
82
|
+
}
|
|
64
83
|
|
|
65
84
|
return cached;
|
|
66
85
|
|
|
@@ -72,10 +91,21 @@ class ImageLoader extends Loader {
|
|
|
72
91
|
|
|
73
92
|
removeEventListeners();
|
|
74
93
|
|
|
75
|
-
Cache.add( url, this );
|
|
76
|
-
|
|
77
94
|
if ( onLoad ) onLoad( this );
|
|
78
95
|
|
|
96
|
+
//
|
|
97
|
+
|
|
98
|
+
const callbacks = _loading.get( this ) || [];
|
|
99
|
+
|
|
100
|
+
for ( let i = 0; i < callbacks.length; i ++ ) {
|
|
101
|
+
|
|
102
|
+
const callback = callbacks[ i ];
|
|
103
|
+
if ( callback.onLoad ) callback.onLoad( this );
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
_loading.delete( this );
|
|
108
|
+
|
|
79
109
|
scope.manager.itemEnd( url );
|
|
80
110
|
|
|
81
111
|
}
|
|
@@ -86,6 +116,22 @@ class ImageLoader extends Loader {
|
|
|
86
116
|
|
|
87
117
|
if ( onError ) onError( event );
|
|
88
118
|
|
|
119
|
+
Cache.remove( `image:${url}` );
|
|
120
|
+
|
|
121
|
+
//
|
|
122
|
+
|
|
123
|
+
const callbacks = _loading.get( this ) || [];
|
|
124
|
+
|
|
125
|
+
for ( let i = 0; i < callbacks.length; i ++ ) {
|
|
126
|
+
|
|
127
|
+
const callback = callbacks[ i ];
|
|
128
|
+
if ( callback.onError ) callback.onError( event );
|
|
129
|
+
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
_loading.delete( this );
|
|
133
|
+
|
|
134
|
+
|
|
89
135
|
scope.manager.itemError( url );
|
|
90
136
|
scope.manager.itemEnd( url );
|
|
91
137
|
|
|
@@ -107,6 +153,7 @@ class ImageLoader extends Loader {
|
|
|
107
153
|
|
|
108
154
|
}
|
|
109
155
|
|
|
156
|
+
Cache.add( `image:${url}`, image );
|
|
110
157
|
scope.manager.itemStart( url );
|
|
111
158
|
|
|
112
159
|
image.src = url;
|
|
@@ -975,37 +975,65 @@ class ObjectLoader extends Loader {
|
|
|
975
975
|
object._drawRanges = data.drawRanges;
|
|
976
976
|
object._reservedRanges = data.reservedRanges;
|
|
977
977
|
|
|
978
|
-
object.
|
|
979
|
-
object._active = data.active;
|
|
980
|
-
object._bounds = data.bounds.map( bound => {
|
|
978
|
+
object._geometryInfo = data.geometryInfo.map( info => {
|
|
981
979
|
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
980
|
+
let box = null;
|
|
981
|
+
let sphere = null;
|
|
982
|
+
if ( info.boundingBox !== undefined ) {
|
|
985
983
|
|
|
986
|
-
|
|
987
|
-
sphere.radius = bound.sphereRadius;
|
|
988
|
-
sphere.center.fromArray( bound.sphereCenter );
|
|
984
|
+
box = new Box3().fromJSON( info.boundingBox );
|
|
989
985
|
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
if ( info.boundingSphere !== undefined ) {
|
|
989
|
+
|
|
990
|
+
sphere = new Sphere().fromJSON( info.boundingSphere );
|
|
991
|
+
|
|
992
|
+
}
|
|
993
993
|
|
|
994
|
-
|
|
995
|
-
|
|
994
|
+
return {
|
|
995
|
+
...info,
|
|
996
|
+
boundingBox: box,
|
|
997
|
+
boundingSphere: sphere
|
|
996
998
|
};
|
|
997
999
|
|
|
998
1000
|
} );
|
|
1001
|
+
object._instanceInfo = data.instanceInfo;
|
|
1002
|
+
|
|
1003
|
+
object._availableInstanceIds = data._availableInstanceIds;
|
|
1004
|
+
object._availableGeometryIds = data._availableGeometryIds;
|
|
1005
|
+
|
|
1006
|
+
object._nextIndexStart = data.nextIndexStart;
|
|
1007
|
+
object._nextVertexStart = data.nextVertexStart;
|
|
1008
|
+
object._geometryCount = data.geometryCount;
|
|
999
1009
|
|
|
1000
1010
|
object._maxInstanceCount = data.maxInstanceCount;
|
|
1001
1011
|
object._maxVertexCount = data.maxVertexCount;
|
|
1002
1012
|
object._maxIndexCount = data.maxIndexCount;
|
|
1003
1013
|
|
|
1004
1014
|
object._geometryInitialized = data.geometryInitialized;
|
|
1005
|
-
object._geometryCount = data.geometryCount;
|
|
1006
1015
|
|
|
1007
1016
|
object._matricesTexture = getTexture( data.matricesTexture.uuid );
|
|
1008
|
-
|
|
1017
|
+
|
|
1018
|
+
object._indirectTexture = getTexture( data.indirectTexture.uuid );
|
|
1019
|
+
|
|
1020
|
+
if ( data.colorsTexture !== undefined ) {
|
|
1021
|
+
|
|
1022
|
+
object._colorsTexture = getTexture( data.colorsTexture.uuid );
|
|
1023
|
+
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
if ( data.boundingSphere !== undefined ) {
|
|
1027
|
+
|
|
1028
|
+
object.boundingSphere = new Sphere().fromJSON( data.boundingSphere );
|
|
1029
|
+
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
if ( data.boundingBox !== undefined ) {
|
|
1033
|
+
|
|
1034
|
+
object.boundingBox = new Box3().fromJSON( data.boundingBox );
|
|
1035
|
+
|
|
1036
|
+
}
|
|
1009
1037
|
|
|
1010
1038
|
break;
|
|
1011
1039
|
|
|
@@ -38,7 +38,7 @@ class NodeObjectLoader extends ObjectLoader {
|
|
|
38
38
|
* A reference to hold the `nodes` JSON property.
|
|
39
39
|
*
|
|
40
40
|
* @private
|
|
41
|
-
* @type {?Object}
|
|
41
|
+
* @type {?Object[]}
|
|
42
42
|
*/
|
|
43
43
|
this._nodesJSON = null;
|
|
44
44
|
|
|
@@ -92,7 +92,7 @@ class NodeObjectLoader extends ObjectLoader {
|
|
|
92
92
|
/**
|
|
93
93
|
* Parses the node objects from the given JSON and textures.
|
|
94
94
|
*
|
|
95
|
-
* @param {Object} json - The JSON definition
|
|
95
|
+
* @param {Object[]} json - The JSON definition
|
|
96
96
|
* @param {Object<string,Texture>} textures - The texture library.
|
|
97
97
|
* @return {Object<string,Node>}. The parsed nodes.
|
|
98
98
|
*/
|
|
@@ -615,7 +615,7 @@ class Material extends EventDispatcher {
|
|
|
615
615
|
|
|
616
616
|
const data = {
|
|
617
617
|
metadata: {
|
|
618
|
-
version: 4.
|
|
618
|
+
version: 4.7,
|
|
619
619
|
type: 'Material',
|
|
620
620
|
generator: 'Material.toJSON'
|
|
621
621
|
}
|
|
@@ -997,12 +997,6 @@ class Material extends EventDispatcher {
|
|
|
997
997
|
|
|
998
998
|
}
|
|
999
999
|
|
|
1000
|
-
onBuild( /* shaderobject, renderer */ ) {
|
|
1001
|
-
|
|
1002
|
-
console.warn( 'Material: onBuild() has been removed.' ); // @deprecated, r166
|
|
1003
|
-
|
|
1004
|
-
}
|
|
1005
|
-
|
|
1006
1000
|
}
|
|
1007
1001
|
|
|
1008
1002
|
export { Material };
|
|
@@ -3,8 +3,9 @@ import { materialLightMap } from '../../nodes/accessors/MaterialNode.js';
|
|
|
3
3
|
import BasicEnvironmentNode from '../../nodes/lighting/BasicEnvironmentNode.js';
|
|
4
4
|
import BasicLightMapNode from '../../nodes/lighting/BasicLightMapNode.js';
|
|
5
5
|
import BasicLightingModel from '../../nodes/functions/BasicLightingModel.js';
|
|
6
|
-
import {
|
|
6
|
+
import { normalViewGeometry } from '../../nodes/accessors/Normal.js';
|
|
7
7
|
import { diffuseColor } from '../../nodes/core/PropertyNode.js';
|
|
8
|
+
import { directionToFaceDirection } from '../../nodes/display/FrontFacingNode.js';
|
|
8
9
|
|
|
9
10
|
import { MeshBasicMaterial } from '../MeshBasicMaterial.js';
|
|
10
11
|
|
|
@@ -59,13 +60,13 @@ class MeshBasicNodeMaterial extends NodeMaterial {
|
|
|
59
60
|
|
|
60
61
|
/**
|
|
61
62
|
* Basic materials are not affected by normal and bump maps so we
|
|
62
|
-
* return by default {@link
|
|
63
|
+
* return by default {@link normalViewGeometry}.
|
|
63
64
|
*
|
|
64
65
|
* @return {Node<vec3>} The normal node.
|
|
65
66
|
*/
|
|
66
67
|
setupNormal() {
|
|
67
68
|
|
|
68
|
-
return
|
|
69
|
+
return directionToFaceDirection( normalViewGeometry ); // see #28839
|
|
69
70
|
|
|
70
71
|
}
|
|
71
72
|
|
|
@@ -3,7 +3,7 @@ import { materialReference } from '../../nodes/accessors/MaterialReferenceNode.j
|
|
|
3
3
|
import { diffuseColor } from '../../nodes/core/PropertyNode.js';
|
|
4
4
|
import { vec3 } from '../../nodes/tsl/TSLBase.js';
|
|
5
5
|
import { mix } from '../../nodes/math/MathNode.js';
|
|
6
|
-
import { matcapUV } from '../../nodes/utils/
|
|
6
|
+
import { matcapUV } from '../../nodes/utils/MatcapUV.js';
|
|
7
7
|
|
|
8
8
|
import { MeshMatcapMaterial } from '../MeshMatcapMaterial.js';
|
|
9
9
|
|
|
@@ -2,7 +2,7 @@ import NodeMaterial from './NodeMaterial.js';
|
|
|
2
2
|
import { diffuseColor } from '../../nodes/core/PropertyNode.js';
|
|
3
3
|
import { directionToColor } from '../../nodes/utils/Packing.js';
|
|
4
4
|
import { materialOpacity } from '../../nodes/accessors/MaterialNode.js';
|
|
5
|
-
import {
|
|
5
|
+
import { normalView } from '../../nodes/accessors/Normal.js';
|
|
6
6
|
import { colorSpaceToWorking } from '../../nodes/display/ColorSpaceNode.js';
|
|
7
7
|
import { float, vec4 } from '../../nodes/tsl/TSLBase.js';
|
|
8
8
|
import { SRGBColorSpace } from '../../constants.js';
|
|
@@ -58,7 +58,7 @@ class MeshNormalNodeMaterial extends NodeMaterial {
|
|
|
58
58
|
|
|
59
59
|
// By convention, a normal packed to RGB is in sRGB color space. Convert it to working color space.
|
|
60
60
|
|
|
61
|
-
diffuseColor.assign( colorSpaceToWorking( vec4( directionToColor(
|
|
61
|
+
diffuseColor.assign( colorSpaceToWorking( vec4( directionToColor( normalView ), opacityNode ), SRGBColorSpace ) );
|
|
62
62
|
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -6,6 +6,7 @@ import { TBNViewMatrix } from '../../nodes/accessors/AccessorsUtils.js';
|
|
|
6
6
|
import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
|
|
7
7
|
import MeshStandardNodeMaterial from './MeshStandardNodeMaterial.js';
|
|
8
8
|
import { mix, pow2, min } from '../../nodes/math/MathNode.js';
|
|
9
|
+
import { subBuild } from '../../nodes/core/SubBuildNode.js';
|
|
9
10
|
|
|
10
11
|
import { MeshPhysicalMaterial } from '../MeshPhysicalMaterial.js';
|
|
11
12
|
|
|
@@ -478,7 +479,7 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
478
479
|
|
|
479
480
|
setup( builder ) {
|
|
480
481
|
|
|
481
|
-
builder.context.setupClearcoatNormal = () => this.setupClearcoatNormal( builder );
|
|
482
|
+
builder.context.setupClearcoatNormal = () => subBuild( this.setupClearcoatNormal( builder ), 'NORMAL', 'vec3' );
|
|
482
483
|
|
|
483
484
|
super.setup( builder );
|
|
484
485
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import MeshPhysicalNodeMaterial from './MeshPhysicalNodeMaterial.js';
|
|
2
2
|
import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
|
|
3
|
-
import {
|
|
3
|
+
import { normalView } from '../../nodes/accessors/Normal.js';
|
|
4
4
|
import { positionViewDirection } from '../../nodes/accessors/Position.js';
|
|
5
5
|
import { float, vec3 } from '../../nodes/tsl/TSLBase.js';
|
|
6
6
|
|
|
@@ -52,7 +52,7 @@ class SSSLightingModel extends PhysicalLightingModel {
|
|
|
52
52
|
|
|
53
53
|
const { thicknessColorNode, thicknessDistortionNode, thicknessAmbientNode, thicknessAttenuationNode, thicknessPowerNode, thicknessScaleNode } = material;
|
|
54
54
|
|
|
55
|
-
const scatteringHalf = lightDirection.add(
|
|
55
|
+
const scatteringHalf = lightDirection.add( normalView.mul( thicknessDistortionNode ) ).normalize();
|
|
56
56
|
const scatteringDot = float( positionViewDirection.dot( scatteringHalf.negate() ).saturate().pow( thicknessPowerNode ).mul( thicknessScaleNode ) );
|
|
57
57
|
const scatteringIllu = vec3( scatteringDot.add( thicknessAmbientNode ).mul( thicknessColorNode ) );
|
|
58
58
|
|
|
@@ -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
|
}
|
|
@@ -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
|
|
|
@@ -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',
|
|
@@ -126,6 +130,20 @@ class NodeMaterialObserver {
|
|
|
126
130
|
|
|
127
131
|
}
|
|
128
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Returns `true` if the current rendering produces motion vectors.
|
|
135
|
+
*
|
|
136
|
+
* @param {Renderer} renderer - The renderer.
|
|
137
|
+
* @return {boolean} Whether the current rendering produces motion vectors or not.
|
|
138
|
+
*/
|
|
139
|
+
needsVelocity( renderer ) {
|
|
140
|
+
|
|
141
|
+
const mrt = renderer.getMRT();
|
|
142
|
+
|
|
143
|
+
return ( mrt !== null && mrt.has( 'velocity' ) );
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
|
|
129
147
|
/**
|
|
130
148
|
* Returns monitoring data for the given render object.
|
|
131
149
|
*
|
|
@@ -229,7 +247,7 @@ class NodeMaterialObserver {
|
|
|
229
247
|
|
|
230
248
|
}
|
|
231
249
|
|
|
232
|
-
if ( builder.renderer.
|
|
250
|
+
if ( builder.renderer.overrideNodes.modelViewMatrix !== null || builder.renderer.overrideNodes.modelNormalViewMatrix !== null )
|
|
233
251
|
return true;
|
|
234
252
|
|
|
235
253
|
return false;
|
|
@@ -479,7 +497,7 @@ class NodeMaterialObserver {
|
|
|
479
497
|
*/
|
|
480
498
|
needsRefresh( renderObject, nodeFrame ) {
|
|
481
499
|
|
|
482
|
-
if ( this.hasNode || this.hasAnimation || this.firstInitialization( renderObject ) )
|
|
500
|
+
if ( this.hasNode || this.hasAnimation || this.firstInitialization( renderObject ) || this.needsVelocity( nodeFrame.renderer ) )
|
|
483
501
|
return true;
|
|
484
502
|
|
|
485
503
|
const { renderId } = nodeFrame;
|