@plastic-software/three 0.181.3 → 0.183.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 +11330 -10017
- package/build/three.core.js +10011 -9493
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1414 -631
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +21 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +8007 -5427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +8005 -5426
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -3
- package/examples/jsm/animation/CCDIKSolver.js +2 -2
- package/examples/jsm/controls/ArcballControls.js +3 -3
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +109 -6
- package/examples/jsm/controls/TrackballControls.js +6 -6
- package/examples/jsm/csm/CSM.js +2 -1
- 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 +131 -4
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -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/Inspector.js +74 -14
- package/examples/jsm/inspector/RendererInspector.js +12 -2
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Parameters.js +18 -2
- package/examples/jsm/inspector/tabs/Performance.js +2 -2
- package/examples/jsm/inspector/tabs/Viewer.js +4 -4
- package/examples/jsm/inspector/ui/Profiler.js +1836 -31
- package/examples/jsm/inspector/ui/Style.js +973 -14
- package/examples/jsm/inspector/ui/Tab.js +188 -1
- package/examples/jsm/inspector/ui/Values.js +17 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- 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 +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -4
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/HDRLoader.js +0 -1
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +19 -3
- package/examples/jsm/loaders/LDrawLoader.js +2 -3
- 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 +1 -1
- 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 +37 -24
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/usd/USDAParser.js +447 -366
- package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -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/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +127 -10
- 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 +268 -30
- package/examples/jsm/renderers/SVGRenderer.js +193 -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 +61 -4
- 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/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- 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/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +5 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
- package/examples/jsm/tsl/display/GodraysNode.js +624 -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 +3 -3
- 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 -20
- 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/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/TRAANode.js +273 -125
- 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/math/Bayer.js +40 -1
- 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/WebGPUTextureUtils.js +1 -1
- package/package.json +20 -26
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +19 -11
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +1 -1
- 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/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/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- 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/Cache.js +28 -0
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/ImageBitmapLoader.js +8 -3
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +2 -1
- package/src/loaders/ObjectLoader.js +21 -2
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +7 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +72 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +74 -65
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Vector3.js +3 -5
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +6 -6
- 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 +98 -12
- 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 +20 -1
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- 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/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
- package/src/nodes/accessors/ReferenceNode.js +4 -4
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +4 -21
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +4 -2
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionNode.js +1 -2
- package/src/nodes/core/ArrayNode.js +20 -1
- package/src/nodes/core/AssignNode.js +2 -2
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +103 -4
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +170 -53
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +10 -8
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +3 -3
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +65 -16
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +16 -2
- package/src/nodes/core/StructTypeNode.js +11 -17
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +47 -22
- package/src/nodes/core/VaryingNode.js +1 -18
- 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 +98 -9
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +3 -1
- 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/ViewportTextureNode.js +21 -4
- 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 +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
- 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 +2 -2
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +97 -41
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +2 -2
- package/src/nodes/math/MathNode.js +3 -40
- package/src/nodes/math/OperatorNode.js +2 -1
- 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/TSLCore.js +17 -14
- package/src/nodes/utils/ArrayElementNode.js +13 -0
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/EventNode.js +1 -2
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- 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/SampleNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +27 -14
- package/src/objects/InstancedMesh.js +11 -0
- 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/renderers/WebGLRenderer.js +178 -92
- package/src/renderers/common/Backend.js +29 -0
- package/src/renderers/common/Background.js +24 -11
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +27 -12
- 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/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +4 -4
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/RenderBundles.js +2 -1
- 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 +15 -3
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +18 -2
- package/src/renderers/common/RenderPipeline.js +203 -17
- package/src/renderers/common/Renderer.js +257 -72
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +17 -1
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +61 -0
- package/src/renderers/common/XRManager.js +3 -2
- package/src/renderers/common/extras/PMREMGenerator.js +2 -8
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
- 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_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -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_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- 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 +3 -3
- 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 -5
- package/src/renderers/shaders/UniformsLib.js +0 -3
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLCapabilities.js +3 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +45 -109
- package/src/renderers/webgl/WebGLPrograms.js +45 -49
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +32 -37
- package/src/renderers/webgl/WebGLTextures.js +89 -28
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
- package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +119 -13
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -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 +65 -42
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +3 -3
- package/src/utils.js +258 -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/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { warnOnce } from '../../../utils.js';
|
|
1
|
+
import { error, warnOnce } from '../../../utils.js';
|
|
2
2
|
import TimestampQueryPool from '../../common/TimestampQueryPool.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -217,9 +217,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
217
217
|
|
|
218
218
|
return totalDuration;
|
|
219
219
|
|
|
220
|
-
} catch (
|
|
220
|
+
} catch ( e ) {
|
|
221
221
|
|
|
222
|
-
error( 'Error resolving queries:',
|
|
222
|
+
error( 'Error resolving queries:', e );
|
|
223
223
|
if ( this.resultBuffer.mapState === 'mapped' ) {
|
|
224
224
|
|
|
225
225
|
this.resultBuffer.unmap();
|
|
@@ -255,9 +255,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
255
255
|
|
|
256
256
|
await this.pendingResolve;
|
|
257
257
|
|
|
258
|
-
} catch (
|
|
258
|
+
} catch ( e ) {
|
|
259
259
|
|
|
260
|
-
error( 'Error waiting for pending resolve:',
|
|
260
|
+
error( 'Error waiting for pending resolve:', e );
|
|
261
261
|
|
|
262
262
|
}
|
|
263
263
|
|
|
@@ -270,9 +270,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
270
270
|
|
|
271
271
|
this.resultBuffer.unmap();
|
|
272
272
|
|
|
273
|
-
} catch (
|
|
273
|
+
} catch ( e ) {
|
|
274
274
|
|
|
275
|
-
error( 'Error unmapping buffer:',
|
|
275
|
+
error( 'Error unmapping buffer:', e );
|
|
276
276
|
|
|
277
277
|
}
|
|
278
278
|
|
|
@@ -34,17 +34,21 @@ class WebGPUUtils {
|
|
|
34
34
|
|
|
35
35
|
let format;
|
|
36
36
|
|
|
37
|
-
if ( renderContext.
|
|
37
|
+
if ( renderContext.depth ) {
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
if ( renderContext.depthTexture !== null ) {
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
format = this.getTextureFormatGPU( renderContext.depthTexture );
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
} else if ( renderContext.stencil ) {
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
format = GPUTextureFormat.Depth24PlusStencil8;
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
} else {
|
|
48
|
+
|
|
49
|
+
format = GPUTextureFormat.Depth24Plus;
|
|
50
|
+
|
|
51
|
+
}
|
|
48
52
|
|
|
49
53
|
}
|
|
50
54
|
|
|
@@ -220,23 +224,25 @@ class WebGPUUtils {
|
|
|
220
224
|
*/
|
|
221
225
|
getPreferredCanvasFormat() {
|
|
222
226
|
|
|
223
|
-
const
|
|
227
|
+
const parameters = this.backend.parameters;
|
|
228
|
+
|
|
229
|
+
const bufferType = parameters.outputType;
|
|
224
230
|
|
|
225
|
-
if (
|
|
231
|
+
if ( bufferType === undefined ) {
|
|
226
232
|
|
|
227
233
|
return navigator.gpu.getPreferredCanvasFormat();
|
|
228
234
|
|
|
229
|
-
} else if (
|
|
235
|
+
} else if ( bufferType === UnsignedByteType ) {
|
|
230
236
|
|
|
231
237
|
return GPUTextureFormat.BGRA8Unorm;
|
|
232
238
|
|
|
233
|
-
} else if (
|
|
239
|
+
} else if ( bufferType === HalfFloatType ) {
|
|
234
240
|
|
|
235
241
|
return GPUTextureFormat.RGBA16Float;
|
|
236
242
|
|
|
237
243
|
} else {
|
|
238
244
|
|
|
239
|
-
throw new Error( 'Unsupported
|
|
245
|
+
throw new Error( 'Unsupported output buffer type.' );
|
|
240
246
|
|
|
241
247
|
}
|
|
242
248
|
|
|
@@ -749,8 +749,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
749
749
|
|
|
750
750
|
// inherit camera layers and enable eye layers (1 = left, 2 = right)
|
|
751
751
|
cameraXR.layers.mask = camera.layers.mask | 0b110;
|
|
752
|
-
cameraL.layers.mask = cameraXR.layers.mask &
|
|
753
|
-
cameraR.layers.mask = cameraXR.layers.mask &
|
|
752
|
+
cameraL.layers.mask = cameraXR.layers.mask & ~ 0b100;
|
|
753
|
+
cameraR.layers.mask = cameraXR.layers.mask & ~ 0b010;
|
|
754
754
|
|
|
755
755
|
const parent = camera.parent;
|
|
756
756
|
const cameras = cameraXR.cameras;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { DepthTexture } from './DepthTexture.js';
|
|
2
|
+
import { CubeReflectionMapping, NearestFilter, UnsignedIntType, DepthFormat } from '../constants.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This class can be used to automatically save the depth information of a
|
|
6
|
+
* cube rendering into a cube texture with depth format. Used for PointLight shadows.
|
|
7
|
+
*
|
|
8
|
+
* @augments DepthTexture
|
|
9
|
+
*/
|
|
10
|
+
class CubeDepthTexture extends DepthTexture {
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new cube depth texture.
|
|
14
|
+
*
|
|
15
|
+
* @param {number} size - The size (width and height) of each cube face.
|
|
16
|
+
* @param {number} [type=UnsignedIntType] - The texture type.
|
|
17
|
+
* @param {number} [mapping=CubeReflectionMapping] - The texture mapping.
|
|
18
|
+
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
19
|
+
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
20
|
+
* @param {number} [magFilter=NearestFilter] - The mag filter value.
|
|
21
|
+
* @param {number} [minFilter=NearestFilter] - The min filter value.
|
|
22
|
+
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
23
|
+
* @param {number} [format=DepthFormat] - The texture format.
|
|
24
|
+
*/
|
|
25
|
+
constructor( size, type = UnsignedIntType, mapping = CubeReflectionMapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat ) {
|
|
26
|
+
|
|
27
|
+
// Create 6 identical image descriptors for the cube faces
|
|
28
|
+
const image = { width: size, height: size, depth: 1 };
|
|
29
|
+
const images = [ image, image, image, image, image, image ];
|
|
30
|
+
|
|
31
|
+
// Call DepthTexture constructor with width, height
|
|
32
|
+
super( size, size, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format );
|
|
33
|
+
|
|
34
|
+
// Replace the single image with the array of 6 images
|
|
35
|
+
this.image = images;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* This flag can be used for type testing.
|
|
39
|
+
*
|
|
40
|
+
* @type {boolean}
|
|
41
|
+
* @readonly
|
|
42
|
+
* @default true
|
|
43
|
+
*/
|
|
44
|
+
this.isCubeDepthTexture = true;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Set to true for cube texture handling in WebGLTextures.
|
|
48
|
+
*
|
|
49
|
+
* @type {boolean}
|
|
50
|
+
* @readonly
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
53
|
+
this.isCubeTexture = true;
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Alias for {@link CubeDepthTexture#image}.
|
|
59
|
+
*
|
|
60
|
+
* @type {Array<Image>}
|
|
61
|
+
*/
|
|
62
|
+
get images() {
|
|
63
|
+
|
|
64
|
+
return this.image;
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
set images( value ) {
|
|
69
|
+
|
|
70
|
+
this.image = value;
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export { CubeDepthTexture };
|
package/src/textures/Source.js
CHANGED
|
@@ -88,7 +88,7 @@ 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
93
|
target.set( data.displayHeight, data.displayWidth, 0 );
|
|
94
94
|
|
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
|
|
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,20 @@ function warnOnce( ...params ) {
|
|
|
152
347
|
|
|
153
348
|
}
|
|
154
349
|
|
|
350
|
+
/**
|
|
351
|
+
* Asynchronously probes for WebGL sync object completion.
|
|
352
|
+
*
|
|
353
|
+
* This function creates a promise that resolves when the WebGL sync object
|
|
354
|
+
* signals completion or rejects if the sync operation fails. It uses polling
|
|
355
|
+
* at the specified interval to check the sync status without blocking the
|
|
356
|
+
* main thread. This is useful for GPU-CPU synchronization in WebGL contexts.
|
|
357
|
+
*
|
|
358
|
+
* @private
|
|
359
|
+
* @param {WebGL2RenderingContext} gl - The WebGL rendering context.
|
|
360
|
+
* @param {WebGLSync} sync - The WebGL sync object to wait for.
|
|
361
|
+
* @param {number} interval - The polling interval in milliseconds.
|
|
362
|
+
* @return {Promise<void>} A promise that resolves when the sync completes or rejects if it fails.
|
|
363
|
+
*/
|
|
155
364
|
function probeAsync( gl, sync, interval ) {
|
|
156
365
|
|
|
157
366
|
return new Promise( function ( resolve, reject ) {
|
|
@@ -181,6 +390,18 @@ function probeAsync( gl, sync, interval ) {
|
|
|
181
390
|
|
|
182
391
|
}
|
|
183
392
|
|
|
393
|
+
/**
|
|
394
|
+
* Converts a projection matrix from normalized device coordinates (NDC)
|
|
395
|
+
* range [-1, 1] to [0, 1].
|
|
396
|
+
*
|
|
397
|
+
* This conversion is commonly needed when working with depth textures or
|
|
398
|
+
* render targets that expect depth values in the [0, 1] range rather than
|
|
399
|
+
* the standard OpenGL NDC range of [-1, 1]. The function modifies the
|
|
400
|
+
* projection matrix in place.
|
|
401
|
+
*
|
|
402
|
+
* @private
|
|
403
|
+
* @param {Matrix4} projectionMatrix - The projection matrix to convert (modified in place).
|
|
404
|
+
*/
|
|
184
405
|
function toNormalizedProjectionMatrix( projectionMatrix ) {
|
|
185
406
|
|
|
186
407
|
const m = projectionMatrix.elements;
|
|
@@ -193,6 +414,21 @@ function toNormalizedProjectionMatrix( projectionMatrix ) {
|
|
|
193
414
|
|
|
194
415
|
}
|
|
195
416
|
|
|
417
|
+
/**
|
|
418
|
+
* Reverses the depth range of a projection matrix.
|
|
419
|
+
*
|
|
420
|
+
* This function inverts the depth mapping of a projection matrix, which is
|
|
421
|
+
* useful for reversed-Z depth buffer techniques that can improve depth
|
|
422
|
+
* precision. The function handles both perspective and orthographic projection
|
|
423
|
+
* matrices differently and modifies the matrix in place.
|
|
424
|
+
*
|
|
425
|
+
* For perspective matrices (where m[11] === -1), the depth mapping is
|
|
426
|
+
* reversed with an offset. For orthographic matrices, a simpler reversal
|
|
427
|
+
* is applied.
|
|
428
|
+
*
|
|
429
|
+
* @private
|
|
430
|
+
* @param {Matrix4} projectionMatrix - The projection matrix to reverse (modified in place).
|
|
431
|
+
*/
|
|
196
432
|
function toReversedProjectionMatrix( projectionMatrix ) {
|
|
197
433
|
|
|
198
434
|
const m = projectionMatrix.elements;
|
|
@@ -213,4 +449,23 @@ function toReversedProjectionMatrix( projectionMatrix ) {
|
|
|
213
449
|
|
|
214
450
|
}
|
|
215
451
|
|
|
216
|
-
|
|
452
|
+
/**
|
|
453
|
+
* Used to select the correct depth functions
|
|
454
|
+
* when reversed depth buffer is used.
|
|
455
|
+
*
|
|
456
|
+
* @private
|
|
457
|
+
* @type {Object}
|
|
458
|
+
*/
|
|
459
|
+
const ReversedDepthFuncs = {
|
|
460
|
+
[ NeverDepth ]: AlwaysDepth,
|
|
461
|
+
[ LessDepth ]: GreaterDepth,
|
|
462
|
+
[ EqualDepth ]: NotEqualDepth,
|
|
463
|
+
[ LessEqualDepth ]: GreaterEqualDepth,
|
|
464
|
+
|
|
465
|
+
[ AlwaysDepth ]: NeverDepth,
|
|
466
|
+
[ GreaterDepth ]: LessDepth,
|
|
467
|
+
[ NotEqualDepth ]: EqualDepth,
|
|
468
|
+
[ GreaterEqualDepth ]: LessEqualDepth,
|
|
469
|
+
};
|
|
470
|
+
|
|
471
|
+
export { arrayMin, arrayMax, arrayNeedsUint32, getTypedArray, createElementNS, createCanvasElement, setConsoleFunction, getConsoleFunction, log, warn, error, warnOnce, probeAsync, toNormalizedProjectionMatrix, toReversedProjectionMatrix, isTypedArray, ReversedDepthFuncs };
|