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
package/src/math/Matrix3.js
CHANGED
|
@@ -28,6 +28,19 @@
|
|
|
28
28
|
*/
|
|
29
29
|
class Matrix3 {
|
|
30
30
|
|
|
31
|
+
static {
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* This flag can be used for type testing.
|
|
35
|
+
*
|
|
36
|
+
* @type {boolean}
|
|
37
|
+
* @readonly
|
|
38
|
+
* @default true
|
|
39
|
+
*/
|
|
40
|
+
Matrix3.prototype.isMatrix3 = true;
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
31
44
|
/**
|
|
32
45
|
* Constructs a new 3x3 matrix. The arguments are supposed to be
|
|
33
46
|
* in row-major order. If no arguments are provided, the constructor
|
|
@@ -45,15 +58,6 @@ class Matrix3 {
|
|
|
45
58
|
*/
|
|
46
59
|
constructor( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {
|
|
47
60
|
|
|
48
|
-
/**
|
|
49
|
-
* This flag can be used for type testing.
|
|
50
|
-
*
|
|
51
|
-
* @type {boolean}
|
|
52
|
-
* @readonly
|
|
53
|
-
* @default true
|
|
54
|
-
*/
|
|
55
|
-
Matrix3.prototype.isMatrix3 = true;
|
|
56
|
-
|
|
57
61
|
/**
|
|
58
62
|
* A column-major list of matrix values.
|
|
59
63
|
*
|
package/src/math/Matrix4.js
CHANGED
|
@@ -41,6 +41,19 @@ import { Vector3 } from './Vector3.js';
|
|
|
41
41
|
*/
|
|
42
42
|
class Matrix4 {
|
|
43
43
|
|
|
44
|
+
static {
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* This flag can be used for type testing.
|
|
48
|
+
*
|
|
49
|
+
* @type {boolean}
|
|
50
|
+
* @readonly
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
53
|
+
Matrix4.prototype.isMatrix4 = true;
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
44
57
|
/**
|
|
45
58
|
* Constructs a new 4x4 matrix. The arguments are supposed to be
|
|
46
59
|
* in row-major order. If no arguments are provided, the constructor
|
|
@@ -65,15 +78,6 @@ class Matrix4 {
|
|
|
65
78
|
*/
|
|
66
79
|
constructor( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {
|
|
67
80
|
|
|
68
|
-
/**
|
|
69
|
-
* This flag can be used for type testing.
|
|
70
|
-
*
|
|
71
|
-
* @type {boolean}
|
|
72
|
-
* @readonly
|
|
73
|
-
* @default true
|
|
74
|
-
*/
|
|
75
|
-
Matrix4.prototype.isMatrix4 = true;
|
|
76
|
-
|
|
77
81
|
/**
|
|
78
82
|
* A column-major list of matrix values.
|
|
79
83
|
*
|
|
@@ -234,6 +238,16 @@ class Matrix4 {
|
|
|
234
238
|
*/
|
|
235
239
|
extractBasis( xAxis, yAxis, zAxis ) {
|
|
236
240
|
|
|
241
|
+
if ( this.determinant() === 0 ) {
|
|
242
|
+
|
|
243
|
+
xAxis.set( 1, 0, 0 );
|
|
244
|
+
yAxis.set( 0, 1, 0 );
|
|
245
|
+
zAxis.set( 0, 0, 1 );
|
|
246
|
+
|
|
247
|
+
return this;
|
|
248
|
+
|
|
249
|
+
}
|
|
250
|
+
|
|
237
251
|
xAxis.setFromMatrixColumn( this, 0 );
|
|
238
252
|
yAxis.setFromMatrixColumn( this, 1 );
|
|
239
253
|
zAxis.setFromMatrixColumn( this, 2 );
|
|
@@ -274,6 +288,12 @@ class Matrix4 {
|
|
|
274
288
|
*/
|
|
275
289
|
extractRotation( m ) {
|
|
276
290
|
|
|
291
|
+
if ( m.determinant() === 0 ) {
|
|
292
|
+
|
|
293
|
+
return this.identity();
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
277
297
|
const te = this.elements;
|
|
278
298
|
const me = m.elements;
|
|
279
299
|
|
|
@@ -614,43 +634,18 @@ class Matrix4 {
|
|
|
614
634
|
const n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];
|
|
615
635
|
const n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];
|
|
616
636
|
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
n41 * (
|
|
621
|
-
+ n14 * n23 * n32
|
|
622
|
-
- n13 * n24 * n32
|
|
623
|
-
- n14 * n22 * n33
|
|
624
|
-
+ n12 * n24 * n33
|
|
625
|
-
+ n13 * n22 * n34
|
|
626
|
-
- n12 * n23 * n34
|
|
627
|
-
) +
|
|
628
|
-
n42 * (
|
|
629
|
-
+ n11 * n23 * n34
|
|
630
|
-
- n11 * n24 * n33
|
|
631
|
-
+ n14 * n21 * n33
|
|
632
|
-
- n13 * n21 * n34
|
|
633
|
-
+ n13 * n24 * n31
|
|
634
|
-
- n14 * n23 * n31
|
|
635
|
-
) +
|
|
636
|
-
n43 * (
|
|
637
|
-
+ n11 * n24 * n32
|
|
638
|
-
- n11 * n22 * n34
|
|
639
|
-
- n14 * n21 * n32
|
|
640
|
-
+ n12 * n21 * n34
|
|
641
|
-
+ n14 * n22 * n31
|
|
642
|
-
- n12 * n24 * n31
|
|
643
|
-
) +
|
|
644
|
-
n44 * (
|
|
645
|
-
- n13 * n22 * n31
|
|
646
|
-
- n11 * n23 * n32
|
|
647
|
-
+ n11 * n22 * n33
|
|
648
|
-
+ n13 * n21 * n32
|
|
649
|
-
- n12 * n21 * n33
|
|
650
|
-
+ n12 * n23 * n31
|
|
651
|
-
)
|
|
637
|
+
const t11 = n23 * n34 - n24 * n33;
|
|
638
|
+
const t12 = n22 * n34 - n24 * n32;
|
|
639
|
+
const t13 = n22 * n33 - n23 * n32;
|
|
652
640
|
|
|
653
|
-
|
|
641
|
+
const t21 = n21 * n34 - n24 * n31;
|
|
642
|
+
const t22 = n21 * n33 - n23 * n31;
|
|
643
|
+
const t23 = n21 * n32 - n22 * n31;
|
|
644
|
+
|
|
645
|
+
return n11 * ( n42 * t11 - n43 * t12 + n44 * t13 ) -
|
|
646
|
+
n12 * ( n41 * t11 - n43 * t21 + n44 * t22 ) +
|
|
647
|
+
n13 * ( n41 * t12 - n42 * t21 + n44 * t23 ) -
|
|
648
|
+
n14 * ( n41 * t13 - n42 * t22 + n43 * t23 );
|
|
654
649
|
|
|
655
650
|
}
|
|
656
651
|
|
|
@@ -716,7 +711,7 @@ class Matrix4 {
|
|
|
716
711
|
*/
|
|
717
712
|
invert() {
|
|
718
713
|
|
|
719
|
-
// based on
|
|
714
|
+
// based on https://github.com/toji/gl-matrix
|
|
720
715
|
const te = this.elements,
|
|
721
716
|
|
|
722
717
|
n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],
|
|
@@ -724,36 +719,44 @@ class Matrix4 {
|
|
|
724
719
|
n13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],
|
|
725
720
|
n14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],
|
|
726
721
|
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
722
|
+
t1 = n11 * n22 - n21 * n12,
|
|
723
|
+
t2 = n11 * n32 - n31 * n12,
|
|
724
|
+
t3 = n11 * n42 - n41 * n12,
|
|
725
|
+
t4 = n21 * n32 - n31 * n22,
|
|
726
|
+
t5 = n21 * n42 - n41 * n22,
|
|
727
|
+
t6 = n31 * n42 - n41 * n32,
|
|
728
|
+
t7 = n13 * n24 - n23 * n14,
|
|
729
|
+
t8 = n13 * n34 - n33 * n14,
|
|
730
|
+
t9 = n13 * n44 - n43 * n14,
|
|
731
|
+
t10 = n23 * n34 - n33 * n24,
|
|
732
|
+
t11 = n23 * n44 - n43 * n24,
|
|
733
|
+
t12 = n33 * n44 - n43 * n34;
|
|
734
|
+
|
|
735
|
+
const det = t1 * t12 - t2 * t11 + t3 * t10 + t4 * t9 - t5 * t8 + t6 * t7;
|
|
733
736
|
|
|
734
737
|
if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
|
|
735
738
|
|
|
736
739
|
const detInv = 1 / det;
|
|
737
740
|
|
|
738
|
-
te[ 0 ] = t11 * detInv;
|
|
739
|
-
te[ 1 ] = (
|
|
740
|
-
te[ 2 ] = (
|
|
741
|
-
te[ 3 ] = (
|
|
741
|
+
te[ 0 ] = ( n22 * t12 - n32 * t11 + n42 * t10 ) * detInv;
|
|
742
|
+
te[ 1 ] = ( n31 * t11 - n21 * t12 - n41 * t10 ) * detInv;
|
|
743
|
+
te[ 2 ] = ( n24 * t6 - n34 * t5 + n44 * t4 ) * detInv;
|
|
744
|
+
te[ 3 ] = ( n33 * t5 - n23 * t6 - n43 * t4 ) * detInv;
|
|
742
745
|
|
|
743
|
-
te[ 4 ] = t12 * detInv;
|
|
744
|
-
te[ 5 ] = (
|
|
745
|
-
te[ 6 ] = (
|
|
746
|
-
te[ 7 ] = (
|
|
746
|
+
te[ 4 ] = ( n32 * t9 - n12 * t12 - n42 * t8 ) * detInv;
|
|
747
|
+
te[ 5 ] = ( n11 * t12 - n31 * t9 + n41 * t8 ) * detInv;
|
|
748
|
+
te[ 6 ] = ( n34 * t3 - n14 * t6 - n44 * t2 ) * detInv;
|
|
749
|
+
te[ 7 ] = ( n13 * t6 - n33 * t3 + n43 * t2 ) * detInv;
|
|
747
750
|
|
|
748
|
-
te[ 8 ] =
|
|
749
|
-
te[ 9 ] = (
|
|
750
|
-
te[ 10 ] = (
|
|
751
|
-
te[ 11 ] = (
|
|
751
|
+
te[ 8 ] = ( n12 * t11 - n22 * t9 + n42 * t7 ) * detInv;
|
|
752
|
+
te[ 9 ] = ( n21 * t9 - n11 * t11 - n41 * t7 ) * detInv;
|
|
753
|
+
te[ 10 ] = ( n14 * t5 - n24 * t3 + n44 * t1 ) * detInv;
|
|
754
|
+
te[ 11 ] = ( n23 * t3 - n13 * t5 - n43 * t1 ) * detInv;
|
|
752
755
|
|
|
753
|
-
te[ 12 ] =
|
|
754
|
-
te[ 13 ] = (
|
|
755
|
-
te[ 14 ] = (
|
|
756
|
-
te[ 15 ] = (
|
|
756
|
+
te[ 12 ] = ( n22 * t8 - n12 * t10 - n32 * t7 ) * detInv;
|
|
757
|
+
te[ 13 ] = ( n11 * t10 - n21 * t8 + n31 * t7 ) * detInv;
|
|
758
|
+
te[ 14 ] = ( n24 * t2 - n14 * t4 - n34 * t1 ) * detInv;
|
|
759
|
+
te[ 15 ] = ( n13 * t4 - n23 * t2 + n33 * t1 ) * detInv;
|
|
757
760
|
|
|
758
761
|
return this;
|
|
759
762
|
|
|
@@ -1051,18 +1054,28 @@ class Matrix4 {
|
|
|
1051
1054
|
|
|
1052
1055
|
const te = this.elements;
|
|
1053
1056
|
|
|
1057
|
+
position.x = te[ 12 ];
|
|
1058
|
+
position.y = te[ 13 ];
|
|
1059
|
+
position.z = te[ 14 ];
|
|
1060
|
+
|
|
1061
|
+
const det = this.determinant();
|
|
1062
|
+
|
|
1063
|
+
if ( det === 0 ) {
|
|
1064
|
+
|
|
1065
|
+
scale.set( 1, 1, 1 );
|
|
1066
|
+
quaternion.identity();
|
|
1067
|
+
|
|
1068
|
+
return this;
|
|
1069
|
+
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1054
1072
|
let sx = _v1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();
|
|
1055
1073
|
const sy = _v1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();
|
|
1056
1074
|
const sz = _v1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();
|
|
1057
1075
|
|
|
1058
|
-
// if
|
|
1059
|
-
const det = this.determinant();
|
|
1076
|
+
// if determinant is negative, we need to invert one scale
|
|
1060
1077
|
if ( det < 0 ) sx = - sx;
|
|
1061
1078
|
|
|
1062
|
-
position.x = te[ 12 ];
|
|
1063
|
-
position.y = te[ 13 ];
|
|
1064
|
-
position.z = te[ 14 ];
|
|
1065
|
-
|
|
1066
1079
|
// scale the rotation part
|
|
1067
1080
|
_m1.copy( this );
|
|
1068
1081
|
|
package/src/math/Plane.js
CHANGED
|
@@ -210,9 +210,10 @@ class Plane {
|
|
|
210
210
|
*
|
|
211
211
|
* @param {Line3} line - The line to compute the intersection for.
|
|
212
212
|
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
213
|
-
* @
|
|
213
|
+
* @param {boolean} [clampToLine=true] - Whether to clamp the intersection to the line segment.
|
|
214
|
+
* @return {?Vector3} The intersection point. Returns `null` if no intersection is detected.
|
|
214
215
|
*/
|
|
215
|
-
intersectLine( line, target ) {
|
|
216
|
+
intersectLine( line, target, clampToLine = true ) {
|
|
216
217
|
|
|
217
218
|
const direction = line.delta( _vector1 );
|
|
218
219
|
|
|
@@ -234,7 +235,7 @@ class Plane {
|
|
|
234
235
|
|
|
235
236
|
const t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;
|
|
236
237
|
|
|
237
|
-
if ( t < 0 || t > 1 ) {
|
|
238
|
+
if ( ( clampToLine === true ) && ( t < 0 || t > 1 ) ) {
|
|
238
239
|
|
|
239
240
|
return null;
|
|
240
241
|
|
package/src/math/Quaternion.js
CHANGED
|
@@ -54,7 +54,7 @@ class Quaternion {
|
|
|
54
54
|
* @param {number} srcOffset0 - An offset into the first source array.
|
|
55
55
|
* @param {Array<number>} src1 - The source array of the second quaternion.
|
|
56
56
|
* @param {number} srcOffset1 - An offset into the second source array.
|
|
57
|
-
* @param {number} t - The interpolation factor in the range `[0,1]
|
|
57
|
+
* @param {number} t - The interpolation factor. A value in the range `[0,1]` will interpolate. A value outside the range `[0,1]` will extrapolate.
|
|
58
58
|
* @see {@link Quaternion#slerp}
|
|
59
59
|
*/
|
|
60
60
|
static slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {
|
|
@@ -69,28 +69,6 @@ class Quaternion {
|
|
|
69
69
|
z1 = src1[ srcOffset1 + 2 ],
|
|
70
70
|
w1 = src1[ srcOffset1 + 3 ];
|
|
71
71
|
|
|
72
|
-
if ( t <= 0 ) {
|
|
73
|
-
|
|
74
|
-
dst[ dstOffset + 0 ] = x0;
|
|
75
|
-
dst[ dstOffset + 1 ] = y0;
|
|
76
|
-
dst[ dstOffset + 2 ] = z0;
|
|
77
|
-
dst[ dstOffset + 3 ] = w0;
|
|
78
|
-
|
|
79
|
-
return;
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if ( t >= 1 ) {
|
|
84
|
-
|
|
85
|
-
dst[ dstOffset + 0 ] = x1;
|
|
86
|
-
dst[ dstOffset + 1 ] = y1;
|
|
87
|
-
dst[ dstOffset + 2 ] = z1;
|
|
88
|
-
dst[ dstOffset + 3 ] = w1;
|
|
89
|
-
|
|
90
|
-
return;
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
72
|
if ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {
|
|
95
73
|
|
|
96
74
|
let dot = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1;
|
|
@@ -732,18 +710,14 @@ class Quaternion {
|
|
|
732
710
|
}
|
|
733
711
|
|
|
734
712
|
/**
|
|
735
|
-
* Performs a spherical linear interpolation between
|
|
713
|
+
* Performs a spherical linear interpolation between this quaternion and the target quaternion.
|
|
736
714
|
*
|
|
737
715
|
* @param {Quaternion} qb - The target quaternion.
|
|
738
|
-
* @param {number} t - The interpolation factor in the
|
|
716
|
+
* @param {number} t - The interpolation factor. A value in the range `[0,1]` will interpolate. A value outside the range `[0,1]` will extrapolate.
|
|
739
717
|
* @return {Quaternion} A reference to this quaternion.
|
|
740
718
|
*/
|
|
741
719
|
slerp( qb, t ) {
|
|
742
720
|
|
|
743
|
-
if ( t <= 0 ) return this;
|
|
744
|
-
|
|
745
|
-
if ( t >= 1 ) return this.copy( qb ); // copy calls _onChangeCallback()
|
|
746
|
-
|
|
747
721
|
let x = qb._x, y = qb._y, z = qb._z, w = qb._w;
|
|
748
722
|
|
|
749
723
|
let dot = this.dot( qb );
|
package/src/math/Sphere.js
CHANGED
|
@@ -405,7 +405,7 @@ class Sphere {
|
|
|
405
405
|
* Returns a serialized structure of the bounding sphere.
|
|
406
406
|
*
|
|
407
407
|
* @param {Object} json - The serialized json to set the sphere from.
|
|
408
|
-
* @return {
|
|
408
|
+
* @return {Sphere} A reference to this bounding sphere.
|
|
409
409
|
*/
|
|
410
410
|
fromJSON( json ) {
|
|
411
411
|
|
package/src/math/Triangle.js
CHANGED
package/src/math/Vector2.js
CHANGED
|
@@ -27,13 +27,7 @@ import { clamp } from './MathUtils.js';
|
|
|
27
27
|
*/
|
|
28
28
|
class Vector2 {
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
* Constructs a new 2D vector.
|
|
32
|
-
*
|
|
33
|
-
* @param {number} [x=0] - The x value of this vector.
|
|
34
|
-
* @param {number} [y=0] - The y value of this vector.
|
|
35
|
-
*/
|
|
36
|
-
constructor( x = 0, y = 0 ) {
|
|
30
|
+
static {
|
|
37
31
|
|
|
38
32
|
/**
|
|
39
33
|
* This flag can be used for type testing.
|
|
@@ -44,6 +38,16 @@ class Vector2 {
|
|
|
44
38
|
*/
|
|
45
39
|
Vector2.prototype.isVector2 = true;
|
|
46
40
|
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Constructs a new 2D vector.
|
|
45
|
+
*
|
|
46
|
+
* @param {number} [x=0] - The x value of this vector.
|
|
47
|
+
* @param {number} [y=0] - The y value of this vector.
|
|
48
|
+
*/
|
|
49
|
+
constructor( x = 0, y = 0 ) {
|
|
50
|
+
|
|
47
51
|
/**
|
|
48
52
|
* The x value of this vector.
|
|
49
53
|
*
|
package/src/math/Vector3.js
CHANGED
|
@@ -28,14 +28,7 @@ import { Quaternion } from './Quaternion.js';
|
|
|
28
28
|
*/
|
|
29
29
|
class Vector3 {
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
* Constructs a new 3D vector.
|
|
33
|
-
*
|
|
34
|
-
* @param {number} [x=0] - The x value of this vector.
|
|
35
|
-
* @param {number} [y=0] - The y value of this vector.
|
|
36
|
-
* @param {number} [z=0] - The z value of this vector.
|
|
37
|
-
*/
|
|
38
|
-
constructor( x = 0, y = 0, z = 0 ) {
|
|
31
|
+
static {
|
|
39
32
|
|
|
40
33
|
/**
|
|
41
34
|
* This flag can be used for type testing.
|
|
@@ -46,6 +39,17 @@ class Vector3 {
|
|
|
46
39
|
*/
|
|
47
40
|
Vector3.prototype.isVector3 = true;
|
|
48
41
|
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Constructs a new 3D vector.
|
|
46
|
+
*
|
|
47
|
+
* @param {number} [x=0] - The x value of this vector.
|
|
48
|
+
* @param {number} [y=0] - The y value of this vector.
|
|
49
|
+
* @param {number} [z=0] - The z value of this vector.
|
|
50
|
+
*/
|
|
51
|
+
constructor( x = 0, y = 0, z = 0 ) {
|
|
52
|
+
|
|
49
53
|
/**
|
|
50
54
|
* The x value of this vector.
|
|
51
55
|
*
|
|
@@ -106,7 +110,7 @@ class Vector3 {
|
|
|
106
110
|
}
|
|
107
111
|
|
|
108
112
|
/**
|
|
109
|
-
* Sets the vector's x component to the given value
|
|
113
|
+
* Sets the vector's x component to the given value.
|
|
110
114
|
*
|
|
111
115
|
* @param {number} x - The value to set.
|
|
112
116
|
* @return {Vector3} A reference to this vector.
|
|
@@ -120,7 +124,7 @@ class Vector3 {
|
|
|
120
124
|
}
|
|
121
125
|
|
|
122
126
|
/**
|
|
123
|
-
* Sets the vector's y component to the given value
|
|
127
|
+
* Sets the vector's y component to the given value.
|
|
124
128
|
*
|
|
125
129
|
* @param {number} y - The value to set.
|
|
126
130
|
* @return {Vector3} A reference to this vector.
|
|
@@ -134,7 +138,7 @@ class Vector3 {
|
|
|
134
138
|
}
|
|
135
139
|
|
|
136
140
|
/**
|
|
137
|
-
* Sets the vector's z component to the given value
|
|
141
|
+
* Sets the vector's z component to the given value.
|
|
138
142
|
*
|
|
139
143
|
* @param {number} z - The value to set.
|
|
140
144
|
* @return {Vector3} A reference to this vector.
|
|
@@ -744,8 +748,6 @@ class Vector3 {
|
|
|
744
748
|
|
|
745
749
|
}
|
|
746
750
|
|
|
747
|
-
// TODO lengthSquared?
|
|
748
|
-
|
|
749
751
|
/**
|
|
750
752
|
* Computes the square of the Euclidean length (straight-line length) from
|
|
751
753
|
* (0, 0, 0) to (x, y, z). If you are comparing the lengths of vectors, you should
|
package/src/math/Vector4.js
CHANGED
|
@@ -26,15 +26,7 @@ import { clamp } from './MathUtils.js';
|
|
|
26
26
|
*/
|
|
27
27
|
class Vector4 {
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
* Constructs a new 4D vector.
|
|
31
|
-
*
|
|
32
|
-
* @param {number} [x=0] - The x value of this vector.
|
|
33
|
-
* @param {number} [y=0] - The y value of this vector.
|
|
34
|
-
* @param {number} [z=0] - The z value of this vector.
|
|
35
|
-
* @param {number} [w=1] - The w value of this vector.
|
|
36
|
-
*/
|
|
37
|
-
constructor( x = 0, y = 0, z = 0, w = 1 ) {
|
|
29
|
+
static {
|
|
38
30
|
|
|
39
31
|
/**
|
|
40
32
|
* This flag can be used for type testing.
|
|
@@ -45,6 +37,18 @@ class Vector4 {
|
|
|
45
37
|
*/
|
|
46
38
|
Vector4.prototype.isVector4 = true;
|
|
47
39
|
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Constructs a new 4D vector.
|
|
44
|
+
*
|
|
45
|
+
* @param {number} [x=0] - The x value of this vector.
|
|
46
|
+
* @param {number} [y=0] - The y value of this vector.
|
|
47
|
+
* @param {number} [z=0] - The z value of this vector.
|
|
48
|
+
* @param {number} [w=1] - The w value of this vector.
|
|
49
|
+
*/
|
|
50
|
+
constructor( x = 0, y = 0, z = 0, w = 1 ) {
|
|
51
|
+
|
|
48
52
|
/**
|
|
49
53
|
* The x value of this vector.
|
|
50
54
|
*
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Interpolant } from '../Interpolant.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A Bezier interpolant using cubic Bezier curves with 2D control points.
|
|
5
|
+
*
|
|
6
|
+
* This interpolant supports the COLLADA/Maya style of Bezier animation where
|
|
7
|
+
* each keyframe has explicit in/out tangent control points specified as
|
|
8
|
+
* 2D coordinates (time, value).
|
|
9
|
+
*
|
|
10
|
+
* The tangent data must be provided via the `settings` object:
|
|
11
|
+
* - `settings.inTangents`: Float32Array with [time, value] pairs per keyframe per component
|
|
12
|
+
* - `settings.outTangents`: Float32Array with [time, value] pairs per keyframe per component
|
|
13
|
+
*
|
|
14
|
+
* For a track with N keyframes and stride S:
|
|
15
|
+
* - Each tangent array has N * S * 2 values
|
|
16
|
+
* - Layout: [k0_c0_time, k0_c0_value, k0_c1_time, k0_c1_value, ..., k0_cS_time, k0_cS_value,
|
|
17
|
+
* k1_c0_time, k1_c0_value, ...]
|
|
18
|
+
*
|
|
19
|
+
* @augments Interpolant
|
|
20
|
+
*/
|
|
21
|
+
class BezierInterpolant extends Interpolant {
|
|
22
|
+
|
|
23
|
+
interpolate_( i1, t0, t, t1 ) {
|
|
24
|
+
|
|
25
|
+
const result = this.resultBuffer;
|
|
26
|
+
const values = this.sampleValues;
|
|
27
|
+
const stride = this.valueSize;
|
|
28
|
+
|
|
29
|
+
const offset1 = i1 * stride;
|
|
30
|
+
const offset0 = offset1 - stride;
|
|
31
|
+
|
|
32
|
+
const settings = this.settings || this.DefaultSettings_;
|
|
33
|
+
const inTangents = settings.inTangents;
|
|
34
|
+
const outTangents = settings.outTangents;
|
|
35
|
+
|
|
36
|
+
// If no tangent data, fall back to linear interpolation
|
|
37
|
+
if ( ! inTangents || ! outTangents ) {
|
|
38
|
+
|
|
39
|
+
const weight1 = ( t - t0 ) / ( t1 - t0 );
|
|
40
|
+
const weight0 = 1 - weight1;
|
|
41
|
+
|
|
42
|
+
for ( let i = 0; i !== stride; ++ i ) {
|
|
43
|
+
|
|
44
|
+
result[ i ] = values[ offset0 + i ] * weight0 + values[ offset1 + i ] * weight1;
|
|
45
|
+
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return result;
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const tangentStride = stride * 2;
|
|
53
|
+
const i0 = i1 - 1;
|
|
54
|
+
|
|
55
|
+
for ( let i = 0; i !== stride; ++ i ) {
|
|
56
|
+
|
|
57
|
+
const v0 = values[ offset0 + i ];
|
|
58
|
+
const v1 = values[ offset1 + i ];
|
|
59
|
+
|
|
60
|
+
// outTangent of previous keyframe (C0)
|
|
61
|
+
const outTangentOffset = i0 * tangentStride + i * 2;
|
|
62
|
+
const c0x = outTangents[ outTangentOffset ];
|
|
63
|
+
const c0y = outTangents[ outTangentOffset + 1 ];
|
|
64
|
+
|
|
65
|
+
// inTangent of current keyframe (C1)
|
|
66
|
+
const inTangentOffset = i1 * tangentStride + i * 2;
|
|
67
|
+
const c1x = inTangents[ inTangentOffset ];
|
|
68
|
+
const c1y = inTangents[ inTangentOffset + 1 ];
|
|
69
|
+
|
|
70
|
+
// Solve for Bezier parameter s where Bx(s) = t using Newton-Raphson
|
|
71
|
+
let s = ( t - t0 ) / ( t1 - t0 );
|
|
72
|
+
let s2, s3, oneMinusS, oneMinusS2, oneMinusS3;
|
|
73
|
+
|
|
74
|
+
for ( let iter = 0; iter < 8; iter ++ ) {
|
|
75
|
+
|
|
76
|
+
s2 = s * s;
|
|
77
|
+
s3 = s2 * s;
|
|
78
|
+
oneMinusS = 1 - s;
|
|
79
|
+
oneMinusS2 = oneMinusS * oneMinusS;
|
|
80
|
+
oneMinusS3 = oneMinusS2 * oneMinusS;
|
|
81
|
+
|
|
82
|
+
// Bezier X(s) = (1-s)³·t0 + 3(1-s)²s·c0x + 3(1-s)s²·c1x + s³·t1
|
|
83
|
+
const bx = oneMinusS3 * t0 + 3 * oneMinusS2 * s * c0x + 3 * oneMinusS * s2 * c1x + s3 * t1;
|
|
84
|
+
|
|
85
|
+
const error = bx - t;
|
|
86
|
+
if ( Math.abs( error ) < 1e-10 ) break;
|
|
87
|
+
|
|
88
|
+
// Derivative dX/ds
|
|
89
|
+
const dbx = 3 * oneMinusS2 * ( c0x - t0 ) + 6 * oneMinusS * s * ( c1x - c0x ) + 3 * s2 * ( t1 - c1x );
|
|
90
|
+
if ( Math.abs( dbx ) < 1e-10 ) break;
|
|
91
|
+
|
|
92
|
+
s = s - error / dbx;
|
|
93
|
+
s = Math.max( 0, Math.min( 1, s ) );
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Evaluate Bezier Y(s)
|
|
98
|
+
result[ i ] = oneMinusS3 * v0 + 3 * oneMinusS2 * s * c0y + 3 * oneMinusS * s2 * c1y + s3 * v1;
|
|
99
|
+
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return result;
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export { BezierInterpolant };
|