super-three 0.181.0 → 0.185.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 +21332 -19201
- package/build/three.core.js +20908 -19853
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1947 -862
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +37 -16
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +33628 -25197
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +33394 -25000
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +14 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +13 -6
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +127 -86
- 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 +102 -17
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMFrustum.js +31 -6
- package/examples/jsm/csm/CSMShadowNode.js +10 -3
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +14 -1
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +27 -6
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +266 -21
- package/examples/jsm/exporters/PLYExporter.js +286 -73
- package/examples/jsm/exporters/USDZExporter.js +353 -99
- package/examples/jsm/generators/CityGenerator.js +346 -0
- package/examples/jsm/generators/ForestGenerator.js +347 -0
- package/examples/jsm/generators/TerrainGenerator.js +504 -0
- package/examples/jsm/generators/TreeGenerator.js +377 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
- package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/LoftGeometry.js +355 -0
- 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/LightProbeHelper.js +5 -4
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +83 -14
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +244 -91
- package/examples/jsm/inspector/RendererInspector.js +165 -39
- 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 +241 -25
- package/examples/jsm/inspector/tabs/Memory.js +136 -0
- package/examples/jsm/inspector/tabs/Parameters.js +115 -7
- package/examples/jsm/inspector/tabs/Performance.js +24 -9
- package/examples/jsm/inspector/tabs/Settings.js +306 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
- package/examples/jsm/inspector/tabs/Viewer.js +723 -9
- package/examples/jsm/inspector/ui/Graph.js +162 -25
- package/examples/jsm/inspector/ui/Item.js +92 -13
- package/examples/jsm/inspector/ui/List.js +2 -2
- package/examples/jsm/inspector/ui/Profiler.js +1991 -44
- package/examples/jsm/inspector/ui/Style.js +1943 -543
- package/examples/jsm/inspector/ui/Tab.js +226 -5
- package/examples/jsm/inspector/ui/Values.js +126 -8
- package/examples/jsm/inspector/ui/utils.js +143 -10
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/basis/README.md +0 -1
- package/examples/jsm/libs/demuxer_mp4.js +3 -3
- package/examples/jsm/libs/draco/README.md +0 -1
- package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
- package/examples/jsm/libs/mikktspace.module.js +34 -9
- package/examples/jsm/lighting/ClusteredLighting.js +55 -0
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +681 -0
- package/examples/jsm/lines/LineMaterial.js +45 -16
- package/examples/jsm/lines/LineSegments2.js +8 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
- package/examples/jsm/loaders/3DMLoader.js +6 -5
- 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 +51 -18
- package/examples/jsm/loaders/EXRLoader.js +701 -90
- 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 +7 -30
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +58 -17
- package/examples/jsm/loaders/LDrawLoader.js +49 -58
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
- package/examples/jsm/loaders/LWOLoader.js +11 -39
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MaterialXLoader.js +31 -9
- package/examples/jsm/loaders/NRRDLoader.js +5 -5
- package/examples/jsm/loaders/PCDLoader.js +11 -9
- package/examples/jsm/loaders/PLYLoader.js +218 -55
- package/examples/jsm/loaders/SVGLoader.js +549 -497
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +1 -1
- package/examples/jsm/loaders/USDLoader.js +127 -43
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +80 -3
- 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 +504 -344
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4627 -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/TileCreasedNormalsPlugin.js +270 -0
- package/examples/jsm/misc/Volume.js +2 -3
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/GroundedSkybox.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +72 -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/Water2Mesh.js +1 -1
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +27 -15
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +36 -7
- 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/shaders/VolumeShader.js +31 -44
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
- package/examples/jsm/transpiler/Linker.js +1 -1
- 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/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +75 -25
- 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 +3 -3
- 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 +13 -14
- package/examples/jsm/tsl/display/GTAONode.js +40 -17
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -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 +9 -8
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
- 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 +15 -27
- package/examples/jsm/tsl/display/SSGINode.js +96 -62
- package/examples/jsm/tsl/display/SSRNode.js +831 -134
- package/examples/jsm/tsl/display/SSSNode.js +8 -6
- 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/TemporalReprojectNode.js +1023 -0
- 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/ClusteredLightsNode.js +622 -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/tsl/math/curlNoise.js +107 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
- package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
- package/examples/jsm/tsl/utils/RNoise.js +51 -0
- package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/SceneOptimizer.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/ARButton.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +28 -34
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +35 -14
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +13 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +18 -4
- package/src/animation/AnimationClip.js +0 -139
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyBinding.js +2 -2
- 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 +34 -4
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/StereoCamera.js +5 -2
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +43 -9
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +69 -11
- package/src/core/Raycaster.js +3 -3
- package/src/core/RenderTarget.js +19 -6
- package/src/extras/PMREMGenerator.js +13 -22
- package/src/extras/TextureUtils.js +6 -2
- package/src/extras/core/ShapePath.js +149 -160
- 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/SphereGeometry.js +8 -3
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/HemisphereLightHelper.js +5 -0
- package/src/helpers/PointLightHelper.js +3 -25
- package/src/helpers/SpotLightHelper.js +4 -1
- 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 +75 -42
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/LoadingManager.js +5 -0
- package/src/loaders/MaterialLoader.js +37 -266
- package/src/loaders/ObjectLoader.js +48 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +198 -1
- package/src/materials/MeshBasicMaterial.js +24 -0
- package/src/materials/MeshDepthMaterial.js +10 -0
- package/src/materials/MeshDistanceMaterial.js +10 -0
- package/src/materials/MeshLambertMaterial.js +49 -1
- package/src/materials/MeshMatcapMaterial.js +25 -1
- package/src/materials/MeshNormalMaterial.js +9 -1
- package/src/materials/MeshPhongMaterial.js +49 -1
- package/src/materials/MeshPhysicalMaterial.js +38 -0
- package/src/materials/MeshStandardMaterial.js +42 -1
- package/src/materials/MeshToonMaterial.js +35 -2
- package/src/materials/PointsMaterial.js +7 -0
- package/src/materials/ShaderMaterial.js +106 -1
- package/src/materials/SpriteMaterial.js +7 -0
- package/src/materials/nodes/Line2NodeMaterial.js +380 -297
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
- package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
- package/src/materials/nodes/NodeMaterial.js +153 -89
- package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
- package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
- package/src/math/Box3.js +5 -0
- package/src/math/FrustumArray.js +103 -133
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +12 -12
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +24 -9
- package/src/math/Matrix4.js +112 -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 +13 -9
- package/src/math/Vector3.js +17 -15
- package/src/math/Vector4.js +15 -11
- package/src/math/interpolants/BezierInterpolant.js +106 -0
- package/src/nodes/Nodes.js +86 -71
- package/src/nodes/TSL.js +15 -13
- package/src/nodes/accessors/Arrays.js +5 -5
- package/src/nodes/accessors/Batch.js +108 -0
- package/src/nodes/accessors/Bitangent.js +7 -7
- package/src/nodes/accessors/BufferAttributeNode.js +120 -17
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +5 -5
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/Instance.js +264 -0
- package/src/nodes/accessors/MaterialNode.js +27 -3
- package/src/nodes/accessors/MaterialProperties.js +6 -8
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
- package/src/nodes/accessors/Normal.js +24 -24
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +39 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +9 -8
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/Skinning.js +263 -0
- package/src/nodes/accessors/StorageBufferNode.js +16 -27
- package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
- package/src/nodes/accessors/StorageTextureNode.js +74 -11
- package/src/nodes/accessors/Tangent.js +8 -18
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +124 -25
- 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 +4 -19
- 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 +55 -4
- package/src/nodes/core/Node.js +151 -17
- package/src/nodes/core/NodeBuilder.js +479 -101
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +20 -18
- package/src/nodes/core/OutputStructNode.js +13 -11
- package/src/nodes/core/OverrideContextNode.js +153 -0
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +66 -4
- package/src/nodes/core/StackNode.js +91 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +20 -8
- package/src/nodes/core/StructTypeNode.js +17 -23
- 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 +56 -23
- package/src/nodes/core/VaryingNode.js +14 -21
- package/src/nodes/display/BlendModes.js +1 -105
- package/src/nodes/display/BumpMapNode.js +6 -1
- package/src/nodes/display/ColorAdjustment.js +27 -9
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +38 -9
- package/src/nodes/display/NormalMapNode.js +41 -6
- package/src/nodes/display/PassNode.js +157 -56
- package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
- package/src/nodes/display/RenderOutputNode.js +19 -10
- 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/functions/VolumetricLightingModel.js +40 -7
- 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 +5 -5
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +30 -5
- package/src/nodes/lighting/IESSpotLightNode.js +40 -2
- package/src/nodes/lighting/LightingContextNode.js +10 -2
- package/src/nodes/lighting/LightsNode.js +97 -65
- package/src/nodes/lighting/PointShadowNode.js +166 -148
- package/src/nodes/lighting/ShadowFilterNode.js +74 -117
- package/src/nodes/lighting/ShadowNode.js +149 -51
- package/src/nodes/materialx/lib/mx_noise.js +2 -2
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +6 -6
- package/src/nodes/math/MathNode.js +115 -52
- package/src/nodes/math/OperatorNode.js +24 -23
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +34 -3
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +99 -33
- 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/EquirectUV.js +30 -5
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
- 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 +48 -5
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +41 -25
- package/src/nodes/utils/ReflectorNode.js +4 -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/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +66 -30
- package/src/objects/InstancedMesh.js +19 -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/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +344 -156
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +78 -13
- 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 +141 -57
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ClippingContext.js +10 -2
- 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 +374 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +51 -19
- 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/RenderList.js +41 -4
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +88 -16
- 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 +700 -163
- package/src/renderers/common/Sampler.js +16 -48
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +121 -9
- package/src/renderers/common/TimestampQueryPool.js +6 -4
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +84 -1
- package/src/renderers/common/XRManager.js +377 -51
- package/src/renderers/common/extras/PMREMGenerator.js +40 -61
- package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
- package/src/renderers/common/nodes/NodeLibrary.js +4 -4
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -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/common.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
- 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 +3 -1
- 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_begin.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -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 +2 -2
- 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} +2 -3
- 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 +271 -0
- package/src/renderers/webgl/WebGLProgram.js +54 -113
- package/src/renderers/webgl/WebGLPrograms.js +74 -55
- package/src/renderers/webgl/WebGLRenderLists.js +24 -1
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShaderCache.js +5 -11
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +230 -56
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
- 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 +118 -73
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
- package/src/renderers/webgpu/WebGPUBackend.js +733 -302
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
- package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
- package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
- package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
- package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
- package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
- package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
- package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
- package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
- package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
- package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
- package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
- package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
- package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
- package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
- 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 +224 -91
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
- 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/DepthTexture.js +1 -1
- package/src/textures/ExternalTexture.js +0 -3
- 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/fonts/LICENSE +0 -13
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
- package/examples/fonts/README.md +0 -11
- package/examples/fonts/droid/NOTICE +0 -190
- package/examples/fonts/droid/README.txt +0 -18
- package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
- package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
- package/examples/fonts/gentilis_bold.typeface.json +0 -1
- package/examples/fonts/gentilis_regular.typeface.json +0 -1
- package/examples/fonts/helvetiker_bold.typeface.json +0 -1
- package/examples/fonts/helvetiker_regular.typeface.json +0 -1
- package/examples/fonts/optimer_bold.typeface.json +0 -1
- package/examples/fonts/optimer_regular.typeface.json +0 -1
- package/examples/fonts/ttf/README.md +0 -9
- package/examples/fonts/ttf/kenpixel.ttf +0 -0
- package/examples/jsm/libs/ammo.wasm.js +0 -822
- package/examples/jsm/libs/ammo.wasm.wasm +0 -0
- package/examples/jsm/libs/draco/draco_encoder.js +0 -33
- package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
- package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
- package/examples/jsm/libs/opentype.module.js +0 -14506
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lighting/TiledLighting.js +0 -42
- 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/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
- package/src/nodes/accessors/BatchNode.js +0 -163
- package/src/nodes/accessors/InstanceNode.js +0 -244
- package/src/nodes/accessors/InstancedMeshNode.js +0 -50
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/accessors/SkinningNode.js +0 -327
- 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,9 +1,9 @@
|
|
|
1
1
|
import { attribute } from '../core/AttributeNode.js';
|
|
2
2
|
import { cameraViewMatrix } from './Camera.js';
|
|
3
3
|
import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
|
|
4
|
-
import { mat3, vec3, Fn } from '../tsl/TSLBase.js';
|
|
4
|
+
import { mat3, vec3, Fn, addMethodChaining } from '../tsl/TSLBase.js';
|
|
5
5
|
import { positionView } from './Position.js';
|
|
6
|
-
import {
|
|
6
|
+
import { negateOnBackSide } from '../display/FrontFacingNode.js';
|
|
7
7
|
import { warn } from '../../utils.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -52,7 +52,7 @@ export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
52
52
|
|
|
53
53
|
let node;
|
|
54
54
|
|
|
55
|
-
if ( builder.
|
|
55
|
+
if ( builder.isFlatShading() ) {
|
|
56
56
|
|
|
57
57
|
node = normalFlat;
|
|
58
58
|
|
|
@@ -74,9 +74,9 @@ export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
74
74
|
*/
|
|
75
75
|
export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
76
76
|
|
|
77
|
-
let normal = normalViewGeometry.
|
|
77
|
+
let normal = normalViewGeometry.transformNormalByInverseViewMatrix( cameraViewMatrix );
|
|
78
78
|
|
|
79
|
-
if ( builder.
|
|
79
|
+
if ( builder.isFlatShading() !== true ) {
|
|
80
80
|
|
|
81
81
|
normal = normal.toVarying( 'v_normalWorldGeometry' );
|
|
82
82
|
|
|
@@ -92,25 +92,25 @@ export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
92
92
|
* @tsl
|
|
93
93
|
* @type {Node<vec3>}
|
|
94
94
|
*/
|
|
95
|
-
export const normalView = /*@__PURE__*/ ( Fn( (
|
|
95
|
+
export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
96
96
|
|
|
97
97
|
let node;
|
|
98
98
|
|
|
99
|
-
if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
|
|
99
|
+
if ( builder.subBuildFn === 'NORMAL' || builder.subBuildFn === 'VERTEX' ) {
|
|
100
100
|
|
|
101
101
|
node = normalViewGeometry;
|
|
102
102
|
|
|
103
|
-
if (
|
|
103
|
+
if ( builder.isFlatShading() !== true ) {
|
|
104
104
|
|
|
105
|
-
node =
|
|
105
|
+
node = negateOnBackSide( node );
|
|
106
106
|
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
} else {
|
|
110
110
|
|
|
111
|
-
// Use
|
|
111
|
+
// Use custom context to avoid side effects from nodes overwriting getUV, getTextureLevel in the context (e.g. EnvironmentNode)
|
|
112
112
|
|
|
113
|
-
node = context.setupNormal().context( { getUV: null } );
|
|
113
|
+
node = builder.context.setupNormal().context( { getUV: null, getTextureLevel: null } );
|
|
114
114
|
|
|
115
115
|
}
|
|
116
116
|
|
|
@@ -124,7 +124,7 @@ export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context
|
|
|
124
124
|
* @tsl
|
|
125
125
|
* @type {Node<vec3>}
|
|
126
126
|
*/
|
|
127
|
-
export const normalWorld = /*@__PURE__*/ normalView.
|
|
127
|
+
export const normalWorld = /*@__PURE__*/ normalView.transformNormalByInverseViewMatrix( cameraViewMatrix ).toVar( 'normalWorld' );
|
|
128
128
|
|
|
129
129
|
/**
|
|
130
130
|
* TSL object that represents the clearcoat vertex normal of the current rendered object in view space.
|
|
@@ -142,9 +142,9 @@ export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context }
|
|
|
142
142
|
|
|
143
143
|
} else {
|
|
144
144
|
|
|
145
|
-
// Use
|
|
145
|
+
// Use custom context to avoid side effects from nodes overwriting getUV, getTextureLevel in the context (e.g. EnvironmentNode)
|
|
146
146
|
|
|
147
|
-
node = context.setupClearcoatNormal().context( { getUV: null } );
|
|
147
|
+
node = context.setupClearcoatNormal().context( { getUV: null, getTextureLevel: null } );
|
|
148
148
|
|
|
149
149
|
}
|
|
150
150
|
|
|
@@ -153,24 +153,24 @@ export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context }
|
|
|
153
153
|
}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'clearcoatNormalView' );
|
|
154
154
|
|
|
155
155
|
/**
|
|
156
|
-
* Transforms the normal
|
|
156
|
+
* Transforms the normal by the normal matrix of the given matrix and then normalizes the result.
|
|
157
157
|
*
|
|
158
158
|
* @tsl
|
|
159
159
|
* @function
|
|
160
160
|
* @param {Node<vec3>} normal - The normal.
|
|
161
|
-
* @param {Node<mat3>} [matrix=modelWorldMatrix] - The matrix.
|
|
161
|
+
* @param {Node<mat3|mat4>} [matrix=modelWorldMatrix] - The matrix.
|
|
162
162
|
* @return {Node<vec3>} The transformed normal.
|
|
163
163
|
*/
|
|
164
164
|
export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorldMatrix ] ) => {
|
|
165
165
|
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
const transformedNormal = normal.div( vec3( m[ 0 ].dot( m[ 0 ] ), m[ 1 ].dot( m[ 1 ] ), m[ 2 ].dot( m[ 2 ] ) ) );
|
|
166
|
+
const normalMatrix = mat3( matrix ).inverse().transpose();
|
|
169
167
|
|
|
170
|
-
return
|
|
168
|
+
return normalMatrix.mul( normal ).normalize();
|
|
171
169
|
|
|
172
170
|
} );
|
|
173
171
|
|
|
172
|
+
addMethodChaining( 'transformNormal', transformNormal );
|
|
173
|
+
|
|
174
174
|
/**
|
|
175
175
|
* Transforms the given normal from local to view space.
|
|
176
176
|
*
|
|
@@ -182,11 +182,11 @@ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorld
|
|
|
182
182
|
*/
|
|
183
183
|
export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
|
|
184
184
|
|
|
185
|
-
const modelNormalViewMatrix = builder.
|
|
185
|
+
const modelNormalViewMatrix = builder.context.modelNormalViewMatrix;
|
|
186
186
|
|
|
187
|
-
if ( modelNormalViewMatrix
|
|
187
|
+
if ( modelNormalViewMatrix ) {
|
|
188
188
|
|
|
189
|
-
return
|
|
189
|
+
return normal.transformNormalByViewMatrix( modelNormalViewMatrix );
|
|
190
190
|
|
|
191
191
|
}
|
|
192
192
|
|
|
@@ -194,7 +194,7 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
|
|
|
194
194
|
|
|
195
195
|
const transformedNormal = modelNormalMatrix.mul( normal );
|
|
196
196
|
|
|
197
|
-
return
|
|
197
|
+
return transformedNormal.transformNormalByViewMatrix( cameraViewMatrix );
|
|
198
198
|
|
|
199
199
|
} );
|
|
200
200
|
|
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
import { attribute } from '../core/AttributeNode.js';
|
|
2
|
-
import { Fn, vec3 } from '../tsl/TSLCore.js';
|
|
2
|
+
import { Fn, vec3, vec4 } from '../tsl/TSLCore.js';
|
|
3
3
|
import { modelWorldMatrix } from './ModelNode.js';
|
|
4
|
+
import { cameraProjectionMatrixInverse } from './Camera.js';
|
|
5
|
+
import { warnOnce } from '../../utils.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* TSL object that represents the clip space position of the current rendered object.
|
|
9
|
+
*
|
|
10
|
+
* @tsl
|
|
11
|
+
* @type {VaryingNode<vec4>}
|
|
12
|
+
*/
|
|
13
|
+
export const clipSpace = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
14
|
+
|
|
15
|
+
if ( builder.shaderStage !== 'fragment' ) {
|
|
16
|
+
|
|
17
|
+
warnOnce( 'TSL: `clipSpace` is only available in fragment stage.' );
|
|
18
|
+
|
|
19
|
+
return vec4();
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return builder.context.clipSpace.toVarying( 'v_clipSpace' );
|
|
24
|
+
|
|
25
|
+
} ).once() )();
|
|
4
26
|
|
|
5
27
|
/**
|
|
6
28
|
* TSL object that represents the position attribute of the current rendered object.
|
|
@@ -11,7 +33,11 @@ import { modelWorldMatrix } from './ModelNode.js';
|
|
|
11
33
|
export const positionGeometry = /*@__PURE__*/ attribute( 'position', 'vec3' );
|
|
12
34
|
|
|
13
35
|
/**
|
|
14
|
-
* TSL object that represents the vertex position in local space of the current rendered object.
|
|
36
|
+
* TSL object that represents the transformed vertex position in local space of the current rendered object.
|
|
37
|
+
*
|
|
38
|
+
* The term "transformed" indicates that an object or material's properties, such as skinning, batch,
|
|
39
|
+
* instancing, or displacement mapping, will change the vertex position of the node when present.
|
|
40
|
+
* To use the pre-transformed local space position of the object, use {@link positionGeometry}.
|
|
15
41
|
*
|
|
16
42
|
* @tsl
|
|
17
43
|
* @type {AttributeNode<vec3>}
|
|
@@ -61,9 +87,19 @@ export const positionWorldDirection = /*@__PURE__*/ ( Fn( () => {
|
|
|
61
87
|
*/
|
|
62
88
|
export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
63
89
|
|
|
90
|
+
if ( builder.shaderStage === 'fragment' && builder.material.vertexNode ) {
|
|
91
|
+
|
|
92
|
+
// reconstruct view position from clip space
|
|
93
|
+
|
|
94
|
+
const viewPos = cameraProjectionMatrixInverse.mul( clipSpace );
|
|
95
|
+
|
|
96
|
+
return viewPos.xyz.div( viewPos.w ).toVar( 'positionView' );
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
64
100
|
return builder.context.setupPositionView().toVarying( 'v_positionView' );
|
|
65
101
|
|
|
66
|
-
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
102
|
+
}, 'vec3' ).once( [ 'POSITION', 'VERTEX' ] ) )();
|
|
67
103
|
|
|
68
104
|
/**
|
|
69
105
|
* TSL object that represents the position view direction of the current rendered object.
|
|
@@ -4,7 +4,7 @@ import { uniform } from '../core/UniformNode.js';
|
|
|
4
4
|
import { nodeObject } from '../tsl/TSLCore.js';
|
|
5
5
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
6
6
|
|
|
7
|
-
// TODO: Avoid duplicated code and
|
|
7
|
+
// TODO: Avoid duplicated code and use only ReferenceBaseNode or ReferenceNode
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* This class is only relevant if the referenced property is array-like.
|
|
@@ -57,7 +57,7 @@ class ReferenceElementNode extends ArrayElementNode {
|
|
|
57
57
|
*
|
|
58
58
|
* @return {string} The node type.
|
|
59
59
|
*/
|
|
60
|
-
|
|
60
|
+
generateNodeType() {
|
|
61
61
|
|
|
62
62
|
return this.referenceNode.uniformType;
|
|
63
63
|
|
|
@@ -199,7 +199,7 @@ class ReferenceBaseNode extends Node {
|
|
|
199
199
|
*/
|
|
200
200
|
element( indexNode ) {
|
|
201
201
|
|
|
202
|
-
return
|
|
202
|
+
return new ReferenceElementNode( this, nodeObject( indexNode ) );
|
|
203
203
|
|
|
204
204
|
}
|
|
205
205
|
|
|
@@ -230,7 +230,7 @@ class ReferenceBaseNode extends Node {
|
|
|
230
230
|
* @param {NodeBuilder} builder - The current node builder.
|
|
231
231
|
* @return {string} The node type.
|
|
232
232
|
*/
|
|
233
|
-
|
|
233
|
+
generateNodeType( builder ) {
|
|
234
234
|
|
|
235
235
|
if ( this.node === null ) {
|
|
236
236
|
|
|
@@ -340,7 +340,7 @@ export default ReferenceBaseNode;
|
|
|
340
340
|
* @param {Object} object - The object the property belongs to.
|
|
341
341
|
* @returns {ReferenceBaseNode}
|
|
342
342
|
*/
|
|
343
|
-
export const reference = ( name, type, object ) =>
|
|
343
|
+
export const reference = ( name, type, object ) => new ReferenceBaseNode( name, type, object );
|
|
344
344
|
|
|
345
345
|
/**
|
|
346
346
|
* TSL function for creating a reference base node. Use this function if you want need a reference
|
|
@@ -354,4 +354,4 @@ export const reference = ( name, type, object ) => nodeObject( new ReferenceBase
|
|
|
354
354
|
* @param {Object} [object] - An array-like object the property belongs to.
|
|
355
355
|
* @returns {ReferenceBaseNode}
|
|
356
356
|
*/
|
|
357
|
-
export const referenceBuffer = ( name, type, count, object ) =>
|
|
357
|
+
export const referenceBuffer = ( name, type, count, object ) => new ReferenceBaseNode( name, type, object, count );
|
|
@@ -9,7 +9,7 @@ import { uniformArray } from './UniformArrayNode.js';
|
|
|
9
9
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
10
10
|
import { warn } from '../../utils.js';
|
|
11
11
|
|
|
12
|
-
// TODO: Avoid duplicated code and
|
|
12
|
+
// TODO: Avoid duplicated code and use only ReferenceBaseNode or ReferenceNode
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* This class is only relevant if the referenced property is array-like.
|
|
@@ -62,7 +62,7 @@ class ReferenceElementNode extends ArrayElementNode {
|
|
|
62
62
|
*
|
|
63
63
|
* @return {string} The node type.
|
|
64
64
|
*/
|
|
65
|
-
|
|
65
|
+
generateNodeType() {
|
|
66
66
|
|
|
67
67
|
return this.referenceNode.uniformType;
|
|
68
68
|
|
|
@@ -71,8 +71,8 @@ class ReferenceElementNode extends ArrayElementNode {
|
|
|
71
71
|
generate( builder ) {
|
|
72
72
|
|
|
73
73
|
const snippet = super.generate( builder );
|
|
74
|
-
const arrayType = this.referenceNode.getNodeType();
|
|
75
|
-
const elementType = this.getNodeType();
|
|
74
|
+
const arrayType = this.referenceNode.getNodeType( builder );
|
|
75
|
+
const elementType = this.getNodeType( builder );
|
|
76
76
|
|
|
77
77
|
return builder.format( snippet, arrayType, elementType );
|
|
78
78
|
|
|
@@ -198,7 +198,7 @@ class ReferenceNode extends Node {
|
|
|
198
198
|
*/
|
|
199
199
|
element( indexNode ) {
|
|
200
200
|
|
|
201
|
-
return
|
|
201
|
+
return new ReferenceElementNode( this, nodeObject( indexNode ) );
|
|
202
202
|
|
|
203
203
|
}
|
|
204
204
|
|
|
@@ -262,6 +262,7 @@ class ReferenceNode extends Node {
|
|
|
262
262
|
} else if ( Array.isArray( this.getValueFromReference() ) ) {
|
|
263
263
|
|
|
264
264
|
node = uniformArray( null, uniformType );
|
|
265
|
+
node.updateType = NodeUpdateType.OBJECT;
|
|
265
266
|
|
|
266
267
|
} else if ( uniformType === 'texture' ) {
|
|
267
268
|
|
|
@@ -296,7 +297,7 @@ class ReferenceNode extends Node {
|
|
|
296
297
|
* @param {NodeBuilder} builder - The current node builder.
|
|
297
298
|
* @return {string} The node type.
|
|
298
299
|
*/
|
|
299
|
-
|
|
300
|
+
generateNodeType( builder ) {
|
|
300
301
|
|
|
301
302
|
if ( this.node === null ) {
|
|
302
303
|
|
|
@@ -407,7 +408,7 @@ export default ReferenceNode;
|
|
|
407
408
|
* @param {?Object} [object] - The object the property belongs to.
|
|
408
409
|
* @returns {ReferenceNode}
|
|
409
410
|
*/
|
|
410
|
-
export const reference = ( name, type, object ) =>
|
|
411
|
+
export const reference = ( name, type, object ) => new ReferenceNode( name, type, object );
|
|
411
412
|
|
|
412
413
|
/**
|
|
413
414
|
* TSL function for creating a reference node. Use this function if you want need a reference
|
|
@@ -421,4 +422,4 @@ export const reference = ( name, type, object ) => nodeObject( new ReferenceNode
|
|
|
421
422
|
* @param {Object} object - An array-like object the property belongs to.
|
|
422
423
|
* @returns {ReferenceNode}
|
|
423
424
|
*/
|
|
424
|
-
export const referenceBuffer = ( name, type, count, object ) =>
|
|
425
|
+
export const referenceBuffer = ( name, type, count, object ) => new ReferenceNode( name, type, object, count );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { cameraWorldMatrix } from './Camera.js';
|
|
2
2
|
import { normalView } from './Normal.js';
|
|
3
3
|
import { positionViewDirection } from './Position.js';
|
|
4
4
|
import { materialRefractionRatio } from './MaterialProperties.js';
|
|
@@ -25,7 +25,7 @@ export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract(
|
|
|
25
25
|
* @tsl
|
|
26
26
|
* @type {Node<vec3>}
|
|
27
27
|
*/
|
|
28
|
-
export const reflectVector = /*@__PURE__*/ reflectView.transformDirection(
|
|
28
|
+
export const reflectVector = /*@__PURE__*/ reflectView.transformDirection( cameraWorldMatrix ).toVar( 'reflectVector' );
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* Used for sampling cube maps when using cube refraction mapping.
|
|
@@ -33,4 +33,4 @@ export const reflectVector = /*@__PURE__*/ reflectView.transformDirection( camer
|
|
|
33
33
|
* @tsl
|
|
34
34
|
* @type {Node<vec3>}
|
|
35
35
|
*/
|
|
36
|
-
export const refractVector = /*@__PURE__*/ refractView.transformDirection(
|
|
36
|
+
export const refractVector = /*@__PURE__*/ refractView.transformDirection( cameraWorldMatrix ).toVar( 'refractVector' );
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import ReferenceBaseNode from './ReferenceBaseNode.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLCore.js';
|
|
3
2
|
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
4
3
|
|
|
5
4
|
/**
|
|
@@ -76,4 +75,4 @@ export default RendererReferenceNode;
|
|
|
76
75
|
* the node refers to the renderer of the current state.
|
|
77
76
|
* @returns {RendererReferenceNode}
|
|
78
77
|
*/
|
|
79
|
-
export const rendererReference = ( name, type, renderer = null ) =>
|
|
78
|
+
export const rendererReference = ( name, type, renderer = null ) => new RendererReferenceNode( name, type, renderer );
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { UVMapping } from '../../constants.js';
|
|
2
|
+
import { Matrix4 } from '../../math/Matrix4.js';
|
|
3
|
+
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
4
|
+
import { uniform } from '../tsl/TSLBase.js';
|
|
5
|
+
|
|
6
|
+
const _m1 = /*@__PURE__*/ new Matrix4();
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* TSL object that represents the scene's background blurriness.
|
|
10
|
+
*
|
|
11
|
+
* @tsl
|
|
12
|
+
* @type {Node<float>}
|
|
13
|
+
*/
|
|
14
|
+
export const backgroundBlurriness = /*@__PURE__*/ uniform( 0 ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => scene.backgroundBlurriness );
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* TSL object that represents the scene's background intensity.
|
|
18
|
+
*
|
|
19
|
+
* @tsl
|
|
20
|
+
* @type {Node<float>}
|
|
21
|
+
*/
|
|
22
|
+
export const backgroundIntensity = /*@__PURE__*/ uniform( 1 ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => scene.backgroundIntensity );
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* TSL object that represents the scene's background rotation.
|
|
26
|
+
*
|
|
27
|
+
* @tsl
|
|
28
|
+
* @type {Node<mat4>}
|
|
29
|
+
*/
|
|
30
|
+
export const backgroundRotation = /*@__PURE__*/ uniform( new Matrix4() ).setGroup( renderGroup ).onRenderUpdate( ( { scene } ) => {
|
|
31
|
+
|
|
32
|
+
const background = scene.background;
|
|
33
|
+
|
|
34
|
+
if ( ( background !== null && background.isTexture && background.mapping !== UVMapping ) || ( scene.backgroundNode && scene.backgroundNode.isNode ) ) {
|
|
35
|
+
|
|
36
|
+
// note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()
|
|
37
|
+
_m1.makeRotationFromEuler( scene.backgroundRotation ).transpose();
|
|
38
|
+
|
|
39
|
+
} else {
|
|
40
|
+
|
|
41
|
+
_m1.identity();
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return _m1;
|
|
46
|
+
|
|
47
|
+
} );
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
|
|
2
|
+
import { Fn, add, uniform } from '../tsl/TSLBase.js';
|
|
3
|
+
import { attribute } from '../core/AttributeNode.js';
|
|
4
|
+
import { OnObjectUpdate } from '../utils/EventNode.js';
|
|
5
|
+
import { normalLocal } from './Normal.js';
|
|
6
|
+
import { positionLocal, positionPrevious } from './Position.js';
|
|
7
|
+
import { tangentLocal } from './Tangent.js';
|
|
8
|
+
import { reference, referenceBuffer } from './ReferenceNode.js';
|
|
9
|
+
import { buffer } from './BufferNode.js';
|
|
10
|
+
import { storage } from './StorageBufferNode.js';
|
|
11
|
+
import { instanceIndex } from '../core/IndexNode.js';
|
|
12
|
+
|
|
13
|
+
import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
|
|
14
|
+
|
|
15
|
+
const _skeletonsUpdated = /*@__PURE__*/ new WeakMap();
|
|
16
|
+
const _previousBoneMatricesData = /*@__PURE__*/ new WeakMap();
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Computes the skinned position by applying bone matrices based on weights.
|
|
20
|
+
*
|
|
21
|
+
* @param {Node} boneMatrices - The bone matrices buffer or storage node.
|
|
22
|
+
* @param {Node<vec3>} position - The vertex position to transform.
|
|
23
|
+
* @param {Node<mat4>} bindMatrix - The bind matrix node.
|
|
24
|
+
* @param {Node<mat4>} bindMatrixInverse - The inverse bind matrix node.
|
|
25
|
+
* @param {Node<uvec4>} skinIndex - The skin index attribute.
|
|
26
|
+
* @param {Node<vec4>} skinWeight - The skin weight attribute.
|
|
27
|
+
* @returns {Node<vec3>} The skinned position.
|
|
28
|
+
*/
|
|
29
|
+
function getSkinnedPosition( boneMatrices, position, bindMatrix, bindMatrixInverse, skinIndex, skinWeight ) {
|
|
30
|
+
|
|
31
|
+
const boneMatX = boneMatrices.element( skinIndex.x );
|
|
32
|
+
const boneMatY = boneMatrices.element( skinIndex.y );
|
|
33
|
+
const boneMatZ = boneMatrices.element( skinIndex.z );
|
|
34
|
+
const boneMatW = boneMatrices.element( skinIndex.w );
|
|
35
|
+
|
|
36
|
+
// POSITION
|
|
37
|
+
|
|
38
|
+
const skinVertex = bindMatrix.mul( position );
|
|
39
|
+
|
|
40
|
+
const skinned = add(
|
|
41
|
+
boneMatX.mul( skinWeight.x ).mul( skinVertex ),
|
|
42
|
+
boneMatY.mul( skinWeight.y ).mul( skinVertex ),
|
|
43
|
+
boneMatZ.mul( skinWeight.z ).mul( skinVertex ),
|
|
44
|
+
boneMatW.mul( skinWeight.w ).mul( skinVertex )
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
return bindMatrixInverse.mul( skinned ).xyz;
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Computes the skinned normal and tangent vectors by applying bone matrices based on weights.
|
|
53
|
+
*
|
|
54
|
+
* @param {Node} boneMatrices - The bone matrices buffer or storage node.
|
|
55
|
+
* @param {Node<vec3>} normal - The normal vector in local space.
|
|
56
|
+
* @param {Node<vec3>} tangent - The tangent vector in local space.
|
|
57
|
+
* @param {Node<mat4>} bindMatrix - The bind matrix node.
|
|
58
|
+
* @param {Node<mat4>} bindMatrixInverse - The inverse bind matrix node.
|
|
59
|
+
* @param {Node<uvec4>} skinIndex - The skin index attribute.
|
|
60
|
+
* @param {Node<vec4>} skinWeight - The skin weight attribute.
|
|
61
|
+
* @returns {{skinNormal: Node<vec3>, skinTangent: Node<vec3>}} The skinned normal and tangent.
|
|
62
|
+
*/
|
|
63
|
+
function getSkinnedNormalAndTangent( boneMatrices, normal, tangent, bindMatrix, bindMatrixInverse, skinIndex, skinWeight ) {
|
|
64
|
+
|
|
65
|
+
const boneMatX = boneMatrices.element( skinIndex.x );
|
|
66
|
+
const boneMatY = boneMatrices.element( skinIndex.y );
|
|
67
|
+
const boneMatZ = boneMatrices.element( skinIndex.z );
|
|
68
|
+
const boneMatW = boneMatrices.element( skinIndex.w );
|
|
69
|
+
|
|
70
|
+
// NORMAL and TANGENT
|
|
71
|
+
|
|
72
|
+
let skinMatrix = add(
|
|
73
|
+
skinWeight.x.mul( boneMatX ),
|
|
74
|
+
skinWeight.y.mul( boneMatY ),
|
|
75
|
+
skinWeight.z.mul( boneMatZ ),
|
|
76
|
+
skinWeight.w.mul( boneMatW )
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
skinMatrix = bindMatrixInverse.mul( skinMatrix ).mul( bindMatrix );
|
|
80
|
+
|
|
81
|
+
const skinNormal = skinMatrix.transformDirection( normal ).xyz;
|
|
82
|
+
const skinTangent = skinMatrix.transformDirection( tangent ).xyz;
|
|
83
|
+
|
|
84
|
+
return { skinNormal, skinTangent };
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Retrieves or initializes the previous frame skinned position node for motion vectors.
|
|
90
|
+
* Uses a WeakMap to cache previous frame bone matrix arrays and their TSL buffer nodes.
|
|
91
|
+
*
|
|
92
|
+
* @param {SkinnedMesh} skinnedMesh - The skinned mesh.
|
|
93
|
+
* @param {Node<mat4>} bindMatrixNode - The bind matrix node.
|
|
94
|
+
* @param {Node<mat4>} bindMatrixInverseNode - The inverse bind matrix node.
|
|
95
|
+
* @param {Node<uvec4>} skinIndexNode - The skin index attribute.
|
|
96
|
+
* @param {Node<vec4>} skinWeightNode - The skin weight attribute.
|
|
97
|
+
* @returns {Node<vec3>} The skinned position from the previous frame.
|
|
98
|
+
*/
|
|
99
|
+
function getPreviousSkinnedPosition( skinnedMesh, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode ) {
|
|
100
|
+
|
|
101
|
+
const skeleton = skinnedMesh.skeleton;
|
|
102
|
+
|
|
103
|
+
let data = _previousBoneMatricesData.get( skeleton );
|
|
104
|
+
|
|
105
|
+
if ( data === undefined ) {
|
|
106
|
+
|
|
107
|
+
skeleton.update();
|
|
108
|
+
|
|
109
|
+
const previousBoneMatrices = new Float32Array( skeleton.boneMatrices );
|
|
110
|
+
|
|
111
|
+
data = {
|
|
112
|
+
previousBoneMatrices,
|
|
113
|
+
node: buffer( previousBoneMatrices, 'mat4', skeleton.bones.length )
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
_previousBoneMatricesData.set( skeleton, data );
|
|
117
|
+
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return getSkinnedPosition( data.node, positionPrevious, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
|
|
121
|
+
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* TSL function representing the standard skeletal animation vertex shader setup.
|
|
126
|
+
* Transforms positionLocal, normalLocal, and tangentLocal in-place.
|
|
127
|
+
*
|
|
128
|
+
* @tsl
|
|
129
|
+
* @function
|
|
130
|
+
* @param {SkinnedMesh} skinnedMesh - The skinned mesh.
|
|
131
|
+
*/
|
|
132
|
+
export const skinning = /*@__PURE__*/ Fn( ( [ skinnedMesh ], builder ) => {
|
|
133
|
+
|
|
134
|
+
const skinIndexNode = attribute( 'skinIndex', 'uvec4' );
|
|
135
|
+
const skinWeightNode = attribute( 'skinWeight', 'vec4' );
|
|
136
|
+
const bindMatrixNode = reference( 'bindMatrix', 'mat4' );
|
|
137
|
+
const bindMatrixInverseNode = reference( 'bindMatrixInverse', 'mat4' );
|
|
138
|
+
const boneMatricesNode = referenceBuffer( 'skeleton.boneMatrices', 'mat4', skinnedMesh.skeleton.bones.length );
|
|
139
|
+
|
|
140
|
+
OnObjectUpdate( ( { object, frameId } ) => {
|
|
141
|
+
|
|
142
|
+
const skeleton = object.skeleton;
|
|
143
|
+
|
|
144
|
+
if ( _skeletonsUpdated.get( skeleton ) !== frameId ) {
|
|
145
|
+
|
|
146
|
+
_skeletonsUpdated.set( skeleton, frameId );
|
|
147
|
+
|
|
148
|
+
const skeletonData = _previousBoneMatricesData.get( skeleton );
|
|
149
|
+
|
|
150
|
+
if ( skeletonData !== undefined ) {
|
|
151
|
+
|
|
152
|
+
skeletonData.previousBoneMatrices.set( skeleton.boneMatrices );
|
|
153
|
+
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
skeleton.update();
|
|
157
|
+
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
} );
|
|
161
|
+
|
|
162
|
+
if ( builder.needsPreviousData() ) {
|
|
163
|
+
|
|
164
|
+
const previousSkinnedPosition = getPreviousSkinnedPosition( skinnedMesh, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
|
|
165
|
+
|
|
166
|
+
positionPrevious.assign( previousSkinnedPosition );
|
|
167
|
+
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const skinPosition = getSkinnedPosition( boneMatricesNode, positionLocal, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
|
|
171
|
+
positionLocal.assign( skinPosition );
|
|
172
|
+
|
|
173
|
+
if ( builder.hasGeometryAttribute( 'normal' ) ) {
|
|
174
|
+
|
|
175
|
+
const { skinNormal, skinTangent } = getSkinnedNormalAndTangent( boneMatricesNode, normalLocal, tangentLocal, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
|
|
176
|
+
|
|
177
|
+
normalLocal.assign( skinNormal );
|
|
178
|
+
|
|
179
|
+
if ( builder.hasGeometryAttribute( 'tangent' ) ) {
|
|
180
|
+
|
|
181
|
+
tangentLocal.assign( skinTangent );
|
|
182
|
+
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
}, 'void' );
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* TSL function that computes skeletal animation for custom compute passes.
|
|
191
|
+
*
|
|
192
|
+
* @tsl
|
|
193
|
+
* @function
|
|
194
|
+
* @param {SkinnedMesh} skinnedMesh - The skinned mesh.
|
|
195
|
+
* @param {Node<vec3>} [toPosition=null] - The target position node to assign.
|
|
196
|
+
* @returns {Node<vec3>} The computed skinned position node.
|
|
197
|
+
*/
|
|
198
|
+
export const computeSkinning = /*@__PURE__*/ Fn( ( [ skinnedMesh, toPosition = null ], builder ) => {
|
|
199
|
+
|
|
200
|
+
const positionNode = storage( new InstancedBufferAttribute( skinnedMesh.geometry.getAttribute( 'position' ).array, 3 ), 'vec3' ).setPBO( true ).toReadOnly().element( instanceIndex ).toVar();
|
|
201
|
+
const skinIndexNode = storage( new InstancedBufferAttribute( new Uint32Array( skinnedMesh.geometry.getAttribute( 'skinIndex' ).array ), 4 ), 'uvec4' ).setPBO( true ).toReadOnly().element( instanceIndex ).toVar();
|
|
202
|
+
const skinWeightNode = storage( new InstancedBufferAttribute( skinnedMesh.geometry.getAttribute( 'skinWeight' ).array, 4 ), 'vec4' ).setPBO( true ).toReadOnly().element( instanceIndex ).toVar();
|
|
203
|
+
const bindMatrixNode = uniform( skinnedMesh.bindMatrix, 'mat4' );
|
|
204
|
+
const bindMatrixInverseNode = uniform( skinnedMesh.bindMatrixInverse, 'mat4' );
|
|
205
|
+
const boneMatricesNode = buffer( skinnedMesh.skeleton.boneMatrices, 'mat4', skinnedMesh.skeleton.bones.length );
|
|
206
|
+
|
|
207
|
+
const skeleton = skinnedMesh.skeleton;
|
|
208
|
+
|
|
209
|
+
OnObjectUpdate( ( { frameId } ) => {
|
|
210
|
+
|
|
211
|
+
if ( _skeletonsUpdated.get( skeleton ) !== frameId ) {
|
|
212
|
+
|
|
213
|
+
_skeletonsUpdated.set( skeleton, frameId );
|
|
214
|
+
|
|
215
|
+
const state = _previousBoneMatricesData.get( skeleton );
|
|
216
|
+
|
|
217
|
+
if ( state !== undefined ) {
|
|
218
|
+
|
|
219
|
+
state.previousBoneMatrices.set( skeleton.boneMatrices );
|
|
220
|
+
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
skeleton.update();
|
|
224
|
+
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
} );
|
|
228
|
+
|
|
229
|
+
if ( builder.needsPreviousData() ) {
|
|
230
|
+
|
|
231
|
+
const previousSkinnedPosition = getPreviousSkinnedPosition( skinnedMesh, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
|
|
232
|
+
|
|
233
|
+
positionPrevious.assign( previousSkinnedPosition );
|
|
234
|
+
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const skinPosition = getSkinnedPosition( boneMatricesNode, positionNode, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
|
|
238
|
+
|
|
239
|
+
if ( toPosition !== null ) {
|
|
240
|
+
|
|
241
|
+
toPosition.assign( skinPosition );
|
|
242
|
+
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if ( builder.hasGeometryAttribute( 'normal' ) ) {
|
|
246
|
+
|
|
247
|
+
const { skinNormal, skinTangent } = getSkinnedNormalAndTangent( boneMatricesNode, normalLocal, tangentLocal, bindMatrixNode, bindMatrixInverseNode, skinIndexNode, skinWeightNode );
|
|
248
|
+
|
|
249
|
+
normalLocal.assign( skinNormal );
|
|
250
|
+
|
|
251
|
+
if ( builder.hasGeometryAttribute( 'tangent' ) ) {
|
|
252
|
+
|
|
253
|
+
tangentLocal.assign( skinTangent );
|
|
254
|
+
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return skinPosition;
|
|
260
|
+
|
|
261
|
+
} );
|
|
262
|
+
|
|
263
|
+
|