@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
|
@@ -154,10 +154,28 @@ class ReflectorNode extends TextureNode {
|
|
|
154
154
|
|
|
155
155
|
clone() {
|
|
156
156
|
|
|
157
|
-
const
|
|
158
|
-
|
|
157
|
+
const newNode = new this.constructor( this.reflectorNode );
|
|
158
|
+
newNode.uvNode = this.uvNode;
|
|
159
|
+
newNode.levelNode = this.levelNode;
|
|
160
|
+
newNode.biasNode = this.biasNode;
|
|
161
|
+
newNode.sampler = this.sampler;
|
|
162
|
+
newNode.depthNode = this.depthNode;
|
|
163
|
+
newNode.compareNode = this.compareNode;
|
|
164
|
+
newNode.gradNode = this.gradNode;
|
|
165
|
+
newNode._reflectorBaseNode = this._reflectorBaseNode;
|
|
166
|
+
|
|
167
|
+
return newNode;
|
|
159
168
|
|
|
160
|
-
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Frees internal resources. Should be called when the node is no longer in use.
|
|
173
|
+
*/
|
|
174
|
+
dispose() {
|
|
175
|
+
|
|
176
|
+
super.dispose();
|
|
177
|
+
|
|
178
|
+
this._reflectorBaseNode.dispose();
|
|
161
179
|
|
|
162
180
|
}
|
|
163
181
|
|
|
@@ -269,9 +287,9 @@ class ReflectorBaseNode extends Node {
|
|
|
269
287
|
/**
|
|
270
288
|
* Weak map for managing render targets.
|
|
271
289
|
*
|
|
272
|
-
* @type {
|
|
290
|
+
* @type {Map<Camera, RenderTarget>}
|
|
273
291
|
*/
|
|
274
|
-
this.renderTargets = new
|
|
292
|
+
this.renderTargets = new Map();
|
|
275
293
|
|
|
276
294
|
/**
|
|
277
295
|
* Force render even if reflector is facing away from camera.
|
|
@@ -281,6 +299,17 @@ class ReflectorBaseNode extends Node {
|
|
|
281
299
|
*/
|
|
282
300
|
this.forceUpdate = false;
|
|
283
301
|
|
|
302
|
+
/**
|
|
303
|
+
* Whether the reflector has been rendered or not.
|
|
304
|
+
*
|
|
305
|
+
* When the reflector is facing away from the camera,
|
|
306
|
+
* this flag is set to `false` and the texture will be empty(black).
|
|
307
|
+
*
|
|
308
|
+
* @type {boolean}
|
|
309
|
+
* @default {false}
|
|
310
|
+
*/
|
|
311
|
+
this.hasOutput = false;
|
|
312
|
+
|
|
284
313
|
}
|
|
285
314
|
|
|
286
315
|
/**
|
|
@@ -308,6 +337,21 @@ class ReflectorBaseNode extends Node {
|
|
|
308
337
|
|
|
309
338
|
}
|
|
310
339
|
|
|
340
|
+
/**
|
|
341
|
+
* Frees internal resources. Should be called when the node is no longer in use.
|
|
342
|
+
*/
|
|
343
|
+
dispose() {
|
|
344
|
+
|
|
345
|
+
super.dispose();
|
|
346
|
+
|
|
347
|
+
for ( const renderTarget of this.renderTargets.values() ) {
|
|
348
|
+
|
|
349
|
+
renderTarget.dispose();
|
|
350
|
+
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
}
|
|
354
|
+
|
|
311
355
|
/**
|
|
312
356
|
* Returns a virtual camera for the given camera. The virtual camera is used to
|
|
313
357
|
* render the scene from the reflector's view so correct reflections can be produced.
|
|
@@ -398,7 +442,21 @@ class ReflectorBaseNode extends Node {
|
|
|
398
442
|
// Avoid rendering when reflector is facing away unless forcing an update
|
|
399
443
|
const isFacingAway = _view.dot( _normal ) > 0;
|
|
400
444
|
|
|
401
|
-
|
|
445
|
+
let needsClear = false;
|
|
446
|
+
|
|
447
|
+
if ( isFacingAway === true && this.forceUpdate === false ) {
|
|
448
|
+
|
|
449
|
+
if ( this.hasOutput === false ) {
|
|
450
|
+
|
|
451
|
+
_inReflector = false;
|
|
452
|
+
|
|
453
|
+
return;
|
|
454
|
+
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
needsClear = true;
|
|
458
|
+
|
|
459
|
+
}
|
|
402
460
|
|
|
403
461
|
_view.reflect( _normal ).negate();
|
|
404
462
|
_view.add( _reflectorWorldPosition );
|
|
@@ -473,7 +531,19 @@ class ReflectorBaseNode extends Node {
|
|
|
473
531
|
renderer.setRenderTarget( renderTarget );
|
|
474
532
|
renderer.autoClear = true;
|
|
475
533
|
|
|
476
|
-
|
|
534
|
+
if ( needsClear ) {
|
|
535
|
+
|
|
536
|
+
renderer.clear();
|
|
537
|
+
|
|
538
|
+
this.hasOutput = false;
|
|
539
|
+
|
|
540
|
+
} else {
|
|
541
|
+
|
|
542
|
+
renderer.render( scene, virtualCamera );
|
|
543
|
+
|
|
544
|
+
this.hasOutput = true;
|
|
545
|
+
|
|
546
|
+
}
|
|
477
547
|
|
|
478
548
|
renderer.setMRT( currentMRT );
|
|
479
549
|
renderer.setRenderTarget( currentRenderTarget );
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import { uv } from '../accessors/UV.js';
|
|
3
|
+
import { nodeObject } from '../tsl/TSLCore.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Class representing a node that samples a value using a provided callback function.
|
|
7
|
+
*
|
|
8
|
+
* @extends Node
|
|
9
|
+
*/
|
|
10
|
+
class SampleNode extends Node {
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Returns the type of the node.
|
|
14
|
+
*
|
|
15
|
+
* @type {string}
|
|
16
|
+
* @readonly
|
|
17
|
+
* @static
|
|
18
|
+
*/
|
|
19
|
+
static get type() {
|
|
20
|
+
|
|
21
|
+
return 'SampleNode';
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Creates an instance of SampleNode.
|
|
27
|
+
*
|
|
28
|
+
* @param {Function} callback - The function to be called when sampling. Should accept a UV node and return a value.
|
|
29
|
+
*/
|
|
30
|
+
constructor( callback ) {
|
|
31
|
+
|
|
32
|
+
super();
|
|
33
|
+
|
|
34
|
+
this.callback = callback;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* This flag can be used for type testing.
|
|
38
|
+
*
|
|
39
|
+
* @type {boolean}
|
|
40
|
+
* @readonly
|
|
41
|
+
* @default true
|
|
42
|
+
*/
|
|
43
|
+
this.isSampleNode = true;
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Sets up the node by sampling with the default UV accessor.
|
|
49
|
+
*
|
|
50
|
+
* @returns {Node} The result of the callback function when called with the UV node.
|
|
51
|
+
*/
|
|
52
|
+
setup() {
|
|
53
|
+
|
|
54
|
+
return this.sample( uv() );
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Calls the callback function with the provided UV node.
|
|
60
|
+
*
|
|
61
|
+
* @param {Node<vec2>} uv - The UV node or value to be passed to the callback.
|
|
62
|
+
* @returns {Node} The result of the callback function.
|
|
63
|
+
*/
|
|
64
|
+
sample( uv ) {
|
|
65
|
+
|
|
66
|
+
return this.callback( uv );
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export default SampleNode;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Helper function to create a SampleNode wrapped as a node object.
|
|
76
|
+
*
|
|
77
|
+
* @function
|
|
78
|
+
* @param {Function} callback - The function to be called when sampling. Should accept a UV node and return a value.
|
|
79
|
+
* @returns {SampleNode} The created SampleNode instance wrapped as a node object.
|
|
80
|
+
*/
|
|
81
|
+
export const sample = ( callback ) => nodeObject( new SampleNode( callback ) );
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { add } from '../math/OperatorNode.js';
|
|
2
|
+
import { normalLocal } from '../accessors/Normal.js';
|
|
3
|
+
import { positionLocal } from '../accessors/Position.js';
|
|
4
|
+
import { texture } from '../accessors/TextureNode.js';
|
|
5
|
+
import { float, vec3, Fn } from '../tsl/TSLBase.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* TSL function for creating a triplanar textures node.
|
|
9
|
+
*
|
|
10
|
+
* Can be used for triplanar texture mapping.
|
|
11
|
+
*
|
|
12
|
+
* ```js
|
|
13
|
+
* material.colorNode = triplanarTexture( texture( diffuseMap ) );
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @tsl
|
|
17
|
+
* @function
|
|
18
|
+
* @param {Node} textureXNode - First texture node.
|
|
19
|
+
* @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
20
|
+
* @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
21
|
+
* @param {?Node<float>} [scaleNode=float(1)] - The scale node.
|
|
22
|
+
* @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
|
|
23
|
+
* @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
|
|
24
|
+
* @returns {Node<vec4>}
|
|
25
|
+
*/
|
|
26
|
+
export const triplanarTextures = /*@__PURE__*/ Fn( ( [ textureXNode, textureYNode = null, textureZNode = null, scaleNode = float( 1 ), positionNode = positionLocal, normalNode = normalLocal ] ) => {
|
|
27
|
+
|
|
28
|
+
// Reference: https://github.com/keijiro/StandardTriplanar
|
|
29
|
+
|
|
30
|
+
// Blending factor of triplanar mapping
|
|
31
|
+
let bf = normalNode.abs().normalize();
|
|
32
|
+
bf = bf.div( bf.dot( vec3( 1.0 ) ) );
|
|
33
|
+
|
|
34
|
+
// Triplanar mapping
|
|
35
|
+
const tx = positionNode.yz.mul( scaleNode );
|
|
36
|
+
const ty = positionNode.zx.mul( scaleNode );
|
|
37
|
+
const tz = positionNode.xy.mul( scaleNode );
|
|
38
|
+
|
|
39
|
+
// Base color
|
|
40
|
+
const textureX = textureXNode.value;
|
|
41
|
+
const textureY = textureYNode !== null ? textureYNode.value : textureX;
|
|
42
|
+
const textureZ = textureZNode !== null ? textureZNode.value : textureX;
|
|
43
|
+
|
|
44
|
+
const cx = texture( textureX, tx ).mul( bf.x );
|
|
45
|
+
const cy = texture( textureY, ty ).mul( bf.y );
|
|
46
|
+
const cz = texture( textureZ, tz ).mul( bf.z );
|
|
47
|
+
|
|
48
|
+
return add( cx, cy, cz );
|
|
49
|
+
|
|
50
|
+
} );
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* TSL function for creating a triplanar textures node.
|
|
54
|
+
*
|
|
55
|
+
* @tsl
|
|
56
|
+
* @function
|
|
57
|
+
* @param {Node} textureXNode - First texture node.
|
|
58
|
+
* @param {?Node} [textureYNode=null] - Second texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
59
|
+
* @param {?Node} [textureZNode=null] - Third texture node. When not set, the shader will sample from `textureXNode` instead.
|
|
60
|
+
* @param {?Node<float>} [scaleNode=float(1)] - The scale node.
|
|
61
|
+
* @param {?Node<vec3>} [positionNode=positionLocal] - Vertex positions in local space.
|
|
62
|
+
* @param {?Node<vec3>} [normalNode=normalLocal] - Normals in local space.
|
|
63
|
+
* @returns {Node<vec4>}
|
|
64
|
+
*/
|
|
65
|
+
export const triplanarTexture = ( ...params ) => triplanarTextures( ...params );
|
|
@@ -10,6 +10,7 @@ import { Sphere } from '../math/Sphere.js';
|
|
|
10
10
|
import { Frustum } from '../math/Frustum.js';
|
|
11
11
|
import { Vector3 } from '../math/Vector3.js';
|
|
12
12
|
import { Color } from '../math/Color.js';
|
|
13
|
+
import { FrustumArray } from '../math/FrustumArray.js';
|
|
13
14
|
|
|
14
15
|
function ascIdSort( a, b ) {
|
|
15
16
|
|
|
@@ -79,6 +80,7 @@ class MultiDrawRenderList {
|
|
|
79
80
|
const _matrix = /*@__PURE__*/ new Matrix4();
|
|
80
81
|
const _whiteColor = /*@__PURE__*/ new Color( 1, 1, 1 );
|
|
81
82
|
const _frustum = /*@__PURE__*/ new Frustum();
|
|
83
|
+
const _frustumArray = /*@__PURE__*/ new FrustumArray();
|
|
82
84
|
const _box = /*@__PURE__*/ new Box3();
|
|
83
85
|
const _sphere = /*@__PURE__*/ new Sphere();
|
|
84
86
|
const _vector = /*@__PURE__*/ new Vector3();
|
|
@@ -1441,15 +1443,24 @@ class BatchedMesh extends Mesh {
|
|
|
1441
1443
|
} ) );
|
|
1442
1444
|
this._instanceInfo = source._instanceInfo.map( info => ( { ...info } ) );
|
|
1443
1445
|
|
|
1446
|
+
this._availableInstanceIds = source._availableInstanceIds.slice();
|
|
1447
|
+
this._availableGeometryIds = source._availableGeometryIds.slice();
|
|
1448
|
+
|
|
1449
|
+
this._nextIndexStart = source._nextIndexStart;
|
|
1450
|
+
this._nextVertexStart = source._nextVertexStart;
|
|
1451
|
+
this._geometryCount = source._geometryCount;
|
|
1452
|
+
|
|
1444
1453
|
this._maxInstanceCount = source._maxInstanceCount;
|
|
1445
1454
|
this._maxVertexCount = source._maxVertexCount;
|
|
1446
1455
|
this._maxIndexCount = source._maxIndexCount;
|
|
1447
1456
|
|
|
1448
1457
|
this._geometryInitialized = source._geometryInitialized;
|
|
1449
|
-
this._geometryCount = source._geometryCount;
|
|
1450
1458
|
this._multiDrawCounts = source._multiDrawCounts.slice();
|
|
1451
1459
|
this._multiDrawStarts = source._multiDrawStarts.slice();
|
|
1452
1460
|
|
|
1461
|
+
this._indirectTexture = source._indirectTexture.clone();
|
|
1462
|
+
this._indirectTexture.image.data = this._indirectTexture.image.data.slice();
|
|
1463
|
+
|
|
1453
1464
|
this._matricesTexture = source._matricesTexture.clone();
|
|
1454
1465
|
this._matricesTexture.image.data = this._matricesTexture.image.data.slice();
|
|
1455
1466
|
|
|
@@ -1511,8 +1522,9 @@ class BatchedMesh extends Mesh {
|
|
|
1511
1522
|
const indirectTexture = this._indirectTexture;
|
|
1512
1523
|
const indirectArray = indirectTexture.image.data;
|
|
1513
1524
|
|
|
1525
|
+
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
1514
1526
|
// prepare the frustum in the local frame
|
|
1515
|
-
if ( perObjectFrustumCulled ) {
|
|
1527
|
+
if ( perObjectFrustumCulled && ! camera.isArrayCamera ) {
|
|
1516
1528
|
|
|
1517
1529
|
_matrix
|
|
1518
1530
|
.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )
|
|
@@ -1546,7 +1558,7 @@ class BatchedMesh extends Mesh {
|
|
|
1546
1558
|
let culled = false;
|
|
1547
1559
|
if ( perObjectFrustumCulled ) {
|
|
1548
1560
|
|
|
1549
|
-
culled = !
|
|
1561
|
+
culled = ! frustum.intersectsSphere( _sphere, camera );
|
|
1550
1562
|
|
|
1551
1563
|
}
|
|
1552
1564
|
|
|
@@ -1603,7 +1615,7 @@ class BatchedMesh extends Mesh {
|
|
|
1603
1615
|
// get the bounds in world space
|
|
1604
1616
|
this.getMatrixAt( i, _matrix );
|
|
1605
1617
|
this.getBoundingSphereAt( geometryId, _sphere ).applyMatrix4( _matrix );
|
|
1606
|
-
culled = !
|
|
1618
|
+
culled = ! frustum.intersectsSphere( _sphere, camera );
|
|
1607
1619
|
|
|
1608
1620
|
}
|
|
1609
1621
|
|
package/src/objects/Mesh.js
CHANGED
|
@@ -94,6 +94,15 @@ class Mesh extends Object3D {
|
|
|
94
94
|
*/
|
|
95
95
|
this.morphTargetInfluences = undefined;
|
|
96
96
|
|
|
97
|
+
/**
|
|
98
|
+
* The number of instances of this mesh.
|
|
99
|
+
* Can only be used with {@link WebGPURenderer}.
|
|
100
|
+
*
|
|
101
|
+
* @type {number}
|
|
102
|
+
* @default 1
|
|
103
|
+
*/
|
|
104
|
+
this.count = 1;
|
|
105
|
+
|
|
97
106
|
this.updateMorphTargets();
|
|
98
107
|
|
|
99
108
|
}
|
package/src/objects/Skeleton.js
CHANGED
package/src/objects/Sprite.js
CHANGED
|
@@ -108,6 +108,15 @@ class Sprite extends Object3D {
|
|
|
108
108
|
*/
|
|
109
109
|
this.center = new Vector2( 0.5, 0.5 );
|
|
110
110
|
|
|
111
|
+
/**
|
|
112
|
+
* The number of instances of this sprite.
|
|
113
|
+
* Can only be used with {@link WebGPURenderer}.
|
|
114
|
+
*
|
|
115
|
+
* @type {number}
|
|
116
|
+
* @default 1
|
|
117
|
+
*/
|
|
118
|
+
this.count = 1;
|
|
119
|
+
|
|
111
120
|
}
|
|
112
121
|
|
|
113
122
|
/**
|
|
@@ -41,7 +41,8 @@ class WebGLCubeRenderTarget extends WebGLRenderTarget {
|
|
|
41
41
|
*
|
|
42
42
|
* @type {DataArrayTexture}
|
|
43
43
|
*/
|
|
44
|
-
this.texture = new CubeTexture( images
|
|
44
|
+
this.texture = new CubeTexture( images );
|
|
45
|
+
this._setTextureOptions( options );
|
|
45
46
|
|
|
46
47
|
// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)
|
|
47
48
|
// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,
|
|
@@ -53,9 +54,6 @@ class WebGLCubeRenderTarget extends WebGLRenderTarget {
|
|
|
53
54
|
|
|
54
55
|
this.texture.isRenderTargetTexture = true;
|
|
55
56
|
|
|
56
|
-
this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;
|
|
57
|
-
this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;
|
|
58
|
-
|
|
59
57
|
}
|
|
60
58
|
|
|
61
59
|
/**
|
|
@@ -1297,7 +1297,7 @@ class WebGLRenderer {
|
|
|
1297
1297
|
* @param {Object3D} scene - The scene or another type of 3D object to precompile.
|
|
1298
1298
|
* @param {Camera} camera - The camera.
|
|
1299
1299
|
* @param {?Scene} [targetScene=null] - The target scene.
|
|
1300
|
-
* @return {
|
|
1300
|
+
* @return {Set<Material>} The precompiled materials.
|
|
1301
1301
|
*/
|
|
1302
1302
|
this.compile = function ( scene, camera, targetScene = null ) {
|
|
1303
1303
|
|
|
@@ -1890,6 +1890,9 @@ class WebGLRenderer {
|
|
|
1890
1890
|
//
|
|
1891
1891
|
|
|
1892
1892
|
const currentRenderTarget = _this.getRenderTarget();
|
|
1893
|
+
const currentActiveCubeFace = _this.getActiveCubeFace();
|
|
1894
|
+
const currentActiveMipmapLevel = _this.getActiveMipmapLevel();
|
|
1895
|
+
|
|
1893
1896
|
_this.setRenderTarget( transmissionRenderTarget );
|
|
1894
1897
|
|
|
1895
1898
|
_this.getClearColor( _currentClearColor );
|
|
@@ -1959,7 +1962,7 @@ class WebGLRenderer {
|
|
|
1959
1962
|
|
|
1960
1963
|
}
|
|
1961
1964
|
|
|
1962
|
-
_this.setRenderTarget( currentRenderTarget );
|
|
1965
|
+
_this.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );
|
|
1963
1966
|
|
|
1964
1967
|
_this.setClearColor( _currentClearColor, _currentClearAlpha );
|
|
1965
1968
|
|
|
@@ -2858,8 +2861,9 @@ class WebGLRenderer {
|
|
|
2858
2861
|
* @param {number} height - The height of the copy region.
|
|
2859
2862
|
* @param {TypedArray} buffer - The result buffer.
|
|
2860
2863
|
* @param {number} [activeCubeFaceIndex] - The active cube face index.
|
|
2864
|
+
* @param {number} [textureIndex=0] - The texture index of an MRT render target.
|
|
2861
2865
|
*/
|
|
2862
|
-
this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
|
|
2866
|
+
this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex, textureIndex = 0 ) {
|
|
2863
2867
|
|
|
2864
2868
|
if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
|
|
2865
2869
|
|
|
@@ -2882,7 +2886,7 @@ class WebGLRenderer {
|
|
|
2882
2886
|
|
|
2883
2887
|
try {
|
|
2884
2888
|
|
|
2885
|
-
const texture = renderTarget.
|
|
2889
|
+
const texture = renderTarget.textures[ textureIndex ];
|
|
2886
2890
|
const textureFormat = texture.format;
|
|
2887
2891
|
const textureType = texture.type;
|
|
2888
2892
|
|
|
@@ -2904,6 +2908,10 @@ class WebGLRenderer {
|
|
|
2904
2908
|
|
|
2905
2909
|
if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
|
|
2906
2910
|
|
|
2911
|
+
// when using MRT, select the correct color buffer for the subsequent read command
|
|
2912
|
+
|
|
2913
|
+
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
2914
|
+
|
|
2907
2915
|
_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );
|
|
2908
2916
|
|
|
2909
2917
|
}
|
|
@@ -2934,9 +2942,10 @@ class WebGLRenderer {
|
|
|
2934
2942
|
* @param {number} height - The height of the copy region.
|
|
2935
2943
|
* @param {TypedArray} buffer - The result buffer.
|
|
2936
2944
|
* @param {number} [activeCubeFaceIndex] - The active cube face index.
|
|
2945
|
+
* @param {number} [textureIndex=0] - The texture index of an MRT render target.
|
|
2937
2946
|
* @return {Promise<TypedArray>} A Promise that resolves when the read has been finished. The resolve provides the read data as a typed array.
|
|
2938
2947
|
*/
|
|
2939
|
-
this.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
|
|
2948
|
+
this.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex, textureIndex = 0 ) {
|
|
2940
2949
|
|
|
2941
2950
|
if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
|
|
2942
2951
|
|
|
@@ -2959,7 +2968,7 @@ class WebGLRenderer {
|
|
|
2959
2968
|
// set the active frame buffer to the one we want to read
|
|
2960
2969
|
state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
|
|
2961
2970
|
|
|
2962
|
-
const texture = renderTarget.
|
|
2971
|
+
const texture = renderTarget.textures[ textureIndex ];
|
|
2963
2972
|
const textureFormat = texture.format;
|
|
2964
2973
|
const textureType = texture.type;
|
|
2965
2974
|
|
|
@@ -2978,6 +2987,11 @@ class WebGLRenderer {
|
|
|
2978
2987
|
const glBuffer = _gl.createBuffer();
|
|
2979
2988
|
_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
|
|
2980
2989
|
_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
|
|
2990
|
+
|
|
2991
|
+
// when using MRT, select the corect color buffer for the subsequent read command
|
|
2992
|
+
|
|
2993
|
+
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
2994
|
+
|
|
2981
2995
|
_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );
|
|
2982
2996
|
|
|
2983
2997
|
// reset the frame buffer to the currently set buffer before waiting
|
|
@@ -3013,7 +3027,7 @@ class WebGLRenderer {
|
|
|
3013
3027
|
* Copies pixels from the current bound framebuffer into the given texture.
|
|
3014
3028
|
*
|
|
3015
3029
|
* @param {FramebufferTexture} texture - The texture.
|
|
3016
|
-
* @param {Vector2} position - The start position of the copy operation.
|
|
3030
|
+
* @param {?Vector2} [position=null] - The start position of the copy operation.
|
|
3017
3031
|
* @param {number} [level=0] - The mip level. The default represents the base mip.
|
|
3018
3032
|
*/
|
|
3019
3033
|
this.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {
|
|
@@ -3044,10 +3058,10 @@ class WebGLRenderer {
|
|
|
3044
3058
|
*
|
|
3045
3059
|
* @param {Texture} srcTexture - The source texture.
|
|
3046
3060
|
* @param {Texture} dstTexture - The destination texture.
|
|
3047
|
-
* @param {Box2|Box3} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
|
|
3048
|
-
* @param {Vector2|Vector3} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
|
|
3049
|
-
* @param {number} srcLevel - The source mipmap level to copy.
|
|
3050
|
-
* @param {number} dstLevel - The destination mipmap level.
|
|
3061
|
+
* @param {?(Box2|Box3)} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
|
|
3062
|
+
* @param {?(Vector2|Vector3)} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
|
|
3063
|
+
* @param {number} [srcLevel=0] - The source mipmap level to copy.
|
|
3064
|
+
* @param {?number} [dstLevel=null] - The destination mipmap level.
|
|
3051
3065
|
*/
|
|
3052
3066
|
this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
|
|
3053
3067
|
|
|
@@ -32,9 +32,9 @@ class Animation {
|
|
|
32
32
|
* A reference to the context from `requestAnimationFrame()` can
|
|
33
33
|
* be called (usually `window`).
|
|
34
34
|
*
|
|
35
|
-
* @type {Window|XRSession}
|
|
35
|
+
* @type {?(Window|XRSession)}
|
|
36
36
|
*/
|
|
37
|
-
this._context = self;
|
|
37
|
+
this._context = typeof self !== 'undefined' ? self : null;
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* The user-defined animation loop.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import Color4 from './Color4.js';
|
|
3
|
-
import { vec4, context,
|
|
3
|
+
import { vec4, context, normalWorldGeometry, backgroundBlurriness, backgroundIntensity, backgroundRotation, modelViewProjection } from '../../nodes/TSL.js';
|
|
4
4
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
5
5
|
|
|
6
6
|
import { Mesh } from '../../objects/Mesh.js';
|
|
@@ -89,7 +89,7 @@ class Background extends DataMap {
|
|
|
89
89
|
|
|
90
90
|
const backgroundMeshNode = context( vec4( backgroundNode ).mul( backgroundIntensity ), {
|
|
91
91
|
// @TODO: Add Texture2D support using node context
|
|
92
|
-
getUV: () => backgroundRotation.mul(
|
|
92
|
+
getUV: () => backgroundRotation.mul( normalWorldGeometry ),
|
|
93
93
|
getTextureLevel: () => backgroundBlurriness
|
|
94
94
|
} );
|
|
95
95
|
|
|
@@ -118,6 +118,17 @@ class Background extends DataMap {
|
|
|
118
118
|
|
|
119
119
|
};
|
|
120
120
|
|
|
121
|
+
function onBackgroundDispose() {
|
|
122
|
+
|
|
123
|
+
background.removeEventListener( 'dispose', onBackgroundDispose );
|
|
124
|
+
|
|
125
|
+
backgroundMesh.material.dispose();
|
|
126
|
+
backgroundMesh.geometry.dispose();
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
background.addEventListener( 'dispose', onBackgroundDispose );
|
|
131
|
+
|
|
121
132
|
}
|
|
122
133
|
|
|
123
134
|
const backgroundCacheKey = backgroundNode.getCacheKey();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { equirectUV } from '../../nodes/utils/
|
|
1
|
+
import { equirectUV } from '../../nodes/utils/EquirectUV.js';
|
|
2
2
|
import { texture as TSL_Texture } from '../../nodes/accessors/TextureNode.js';
|
|
3
3
|
import { positionWorldDirection } from '../../nodes/accessors/Position.js';
|
|
4
4
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|