@plastic-software/three 0.175.14 → 0.179.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +2 -1
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +22 -8
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +57 -38
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +679 -300
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -2
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +211 -22
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +213 -30
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +4 -3
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +22 -19
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +149 -13
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +14 -12
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +22 -19
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +12 -10
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +9 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +110 -24
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +71 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +20 -6
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +505 -143
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { expression } from '../code/ExpressionNode.js';
|
|
3
|
-
import { nodeObject, nodeArray } from '../tsl/TSLBase.js';
|
|
3
|
+
import { nodeObject, nodeArray, Fn } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* This module offers a variety of ways to implement loops in TSL. In it's basic form it's:
|
|
@@ -101,9 +101,17 @@ class LoopNode extends Node {
|
|
|
101
101
|
|
|
102
102
|
const stack = builder.addStack(); // TODO: cache() it
|
|
103
103
|
|
|
104
|
-
properties.returnsNode = this.params[ this.params.length - 1 ]( inputs,
|
|
104
|
+
properties.returnsNode = this.params[ this.params.length - 1 ]( inputs, builder );
|
|
105
105
|
properties.stackNode = stack;
|
|
106
106
|
|
|
107
|
+
const baseParam = this.params[ 0 ];
|
|
108
|
+
|
|
109
|
+
if ( baseParam.isNode !== true && typeof baseParam.update === 'function' ) {
|
|
110
|
+
|
|
111
|
+
properties.updateNode = Fn( this.params[ 0 ].update )( inputs );
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
|
|
107
115
|
builder.removeStack();
|
|
108
116
|
|
|
109
117
|
return properties;
|
|
@@ -222,30 +230,69 @@ class LoopNode extends Node {
|
|
|
222
230
|
const startSnippet = internalParam.start;
|
|
223
231
|
const endSnippet = internalParam.end;
|
|
224
232
|
|
|
225
|
-
let
|
|
226
|
-
|
|
227
|
-
|
|
233
|
+
let updateSnippet;
|
|
234
|
+
|
|
235
|
+
const deltaOperator = () => condition.includes( '<' ) ? '+=' : '-=';
|
|
236
|
+
|
|
237
|
+
if ( update !== undefined && update !== null ) {
|
|
238
|
+
|
|
239
|
+
switch ( typeof update ) {
|
|
240
|
+
|
|
241
|
+
case 'function':
|
|
242
|
+
|
|
243
|
+
const flow = builder.flowStagesNode( properties.updateNode, 'void' );
|
|
244
|
+
const snippet = flow.code.replace( /\t|;/g, '' );
|
|
245
|
+
|
|
246
|
+
updateSnippet = snippet;
|
|
247
|
+
|
|
248
|
+
break;
|
|
249
|
+
|
|
250
|
+
case 'number':
|
|
251
|
+
|
|
252
|
+
updateSnippet = name + ' ' + deltaOperator() + ' ' + builder.generateConst( type, update );
|
|
253
|
+
|
|
254
|
+
break;
|
|
255
|
+
|
|
256
|
+
case 'string':
|
|
257
|
+
|
|
258
|
+
updateSnippet = name + ' ' + update;
|
|
259
|
+
|
|
260
|
+
break;
|
|
261
|
+
|
|
262
|
+
default:
|
|
263
|
+
|
|
264
|
+
if ( update.isNode ) {
|
|
228
265
|
|
|
229
|
-
|
|
266
|
+
updateSnippet = name + ' ' + deltaOperator() + ' ' + update.build( builder );
|
|
267
|
+
|
|
268
|
+
} else {
|
|
269
|
+
|
|
270
|
+
console.error( 'THREE.TSL: \'Loop( { update: ... } )\' is not a function, string or number.' );
|
|
271
|
+
|
|
272
|
+
updateSnippet = 'break /* invalid update */';
|
|
273
|
+
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
} else {
|
|
230
279
|
|
|
231
280
|
if ( type === 'int' || type === 'uint' ) {
|
|
232
281
|
|
|
233
|
-
|
|
234
|
-
else update = '--';
|
|
282
|
+
update = condition.includes( '<' ) ? '++' : '--';
|
|
235
283
|
|
|
236
284
|
} else {
|
|
237
285
|
|
|
238
|
-
|
|
239
|
-
else update = '-= 1.';
|
|
286
|
+
update = deltaOperator() + ' 1.';
|
|
240
287
|
|
|
241
288
|
}
|
|
242
289
|
|
|
243
|
-
|
|
290
|
+
updateSnippet = name + ' ' + update;
|
|
244
291
|
|
|
245
|
-
|
|
292
|
+
}
|
|
246
293
|
|
|
247
|
-
|
|
248
|
-
|
|
294
|
+
const declarationSnippet = builder.getVar( type, name ) + ' = ' + startSnippet;
|
|
295
|
+
const conditionalSnippet = name + ' ' + condition + ' ' + endSnippet;
|
|
249
296
|
|
|
250
297
|
loopSnippet = `for ( ${ declarationSnippet }; ${ conditionalSnippet }; ${ updateSnippet } )`;
|
|
251
298
|
|
|
@@ -285,7 +332,7 @@ export default LoopNode;
|
|
|
285
332
|
* @param {...any} params - A list of parameters.
|
|
286
333
|
* @returns {LoopNode}
|
|
287
334
|
*/
|
|
288
|
-
export const Loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) ).
|
|
335
|
+
export const Loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) ).toStack();
|
|
289
336
|
|
|
290
337
|
/**
|
|
291
338
|
* TSL function for creating a `Continue()` expression.
|
|
@@ -294,7 +341,7 @@ export const Loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params
|
|
|
294
341
|
* @function
|
|
295
342
|
* @returns {ExpressionNode}
|
|
296
343
|
*/
|
|
297
|
-
export const Continue = () => expression( 'continue' ).
|
|
344
|
+
export const Continue = () => expression( 'continue' ).toStack();
|
|
298
345
|
|
|
299
346
|
/**
|
|
300
347
|
* TSL function for creating a `Break()` expression.
|
|
@@ -303,21 +350,4 @@ export const Continue = () => expression( 'continue' ).append();
|
|
|
303
350
|
* @function
|
|
304
351
|
* @returns {ExpressionNode}
|
|
305
352
|
*/
|
|
306
|
-
export const Break = () => expression( 'break' ).
|
|
307
|
-
|
|
308
|
-
// Deprecated
|
|
309
|
-
|
|
310
|
-
/**
|
|
311
|
-
* @tsl
|
|
312
|
-
* @function
|
|
313
|
-
* @deprecated since r168. Use {@link Loop} instead.
|
|
314
|
-
*
|
|
315
|
-
* @param {...any} params
|
|
316
|
-
* @returns {LoopNode}
|
|
317
|
-
*/
|
|
318
|
-
export const loop = ( ...params ) => { // @deprecated, r168
|
|
319
|
-
|
|
320
|
-
console.warn( 'THREE.TSL: loop() has been renamed to Loop().' );
|
|
321
|
-
return Loop( ...params );
|
|
322
|
-
|
|
323
|
-
};
|
|
353
|
+
export const Break = () => expression( 'break' ).toStack();
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { normalView } from '../accessors/Normal.js';
|
|
2
|
+
import { positionViewDirection } from '../accessors/Position.js';
|
|
3
|
+
import { Fn, vec2, vec3 } from '../tsl/TSLBase.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* TSL function for creating a matcap uv node.
|
|
7
|
+
*
|
|
8
|
+
* Can be used to compute texture coordinates for projecting a
|
|
9
|
+
* matcap onto a mesh. Used by {@link MeshMatcapNodeMaterial}.
|
|
10
|
+
*
|
|
11
|
+
* @tsl
|
|
12
|
+
* @function
|
|
13
|
+
* @returns {Node<vec2>} The matcap UV coordinates.
|
|
14
|
+
*/
|
|
15
|
+
export const matcapUV = /*@__PURE__*/ Fn( () => {
|
|
16
|
+
|
|
17
|
+
const x = vec3( positionViewDirection.z, 0, positionViewDirection.x.negate() ).normalize();
|
|
18
|
+
const y = positionViewDirection.cross( x );
|
|
19
|
+
|
|
20
|
+
return vec2( x.dot( normalView ), y.dot( normalView ) ).mul( 0.495 ).add( 0.5 ); // 0.495 to remove artifacts caused by undersized matcap disks
|
|
21
|
+
|
|
22
|
+
} ).once( [ 'NORMAL', 'VERTEX' ] )().toVar( 'matcapUV' );
|
|
@@ -41,6 +41,15 @@ class RTTNode extends TextureNode {
|
|
|
41
41
|
|
|
42
42
|
super( renderTarget.texture, uv() );
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* This flag can be used for type testing.
|
|
46
|
+
*
|
|
47
|
+
* @type {boolean}
|
|
48
|
+
* @readonly
|
|
49
|
+
* @default true
|
|
50
|
+
*/
|
|
51
|
+
this.isRTTNode = true;
|
|
52
|
+
|
|
44
53
|
/**
|
|
45
54
|
* The node to render a texture with.
|
|
46
55
|
*
|
|
@@ -131,7 +140,7 @@ class RTTNode extends TextureNode {
|
|
|
131
140
|
* @readonly
|
|
132
141
|
* @default true
|
|
133
142
|
*/
|
|
134
|
-
get
|
|
143
|
+
get autoResize() {
|
|
135
144
|
|
|
136
145
|
return this.width === null;
|
|
137
146
|
|
|
@@ -188,13 +197,21 @@ class RTTNode extends TextureNode {
|
|
|
188
197
|
|
|
189
198
|
//
|
|
190
199
|
|
|
191
|
-
if ( this.
|
|
192
|
-
|
|
193
|
-
this.pixelRatio = renderer.getPixelRatio();
|
|
200
|
+
if ( this.autoResize === true ) {
|
|
194
201
|
|
|
202
|
+
const pixelRatio = renderer.getPixelRatio();
|
|
195
203
|
const size = renderer.getSize( _size );
|
|
196
204
|
|
|
197
|
-
|
|
205
|
+
const effectiveWidth = size.width * pixelRatio;
|
|
206
|
+
const effectiveHeight = size.height * pixelRatio;
|
|
207
|
+
|
|
208
|
+
if ( effectiveWidth !== this.renderTarget.width || effectiveHeight !== this.renderTarget.height ) {
|
|
209
|
+
|
|
210
|
+
this.renderTarget.setSize( effectiveWidth, effectiveHeight );
|
|
211
|
+
|
|
212
|
+
this.textureNeedsUpdate = true;
|
|
213
|
+
|
|
214
|
+
}
|
|
198
215
|
|
|
199
216
|
}
|
|
200
217
|
|
|
@@ -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();
|
|
@@ -1249,7 +1251,7 @@ class BatchedMesh extends Mesh {
|
|
|
1249
1251
|
const availableInstanceIds = this._availableInstanceIds;
|
|
1250
1252
|
const instanceInfo = this._instanceInfo;
|
|
1251
1253
|
availableInstanceIds.sort( ascIdSort );
|
|
1252
|
-
while ( availableInstanceIds[ availableInstanceIds.length - 1 ] === instanceInfo.length ) {
|
|
1254
|
+
while ( availableInstanceIds[ availableInstanceIds.length - 1 ] === instanceInfo.length - 1 ) {
|
|
1253
1255
|
|
|
1254
1256
|
instanceInfo.pop();
|
|
1255
1257
|
availableInstanceIds.pop();
|
|
@@ -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,15 +1522,18 @@ 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 )
|
|
1519
1531
|
.multiply( this.matrixWorld );
|
|
1532
|
+
|
|
1520
1533
|
_frustum.setFromProjectionMatrix(
|
|
1521
1534
|
_matrix,
|
|
1522
|
-
|
|
1535
|
+
camera.coordinateSystem,
|
|
1536
|
+
camera.reversedDepth
|
|
1523
1537
|
);
|
|
1524
1538
|
|
|
1525
1539
|
}
|
|
@@ -1546,7 +1560,7 @@ class BatchedMesh extends Mesh {
|
|
|
1546
1560
|
let culled = false;
|
|
1547
1561
|
if ( perObjectFrustumCulled ) {
|
|
1548
1562
|
|
|
1549
|
-
culled = !
|
|
1563
|
+
culled = ! frustum.intersectsSphere( _sphere, camera );
|
|
1550
1564
|
|
|
1551
1565
|
}
|
|
1552
1566
|
|
|
@@ -1603,7 +1617,7 @@ class BatchedMesh extends Mesh {
|
|
|
1603
1617
|
// get the bounds in world space
|
|
1604
1618
|
this.getMatrixAt( i, _matrix );
|
|
1605
1619
|
this.getBoundingSphereAt( geometryId, _sphere ).applyMatrix4( _matrix );
|
|
1606
|
-
culled = !
|
|
1620
|
+
culled = ! frustum.intersectsSphere( _sphere, camera );
|
|
1607
1621
|
|
|
1608
1622
|
}
|
|
1609
1623
|
|
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
|
/**
|