@needle-tools/three 0.169.20 → 0.183.2-canary.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 +5 -6
- package/build/three.cjs +54178 -56709
- package/build/three.core.js +59506 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +11645 -73012
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +648 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +53905 -51657
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +53884 -51814
- 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 +5 -15
- package/examples/jsm/animation/AnimationClipCreator.js +58 -6
- package/examples/jsm/animation/CCDIKSolver.js +152 -45
- package/examples/jsm/capabilities/WebGL.js +28 -29
- package/examples/jsm/capabilities/WebGPU.js +19 -17
- package/examples/jsm/controls/ArcballControls.js +474 -178
- package/examples/jsm/controls/DragControls.js +100 -58
- package/examples/jsm/controls/FirstPersonControls.js +116 -6
- package/examples/jsm/controls/FlyControls.js +50 -2
- package/examples/jsm/controls/MapControls.js +96 -8
- package/examples/jsm/controls/OrbitControls.js +496 -57
- package/examples/jsm/controls/PointerLockControls.js +115 -22
- package/examples/jsm/controls/TrackballControls.js +166 -14
- package/examples/jsm/controls/TransformControls.js +336 -26
- package/examples/jsm/csm/CSM.js +232 -18
- package/examples/jsm/csm/CSMFrustum.js +61 -4
- package/examples/jsm/csm/CSMHelper.js +50 -0
- package/examples/jsm/csm/CSMShader.js +13 -1
- package/examples/jsm/csm/CSMShadowNode.js +599 -0
- package/examples/jsm/curves/CurveExtras.js +303 -31
- package/examples/jsm/curves/NURBSCurve.js +91 -16
- package/examples/jsm/curves/NURBSSurface.js +52 -6
- package/examples/jsm/curves/NURBSUtils.js +102 -112
- package/examples/jsm/curves/NURBSVolume.js +24 -4
- package/examples/jsm/effects/AnaglyphEffect.js +134 -7
- package/examples/jsm/effects/AsciiEffect.js +69 -22
- package/examples/jsm/effects/OutlineEffect.js +61 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +30 -0
- package/examples/jsm/effects/StereoEffect.js +31 -0
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/DebugEnvironment.js +50 -0
- package/examples/jsm/environments/RoomEnvironment.js +83 -42
- package/examples/jsm/exporters/DRACOExporter.js +56 -14
- package/examples/jsm/exporters/EXRExporter.js +40 -9
- package/examples/jsm/exporters/GLTFExporter.js +502 -169
- package/examples/jsm/exporters/OBJExporter.js +21 -1
- package/examples/jsm/exporters/PLYExporter.js +44 -12
- package/examples/jsm/exporters/STLExporter.js +27 -5
- package/examples/jsm/exporters/USDZExporter.js +781 -291
- package/examples/jsm/geometries/BoxLineGeometry.js +23 -0
- package/examples/jsm/geometries/ConvexGeometry.js +19 -0
- package/examples/jsm/geometries/DecalGeometry.js +91 -30
- package/examples/jsm/geometries/ParametricFunctions.js +100 -0
- package/examples/jsm/geometries/ParametricGeometry.js +38 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
- package/examples/jsm/geometries/TeapotGeometry.js +23 -38
- package/examples/jsm/geometries/TextGeometry.js +48 -29
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeHelper.js +36 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +38 -1
- package/examples/jsm/helpers/OctreeHelper.js +36 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
- package/examples/jsm/helpers/TextureHelper.js +28 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
- package/examples/jsm/helpers/ViewHelper.js +181 -9
- package/examples/jsm/inspector/Inspector.js +487 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Parameters.js +348 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -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 +1975 -0
- package/examples/jsm/inspector/ui/Style.js +1613 -0
- package/examples/jsm/inspector/ui/Tab.js +233 -0
- package/examples/jsm/inspector/ui/Values.js +439 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +43 -12
- package/examples/jsm/interactive/InteractiveGroup.js +170 -52
- package/examples/jsm/interactive/SelectionBox.js +106 -9
- package/examples/jsm/interactive/SelectionHelper.js +76 -30
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +76 -58
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +42 -0
- package/examples/jsm/lights/LightProbeGenerator.js +44 -7
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +50 -14
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +16 -0
- package/examples/jsm/lines/Line2.js +41 -4
- package/examples/jsm/lines/LineGeometry.js +80 -2
- package/examples/jsm/lines/LineMaterial.js +105 -5
- package/examples/jsm/lines/LineSegments2.js +54 -4
- package/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
- package/examples/jsm/lines/Wireframe.js +41 -4
- package/examples/jsm/lines/WireframeGeometry2.js +27 -2
- package/examples/jsm/lines/webgpu/Line2.js +28 -2
- package/examples/jsm/lines/webgpu/LineSegments2.js +59 -24
- package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
- package/examples/jsm/loaders/3DMLoader.js +78 -6
- package/examples/jsm/loaders/3MFLoader.js +148 -7
- package/examples/jsm/loaders/AMFLoader.js +34 -14
- package/examples/jsm/loaders/BVHLoader.js +59 -12
- package/examples/jsm/loaders/ColladaLoader.js +61 -4027
- package/examples/jsm/loaders/DDSLoader.js +68 -1
- package/examples/jsm/loaders/DRACOLoader.js +146 -22
- package/examples/jsm/loaders/EXRLoader.js +255 -34
- package/examples/jsm/loaders/FBXLoader.js +80 -42
- package/examples/jsm/loaders/FontLoader.js +83 -6
- package/examples/jsm/loaders/GCodeLoader.js +71 -14
- package/examples/jsm/loaders/GLTFLoader.js +381 -263
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/IESLoader.js +42 -0
- package/examples/jsm/loaders/KMZLoader.js +39 -6
- package/examples/jsm/loaders/KTX2Loader.js +124 -48
- package/examples/jsm/loaders/KTXLoader.js +31 -10
- package/examples/jsm/loaders/LDrawLoader.js +192 -145
- package/examples/jsm/loaders/LUT3dlLoader.js +47 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +46 -9
- package/examples/jsm/loaders/LUTImageLoader.js +79 -38
- package/examples/jsm/loaders/LWOLoader.js +54 -59
- package/examples/jsm/loaders/LottieLoader.js +54 -1
- package/examples/jsm/loaders/MD2Loader.js +37 -1
- package/examples/jsm/loaders/MDDLoader.js +57 -12
- package/examples/jsm/loaders/MTLLoader.js +60 -35
- package/examples/jsm/loaders/MaterialXLoader.js +268 -34
- package/examples/jsm/loaders/NRRDLoader.js +40 -8
- package/examples/jsm/loaders/OBJLoader.js +51 -2
- package/examples/jsm/loaders/PCDLoader.js +173 -21
- package/examples/jsm/loaders/PDBLoader.js +41 -2
- package/examples/jsm/loaders/PLYLoader.js +70 -39
- package/examples/jsm/loaders/PVRLoader.js +25 -6
- package/examples/jsm/loaders/RGBELoader.js +6 -438
- package/examples/jsm/loaders/STLLoader.js +48 -38
- package/examples/jsm/loaders/SVGLoader.js +119 -25
- package/examples/jsm/loaders/TDSLoader.js +92 -74
- package/examples/jsm/loaders/TGALoader.js +23 -2
- package/examples/jsm/loaders/TIFFLoader.js +23 -0
- package/examples/jsm/loaders/TTFLoader.js +50 -3
- package/examples/jsm/loaders/USDLoader.js +279 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -858
- package/examples/jsm/loaders/UltraHDRLoader.js +338 -166
- package/examples/jsm/loaders/VOXLoader.js +688 -87
- package/examples/jsm/loaders/VRMLLoader.js +121 -12
- package/examples/jsm/loaders/VTKLoader.js +77 -25
- package/examples/jsm/loaders/XYZLoader.js +36 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +77 -77
- package/examples/jsm/loaders/usd/USDAParser.js +822 -0
- package/examples/jsm/loaders/usd/USDCParser.js +1852 -0
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/Capsule.js +91 -14
- package/examples/jsm/math/ColorConverter.js +22 -0
- package/examples/jsm/math/ColorSpaces.js +74 -2
- package/examples/jsm/math/ConvexHull.js +517 -93
- package/examples/jsm/math/ImprovedNoise.js +32 -15
- package/examples/jsm/math/Lut.js +113 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +78 -13
- package/examples/jsm/math/OBB.js +141 -29
- package/examples/jsm/math/Octree.js +283 -7
- package/examples/jsm/math/SimplexNoise.js +68 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +96 -20
- package/examples/jsm/misc/Gyroscope.js +12 -0
- package/examples/jsm/misc/MD2Character.js +117 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +175 -11
- package/examples/jsm/misc/MorphAnimMesh.js +44 -0
- package/examples/jsm/misc/MorphBlendMesh.js +103 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +100 -54
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
- package/examples/jsm/misc/RollerCoaster.js +57 -0
- package/examples/jsm/misc/TubePainter.js +437 -40
- package/examples/jsm/misc/Volume.js +123 -76
- package/examples/jsm/misc/VolumeSlice.js +95 -49
- package/examples/jsm/modifiers/CurveModifier.js +66 -38
- package/examples/jsm/modifiers/CurveModifierGPU.js +42 -19
- package/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +24 -10
- package/examples/jsm/modifiers/TessellateModifier.js +35 -2
- package/examples/jsm/objects/GroundedSkybox.js +25 -6
- package/examples/jsm/objects/Lensflare.js +94 -2
- package/examples/jsm/objects/LensflareMesh.js +64 -10
- package/examples/jsm/objects/MarchingCubes.js +90 -5
- package/examples/jsm/objects/Reflector.js +76 -2
- package/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
- package/examples/jsm/objects/Refractor.js +62 -0
- package/examples/jsm/objects/ShadowMesh.js +54 -4
- package/examples/jsm/objects/Sky.js +106 -16
- package/examples/jsm/objects/SkyMesh.js +211 -38
- package/examples/jsm/objects/Water.js +49 -8
- package/examples/jsm/objects/Water2.js +49 -7
- package/examples/jsm/objects/Water2Mesh.js +50 -9
- package/examples/jsm/objects/WaterMesh.js +136 -43
- package/examples/jsm/physics/AmmoPhysics.js +60 -7
- package/examples/jsm/physics/JoltPhysics.js +65 -12
- package/examples/jsm/physics/RapierPhysics.js +217 -21
- package/examples/jsm/postprocessing/AfterimagePass.js +110 -29
- package/examples/jsm/postprocessing/BloomPass.js +128 -26
- package/examples/jsm/postprocessing/BokehPass.js +99 -22
- package/examples/jsm/postprocessing/ClearPass.js +54 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +59 -10
- package/examples/jsm/postprocessing/EffectComposer.js +140 -6
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +54 -5
- package/examples/jsm/postprocessing/GTAOPass.js +202 -57
- package/examples/jsm/postprocessing/GlitchPass.js +86 -34
- package/examples/jsm/postprocessing/HalftonePass.js +65 -10
- package/examples/jsm/postprocessing/LUTPass.js +38 -8
- package/examples/jsm/postprocessing/MaskPass.js +91 -0
- package/examples/jsm/postprocessing/OutlinePass.js +272 -135
- package/examples/jsm/postprocessing/OutputPass.js +65 -14
- package/examples/jsm/postprocessing/Pass.js +100 -4
- package/examples/jsm/postprocessing/RenderPass.js +94 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +120 -21
- package/examples/jsm/postprocessing/SAOPass.js +128 -55
- package/examples/jsm/postprocessing/SMAAPass.js +106 -75
- package/examples/jsm/postprocessing/SSAARenderPass.js +118 -35
- package/examples/jsm/postprocessing/SSAOPass.js +173 -60
- package/examples/jsm/postprocessing/SSRPass.js +268 -53
- package/examples/jsm/postprocessing/SavePass.js +69 -16
- package/examples/jsm/postprocessing/ShaderPass.js +65 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +79 -24
- package/examples/jsm/postprocessing/TexturePass.js +72 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +168 -59
- package/examples/jsm/renderers/CSS2DRenderer.js +98 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +111 -7
- package/examples/jsm/renderers/Projector.js +288 -32
- package/examples/jsm/renderers/SVGRenderer.js +323 -61
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +3 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +5 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
- package/examples/jsm/shaders/AfterimageShader.js +8 -3
- package/examples/jsm/shaders/BasicShader.js +8 -1
- package/examples/jsm/shaders/BleachBypassShader.js +10 -3
- package/examples/jsm/shaders/BlendShader.js +8 -1
- package/examples/jsm/shaders/BokehShader.js +9 -3
- package/examples/jsm/shaders/BokehShader2.js +11 -4
- package/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
- package/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
- package/examples/jsm/shaders/ColorifyShader.js +8 -1
- package/examples/jsm/shaders/ConvolutionShader.js +9 -38
- package/examples/jsm/shaders/CopyShader.js +8 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +10 -3
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
- package/examples/jsm/shaders/DigitalGlitch.js +10 -7
- package/examples/jsm/shaders/DotScreenShader.js +8 -3
- package/examples/jsm/shaders/ExposureShader.js +8 -1
- package/examples/jsm/shaders/FXAAShader.js +233 -221
- package/examples/jsm/shaders/FilmShader.js +13 -0
- package/examples/jsm/shaders/FocusShader.js +8 -3
- package/examples/jsm/shaders/FreiChenShader.js +10 -3
- package/examples/jsm/shaders/GTAOShader.js +55 -45
- package/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
- package/examples/jsm/shaders/HalftoneShader.js +24 -4
- package/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
- package/examples/jsm/shaders/HueSaturationShader.js +10 -3
- package/examples/jsm/shaders/KaleidoShader.js +11 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +8 -4
- package/examples/jsm/shaders/LuminosityShader.js +8 -2
- package/examples/jsm/shaders/MirrorShader.js +10 -4
- package/examples/jsm/shaders/NormalMapShader.js +7 -2
- package/examples/jsm/shaders/OutputShader.js +19 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +30 -17
- package/examples/jsm/shaders/RGBShiftShader.js +8 -1
- package/examples/jsm/shaders/SAOShader.js +27 -5
- package/examples/jsm/shaders/SMAAShader.js +24 -1
- package/examples/jsm/shaders/SSAOShader.js +37 -6
- package/examples/jsm/shaders/SSRShader.js +32 -6
- package/examples/jsm/shaders/SepiaShader.js +8 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +9 -3
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
- package/examples/jsm/shaders/TechnicolorShader.js +10 -4
- package/examples/jsm/shaders/ToonShader.js +29 -6
- package/examples/jsm/shaders/TriangleBlurShader.js +9 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -6
- package/examples/jsm/shaders/VelocityShader.js +8 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +9 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
- package/examples/jsm/shaders/VignetteShader.js +8 -3
- package/examples/jsm/shaders/VolumeShader.js +11 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +11 -0
- package/examples/jsm/textures/FlakesTexture.js +14 -0
- package/examples/jsm/transpiler/AST.js +436 -31
- package/examples/jsm/transpiler/GLSLDecoder.js +380 -135
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -1
- package/examples/jsm/transpiler/TSLEncoder.js +363 -97
- package/examples/jsm/transpiler/Transpiler.js +50 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +839 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +244 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +549 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/{src/nodes → examples/jsm/tsl}/display/BleachBypass.js +11 -4
- package/examples/jsm/tsl/display/BloomNode.js +534 -0
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +334 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
- package/examples/jsm/tsl/display/FXAANode.js +365 -0
- package/examples/jsm/tsl/display/FilmNode.js +101 -0
- package/examples/jsm/tsl/display/GTAONode.js +571 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +389 -0
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +279 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +762 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +335 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +768 -0
- package/{src/nodes → examples/jsm/tsl}/display/SSAAPassNode.js +120 -49
- package/examples/jsm/tsl/display/SSGINode.js +642 -0
- package/examples/jsm/tsl/display/SSRNode.js +656 -0
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/{src/nodes → examples/jsm/tsl}/display/Sepia.js +9 -2
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +61 -19
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +192 -0
- package/{src/nodes → examples/jsm/tsl}/display/StereoPassNode.js +48 -12
- package/examples/jsm/tsl/display/TRAANode.js +726 -0
- package/examples/jsm/tsl/display/TransitionNode.js +141 -0
- 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 +54 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
- package/examples/jsm/tsl/math/Bayer.js +73 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +70 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +91 -29
- package/examples/jsm/utils/CameraUtils.js +15 -6
- package/examples/jsm/utils/GeometryCompressionUtils.js +23 -30
- package/examples/jsm/utils/GeometryUtils.js +32 -27
- package/examples/jsm/utils/LDrawUtils.js +14 -5
- package/examples/jsm/utils/SceneOptimizer.js +458 -0
- package/examples/jsm/utils/SceneUtils.js +53 -3
- package/examples/jsm/utils/ShadowMapViewer.js +72 -33
- package/examples/jsm/utils/ShadowMapViewerGPU.js +61 -29
- package/examples/jsm/utils/SkeletonUtils.js +48 -0
- package/examples/jsm/utils/SortUtils.js +17 -5
- package/examples/jsm/utils/UVsDebug.js +12 -4
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +16 -0
- package/examples/jsm/utils/{TextureUtilsGPU.js → WebGPUTextureUtils.js} +20 -2
- package/examples/jsm/utils/WorkerPool.js +67 -2
- package/examples/jsm/webxr/ARButton.js +19 -0
- package/examples/jsm/webxr/OculusHandModel.js +84 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
- package/examples/jsm/webxr/Text2D.js +20 -6
- package/examples/jsm/webxr/VRButton.js +31 -0
- package/examples/jsm/webxr/XRButton.js +23 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +94 -3
- package/examples/jsm/webxr/XREstimatedLight.js +35 -4
- package/examples/jsm/webxr/XRHandMeshModel.js +37 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +96 -6
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
- package/examples/jsm/webxr/XRPlanes.js +18 -0
- package/package.json +29 -34
- package/src/Three.Core.js +198 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +641 -0
- package/src/Three.WebGPU.Nodes.js +14 -186
- package/src/Three.WebGPU.js +16 -186
- package/src/Three.js +2 -197
- package/src/animation/AnimationAction.js +263 -31
- package/src/animation/AnimationClip.js +162 -7
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +45 -21
- package/src/animation/AnimationUtils.js +163 -24
- package/src/animation/KeyframeTrack.js +191 -17
- package/src/animation/PropertyBinding.js +91 -16
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/Audio.js +386 -8
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +94 -13
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +37 -0
- package/src/cameras/Camera.js +61 -0
- package/src/cameras/CubeCamera.js +86 -0
- package/src/cameras/OrthographicCamera.js +110 -1
- package/src/cameras/PerspectiveCamera.js +174 -35
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +1546 -11
- package/src/core/BufferAttribute.js +417 -3
- package/src/core/BufferGeometry.js +407 -22
- package/src/core/Clock.js +69 -8
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/GLBufferAttribute.js +113 -2
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +141 -7
- package/src/core/InterleavedBufferAttribute.js +200 -2
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +673 -26
- package/src/core/Raycaster.js +136 -2
- package/src/core/RenderTarget.js +256 -27
- package/src/core/RenderTarget3D.js +48 -0
- package/src/core/Timer.js +184 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +89 -1
- package/src/extras/DataUtils.js +50 -9
- package/src/extras/Earcut.js +18 -779
- package/src/extras/ImageUtils.js +22 -14
- package/src/extras/PMREMGenerator.js +316 -67
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +101 -15
- package/src/extras/core/Curve.js +156 -55
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +34 -2
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +80 -4
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/BoxGeometry.js +39 -0
- package/src/geometries/CapsuleGeometry.js +196 -11
- package/src/geometries/CircleGeometry.js +41 -0
- package/src/geometries/ConeGeometry.js +39 -0
- package/src/geometries/CylinderGeometry.js +42 -2
- package/src/geometries/DodecahedronGeometry.js +33 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +148 -52
- package/src/geometries/IcosahedronGeometry.js +33 -0
- package/src/geometries/LatheGeometry.js +44 -3
- package/src/geometries/OctahedronGeometry.js +33 -0
- package/src/geometries/PlaneGeometry.js +35 -0
- package/src/geometries/PolyhedronGeometry.js +30 -1
- package/src/geometries/RingGeometry.js +37 -0
- package/src/geometries/ShapeGeometry.js +38 -0
- package/src/geometries/SphereGeometry.js +38 -0
- package/src/geometries/TetrahedronGeometry.js +33 -0
- package/src/geometries/TorusGeometry.js +44 -3
- package/src/geometries/TorusKnotGeometry.js +39 -0
- package/src/geometries/TubeGeometry.js +50 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +62 -5
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +103 -27
- package/src/helpers/DirectionalLightHelper.js +55 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +42 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -24
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +73 -7
- package/src/helpers/SpotLightHelper.js +43 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +70 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +42 -0
- package/src/lights/Light.js +37 -11
- package/src/lights/LightProbe.js +37 -9
- package/src/lights/LightShadow.js +202 -7
- package/src/lights/PointLight.js +74 -0
- package/src/lights/PointLightShadow.js +15 -80
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +124 -1
- package/src/lights/SpotLightShadow.js +33 -3
- package/src/lights/webgpu/IESSpotLight.js +22 -0
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/AnimationLoader.js +34 -2
- package/src/loaders/AudioLoader.js +34 -2
- package/src/loaders/BufferGeometryLoader.js +38 -13
- package/src/loaders/Cache.js +75 -2
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +45 -4
- package/src/loaders/FileLoader.js +85 -5
- package/src/loaders/ImageBitmapLoader.js +113 -11
- package/src/loaders/ImageLoader.js +85 -8
- package/src/loaders/Loader.js +144 -0
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +187 -0
- package/src/loaders/MaterialLoader.js +62 -3
- package/src/loaders/ObjectLoader.js +131 -31
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +68 -4
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -1
- package/src/materials/Material.js +502 -8
- package/src/materials/MeshBasicMaterial.js +168 -2
- package/src/materials/MeshDepthMaterial.js +94 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +283 -0
- package/src/materials/MeshMatcapMaterial.js +164 -0
- package/src/materials/MeshNormalMaterial.js +114 -0
- package/src/materials/MeshPhongMaterial.js +298 -0
- package/src/materials/MeshPhysicalMaterial.js +296 -4
- package/src/materials/MeshStandardMaterial.js +300 -2
- package/src/materials/MeshToonMaterial.js +219 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +234 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +158 -53
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +81 -6
- package/src/materials/nodes/MeshBasicNodeMaterial.js +59 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +23 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +27 -4
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +276 -3
- package/src/materials/nodes/MeshSSSNodeMaterial.js +98 -10
- package/src/materials/nodes/MeshStandardNodeMaterial.js +83 -4
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +789 -74
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +180 -11
- package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +86 -23
- package/src/materials/nodes/VolumeNodeMaterial.js +57 -84
- package/src/materials/nodes/manager/NodeMaterialObserver.js +329 -12
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +271 -0
- package/src/math/Color.js +355 -11
- package/src/math/ColorManagement.js +158 -92
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +139 -5
- package/src/math/Frustum.js +108 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +221 -2
- package/src/math/MathUtils.js +408 -20
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +489 -94
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +322 -90
- package/src/math/Ray.js +162 -0
- package/src/math/Sphere.js +175 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +206 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -15
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +91 -88
- package/src/nodes/TSL.js +32 -38
- package/src/nodes/accessors/AccessorsUtils.js +37 -9
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +49 -14
- package/src/nodes/accessors/Bitangent.js +82 -13
- package/src/nodes/accessors/BufferAttributeNode.js +269 -8
- package/src/nodes/accessors/BufferNode.js +91 -2
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +400 -10
- package/src/nodes/accessors/ClippingNode.js +149 -45
- package/src/nodes/accessors/CubeTextureNode.js +137 -7
- package/src/nodes/accessors/InstanceNode.js +245 -40
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +88 -0
- package/src/nodes/accessors/MaterialNode.js +355 -13
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +52 -14
- package/src/nodes/accessors/ModelNode.js +117 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -39
- package/src/nodes/accessors/MorphNode.js +73 -26
- package/src/nodes/accessors/Normal.js +174 -19
- package/src/nodes/accessors/Object3DNode.js +146 -12
- package/src/nodes/accessors/PointUVNode.js +25 -0
- package/src/nodes/accessors/Position.js +119 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +190 -4
- package/src/nodes/accessors/ReferenceNode.js +223 -8
- package/src/nodes/accessors/ReflectVector.js +29 -3
- package/src/nodes/accessors/RendererReferenceNode.js +45 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +180 -43
- package/src/nodes/accessors/StorageBufferNode.js +278 -26
- package/src/nodes/accessors/StorageTextureNode.js +205 -12
- package/src/nodes/accessors/Tangent.js +48 -10
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +104 -11
- package/src/nodes/accessors/TextureBicubic.js +31 -4
- package/src/nodes/accessors/TextureNode.js +564 -52
- package/src/nodes/accessors/TextureSizeNode.js +42 -1
- package/src/nodes/accessors/UV.js +9 -1
- package/src/nodes/accessors/UniformArrayNode.js +226 -34
- package/src/nodes/accessors/UserDataNode.js +46 -2
- package/src/nodes/accessors/VelocityNode.js +93 -3
- package/src/nodes/accessors/VertexColorNode.js +39 -4
- package/src/nodes/code/CodeNode.js +101 -8
- package/src/nodes/code/ExpressionNode.js +29 -2
- package/src/nodes/code/FunctionCallNode.js +98 -10
- package/src/nodes/code/FunctionNode.js +69 -2
- package/src/nodes/core/ArrayNode.js +174 -0
- package/src/nodes/core/AssignNode.js +80 -9
- package/src/nodes/core/AttributeNode.js +47 -4
- package/src/nodes/core/BypassNode.js +47 -3
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +220 -14
- package/src/nodes/core/IndexNode.js +72 -7
- package/src/nodes/core/InputNode.js +50 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/IsolateNode.js +133 -0
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +113 -2
- package/src/nodes/core/Node.js +595 -36
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1840 -121
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +153 -24
- package/src/nodes/core/NodeFunction.js +48 -1
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +13 -1
- package/src/nodes/core/NodeUniform.js +53 -1
- package/src/nodes/core/NodeUtils.js +201 -51
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +47 -1
- package/src/nodes/core/OutputStructNode.js +54 -12
- package/src/nodes/core/ParameterNode.js +60 -2
- package/src/nodes/core/PropertyNode.js +286 -7
- package/src/nodes/core/StackNode.js +337 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +134 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +126 -6
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +85 -7
- package/src/nodes/core/UniformNode.js +163 -16
- package/src/nodes/core/VarNode.js +317 -10
- package/src/nodes/core/VaryingNode.js +115 -13
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +171 -0
- package/src/nodes/display/BumpMapNode.js +38 -2
- package/src/nodes/display/ColorAdjustment.js +118 -6
- package/src/nodes/display/ColorSpaceFunctions.js +22 -6
- package/src/nodes/display/ColorSpaceNode.js +97 -47
- package/src/nodes/display/FrontFacingNode.js +64 -7
- package/src/nodes/display/NormalMapNode.js +101 -54
- package/src/nodes/display/PassNode.js +690 -33
- package/src/nodes/display/RenderOutputNode.js +94 -4
- package/src/nodes/display/ScreenNode.js +138 -27
- package/src/nodes/display/ToneMappingFunctions.js +62 -10
- package/src/nodes/display/ToneMappingNode.js +88 -8
- package/src/nodes/display/ToonOutlinePassNode.js +84 -4
- package/src/nodes/display/ViewportDepthNode.js +227 -10
- package/src/nodes/display/ViewportDepthTextureNode.js +39 -5
- package/src/nodes/display/ViewportSharedTextureNode.js +35 -1
- package/src/nodes/display/ViewportTextureNode.js +171 -7
- package/src/nodes/fog/Fog.js +97 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +45 -1
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
- package/src/nodes/functions/BasicLightingModel.js +28 -6
- package/src/nodes/functions/PhongLightingModel.js +36 -6
- package/src/nodes/functions/PhysicalLightingModel.js +336 -91
- package/src/nodes/functions/ShadowMaskModel.js +30 -3
- package/src/nodes/functions/ToonLightingModel.js +21 -2
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/geometry/RangeNode.js +97 -8
- package/src/nodes/gpgpu/AtomicFunctionNode.js +198 -23
- package/src/nodes/gpgpu/BarrierNode.js +52 -3
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +135 -6
- package/src/nodes/gpgpu/ComputeNode.js +212 -16
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +143 -9
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +186 -399
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +12 -11
- package/src/nodes/lighting/EnvironmentNode.js +59 -19
- package/src/nodes/lighting/HemisphereLightNode.js +33 -2
- package/src/nodes/lighting/IESSpotLightNode.js +13 -1
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +11 -3
- package/src/nodes/lighting/LightingContextNode.js +52 -4
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +238 -35
- package/src/nodes/lighting/PointLightNode.js +60 -25
- package/src/nodes/lighting/PointShadowNode.js +325 -0
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/RectAreaLightNode.js +50 -14
- package/src/nodes/lighting/ShadowBaseNode.js +81 -0
- package/src/nodes/lighting/ShadowFilterNode.js +264 -0
- package/src/nodes/lighting/ShadowNode.js +867 -0
- package/src/nodes/lighting/SpotLightNode.js +99 -18
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +110 -21
- package/src/nodes/math/Hash.js +8 -0
- package/src/nodes/math/MathNode.js +820 -97
- package/src/nodes/math/MathUtils.js +47 -1
- package/src/nodes/math/OperatorNode.js +517 -84
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/TriNoise3D.js +17 -7
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +180 -23
- package/src/nodes/pmrem/PMREMUtils.js +114 -5
- package/src/nodes/procedural/Checker.js +8 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +10 -4
- package/src/nodes/tsl/TSLCore.js +732 -160
- package/src/nodes/utils/ArrayElementNode.js +55 -4
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +79 -2
- package/src/nodes/utils/DebugNode.js +83 -0
- package/src/nodes/utils/Discard.js +18 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +118 -0
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +91 -22
- package/src/nodes/utils/JoinNode.js +57 -4
- package/src/nodes/utils/LoopNode.js +193 -55
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -1
- package/src/nodes/utils/MemberNode.js +120 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +30 -1
- package/src/nodes/utils/PostProcessingUtils.js +154 -0
- package/src/nodes/utils/RTTNode.js +165 -9
- package/src/nodes/utils/ReflectorNode.js +407 -21
- package/src/nodes/utils/RemapNode.js +81 -2
- package/src/nodes/utils/RotateNode.js +41 -1
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +66 -3
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/SpriteUtils.js +16 -0
- package/src/nodes/utils/StorageArrayElementNode.js +56 -3
- package/src/nodes/utils/Timer.js +26 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/nodes/utils/UVUtils.js +48 -0
- package/src/nodes/utils/ViewportUtils.js +12 -0
- package/src/objects/BatchedMesh.js +798 -309
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +131 -2
- package/src/objects/LOD.js +99 -5
- package/src/objects/Line.js +90 -7
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +20 -1
- package/src/objects/Mesh.js +84 -0
- package/src/objects/Points.js +60 -0
- package/src/objects/Skeleton.js +120 -5
- package/src/objects/SkinnedMesh.js +102 -6
- package/src/objects/Sprite.js +65 -1
- package/src/renderers/WebGL3DRenderTarget.js +26 -0
- package/src/renderers/WebGLArrayRenderTarget.js +26 -0
- package/src/renderers/WebGLCubeRenderTarget.js +41 -5
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +1016 -278
- package/src/renderers/common/Animation.js +123 -14
- package/src/renderers/common/Attributes.js +41 -1
- package/src/renderers/common/Backend.js +623 -44
- package/src/renderers/common/Background.js +99 -16
- package/src/renderers/common/BindGroup.js +37 -2
- package/src/renderers/common/Binding.js +46 -0
- package/src/renderers/common/Bindings.js +211 -20
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +89 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +73 -10
- package/src/renderers/common/ClippingContext.js +172 -87
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +77 -7
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +163 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +81 -36
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Lighting.js +57 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +150 -7
- package/src/renderers/common/PostProcessing.js +22 -84
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +63 -6
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +40 -10
- package/src/renderers/common/RenderContext.js +219 -4
- package/src/renderers/common/RenderContexts.js +54 -17
- package/src/renderers/common/RenderList.js +233 -24
- package/src/renderers/common/RenderLists.js +46 -6
- package/src/renderers/common/RenderObject.js +548 -46
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +133 -15
- package/src/renderers/common/RenderPipeline.js +216 -6
- package/src/renderers/common/Renderer.js +2155 -332
- package/src/renderers/common/RendererUtils.js +200 -0
- package/src/renderers/common/SampledTexture.js +99 -39
- package/src/renderers/common/Sampler.js +148 -1
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageBuffer.js +38 -2
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +65 -0
- package/src/renderers/common/Textures.js +273 -57
- package/src/renderers/common/TimestampQueryPool.js +163 -0
- package/src/renderers/common/Uniform.js +233 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +235 -26
- package/src/renderers/common/XRManager.js +1677 -0
- package/src/renderers/common/XRRenderTarget.js +91 -0
- package/src/renderers/common/extras/PMREMGenerator.js +371 -108
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +95 -17
- package/src/renderers/common/nodes/NodeManager.js +852 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +84 -8
- package/src/renderers/common/nodes/NodeSampler.js +41 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +48 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +81 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- 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/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +154 -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/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +230 -181
- 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/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk.js +3 -3
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +14 -2
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -5
- package/src/renderers/shaders/UniformsLib.js +2 -7
- package/src/renderers/shaders/UniformsUtils.js +21 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLBackground.js +30 -5
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +7 -14
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -35
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +87 -148
- package/src/renderers/webgl/WebGLPrograms.js +53 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +204 -28
- package/src/renderers/webgl/WebGLState.js +88 -56
- package/src/renderers/webgl/WebGLTextures.js +293 -59
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +7 -5
- package/src/renderers/webgl-fallback/WebGLBackend.js +1416 -293
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +785 -92
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +62 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +3 -3
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +584 -20
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +468 -80
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +72 -24
- package/src/renderers/webgpu/WebGPUBackend.js +1517 -428
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +31 -4
- package/src/renderers/webgpu/WebGPURenderer.js +55 -4
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +23 -16
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +37 -42
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +1335 -241
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +32 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +144 -20
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +460 -116
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -4
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +283 -69
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +225 -178
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +583 -191
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +150 -28
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +52 -7
- package/src/renderers/webxr/WebXRManager.js +275 -15
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +88 -0
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +79 -2
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -11
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +106 -4
- package/src/textures/Texture.js +488 -6
- package/src/textures/VideoFrameTexture.js +72 -0
- package/src/textures/VideoTexture.js +78 -6
- package/src/utils.js +322 -3
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -153
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +0 -729
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/RGBMLoader.js +0 -1081
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -432
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -144
- package/examples/jsm/misc/Timer.js +0 -128
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/GodRaysShader.js +0 -321
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/accessors/SceneNode.js +0 -55
- package/src/nodes/code/ScriptableNode.js +0 -505
- package/src/nodes/code/ScriptableValueNode.js +0 -170
- package/src/nodes/core/CacheNode.js +0 -50
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -158
- package/src/nodes/display/AnaglyphPassNode.js +0 -67
- package/src/nodes/display/AnamorphicNode.js +0 -151
- package/src/nodes/display/BlendMode.js +0 -54
- package/src/nodes/display/BloomNode.js +0 -341
- package/src/nodes/display/DenoiseNode.js +0 -204
- package/src/nodes/display/DepthOfFieldNode.js +0 -124
- package/src/nodes/display/DotScreenNode.js +0 -66
- package/src/nodes/display/FXAANode.js +0 -332
- package/src/nodes/display/FilmNode.js +0 -56
- package/src/nodes/display/GTAONode.js +0 -331
- package/src/nodes/display/GaussianBlurNode.js +0 -213
- package/src/nodes/display/Lut3DNode.js +0 -57
- package/src/nodes/display/MotionBlur.js +0 -25
- package/src/nodes/display/ParallaxBarrierPassNode.js +0 -58
- package/src/nodes/display/PixelationPassNode.js +0 -213
- package/src/nodes/display/PosterizeNode.js +0 -33
- package/src/nodes/display/RGBShiftNode.js +0 -53
- package/src/nodes/display/StereoCompositePassNode.js +0 -110
- package/src/nodes/display/TransitionNode.js +0 -80
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/EquirectUVNode.js +0 -36
- package/src/nodes/utils/MatcapUVNode.js +0 -33
- package/src/nodes/utils/OscNode.js +0 -85
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -45
- package/src/nodes/utils/TimerNode.js +0 -97
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -64
- package/src/renderers/common/nodes/Nodes.js +0 -534
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -136
|
@@ -4,11 +4,24 @@ import { textureSize } from './TextureSizeNode.js';
|
|
|
4
4
|
import { colorSpaceToWorking } from '../display/ColorSpaceNode.js';
|
|
5
5
|
import { expression } from '../code/ExpressionNode.js';
|
|
6
6
|
import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
|
|
7
|
-
import { nodeProxy, vec3, nodeObject, int } from '../tsl/TSLBase.js';
|
|
7
|
+
import { nodeProxy, vec3, nodeObject, int, Fn } from '../tsl/TSLBase.js';
|
|
8
|
+
import { step } from '../math/MathNode.js';
|
|
8
9
|
import { NodeUpdateType } from '../core/constants.js';
|
|
9
10
|
|
|
10
|
-
import { IntType, UnsignedIntType } from '../../constants.js';
|
|
11
|
+
import { Compatibility, GreaterCompare, GreaterEqualCompare, IntType, LessCompare, LessEqualCompare, NearestFilter, UnsignedIntType } from '../../constants.js';
|
|
11
12
|
|
|
13
|
+
import { Texture } from '../../textures/Texture.js';
|
|
14
|
+
import { warn, warnOnce } from '../../utils.js';
|
|
15
|
+
|
|
16
|
+
import NodeError from '../core/NodeError.js';
|
|
17
|
+
|
|
18
|
+
const EmptyTexture = /*@__PURE__*/ new Texture();
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* This type of uniform node represents a 2D texture.
|
|
22
|
+
*
|
|
23
|
+
* @augments UniformNode
|
|
24
|
+
*/
|
|
12
25
|
class TextureNode extends UniformNode {
|
|
13
26
|
|
|
14
27
|
static get type() {
|
|
@@ -17,28 +30,146 @@ class TextureNode extends UniformNode {
|
|
|
17
30
|
|
|
18
31
|
}
|
|
19
32
|
|
|
20
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Constructs a new texture node.
|
|
35
|
+
*
|
|
36
|
+
* @param {Texture} [value=EmptyTexture] - The texture.
|
|
37
|
+
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
38
|
+
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
39
|
+
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
40
|
+
*/
|
|
41
|
+
constructor( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) {
|
|
21
42
|
|
|
22
43
|
super( value );
|
|
23
44
|
|
|
45
|
+
/**
|
|
46
|
+
* This flag can be used for type testing.
|
|
47
|
+
*
|
|
48
|
+
* @type {boolean}
|
|
49
|
+
* @readonly
|
|
50
|
+
* @default true
|
|
51
|
+
*/
|
|
24
52
|
this.isTextureNode = true;
|
|
25
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Represents the texture coordinates.
|
|
56
|
+
*
|
|
57
|
+
* @type {?Node<vec2|vec3>}
|
|
58
|
+
* @default null
|
|
59
|
+
*/
|
|
26
60
|
this.uvNode = uvNode;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Represents the mip level that should be selected.
|
|
64
|
+
*
|
|
65
|
+
* @type {?Node<int>}
|
|
66
|
+
* @default null
|
|
67
|
+
*/
|
|
27
68
|
this.levelNode = levelNode;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Represents the bias to be applied during level-of-detail computation.
|
|
72
|
+
*
|
|
73
|
+
* @type {?Node<float>}
|
|
74
|
+
* @default null
|
|
75
|
+
*/
|
|
28
76
|
this.biasNode = biasNode;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Represents a reference value a texture sample is compared to.
|
|
80
|
+
*
|
|
81
|
+
* @type {?Node<float>}
|
|
82
|
+
* @default null
|
|
83
|
+
*/
|
|
29
84
|
this.compareNode = null;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* When using texture arrays, the depth node defines the layer to select.
|
|
88
|
+
*
|
|
89
|
+
* @type {?Node<int>}
|
|
90
|
+
* @default null
|
|
91
|
+
*/
|
|
30
92
|
this.depthNode = null;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* When defined, a texture is sampled using explicit gradients.
|
|
96
|
+
*
|
|
97
|
+
* @type {?Array<Node<vec2>>}
|
|
98
|
+
* @default null
|
|
99
|
+
*/
|
|
31
100
|
this.gradNode = null;
|
|
32
101
|
|
|
102
|
+
/**
|
|
103
|
+
* Represents the optional texel offset applied to the unnormalized texture
|
|
104
|
+
* coordinate before sampling the texture.
|
|
105
|
+
*
|
|
106
|
+
* @type {?Node<ivec2|ivec3>}
|
|
107
|
+
* @default null
|
|
108
|
+
*/
|
|
109
|
+
this.offsetNode = null;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Whether texture values should be sampled or fetched.
|
|
113
|
+
*
|
|
114
|
+
* @type {boolean}
|
|
115
|
+
* @default true
|
|
116
|
+
*/
|
|
33
117
|
this.sampler = true;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Whether the uv transformation matrix should be
|
|
121
|
+
* automatically updated or not. Use `setUpdateMatrix()`
|
|
122
|
+
* if you want to change the value of the property.
|
|
123
|
+
*
|
|
124
|
+
* @type {boolean}
|
|
125
|
+
* @default false
|
|
126
|
+
*/
|
|
34
127
|
this.updateMatrix = false;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* By default the `update()` method is not executed. Depending on
|
|
131
|
+
* whether a uv transformation matrix and/or flipY is applied, `update()`
|
|
132
|
+
* is executed per object.
|
|
133
|
+
*
|
|
134
|
+
* @type {string}
|
|
135
|
+
* @default 'none'
|
|
136
|
+
*/
|
|
35
137
|
this.updateType = NodeUpdateType.NONE;
|
|
36
138
|
|
|
139
|
+
/**
|
|
140
|
+
* The reference node.
|
|
141
|
+
*
|
|
142
|
+
* @type {?Node}
|
|
143
|
+
* @default null
|
|
144
|
+
*/
|
|
37
145
|
this.referenceNode = null;
|
|
38
146
|
|
|
147
|
+
/**
|
|
148
|
+
* The texture value is stored in a private property.
|
|
149
|
+
*
|
|
150
|
+
* @private
|
|
151
|
+
* @type {Texture}
|
|
152
|
+
*/
|
|
39
153
|
this._value = value;
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* The uniform node that represents the uv transformation matrix.
|
|
157
|
+
*
|
|
158
|
+
* @private
|
|
159
|
+
* @type {?UniformNode<mat3>}
|
|
160
|
+
* @default null
|
|
161
|
+
*/
|
|
40
162
|
this._matrixUniform = null;
|
|
41
163
|
|
|
164
|
+
/**
|
|
165
|
+
* The uniform node that represents the y-flip. Only required for WebGL.
|
|
166
|
+
*
|
|
167
|
+
* @private
|
|
168
|
+
* @type {?UniformNode<bool>}
|
|
169
|
+
* @default null
|
|
170
|
+
*/
|
|
171
|
+
this._flipYUniform = null;
|
|
172
|
+
|
|
42
173
|
this.setUpdateMatrix( uvNode === null );
|
|
43
174
|
|
|
44
175
|
}
|
|
@@ -57,18 +188,35 @@ class TextureNode extends UniformNode {
|
|
|
57
188
|
|
|
58
189
|
}
|
|
59
190
|
|
|
191
|
+
/**
|
|
192
|
+
* The texture value.
|
|
193
|
+
*
|
|
194
|
+
* @type {Texture}
|
|
195
|
+
*/
|
|
60
196
|
get value() {
|
|
61
197
|
|
|
62
198
|
return this.referenceNode ? this.referenceNode.value : this._value;
|
|
63
199
|
|
|
64
200
|
}
|
|
65
201
|
|
|
202
|
+
/**
|
|
203
|
+
* Overwritten since the uniform hash is defined by the texture's UUID.
|
|
204
|
+
*
|
|
205
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
206
|
+
* @return {string} The uniform hash.
|
|
207
|
+
*/
|
|
66
208
|
getUniformHash( /*builder*/ ) {
|
|
67
209
|
|
|
68
210
|
return this.value.uuid;
|
|
69
211
|
|
|
70
212
|
}
|
|
71
213
|
|
|
214
|
+
/**
|
|
215
|
+
* Overwritten since the node type is inferred from the texture type.
|
|
216
|
+
*
|
|
217
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
218
|
+
* @return {string} The node type.
|
|
219
|
+
*/
|
|
72
220
|
getNodeType( /*builder*/ ) {
|
|
73
221
|
|
|
74
222
|
if ( this.value.isDepthTexture === true ) return 'float';
|
|
@@ -87,24 +235,47 @@ class TextureNode extends UniformNode {
|
|
|
87
235
|
|
|
88
236
|
}
|
|
89
237
|
|
|
238
|
+
/**
|
|
239
|
+
* Overwrites the default implementation to return a fixed value `'texture'`.
|
|
240
|
+
*
|
|
241
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
242
|
+
* @return {string} The input type.
|
|
243
|
+
*/
|
|
90
244
|
getInputType( /*builder*/ ) {
|
|
91
245
|
|
|
92
246
|
return 'texture';
|
|
93
247
|
|
|
94
248
|
}
|
|
95
249
|
|
|
250
|
+
/**
|
|
251
|
+
* Returns a default uvs based on the current texture's channel.
|
|
252
|
+
*
|
|
253
|
+
* @return {AttributeNode<vec2>} The default uvs.
|
|
254
|
+
*/
|
|
96
255
|
getDefaultUV() {
|
|
97
256
|
|
|
98
257
|
return uv( this.value.channel );
|
|
99
258
|
|
|
100
259
|
}
|
|
101
260
|
|
|
261
|
+
/**
|
|
262
|
+
* Overwritten to always return the texture reference of the node.
|
|
263
|
+
*
|
|
264
|
+
* @param {any} state - This method can be invocated in different contexts so `state` can refer to any object type.
|
|
265
|
+
* @return {Texture} The texture reference.
|
|
266
|
+
*/
|
|
102
267
|
updateReference( /*state*/ ) {
|
|
103
268
|
|
|
104
269
|
return this.value;
|
|
105
270
|
|
|
106
271
|
}
|
|
107
272
|
|
|
273
|
+
/**
|
|
274
|
+
* Transforms the given uv node with the texture transformation matrix.
|
|
275
|
+
*
|
|
276
|
+
* @param {Node} uvNode - The uv node to transform.
|
|
277
|
+
* @return {Node} The transformed uv node.
|
|
278
|
+
*/
|
|
108
279
|
getTransformedUV( uvNode ) {
|
|
109
280
|
|
|
110
281
|
if ( this._matrixUniform === null ) this._matrixUniform = uniform( this.value.matrix );
|
|
@@ -113,28 +284,43 @@ class TextureNode extends UniformNode {
|
|
|
113
284
|
|
|
114
285
|
}
|
|
115
286
|
|
|
287
|
+
/**
|
|
288
|
+
* Defines whether the uv transformation matrix should automatically be updated or not.
|
|
289
|
+
*
|
|
290
|
+
* @param {boolean} value - The update toggle.
|
|
291
|
+
* @return {TextureNode} A reference to this node.
|
|
292
|
+
*/
|
|
116
293
|
setUpdateMatrix( value ) {
|
|
117
294
|
|
|
118
295
|
this.updateMatrix = value;
|
|
119
|
-
this.updateType = value ? NodeUpdateType.FRAME : NodeUpdateType.NONE;
|
|
120
296
|
|
|
121
297
|
return this;
|
|
122
298
|
|
|
123
299
|
}
|
|
124
300
|
|
|
301
|
+
/**
|
|
302
|
+
* Setups the uv node. Depending on the backend as well as texture's image and type, it might be necessary
|
|
303
|
+
* to modify the uv node for correct sampling.
|
|
304
|
+
*
|
|
305
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
306
|
+
* @param {Node} uvNode - The uv node to setup.
|
|
307
|
+
* @return {Node} The updated uv node.
|
|
308
|
+
*/
|
|
125
309
|
setupUV( builder, uvNode ) {
|
|
126
310
|
|
|
127
|
-
|
|
311
|
+
if ( builder.isFlipY() ) {
|
|
312
|
+
|
|
313
|
+
if ( this._flipYUniform === null ) this._flipYUniform = uniform( false );
|
|
128
314
|
|
|
129
|
-
|
|
315
|
+
uvNode = uvNode.toVar();
|
|
130
316
|
|
|
131
317
|
if ( this.sampler ) {
|
|
132
318
|
|
|
133
|
-
uvNode = uvNode.flipY();
|
|
319
|
+
uvNode = this._flipYUniform.select( uvNode.flipY(), uvNode );
|
|
134
320
|
|
|
135
321
|
} else {
|
|
136
322
|
|
|
137
|
-
uvNode = uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) );
|
|
323
|
+
uvNode = this._flipYUniform.select( uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) ), uvNode );
|
|
138
324
|
|
|
139
325
|
}
|
|
140
326
|
|
|
@@ -144,6 +330,11 @@ class TextureNode extends UniformNode {
|
|
|
144
330
|
|
|
145
331
|
}
|
|
146
332
|
|
|
333
|
+
/**
|
|
334
|
+
* Setups texture node by preparing the internal nodes for code generation.
|
|
335
|
+
*
|
|
336
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
337
|
+
*/
|
|
147
338
|
setup( builder ) {
|
|
148
339
|
|
|
149
340
|
const properties = builder.getNodeProperties( this );
|
|
@@ -151,23 +342,45 @@ class TextureNode extends UniformNode {
|
|
|
151
342
|
|
|
152
343
|
//
|
|
153
344
|
|
|
154
|
-
|
|
345
|
+
const texture = this.value;
|
|
155
346
|
|
|
156
|
-
if (
|
|
347
|
+
if ( ! texture || texture.isTexture !== true ) {
|
|
157
348
|
|
|
158
|
-
|
|
349
|
+
throw new NodeError( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().', this.stackTrace );
|
|
159
350
|
|
|
160
351
|
}
|
|
161
352
|
|
|
162
|
-
|
|
353
|
+
//
|
|
163
354
|
|
|
164
|
-
|
|
355
|
+
const uvNode = Fn( () => {
|
|
165
356
|
|
|
166
|
-
uvNode = this.
|
|
357
|
+
let uvNode = this.uvNode;
|
|
167
358
|
|
|
168
|
-
|
|
359
|
+
if ( ( uvNode === null || builder.context.forceUVContext === true ) && builder.context.getUV ) {
|
|
360
|
+
|
|
361
|
+
uvNode = builder.context.getUV( this, builder );
|
|
362
|
+
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
if ( ! uvNode ) uvNode = this.getDefaultUV();
|
|
366
|
+
|
|
367
|
+
if ( this.updateMatrix === true ) {
|
|
368
|
+
|
|
369
|
+
uvNode = this.getTransformedUV( uvNode );
|
|
370
|
+
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
uvNode = this.setupUV( builder, uvNode );
|
|
169
374
|
|
|
170
|
-
|
|
375
|
+
//
|
|
376
|
+
|
|
377
|
+
this.updateType = ( this._matrixUniform !== null || this._flipYUniform !== null ) ? NodeUpdateType.OBJECT : NodeUpdateType.NONE;
|
|
378
|
+
|
|
379
|
+
//
|
|
380
|
+
|
|
381
|
+
return uvNode;
|
|
382
|
+
|
|
383
|
+
} )();
|
|
171
384
|
|
|
172
385
|
//
|
|
173
386
|
|
|
@@ -181,50 +394,115 @@ class TextureNode extends UniformNode {
|
|
|
181
394
|
|
|
182
395
|
//
|
|
183
396
|
|
|
397
|
+
let compareNode = null;
|
|
398
|
+
let compareStepNode = null;
|
|
399
|
+
|
|
400
|
+
if ( this.compareNode !== null ) {
|
|
401
|
+
|
|
402
|
+
if ( builder.renderer.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
|
|
403
|
+
|
|
404
|
+
compareNode = this.compareNode;
|
|
405
|
+
|
|
406
|
+
} else {
|
|
407
|
+
|
|
408
|
+
const compareFunction = texture.compareFunction;
|
|
409
|
+
|
|
410
|
+
if ( compareFunction === null || compareFunction === LessCompare || compareFunction === LessEqualCompare || compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {
|
|
411
|
+
|
|
412
|
+
compareStepNode = this.compareNode;
|
|
413
|
+
|
|
414
|
+
} else {
|
|
415
|
+
|
|
416
|
+
compareNode = this.compareNode;
|
|
417
|
+
|
|
418
|
+
warnOnce( 'TSL: Only "LessCompare", "LessEqualCompare", "GreaterCompare" and "GreaterEqualCompare" are supported for depth texture comparison fallback.' );
|
|
419
|
+
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
}
|
|
425
|
+
|
|
184
426
|
properties.uvNode = uvNode;
|
|
185
427
|
properties.levelNode = levelNode;
|
|
186
428
|
properties.biasNode = this.biasNode;
|
|
187
|
-
properties.compareNode =
|
|
429
|
+
properties.compareNode = compareNode;
|
|
430
|
+
properties.compareStepNode = compareStepNode;
|
|
188
431
|
properties.gradNode = this.gradNode;
|
|
189
432
|
properties.depthNode = this.depthNode;
|
|
433
|
+
properties.offsetNode = this.offsetNode;
|
|
190
434
|
|
|
191
435
|
}
|
|
192
436
|
|
|
437
|
+
/**
|
|
438
|
+
* Generates the uv code snippet.
|
|
439
|
+
*
|
|
440
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
441
|
+
* @param {Node} uvNode - The uv node to generate code for.
|
|
442
|
+
* @return {string} The generated code snippet.
|
|
443
|
+
*/
|
|
193
444
|
generateUV( builder, uvNode ) {
|
|
194
445
|
|
|
195
446
|
return uvNode.build( builder, this.sampler === true ? 'vec2' : 'ivec2' );
|
|
196
447
|
|
|
197
448
|
}
|
|
198
449
|
|
|
199
|
-
|
|
450
|
+
/**
|
|
451
|
+
* Generates the offset code snippet.
|
|
452
|
+
*
|
|
453
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
454
|
+
* @param {Node} offsetNode - The offset node to generate code for.
|
|
455
|
+
* @return {string} The generated code snippet.
|
|
456
|
+
*/
|
|
457
|
+
generateOffset( builder, offsetNode ) {
|
|
200
458
|
|
|
201
|
-
|
|
459
|
+
return offsetNode.build( builder, 'ivec2' );
|
|
202
460
|
|
|
203
|
-
|
|
461
|
+
}
|
|
204
462
|
|
|
205
|
-
|
|
463
|
+
/**
|
|
464
|
+
* Generates the snippet for the texture sampling.
|
|
465
|
+
*
|
|
466
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
467
|
+
* @param {string} textureProperty - The texture property.
|
|
468
|
+
* @param {string} uvSnippet - The uv snippet.
|
|
469
|
+
* @param {?string} levelSnippet - The level snippet.
|
|
470
|
+
* @param {?string} biasSnippet - The bias snippet.
|
|
471
|
+
* @param {?string} depthSnippet - The depth snippet.
|
|
472
|
+
* @param {?string} compareSnippet - The compare snippet.
|
|
473
|
+
* @param {?Array<string>} gradSnippet - The grad snippet.
|
|
474
|
+
* @param {?string} offsetSnippet - The offset snippet.
|
|
475
|
+
* @return {string} The generated code snippet.
|
|
476
|
+
*/
|
|
477
|
+
generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet ) {
|
|
206
478
|
|
|
207
|
-
|
|
479
|
+
const texture = this.value;
|
|
480
|
+
|
|
481
|
+
let snippet;
|
|
208
482
|
|
|
209
|
-
|
|
483
|
+
if ( biasSnippet ) {
|
|
210
484
|
|
|
211
|
-
snippet = builder.generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet );
|
|
485
|
+
snippet = builder.generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet );
|
|
212
486
|
|
|
213
487
|
} else if ( gradSnippet ) {
|
|
214
488
|
|
|
215
|
-
snippet = builder.generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet );
|
|
489
|
+
snippet = builder.generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet );
|
|
216
490
|
|
|
217
491
|
} else if ( compareSnippet ) {
|
|
218
492
|
|
|
219
|
-
snippet = builder.generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet );
|
|
493
|
+
snippet = builder.generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet );
|
|
220
494
|
|
|
221
495
|
} else if ( this.sampler === false ) {
|
|
222
496
|
|
|
223
|
-
snippet = builder.generateTextureLoad( texture, textureProperty, uvSnippet, depthSnippet );
|
|
497
|
+
snippet = builder.generateTextureLoad( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet );
|
|
498
|
+
|
|
499
|
+
} else if ( levelSnippet ) {
|
|
500
|
+
|
|
501
|
+
snippet = builder.generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet );
|
|
224
502
|
|
|
225
503
|
} else {
|
|
226
504
|
|
|
227
|
-
snippet = builder.generateTexture( texture, textureProperty, uvSnippet, depthSnippet );
|
|
505
|
+
snippet = builder.generateTexture( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet );
|
|
228
506
|
|
|
229
507
|
}
|
|
230
508
|
|
|
@@ -232,21 +510,21 @@ class TextureNode extends UniformNode {
|
|
|
232
510
|
|
|
233
511
|
}
|
|
234
512
|
|
|
513
|
+
/**
|
|
514
|
+
* Generates the code snippet of the texture node.
|
|
515
|
+
*
|
|
516
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
517
|
+
* @param {string} output - The current output.
|
|
518
|
+
* @return {string} The generated code snippet.
|
|
519
|
+
*/
|
|
235
520
|
generate( builder, output ) {
|
|
236
521
|
|
|
237
|
-
const properties = builder.getNodeProperties( this );
|
|
238
|
-
|
|
239
522
|
const texture = this.value;
|
|
240
523
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
throw new Error( 'TextureNode: Need a three.js texture.' );
|
|
244
|
-
|
|
245
|
-
}
|
|
246
|
-
|
|
524
|
+
const properties = builder.getNodeProperties( this );
|
|
247
525
|
const textureProperty = super.generate( builder, 'property' );
|
|
248
526
|
|
|
249
|
-
if ( output
|
|
527
|
+
if ( /^sampler/.test( output ) ) {
|
|
250
528
|
|
|
251
529
|
return textureProperty + '_sampler';
|
|
252
530
|
|
|
@@ -258,24 +536,44 @@ class TextureNode extends UniformNode {
|
|
|
258
536
|
|
|
259
537
|
const nodeData = builder.getDataFromNode( this );
|
|
260
538
|
|
|
539
|
+
const nodeType = this.getNodeType( builder );
|
|
540
|
+
|
|
261
541
|
let propertyName = nodeData.propertyName;
|
|
262
542
|
|
|
263
543
|
if ( propertyName === undefined ) {
|
|
264
544
|
|
|
265
|
-
const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode } = properties;
|
|
545
|
+
const { uvNode, levelNode, biasNode, compareNode, compareStepNode, depthNode, gradNode, offsetNode } = properties;
|
|
266
546
|
|
|
267
547
|
const uvSnippet = this.generateUV( builder, uvNode );
|
|
268
548
|
const levelSnippet = levelNode ? levelNode.build( builder, 'float' ) : null;
|
|
269
549
|
const biasSnippet = biasNode ? biasNode.build( builder, 'float' ) : null;
|
|
270
550
|
const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
|
|
271
551
|
const compareSnippet = compareNode ? compareNode.build( builder, 'float' ) : null;
|
|
552
|
+
const compareStepSnippet = compareStepNode ? compareStepNode.build( builder, 'float' ) : null;
|
|
272
553
|
const gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;
|
|
554
|
+
const offsetSnippet = offsetNode ? this.generateOffset( builder, offsetNode ) : null;
|
|
273
555
|
|
|
274
556
|
const nodeVar = builder.getVarFromNode( this );
|
|
275
557
|
|
|
276
558
|
propertyName = builder.getPropertyName( nodeVar );
|
|
277
559
|
|
|
278
|
-
|
|
560
|
+
let snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet );
|
|
561
|
+
|
|
562
|
+
if ( compareStepSnippet !== null ) {
|
|
563
|
+
|
|
564
|
+
const compareFunction = texture.compareFunction;
|
|
565
|
+
|
|
566
|
+
if ( compareFunction === GreaterCompare || compareFunction === GreaterEqualCompare ) {
|
|
567
|
+
|
|
568
|
+
snippet = step( expression( snippet, nodeType ), expression( compareStepSnippet, 'float' ) ).build( builder, nodeType );
|
|
569
|
+
|
|
570
|
+
} else {
|
|
571
|
+
|
|
572
|
+
snippet = step( expression( compareStepSnippet, 'float' ), expression( snippet, nodeType ) ).build( builder, nodeType );
|
|
573
|
+
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
}
|
|
279
577
|
|
|
280
578
|
builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
|
|
281
579
|
|
|
@@ -285,7 +583,6 @@ class TextureNode extends UniformNode {
|
|
|
285
583
|
}
|
|
286
584
|
|
|
287
585
|
let snippet = propertyName;
|
|
288
|
-
const nodeType = this.getNodeType( builder );
|
|
289
586
|
|
|
290
587
|
if ( builder.needsToWorkingColorSpace( texture ) ) {
|
|
291
588
|
|
|
@@ -299,6 +596,12 @@ class TextureNode extends UniformNode {
|
|
|
299
596
|
|
|
300
597
|
}
|
|
301
598
|
|
|
599
|
+
/**
|
|
600
|
+
* Sets the sampler value.
|
|
601
|
+
*
|
|
602
|
+
* @param {boolean} value - The sampler value to set.
|
|
603
|
+
* @return {TextureNode} A reference to this texture node.
|
|
604
|
+
*/
|
|
302
605
|
setSampler( value ) {
|
|
303
606
|
|
|
304
607
|
this.sampler = value;
|
|
@@ -307,6 +610,11 @@ class TextureNode extends UniformNode {
|
|
|
307
610
|
|
|
308
611
|
}
|
|
309
612
|
|
|
613
|
+
/**
|
|
614
|
+
* Returns the sampler value.
|
|
615
|
+
*
|
|
616
|
+
* @return {boolean} The sampler value.
|
|
617
|
+
*/
|
|
310
618
|
getSampler() {
|
|
311
619
|
|
|
312
620
|
return this.sampler;
|
|
@@ -315,77 +623,174 @@ class TextureNode extends UniformNode {
|
|
|
315
623
|
|
|
316
624
|
// @TODO: Move to TSL
|
|
317
625
|
|
|
318
|
-
|
|
626
|
+
/**
|
|
627
|
+
* Samples the texture with the given uv node.
|
|
628
|
+
*
|
|
629
|
+
* @param {Node} uvNode - The uv node.
|
|
630
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
631
|
+
*/
|
|
632
|
+
sample( uvNode ) {
|
|
319
633
|
|
|
320
634
|
const textureNode = this.clone();
|
|
321
635
|
textureNode.uvNode = nodeObject( uvNode );
|
|
322
|
-
textureNode.referenceNode = this.
|
|
636
|
+
textureNode.referenceNode = this.getBase();
|
|
323
637
|
|
|
324
638
|
return nodeObject( textureNode );
|
|
325
639
|
|
|
326
640
|
}
|
|
327
641
|
|
|
642
|
+
/**
|
|
643
|
+
* TSL function for creating a texture node that fetches/loads texels without interpolation.
|
|
644
|
+
*
|
|
645
|
+
* @param {Node<uvec2>} uvNode - The uv node.
|
|
646
|
+
* @returns {TextureNode} A texture node representing the texture load.
|
|
647
|
+
*/
|
|
648
|
+
load( uvNode ) {
|
|
649
|
+
|
|
650
|
+
return this.sample( uvNode ).setSampler( false );
|
|
651
|
+
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
/**
|
|
655
|
+
* Samples a blurred version of the texture by defining an internal bias.
|
|
656
|
+
*
|
|
657
|
+
* @param {Node<float>} amountNode - How blurred the texture should be.
|
|
658
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
659
|
+
*/
|
|
328
660
|
blur( amountNode ) {
|
|
329
661
|
|
|
330
662
|
const textureNode = this.clone();
|
|
331
663
|
textureNode.biasNode = nodeObject( amountNode ).mul( maxMipLevel( textureNode ) );
|
|
332
|
-
textureNode.referenceNode = this.
|
|
664
|
+
textureNode.referenceNode = this.getBase();
|
|
665
|
+
|
|
666
|
+
const map = textureNode.value;
|
|
667
|
+
|
|
668
|
+
if ( textureNode.generateMipmaps === false && ( map && map.generateMipmaps === false || map.minFilter === NearestFilter || map.magFilter === NearestFilter ) ) {
|
|
669
|
+
|
|
670
|
+
warn( 'TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture.' );
|
|
671
|
+
|
|
672
|
+
textureNode.biasNode = null;
|
|
673
|
+
|
|
674
|
+
}
|
|
333
675
|
|
|
334
676
|
return nodeObject( textureNode );
|
|
335
677
|
|
|
336
678
|
}
|
|
337
679
|
|
|
680
|
+
/**
|
|
681
|
+
* Samples a specific mip of the texture.
|
|
682
|
+
*
|
|
683
|
+
* @param {Node<int>} levelNode - The mip level to sample.
|
|
684
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
685
|
+
*/
|
|
338
686
|
level( levelNode ) {
|
|
339
687
|
|
|
340
688
|
const textureNode = this.clone();
|
|
341
689
|
textureNode.levelNode = nodeObject( levelNode );
|
|
342
|
-
textureNode.referenceNode = this.
|
|
690
|
+
textureNode.referenceNode = this.getBase();
|
|
343
691
|
|
|
344
692
|
return nodeObject( textureNode );
|
|
345
693
|
|
|
346
694
|
}
|
|
347
695
|
|
|
696
|
+
/**
|
|
697
|
+
* Returns the texture size of the requested level.
|
|
698
|
+
*
|
|
699
|
+
* @param {Node<int>} levelNode - The level to compute the size for.
|
|
700
|
+
* @return {TextureSizeNode} The texture size.
|
|
701
|
+
*/
|
|
348
702
|
size( levelNode ) {
|
|
349
703
|
|
|
350
704
|
return textureSize( this, levelNode );
|
|
351
705
|
|
|
352
706
|
}
|
|
353
707
|
|
|
708
|
+
/**
|
|
709
|
+
* Samples the texture with the given bias.
|
|
710
|
+
*
|
|
711
|
+
* @param {Node<float>} biasNode - The bias node.
|
|
712
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
713
|
+
*/
|
|
354
714
|
bias( biasNode ) {
|
|
355
715
|
|
|
356
716
|
const textureNode = this.clone();
|
|
357
717
|
textureNode.biasNode = nodeObject( biasNode );
|
|
358
|
-
textureNode.referenceNode = this.
|
|
718
|
+
textureNode.referenceNode = this.getBase();
|
|
359
719
|
|
|
360
720
|
return nodeObject( textureNode );
|
|
361
721
|
|
|
362
722
|
}
|
|
363
723
|
|
|
724
|
+
/**
|
|
725
|
+
* Returns the base texture of this node.
|
|
726
|
+
* @return {TextureNode} The base texture node.
|
|
727
|
+
*/
|
|
728
|
+
getBase() {
|
|
729
|
+
|
|
730
|
+
return this.referenceNode ? this.referenceNode.getBase() : this;
|
|
731
|
+
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
/**
|
|
735
|
+
* Samples the texture by executing a compare operation.
|
|
736
|
+
*
|
|
737
|
+
* @param {Node<float>} compareNode - The node that defines the compare value.
|
|
738
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
739
|
+
*/
|
|
364
740
|
compare( compareNode ) {
|
|
365
741
|
|
|
366
742
|
const textureNode = this.clone();
|
|
367
743
|
textureNode.compareNode = nodeObject( compareNode );
|
|
368
|
-
textureNode.referenceNode = this.
|
|
744
|
+
textureNode.referenceNode = this.getBase();
|
|
369
745
|
|
|
370
746
|
return nodeObject( textureNode );
|
|
371
747
|
|
|
372
748
|
}
|
|
373
749
|
|
|
750
|
+
/**
|
|
751
|
+
* Samples the texture using an explicit gradient.
|
|
752
|
+
*
|
|
753
|
+
* @param {Node<vec2>} gradNodeX - The gradX node.
|
|
754
|
+
* @param {Node<vec2>} gradNodeY - The gradY node.
|
|
755
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
756
|
+
*/
|
|
374
757
|
grad( gradNodeX, gradNodeY ) {
|
|
375
758
|
|
|
376
759
|
const textureNode = this.clone();
|
|
377
760
|
textureNode.gradNode = [ nodeObject( gradNodeX ), nodeObject( gradNodeY ) ];
|
|
378
|
-
textureNode.referenceNode = this.
|
|
761
|
+
textureNode.referenceNode = this.getBase();
|
|
379
762
|
|
|
380
763
|
return nodeObject( textureNode );
|
|
381
764
|
|
|
382
765
|
}
|
|
383
766
|
|
|
767
|
+
/**
|
|
768
|
+
* Samples the texture by defining a depth node.
|
|
769
|
+
*
|
|
770
|
+
* @param {Node<int>} depthNode - The depth node.
|
|
771
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
772
|
+
*/
|
|
384
773
|
depth( depthNode ) {
|
|
385
774
|
|
|
386
775
|
const textureNode = this.clone();
|
|
387
776
|
textureNode.depthNode = nodeObject( depthNode );
|
|
388
|
-
textureNode.referenceNode = this.
|
|
777
|
+
textureNode.referenceNode = this.getBase();
|
|
778
|
+
|
|
779
|
+
return nodeObject( textureNode );
|
|
780
|
+
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
/**
|
|
784
|
+
* Samples the texture by defining an offset node.
|
|
785
|
+
*
|
|
786
|
+
* @param {Node<ivec2>} offsetNode - The offset node.
|
|
787
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
788
|
+
*/
|
|
789
|
+
offset( offsetNode ) {
|
|
790
|
+
|
|
791
|
+
const textureNode = this.clone();
|
|
792
|
+
textureNode.offsetNode = nodeObject( offsetNode );
|
|
793
|
+
textureNode.referenceNode = this.getBase();
|
|
389
794
|
|
|
390
795
|
return nodeObject( textureNode );
|
|
391
796
|
|
|
@@ -415,6 +820,9 @@ class TextureNode extends UniformNode {
|
|
|
415
820
|
|
|
416
821
|
}
|
|
417
822
|
|
|
823
|
+
/**
|
|
824
|
+
* The update is used to implement the update of the uv transformation matrix.
|
|
825
|
+
*/
|
|
418
826
|
update() {
|
|
419
827
|
|
|
420
828
|
const texture = this.value;
|
|
@@ -428,12 +836,31 @@ class TextureNode extends UniformNode {
|
|
|
428
836
|
|
|
429
837
|
}
|
|
430
838
|
|
|
839
|
+
//
|
|
840
|
+
|
|
841
|
+
const flipYUniform = this._flipYUniform;
|
|
842
|
+
|
|
843
|
+
if ( flipYUniform !== null ) {
|
|
844
|
+
|
|
845
|
+
flipYUniform.value = ( ( texture.image instanceof ImageBitmap && texture.flipY === true ) || texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true );
|
|
846
|
+
|
|
847
|
+
}
|
|
848
|
+
|
|
431
849
|
}
|
|
432
850
|
|
|
851
|
+
/**
|
|
852
|
+
* Clones the texture node.
|
|
853
|
+
*
|
|
854
|
+
* @return {TextureNode} The cloned texture node.
|
|
855
|
+
*/
|
|
433
856
|
clone() {
|
|
434
857
|
|
|
435
858
|
const newNode = new this.constructor( this.value, this.uvNode, this.levelNode, this.biasNode );
|
|
436
859
|
newNode.sampler = this.sampler;
|
|
860
|
+
newNode.depthNode = this.depthNode;
|
|
861
|
+
newNode.compareNode = this.compareNode;
|
|
862
|
+
newNode.gradNode = this.gradNode;
|
|
863
|
+
newNode.offsetNode = this.offsetNode;
|
|
437
864
|
|
|
438
865
|
return newNode;
|
|
439
866
|
|
|
@@ -443,9 +870,94 @@ class TextureNode extends UniformNode {
|
|
|
443
870
|
|
|
444
871
|
export default TextureNode;
|
|
445
872
|
|
|
446
|
-
|
|
447
|
-
|
|
873
|
+
/**
|
|
874
|
+
* TSL function for creating a texture node.
|
|
875
|
+
*
|
|
876
|
+
* @tsl
|
|
877
|
+
* @function
|
|
878
|
+
* @param {?Texture} value - The texture.
|
|
879
|
+
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
880
|
+
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
881
|
+
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
882
|
+
* @returns {TextureNode}
|
|
883
|
+
*/
|
|
884
|
+
const textureBase = /*@__PURE__*/ nodeProxy( TextureNode ).setParameterLength( 1, 4 ).setName( 'texture' );
|
|
885
|
+
|
|
886
|
+
/**
|
|
887
|
+
* TSL function for creating a texture node or sample a texture node already existing.
|
|
888
|
+
*
|
|
889
|
+
* @tsl
|
|
890
|
+
* @function
|
|
891
|
+
* @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.
|
|
892
|
+
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
893
|
+
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
894
|
+
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
895
|
+
* @returns {TextureNode}
|
|
896
|
+
*/
|
|
897
|
+
export const texture = ( value = EmptyTexture, uvNode = null, levelNode = null, biasNode = null ) => {
|
|
898
|
+
|
|
899
|
+
let textureNode;
|
|
900
|
+
|
|
901
|
+
if ( value && value.isTextureNode === true ) {
|
|
902
|
+
|
|
903
|
+
textureNode = nodeObject( value.clone() );
|
|
904
|
+
textureNode.referenceNode = value.getBase(); // Ensure the reference is set to the original node
|
|
905
|
+
|
|
906
|
+
if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
|
|
907
|
+
if ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );
|
|
908
|
+
if ( biasNode !== null ) textureNode.biasNode = nodeObject( biasNode );
|
|
909
|
+
|
|
910
|
+
} else {
|
|
911
|
+
|
|
912
|
+
textureNode = textureBase( value, uvNode, levelNode, biasNode );
|
|
448
913
|
|
|
449
|
-
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
return textureNode;
|
|
917
|
+
|
|
918
|
+
};
|
|
919
|
+
|
|
920
|
+
/**
|
|
921
|
+
* TSL function for creating a uniform texture node.
|
|
922
|
+
*
|
|
923
|
+
* @tsl
|
|
924
|
+
* @function
|
|
925
|
+
* @param {?Texture} value - The texture.
|
|
926
|
+
* @returns {TextureNode}
|
|
927
|
+
*/
|
|
928
|
+
export const uniformTexture = ( value = EmptyTexture ) => texture( value );
|
|
929
|
+
|
|
930
|
+
/**
|
|
931
|
+
* TSL function for creating a texture node that fetches/loads texels without interpolation.
|
|
932
|
+
*
|
|
933
|
+
* @tsl
|
|
934
|
+
* @function
|
|
935
|
+
* @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.
|
|
936
|
+
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
937
|
+
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
938
|
+
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
939
|
+
* @returns {TextureNode}
|
|
940
|
+
*/
|
|
941
|
+
export const textureLoad = ( ...params ) => texture( ...params ).setSampler( false );
|
|
450
942
|
|
|
451
|
-
export const
|
|
943
|
+
export const textureLevel = ( value, uv, level ) => texture( value, uv ).level( level );
|
|
944
|
+
|
|
945
|
+
/**
|
|
946
|
+
* Converts a texture or texture node to a sampler.
|
|
947
|
+
*
|
|
948
|
+
* @tsl
|
|
949
|
+
* @function
|
|
950
|
+
* @param {TextureNode|Texture} value - The texture or texture node to convert.
|
|
951
|
+
* @returns {Node}
|
|
952
|
+
*/
|
|
953
|
+
export const sampler = ( value ) => ( value.isNode === true ? value : texture( value ) ).convert( 'sampler' );
|
|
954
|
+
|
|
955
|
+
/**
|
|
956
|
+
* Converts a texture or texture node to a sampler comparison.
|
|
957
|
+
*
|
|
958
|
+
* @tsl
|
|
959
|
+
* @function
|
|
960
|
+
* @param {TextureNode|Texture} value - The texture or texture node to convert.
|
|
961
|
+
* @returns {Node}
|
|
962
|
+
*/
|
|
963
|
+
export const samplerComparison = ( value ) => ( value.isNode === true ? value : texture( value ) ).convert( 'samplerComparison' );
|