@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
|
@@ -402,7 +402,7 @@ class WebXRController {
|
|
|
402
402
|
*
|
|
403
403
|
* @private
|
|
404
404
|
* @param {Group} hand - The group representing the hand space.
|
|
405
|
-
* @param {
|
|
405
|
+
* @param {XRJointSpace} inputjoint - The hand joint data.
|
|
406
406
|
* @return {Group} A group representing the hand joint for the given input joint.
|
|
407
407
|
*/
|
|
408
408
|
_getHandJoint( hand, inputjoint ) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
|
|
2
2
|
import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
|
|
3
3
|
import { Mesh } from '../../objects/Mesh.js';
|
|
4
|
-
import {
|
|
4
|
+
import { ExternalTexture } from '../../textures/ExternalTexture.js';
|
|
5
5
|
|
|
6
6
|
const _occlusion_vertex = `
|
|
7
7
|
void main() {
|
|
@@ -42,9 +42,9 @@ class WebXRDepthSensing {
|
|
|
42
42
|
constructor() {
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
|
-
*
|
|
45
|
+
* An opaque texture representing the depth of the user's environment.
|
|
46
46
|
*
|
|
47
|
-
* @type {?
|
|
47
|
+
* @type {?ExternalTexture}
|
|
48
48
|
*/
|
|
49
49
|
this.texture = null;
|
|
50
50
|
|
|
@@ -74,18 +74,14 @@ class WebXRDepthSensing {
|
|
|
74
74
|
/**
|
|
75
75
|
* Inits the depth sensing module
|
|
76
76
|
*
|
|
77
|
-
* @param {WebGLRenderer} renderer - The renderer.
|
|
78
77
|
* @param {XRWebGLDepthInformation} depthData - The XR depth data.
|
|
79
78
|
* @param {XRRenderState} renderState - The XR render state.
|
|
80
79
|
*/
|
|
81
|
-
init(
|
|
80
|
+
init( depthData, renderState ) {
|
|
82
81
|
|
|
83
82
|
if ( this.texture === null ) {
|
|
84
83
|
|
|
85
|
-
const texture = new
|
|
86
|
-
|
|
87
|
-
const texProps = renderer.properties.get( texture );
|
|
88
|
-
texProps.__webglTexture = depthData.texture;
|
|
84
|
+
const texture = new ExternalTexture( depthData.texture );
|
|
89
85
|
|
|
90
86
|
if ( ( depthData.depthNear !== renderState.depthNear ) || ( depthData.depthFar !== renderState.depthFar ) ) {
|
|
91
87
|
|
|
@@ -146,7 +142,7 @@ class WebXRDepthSensing {
|
|
|
146
142
|
/**
|
|
147
143
|
* Returns a texture representing the depth of the user's environment.
|
|
148
144
|
*
|
|
149
|
-
* @return {?
|
|
145
|
+
* @return {?ExternalTexture} The depth texture.
|
|
150
146
|
*/
|
|
151
147
|
getDepthTexture() {
|
|
152
148
|
|
|
@@ -9,6 +9,7 @@ import { WebGLAnimation } from '../webgl/WebGLAnimation.js';
|
|
|
9
9
|
import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
|
|
10
10
|
import { WebXRController } from './WebXRController.js';
|
|
11
11
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
12
|
+
import { ExternalTexture } from '../../textures/ExternalTexture.js';
|
|
12
13
|
import { DepthFormat, DepthStencilFormat, RGBAFormat, UnsignedByteType, UnsignedIntType, UnsignedInt248Type } from '../../constants.js';
|
|
13
14
|
import { WebXRDepthSensing } from './WebXRDepthSensing.js';
|
|
14
15
|
|
|
@@ -52,6 +53,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
52
53
|
let xrFrame = null;
|
|
53
54
|
|
|
54
55
|
const depthSensing = new WebXRDepthSensing();
|
|
56
|
+
const cameraAccessTextures = {};
|
|
55
57
|
const attributes = gl.getContextAttributes();
|
|
56
58
|
|
|
57
59
|
let initialRenderTarget = null;
|
|
@@ -232,6 +234,11 @@ class WebXRManager extends EventDispatcher {
|
|
|
232
234
|
_currentDepthFar = null;
|
|
233
235
|
|
|
234
236
|
depthSensing.reset();
|
|
237
|
+
for ( const key in cameraAccessTextures ) {
|
|
238
|
+
|
|
239
|
+
delete cameraAccessTextures[ key ];
|
|
240
|
+
|
|
241
|
+
}
|
|
235
242
|
|
|
236
243
|
// restore framebuffer/rendering state
|
|
237
244
|
|
|
@@ -278,7 +285,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
278
285
|
/**
|
|
279
286
|
* Sets the reference space type. Can be used to configure a spatial relationship with the user's physical
|
|
280
287
|
* environment. Depending on how the user moves in 3D space, setting an appropriate reference space can
|
|
281
|
-
* improve tracking. Default is `local-floor`.
|
|
288
|
+
* improve tracking. Default is `local-floor`. Valid values can be found here
|
|
289
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/XRReferenceSpace#reference_space_types.
|
|
282
290
|
*
|
|
283
291
|
* This method can not be used during a XR session.
|
|
284
292
|
*
|
|
@@ -397,9 +405,15 @@ class WebXRManager extends EventDispatcher {
|
|
|
397
405
|
currentPixelRatio = renderer.getPixelRatio();
|
|
398
406
|
renderer.getSize( currentSize );
|
|
399
407
|
|
|
408
|
+
if ( typeof XRWebGLBinding !== 'undefined' ) {
|
|
409
|
+
|
|
410
|
+
glBinding = new XRWebGLBinding( session, gl );
|
|
411
|
+
|
|
412
|
+
}
|
|
413
|
+
|
|
400
414
|
// Check that the browser implements the necessary APIs to use an
|
|
401
415
|
// XRProjectionLayer rather than an XRWebGLLayer
|
|
402
|
-
const useLayers =
|
|
416
|
+
const useLayers = glBinding !== null && 'createProjectionLayer' in XRWebGLBinding.prototype;
|
|
403
417
|
|
|
404
418
|
if ( ! useLayers ) {
|
|
405
419
|
|
|
@@ -452,8 +466,6 @@ class WebXRManager extends EventDispatcher {
|
|
|
452
466
|
scaleFactor: framebufferScaleFactor
|
|
453
467
|
};
|
|
454
468
|
|
|
455
|
-
glBinding = new XRWebGLBinding( session, gl );
|
|
456
|
-
|
|
457
469
|
glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
|
|
458
470
|
|
|
459
471
|
session.updateRenderState( { layers: [ glProjLayer ] } );
|
|
@@ -721,9 +733,10 @@ class WebXRManager extends EventDispatcher {
|
|
|
721
733
|
|
|
722
734
|
}
|
|
723
735
|
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
736
|
+
// inherit camera layers and enable eye layers (1 = left, 2 = right)
|
|
737
|
+
cameraXR.layers.mask = camera.layers.mask | 0b110;
|
|
738
|
+
cameraL.layers.mask = cameraXR.layers.mask & 0b011;
|
|
739
|
+
cameraR.layers.mask = cameraXR.layers.mask & 0b101;
|
|
727
740
|
|
|
728
741
|
const parent = camera.parent;
|
|
729
742
|
const cameras = cameraXR.cameras;
|
|
@@ -804,7 +817,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
804
817
|
/**
|
|
805
818
|
* Returns the amount of foveation used by the XR compositor for the projection layer.
|
|
806
819
|
*
|
|
807
|
-
* @return {number} The amount of foveation.
|
|
820
|
+
* @return {number|undefined} The amount of foveation.
|
|
808
821
|
*/
|
|
809
822
|
this.getFoveation = function () {
|
|
810
823
|
|
|
@@ -867,6 +880,19 @@ class WebXRManager extends EventDispatcher {
|
|
|
867
880
|
|
|
868
881
|
};
|
|
869
882
|
|
|
883
|
+
/**
|
|
884
|
+
* Retrieves an opaque texture from the view-aligned {@link XRCamera}.
|
|
885
|
+
* Only available during the current animation loop.
|
|
886
|
+
*
|
|
887
|
+
* @param {XRCamera} xrCamera - The camera to query.
|
|
888
|
+
* @return {?Texture} An opaque texture representing the current raw camera frame.
|
|
889
|
+
*/
|
|
890
|
+
this.getCameraTexture = function ( xrCamera ) {
|
|
891
|
+
|
|
892
|
+
return cameraAccessTextures[ xrCamera ];
|
|
893
|
+
|
|
894
|
+
};
|
|
895
|
+
|
|
870
896
|
// Animation Loop
|
|
871
897
|
|
|
872
898
|
let onAnimationFrameCallback = null;
|
|
@@ -972,7 +998,42 @@ class WebXRManager extends EventDispatcher {
|
|
|
972
998
|
|
|
973
999
|
if ( depthData && depthData.isValid && depthData.texture ) {
|
|
974
1000
|
|
|
975
|
-
depthSensing.init(
|
|
1001
|
+
depthSensing.init( depthData, session.renderState );
|
|
1002
|
+
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
const cameraAccessEnabled = enabledFeatures &&
|
|
1008
|
+
enabledFeatures.includes( 'camera-access' );
|
|
1009
|
+
|
|
1010
|
+
if ( cameraAccessEnabled ) {
|
|
1011
|
+
|
|
1012
|
+
renderer.state.unbindTexture();
|
|
1013
|
+
|
|
1014
|
+
if ( glBinding ) {
|
|
1015
|
+
|
|
1016
|
+
for ( let i = 0; i < views.length; i ++ ) {
|
|
1017
|
+
|
|
1018
|
+
const camera = views[ i ].camera;
|
|
1019
|
+
|
|
1020
|
+
if ( camera ) {
|
|
1021
|
+
|
|
1022
|
+
let cameraTex = cameraAccessTextures[ camera ];
|
|
1023
|
+
|
|
1024
|
+
if ( ! cameraTex ) {
|
|
1025
|
+
|
|
1026
|
+
cameraTex = new ExternalTexture();
|
|
1027
|
+
cameraAccessTextures[ camera ] = cameraTex;
|
|
1028
|
+
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
const glTexture = glBinding.getCameraImage( camera );
|
|
1032
|
+
cameraTex.sourceTexture = glTexture;
|
|
1033
|
+
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
}
|
|
976
1037
|
|
|
977
1038
|
}
|
|
978
1039
|
|
|
@@ -23,8 +23,9 @@ class DepthTexture extends Texture {
|
|
|
23
23
|
* @param {number} [minFilter=LinearFilter] - The min filter value.
|
|
24
24
|
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
25
25
|
* @param {number} [format=DepthFormat] - The texture format.
|
|
26
|
+
* @param {number} [depth=1] - The depth of the texture.
|
|
26
27
|
*/
|
|
27
|
-
constructor( width, height, type = UnsignedIntType, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat ) {
|
|
28
|
+
constructor( width, height, type = UnsignedIntType, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat, depth = 1 ) {
|
|
28
29
|
|
|
29
30
|
if ( format !== DepthFormat && format !== DepthStencilFormat ) {
|
|
30
31
|
|
|
@@ -32,7 +33,9 @@ class DepthTexture extends Texture {
|
|
|
32
33
|
|
|
33
34
|
}
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
const image = { width: width, height: height, depth: depth };
|
|
37
|
+
|
|
38
|
+
super( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
|
|
36
39
|
|
|
37
40
|
/**
|
|
38
41
|
* This flag can be used for type testing.
|
|
@@ -43,13 +46,6 @@ class DepthTexture extends Texture {
|
|
|
43
46
|
*/
|
|
44
47
|
this.isDepthTexture = true;
|
|
45
48
|
|
|
46
|
-
/**
|
|
47
|
-
* The image property of a depth texture just defines its dimensions.
|
|
48
|
-
*
|
|
49
|
-
* @type {{width:number,height:number}}
|
|
50
|
-
*/
|
|
51
|
-
this.image = { width: width, height: height };
|
|
52
|
-
|
|
53
49
|
/**
|
|
54
50
|
* If set to `true`, the texture is flipped along the vertical axis when
|
|
55
51
|
* uploaded to the GPU.
|
|
@@ -72,7 +68,7 @@ class DepthTexture extends Texture {
|
|
|
72
68
|
this.generateMipmaps = false;
|
|
73
69
|
|
|
74
70
|
/**
|
|
75
|
-
*
|
|
71
|
+
* Code corresponding to the depth compare function.
|
|
76
72
|
*
|
|
77
73
|
* @type {?(NeverCompare|LessCompare|EqualCompare|LessEqualCompare|GreaterCompare|NotEqualCompare|GreaterEqualCompare|AlwaysCompare)}
|
|
78
74
|
* @default null
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Texture } from './Texture.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represents a texture created externally from the renderer context.
|
|
5
|
+
*
|
|
6
|
+
* This may be a texture from a protected media stream, device camera feed,
|
|
7
|
+
* or other data feeds like a depth sensor.
|
|
8
|
+
*
|
|
9
|
+
* Note that this class is only supported in {@link WebGLRenderer} right now.
|
|
10
|
+
*
|
|
11
|
+
* @augments Texture
|
|
12
|
+
*/
|
|
13
|
+
class ExternalTexture extends Texture {
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Creates a new raw texture.
|
|
17
|
+
*
|
|
18
|
+
* @param {?WebGLTexture} [sourceTexture=null] - The external texture.
|
|
19
|
+
*/
|
|
20
|
+
constructor( sourceTexture = null ) {
|
|
21
|
+
|
|
22
|
+
super();
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The external source texture.
|
|
26
|
+
*
|
|
27
|
+
* @type {?WebGLTexture}
|
|
28
|
+
* @default null
|
|
29
|
+
*/
|
|
30
|
+
this.sourceTexture = sourceTexture;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* This flag can be used for type testing.
|
|
34
|
+
*
|
|
35
|
+
* @type {boolean}
|
|
36
|
+
* @readonly
|
|
37
|
+
* @default true
|
|
38
|
+
*/
|
|
39
|
+
this.isExternalTexture = true;
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export { ExternalTexture };
|
|
@@ -30,8 +30,8 @@ class FramebufferTexture extends Texture {
|
|
|
30
30
|
/**
|
|
31
31
|
* Constructs a new framebuffer texture.
|
|
32
32
|
*
|
|
33
|
-
* @param {number} width - The width of the texture.
|
|
34
|
-
* @param {number} height - The height of the texture.
|
|
33
|
+
* @param {number} [width] - The width of the texture.
|
|
34
|
+
* @param {number} [height] - The height of the texture.
|
|
35
35
|
*/
|
|
36
36
|
constructor( width, height ) {
|
|
37
37
|
|
package/src/textures/Source.js
CHANGED
|
@@ -73,6 +73,38 @@ class Source {
|
|
|
73
73
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Returns the dimensions of the source into the given target vector.
|
|
78
|
+
*
|
|
79
|
+
* @param {(Vector2|Vector3)} target - The target object the result is written into.
|
|
80
|
+
* @return {(Vector2|Vector3)} The dimensions of the source.
|
|
81
|
+
*/
|
|
82
|
+
getSize( target ) {
|
|
83
|
+
|
|
84
|
+
const data = this.data;
|
|
85
|
+
|
|
86
|
+
if ( data instanceof HTMLVideoElement ) {
|
|
87
|
+
|
|
88
|
+
target.set( data.videoWidth, data.videoHeight, 0 );
|
|
89
|
+
|
|
90
|
+
} else if ( data instanceof VideoFrame ) {
|
|
91
|
+
|
|
92
|
+
target.set( data.displayHeight, data.displayWidth, 0 );
|
|
93
|
+
|
|
94
|
+
} else if ( data !== null ) {
|
|
95
|
+
|
|
96
|
+
target.set( data.width, data.height, data.depth || 0 );
|
|
97
|
+
|
|
98
|
+
} else {
|
|
99
|
+
|
|
100
|
+
target.set( 0, 0, 0 );
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return target;
|
|
105
|
+
|
|
106
|
+
}
|
|
107
|
+
|
|
76
108
|
/**
|
|
77
109
|
* When the property is set to `true`, the engine allocates the memory
|
|
78
110
|
* for the texture (if necessary) and triggers the actual texture upload
|
package/src/textures/Texture.js
CHANGED
|
@@ -12,11 +12,14 @@ import {
|
|
|
12
12
|
} from '../constants.js';
|
|
13
13
|
import { generateUUID } from '../math/MathUtils.js';
|
|
14
14
|
import { Vector2 } from '../math/Vector2.js';
|
|
15
|
+
import { Vector3 } from '../math/Vector3.js';
|
|
15
16
|
import { Matrix3 } from '../math/Matrix3.js';
|
|
16
17
|
import { Source } from './Source.js';
|
|
17
18
|
|
|
18
19
|
let _textureId = 0;
|
|
19
20
|
|
|
21
|
+
const _tempVec3 = /*@__PURE__*/ new Vector3();
|
|
22
|
+
|
|
20
23
|
/**
|
|
21
24
|
* Base class for all textures.
|
|
22
25
|
*
|
|
@@ -302,6 +305,14 @@ class Texture extends EventDispatcher {
|
|
|
302
305
|
*/
|
|
303
306
|
this.userData = {};
|
|
304
307
|
|
|
308
|
+
/**
|
|
309
|
+
* This can be used to only update a subregion or specific rows of the texture (for example, just the
|
|
310
|
+
* first 3 rows). Use the `addUpdateRange()` function to add ranges to this array.
|
|
311
|
+
*
|
|
312
|
+
* @type {Array<Object>}
|
|
313
|
+
*/
|
|
314
|
+
this.updateRanges = [];
|
|
315
|
+
|
|
305
316
|
/**
|
|
306
317
|
* This starts at `0` and counts how many times {@link Texture#needsUpdate} is set to `true`.
|
|
307
318
|
*
|
|
@@ -337,6 +348,15 @@ class Texture extends EventDispatcher {
|
|
|
337
348
|
*/
|
|
338
349
|
this.isRenderTargetTexture = false;
|
|
339
350
|
|
|
351
|
+
/**
|
|
352
|
+
* Indicates if a texture should be handled like a texture array.
|
|
353
|
+
*
|
|
354
|
+
* @type {boolean}
|
|
355
|
+
* @readonly
|
|
356
|
+
* @default false
|
|
357
|
+
*/
|
|
358
|
+
this.isArrayTexture = image && image.depth && image.depth > 1 ? true : false;
|
|
359
|
+
|
|
340
360
|
/**
|
|
341
361
|
* Indicates whether this texture should be processed by `PMREMGenerator` or not
|
|
342
362
|
* (only relevant for render target textures).
|
|
@@ -349,6 +369,33 @@ class Texture extends EventDispatcher {
|
|
|
349
369
|
|
|
350
370
|
}
|
|
351
371
|
|
|
372
|
+
/**
|
|
373
|
+
* The width of the texture in pixels.
|
|
374
|
+
*/
|
|
375
|
+
get width() {
|
|
376
|
+
|
|
377
|
+
return this.source.getSize( _tempVec3 ).x;
|
|
378
|
+
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* The height of the texture in pixels.
|
|
383
|
+
*/
|
|
384
|
+
get height() {
|
|
385
|
+
|
|
386
|
+
return this.source.getSize( _tempVec3 ).y;
|
|
387
|
+
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* The depth of the texture in pixels.
|
|
392
|
+
*/
|
|
393
|
+
get depth() {
|
|
394
|
+
|
|
395
|
+
return this.source.getSize( _tempVec3 ).z;
|
|
396
|
+
|
|
397
|
+
}
|
|
398
|
+
|
|
352
399
|
/**
|
|
353
400
|
* The image object holding the texture data.
|
|
354
401
|
*
|
|
@@ -376,6 +423,27 @@ class Texture extends EventDispatcher {
|
|
|
376
423
|
|
|
377
424
|
}
|
|
378
425
|
|
|
426
|
+
/**
|
|
427
|
+
* Adds a range of data in the data texture to be updated on the GPU.
|
|
428
|
+
*
|
|
429
|
+
* @param {number} start - Position at which to start update.
|
|
430
|
+
* @param {number} count - The number of components to update.
|
|
431
|
+
*/
|
|
432
|
+
addUpdateRange( start, count ) {
|
|
433
|
+
|
|
434
|
+
this.updateRanges.push( { start, count } );
|
|
435
|
+
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* Clears the update ranges.
|
|
440
|
+
*/
|
|
441
|
+
clearUpdateRanges() {
|
|
442
|
+
|
|
443
|
+
this.updateRanges.length = 0;
|
|
444
|
+
|
|
445
|
+
}
|
|
446
|
+
|
|
379
447
|
/**
|
|
380
448
|
* Returns a new texture with copied values from this instance.
|
|
381
449
|
*
|
|
@@ -431,6 +499,7 @@ class Texture extends EventDispatcher {
|
|
|
431
499
|
|
|
432
500
|
this.renderTarget = source.renderTarget;
|
|
433
501
|
this.isRenderTargetTexture = source.isRenderTargetTexture;
|
|
502
|
+
this.isArrayTexture = source.isArrayTexture;
|
|
434
503
|
|
|
435
504
|
this.userData = JSON.parse( JSON.stringify( source.userData ) );
|
|
436
505
|
|
|
@@ -440,6 +509,54 @@ class Texture extends EventDispatcher {
|
|
|
440
509
|
|
|
441
510
|
}
|
|
442
511
|
|
|
512
|
+
/**
|
|
513
|
+
* Sets this texture's properties based on `values`.
|
|
514
|
+
* @param {Object} values - A container with texture parameters.
|
|
515
|
+
*/
|
|
516
|
+
setValues( values ) {
|
|
517
|
+
|
|
518
|
+
for ( const key in values ) {
|
|
519
|
+
|
|
520
|
+
const newValue = values[ key ];
|
|
521
|
+
|
|
522
|
+
if ( newValue === undefined ) {
|
|
523
|
+
|
|
524
|
+
console.warn( `THREE.Texture.setValues(): parameter '${ key }' has value of undefined.` );
|
|
525
|
+
continue;
|
|
526
|
+
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
const currentValue = this[ key ];
|
|
530
|
+
|
|
531
|
+
if ( currentValue === undefined ) {
|
|
532
|
+
|
|
533
|
+
console.warn( `THREE.Texture.setValues(): property '${ key }' does not exist.` );
|
|
534
|
+
continue;
|
|
535
|
+
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
if ( ( currentValue && newValue ) && ( currentValue.isVector2 && newValue.isVector2 ) ) {
|
|
539
|
+
|
|
540
|
+
currentValue.copy( newValue );
|
|
541
|
+
|
|
542
|
+
} else if ( ( currentValue && newValue ) && ( currentValue.isVector3 && newValue.isVector3 ) ) {
|
|
543
|
+
|
|
544
|
+
currentValue.copy( newValue );
|
|
545
|
+
|
|
546
|
+
} else if ( ( currentValue && newValue ) && ( currentValue.isMatrix3 && newValue.isMatrix3 ) ) {
|
|
547
|
+
|
|
548
|
+
currentValue.copy( newValue );
|
|
549
|
+
|
|
550
|
+
} else {
|
|
551
|
+
|
|
552
|
+
this[ key ] = newValue;
|
|
553
|
+
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
}
|
|
559
|
+
|
|
443
560
|
/**
|
|
444
561
|
* Serializes the texture into JSON.
|
|
445
562
|
*
|
|
@@ -460,7 +577,7 @@ class Texture extends EventDispatcher {
|
|
|
460
577
|
const output = {
|
|
461
578
|
|
|
462
579
|
metadata: {
|
|
463
|
-
version: 4.
|
|
580
|
+
version: 4.7,
|
|
464
581
|
type: 'Texture',
|
|
465
582
|
generator: 'Texture.toJSON'
|
|
466
583
|
},
|
|
@@ -10,6 +10,9 @@ import { Texture } from './Texture.js';
|
|
|
10
10
|
* const texture = new THREE.VideoTexture( video );
|
|
11
11
|
* ```
|
|
12
12
|
*
|
|
13
|
+
* Note: When using video textures with {@link WebGPURenderer}, {@link Texture#colorSpace} must be
|
|
14
|
+
* set to THREE.SRGBColorSpace.
|
|
15
|
+
*
|
|
13
16
|
* Note: After the initial use of a texture, its dimensions, format, and type
|
|
14
17
|
* cannot be changed. Instead, call {@link Texture#dispose} on the texture and instantiate a new one.
|
|
15
18
|
*
|
|
@@ -20,7 +23,7 @@ class VideoTexture extends Texture {
|
|
|
20
23
|
/**
|
|
21
24
|
* Constructs a new video texture.
|
|
22
25
|
*
|
|
23
|
-
* @param {
|
|
26
|
+
* @param {HTMLVideoElement} video - The video element to use as a data source for the texture.
|
|
24
27
|
* @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
|
|
25
28
|
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
26
29
|
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
@@ -53,18 +56,28 @@ class VideoTexture extends Texture {
|
|
|
53
56
|
*/
|
|
54
57
|
this.generateMipmaps = false;
|
|
55
58
|
|
|
59
|
+
/**
|
|
60
|
+
* The video frame request callback identifier, which is a positive integer.
|
|
61
|
+
*
|
|
62
|
+
* Value of 0 represents no scheduled rVFC.
|
|
63
|
+
*
|
|
64
|
+
* @private
|
|
65
|
+
* @type {number}
|
|
66
|
+
*/
|
|
67
|
+
this._requestVideoFrameCallbackId = 0;
|
|
68
|
+
|
|
56
69
|
const scope = this;
|
|
57
70
|
|
|
58
71
|
function updateVideo() {
|
|
59
72
|
|
|
60
73
|
scope.needsUpdate = true;
|
|
61
|
-
video.requestVideoFrameCallback( updateVideo );
|
|
74
|
+
scope._requestVideoFrameCallbackId = video.requestVideoFrameCallback( updateVideo );
|
|
62
75
|
|
|
63
76
|
}
|
|
64
77
|
|
|
65
78
|
if ( 'requestVideoFrameCallback' in video ) {
|
|
66
79
|
|
|
67
|
-
video.requestVideoFrameCallback( updateVideo );
|
|
80
|
+
this._requestVideoFrameCallbackId = video.requestVideoFrameCallback( updateVideo );
|
|
68
81
|
|
|
69
82
|
}
|
|
70
83
|
|
|
@@ -95,6 +108,21 @@ class VideoTexture extends Texture {
|
|
|
95
108
|
|
|
96
109
|
}
|
|
97
110
|
|
|
111
|
+
/**
|
|
112
|
+
* @override
|
|
113
|
+
*/
|
|
114
|
+
dispose() {
|
|
115
|
+
|
|
116
|
+
if ( this._requestVideoFrameCallbackId !== 0 ) {
|
|
117
|
+
|
|
118
|
+
this.source.data.cancelVideoFrameCallback( this._requestVideoFrameCallbackId );
|
|
119
|
+
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
super.dispose();
|
|
123
|
+
|
|
124
|
+
}
|
|
125
|
+
|
|
98
126
|
}
|
|
99
127
|
|
|
100
128
|
export { VideoTexture };
|