super-three 0.179.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 +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- 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/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -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 +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- 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 +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- 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 +268 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- 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/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- 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/lwo/IFFParser.js +1 -1
- 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 +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -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/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- 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/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- 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/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- 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 +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- 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 +81 -20
- 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 +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- 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 +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- 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 +3 -4
- 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 +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- 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 +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- 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/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.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 -65
- package/src/nodes/TSL.js +11 -8
- 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 +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- 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 +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- 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 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- 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 +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- 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/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- 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 +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- 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/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- 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 +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- 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 +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.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 +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 +152 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- 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 +221 -190
- 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 +4 -1
- 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 +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- 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 +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- 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 +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- 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/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- 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 -144
- 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 -30
- 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
|
@@ -2,10 +2,11 @@ import Node from '../core/Node.js';
|
|
|
2
2
|
import { varyingProperty } from '../core/PropertyNode.js';
|
|
3
3
|
import { instancedBufferAttribute, instancedDynamicBufferAttribute } from './BufferAttributeNode.js';
|
|
4
4
|
import { normalLocal, transformNormal } from './Normal.js';
|
|
5
|
-
import { positionLocal } from './Position.js';
|
|
5
|
+
import { positionLocal, positionPrevious } from './Position.js';
|
|
6
6
|
import { nodeProxy, vec3, mat4 } from '../tsl/TSLBase.js';
|
|
7
7
|
import { NodeUpdateType } from '../core/constants.js';
|
|
8
8
|
import { buffer } from '../accessors/BufferNode.js';
|
|
9
|
+
import { storage } from './StorageBufferNode.js';
|
|
9
10
|
import { instanceIndex } from '../core/IndexNode.js';
|
|
10
11
|
|
|
11
12
|
import { InstancedInterleavedBuffer } from '../../core/InstancedInterleavedBuffer.js';
|
|
@@ -32,8 +33,8 @@ class InstanceNode extends Node {
|
|
|
32
33
|
* Constructs a new instance node.
|
|
33
34
|
*
|
|
34
35
|
* @param {number} count - The number of instances.
|
|
35
|
-
* @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
|
|
36
|
-
* @param {?InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
|
|
36
|
+
* @param {InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
|
|
37
|
+
* @param {?InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
|
|
37
38
|
*/
|
|
38
39
|
constructor( count, instanceMatrix, instanceColor = null ) {
|
|
39
40
|
|
|
@@ -98,6 +99,40 @@ class InstanceNode extends Node {
|
|
|
98
99
|
*/
|
|
99
100
|
this.bufferColor = null;
|
|
100
101
|
|
|
102
|
+
/**
|
|
103
|
+
* The previous instance matrices. Required for computing motion vectors.
|
|
104
|
+
*
|
|
105
|
+
* @type {?Node}
|
|
106
|
+
* @default null
|
|
107
|
+
*/
|
|
108
|
+
this.previousInstanceMatrixNode = null;
|
|
109
|
+
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Tracks whether the matrix data is provided via a storage buffer.
|
|
114
|
+
*
|
|
115
|
+
* @type {boolean}
|
|
116
|
+
*/
|
|
117
|
+
get isStorageMatrix() {
|
|
118
|
+
|
|
119
|
+
const { instanceMatrix } = this;
|
|
120
|
+
|
|
121
|
+
return instanceMatrix && instanceMatrix.isStorageInstancedBufferAttribute === true;
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Tracks whether the color data is provided via a storage buffer.
|
|
127
|
+
*
|
|
128
|
+
* @type {boolean}
|
|
129
|
+
*/
|
|
130
|
+
get isStorageColor() {
|
|
131
|
+
|
|
132
|
+
const { instanceColor } = this;
|
|
133
|
+
|
|
134
|
+
return instanceColor && instanceColor.isStorageInstancedBufferAttribute === true;
|
|
135
|
+
|
|
101
136
|
}
|
|
102
137
|
|
|
103
138
|
/**
|
|
@@ -109,51 +144,39 @@ class InstanceNode extends Node {
|
|
|
109
144
|
*/
|
|
110
145
|
setup( builder ) {
|
|
111
146
|
|
|
112
|
-
const { count, instanceMatrix, instanceColor } = this;
|
|
113
|
-
|
|
114
147
|
let { instanceMatrixNode, instanceColorNode } = this;
|
|
115
148
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
// Both WebGPU and WebGL backends have UBO max limited to 64kb. Matrix count number bigger than 1000 ( 16 * 4 * 1000 = 64kb ) will fallback to attribute.
|
|
119
|
-
|
|
120
|
-
if ( count <= 1000 ) {
|
|
149
|
+
// instance matrix
|
|
121
150
|
|
|
122
|
-
|
|
151
|
+
if ( instanceMatrixNode === null ) {
|
|
123
152
|
|
|
124
|
-
|
|
153
|
+
instanceMatrixNode = this._createInstanceMatrixNode( true, builder );
|
|
125
154
|
|
|
126
|
-
|
|
155
|
+
this.instanceMatrixNode = instanceMatrixNode;
|
|
127
156
|
|
|
128
|
-
|
|
157
|
+
}
|
|
129
158
|
|
|
130
|
-
|
|
159
|
+
// instance color
|
|
131
160
|
|
|
132
|
-
|
|
133
|
-
// F.Signature -> bufferAttribute( array, type, stride, offset )
|
|
134
|
-
bufferFn( buffer, 'vec4', 16, 0 ),
|
|
135
|
-
bufferFn( buffer, 'vec4', 16, 4 ),
|
|
136
|
-
bufferFn( buffer, 'vec4', 16, 8 ),
|
|
137
|
-
bufferFn( buffer, 'vec4', 16, 12 )
|
|
138
|
-
];
|
|
161
|
+
const { instanceColor, isStorageColor } = this;
|
|
139
162
|
|
|
140
|
-
|
|
163
|
+
if ( instanceColor && instanceColorNode === null ) {
|
|
141
164
|
|
|
142
|
-
|
|
165
|
+
if ( isStorageColor ) {
|
|
143
166
|
|
|
144
|
-
|
|
167
|
+
instanceColorNode = storage( instanceColor, 'vec3', Math.max( instanceColor.count, 1 ) ).element( instanceIndex );
|
|
145
168
|
|
|
146
|
-
|
|
169
|
+
} else {
|
|
147
170
|
|
|
148
|
-
|
|
171
|
+
const bufferAttribute = new InstancedBufferAttribute( instanceColor.array, 3 );
|
|
149
172
|
|
|
150
|
-
|
|
173
|
+
const bufferFn = instanceColor.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
|
|
151
174
|
|
|
152
|
-
|
|
175
|
+
this.bufferColor = bufferAttribute;
|
|
153
176
|
|
|
154
|
-
|
|
177
|
+
instanceColorNode = vec3( bufferFn( bufferAttribute, 'vec3', 3, 0 ) );
|
|
155
178
|
|
|
156
|
-
|
|
179
|
+
}
|
|
157
180
|
|
|
158
181
|
this.instanceColorNode = instanceColorNode;
|
|
159
182
|
|
|
@@ -164,6 +187,12 @@ class InstanceNode extends Node {
|
|
|
164
187
|
const instancePosition = instanceMatrixNode.mul( positionLocal ).xyz;
|
|
165
188
|
positionLocal.assign( instancePosition );
|
|
166
189
|
|
|
190
|
+
if ( builder.needsPreviousData() ) {
|
|
191
|
+
|
|
192
|
+
positionPrevious.assign( this.getPreviousInstancedPosition( builder ) );
|
|
193
|
+
|
|
194
|
+
}
|
|
195
|
+
|
|
167
196
|
// NORMAL
|
|
168
197
|
|
|
169
198
|
if ( builder.hasGeometryAttribute( 'normal' ) ) {
|
|
@@ -187,24 +216,120 @@ class InstanceNode extends Node {
|
|
|
187
216
|
}
|
|
188
217
|
|
|
189
218
|
/**
|
|
190
|
-
* Checks if the internal buffers
|
|
219
|
+
* Checks if the internal buffers require an update.
|
|
191
220
|
*
|
|
192
221
|
* @param {NodeFrame} frame - The current node frame.
|
|
193
222
|
*/
|
|
194
|
-
update(
|
|
223
|
+
update( frame ) {
|
|
224
|
+
|
|
225
|
+
if ( this.buffer !== null && this.isStorageMatrix !== true ) {
|
|
226
|
+
|
|
227
|
+
this.buffer.clearUpdateRanges();
|
|
228
|
+
this.buffer.updateRanges.push( ... this.instanceMatrix.updateRanges );
|
|
229
|
+
|
|
230
|
+
// update version if necessary
|
|
231
|
+
|
|
232
|
+
if ( this.instanceMatrix.version !== this.buffer.version ) {
|
|
233
|
+
|
|
234
|
+
this.buffer.version = this.instanceMatrix.version;
|
|
235
|
+
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
if ( this.instanceColor && this.bufferColor !== null && this.isStorageColor !== true ) {
|
|
241
|
+
|
|
242
|
+
this.bufferColor.clearUpdateRanges();
|
|
243
|
+
this.bufferColor.updateRanges.push( ... this.instanceColor.updateRanges );
|
|
244
|
+
|
|
245
|
+
if ( this.instanceColor.version !== this.bufferColor.version ) {
|
|
246
|
+
|
|
247
|
+
this.bufferColor.version = this.instanceColor.version;
|
|
248
|
+
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if ( this.previousInstanceMatrixNode !== null ) {
|
|
254
|
+
|
|
255
|
+
frame.object.previousInstanceMatrix.array.set( this.instanceMatrix.array );
|
|
256
|
+
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Computes the transformed/instanced vertex position of the previous frame.
|
|
263
|
+
*
|
|
264
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
265
|
+
* @return {Node<vec3>} The instanced position from the previous frame.
|
|
266
|
+
*/
|
|
267
|
+
getPreviousInstancedPosition( builder ) {
|
|
268
|
+
|
|
269
|
+
const instancedMesh = builder.object;
|
|
195
270
|
|
|
196
|
-
if ( this.
|
|
271
|
+
if ( this.previousInstanceMatrixNode === null ) {
|
|
197
272
|
|
|
198
|
-
|
|
273
|
+
instancedMesh.previousInstanceMatrix = this.instanceMatrix.clone();
|
|
274
|
+
|
|
275
|
+
this.previousInstanceMatrixNode = this._createInstanceMatrixNode( false, builder );
|
|
199
276
|
|
|
200
277
|
}
|
|
201
278
|
|
|
202
|
-
|
|
279
|
+
return this.previousInstanceMatrixNode.mul( positionPrevious ).xyz;
|
|
280
|
+
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Creates a node representing the instance matrix data.
|
|
285
|
+
*
|
|
286
|
+
* @private
|
|
287
|
+
* @param {boolean} assignBuffer - Whether the created interleaved buffer should be assigned to the `buffer` member or not.
|
|
288
|
+
* @param {NodeBuilder} builder - A reference to the current node builder.
|
|
289
|
+
* @return {Node} The instance matrix node.
|
|
290
|
+
*/
|
|
291
|
+
_createInstanceMatrixNode( assignBuffer, builder ) {
|
|
292
|
+
|
|
293
|
+
let instanceMatrixNode;
|
|
294
|
+
|
|
295
|
+
const { instanceMatrix } = this;
|
|
296
|
+
const { count } = instanceMatrix;
|
|
297
|
+
|
|
298
|
+
if ( this.isStorageMatrix ) {
|
|
299
|
+
|
|
300
|
+
instanceMatrixNode = storage( instanceMatrix, 'mat4', Math.max( count, 1 ) ).element( instanceIndex );
|
|
301
|
+
|
|
302
|
+
} else {
|
|
303
|
+
|
|
304
|
+
const uniformBufferSize = count * 16 * 4; // count * 16 components * 4 bytes (float)
|
|
305
|
+
|
|
306
|
+
if ( uniformBufferSize <= builder.getUniformBufferLimit() ) {
|
|
307
|
+
|
|
308
|
+
instanceMatrixNode = buffer( instanceMatrix.array, 'mat4', Math.max( count, 1 ) ).element( instanceIndex );
|
|
309
|
+
|
|
310
|
+
} else {
|
|
311
|
+
|
|
312
|
+
const interleaved = new InstancedInterleavedBuffer( instanceMatrix.array, 16, 1 );
|
|
203
313
|
|
|
204
|
-
|
|
314
|
+
if ( assignBuffer === true ) this.buffer = interleaved;
|
|
315
|
+
|
|
316
|
+
const bufferFn = instanceMatrix.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
|
|
317
|
+
|
|
318
|
+
const instanceBuffers = [
|
|
319
|
+
bufferFn( interleaved, 'vec4', 16, 0 ),
|
|
320
|
+
bufferFn( interleaved, 'vec4', 16, 4 ),
|
|
321
|
+
bufferFn( interleaved, 'vec4', 16, 8 ),
|
|
322
|
+
bufferFn( interleaved, 'vec4', 16, 12 )
|
|
323
|
+
];
|
|
324
|
+
|
|
325
|
+
instanceMatrixNode = mat4( ...instanceBuffers );
|
|
326
|
+
|
|
327
|
+
}
|
|
205
328
|
|
|
206
329
|
}
|
|
207
330
|
|
|
331
|
+
return instanceMatrixNode;
|
|
332
|
+
|
|
208
333
|
}
|
|
209
334
|
|
|
210
335
|
}
|
|
@@ -217,8 +342,8 @@ export default InstanceNode;
|
|
|
217
342
|
* @tsl
|
|
218
343
|
* @function
|
|
219
344
|
* @param {number} count - The number of instances.
|
|
220
|
-
* @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
|
|
221
|
-
* @param {?InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
|
|
345
|
+
* @param {InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
|
|
346
|
+
* @param {?InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
|
|
222
347
|
* @returns {InstanceNode}
|
|
223
348
|
*/
|
|
224
349
|
export const instance = /*@__PURE__*/ nodeProxy( InstanceNode ).setParameterLength( 2, 3 );
|
|
@@ -32,8 +32,18 @@ export function lightShadowMatrix( light ) {
|
|
|
32
32
|
|
|
33
33
|
return data.shadowMatrix || ( data.shadowMatrix = uniform( 'mat4' ).setGroup( renderGroup ).onRenderUpdate( ( frame ) => {
|
|
34
34
|
|
|
35
|
+
// normally, shadow matrices are updated in ShadowNode. However, if the shadow matrix is used outside
|
|
36
|
+
// of shadow rendering (like in ProjectorLightNode), the shadow matrix still requires an update
|
|
37
|
+
|
|
35
38
|
if ( light.castShadow !== true || frame.renderer.shadowMap.enabled === false ) {
|
|
36
39
|
|
|
40
|
+
if ( light.shadow.camera.coordinateSystem !== frame.camera.coordinateSystem ) {
|
|
41
|
+
|
|
42
|
+
light.shadow.camera.coordinateSystem = frame.camera.coordinateSystem;
|
|
43
|
+
light.shadow.camera.updateProjectionMatrix();
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
37
47
|
light.shadow.updateMatrices( light );
|
|
38
48
|
|
|
39
49
|
}
|
|
@@ -7,6 +7,8 @@ import { uniform } from '../core/UniformNode.js';
|
|
|
7
7
|
import { normalMap } from '../display/NormalMapNode.js';
|
|
8
8
|
import { bumpMap } from '../display/BumpMapNode.js';
|
|
9
9
|
import { Vector2 } from '../../math/Vector2.js';
|
|
10
|
+
import { RGFormat, RED_GREEN_RGTC2_Format, RG11_EAC_Format, NormalRGPacking } from '../../constants.js';
|
|
11
|
+
|
|
10
12
|
|
|
11
13
|
const _propertyCache = new Map();
|
|
12
14
|
|
|
@@ -235,6 +237,12 @@ class MaterialNode extends Node {
|
|
|
235
237
|
node = normalMap( this.getTexture( 'normal' ), this.getCache( 'normalScale', 'vec2' ) );
|
|
236
238
|
node.normalMapType = material.normalMapType;
|
|
237
239
|
|
|
240
|
+
if ( material.normalMap.format == RGFormat || material.normalMap.format == RED_GREEN_RGTC2_Format || material.normalMap.format == RG11_EAC_Format ) {
|
|
241
|
+
|
|
242
|
+
node.unpackNormalMode = NormalRGPacking;
|
|
243
|
+
|
|
244
|
+
}
|
|
245
|
+
|
|
238
246
|
} else if ( material.bumpMap ) {
|
|
239
247
|
|
|
240
248
|
node = bumpMap( this.getTexture( 'bump' ).r, this.getFloat( 'bumpScale' ) );
|
|
@@ -313,7 +321,7 @@ class MaterialNode extends Node {
|
|
|
313
321
|
|
|
314
322
|
}
|
|
315
323
|
|
|
316
|
-
node = node.clamp( 0.
|
|
324
|
+
node = node.clamp( 0.0001, 1.0 );
|
|
317
325
|
|
|
318
326
|
} else if ( scope === MaterialNode.ANISOTROPY ) {
|
|
319
327
|
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { Euler } from '../../math/Euler.js';
|
|
2
1
|
import { Matrix4 } from '../../math/Matrix4.js';
|
|
3
2
|
import { uniform } from '../core/UniformNode.js';
|
|
4
3
|
|
|
5
|
-
const _e1 = /*@__PURE__*/ new Euler();
|
|
6
4
|
const _m1 = /*@__PURE__*/ new Matrix4();
|
|
7
5
|
|
|
8
6
|
/**
|
|
@@ -44,9 +42,8 @@ export const materialEnvRotation = /*@__PURE__*/ uniform( new Matrix4() ).onRefe
|
|
|
44
42
|
|
|
45
43
|
if ( rotation ) {
|
|
46
44
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
_m1.makeRotationFromEuler( _e1 );
|
|
45
|
+
// note: since the matrix is orthonormal, we can use the more-efficient transpose() in lieu of invert()
|
|
46
|
+
_m1.makeRotationFromEuler( rotation ).transpose();
|
|
50
47
|
|
|
51
48
|
} else {
|
|
52
49
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import ReferenceNode from './ReferenceNode.js';
|
|
2
|
-
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* This node is a special type of reference node which is intended
|
|
@@ -82,4 +81,4 @@ export default MaterialReferenceNode;
|
|
|
82
81
|
* When no material is set, the node refers to the material of the current rendered object.
|
|
83
82
|
* @returns {MaterialReferenceNode}
|
|
84
83
|
*/
|
|
85
|
-
export const materialReference = ( name, type, material = null ) =>
|
|
84
|
+
export const materialReference = ( name, type, material = null ) => new MaterialReferenceNode( name, type, material );
|
|
@@ -123,7 +123,7 @@ export const modelWorldMatrixInverse = /*@__PURE__*/ uniform( new Matrix4() ).on
|
|
|
123
123
|
*/
|
|
124
124
|
export const modelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
125
125
|
|
|
126
|
-
return builder.
|
|
126
|
+
return builder.context.modelViewMatrix || mediumpModelViewMatrix;
|
|
127
127
|
|
|
128
128
|
} ).once() )().toVar( 'modelViewMatrix' );
|
|
129
129
|
|
|
@@ -4,6 +4,7 @@ import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
|
|
|
4
4
|
import { mat3, vec3, Fn } from '../tsl/TSLBase.js';
|
|
5
5
|
import { positionView } from './Position.js';
|
|
6
6
|
import { directionToFaceDirection } from '../display/FrontFacingNode.js';
|
|
7
|
+
import { warn } from '../../utils.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* TSL object that represents the normal attribute of the current rendered object in local space.
|
|
@@ -23,7 +24,7 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
23
24
|
|
|
24
25
|
if ( builder.geometry.hasAttribute( 'normal' ) === false ) {
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
warn( 'TSL: Vertex attribute "normal" not found on geometry.' );
|
|
27
28
|
|
|
28
29
|
return vec3( 0, 1, 0 );
|
|
29
30
|
|
|
@@ -51,7 +52,7 @@ export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
51
52
|
|
|
52
53
|
let node;
|
|
53
54
|
|
|
54
|
-
if ( builder.
|
|
55
|
+
if ( builder.isFlatShading() ) {
|
|
55
56
|
|
|
56
57
|
node = normalFlat;
|
|
57
58
|
|
|
@@ -75,7 +76,7 @@ export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
75
76
|
|
|
76
77
|
let normal = normalViewGeometry.transformDirection( cameraViewMatrix );
|
|
77
78
|
|
|
78
|
-
if ( builder.
|
|
79
|
+
if ( builder.isFlatShading() !== true ) {
|
|
79
80
|
|
|
80
81
|
normal = normal.toVarying( 'v_normalWorldGeometry' );
|
|
81
82
|
|
|
@@ -91,15 +92,15 @@ export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
91
92
|
* @tsl
|
|
92
93
|
* @type {Node<vec3>}
|
|
93
94
|
*/
|
|
94
|
-
export const normalView = /*@__PURE__*/ ( Fn( (
|
|
95
|
+
export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
95
96
|
|
|
96
97
|
let node;
|
|
97
98
|
|
|
98
|
-
if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
|
|
99
|
+
if ( builder.subBuildFn === 'NORMAL' || builder.subBuildFn === 'VERTEX' ) {
|
|
99
100
|
|
|
100
101
|
node = normalViewGeometry;
|
|
101
102
|
|
|
102
|
-
if (
|
|
103
|
+
if ( builder.isFlatShading() !== true ) {
|
|
103
104
|
|
|
104
105
|
node = directionToFaceDirection( node );
|
|
105
106
|
|
|
@@ -107,9 +108,9 @@ export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context
|
|
|
107
108
|
|
|
108
109
|
} else {
|
|
109
110
|
|
|
110
|
-
// Use
|
|
111
|
+
// Use custom context to avoid side effects from nodes overwriting getUV, getTextureLevel in the context (e.g. EnvironmentNode)
|
|
111
112
|
|
|
112
|
-
node = context.setupNormal().context( { getUV: null } );
|
|
113
|
+
node = builder.context.setupNormal().context( { getUV: null, getTextureLevel: null } );
|
|
113
114
|
|
|
114
115
|
}
|
|
115
116
|
|
|
@@ -141,9 +142,9 @@ export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context }
|
|
|
141
142
|
|
|
142
143
|
} else {
|
|
143
144
|
|
|
144
|
-
// Use
|
|
145
|
+
// Use custom context to avoid side effects from nodes overwriting getUV, getTextureLevel in the context (e.g. EnvironmentNode)
|
|
145
146
|
|
|
146
|
-
node = context.setupClearcoatNormal().context( { getUV: null } );
|
|
147
|
+
node = context.setupClearcoatNormal().context( { getUV: null, getTextureLevel: null } );
|
|
147
148
|
|
|
148
149
|
}
|
|
149
150
|
|
|
@@ -181,9 +182,9 @@ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorld
|
|
|
181
182
|
*/
|
|
182
183
|
export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
|
|
183
184
|
|
|
184
|
-
const modelNormalViewMatrix = builder.
|
|
185
|
+
const modelNormalViewMatrix = builder.context.modelNormalViewMatrix;
|
|
185
186
|
|
|
186
|
-
if ( modelNormalViewMatrix
|
|
187
|
+
if ( modelNormalViewMatrix ) {
|
|
187
188
|
|
|
188
189
|
return modelNormalViewMatrix.transformDirection( normal );
|
|
189
190
|
|
|
@@ -208,7 +209,7 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
|
|
|
208
209
|
*/
|
|
209
210
|
export const transformedNormalView = ( Fn( () => { // @deprecated, r177
|
|
210
211
|
|
|
211
|
-
|
|
212
|
+
warn( 'TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
|
|
212
213
|
return normalView;
|
|
213
214
|
|
|
214
215
|
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
@@ -222,7 +223,7 @@ export const transformedNormalView = ( Fn( () => { // @deprecated, r177
|
|
|
222
223
|
*/
|
|
223
224
|
export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
|
|
224
225
|
|
|
225
|
-
|
|
226
|
+
warn( 'TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
|
|
226
227
|
return normalWorld;
|
|
227
228
|
|
|
228
229
|
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
@@ -236,7 +237,7 @@ export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
|
|
|
236
237
|
*/
|
|
237
238
|
export const transformedClearcoatNormalView = ( Fn( () => { // @deprecated, r177
|
|
238
239
|
|
|
239
|
-
|
|
240
|
+
warn( 'TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
|
|
240
241
|
return clearcoatNormalView;
|
|
241
242
|
|
|
242
243
|
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
@@ -73,9 +73,9 @@ class Object3DNode extends Node {
|
|
|
73
73
|
/**
|
|
74
74
|
* Overwritten since the node type is inferred from the scope.
|
|
75
75
|
*
|
|
76
|
-
* @return {
|
|
76
|
+
* @return {('mat4'|'vec3'|'float')} The node type.
|
|
77
77
|
*/
|
|
78
|
-
|
|
78
|
+
generateNodeType() {
|
|
79
79
|
|
|
80
80
|
const scope = this.scope;
|
|
81
81
|
|
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
import { attribute } from '../core/AttributeNode.js';
|
|
2
|
-
import { Fn } 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.
|
|
@@ -61,9 +83,19 @@ export const positionWorldDirection = /*@__PURE__*/ ( Fn( () => {
|
|
|
61
83
|
*/
|
|
62
84
|
export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
63
85
|
|
|
86
|
+
if ( builder.shaderStage === 'fragment' && builder.material.vertexNode ) {
|
|
87
|
+
|
|
88
|
+
// reconstruct view position from clip space
|
|
89
|
+
|
|
90
|
+
const viewPos = cameraProjectionMatrixInverse.mul( clipSpace );
|
|
91
|
+
|
|
92
|
+
return viewPos.xyz.div( viewPos.w ).toVar( 'positionView' );
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
64
96
|
return builder.context.setupPositionView().toVarying( 'v_positionView' );
|
|
65
97
|
|
|
66
|
-
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
98
|
+
}, 'vec3' ).once( [ 'POSITION', 'VERTEX' ] ) )();
|
|
67
99
|
|
|
68
100
|
/**
|
|
69
101
|
* TSL object that represents the position view direction of the current rendered object.
|
|
@@ -71,4 +103,20 @@ export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
71
103
|
* @tsl
|
|
72
104
|
* @type {VaryingNode<vec3>}
|
|
73
105
|
*/
|
|
74
|
-
export const positionViewDirection = /*@__PURE__*/
|
|
106
|
+
export const positionViewDirection = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
107
|
+
|
|
108
|
+
let output;
|
|
109
|
+
|
|
110
|
+
if ( builder.camera.isOrthographicCamera ) {
|
|
111
|
+
|
|
112
|
+
output = vec3( 0, 0, 1 );
|
|
113
|
+
|
|
114
|
+
} else {
|
|
115
|
+
|
|
116
|
+
output = positionView.negate().toVarying( 'v_positionViewDirection' ).normalize();
|
|
117
|
+
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return output.toVar( 'positionViewDirection' );
|
|
121
|
+
|
|
122
|
+
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
@@ -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
|
|
|
@@ -211,7 +211,7 @@ class ReferenceBaseNode extends Node {
|
|
|
211
211
|
*/
|
|
212
212
|
setNodeType( uniformType ) {
|
|
213
213
|
|
|
214
|
-
const node = uniform( null, uniformType )
|
|
214
|
+
const node = uniform( null, uniformType );
|
|
215
215
|
|
|
216
216
|
if ( this.group !== null ) {
|
|
217
217
|
|
|
@@ -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 );
|