super-three 0.171.0 → 0.173.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/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { warnOnce } from '../../../utils.js';
|
|
2
|
+
import TimestampQueryPool from '../../common/TimestampQueryPool.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Manages a pool of WebGPU timestamp queries for performance measurement.
|
|
6
|
+
* Extends the base TimestampQueryPool to provide WebGPU-specific implementation.
|
|
7
|
+
* @extends TimestampQueryPool
|
|
8
|
+
*/
|
|
9
|
+
class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Creates a new WebGPU timestamp query pool.
|
|
13
|
+
* @param {GPUDevice} device - The WebGPU device to create queries on.
|
|
14
|
+
* @param {string} type - The type identifier for this query pool.
|
|
15
|
+
* @param {number} [maxQueries=2048] - Maximum number of queries this pool can hold.
|
|
16
|
+
*/
|
|
17
|
+
constructor( device, type, maxQueries = 2048 ) {
|
|
18
|
+
|
|
19
|
+
super( maxQueries );
|
|
20
|
+
this.device = device;
|
|
21
|
+
this.type = type;
|
|
22
|
+
|
|
23
|
+
this.querySet = this.device.createQuerySet( {
|
|
24
|
+
type: 'timestamp',
|
|
25
|
+
count: this.maxQueries,
|
|
26
|
+
label: `queryset_global_timestamp_${type}`
|
|
27
|
+
} );
|
|
28
|
+
|
|
29
|
+
const bufferSize = this.maxQueries * 8;
|
|
30
|
+
this.resolveBuffer = this.device.createBuffer( {
|
|
31
|
+
label: `buffer_timestamp_resolve_${type}`,
|
|
32
|
+
size: bufferSize,
|
|
33
|
+
usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC
|
|
34
|
+
} );
|
|
35
|
+
|
|
36
|
+
this.resultBuffer = this.device.createBuffer( {
|
|
37
|
+
label: `buffer_timestamp_result_${type}`,
|
|
38
|
+
size: bufferSize,
|
|
39
|
+
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
|
|
40
|
+
} );
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Allocates a pair of queries for a given render context.
|
|
46
|
+
* @param {Object} renderContext - The render context to allocate queries for.
|
|
47
|
+
* @returns {?number} The base offset for the allocated queries, or null if allocation failed.
|
|
48
|
+
*/
|
|
49
|
+
allocateQueriesForContext( renderContext ) {
|
|
50
|
+
|
|
51
|
+
if ( ! this.trackTimestamp || this.isDisposed ) return null;
|
|
52
|
+
|
|
53
|
+
if ( this.currentQueryIndex + 2 > this.maxQueries ) {
|
|
54
|
+
|
|
55
|
+
warnOnce( `WebGPUTimestampQueryPool [${ this.type }]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${ this.type.toUpperCase() } ).` );
|
|
56
|
+
return null;
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const baseOffset = this.currentQueryIndex;
|
|
61
|
+
this.currentQueryIndex += 2;
|
|
62
|
+
|
|
63
|
+
this.queryOffsets.set( renderContext.id, baseOffset );
|
|
64
|
+
return baseOffset;
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Asynchronously resolves all pending queries and returns the total duration.
|
|
70
|
+
* If there's already a pending resolve operation, returns that promise instead.
|
|
71
|
+
* @returns {Promise<number>} The total duration in milliseconds, or the last valid value if resolution fails.
|
|
72
|
+
*/
|
|
73
|
+
async resolveQueriesAsync() {
|
|
74
|
+
|
|
75
|
+
if ( ! this.trackTimestamp || this.currentQueryIndex === 0 || this.isDisposed ) {
|
|
76
|
+
|
|
77
|
+
return this.lastValue;
|
|
78
|
+
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if ( this.pendingResolve ) {
|
|
82
|
+
|
|
83
|
+
return this.pendingResolve;
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
this.pendingResolve = this._resolveQueries();
|
|
88
|
+
|
|
89
|
+
try {
|
|
90
|
+
|
|
91
|
+
const result = await this.pendingResolve;
|
|
92
|
+
return result;
|
|
93
|
+
|
|
94
|
+
} finally {
|
|
95
|
+
|
|
96
|
+
this.pendingResolve = null;
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Internal method to resolve queries and calculate total duration.
|
|
104
|
+
* @private
|
|
105
|
+
* @returns {Promise<number>} The total duration in milliseconds.
|
|
106
|
+
*/
|
|
107
|
+
async _resolveQueries() {
|
|
108
|
+
|
|
109
|
+
if ( this.isDisposed ) {
|
|
110
|
+
|
|
111
|
+
return this.lastValue;
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
try {
|
|
116
|
+
|
|
117
|
+
if ( this.resultBuffer.mapState !== 'unmapped' ) {
|
|
118
|
+
|
|
119
|
+
return this.lastValue;
|
|
120
|
+
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const currentOffsets = new Map( this.queryOffsets );
|
|
124
|
+
const queryCount = this.currentQueryIndex;
|
|
125
|
+
const bytesUsed = queryCount * 8;
|
|
126
|
+
|
|
127
|
+
// Reset state before GPU work
|
|
128
|
+
this.currentQueryIndex = 0;
|
|
129
|
+
this.queryOffsets.clear();
|
|
130
|
+
|
|
131
|
+
const commandEncoder = this.device.createCommandEncoder();
|
|
132
|
+
|
|
133
|
+
commandEncoder.resolveQuerySet(
|
|
134
|
+
this.querySet,
|
|
135
|
+
0,
|
|
136
|
+
queryCount,
|
|
137
|
+
this.resolveBuffer,
|
|
138
|
+
0
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
commandEncoder.copyBufferToBuffer(
|
|
142
|
+
this.resolveBuffer,
|
|
143
|
+
0,
|
|
144
|
+
this.resultBuffer,
|
|
145
|
+
0,
|
|
146
|
+
bytesUsed
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
const commandBuffer = commandEncoder.finish();
|
|
150
|
+
this.device.queue.submit( [ commandBuffer ] );
|
|
151
|
+
|
|
152
|
+
if ( this.resultBuffer.mapState !== 'unmapped' ) {
|
|
153
|
+
|
|
154
|
+
return this.lastValue;
|
|
155
|
+
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Create and track the mapping operation
|
|
159
|
+
await this.resultBuffer.mapAsync( GPUMapMode.READ, 0, bytesUsed );
|
|
160
|
+
|
|
161
|
+
if ( this.isDisposed ) {
|
|
162
|
+
|
|
163
|
+
if ( this.resultBuffer.mapState === 'mapped' ) {
|
|
164
|
+
|
|
165
|
+
this.resultBuffer.unmap();
|
|
166
|
+
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return this.lastValue;
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const times = new BigUint64Array( this.resultBuffer.getMappedRange( 0, bytesUsed ) );
|
|
174
|
+
let totalDuration = 0;
|
|
175
|
+
|
|
176
|
+
for ( const [ , baseOffset ] of currentOffsets ) {
|
|
177
|
+
|
|
178
|
+
const startTime = times[ baseOffset ];
|
|
179
|
+
const endTime = times[ baseOffset + 1 ];
|
|
180
|
+
const duration = Number( endTime - startTime ) / 1e6;
|
|
181
|
+
totalDuration += duration;
|
|
182
|
+
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
this.resultBuffer.unmap();
|
|
186
|
+
this.lastValue = totalDuration;
|
|
187
|
+
|
|
188
|
+
return totalDuration;
|
|
189
|
+
|
|
190
|
+
} catch ( error ) {
|
|
191
|
+
|
|
192
|
+
console.error( 'Error resolving queries:', error );
|
|
193
|
+
if ( this.resultBuffer.mapState === 'mapped' ) {
|
|
194
|
+
|
|
195
|
+
this.resultBuffer.unmap();
|
|
196
|
+
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return this.lastValue;
|
|
200
|
+
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
async dispose() {
|
|
206
|
+
|
|
207
|
+
if ( this.isDisposed ) {
|
|
208
|
+
|
|
209
|
+
return;
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
this.isDisposed = true;
|
|
214
|
+
|
|
215
|
+
// Wait for pending resolve operation
|
|
216
|
+
if ( this.pendingResolve ) {
|
|
217
|
+
|
|
218
|
+
try {
|
|
219
|
+
|
|
220
|
+
await this.pendingResolve;
|
|
221
|
+
|
|
222
|
+
} catch ( error ) {
|
|
223
|
+
|
|
224
|
+
console.error( 'Error waiting for pending resolve:', error );
|
|
225
|
+
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Ensure buffer is unmapped before destroying
|
|
231
|
+
if ( this.resultBuffer && this.resultBuffer.mapState === 'mapped' ) {
|
|
232
|
+
|
|
233
|
+
try {
|
|
234
|
+
|
|
235
|
+
this.resultBuffer.unmap();
|
|
236
|
+
|
|
237
|
+
} catch ( error ) {
|
|
238
|
+
|
|
239
|
+
console.error( 'Error unmapping buffer:', error );
|
|
240
|
+
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Destroy resources
|
|
246
|
+
if ( this.querySet ) {
|
|
247
|
+
|
|
248
|
+
this.querySet.destroy();
|
|
249
|
+
this.querySet = null;
|
|
250
|
+
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if ( this.resolveBuffer ) {
|
|
254
|
+
|
|
255
|
+
this.resolveBuffer.destroy();
|
|
256
|
+
this.resolveBuffer = null;
|
|
257
|
+
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
if ( this.resultBuffer ) {
|
|
261
|
+
|
|
262
|
+
this.resultBuffer.destroy();
|
|
263
|
+
this.resultBuffer = null;
|
|
264
|
+
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
this.queryOffsets.clear();
|
|
268
|
+
this.pendingResolve = null;
|
|
269
|
+
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export default WebGPUTimestampQueryPool;
|
|
@@ -1,13 +1,35 @@
|
|
|
1
|
+
import { HalfFloatType, UnsignedByteType } from '../../../constants.js';
|
|
1
2
|
import { GPUPrimitiveTopology, GPUTextureFormat } from './WebGPUConstants.js';
|
|
2
3
|
|
|
4
|
+
/**
|
|
5
|
+
* A WebGPU backend utility module with common helpers.
|
|
6
|
+
*
|
|
7
|
+
* @private
|
|
8
|
+
*/
|
|
3
9
|
class WebGPUUtils {
|
|
4
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Constructs a new utility object.
|
|
13
|
+
*
|
|
14
|
+
* @param {WebGPUBackend} backend - The WebGPU backend.
|
|
15
|
+
*/
|
|
5
16
|
constructor( backend ) {
|
|
6
17
|
|
|
18
|
+
/**
|
|
19
|
+
* A reference to the WebGPU backend.
|
|
20
|
+
*
|
|
21
|
+
* @type {WebGPUBackend}
|
|
22
|
+
*/
|
|
7
23
|
this.backend = backend;
|
|
8
24
|
|
|
9
25
|
}
|
|
10
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Returns the depth/stencil GPU format for the given render context.
|
|
29
|
+
*
|
|
30
|
+
* @param {RenderContext} renderContext - The render context.
|
|
31
|
+
* @return {String} The depth/stencil GPU texture format.
|
|
32
|
+
*/
|
|
11
33
|
getCurrentDepthStencilFormat( renderContext ) {
|
|
12
34
|
|
|
13
35
|
let format;
|
|
@@ -30,12 +52,60 @@ class WebGPUUtils {
|
|
|
30
52
|
|
|
31
53
|
}
|
|
32
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Returns the GPU format for the given texture.
|
|
57
|
+
*
|
|
58
|
+
* @param {Texture} texture - The texture.
|
|
59
|
+
* @return {String} The GPU texture format.
|
|
60
|
+
*/
|
|
33
61
|
getTextureFormatGPU( texture ) {
|
|
34
62
|
|
|
35
63
|
return this.backend.get( texture ).format;
|
|
36
64
|
|
|
37
65
|
}
|
|
38
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Returns an object that defines the multi-sampling state of the given texture.
|
|
69
|
+
*
|
|
70
|
+
* @param {Texture} texture - The texture.
|
|
71
|
+
* @return {Object} The multi-sampling state.
|
|
72
|
+
*/
|
|
73
|
+
getTextureSampleData( texture ) {
|
|
74
|
+
|
|
75
|
+
let samples;
|
|
76
|
+
|
|
77
|
+
if ( texture.isFramebufferTexture ) {
|
|
78
|
+
|
|
79
|
+
samples = 1;
|
|
80
|
+
|
|
81
|
+
} else if ( texture.isDepthTexture && ! texture.renderTarget ) {
|
|
82
|
+
|
|
83
|
+
const renderer = this.backend.renderer;
|
|
84
|
+
const renderTarget = renderer.getRenderTarget();
|
|
85
|
+
|
|
86
|
+
samples = renderTarget ? renderTarget.samples : renderer.samples;
|
|
87
|
+
|
|
88
|
+
} else if ( texture.renderTarget ) {
|
|
89
|
+
|
|
90
|
+
samples = texture.renderTarget.samples;
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
samples = samples || 1;
|
|
95
|
+
|
|
96
|
+
const isMSAA = samples > 1 && texture.renderTarget !== null && ( texture.isDepthTexture !== true && texture.isFramebufferTexture !== true );
|
|
97
|
+
const primarySamples = isMSAA ? 1 : samples;
|
|
98
|
+
|
|
99
|
+
return { samples, primarySamples, isMSAA };
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Returns the default color attachment's GPU format of the current render context.
|
|
105
|
+
*
|
|
106
|
+
* @param {RenderContext} renderContext - The render context.
|
|
107
|
+
* @return {String} The GPU texture format of the default color attachment.
|
|
108
|
+
*/
|
|
39
109
|
getCurrentColorFormat( renderContext ) {
|
|
40
110
|
|
|
41
111
|
let format;
|
|
@@ -54,6 +124,12 @@ class WebGPUUtils {
|
|
|
54
124
|
|
|
55
125
|
}
|
|
56
126
|
|
|
127
|
+
/**
|
|
128
|
+
* Returns the output color space of the current render context.
|
|
129
|
+
*
|
|
130
|
+
* @param {RenderContext} renderContext - The render context.
|
|
131
|
+
* @return {String} The output color space.
|
|
132
|
+
*/
|
|
57
133
|
getCurrentColorSpace( renderContext ) {
|
|
58
134
|
|
|
59
135
|
if ( renderContext.textures !== null ) {
|
|
@@ -66,6 +142,13 @@ class WebGPUUtils {
|
|
|
66
142
|
|
|
67
143
|
}
|
|
68
144
|
|
|
145
|
+
/**
|
|
146
|
+
* Returns GPU primitive topology for the given object and material.
|
|
147
|
+
*
|
|
148
|
+
* @param {Object3D} object - The 3D object.
|
|
149
|
+
* @param {Material} material - The material.
|
|
150
|
+
* @return {String} The GPU primitive topology.
|
|
151
|
+
*/
|
|
69
152
|
getPrimitiveTopology( object, material ) {
|
|
70
153
|
|
|
71
154
|
if ( object.isPoints ) return GPUPrimitiveTopology.PointList;
|
|
@@ -75,6 +158,14 @@ class WebGPUUtils {
|
|
|
75
158
|
|
|
76
159
|
}
|
|
77
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Returns a modified sample count from the given sample count value.
|
|
163
|
+
*
|
|
164
|
+
* That is required since WebGPU does not support arbitrary sample counts.
|
|
165
|
+
*
|
|
166
|
+
* @param {Number} sampleCount - The input sample count.
|
|
167
|
+
* @return {Number} The (potentially updated) output sample count.
|
|
168
|
+
*/
|
|
78
169
|
getSampleCount( sampleCount ) {
|
|
79
170
|
|
|
80
171
|
let count = 1;
|
|
@@ -96,6 +187,12 @@ class WebGPUUtils {
|
|
|
96
187
|
|
|
97
188
|
}
|
|
98
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Returns the sample count of the given render context.
|
|
192
|
+
*
|
|
193
|
+
* @param {RenderContext} renderContext - The render context.
|
|
194
|
+
* @return {Number} The sample count.
|
|
195
|
+
*/
|
|
99
196
|
getSampleCountRenderContext( renderContext ) {
|
|
100
197
|
|
|
101
198
|
if ( renderContext.textures !== null ) {
|
|
@@ -108,18 +205,33 @@ class WebGPUUtils {
|
|
|
108
205
|
|
|
109
206
|
}
|
|
110
207
|
|
|
208
|
+
/**
|
|
209
|
+
* Returns the preferred canvas format.
|
|
210
|
+
*
|
|
211
|
+
* There is a separate method for this so it's possible to
|
|
212
|
+
* honor edge cases for specific devices.
|
|
213
|
+
*
|
|
214
|
+
* @return {String} The GPU texture format of the canvas.
|
|
215
|
+
*/
|
|
111
216
|
getPreferredCanvasFormat() {
|
|
112
217
|
|
|
113
|
-
|
|
114
|
-
// https://github.com/mrdoob/three.js/pull/29221/files#r1731833949
|
|
218
|
+
const outputType = this.backend.parameters.outputType;
|
|
115
219
|
|
|
116
|
-
if (
|
|
220
|
+
if ( outputType === undefined ) {
|
|
221
|
+
|
|
222
|
+
return navigator.gpu.getPreferredCanvasFormat();
|
|
223
|
+
|
|
224
|
+
} else if ( outputType === UnsignedByteType ) {
|
|
117
225
|
|
|
118
226
|
return GPUTextureFormat.BGRA8Unorm;
|
|
119
227
|
|
|
228
|
+
} else if ( outputType === HalfFloatType ) {
|
|
229
|
+
|
|
230
|
+
return GPUTextureFormat.RGBA16Float;
|
|
231
|
+
|
|
120
232
|
} else {
|
|
121
233
|
|
|
122
|
-
|
|
234
|
+
throw new Error( 'Unsupported outputType' );
|
|
123
235
|
|
|
124
236
|
}
|
|
125
237
|
|
|
@@ -52,7 +52,7 @@ class WebXRDepthSensing {
|
|
|
52
52
|
const texProps = renderer.properties.get( texture );
|
|
53
53
|
texProps.__webglTexture = depthData.texture;
|
|
54
54
|
|
|
55
|
-
if ( ( depthData.depthNear
|
|
55
|
+
if ( ( depthData.depthNear !== renderState.depthNear ) || ( depthData.depthFar !== renderState.depthFar ) ) {
|
|
56
56
|
|
|
57
57
|
this.depthNear = depthData.depthNear;
|
|
58
58
|
this.depthFar = depthData.depthFar;
|
|
@@ -248,6 +248,12 @@ class WebXRManager extends EventDispatcher {
|
|
|
248
248
|
|
|
249
249
|
};
|
|
250
250
|
|
|
251
|
+
this.getRenderTarget = function () {
|
|
252
|
+
|
|
253
|
+
return newRenderTarget;
|
|
254
|
+
|
|
255
|
+
};
|
|
256
|
+
|
|
251
257
|
this.getFrame = function () {
|
|
252
258
|
|
|
253
259
|
return xrFrame;
|
|
@@ -286,7 +292,11 @@ class WebXRManager extends EventDispatcher {
|
|
|
286
292
|
currentPixelRatio = renderer.getPixelRatio();
|
|
287
293
|
renderer.getSize( currentSize );
|
|
288
294
|
|
|
289
|
-
|
|
295
|
+
// Check that the browser implements the necessary APIs to use an
|
|
296
|
+
// XRProjectionLayer rather than an XRWebGLLayer
|
|
297
|
+
const useLayers = typeof XRWebGLBinding !== 'undefined' && 'createProjectionLayer' in XRWebGLBinding.prototype;
|
|
298
|
+
|
|
299
|
+
if ( ! useLayers ) {
|
|
290
300
|
|
|
291
301
|
const layerInit = {
|
|
292
302
|
antialias: attributes.antialias,
|
|
@@ -511,6 +521,10 @@ class WebXRManager extends EventDispatcher {
|
|
|
511
521
|
* the cameras' projection and world matrices have already been set.
|
|
512
522
|
* And that near and far planes are identical for both cameras.
|
|
513
523
|
* Visualization of this technique: https://computergraphics.stackexchange.com/a/4765
|
|
524
|
+
*
|
|
525
|
+
* @param {ArrayCamera} camera - The camera to update.
|
|
526
|
+
* @param {PerspectiveCamera} cameraL - The left camera.
|
|
527
|
+
* @param {PerspectiveCamera} cameraR - The right camera.
|
|
514
528
|
*/
|
|
515
529
|
function setProjectionFromUnion( camera, cameraL, cameraR ) {
|
|
516
530
|
|
|
@@ -839,8 +853,11 @@ class WebXRManager extends EventDispatcher {
|
|
|
839
853
|
//
|
|
840
854
|
|
|
841
855
|
const enabledFeatures = session.enabledFeatures;
|
|
856
|
+
const gpuDepthSensingEnabled = enabledFeatures &&
|
|
857
|
+
enabledFeatures.includes( 'depth-sensing' ) &&
|
|
858
|
+
session.depthUsage == 'gpu-optimized';
|
|
842
859
|
|
|
843
|
-
if (
|
|
860
|
+
if ( gpuDepthSensingEnabled && glBinding ) {
|
|
844
861
|
|
|
845
862
|
const depthData = glBinding.getDepthInformation( views[ 0 ] );
|
|
846
863
|
|
|
@@ -6,9 +6,9 @@ class Data3DTexture extends Texture {
|
|
|
6
6
|
constructor( data = null, width = 1, height = 1, depth = 1 ) {
|
|
7
7
|
|
|
8
8
|
// We're going to add .setXXX() methods for setting properties later.
|
|
9
|
-
// Users can still set in
|
|
9
|
+
// Users can still set in Data3DTexture directly.
|
|
10
10
|
//
|
|
11
|
-
// const texture = new THREE.
|
|
11
|
+
// const texture = new THREE.Data3DTexture( data, width, height, depth );
|
|
12
12
|
// texture.anisotropy = 16;
|
|
13
13
|
//
|
|
14
14
|
// See #14839
|
package/src/textures/Texture.js
CHANGED
|
@@ -69,6 +69,7 @@ class Texture extends EventDispatcher {
|
|
|
69
69
|
this.version = 0;
|
|
70
70
|
this.onUpdate = null;
|
|
71
71
|
|
|
72
|
+
this.renderTarget = null; // assign texture to a render target
|
|
72
73
|
this.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not
|
|
73
74
|
this.pmremVersion = 0; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)
|
|
74
75
|
|
|
@@ -134,6 +135,9 @@ class Texture extends EventDispatcher {
|
|
|
134
135
|
this.unpackAlignment = source.unpackAlignment;
|
|
135
136
|
this.colorSpace = source.colorSpace;
|
|
136
137
|
|
|
138
|
+
this.renderTarget = source.renderTarget;
|
|
139
|
+
this.isRenderTargetTexture = source.isRenderTargetTexture;
|
|
140
|
+
|
|
137
141
|
this.userData = JSON.parse( JSON.stringify( source.userData ) );
|
|
138
142
|
|
|
139
143
|
this.needsUpdate = true;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { VideoTexture } from './VideoTexture.js';
|
|
2
|
+
|
|
3
|
+
class VideoFrameTexture extends VideoTexture {
|
|
4
|
+
|
|
5
|
+
constructor( mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
|
|
6
|
+
|
|
7
|
+
super( {}, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
|
|
8
|
+
|
|
9
|
+
this.isVideoFrameTexture = true;
|
|
10
|
+
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
update() {
|
|
14
|
+
|
|
15
|
+
// overwrites `VideoTexture.update()` with an empty method since
|
|
16
|
+
// this type of texture is updated via `setFrame()`.
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
clone() {
|
|
21
|
+
|
|
22
|
+
return new this.constructor().copy( this ); // restoring Texture.clone()
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
setFrame( frame ) {
|
|
27
|
+
|
|
28
|
+
this.image = frame;
|
|
29
|
+
this.needsUpdate = true;
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { VideoFrameTexture };
|