super-three 0.181.0 → 0.184.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 +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Texture } from './Texture.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Creates a texture from an HTML element.
|
|
5
|
+
*
|
|
6
|
+
* This is almost the same as the base texture class, except that it sets {@link Texture#needsUpdate}
|
|
7
|
+
* to `true` immediately and listens for the parent canvas's paint events to trigger updates.
|
|
8
|
+
*
|
|
9
|
+
* @augments Texture
|
|
10
|
+
*/
|
|
11
|
+
class HTMLTexture extends Texture {
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new texture.
|
|
15
|
+
*
|
|
16
|
+
* @param {HTMLElement} [element] - The HTML element.
|
|
17
|
+
* @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
|
|
18
|
+
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
19
|
+
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
20
|
+
* @param {number} [magFilter=LinearFilter] - The mag filter value.
|
|
21
|
+
* @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.
|
|
22
|
+
* @param {number} [format=RGBAFormat] - The texture format.
|
|
23
|
+
* @param {number} [type=UnsignedByteType] - The texture type.
|
|
24
|
+
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
25
|
+
*/
|
|
26
|
+
constructor( element, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
|
|
27
|
+
|
|
28
|
+
super( element, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* This flag can be used for type testing.
|
|
32
|
+
*
|
|
33
|
+
* @type {boolean}
|
|
34
|
+
* @readonly
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
37
|
+
this.isHTMLTexture = true;
|
|
38
|
+
this.generateMipmaps = false;
|
|
39
|
+
|
|
40
|
+
this.needsUpdate = true;
|
|
41
|
+
|
|
42
|
+
const parent = element ? element.parentNode : null;
|
|
43
|
+
|
|
44
|
+
if ( parent !== null && 'requestPaint' in parent ) {
|
|
45
|
+
|
|
46
|
+
parent.onpaint = () => {
|
|
47
|
+
|
|
48
|
+
this.needsUpdate = true;
|
|
49
|
+
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
parent.requestPaint();
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
dispose() {
|
|
59
|
+
|
|
60
|
+
const parent = this.image ? this.image.parentNode : null;
|
|
61
|
+
|
|
62
|
+
if ( parent !== null && 'onpaint' in parent ) {
|
|
63
|
+
|
|
64
|
+
parent.onpaint = null;
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
super.dispose();
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { HTMLTexture };
|
package/src/textures/Source.js
CHANGED
|
@@ -88,9 +88,9 @@ class Source {
|
|
|
88
88
|
|
|
89
89
|
target.set( data.videoWidth, data.videoHeight, 0 );
|
|
90
90
|
|
|
91
|
-
} else if ( data instanceof VideoFrame ) {
|
|
91
|
+
} else if ( ( typeof VideoFrame !== 'undefined' ) && ( data instanceof VideoFrame ) ) {
|
|
92
92
|
|
|
93
|
-
target.set( data.
|
|
93
|
+
target.set( data.displayWidth, data.displayHeight, 0 );
|
|
94
94
|
|
|
95
95
|
} else if ( data !== null ) {
|
|
96
96
|
|
package/src/textures/Texture.js
CHANGED
|
@@ -68,7 +68,7 @@ class Texture extends EventDispatcher {
|
|
|
68
68
|
Object.defineProperty( this, 'id', { value: _textureId ++ } );
|
|
69
69
|
|
|
70
70
|
/**
|
|
71
|
-
* The UUID of the
|
|
71
|
+
* The UUID of the texture.
|
|
72
72
|
*
|
|
73
73
|
* @type {string}
|
|
74
74
|
* @readonly
|
|
@@ -76,7 +76,7 @@ class Texture extends EventDispatcher {
|
|
|
76
76
|
this.uuid = generateUUID();
|
|
77
77
|
|
|
78
78
|
/**
|
|
79
|
-
* The name of the
|
|
79
|
+
* The name of the texture.
|
|
80
80
|
*
|
|
81
81
|
* @type {string}
|
|
82
82
|
*/
|
|
@@ -158,7 +158,7 @@ class Texture extends EventDispatcher {
|
|
|
158
158
|
* texture samples being used.
|
|
159
159
|
*
|
|
160
160
|
* @type {number}
|
|
161
|
-
* @default
|
|
161
|
+
* @default Texture.DEFAULT_ANISOTROPY
|
|
162
162
|
*/
|
|
163
163
|
this.anisotropy = anisotropy;
|
|
164
164
|
|
|
@@ -368,6 +368,15 @@ class Texture extends EventDispatcher {
|
|
|
368
368
|
*/
|
|
369
369
|
this.pmremVersion = 0;
|
|
370
370
|
|
|
371
|
+
/**
|
|
372
|
+
* Whether the texture should use one of the 16 bit integer formats which are normalized
|
|
373
|
+
* to [0, 1] or [-1, 1] (depending on signed/unsigned) when sampled.
|
|
374
|
+
*
|
|
375
|
+
* @type {boolean}
|
|
376
|
+
* @default false
|
|
377
|
+
*/
|
|
378
|
+
this.normalized = false;
|
|
379
|
+
|
|
371
380
|
}
|
|
372
381
|
|
|
373
382
|
/**
|
|
@@ -408,14 +417,14 @@ class Texture extends EventDispatcher {
|
|
|
408
417
|
|
|
409
418
|
}
|
|
410
419
|
|
|
411
|
-
set image( value
|
|
420
|
+
set image( value ) {
|
|
412
421
|
|
|
413
422
|
this.source.data = value;
|
|
414
423
|
|
|
415
424
|
}
|
|
416
425
|
|
|
417
426
|
/**
|
|
418
|
-
* Updates the texture transformation matrix from the
|
|
427
|
+
* Updates the texture transformation matrix from the properties {@link Texture#offset},
|
|
419
428
|
* {@link Texture#repeat}, {@link Texture#rotation}, and {@link Texture#center}.
|
|
420
429
|
*/
|
|
421
430
|
updateMatrix() {
|
|
@@ -483,6 +492,7 @@ class Texture extends EventDispatcher {
|
|
|
483
492
|
this.format = source.format;
|
|
484
493
|
this.internalFormat = source.internalFormat;
|
|
485
494
|
this.type = source.type;
|
|
495
|
+
this.normalized = source.normalized;
|
|
486
496
|
|
|
487
497
|
this.offset.copy( source.offset );
|
|
488
498
|
this.repeat.copy( source.repeat );
|
|
@@ -601,6 +611,7 @@ class Texture extends EventDispatcher {
|
|
|
601
611
|
format: this.format,
|
|
602
612
|
internalFormat: this.internalFormat,
|
|
603
613
|
type: this.type,
|
|
614
|
+
normalized: this.normalized,
|
|
604
615
|
colorSpace: this.colorSpace,
|
|
605
616
|
|
|
606
617
|
minFilter: this.minFilter,
|
package/src/utils.js
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import { AlwaysDepth, EqualDepth, GreaterDepth, GreaterEqualDepth, LessDepth, LessEqualDepth, NeverDepth, NotEqualDepth } from './constants.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Finds the minimum value in an array.
|
|
5
|
+
*
|
|
6
|
+
* @private
|
|
7
|
+
* @param {Array<number>} array - The array to search for the minimum value.
|
|
8
|
+
* @return {number} The minimum value in the array, or Infinity if the array is empty.
|
|
9
|
+
*/
|
|
1
10
|
function arrayMin( array ) {
|
|
2
11
|
|
|
3
12
|
if ( array.length === 0 ) return Infinity;
|
|
@@ -14,6 +23,13 @@ function arrayMin( array ) {
|
|
|
14
23
|
|
|
15
24
|
}
|
|
16
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Finds the maximum value in an array.
|
|
28
|
+
*
|
|
29
|
+
* @private
|
|
30
|
+
* @param {Array<number>} array - The array to search for the maximum value.
|
|
31
|
+
* @return {number} The maximum value in the array, or -Infinity if the array is empty.
|
|
32
|
+
*/
|
|
17
33
|
function arrayMax( array ) {
|
|
18
34
|
|
|
19
35
|
if ( array.length === 0 ) return - Infinity;
|
|
@@ -30,6 +46,18 @@ function arrayMax( array ) {
|
|
|
30
46
|
|
|
31
47
|
}
|
|
32
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Checks if an array contains values that require Uint32 representation.
|
|
51
|
+
*
|
|
52
|
+
* This function determines whether the array contains any values >= 65535,
|
|
53
|
+
* which would require a Uint32Array rather than a Uint16Array for proper storage.
|
|
54
|
+
* The function iterates from the end of the array, assuming larger values are
|
|
55
|
+
* typically located at the end.
|
|
56
|
+
*
|
|
57
|
+
* @private
|
|
58
|
+
* @param {Array<number>} array - The array to check.
|
|
59
|
+
* @return {boolean} True if the array contains values >= 65535, false otherwise.
|
|
60
|
+
*/
|
|
33
61
|
function arrayNeedsUint32( array ) {
|
|
34
62
|
|
|
35
63
|
// assumes larger values usually on last
|
|
@@ -44,6 +72,14 @@ function arrayNeedsUint32( array ) {
|
|
|
44
72
|
|
|
45
73
|
}
|
|
46
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Map of typed array constructor names to their constructors.
|
|
77
|
+
* This mapping enables dynamic creation of typed arrays based on string type names.
|
|
78
|
+
*
|
|
79
|
+
* @private
|
|
80
|
+
* @constant
|
|
81
|
+
* @type {Object<string, TypedArrayConstructor>}
|
|
82
|
+
*/
|
|
47
83
|
const TYPED_ARRAYS = {
|
|
48
84
|
Int8Array: Int8Array,
|
|
49
85
|
Uint8Array: Uint8Array,
|
|
@@ -56,18 +92,57 @@ const TYPED_ARRAYS = {
|
|
|
56
92
|
Float64Array: Float64Array
|
|
57
93
|
};
|
|
58
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Creates a typed array of the specified type from the given buffer.
|
|
97
|
+
*
|
|
98
|
+
* @private
|
|
99
|
+
* @param {string} type - The name of the typed array type (e.g., 'Float32Array', 'Uint16Array').
|
|
100
|
+
* @param {ArrayBuffer} buffer - The buffer to create the typed array from.
|
|
101
|
+
* @return {TypedArray} A new typed array of the specified type.
|
|
102
|
+
*/
|
|
59
103
|
function getTypedArray( type, buffer ) {
|
|
60
104
|
|
|
61
105
|
return new TYPED_ARRAYS[ type ]( buffer );
|
|
62
106
|
|
|
63
107
|
}
|
|
64
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Returns `true` if the given object is a typed array.
|
|
111
|
+
*
|
|
112
|
+
* @param {any} array - The object to check.
|
|
113
|
+
* @return {boolean} Whether the given object is a typed array.
|
|
114
|
+
*/
|
|
115
|
+
function isTypedArray( array ) {
|
|
116
|
+
|
|
117
|
+
return ArrayBuffer.isView( array ) && ! ( array instanceof DataView );
|
|
118
|
+
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Creates an XHTML element with the specified tag name.
|
|
123
|
+
*
|
|
124
|
+
* This function uses the XHTML namespace to create DOM elements,
|
|
125
|
+
* ensuring proper element creation in XML-based contexts.
|
|
126
|
+
*
|
|
127
|
+
* @private
|
|
128
|
+
* @param {string} name - The tag name of the element to create (e.g., 'canvas', 'div').
|
|
129
|
+
* @return {HTMLElement} The created XHTML element.
|
|
130
|
+
*/
|
|
65
131
|
function createElementNS( name ) {
|
|
66
132
|
|
|
67
133
|
return document.createElementNS( 'http://www.w3.org/1999/xhtml', name );
|
|
68
134
|
|
|
69
135
|
}
|
|
70
136
|
|
|
137
|
+
/**
|
|
138
|
+
* Creates a canvas element configured for block display.
|
|
139
|
+
*
|
|
140
|
+
* This is a convenience function that creates a canvas element with
|
|
141
|
+
* display style set to 'block', which is commonly used in three.js
|
|
142
|
+
* rendering contexts to avoid inline element spacing issues.
|
|
143
|
+
*
|
|
144
|
+
* @return {HTMLCanvasElement} A canvas element with display set to 'block'.
|
|
145
|
+
*/
|
|
71
146
|
function createCanvasElement() {
|
|
72
147
|
|
|
73
148
|
const canvas = createElementNS( 'canvas' );
|
|
@@ -76,22 +151,59 @@ function createCanvasElement() {
|
|
|
76
151
|
|
|
77
152
|
}
|
|
78
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Internal cache for tracking warning messages to prevent duplicate warnings.
|
|
156
|
+
*
|
|
157
|
+
* @private
|
|
158
|
+
* @type {Object<string, boolean>}
|
|
159
|
+
*/
|
|
79
160
|
const _cache = {};
|
|
80
161
|
|
|
162
|
+
/**
|
|
163
|
+
* Custom console function handler for intercepting log, warn, and error calls.
|
|
164
|
+
*
|
|
165
|
+
* @private
|
|
166
|
+
* @type {Function|null}
|
|
167
|
+
*/
|
|
81
168
|
let _setConsoleFunction = null;
|
|
82
169
|
|
|
170
|
+
/**
|
|
171
|
+
* Sets a custom function to handle console output.
|
|
172
|
+
*
|
|
173
|
+
* This allows external code to intercept and handle console.log, console.warn,
|
|
174
|
+
* and console.error calls made by three.js, which is useful for custom logging,
|
|
175
|
+
* testing, or debugging workflows.
|
|
176
|
+
*
|
|
177
|
+
* @param {Function} fn - The function to handle console output. Should accept
|
|
178
|
+
* (type, message, ...params) where type is 'log', 'warn', or 'error'.
|
|
179
|
+
*/
|
|
83
180
|
function setConsoleFunction( fn ) {
|
|
84
181
|
|
|
85
182
|
_setConsoleFunction = fn;
|
|
86
183
|
|
|
87
184
|
}
|
|
88
185
|
|
|
186
|
+
/**
|
|
187
|
+
* Gets the currently set custom console function.
|
|
188
|
+
*
|
|
189
|
+
* @return {Function|null} The custom console function, or null if not set.
|
|
190
|
+
*/
|
|
89
191
|
function getConsoleFunction() {
|
|
90
192
|
|
|
91
193
|
return _setConsoleFunction;
|
|
92
194
|
|
|
93
195
|
}
|
|
94
196
|
|
|
197
|
+
/**
|
|
198
|
+
* Logs an informational message with the 'THREE.' prefix.
|
|
199
|
+
*
|
|
200
|
+
* If a custom console function is set via setConsoleFunction(), it will be used
|
|
201
|
+
* instead of the native console.log. The first parameter is treated as the
|
|
202
|
+
* method name and is automatically prefixed with 'THREE.'.
|
|
203
|
+
*
|
|
204
|
+
* @param {...any} params - The message components. The first param is used as
|
|
205
|
+
* the method name and prefixed with 'THREE.'.
|
|
206
|
+
*/
|
|
95
207
|
function log( ...params ) {
|
|
96
208
|
|
|
97
209
|
const message = 'THREE.' + params.shift();
|
|
@@ -108,8 +220,50 @@ function log( ...params ) {
|
|
|
108
220
|
|
|
109
221
|
}
|
|
110
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Enhances log/warn/error messages related to TSL.
|
|
225
|
+
*
|
|
226
|
+
* @param {Array<any>} params - The original message parameters.
|
|
227
|
+
* @returns {Array<any>} The filtered and enhanced message parameters.
|
|
228
|
+
*/
|
|
229
|
+
function enhanceLogMessage( params ) {
|
|
230
|
+
|
|
231
|
+
const message = params[ 0 ];
|
|
232
|
+
|
|
233
|
+
if ( typeof message === 'string' && message.startsWith( 'TSL:' ) ) {
|
|
234
|
+
|
|
235
|
+
const stackTrace = params[ 1 ];
|
|
236
|
+
|
|
237
|
+
if ( stackTrace && stackTrace.isStackTrace ) {
|
|
238
|
+
|
|
239
|
+
params[ 0 ] += ' ' + stackTrace.getLocation();
|
|
240
|
+
|
|
241
|
+
} else {
|
|
242
|
+
|
|
243
|
+
params[ 1 ] = 'Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.';
|
|
244
|
+
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return params;
|
|
250
|
+
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Logs a warning message with the 'THREE.' prefix.
|
|
255
|
+
*
|
|
256
|
+
* If a custom console function is set via setConsoleFunction(), it will be used
|
|
257
|
+
* instead of the native console.warn. The first parameter is treated as the
|
|
258
|
+
* method name and is automatically prefixed with 'THREE.'.
|
|
259
|
+
*
|
|
260
|
+
* @param {...any} params - The message components. The first param is used as
|
|
261
|
+
* the method name and prefixed with 'THREE.'.
|
|
262
|
+
*/
|
|
111
263
|
function warn( ...params ) {
|
|
112
264
|
|
|
265
|
+
params = enhanceLogMessage( params );
|
|
266
|
+
|
|
113
267
|
const message = 'THREE.' + params.shift();
|
|
114
268
|
|
|
115
269
|
if ( _setConsoleFunction ) {
|
|
@@ -118,14 +272,36 @@ function warn( ...params ) {
|
|
|
118
272
|
|
|
119
273
|
} else {
|
|
120
274
|
|
|
121
|
-
|
|
275
|
+
const stackTrace = params[ 0 ];
|
|
276
|
+
|
|
277
|
+
if ( stackTrace && stackTrace.isStackTrace ) {
|
|
278
|
+
|
|
279
|
+
console.warn( stackTrace.getError( message ) );
|
|
280
|
+
|
|
281
|
+
} else {
|
|
282
|
+
|
|
283
|
+
console.warn( message, ...params );
|
|
284
|
+
|
|
285
|
+
}
|
|
122
286
|
|
|
123
287
|
}
|
|
124
288
|
|
|
125
289
|
}
|
|
126
290
|
|
|
291
|
+
/**
|
|
292
|
+
* Logs an error message with the 'THREE.' prefix.
|
|
293
|
+
*
|
|
294
|
+
* If a custom console function is set via setConsoleFunction(), it will be used
|
|
295
|
+
* instead of the native console.error. The first parameter is treated as the
|
|
296
|
+
* method name and is automatically prefixed with 'THREE.'.
|
|
297
|
+
*
|
|
298
|
+
* @param {...any} params - The message components. The first param is used as
|
|
299
|
+
* the method name and prefixed with 'THREE.'.
|
|
300
|
+
*/
|
|
127
301
|
function error( ...params ) {
|
|
128
302
|
|
|
303
|
+
params = enhanceLogMessage( params );
|
|
304
|
+
|
|
129
305
|
const message = 'THREE.' + params.shift();
|
|
130
306
|
|
|
131
307
|
if ( _setConsoleFunction ) {
|
|
@@ -134,12 +310,31 @@ function error( ...params ) {
|
|
|
134
310
|
|
|
135
311
|
} else {
|
|
136
312
|
|
|
137
|
-
|
|
313
|
+
const stackTrace = params[ 0 ];
|
|
314
|
+
|
|
315
|
+
if ( stackTrace && stackTrace.isStackTrace ) {
|
|
316
|
+
|
|
317
|
+
console.error( stackTrace.getError( message ) );
|
|
318
|
+
|
|
319
|
+
} else {
|
|
320
|
+
|
|
321
|
+
console.error( message, ...params );
|
|
322
|
+
|
|
323
|
+
}
|
|
138
324
|
|
|
139
325
|
}
|
|
140
326
|
|
|
141
327
|
}
|
|
142
328
|
|
|
329
|
+
/**
|
|
330
|
+
* Logs a warning message only once, preventing duplicate warnings.
|
|
331
|
+
*
|
|
332
|
+
* This function maintains an internal cache of warning messages and will only
|
|
333
|
+
* output each unique warning message once. Useful for warnings that may be
|
|
334
|
+
* triggered repeatedly but should only be shown to the user once.
|
|
335
|
+
*
|
|
336
|
+
* @param {...any} params - The warning message components.
|
|
337
|
+
*/
|
|
143
338
|
function warnOnce( ...params ) {
|
|
144
339
|
|
|
145
340
|
const message = params.join( ' ' );
|
|
@@ -152,6 +347,42 @@ function warnOnce( ...params ) {
|
|
|
152
347
|
|
|
153
348
|
}
|
|
154
349
|
|
|
350
|
+
/**
|
|
351
|
+
* Yields execution to the main thread to allow rendering and other tasks.
|
|
352
|
+
* Uses scheduler.yield() when available (Chrome 115+), falls back to requestAnimationFrame.
|
|
353
|
+
*
|
|
354
|
+
* @return {Promise<void>}
|
|
355
|
+
*/
|
|
356
|
+
function yieldToMain() {
|
|
357
|
+
|
|
358
|
+
if ( typeof self !== 'undefined' && typeof self.scheduler !== 'undefined' && typeof self.scheduler.yield !== 'undefined' ) {
|
|
359
|
+
|
|
360
|
+
return self.scheduler.yield();
|
|
361
|
+
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
return new Promise( resolve => {
|
|
365
|
+
|
|
366
|
+
requestAnimationFrame( resolve );
|
|
367
|
+
|
|
368
|
+
} );
|
|
369
|
+
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Asynchronously probes for WebGL sync object completion.
|
|
374
|
+
*
|
|
375
|
+
* This function creates a promise that resolves when the WebGL sync object
|
|
376
|
+
* signals completion or rejects if the sync operation fails. It uses polling
|
|
377
|
+
* at the specified interval to check the sync status without blocking the
|
|
378
|
+
* main thread. This is useful for GPU-CPU synchronization in WebGL contexts.
|
|
379
|
+
*
|
|
380
|
+
* @private
|
|
381
|
+
* @param {WebGL2RenderingContext} gl - The WebGL rendering context.
|
|
382
|
+
* @param {WebGLSync} sync - The WebGL sync object to wait for.
|
|
383
|
+
* @param {number} interval - The polling interval in milliseconds.
|
|
384
|
+
* @return {Promise<void>} A promise that resolves when the sync completes or rejects if it fails.
|
|
385
|
+
*/
|
|
155
386
|
function probeAsync( gl, sync, interval ) {
|
|
156
387
|
|
|
157
388
|
return new Promise( function ( resolve, reject ) {
|
|
@@ -181,6 +412,18 @@ function probeAsync( gl, sync, interval ) {
|
|
|
181
412
|
|
|
182
413
|
}
|
|
183
414
|
|
|
415
|
+
/**
|
|
416
|
+
* Converts a projection matrix from normalized device coordinates (NDC)
|
|
417
|
+
* range [-1, 1] to [0, 1].
|
|
418
|
+
*
|
|
419
|
+
* This conversion is commonly needed when working with depth textures or
|
|
420
|
+
* render targets that expect depth values in the [0, 1] range rather than
|
|
421
|
+
* the standard OpenGL NDC range of [-1, 1]. The function modifies the
|
|
422
|
+
* projection matrix in place.
|
|
423
|
+
*
|
|
424
|
+
* @private
|
|
425
|
+
* @param {Matrix4} projectionMatrix - The projection matrix to convert (modified in place).
|
|
426
|
+
*/
|
|
184
427
|
function toNormalizedProjectionMatrix( projectionMatrix ) {
|
|
185
428
|
|
|
186
429
|
const m = projectionMatrix.elements;
|
|
@@ -193,6 +436,21 @@ function toNormalizedProjectionMatrix( projectionMatrix ) {
|
|
|
193
436
|
|
|
194
437
|
}
|
|
195
438
|
|
|
439
|
+
/**
|
|
440
|
+
* Reverses the depth range of a projection matrix.
|
|
441
|
+
*
|
|
442
|
+
* This function inverts the depth mapping of a projection matrix, which is
|
|
443
|
+
* useful for reversed-Z depth buffer techniques that can improve depth
|
|
444
|
+
* precision. The function handles both perspective and orthographic projection
|
|
445
|
+
* matrices differently and modifies the matrix in place.
|
|
446
|
+
*
|
|
447
|
+
* For perspective matrices (where m[11] === -1), the depth mapping is
|
|
448
|
+
* reversed with an offset. For orthographic matrices, a simpler reversal
|
|
449
|
+
* is applied.
|
|
450
|
+
*
|
|
451
|
+
* @private
|
|
452
|
+
* @param {Matrix4} projectionMatrix - The projection matrix to reverse (modified in place).
|
|
453
|
+
*/
|
|
196
454
|
function toReversedProjectionMatrix( projectionMatrix ) {
|
|
197
455
|
|
|
198
456
|
const m = projectionMatrix.elements;
|
|
@@ -213,4 +471,23 @@ function toReversedProjectionMatrix( projectionMatrix ) {
|
|
|
213
471
|
|
|
214
472
|
}
|
|
215
473
|
|
|
216
|
-
|
|
474
|
+
/**
|
|
475
|
+
* Used to select the correct depth functions
|
|
476
|
+
* when reversed depth buffer is used.
|
|
477
|
+
*
|
|
478
|
+
* @private
|
|
479
|
+
* @type {Object}
|
|
480
|
+
*/
|
|
481
|
+
const ReversedDepthFuncs = {
|
|
482
|
+
[ NeverDepth ]: AlwaysDepth,
|
|
483
|
+
[ LessDepth ]: GreaterDepth,
|
|
484
|
+
[ EqualDepth ]: NotEqualDepth,
|
|
485
|
+
[ LessEqualDepth ]: GreaterEqualDepth,
|
|
486
|
+
|
|
487
|
+
[ AlwaysDepth ]: NeverDepth,
|
|
488
|
+
[ GreaterDepth ]: LessDepth,
|
|
489
|
+
[ NotEqualDepth ]: EqualDepth,
|
|
490
|
+
[ GreaterEqualDepth ]: LessEqualDepth,
|
|
491
|
+
};
|
|
492
|
+
|
|
493
|
+
export { arrayMin, arrayMax, arrayNeedsUint32, getTypedArray, createElementNS, createCanvasElement, setConsoleFunction, getConsoleFunction, log, warn, error, warnOnce, probeAsync, yieldToMain, toNormalizedProjectionMatrix, toReversedProjectionMatrix, isTypedArray, ReversedDepthFuncs };
|