@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
|
@@ -25,7 +25,7 @@ import { modelViewMatrix } from '../../nodes/accessors/ModelNode.js';
|
|
|
25
25
|
import { vertexColor } from '../../nodes/accessors/VertexColorNode.js';
|
|
26
26
|
import { premultiplyAlpha } from '../../nodes/display/BlendModes.js';
|
|
27
27
|
import { subBuild } from '../../nodes/core/SubBuildNode.js';
|
|
28
|
-
import {
|
|
28
|
+
import { error } from '../../utils.js';
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* Base class for all node materials.
|
|
@@ -240,6 +240,14 @@ class NodeMaterial extends Material {
|
|
|
240
240
|
*/
|
|
241
241
|
this.maskNode = null;
|
|
242
242
|
|
|
243
|
+
/**
|
|
244
|
+
* This node can be used to implement a shadow mask for the material.
|
|
245
|
+
*
|
|
246
|
+
* @type {?Node<bool>}
|
|
247
|
+
* @default null
|
|
248
|
+
*/
|
|
249
|
+
this.maskShadowNode = null;
|
|
250
|
+
|
|
243
251
|
/**
|
|
244
252
|
* The local vertex positions are computed based on multiple factors like the
|
|
245
253
|
* attribute data, morphing or skinning. This node property allows to overwrite
|
|
@@ -382,25 +390,13 @@ class NodeMaterial extends Material {
|
|
|
382
390
|
*/
|
|
383
391
|
this.vertexNode = null;
|
|
384
392
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
},
|
|
394
|
-
|
|
395
|
-
set: ( value ) => {
|
|
396
|
-
|
|
397
|
-
warn( 'NodeMaterial: ".shadowPositionNode" was renamed to ".receivedShadowPositionNode".' );
|
|
398
|
-
|
|
399
|
-
this.receivedShadowPositionNode = value;
|
|
400
|
-
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
} );
|
|
393
|
+
/**
|
|
394
|
+
* This node can be used as a global context management component for this material.
|
|
395
|
+
*
|
|
396
|
+
* @type {?ContextNode}
|
|
397
|
+
* @default null
|
|
398
|
+
*/
|
|
399
|
+
this.contextNode = null;
|
|
404
400
|
|
|
405
401
|
}
|
|
406
402
|
|
|
@@ -489,13 +485,41 @@ class NodeMaterial extends Material {
|
|
|
489
485
|
const renderer = builder.renderer;
|
|
490
486
|
const renderTarget = renderer.getRenderTarget();
|
|
491
487
|
|
|
488
|
+
// < CONTEXT >
|
|
489
|
+
|
|
490
|
+
if ( renderer.contextNode.isContextNode === true ) {
|
|
491
|
+
|
|
492
|
+
builder.context = { ...builder.context, ...renderer.contextNode.getFlowContextData() };
|
|
493
|
+
|
|
494
|
+
} else {
|
|
495
|
+
|
|
496
|
+
error( 'NodeMaterial: "renderer.contextNode" must be an instance of `context()`.' );
|
|
497
|
+
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
if ( this.contextNode !== null ) {
|
|
501
|
+
|
|
502
|
+
if ( this.contextNode.isContextNode === true ) {
|
|
503
|
+
|
|
504
|
+
builder.context = { ...builder.context, ...this.contextNode.getFlowContextData() };
|
|
505
|
+
|
|
506
|
+
} else {
|
|
507
|
+
|
|
508
|
+
error( 'NodeMaterial: "material.contextNode" must be an instance of `context()`.' );
|
|
509
|
+
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
}
|
|
513
|
+
|
|
492
514
|
// < VERTEX STAGE >
|
|
493
515
|
|
|
494
516
|
builder.addStack();
|
|
495
517
|
|
|
496
|
-
const mvp =
|
|
518
|
+
const mvp = this.setupVertex( builder );
|
|
497
519
|
|
|
498
|
-
const vertexNode = this.vertexNode || mvp;
|
|
520
|
+
const vertexNode = subBuild( this.vertexNode || mvp, 'VERTEX' );
|
|
521
|
+
|
|
522
|
+
builder.context.clipSpace = vertexNode;
|
|
499
523
|
|
|
500
524
|
builder.stack.outputNode = vertexNode;
|
|
501
525
|
|
|
@@ -558,6 +582,14 @@ class NodeMaterial extends Material {
|
|
|
558
582
|
|
|
559
583
|
if ( isCustomOutput ) resultNode = this.outputNode;
|
|
560
584
|
|
|
585
|
+
//
|
|
586
|
+
|
|
587
|
+
if ( builder.context.getOutput ) {
|
|
588
|
+
|
|
589
|
+
resultNode = builder.context.getOutput( resultNode, builder );
|
|
590
|
+
|
|
591
|
+
}
|
|
592
|
+
|
|
561
593
|
// MRT
|
|
562
594
|
|
|
563
595
|
if ( renderTarget !== null ) {
|
|
@@ -753,7 +785,7 @@ class NodeMaterial extends Material {
|
|
|
753
785
|
|
|
754
786
|
this.setupPosition( builder );
|
|
755
787
|
|
|
756
|
-
builder.context.
|
|
788
|
+
builder.context.position = builder.removeStack();
|
|
757
789
|
|
|
758
790
|
return modelViewProjection;
|
|
759
791
|
|
|
@@ -1018,9 +1050,21 @@ class NodeMaterial extends Material {
|
|
|
1018
1050
|
|
|
1019
1051
|
}
|
|
1020
1052
|
|
|
1021
|
-
|
|
1053
|
+
let aoNode = this.aoNode;
|
|
1022
1054
|
|
|
1023
|
-
|
|
1055
|
+
if ( aoNode === null && builder.material.aoMap ) {
|
|
1056
|
+
|
|
1057
|
+
aoNode = materialAO;
|
|
1058
|
+
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
if ( builder.context.getAO ) {
|
|
1062
|
+
|
|
1063
|
+
aoNode = builder.context.getAO( aoNode, builder );
|
|
1064
|
+
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
if ( aoNode ) {
|
|
1024
1068
|
|
|
1025
1069
|
materialLightsNode.push( new AONode( aoNode ) );
|
|
1026
1070
|
|
|
@@ -1285,6 +1329,7 @@ class NodeMaterial extends Material {
|
|
|
1285
1329
|
this.backdropAlphaNode = source.backdropAlphaNode;
|
|
1286
1330
|
this.alphaTestNode = source.alphaTestNode;
|
|
1287
1331
|
this.maskNode = source.maskNode;
|
|
1332
|
+
this.maskShadowNode = source.maskShadowNode;
|
|
1288
1333
|
|
|
1289
1334
|
this.positionNode = source.positionNode;
|
|
1290
1335
|
this.geometryNode = source.geometryNode;
|
|
@@ -1301,6 +1346,8 @@ class NodeMaterial extends Material {
|
|
|
1301
1346
|
this.fragmentNode = source.fragmentNode;
|
|
1302
1347
|
this.vertexNode = source.vertexNode;
|
|
1303
1348
|
|
|
1349
|
+
this.contextNode = source.contextNode;
|
|
1350
|
+
|
|
1304
1351
|
return super.copy( source );
|
|
1305
1352
|
|
|
1306
1353
|
}
|
|
@@ -173,6 +173,7 @@ class NodeMaterialObserver {
|
|
|
173
173
|
geometry: {
|
|
174
174
|
id: geometry.id,
|
|
175
175
|
attributes: this.getAttributesData( geometry.attributes ),
|
|
176
|
+
indexId: geometry.index ? geometry.index.id : null,
|
|
176
177
|
indexVersion: geometry.index ? geometry.index.version : null,
|
|
177
178
|
drawRange: { start: geometry.drawRange.start, count: geometry.drawRange.count }
|
|
178
179
|
},
|
|
@@ -232,7 +233,8 @@ class NodeMaterialObserver {
|
|
|
232
233
|
const attribute = attributes[ name ];
|
|
233
234
|
|
|
234
235
|
attributesData[ name ] = {
|
|
235
|
-
|
|
236
|
+
id: attribute.id,
|
|
237
|
+
version: attribute.version,
|
|
236
238
|
};
|
|
237
239
|
|
|
238
240
|
}
|
|
@@ -259,7 +261,7 @@ class NodeMaterialObserver {
|
|
|
259
261
|
|
|
260
262
|
}
|
|
261
263
|
|
|
262
|
-
if ( builder.
|
|
264
|
+
if ( builder.context.modelViewMatrix || builder.context.modelNormalViewMatrix || builder.context.getAO || builder.context.getShadow )
|
|
263
265
|
return true;
|
|
264
266
|
|
|
265
267
|
return false;
|
|
@@ -423,8 +425,9 @@ class NodeMaterialObserver {
|
|
|
423
425
|
|
|
424
426
|
}
|
|
425
427
|
|
|
426
|
-
if ( storedAttributeData.version !== attribute.version ) {
|
|
428
|
+
if ( storedAttributeData.id !== attribute.id || storedAttributeData.version !== attribute.version ) {
|
|
427
429
|
|
|
430
|
+
storedAttributeData.id = attribute.id;
|
|
428
431
|
storedAttributeData.version = attribute.version;
|
|
429
432
|
return false;
|
|
430
433
|
|
|
@@ -435,11 +438,14 @@ class NodeMaterialObserver {
|
|
|
435
438
|
// check index
|
|
436
439
|
|
|
437
440
|
const index = geometry.index;
|
|
441
|
+
const storedIndexId = storedGeometryData.indexId;
|
|
438
442
|
const storedIndexVersion = storedGeometryData.indexVersion;
|
|
443
|
+
const currentIndexId = index ? index.id : null;
|
|
439
444
|
const currentIndexVersion = index ? index.version : null;
|
|
440
445
|
|
|
441
|
-
if ( storedIndexVersion !== currentIndexVersion ) {
|
|
446
|
+
if ( storedIndexId !== currentIndexId || storedIndexVersion !== currentIndexVersion ) {
|
|
442
447
|
|
|
448
|
+
storedGeometryData.indexId = currentIndexId;
|
|
443
449
|
storedGeometryData.indexVersion = currentIndexVersion;
|
|
444
450
|
return false;
|
|
445
451
|
|
package/src/math/Line3.js
CHANGED
|
@@ -284,12 +284,10 @@ class Line3 {
|
|
|
284
284
|
|
|
285
285
|
}
|
|
286
286
|
|
|
287
|
-
c1.copy( p1 ).
|
|
288
|
-
c2.copy( p2 ).
|
|
287
|
+
c1.copy( p1 ).addScaledVector( _d1, s );
|
|
288
|
+
c2.copy( p2 ).addScaledVector( _d2, t );
|
|
289
289
|
|
|
290
|
-
c1.
|
|
291
|
-
|
|
292
|
-
return c1.dot( c1 );
|
|
290
|
+
return c1.distanceToSquared( c2 );
|
|
293
291
|
|
|
294
292
|
}
|
|
295
293
|
|
package/src/math/MathUtils.js
CHANGED
|
@@ -64,7 +64,7 @@ function euclideanModulo( n, m ) {
|
|
|
64
64
|
|
|
65
65
|
/**
|
|
66
66
|
* Performs a linear mapping from range `<a1, a2>` to range `<b1, b2>`
|
|
67
|
-
* for the given value.
|
|
67
|
+
* for the given value. `a2` must be greater than `a1`.
|
|
68
68
|
*
|
|
69
69
|
* @param {number} x - The value to be mapped.
|
|
70
70
|
* @param {number} a1 - Minimum value for range A.
|
|
@@ -159,9 +159,9 @@ function pingpong( x, length = 1 ) {
|
|
|
159
159
|
*
|
|
160
160
|
* See [Smoothstep](http://en.wikipedia.org/wiki/Smoothstep) for more details.
|
|
161
161
|
*
|
|
162
|
-
* @param {number} x - The value to evaluate based on its position between min and max
|
|
163
|
-
* @param {number} min - The min value. Any x value below min will be `0`.
|
|
164
|
-
* @param {number} max - The max value. Any x value above max will be `1`.
|
|
162
|
+
* @param {number} x - The value to evaluate based on its position between `min` and `max`.
|
|
163
|
+
* @param {number} min - The min value. Any `x` value below `min` will be `0`. `min` must be lower than `max`.
|
|
164
|
+
* @param {number} max - The max value. Any `x` value above `max` will be `1`. `max` must be greater than `min`.
|
|
165
165
|
* @return {number} The alternated value.
|
|
166
166
|
*/
|
|
167
167
|
function smoothstep( x, min, max ) {
|
|
@@ -177,11 +177,11 @@ function smoothstep( x, min, max ) {
|
|
|
177
177
|
|
|
178
178
|
/**
|
|
179
179
|
* A [variation on smoothstep](https://en.wikipedia.org/wiki/Smoothstep#Variations)
|
|
180
|
-
* that has zero 1st and 2nd order derivatives at x=0 and x=1
|
|
180
|
+
* that has zero 1st and 2nd order derivatives at `x=0` and `x=1`.
|
|
181
181
|
*
|
|
182
|
-
* @param {number} x - The value to evaluate based on its position between min and max
|
|
183
|
-
* @param {number} min - The min value. Any x value below min will be `0`.
|
|
184
|
-
* @param {number} max - The max value. Any x value above max will be `1`.
|
|
182
|
+
* @param {number} x - The value to evaluate based on its position between `min` and `max`.
|
|
183
|
+
* @param {number} min - The min value. Any `x` value below `min` will be `0`. `min` must be lower than `max`.
|
|
184
|
+
* @param {number} max - The max value. Any `x` value above `max` will be `1`. `max` must be greater than `min`.
|
|
185
185
|
* @return {number} The alternated value.
|
|
186
186
|
*/
|
|
187
187
|
function smootherstep( x, min, max ) {
|
|
@@ -294,7 +294,7 @@ function isPowerOfTwo( value ) {
|
|
|
294
294
|
/**
|
|
295
295
|
* Returns the smallest power of two that is greater than or equal to the given number.
|
|
296
296
|
*
|
|
297
|
-
* @param {number} value - The value to find a POT for.
|
|
297
|
+
* @param {number} value - The value to find a POT for. Must be greater than `0`.
|
|
298
298
|
* @return {number} The smallest power of two that is greater than or equal to the given number.
|
|
299
299
|
*/
|
|
300
300
|
function ceilPowerOfTwo( value ) {
|
|
@@ -306,7 +306,7 @@ function ceilPowerOfTwo( value ) {
|
|
|
306
306
|
/**
|
|
307
307
|
* Returns the largest power of two that is less than or equal to the given number.
|
|
308
308
|
*
|
|
309
|
-
* @param {number} value - The value to find a POT for.
|
|
309
|
+
* @param {number} value - The value to find a POT for. Must be greater than `0`.
|
|
310
310
|
* @return {number} The largest power of two that is less than or equal to the given number.
|
|
311
311
|
*/
|
|
312
312
|
function floorPowerOfTwo( value ) {
|
package/src/math/Matrix4.js
CHANGED
|
@@ -234,6 +234,16 @@ class Matrix4 {
|
|
|
234
234
|
*/
|
|
235
235
|
extractBasis( xAxis, yAxis, zAxis ) {
|
|
236
236
|
|
|
237
|
+
if ( this.determinant() === 0 ) {
|
|
238
|
+
|
|
239
|
+
xAxis.set( 1, 0, 0 );
|
|
240
|
+
yAxis.set( 0, 1, 0 );
|
|
241
|
+
zAxis.set( 0, 0, 1 );
|
|
242
|
+
|
|
243
|
+
return this;
|
|
244
|
+
|
|
245
|
+
}
|
|
246
|
+
|
|
237
247
|
xAxis.setFromMatrixColumn( this, 0 );
|
|
238
248
|
yAxis.setFromMatrixColumn( this, 1 );
|
|
239
249
|
zAxis.setFromMatrixColumn( this, 2 );
|
|
@@ -274,6 +284,12 @@ class Matrix4 {
|
|
|
274
284
|
*/
|
|
275
285
|
extractRotation( m ) {
|
|
276
286
|
|
|
287
|
+
if ( m.determinant() === 0 ) {
|
|
288
|
+
|
|
289
|
+
return this.identity();
|
|
290
|
+
|
|
291
|
+
}
|
|
292
|
+
|
|
277
293
|
const te = this.elements;
|
|
278
294
|
const me = m.elements;
|
|
279
295
|
|
|
@@ -614,43 +630,18 @@ class Matrix4 {
|
|
|
614
630
|
const n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];
|
|
615
631
|
const n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];
|
|
616
632
|
|
|
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
|
-
)
|
|
633
|
+
const t11 = n23 * n34 - n24 * n33;
|
|
634
|
+
const t12 = n22 * n34 - n24 * n32;
|
|
635
|
+
const t13 = n22 * n33 - n23 * n32;
|
|
652
636
|
|
|
653
|
-
|
|
637
|
+
const t21 = n21 * n34 - n24 * n31;
|
|
638
|
+
const t22 = n21 * n33 - n23 * n31;
|
|
639
|
+
const t23 = n21 * n32 - n22 * n31;
|
|
640
|
+
|
|
641
|
+
return n11 * ( n42 * t11 - n43 * t12 + n44 * t13 ) -
|
|
642
|
+
n12 * ( n41 * t11 - n43 * t21 + n44 * t22 ) +
|
|
643
|
+
n13 * ( n41 * t12 - n42 * t21 + n44 * t23 ) -
|
|
644
|
+
n14 * ( n41 * t13 - n42 * t22 + n43 * t23 );
|
|
654
645
|
|
|
655
646
|
}
|
|
656
647
|
|
|
@@ -716,7 +707,7 @@ class Matrix4 {
|
|
|
716
707
|
*/
|
|
717
708
|
invert() {
|
|
718
709
|
|
|
719
|
-
// based on
|
|
710
|
+
// based on https://github.com/toji/gl-matrix
|
|
720
711
|
const te = this.elements,
|
|
721
712
|
|
|
722
713
|
n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],
|
|
@@ -724,36 +715,44 @@ class Matrix4 {
|
|
|
724
715
|
n13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],
|
|
725
716
|
n14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],
|
|
726
717
|
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
718
|
+
t1 = n11 * n22 - n21 * n12,
|
|
719
|
+
t2 = n11 * n32 - n31 * n12,
|
|
720
|
+
t3 = n11 * n42 - n41 * n12,
|
|
721
|
+
t4 = n21 * n32 - n31 * n22,
|
|
722
|
+
t5 = n21 * n42 - n41 * n22,
|
|
723
|
+
t6 = n31 * n42 - n41 * n32,
|
|
724
|
+
t7 = n13 * n24 - n23 * n14,
|
|
725
|
+
t8 = n13 * n34 - n33 * n14,
|
|
726
|
+
t9 = n13 * n44 - n43 * n14,
|
|
727
|
+
t10 = n23 * n34 - n33 * n24,
|
|
728
|
+
t11 = n23 * n44 - n43 * n24,
|
|
729
|
+
t12 = n33 * n44 - n43 * n34;
|
|
730
|
+
|
|
731
|
+
const det = t1 * t12 - t2 * t11 + t3 * t10 + t4 * t9 - t5 * t8 + t6 * t7;
|
|
733
732
|
|
|
734
733
|
if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
|
|
735
734
|
|
|
736
735
|
const detInv = 1 / det;
|
|
737
736
|
|
|
738
|
-
te[ 0 ] = t11 * detInv;
|
|
739
|
-
te[ 1 ] = (
|
|
740
|
-
te[ 2 ] = (
|
|
741
|
-
te[ 3 ] = (
|
|
737
|
+
te[ 0 ] = ( n22 * t12 - n32 * t11 + n42 * t10 ) * detInv;
|
|
738
|
+
te[ 1 ] = ( n31 * t11 - n21 * t12 - n41 * t10 ) * detInv;
|
|
739
|
+
te[ 2 ] = ( n24 * t6 - n34 * t5 + n44 * t4 ) * detInv;
|
|
740
|
+
te[ 3 ] = ( n33 * t5 - n23 * t6 - n43 * t4 ) * detInv;
|
|
742
741
|
|
|
743
|
-
te[ 4 ] = t12 * detInv;
|
|
744
|
-
te[ 5 ] = (
|
|
745
|
-
te[ 6 ] = (
|
|
746
|
-
te[ 7 ] = (
|
|
742
|
+
te[ 4 ] = ( n32 * t9 - n12 * t12 - n42 * t8 ) * detInv;
|
|
743
|
+
te[ 5 ] = ( n11 * t12 - n31 * t9 + n41 * t8 ) * detInv;
|
|
744
|
+
te[ 6 ] = ( n34 * t3 - n14 * t6 - n44 * t2 ) * detInv;
|
|
745
|
+
te[ 7 ] = ( n13 * t6 - n33 * t3 + n43 * t2 ) * detInv;
|
|
747
746
|
|
|
748
|
-
te[ 8 ] =
|
|
749
|
-
te[ 9 ] = (
|
|
750
|
-
te[ 10 ] = (
|
|
751
|
-
te[ 11 ] = (
|
|
747
|
+
te[ 8 ] = ( n12 * t11 - n22 * t9 + n42 * t7 ) * detInv;
|
|
748
|
+
te[ 9 ] = ( n21 * t9 - n11 * t11 - n41 * t7 ) * detInv;
|
|
749
|
+
te[ 10 ] = ( n14 * t5 - n24 * t3 + n44 * t1 ) * detInv;
|
|
750
|
+
te[ 11 ] = ( n23 * t3 - n13 * t5 - n43 * t1 ) * detInv;
|
|
752
751
|
|
|
753
|
-
te[ 12 ] =
|
|
754
|
-
te[ 13 ] = (
|
|
755
|
-
te[ 14 ] = (
|
|
756
|
-
te[ 15 ] = (
|
|
752
|
+
te[ 12 ] = ( n22 * t8 - n12 * t10 - n32 * t7 ) * detInv;
|
|
753
|
+
te[ 13 ] = ( n11 * t10 - n21 * t8 + n31 * t7 ) * detInv;
|
|
754
|
+
te[ 14 ] = ( n24 * t2 - n14 * t4 - n34 * t1 ) * detInv;
|
|
755
|
+
te[ 15 ] = ( n13 * t4 - n23 * t2 + n33 * t1 ) * detInv;
|
|
757
756
|
|
|
758
757
|
return this;
|
|
759
758
|
|
|
@@ -1051,18 +1050,28 @@ class Matrix4 {
|
|
|
1051
1050
|
|
|
1052
1051
|
const te = this.elements;
|
|
1053
1052
|
|
|
1053
|
+
position.x = te[ 12 ];
|
|
1054
|
+
position.y = te[ 13 ];
|
|
1055
|
+
position.z = te[ 14 ];
|
|
1056
|
+
|
|
1057
|
+
const det = this.determinant();
|
|
1058
|
+
|
|
1059
|
+
if ( det === 0 ) {
|
|
1060
|
+
|
|
1061
|
+
scale.set( 1, 1, 1 );
|
|
1062
|
+
quaternion.identity();
|
|
1063
|
+
|
|
1064
|
+
return this;
|
|
1065
|
+
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1054
1068
|
let sx = _v1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();
|
|
1055
1069
|
const sy = _v1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();
|
|
1056
1070
|
const sz = _v1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();
|
|
1057
1071
|
|
|
1058
|
-
// if
|
|
1059
|
-
const det = this.determinant();
|
|
1072
|
+
// if determinant is negative, we need to invert one scale
|
|
1060
1073
|
if ( det < 0 ) sx = - sx;
|
|
1061
1074
|
|
|
1062
|
-
position.x = te[ 12 ];
|
|
1063
|
-
position.y = te[ 13 ];
|
|
1064
|
-
position.z = te[ 14 ];
|
|
1065
|
-
|
|
1066
1075
|
// scale the rotation part
|
|
1067
1076
|
_m1.copy( this );
|
|
1068
1077
|
|
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/Vector3.js
CHANGED
|
@@ -106,7 +106,7 @@ class Vector3 {
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
/**
|
|
109
|
-
* Sets the vector's x component to the given value
|
|
109
|
+
* Sets the vector's x component to the given value.
|
|
110
110
|
*
|
|
111
111
|
* @param {number} x - The value to set.
|
|
112
112
|
* @return {Vector3} A reference to this vector.
|
|
@@ -120,7 +120,7 @@ class Vector3 {
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
/**
|
|
123
|
-
* Sets the vector's y component to the given value
|
|
123
|
+
* Sets the vector's y component to the given value.
|
|
124
124
|
*
|
|
125
125
|
* @param {number} y - The value to set.
|
|
126
126
|
* @return {Vector3} A reference to this vector.
|
|
@@ -134,7 +134,7 @@ class Vector3 {
|
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
/**
|
|
137
|
-
* Sets the vector's z component to the given value
|
|
137
|
+
* Sets the vector's z component to the given value.
|
|
138
138
|
*
|
|
139
139
|
* @param {number} z - The value to set.
|
|
140
140
|
* @return {Vector3} A reference to this vector.
|
|
@@ -744,8 +744,6 @@ class Vector3 {
|
|
|
744
744
|
|
|
745
745
|
}
|
|
746
746
|
|
|
747
|
-
// TODO lengthSquared?
|
|
748
|
-
|
|
749
747
|
/**
|
|
750
748
|
* Computes the square of the Euclidean length (straight-line length) from
|
|
751
749
|
* (0, 0, 0) to (x, y, z). If you are comparing the lengths of vectors, you should
|