super-three 0.177.0 → 0.181.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 +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- 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 +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -46,10 +46,10 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
46
46
|
/**
|
|
47
47
|
* Allocates a pair of queries for a given render context.
|
|
48
48
|
*
|
|
49
|
-
* @param {
|
|
49
|
+
* @param {string} uid - A unique identifier for the render context.
|
|
50
50
|
* @returns {?number} The base offset for the allocated queries, or null if allocation failed.
|
|
51
51
|
*/
|
|
52
|
-
allocateQueriesForContext(
|
|
52
|
+
allocateQueriesForContext( uid ) {
|
|
53
53
|
|
|
54
54
|
if ( ! this.trackTimestamp || this.isDisposed ) return null;
|
|
55
55
|
|
|
@@ -63,7 +63,8 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
63
63
|
const baseOffset = this.currentQueryIndex;
|
|
64
64
|
this.currentQueryIndex += 2;
|
|
65
65
|
|
|
66
|
-
this.queryOffsets.set(
|
|
66
|
+
this.queryOffsets.set( uid, baseOffset );
|
|
67
|
+
|
|
67
68
|
return baseOffset;
|
|
68
69
|
|
|
69
70
|
}
|
|
@@ -177,26 +178,48 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
177
178
|
|
|
178
179
|
}
|
|
179
180
|
|
|
181
|
+
//
|
|
182
|
+
|
|
180
183
|
const times = new BigUint64Array( this.resultBuffer.getMappedRange( 0, bytesUsed ) );
|
|
181
|
-
|
|
184
|
+
const framesDuration = {};
|
|
185
|
+
|
|
186
|
+
const frames = [];
|
|
187
|
+
|
|
188
|
+
for ( const [ uid, baseOffset ] of currentOffsets ) {
|
|
189
|
+
|
|
190
|
+
const match = uid.match( /^(.*):f(\d+)$/ );
|
|
191
|
+
const frame = parseInt( match[ 2 ] );
|
|
192
|
+
|
|
193
|
+
if ( frames.includes( frame ) === false ) {
|
|
182
194
|
|
|
183
|
-
|
|
195
|
+
frames.push( frame );
|
|
196
|
+
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if ( framesDuration[ frame ] === undefined ) framesDuration[ frame ] = 0;
|
|
184
200
|
|
|
185
201
|
const startTime = times[ baseOffset ];
|
|
186
202
|
const endTime = times[ baseOffset + 1 ];
|
|
187
203
|
const duration = Number( endTime - startTime ) / 1e6;
|
|
188
|
-
|
|
204
|
+
|
|
205
|
+
this.timestamps.set( uid, duration );
|
|
206
|
+
|
|
207
|
+
framesDuration[ frame ] += duration;
|
|
189
208
|
|
|
190
209
|
}
|
|
191
210
|
|
|
211
|
+
// Return the total duration of the last frame
|
|
212
|
+
const totalDuration = framesDuration[ frames[ frames.length - 1 ] ];
|
|
213
|
+
|
|
192
214
|
this.resultBuffer.unmap();
|
|
193
215
|
this.lastValue = totalDuration;
|
|
216
|
+
this.frames = frames;
|
|
194
217
|
|
|
195
218
|
return totalDuration;
|
|
196
219
|
|
|
197
220
|
} catch ( error ) {
|
|
198
221
|
|
|
199
|
-
|
|
222
|
+
error( 'Error resolving queries:', error );
|
|
200
223
|
if ( this.resultBuffer.mapState === 'mapped' ) {
|
|
201
224
|
|
|
202
225
|
this.resultBuffer.unmap();
|
|
@@ -234,7 +257,7 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
234
257
|
|
|
235
258
|
} catch ( error ) {
|
|
236
259
|
|
|
237
|
-
|
|
260
|
+
error( 'Error waiting for pending resolve:', error );
|
|
238
261
|
|
|
239
262
|
}
|
|
240
263
|
|
|
@@ -249,7 +272,7 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
249
272
|
|
|
250
273
|
} catch ( error ) {
|
|
251
274
|
|
|
252
|
-
|
|
275
|
+
error( 'Error unmapping buffer:', error );
|
|
253
276
|
|
|
254
277
|
}
|
|
255
278
|
|
|
@@ -83,7 +83,7 @@ class WebGPUUtils {
|
|
|
83
83
|
const renderer = this.backend.renderer;
|
|
84
84
|
const renderTarget = renderer.getRenderTarget();
|
|
85
85
|
|
|
86
|
-
samples = renderTarget ? renderTarget.samples : renderer.
|
|
86
|
+
samples = renderTarget ? renderTarget.samples : renderer.currentSamples;
|
|
87
87
|
|
|
88
88
|
} else if ( texture.renderTarget ) {
|
|
89
89
|
|
|
@@ -124,6 +124,26 @@ class WebGPUUtils {
|
|
|
124
124
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
+
/**
|
|
128
|
+
* Returns the GPU formats of all color attachments of the current render context.
|
|
129
|
+
*
|
|
130
|
+
* @param {RenderContext} renderContext - The render context.
|
|
131
|
+
* @return {Array<string>} The GPU texture formats of all color attachments.
|
|
132
|
+
*/
|
|
133
|
+
getCurrentColorFormats( renderContext ) {
|
|
134
|
+
|
|
135
|
+
if ( renderContext.textures !== null ) {
|
|
136
|
+
|
|
137
|
+
return renderContext.textures.map( t => this.getTextureFormatGPU( t ) );
|
|
138
|
+
|
|
139
|
+
} else {
|
|
140
|
+
|
|
141
|
+
return [ this.getPreferredCanvasFormat() ]; // default context format
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
|
|
127
147
|
/**
|
|
128
148
|
* Returns the output color space of the current render context.
|
|
129
149
|
*
|
|
@@ -161,29 +181,14 @@ class WebGPUUtils {
|
|
|
161
181
|
/**
|
|
162
182
|
* Returns a modified sample count from the given sample count value.
|
|
163
183
|
*
|
|
164
|
-
* That is required since WebGPU
|
|
184
|
+
* That is required since WebGPU only supports either 1 or 4.
|
|
165
185
|
*
|
|
166
186
|
* @param {number} sampleCount - The input sample count.
|
|
167
187
|
* @return {number} The (potentially updated) output sample count.
|
|
168
188
|
*/
|
|
169
189
|
getSampleCount( sampleCount ) {
|
|
170
190
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
if ( sampleCount > 1 ) {
|
|
174
|
-
|
|
175
|
-
// WebGPU only supports power-of-two sample counts and 2 is not a valid value
|
|
176
|
-
count = Math.pow( 2, Math.floor( Math.log2( sampleCount ) ) );
|
|
177
|
-
|
|
178
|
-
if ( count === 2 ) {
|
|
179
|
-
|
|
180
|
-
count = 4;
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return count;
|
|
191
|
+
return sampleCount >= 4 ? 4 : 1;
|
|
187
192
|
|
|
188
193
|
}
|
|
189
194
|
|
|
@@ -201,7 +206,7 @@ class WebGPUUtils {
|
|
|
201
206
|
|
|
202
207
|
}
|
|
203
208
|
|
|
204
|
-
return this.getSampleCount( this.backend.renderer.
|
|
209
|
+
return this.getSampleCount( this.backend.renderer.currentSamples );
|
|
205
210
|
|
|
206
211
|
}
|
|
207
212
|
|
|
@@ -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
|
|
|
@@ -10,8 +10,10 @@ import { WebGLMultiviewRenderTarget } from '../WebGLMultiviewRenderTarget.js';
|
|
|
10
10
|
import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
|
|
11
11
|
import { WebXRController } from './WebXRController.js';
|
|
12
12
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
13
|
+
import { ExternalTexture } from '../../textures/ExternalTexture.js';
|
|
13
14
|
import { DepthFormat, DepthStencilFormat, RGBAFormat, UnsignedByteType, UnsignedIntType, UnsignedInt248Type } from '../../constants.js';
|
|
14
15
|
import { WebXRDepthSensing } from './WebXRDepthSensing.js';
|
|
16
|
+
import { warn } from '../../utils.js';
|
|
15
17
|
|
|
16
18
|
/**
|
|
17
19
|
* This class represents an abstraction of the WebXR Device API and is
|
|
@@ -55,7 +57,10 @@ class WebXRManager extends EventDispatcher {
|
|
|
55
57
|
let glBaseLayer = null;
|
|
56
58
|
let xrFrame = null;
|
|
57
59
|
|
|
60
|
+
const supportsGlBinding = typeof XRWebGLBinding !== 'undefined';
|
|
61
|
+
|
|
58
62
|
const depthSensing = new WebXRDepthSensing();
|
|
63
|
+
const cameraAccessTextures = {};
|
|
59
64
|
const attributes = gl.getContextAttributes();
|
|
60
65
|
|
|
61
66
|
let initialRenderTarget = null;
|
|
@@ -243,6 +248,11 @@ class WebXRManager extends EventDispatcher {
|
|
|
243
248
|
_currentDepthFar = null;
|
|
244
249
|
|
|
245
250
|
depthSensing.reset();
|
|
251
|
+
for ( const key in cameraAccessTextures ) {
|
|
252
|
+
|
|
253
|
+
delete cameraAccessTextures[ key ];
|
|
254
|
+
|
|
255
|
+
}
|
|
246
256
|
|
|
247
257
|
// restore framebuffer/rendering state
|
|
248
258
|
|
|
@@ -280,7 +290,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
280
290
|
|
|
281
291
|
if ( scope.isPresenting === true ) {
|
|
282
292
|
|
|
283
|
-
|
|
293
|
+
warn( 'WebXRManager: Cannot change framebuffer scale while presenting.' );
|
|
284
294
|
|
|
285
295
|
}
|
|
286
296
|
|
|
@@ -302,7 +312,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
302
312
|
|
|
303
313
|
if ( scope.isPresenting === true ) {
|
|
304
314
|
|
|
305
|
-
|
|
315
|
+
warn( 'WebXRManager: Cannot change reference space type while presenting.' );
|
|
306
316
|
|
|
307
317
|
}
|
|
308
318
|
|
|
@@ -333,6 +343,9 @@ class WebXRManager extends EventDispatcher {
|
|
|
333
343
|
/**
|
|
334
344
|
* Returns the current base layer.
|
|
335
345
|
*
|
|
346
|
+
* This is an `XRProjectionLayer` when the targeted XR device supports the
|
|
347
|
+
* WebXR Layers API, or an `XRWebGLLayer` otherwise.
|
|
348
|
+
*
|
|
336
349
|
* @return {?(XRWebGLLayer|XRProjectionLayer)} The XR base layer.
|
|
337
350
|
*/
|
|
338
351
|
this.getBaseLayer = function () {
|
|
@@ -344,10 +357,19 @@ class WebXRManager extends EventDispatcher {
|
|
|
344
357
|
/**
|
|
345
358
|
* Returns the current XR binding.
|
|
346
359
|
*
|
|
347
|
-
*
|
|
360
|
+
* Creates a new binding if needed and the browser is
|
|
361
|
+
* capable of doing so.
|
|
362
|
+
*
|
|
363
|
+
* @return {?XRWebGLBinding} The XR binding. Returns `null` if one cannot be created.
|
|
348
364
|
*/
|
|
349
365
|
this.getBinding = function () {
|
|
350
366
|
|
|
367
|
+
if ( glBinding === null && supportsGlBinding ) {
|
|
368
|
+
|
|
369
|
+
glBinding = new XRWebGLBinding( session, gl );
|
|
370
|
+
|
|
371
|
+
}
|
|
372
|
+
|
|
351
373
|
return glBinding;
|
|
352
374
|
|
|
353
375
|
};
|
|
@@ -415,11 +437,12 @@ class WebXRManager extends EventDispatcher {
|
|
|
415
437
|
currentPixelRatio = renderer.getPixelRatio();
|
|
416
438
|
renderer.getSize( currentSize );
|
|
417
439
|
|
|
440
|
+
|
|
418
441
|
// Check that the browser implements the necessary APIs to use an
|
|
419
442
|
// XRProjectionLayer rather than an XRWebGLLayer
|
|
420
|
-
const
|
|
443
|
+
const supportsLayers = supportsGlBinding && 'createProjectionLayer' in XRWebGLBinding.prototype;
|
|
421
444
|
|
|
422
|
-
if ( !
|
|
445
|
+
if ( ! supportsLayers ) {
|
|
423
446
|
|
|
424
447
|
const layerInit = {
|
|
425
448
|
antialias: attributes.antialias,
|
|
@@ -478,7 +501,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
478
501
|
|
|
479
502
|
}
|
|
480
503
|
|
|
481
|
-
glBinding =
|
|
504
|
+
glBinding = this.getBinding();
|
|
482
505
|
|
|
483
506
|
glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
|
|
484
507
|
|
|
@@ -574,6 +597,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
574
597
|
/**
|
|
575
598
|
* Returns the current depth texture computed via depth sensing.
|
|
576
599
|
*
|
|
600
|
+
* See {@link WebXRDepthSensing#getDepthTexture}.
|
|
601
|
+
*
|
|
577
602
|
* @return {?Texture} The depth texture.
|
|
578
603
|
*/
|
|
579
604
|
this.getDepthTexture = function () {
|
|
@@ -750,7 +775,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
750
775
|
|
|
751
776
|
/**
|
|
752
777
|
* Updates the state of the XR camera. Use this method on app level if you
|
|
753
|
-
* set cameraAutoUpdate` to `false`. The method requires the non-XR
|
|
778
|
+
* set `cameraAutoUpdate` to `false`. The method requires the non-XR
|
|
754
779
|
* camera of the scene as a parameter. The passed in camera's transformation
|
|
755
780
|
* is automatically adjusted to the position of the XR camera when calling
|
|
756
781
|
* this method.
|
|
@@ -788,9 +813,10 @@ class WebXRManager extends EventDispatcher {
|
|
|
788
813
|
|
|
789
814
|
}
|
|
790
815
|
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
816
|
+
// inherit camera layers and enable eye layers (1 = left, 2 = right)
|
|
817
|
+
cameraXR.layers.mask = camera.layers.mask | 0b110;
|
|
818
|
+
cameraL.layers.mask = cameraXR.layers.mask & 0b011;
|
|
819
|
+
cameraR.layers.mask = cameraXR.layers.mask & 0b101;
|
|
794
820
|
|
|
795
821
|
const cameras = cameraXR.cameras;
|
|
796
822
|
var object = poseTarget || camera;
|
|
@@ -872,7 +898,7 @@ class WebXRManager extends EventDispatcher {
|
|
|
872
898
|
/**
|
|
873
899
|
* Returns the amount of foveation used by the XR compositor for the projection layer.
|
|
874
900
|
*
|
|
875
|
-
* @return {number} The amount of foveation.
|
|
901
|
+
* @return {number|undefined} The amount of foveation.
|
|
876
902
|
*/
|
|
877
903
|
this.getFoveation = function () {
|
|
878
904
|
|
|
@@ -927,6 +953,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
927
953
|
/**
|
|
928
954
|
* Returns the depth sensing mesh.
|
|
929
955
|
*
|
|
956
|
+
* See {@link WebXRDepthSensing#getMesh}.
|
|
957
|
+
*
|
|
930
958
|
* @return {Mesh} The depth sensing mesh.
|
|
931
959
|
*/
|
|
932
960
|
this.getDepthSensingMesh = function () {
|
|
@@ -935,6 +963,19 @@ class WebXRManager extends EventDispatcher {
|
|
|
935
963
|
|
|
936
964
|
};
|
|
937
965
|
|
|
966
|
+
/**
|
|
967
|
+
* Retrieves an opaque texture from the view-aligned {@link XRCamera}.
|
|
968
|
+
* Only available during the current animation loop.
|
|
969
|
+
*
|
|
970
|
+
* @param {XRCamera} xrCamera - The camera to query.
|
|
971
|
+
* @return {?Texture} An opaque texture representing the current raw camera frame.
|
|
972
|
+
*/
|
|
973
|
+
this.getCameraTexture = function ( xrCamera ) {
|
|
974
|
+
|
|
975
|
+
return cameraAccessTextures[ xrCamera ];
|
|
976
|
+
|
|
977
|
+
};
|
|
978
|
+
|
|
938
979
|
// Animation Loop
|
|
939
980
|
|
|
940
981
|
let onAnimationFrameCallback = null;
|
|
@@ -1034,13 +1075,48 @@ class WebXRManager extends EventDispatcher {
|
|
|
1034
1075
|
enabledFeatures.includes( 'depth-sensing' ) &&
|
|
1035
1076
|
session.depthUsage == 'gpu-optimized';
|
|
1036
1077
|
|
|
1037
|
-
if ( gpuDepthSensingEnabled &&
|
|
1078
|
+
if ( gpuDepthSensingEnabled && supportsGlBinding ) {
|
|
1079
|
+
|
|
1080
|
+
glBinding = scope.getBinding();
|
|
1038
1081
|
|
|
1039
1082
|
const depthData = glBinding.getDepthInformation( views[ 0 ] );
|
|
1040
1083
|
|
|
1041
1084
|
if ( depthData && depthData.isValid && depthData.texture ) {
|
|
1042
1085
|
|
|
1043
|
-
depthSensing.init(
|
|
1086
|
+
depthSensing.init( depthData, session.renderState );
|
|
1087
|
+
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
const cameraAccessEnabled = enabledFeatures &&
|
|
1093
|
+
enabledFeatures.includes( 'camera-access' );
|
|
1094
|
+
|
|
1095
|
+
if ( cameraAccessEnabled && supportsGlBinding ) {
|
|
1096
|
+
|
|
1097
|
+
renderer.state.unbindTexture();
|
|
1098
|
+
|
|
1099
|
+
glBinding = scope.getBinding();
|
|
1100
|
+
|
|
1101
|
+
for ( let i = 0; i < views.length; i ++ ) {
|
|
1102
|
+
|
|
1103
|
+
const camera = views[ i ].camera;
|
|
1104
|
+
|
|
1105
|
+
if ( camera ) {
|
|
1106
|
+
|
|
1107
|
+
let cameraTex = cameraAccessTextures[ camera ];
|
|
1108
|
+
|
|
1109
|
+
if ( ! cameraTex ) {
|
|
1110
|
+
|
|
1111
|
+
cameraTex = new ExternalTexture();
|
|
1112
|
+
cameraAccessTextures[ camera ] = cameraTex;
|
|
1113
|
+
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
const glTexture = glBinding.getCameraImage( camera );
|
|
1117
|
+
cameraTex.sourceTexture = glTexture;
|
|
1118
|
+
|
|
1119
|
+
}
|
|
1044
1120
|
|
|
1045
1121
|
}
|
|
1046
1122
|
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Texture } from './Texture.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represents a texture created externally with the same 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}, and in
|
|
10
|
+
* the {@link WebGPURenderer} WebGPU backend.
|
|
11
|
+
*
|
|
12
|
+
* @augments Texture
|
|
13
|
+
*/
|
|
14
|
+
class ExternalTexture extends Texture {
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Creates a new raw texture.
|
|
18
|
+
*
|
|
19
|
+
* @param {?(WebGLTexture|GPUTexture)} [sourceTexture=null] - The external texture.
|
|
20
|
+
*/
|
|
21
|
+
constructor( sourceTexture = null ) {
|
|
22
|
+
|
|
23
|
+
super();
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The external source texture.
|
|
27
|
+
*
|
|
28
|
+
* @type {?(WebGLTexture|GPUTexture)}
|
|
29
|
+
* @default null
|
|
30
|
+
*/
|
|
31
|
+
this.sourceTexture = sourceTexture;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* This flag can be used for type testing.
|
|
35
|
+
*
|
|
36
|
+
* @type {boolean}
|
|
37
|
+
* @readonly
|
|
38
|
+
* @default true
|
|
39
|
+
*/
|
|
40
|
+
this.isExternalTexture = true;
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
copy( source ) {
|
|
45
|
+
|
|
46
|
+
super.copy( source );
|
|
47
|
+
|
|
48
|
+
this.sourceTexture = source.sourceTexture;
|
|
49
|
+
|
|
50
|
+
return this;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ImageUtils } from '../extras/ImageUtils.js';
|
|
2
2
|
import { generateUUID } from '../math/MathUtils.js';
|
|
3
|
+
import { warn } from '../utils.js';
|
|
3
4
|
|
|
4
5
|
let _sourceId = 0;
|
|
5
6
|
|
|
@@ -73,13 +74,23 @@ class Source {
|
|
|
73
74
|
|
|
74
75
|
}
|
|
75
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Returns the dimensions of the source into the given target vector.
|
|
79
|
+
*
|
|
80
|
+
* @param {(Vector2|Vector3)} target - The target object the result is written into.
|
|
81
|
+
* @return {(Vector2|Vector3)} The dimensions of the source.
|
|
82
|
+
*/
|
|
76
83
|
getSize( target ) {
|
|
77
84
|
|
|
78
85
|
const data = this.data;
|
|
79
86
|
|
|
80
|
-
if ( data instanceof HTMLVideoElement ) {
|
|
87
|
+
if ( ( typeof HTMLVideoElement !== 'undefined' ) && ( data instanceof HTMLVideoElement ) ) {
|
|
88
|
+
|
|
89
|
+
target.set( data.videoWidth, data.videoHeight, 0 );
|
|
90
|
+
|
|
91
|
+
} else if ( data instanceof VideoFrame ) {
|
|
81
92
|
|
|
82
|
-
target.set( data.
|
|
93
|
+
target.set( data.displayHeight, data.displayWidth, 0 );
|
|
83
94
|
|
|
84
95
|
} else if ( data !== null ) {
|
|
85
96
|
|
|
@@ -207,7 +218,7 @@ function serializeImage( image ) {
|
|
|
207
218
|
|
|
208
219
|
} else {
|
|
209
220
|
|
|
210
|
-
|
|
221
|
+
warn( 'Texture: Unable to serialize Texture.' );
|
|
211
222
|
return {};
|
|
212
223
|
|
|
213
224
|
}
|
package/src/textures/Texture.js
CHANGED
|
@@ -15,6 +15,7 @@ import { Vector2 } from '../math/Vector2.js';
|
|
|
15
15
|
import { Vector3 } from '../math/Vector3.js';
|
|
16
16
|
import { Matrix3 } from '../math/Matrix3.js';
|
|
17
17
|
import { Source } from './Source.js';
|
|
18
|
+
import { warn } from '../utils.js';
|
|
18
19
|
|
|
19
20
|
let _textureId = 0;
|
|
20
21
|
|
|
@@ -521,7 +522,7 @@ class Texture extends EventDispatcher {
|
|
|
521
522
|
|
|
522
523
|
if ( newValue === undefined ) {
|
|
523
524
|
|
|
524
|
-
|
|
525
|
+
warn( `Texture.setValues(): parameter '${ key }' has value of undefined.` );
|
|
525
526
|
continue;
|
|
526
527
|
|
|
527
528
|
}
|
|
@@ -530,7 +531,7 @@ class Texture extends EventDispatcher {
|
|
|
530
531
|
|
|
531
532
|
if ( currentValue === undefined ) {
|
|
532
533
|
|
|
533
|
-
|
|
534
|
+
warn( `Texture.setValues(): property '${ key }' does not exist.` );
|
|
534
535
|
continue;
|
|
535
536
|
|
|
536
537
|
}
|
|
@@ -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
|
*
|
|
@@ -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,20 @@ class VideoTexture extends Texture {
|
|
|
95
108
|
|
|
96
109
|
}
|
|
97
110
|
|
|
111
|
+
dispose() {
|
|
112
|
+
|
|
113
|
+
if ( this._requestVideoFrameCallbackId !== 0 ) {
|
|
114
|
+
|
|
115
|
+
this.source.data.cancelVideoFrameCallback( this._requestVideoFrameCallbackId );
|
|
116
|
+
|
|
117
|
+
this._requestVideoFrameCallbackId = 0;
|
|
118
|
+
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
super.dispose();
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
|
|
98
125
|
}
|
|
99
126
|
|
|
100
127
|
export { VideoTexture };
|