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
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4, fract, dot } from '../tsl/TSLBase.js';
|
|
1
|
+
import { abs, cross, float, Fn, normalize, ivec2, sub, vec2, vec3, vec4, fract, dot, cos, sin } from '../tsl/TSLBase.js';
|
|
2
|
+
import { sqrt } from '../math/MathNode.js';
|
|
2
3
|
import { textureSize } from '../accessors/TextureSizeNode.js';
|
|
3
4
|
import { textureLoad } from '../accessors/TextureNode.js';
|
|
4
5
|
import { WebGPUCoordinateSystem } from '../../constants.js';
|
|
@@ -120,3 +121,34 @@ export const interleavedGradientNoise = Fn( ( [ position ] ) => {
|
|
|
120
121
|
{ name: 'position', type: 'vec2' }
|
|
121
122
|
]
|
|
122
123
|
} );
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Vogel disk sampling for uniform circular distribution.
|
|
127
|
+
*
|
|
128
|
+
* This function generates sample points distributed uniformly on a disk using the golden angle,
|
|
129
|
+
* resulting in an efficient low-discrepancy sequence for sampling. The rotation parameter (phi)
|
|
130
|
+
* allows randomizing the pattern per-pixel when combined with IGN.
|
|
131
|
+
*
|
|
132
|
+
* @tsl
|
|
133
|
+
* @function
|
|
134
|
+
* @param {Node<int>} sampleIndex - The index of the current sample (0-based).
|
|
135
|
+
* @param {Node<int>} samplesCount - The total number of samples.
|
|
136
|
+
* @param {Node<float>} phi - Rotation angle in radians (typically from IGN * 2π).
|
|
137
|
+
* @return {Node<vec2>} A 2D point on the unit disk.
|
|
138
|
+
*/
|
|
139
|
+
export const vogelDiskSample = Fn( ( [ sampleIndex, samplesCount, phi ] ) => {
|
|
140
|
+
|
|
141
|
+
const goldenAngle = float( 2.399963229728653 ); // 2π * (2 - φ) where φ is golden ratio
|
|
142
|
+
const r = sqrt( float( sampleIndex ).add( 0.5 ).div( float( samplesCount ) ) );
|
|
143
|
+
const theta = float( sampleIndex ).mul( goldenAngle ).add( phi );
|
|
144
|
+
return vec2( cos( theta ), sin( theta ) ).mul( r );
|
|
145
|
+
|
|
146
|
+
} ).setLayout( {
|
|
147
|
+
name: 'vogelDiskSample',
|
|
148
|
+
type: 'vec2',
|
|
149
|
+
inputs: [
|
|
150
|
+
{ name: 'sampleIndex', type: 'int' },
|
|
151
|
+
{ name: 'samplesCount', type: 'int' },
|
|
152
|
+
{ name: 'phi', type: 'float' }
|
|
153
|
+
]
|
|
154
|
+
} );
|
|
@@ -266,7 +266,7 @@ export default RTTNode;
|
|
|
266
266
|
* @param {Object} [options={type:HalfFloatType}] - The options for the internal render target.
|
|
267
267
|
* @returns {RTTNode}
|
|
268
268
|
*/
|
|
269
|
-
export const rtt = ( node, ...params ) =>
|
|
269
|
+
export const rtt = ( node, ...params ) => new RTTNode( nodeObject( node ), ...params );
|
|
270
270
|
|
|
271
271
|
/**
|
|
272
272
|
* TSL function for converting nodes to textures nodes.
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import TextureNode from '../accessors/TextureNode.js';
|
|
3
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
4
3
|
import { NodeUpdateType } from '../core/constants.js';
|
|
5
4
|
import { screenUV } from '../display/ScreenNode.js';
|
|
6
5
|
|
|
@@ -134,10 +133,10 @@ class ReflectorNode extends TextureNode {
|
|
|
134
133
|
|
|
135
134
|
}
|
|
136
135
|
|
|
137
|
-
this._depthNode =
|
|
136
|
+
this._depthNode = new ReflectorNode( {
|
|
138
137
|
defaultTexture: _defaultRT.depthTexture,
|
|
139
138
|
reflector: this._reflectorBaseNode
|
|
140
|
-
} )
|
|
139
|
+
} );
|
|
141
140
|
|
|
142
141
|
}
|
|
143
142
|
|
|
@@ -625,6 +624,6 @@ class ReflectorBaseNode extends Node {
|
|
|
625
624
|
* @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
|
|
626
625
|
* @returns {ReflectorNode}
|
|
627
626
|
*/
|
|
628
|
-
export const reflector = ( parameters ) =>
|
|
627
|
+
export const reflector = ( parameters ) => new ReflectorNode( parameters );
|
|
629
628
|
|
|
630
629
|
export default ReflectorNode;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { float, addMethodChaining, Fn, bool, defined } from '../tsl/TSLCore.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This node allows to remap a node value from one range into another. E.g a value of
|
|
5
|
+
* `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
|
|
6
|
+
* `remap` takes care of that and converts the original value of `0.4` to `0.5`.
|
|
7
|
+
*
|
|
8
|
+
* @tsl
|
|
9
|
+
* @function
|
|
10
|
+
* @param {Node} node - The node that should be remapped.
|
|
11
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
12
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
13
|
+
* @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
14
|
+
* @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
15
|
+
* @returns {Node}
|
|
16
|
+
*/
|
|
17
|
+
export const remap = /*@__PURE__*/ Fn( ( [ node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ), doClamp = bool( false ) ] ) => {
|
|
18
|
+
|
|
19
|
+
let t = node.sub( inLowNode ).div( inHighNode.sub( inLowNode ) );
|
|
20
|
+
|
|
21
|
+
if ( defined( doClamp ) ) t = t.clamp();
|
|
22
|
+
|
|
23
|
+
return t.mul( outHighNode.sub( outLowNode ) ).add( outLowNode );
|
|
24
|
+
|
|
25
|
+
} );
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* This node allows to remap a node value from one range into another but with enabled clamping. E.g a value of
|
|
29
|
+
* `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
|
|
30
|
+
* `remapClamp` takes care of that and converts the original value of `0.4` to `0.5`.
|
|
31
|
+
*
|
|
32
|
+
* @tsl
|
|
33
|
+
* @function
|
|
34
|
+
* @param {Node} node - The node that should be remapped.
|
|
35
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
36
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
37
|
+
* @param {?Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
38
|
+
* @param {?Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
39
|
+
* @returns {Node}
|
|
40
|
+
*/
|
|
41
|
+
export function remapClamp( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {
|
|
42
|
+
|
|
43
|
+
return remap( node, inLowNode, inHighNode, outLowNode, outHighNode, true );
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
addMethodChaining( 'remap', remap );
|
|
48
|
+
addMethodChaining( 'remapClamp', remapClamp );
|
|
@@ -49,7 +49,7 @@ class RotateNode extends TempNode {
|
|
|
49
49
|
* @param {NodeBuilder} builder - The current node builder.
|
|
50
50
|
* @return {string} The node's type.
|
|
51
51
|
*/
|
|
52
|
-
|
|
52
|
+
generateNodeType( builder ) {
|
|
53
53
|
|
|
54
54
|
return this.positionNode.getNodeType( builder );
|
|
55
55
|
|
|
@@ -88,4 +88,4 @@ export default SampleNode;
|
|
|
88
88
|
* @param {?Node<vec2>} [uv=null] - The UV node to be used in the texture sampling.
|
|
89
89
|
* @returns {SampleNode} The created SampleNode instance wrapped as a node object.
|
|
90
90
|
*/
|
|
91
|
-
export const sample = ( callback, uv = null ) =>
|
|
91
|
+
export const sample = ( callback, uv = null ) => new SampleNode( callback, nodeObject( uv ) );
|
|
@@ -94,7 +94,7 @@ class SplitNode extends Node {
|
|
|
94
94
|
* @param {NodeBuilder} builder - The current node builder.
|
|
95
95
|
* @return {string} The node type.
|
|
96
96
|
*/
|
|
97
|
-
|
|
97
|
+
generateNodeType( builder ) {
|
|
98
98
|
|
|
99
99
|
return builder.getTypeFromLength( this.components.length, this.getComponentType( builder ) );
|
|
100
100
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { uv } from '../accessors/UV.js';
|
|
2
|
+
import { Fn, float, vec2 } from '../tsl/TSLBase.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* TSL function for computing texture coordinates for animated sprite sheets.
|
|
6
|
+
*
|
|
7
|
+
* ```js
|
|
8
|
+
* const uvNode = spritesheetUV( vec2( 6, 6 ), uv(), time.mul( animationSpeed ) );
|
|
9
|
+
*
|
|
10
|
+
* material.colorNode = texture( spriteSheet, uvNode );
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @tsl
|
|
14
|
+
* @function
|
|
15
|
+
* @param {Node<vec2>} countNode - The node that defines the number of sprites in the x and y direction (e.g 6x6).
|
|
16
|
+
* @param {?Node<vec2>} [uvNode=uv()] - The uv node.
|
|
17
|
+
* @param {?Node<float>} [frameNode=float(0)] - The node that defines the current frame/sprite.
|
|
18
|
+
* @returns {Node<vec2>}
|
|
19
|
+
*/
|
|
20
|
+
export const spritesheetUV = /*@__PURE__*/ Fn( ( [ countNode, uvNode = uv(), frameNode = float( 0 ) ] ) => {
|
|
21
|
+
|
|
22
|
+
const width = countNode.x;
|
|
23
|
+
const height = countNode.y;
|
|
24
|
+
|
|
25
|
+
const frameNum = frameNode.mod( width.mul( height ) ).floor();
|
|
26
|
+
|
|
27
|
+
const column = frameNum.mod( width );
|
|
28
|
+
const row = height.sub( frameNum.add( 1 ).div( width ).ceil() );
|
|
29
|
+
|
|
30
|
+
const scale = countNode.reciprocal();
|
|
31
|
+
const uvFrameOffset = vec2( column, row );
|
|
32
|
+
|
|
33
|
+
return uvNode.add( uvFrameOffset ).mul( scale );
|
|
34
|
+
|
|
35
|
+
} );
|
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
import { Fn, vec2 } from '../tsl/TSLBase.js';
|
|
2
2
|
import { rotate } from './RotateNode.js';
|
|
3
|
+
import { context } from '../core/ContextNode.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Replaces the default UV coordinates used in texture lookups.
|
|
7
|
+
*
|
|
8
|
+
* ```js
|
|
9
|
+
*material.contextNode = replaceDefaultUV( ( textureNode ) => {
|
|
10
|
+
*
|
|
11
|
+
* // ...
|
|
12
|
+
* return customUVCoordinates;
|
|
13
|
+
*
|
|
14
|
+
*} );
|
|
15
|
+
*```
|
|
16
|
+
*
|
|
17
|
+
* @tsl
|
|
18
|
+
* @function
|
|
19
|
+
* @param {function(Node):Node<vec2>|Node<vec2>} callback - A callback that receives the texture node
|
|
20
|
+
* and must return the new uv coordinates.
|
|
21
|
+
* @param {Node} [node=null] - An optional node to which the context will be applied.
|
|
22
|
+
* @return {ContextNode} A context node that replaces the default UV coordinates.
|
|
23
|
+
*/
|
|
24
|
+
export function replaceDefaultUV( callback, node = null ) {
|
|
25
|
+
|
|
26
|
+
const getUV = typeof callback === 'function' ? callback : () => callback;
|
|
27
|
+
|
|
28
|
+
return context( node, { getUV } );
|
|
29
|
+
|
|
30
|
+
}
|
|
3
31
|
|
|
4
32
|
/**
|
|
5
33
|
* Rotates the given uv coordinates around a center point
|
|
@@ -272,7 +272,6 @@ class BatchedMesh extends Mesh {
|
|
|
272
272
|
this._multiDrawCounts = new Int32Array( maxInstanceCount );
|
|
273
273
|
this._multiDrawStarts = new Int32Array( maxInstanceCount );
|
|
274
274
|
this._multiDrawCount = 0;
|
|
275
|
-
this._multiDrawInstances = null;
|
|
276
275
|
|
|
277
276
|
// Local matrix per geometry by using data texture
|
|
278
277
|
this._matricesTexture = null;
|
|
@@ -871,10 +870,9 @@ class BatchedMesh extends Mesh {
|
|
|
871
870
|
}
|
|
872
871
|
|
|
873
872
|
/**
|
|
874
|
-
* Repacks the sub geometries in
|
|
873
|
+
* Repacks the sub geometries in BatchedMesh to remove any unused space remaining from
|
|
875
874
|
* previously deleted geometry, freeing up space to add new geometry.
|
|
876
875
|
*
|
|
877
|
-
* @param {number} instanceId - The ID of the instance to remove from the batch.
|
|
878
876
|
* @return {BatchedMesh} A reference to this batched mesh.
|
|
879
877
|
*/
|
|
880
878
|
optimize() {
|
|
@@ -926,6 +924,7 @@ class BatchedMesh extends Mesh {
|
|
|
926
924
|
|
|
927
925
|
index.array.copyWithin( nextIndexStart, indexStart, indexStart + reservedIndexCount );
|
|
928
926
|
index.addUpdateRange( nextIndexStart, reservedIndexCount );
|
|
927
|
+
index.needsUpdate = true;
|
|
929
928
|
|
|
930
929
|
geometryInfo.indexStart = nextIndexStart;
|
|
931
930
|
|
|
@@ -946,6 +945,7 @@ class BatchedMesh extends Mesh {
|
|
|
946
945
|
const { array, itemSize } = attribute;
|
|
947
946
|
array.copyWithin( nextVertexStart * itemSize, vertexStart * itemSize, ( vertexStart + reservedVertexCount ) * itemSize );
|
|
948
947
|
attribute.addUpdateRange( nextVertexStart * itemSize, reservedVertexCount * itemSize );
|
|
948
|
+
attribute.needsUpdate = true;
|
|
949
949
|
|
|
950
950
|
}
|
|
951
951
|
|
|
@@ -956,12 +956,12 @@ class BatchedMesh extends Mesh {
|
|
|
956
956
|
nextVertexStart += geometryInfo.reservedVertexCount;
|
|
957
957
|
geometryInfo.start = geometry.index ? geometryInfo.indexStart : geometryInfo.vertexStart;
|
|
958
958
|
|
|
959
|
-
// step the next geometry points to the shifted position
|
|
960
|
-
this._nextIndexStart = geometry.index ? geometryInfo.indexStart + geometryInfo.reservedIndexCount : 0;
|
|
961
|
-
this._nextVertexStart = geometryInfo.vertexStart + geometryInfo.reservedVertexCount;
|
|
962
|
-
|
|
963
959
|
}
|
|
964
960
|
|
|
961
|
+
this._nextIndexStart = nextIndexStart;
|
|
962
|
+
this._nextVertexStart = nextVertexStart;
|
|
963
|
+
this._visibilityChanged = true;
|
|
964
|
+
|
|
965
965
|
return this;
|
|
966
966
|
|
|
967
967
|
}
|
|
@@ -1102,7 +1102,7 @@ class BatchedMesh extends Mesh {
|
|
|
1102
1102
|
* Sets the given color to the defined instance.
|
|
1103
1103
|
*
|
|
1104
1104
|
* @param {number} instanceId - The ID of an instance to set the color of.
|
|
1105
|
-
* @param {Color} color - The color to set the instance to.
|
|
1105
|
+
* @param {Color|Vector4} color - The color to set the instance to. Use a `Vector4` to also define alpha.
|
|
1106
1106
|
* @return {BatchedMesh} A reference to this batched mesh.
|
|
1107
1107
|
*/
|
|
1108
1108
|
setColorAt( instanceId, color ) {
|
|
@@ -1126,13 +1126,29 @@ class BatchedMesh extends Mesh {
|
|
|
1126
1126
|
* Returns the color of the defined instance.
|
|
1127
1127
|
*
|
|
1128
1128
|
* @param {number} instanceId - The ID of an instance to get the color of.
|
|
1129
|
-
* @param {Color} color - The target object that is used to store the method's result.
|
|
1130
|
-
* @return {Color} The instance's color.
|
|
1129
|
+
* @param {Color|Vector4} color - The target object that is used to store the method's result.
|
|
1130
|
+
* @return {Color|Vector4} The instance's color. Use a `Vector4` to also retrieve alpha.
|
|
1131
1131
|
*/
|
|
1132
1132
|
getColorAt( instanceId, color ) {
|
|
1133
1133
|
|
|
1134
1134
|
this.validateInstanceId( instanceId );
|
|
1135
|
-
|
|
1135
|
+
if ( this._colorsTexture === null ) {
|
|
1136
|
+
|
|
1137
|
+
if ( color.isVector4 ) {
|
|
1138
|
+
|
|
1139
|
+
return color.set( 1, 1, 1, 1 );
|
|
1140
|
+
|
|
1141
|
+
} else {
|
|
1142
|
+
|
|
1143
|
+
return color.setRGB( 1, 1, 1 );
|
|
1144
|
+
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
} else {
|
|
1148
|
+
|
|
1149
|
+
return color.fromArray( this._colorsTexture.image.data, instanceId * 4 );
|
|
1150
|
+
|
|
1151
|
+
}
|
|
1136
1152
|
|
|
1137
1153
|
}
|
|
1138
1154
|
|
|
@@ -1512,7 +1528,19 @@ class BatchedMesh extends Mesh {
|
|
|
1512
1528
|
// the indexed version of the multi draw function requires specifying the start
|
|
1513
1529
|
// offset in bytes.
|
|
1514
1530
|
const index = geometry.getIndex();
|
|
1515
|
-
|
|
1531
|
+
let bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;
|
|
1532
|
+
|
|
1533
|
+
|
|
1534
|
+
// the "wireframe" attribute implicitly creates a line attribute in the renderer, which is double
|
|
1535
|
+
// the vertices to draw (3 lines per triangle) so we multiply the draw counts / starts and make
|
|
1536
|
+
// assumptions about the index buffer byte size.
|
|
1537
|
+
let multiDrawMultiplier = 1;
|
|
1538
|
+
if ( material.wireframe ) {
|
|
1539
|
+
|
|
1540
|
+
multiDrawMultiplier = 2;
|
|
1541
|
+
bytesPerElement = geometry.attributes.position.count > 65535 ? 4 : 2;
|
|
1542
|
+
|
|
1543
|
+
}
|
|
1516
1544
|
|
|
1517
1545
|
const instanceInfo = this._instanceInfo;
|
|
1518
1546
|
const multiDrawStarts = this._multiDrawStarts;
|
|
@@ -1593,8 +1621,8 @@ class BatchedMesh extends Mesh {
|
|
|
1593
1621
|
for ( let i = 0, l = list.length; i < l; i ++ ) {
|
|
1594
1622
|
|
|
1595
1623
|
const item = list[ i ];
|
|
1596
|
-
multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement;
|
|
1597
|
-
multiDrawCounts[ multiDrawCount ] = item.count;
|
|
1624
|
+
multiDrawStarts[ multiDrawCount ] = item.start * bytesPerElement * multiDrawMultiplier;
|
|
1625
|
+
multiDrawCounts[ multiDrawCount ] = item.count * multiDrawMultiplier;
|
|
1598
1626
|
indirectArray[ multiDrawCount ] = item.index;
|
|
1599
1627
|
multiDrawCount ++;
|
|
1600
1628
|
|
|
@@ -1624,8 +1652,8 @@ class BatchedMesh extends Mesh {
|
|
|
1624
1652
|
if ( ! culled ) {
|
|
1625
1653
|
|
|
1626
1654
|
const geometryInfo = geometryInfoList[ geometryId ];
|
|
1627
|
-
multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement;
|
|
1628
|
-
multiDrawCounts[ multiDrawCount ] = geometryInfo.count;
|
|
1655
|
+
multiDrawStarts[ multiDrawCount ] = geometryInfo.start * bytesPerElement * multiDrawMultiplier;
|
|
1656
|
+
multiDrawCounts[ multiDrawCount ] = geometryInfo.count * multiDrawMultiplier;
|
|
1629
1657
|
indirectArray[ multiDrawCount ] = i;
|
|
1630
1658
|
multiDrawCount ++;
|
|
1631
1659
|
|
|
@@ -56,6 +56,15 @@ class InstancedMesh extends Mesh {
|
|
|
56
56
|
*/
|
|
57
57
|
this.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );
|
|
58
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Represents the local transformation of all instances of the previous frame.
|
|
61
|
+
* Required for computing velocity. Maintained in {@link InstanceNode}.
|
|
62
|
+
*
|
|
63
|
+
* @type {?InstancedBufferAttribute}
|
|
64
|
+
* @default null
|
|
65
|
+
*/
|
|
66
|
+
this.previousInstanceMatrix = null;
|
|
67
|
+
|
|
59
68
|
/**
|
|
60
69
|
* Represents the color of all instances. You have to set its
|
|
61
70
|
* {@link BufferAttribute#needsUpdate} flag to true if you modify instanced data
|
|
@@ -185,6 +194,8 @@ class InstancedMesh extends Mesh {
|
|
|
185
194
|
|
|
186
195
|
this.instanceMatrix.copy( source.instanceMatrix );
|
|
187
196
|
|
|
197
|
+
if ( source.previousInstanceMatrix !== null ) this.previousInstanceMatrix = source.previousInstanceMatrix.clone();
|
|
198
|
+
|
|
188
199
|
if ( source.morphTexture !== null ) this.morphTexture = source.morphTexture.clone();
|
|
189
200
|
if ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();
|
|
190
201
|
|
|
@@ -202,10 +213,19 @@ class InstancedMesh extends Mesh {
|
|
|
202
213
|
*
|
|
203
214
|
* @param {number} index - The instance index.
|
|
204
215
|
* @param {Color} color - The target object that is used to store the method's result.
|
|
216
|
+
* @return {Color} A reference to the target color.
|
|
205
217
|
*/
|
|
206
218
|
getColorAt( index, color ) {
|
|
207
219
|
|
|
208
|
-
|
|
220
|
+
if ( this.instanceColor === null ) {
|
|
221
|
+
|
|
222
|
+
return color.setRGB( 1, 1, 1 );
|
|
223
|
+
|
|
224
|
+
} else {
|
|
225
|
+
|
|
226
|
+
return color.fromArray( this.instanceColor.array, index * 3 );
|
|
227
|
+
|
|
228
|
+
}
|
|
209
229
|
|
|
210
230
|
}
|
|
211
231
|
|
|
@@ -214,10 +234,11 @@ class InstancedMesh extends Mesh {
|
|
|
214
234
|
*
|
|
215
235
|
* @param {number} index - The instance index.
|
|
216
236
|
* @param {Matrix4} matrix - The target object that is used to store the method's result.
|
|
237
|
+
* @return {Matrix4} A reference to the target matrix.
|
|
217
238
|
*/
|
|
218
239
|
getMatrixAt( index, matrix ) {
|
|
219
240
|
|
|
220
|
-
matrix.fromArray( this.instanceMatrix.array, index * 16 );
|
|
241
|
+
return matrix.fromArray( this.instanceMatrix.array, index * 16 );
|
|
221
242
|
|
|
222
243
|
}
|
|
223
244
|
|
|
@@ -303,6 +324,7 @@ class InstancedMesh extends Mesh {
|
|
|
303
324
|
*
|
|
304
325
|
* @param {number} index - The instance index.
|
|
305
326
|
* @param {Color} color - The instance color.
|
|
327
|
+
* @return {InstancedMesh} A reference to this instanced mesh.
|
|
306
328
|
*/
|
|
307
329
|
setColorAt( index, color ) {
|
|
308
330
|
|
|
@@ -313,19 +335,22 @@ class InstancedMesh extends Mesh {
|
|
|
313
335
|
}
|
|
314
336
|
|
|
315
337
|
color.toArray( this.instanceColor.array, index * 3 );
|
|
338
|
+
return this;
|
|
316
339
|
|
|
317
340
|
}
|
|
318
341
|
|
|
319
342
|
/**
|
|
320
343
|
* Sets the given local transformation matrix to the defined instance. Make sure you set the `needsUpdate` flag of
|
|
321
|
-
* {@link InstancedMesh#instanceMatrix} to `true` after updating all the
|
|
344
|
+
* {@link InstancedMesh#instanceMatrix} to `true` after updating all the matrices.
|
|
322
345
|
*
|
|
323
346
|
* @param {number} index - The instance index.
|
|
324
347
|
* @param {Matrix4} matrix - The local transformation.
|
|
348
|
+
* @return {InstancedMesh} A reference to this instanced mesh.
|
|
325
349
|
*/
|
|
326
350
|
setMatrixAt( index, matrix ) {
|
|
327
351
|
|
|
328
352
|
matrix.toArray( this.instanceMatrix.array, index * 16 );
|
|
353
|
+
return this;
|
|
329
354
|
|
|
330
355
|
}
|
|
331
356
|
|
|
@@ -336,6 +361,7 @@ class InstancedMesh extends Mesh {
|
|
|
336
361
|
* @param {number} index - The instance index.
|
|
337
362
|
* @param {Mesh} object - A mesh which `morphTargetInfluences` property containing the morph target weights
|
|
338
363
|
* of a single instance.
|
|
364
|
+
* @return {InstancedMesh} A reference to this instanced mesh.
|
|
339
365
|
*/
|
|
340
366
|
setMorphAt( index, object ) {
|
|
341
367
|
|
|
@@ -366,6 +392,7 @@ class InstancedMesh extends Mesh {
|
|
|
366
392
|
array[ dataIndex ] = morphBaseInfluence;
|
|
367
393
|
|
|
368
394
|
array.set( objectInfluences, dataIndex + 1 );
|
|
395
|
+
return this;
|
|
369
396
|
|
|
370
397
|
}
|
|
371
398
|
|
package/src/objects/Line.js
CHANGED
|
@@ -81,7 +81,7 @@ class Line extends Object3D {
|
|
|
81
81
|
* morph targets name, the value its attribute index. This member is `undefined`
|
|
82
82
|
* by default and only set when morph targets are detected in the geometry.
|
|
83
83
|
*
|
|
84
|
-
* @type {Object<
|
|
84
|
+
* @type {Object<string,number>|undefined}
|
|
85
85
|
* @default undefined
|
|
86
86
|
*/
|
|
87
87
|
this.morphTargetDictionary = undefined;
|
package/src/objects/Mesh.js
CHANGED
|
@@ -79,7 +79,7 @@ class Mesh extends Object3D {
|
|
|
79
79
|
* morph targets name, the value its attribute index. This member is `undefined`
|
|
80
80
|
* by default and only set when morph targets are detected in the geometry.
|
|
81
81
|
*
|
|
82
|
-
* @type {Object<
|
|
82
|
+
* @type {Object<string,number>|undefined}
|
|
83
83
|
* @default undefined
|
|
84
84
|
*/
|
|
85
85
|
this.morphTargetDictionary = undefined;
|
package/src/objects/Points.js
CHANGED
|
@@ -59,7 +59,7 @@ class Points extends Object3D {
|
|
|
59
59
|
* morph targets name, the value its attribute index. This member is `undefined`
|
|
60
60
|
* by default and only set when morph targets are detected in the geometry.
|
|
61
61
|
*
|
|
62
|
-
* @type {Object<
|
|
62
|
+
* @type {Object<string,number>|undefined}
|
|
63
63
|
* @default undefined
|
|
64
64
|
*/
|
|
65
65
|
this.morphTargetDictionary = undefined;
|
package/src/objects/Skeleton.js
CHANGED
|
@@ -70,6 +70,15 @@ class Skeleton {
|
|
|
70
70
|
*/
|
|
71
71
|
this.boneMatrices = null;
|
|
72
72
|
|
|
73
|
+
/**
|
|
74
|
+
* An array buffer holding the bone data of the previous frame.
|
|
75
|
+
* Required for computing velocity. Maintained in {@link SkinningNode}.
|
|
76
|
+
*
|
|
77
|
+
* @type {?Float32Array}
|
|
78
|
+
* @default null
|
|
79
|
+
*/
|
|
80
|
+
this.previousBoneMatrices = null;
|
|
81
|
+
|
|
73
82
|
/**
|
|
74
83
|
* A texture holding the bone data for use
|
|
75
84
|
* in the vertex shader.
|
|
@@ -8,12 +8,12 @@ import { Ray } from '../math/Ray.js';
|
|
|
8
8
|
import { AttachedBindMode, DetachedBindMode } from '../constants.js';
|
|
9
9
|
import { warn } from '../utils.js';
|
|
10
10
|
|
|
11
|
-
const
|
|
11
|
+
const _baseVector = /*@__PURE__*/ new Vector4();
|
|
12
12
|
|
|
13
13
|
const _skinIndex = /*@__PURE__*/ new Vector4();
|
|
14
14
|
const _skinWeight = /*@__PURE__*/ new Vector4();
|
|
15
15
|
|
|
16
|
-
const
|
|
16
|
+
const _vector4 = /*@__PURE__*/ new Vector4();
|
|
17
17
|
const _matrix4 = /*@__PURE__*/ new Matrix4();
|
|
18
18
|
const _vertex = /*@__PURE__*/ new Vector3();
|
|
19
19
|
|
|
@@ -309,12 +309,12 @@ class SkinnedMesh extends Mesh {
|
|
|
309
309
|
|
|
310
310
|
/**
|
|
311
311
|
* Applies the bone transform associated with the given index to the given
|
|
312
|
-
*
|
|
312
|
+
* vector. Can be used to transform positions or direction vectors by providing
|
|
313
|
+
* a Vector4 with 1 or 0 in the w component respectively. Returns the updated vector.
|
|
313
314
|
*
|
|
314
315
|
* @param {number} index - The vertex index.
|
|
315
|
-
* @param {Vector3} target - The target object that is used to store the method's result.
|
|
316
|
-
*
|
|
317
|
-
* @return {Vector3} The updated vertex position.
|
|
316
|
+
* @param {Vector3|Vector4} target - The target object that is used to store the method's result.
|
|
317
|
+
* @return {Vector3|Vector4} The updated vertex attribute data.
|
|
318
318
|
*/
|
|
319
319
|
applyBoneTransform( index, target ) {
|
|
320
320
|
|
|
@@ -324,9 +324,19 @@ class SkinnedMesh extends Mesh {
|
|
|
324
324
|
_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );
|
|
325
325
|
_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );
|
|
326
326
|
|
|
327
|
-
|
|
327
|
+
if ( target.isVector4 ) {
|
|
328
|
+
|
|
329
|
+
_baseVector.copy( target );
|
|
330
|
+
target.set( 0, 0, 0, 0 );
|
|
331
|
+
|
|
332
|
+
} else {
|
|
333
|
+
|
|
334
|
+
_baseVector.set( ...target, 1 );
|
|
335
|
+
target.set( 0, 0, 0 );
|
|
328
336
|
|
|
329
|
-
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
_baseVector.applyMatrix4( this.bindMatrix );
|
|
330
340
|
|
|
331
341
|
for ( let i = 0; i < 4; i ++ ) {
|
|
332
342
|
|
|
@@ -338,12 +348,19 @@ class SkinnedMesh extends Mesh {
|
|
|
338
348
|
|
|
339
349
|
_matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );
|
|
340
350
|
|
|
341
|
-
target.addScaledVector(
|
|
351
|
+
target.addScaledVector( _vector4.copy( _baseVector ).applyMatrix4( _matrix4 ), weight );
|
|
342
352
|
|
|
343
353
|
}
|
|
344
354
|
|
|
345
355
|
}
|
|
346
356
|
|
|
357
|
+
if ( target.isVector4 ) {
|
|
358
|
+
|
|
359
|
+
// ensure the homogenous coordinate remains unchanged after vector operations
|
|
360
|
+
target.w = _baseVector.w;
|
|
361
|
+
|
|
362
|
+
}
|
|
363
|
+
|
|
347
364
|
return target.applyMatrix4( this.bindMatrixInverse );
|
|
348
365
|
|
|
349
366
|
}
|