super-three 0.177.0 → 0.181.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/README.md +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -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 +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- 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/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- 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/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -4,12 +4,13 @@ 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
8
|
import { NodeUpdateType } from '../core/constants.js';
|
|
9
9
|
|
|
10
10
|
import { IntType, NearestFilter, UnsignedIntType } from '../../constants.js';
|
|
11
11
|
|
|
12
12
|
import { Texture } from '../../textures/Texture.js';
|
|
13
|
+
import { warn } from '../../utils.js';
|
|
13
14
|
|
|
14
15
|
const EmptyTexture = /*@__PURE__*/ new Texture();
|
|
15
16
|
|
|
@@ -95,6 +96,15 @@ class TextureNode extends UniformNode {
|
|
|
95
96
|
*/
|
|
96
97
|
this.gradNode = null;
|
|
97
98
|
|
|
99
|
+
/**
|
|
100
|
+
* Represents the optional texel offset applied to the unnormalized texture
|
|
101
|
+
* coordinate before sampling the texture.
|
|
102
|
+
*
|
|
103
|
+
* @type {?Node<ivec2|ivec3>}
|
|
104
|
+
* @default null
|
|
105
|
+
*/
|
|
106
|
+
this.offsetNode = null;
|
|
107
|
+
|
|
98
108
|
/**
|
|
99
109
|
* Whether texture values should be sampled or fetched.
|
|
100
110
|
*
|
|
@@ -114,9 +124,9 @@ class TextureNode extends UniformNode {
|
|
|
114
124
|
this.updateMatrix = false;
|
|
115
125
|
|
|
116
126
|
/**
|
|
117
|
-
* By default the `update()` method is not executed.
|
|
118
|
-
*
|
|
119
|
-
*
|
|
127
|
+
* By default the `update()` method is not executed. Depending on
|
|
128
|
+
* whether a uv transformation matrix and/or flipY is applied, `update()`
|
|
129
|
+
* is executed per object.
|
|
120
130
|
*
|
|
121
131
|
* @type {string}
|
|
122
132
|
* @default 'none'
|
|
@@ -144,9 +154,19 @@ class TextureNode extends UniformNode {
|
|
|
144
154
|
*
|
|
145
155
|
* @private
|
|
146
156
|
* @type {?UniformNode<mat3>}
|
|
157
|
+
* @default null
|
|
147
158
|
*/
|
|
148
159
|
this._matrixUniform = null;
|
|
149
160
|
|
|
161
|
+
/**
|
|
162
|
+
* The uniform node that represents the y-flip. Only required for WebGL.
|
|
163
|
+
*
|
|
164
|
+
* @private
|
|
165
|
+
* @type {?UniformNode<bool>}
|
|
166
|
+
* @default null
|
|
167
|
+
*/
|
|
168
|
+
this._flipYUniform = null;
|
|
169
|
+
|
|
150
170
|
this.setUpdateMatrix( uvNode === null );
|
|
151
171
|
|
|
152
172
|
}
|
|
@@ -270,7 +290,6 @@ class TextureNode extends UniformNode {
|
|
|
270
290
|
setUpdateMatrix( value ) {
|
|
271
291
|
|
|
272
292
|
this.updateMatrix = value;
|
|
273
|
-
this.updateType = value ? NodeUpdateType.OBJECT : NodeUpdateType.NONE;
|
|
274
293
|
|
|
275
294
|
return this;
|
|
276
295
|
|
|
@@ -286,17 +305,19 @@ class TextureNode extends UniformNode {
|
|
|
286
305
|
*/
|
|
287
306
|
setupUV( builder, uvNode ) {
|
|
288
307
|
|
|
289
|
-
|
|
308
|
+
if ( builder.isFlipY() ) {
|
|
290
309
|
|
|
291
|
-
|
|
310
|
+
if ( this._flipYUniform === null ) this._flipYUniform = uniform( false );
|
|
311
|
+
|
|
312
|
+
uvNode = uvNode.toVar();
|
|
292
313
|
|
|
293
314
|
if ( this.sampler ) {
|
|
294
315
|
|
|
295
|
-
uvNode = uvNode.flipY();
|
|
316
|
+
uvNode = this._flipYUniform.select( uvNode.flipY(), uvNode );
|
|
296
317
|
|
|
297
318
|
} else {
|
|
298
319
|
|
|
299
|
-
uvNode = uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) );
|
|
320
|
+
uvNode = this._flipYUniform.select( uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) ), uvNode );
|
|
300
321
|
|
|
301
322
|
}
|
|
302
323
|
|
|
@@ -328,23 +349,35 @@ class TextureNode extends UniformNode {
|
|
|
328
349
|
|
|
329
350
|
//
|
|
330
351
|
|
|
331
|
-
|
|
352
|
+
const uvNode = Fn( () => {
|
|
332
353
|
|
|
333
|
-
|
|
354
|
+
let uvNode = this.uvNode;
|
|
334
355
|
|
|
335
|
-
uvNode
|
|
356
|
+
if ( ( uvNode === null || builder.context.forceUVContext === true ) && builder.context.getUV ) {
|
|
336
357
|
|
|
337
|
-
|
|
358
|
+
uvNode = builder.context.getUV( this, builder );
|
|
338
359
|
|
|
339
|
-
|
|
360
|
+
}
|
|
340
361
|
|
|
341
|
-
|
|
362
|
+
if ( ! uvNode ) uvNode = this.getDefaultUV();
|
|
342
363
|
|
|
343
|
-
|
|
364
|
+
if ( this.updateMatrix === true ) {
|
|
344
365
|
|
|
345
|
-
|
|
366
|
+
uvNode = this.getTransformedUV( uvNode );
|
|
346
367
|
|
|
347
|
-
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
uvNode = this.setupUV( builder, uvNode );
|
|
371
|
+
|
|
372
|
+
//
|
|
373
|
+
|
|
374
|
+
this.updateType = ( this._matrixUniform !== null || this._flipYUniform !== null ) ? NodeUpdateType.OBJECT : NodeUpdateType.NONE;
|
|
375
|
+
|
|
376
|
+
//
|
|
377
|
+
|
|
378
|
+
return uvNode;
|
|
379
|
+
|
|
380
|
+
} )();
|
|
348
381
|
|
|
349
382
|
//
|
|
350
383
|
|
|
@@ -364,6 +397,7 @@ class TextureNode extends UniformNode {
|
|
|
364
397
|
properties.compareNode = this.compareNode;
|
|
365
398
|
properties.gradNode = this.gradNode;
|
|
366
399
|
properties.depthNode = this.depthNode;
|
|
400
|
+
properties.offsetNode = this.offsetNode;
|
|
367
401
|
|
|
368
402
|
}
|
|
369
403
|
|
|
@@ -380,6 +414,19 @@ class TextureNode extends UniformNode {
|
|
|
380
414
|
|
|
381
415
|
}
|
|
382
416
|
|
|
417
|
+
/**
|
|
418
|
+
* Generates the offset code snippet.
|
|
419
|
+
*
|
|
420
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
421
|
+
* @param {Node} offsetNode - The offset node to generate code for.
|
|
422
|
+
* @return {string} The generated code snippet.
|
|
423
|
+
*/
|
|
424
|
+
generateOffset( builder, offsetNode ) {
|
|
425
|
+
|
|
426
|
+
return offsetNode.build( builder, 'ivec2' );
|
|
427
|
+
|
|
428
|
+
}
|
|
429
|
+
|
|
383
430
|
/**
|
|
384
431
|
* Generates the snippet for the texture sampling.
|
|
385
432
|
*
|
|
@@ -391,37 +438,38 @@ class TextureNode extends UniformNode {
|
|
|
391
438
|
* @param {?string} depthSnippet - The depth snippet.
|
|
392
439
|
* @param {?string} compareSnippet - The compare snippet.
|
|
393
440
|
* @param {?Array<string>} gradSnippet - The grad snippet.
|
|
441
|
+
* @param {?string} offsetSnippet - The offset snippet.
|
|
394
442
|
* @return {string} The generated code snippet.
|
|
395
443
|
*/
|
|
396
|
-
generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet ) {
|
|
444
|
+
generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet ) {
|
|
397
445
|
|
|
398
446
|
const texture = this.value;
|
|
399
447
|
|
|
400
448
|
let snippet;
|
|
401
449
|
|
|
402
|
-
if (
|
|
403
|
-
|
|
404
|
-
snippet = builder.generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet );
|
|
450
|
+
if ( biasSnippet ) {
|
|
405
451
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
snippet = builder.generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet );
|
|
452
|
+
snippet = builder.generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet, offsetSnippet );
|
|
409
453
|
|
|
410
454
|
} else if ( gradSnippet ) {
|
|
411
455
|
|
|
412
|
-
snippet = builder.generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet );
|
|
456
|
+
snippet = builder.generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet, offsetSnippet );
|
|
413
457
|
|
|
414
458
|
} else if ( compareSnippet ) {
|
|
415
459
|
|
|
416
|
-
snippet = builder.generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet );
|
|
460
|
+
snippet = builder.generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, offsetSnippet );
|
|
417
461
|
|
|
418
462
|
} else if ( this.sampler === false ) {
|
|
419
463
|
|
|
420
|
-
snippet = builder.generateTextureLoad( texture, textureProperty, uvSnippet, depthSnippet );
|
|
464
|
+
snippet = builder.generateTextureLoad( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet );
|
|
465
|
+
|
|
466
|
+
} else if ( levelSnippet ) {
|
|
467
|
+
|
|
468
|
+
snippet = builder.generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet, offsetSnippet );
|
|
421
469
|
|
|
422
470
|
} else {
|
|
423
471
|
|
|
424
|
-
snippet = builder.generateTexture( texture, textureProperty, uvSnippet, depthSnippet );
|
|
472
|
+
snippet = builder.generateTexture( texture, textureProperty, uvSnippet, depthSnippet, offsetSnippet );
|
|
425
473
|
|
|
426
474
|
}
|
|
427
475
|
|
|
@@ -459,7 +507,7 @@ class TextureNode extends UniformNode {
|
|
|
459
507
|
|
|
460
508
|
if ( propertyName === undefined ) {
|
|
461
509
|
|
|
462
|
-
const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode } = properties;
|
|
510
|
+
const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode, offsetNode } = properties;
|
|
463
511
|
|
|
464
512
|
const uvSnippet = this.generateUV( builder, uvNode );
|
|
465
513
|
const levelSnippet = levelNode ? levelNode.build( builder, 'float' ) : null;
|
|
@@ -467,12 +515,13 @@ class TextureNode extends UniformNode {
|
|
|
467
515
|
const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
|
|
468
516
|
const compareSnippet = compareNode ? compareNode.build( builder, 'float' ) : null;
|
|
469
517
|
const gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;
|
|
518
|
+
const offsetSnippet = offsetNode ? this.generateOffset( builder, offsetNode ) : null;
|
|
470
519
|
|
|
471
520
|
const nodeVar = builder.getVarFromNode( this );
|
|
472
521
|
|
|
473
522
|
propertyName = builder.getPropertyName( nodeVar );
|
|
474
523
|
|
|
475
|
-
const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet );
|
|
524
|
+
const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet, offsetSnippet );
|
|
476
525
|
|
|
477
526
|
builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
|
|
478
527
|
|
|
@@ -532,7 +581,7 @@ class TextureNode extends UniformNode {
|
|
|
532
581
|
*/
|
|
533
582
|
uv( uvNode ) { // @deprecated, r172
|
|
534
583
|
|
|
535
|
-
|
|
584
|
+
warn( 'TextureNode: .uv() has been renamed. Use .sample() instead.' );
|
|
536
585
|
|
|
537
586
|
return this.sample( uvNode );
|
|
538
587
|
|
|
@@ -548,12 +597,24 @@ class TextureNode extends UniformNode {
|
|
|
548
597
|
|
|
549
598
|
const textureNode = this.clone();
|
|
550
599
|
textureNode.uvNode = nodeObject( uvNode );
|
|
551
|
-
textureNode.referenceNode = this.
|
|
600
|
+
textureNode.referenceNode = this.getBase();
|
|
552
601
|
|
|
553
602
|
return nodeObject( textureNode );
|
|
554
603
|
|
|
555
604
|
}
|
|
556
605
|
|
|
606
|
+
/**
|
|
607
|
+
* TSL function for creating a texture node that fetches/loads texels without interpolation.
|
|
608
|
+
*
|
|
609
|
+
* @param {Node<uvec2>} uvNode - The uv node.
|
|
610
|
+
* @returns {TextureNode} A texture node representing the texture load.
|
|
611
|
+
*/
|
|
612
|
+
load( uvNode ) {
|
|
613
|
+
|
|
614
|
+
return this.sample( uvNode ).setSampler( false );
|
|
615
|
+
|
|
616
|
+
}
|
|
617
|
+
|
|
557
618
|
/**
|
|
558
619
|
* Samples a blurred version of the texture by defining an internal bias.
|
|
559
620
|
*
|
|
@@ -564,13 +625,13 @@ class TextureNode extends UniformNode {
|
|
|
564
625
|
|
|
565
626
|
const textureNode = this.clone();
|
|
566
627
|
textureNode.biasNode = nodeObject( amountNode ).mul( maxMipLevel( textureNode ) );
|
|
567
|
-
textureNode.referenceNode = this.
|
|
628
|
+
textureNode.referenceNode = this.getBase();
|
|
568
629
|
|
|
569
630
|
const map = textureNode.value;
|
|
570
631
|
|
|
571
632
|
if ( textureNode.generateMipmaps === false && ( map && map.generateMipmaps === false || map.minFilter === NearestFilter || map.magFilter === NearestFilter ) ) {
|
|
572
633
|
|
|
573
|
-
|
|
634
|
+
warn( 'TSL: texture().blur() requires mipmaps and sampling. Use .generateMipmaps=true and .minFilter/.magFilter=THREE.LinearFilter in the Texture.' );
|
|
574
635
|
|
|
575
636
|
textureNode.biasNode = null;
|
|
576
637
|
|
|
@@ -590,7 +651,7 @@ class TextureNode extends UniformNode {
|
|
|
590
651
|
|
|
591
652
|
const textureNode = this.clone();
|
|
592
653
|
textureNode.levelNode = nodeObject( levelNode );
|
|
593
|
-
textureNode.referenceNode = this.
|
|
654
|
+
textureNode.referenceNode = this.getBase();
|
|
594
655
|
|
|
595
656
|
return nodeObject( textureNode );
|
|
596
657
|
|
|
@@ -618,12 +679,22 @@ class TextureNode extends UniformNode {
|
|
|
618
679
|
|
|
619
680
|
const textureNode = this.clone();
|
|
620
681
|
textureNode.biasNode = nodeObject( biasNode );
|
|
621
|
-
textureNode.referenceNode = this.
|
|
682
|
+
textureNode.referenceNode = this.getBase();
|
|
622
683
|
|
|
623
684
|
return nodeObject( textureNode );
|
|
624
685
|
|
|
625
686
|
}
|
|
626
687
|
|
|
688
|
+
/**
|
|
689
|
+
* Returns the base texture of this node.
|
|
690
|
+
* @return {TextureNode} The base texture node.
|
|
691
|
+
*/
|
|
692
|
+
getBase() {
|
|
693
|
+
|
|
694
|
+
return this.referenceNode ? this.referenceNode.getBase() : this;
|
|
695
|
+
|
|
696
|
+
}
|
|
697
|
+
|
|
627
698
|
/**
|
|
628
699
|
* Samples the texture by executing a compare operation.
|
|
629
700
|
*
|
|
@@ -634,7 +705,7 @@ class TextureNode extends UniformNode {
|
|
|
634
705
|
|
|
635
706
|
const textureNode = this.clone();
|
|
636
707
|
textureNode.compareNode = nodeObject( compareNode );
|
|
637
|
-
textureNode.referenceNode = this.
|
|
708
|
+
textureNode.referenceNode = this.getBase();
|
|
638
709
|
|
|
639
710
|
return nodeObject( textureNode );
|
|
640
711
|
|
|
@@ -651,7 +722,7 @@ class TextureNode extends UniformNode {
|
|
|
651
722
|
|
|
652
723
|
const textureNode = this.clone();
|
|
653
724
|
textureNode.gradNode = [ nodeObject( gradNodeX ), nodeObject( gradNodeY ) ];
|
|
654
|
-
textureNode.referenceNode = this.
|
|
725
|
+
textureNode.referenceNode = this.getBase();
|
|
655
726
|
|
|
656
727
|
return nodeObject( textureNode );
|
|
657
728
|
|
|
@@ -667,7 +738,23 @@ class TextureNode extends UniformNode {
|
|
|
667
738
|
|
|
668
739
|
const textureNode = this.clone();
|
|
669
740
|
textureNode.depthNode = nodeObject( depthNode );
|
|
670
|
-
textureNode.referenceNode = this.
|
|
741
|
+
textureNode.referenceNode = this.getBase();
|
|
742
|
+
|
|
743
|
+
return nodeObject( textureNode );
|
|
744
|
+
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
/**
|
|
748
|
+
* Samples the texture by defining an offset node.
|
|
749
|
+
*
|
|
750
|
+
* @param {Node<ivec2>} offsetNode - The offset node.
|
|
751
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
752
|
+
*/
|
|
753
|
+
offset( offsetNode ) {
|
|
754
|
+
|
|
755
|
+
const textureNode = this.clone();
|
|
756
|
+
textureNode.offsetNode = nodeObject( offsetNode );
|
|
757
|
+
textureNode.referenceNode = this.getBase();
|
|
671
758
|
|
|
672
759
|
return nodeObject( textureNode );
|
|
673
760
|
|
|
@@ -713,6 +800,16 @@ class TextureNode extends UniformNode {
|
|
|
713
800
|
|
|
714
801
|
}
|
|
715
802
|
|
|
803
|
+
//
|
|
804
|
+
|
|
805
|
+
const flipYUniform = this._flipYUniform;
|
|
806
|
+
|
|
807
|
+
if ( flipYUniform !== null ) {
|
|
808
|
+
|
|
809
|
+
flipYUniform.value = ( ( texture.image instanceof ImageBitmap && texture.flipY === true ) || texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true );
|
|
810
|
+
|
|
811
|
+
}
|
|
812
|
+
|
|
716
813
|
}
|
|
717
814
|
|
|
718
815
|
/**
|
|
@@ -727,6 +824,7 @@ class TextureNode extends UniformNode {
|
|
|
727
824
|
newNode.depthNode = this.depthNode;
|
|
728
825
|
newNode.compareNode = this.compareNode;
|
|
729
826
|
newNode.gradNode = this.gradNode;
|
|
827
|
+
newNode.offsetNode = this.offsetNode;
|
|
730
828
|
|
|
731
829
|
return newNode;
|
|
732
830
|
|
|
@@ -754,7 +852,7 @@ const textureBase = /*@__PURE__*/ nodeProxy( TextureNode ).setParameterLength( 1
|
|
|
754
852
|
*
|
|
755
853
|
* @tsl
|
|
756
854
|
* @function
|
|
757
|
-
* @param {?Texture|TextureNode} [value=EmptyTexture] - The texture.
|
|
855
|
+
* @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.
|
|
758
856
|
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
759
857
|
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
760
858
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
@@ -767,7 +865,7 @@ export const texture = ( value = EmptyTexture, uvNode = null, levelNode = null,
|
|
|
767
865
|
if ( value && value.isTextureNode === true ) {
|
|
768
866
|
|
|
769
867
|
textureNode = nodeObject( value.clone() );
|
|
770
|
-
textureNode.referenceNode = value.
|
|
868
|
+
textureNode.referenceNode = value.getBase(); // Ensure the reference is set to the original node
|
|
771
869
|
|
|
772
870
|
if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
|
|
773
871
|
if ( levelNode !== null ) textureNode.levelNode = nodeObject( levelNode );
|
|
@@ -798,7 +896,7 @@ export const uniformTexture = ( value = EmptyTexture ) => texture( value );
|
|
|
798
896
|
*
|
|
799
897
|
* @tsl
|
|
800
898
|
* @function
|
|
801
|
-
* @param {?Texture|TextureNode} [value=EmptyTexture] - The texture.
|
|
899
|
+
* @param {?(Texture|TextureNode)} [value=EmptyTexture] - The texture.
|
|
802
900
|
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
803
901
|
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
804
902
|
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
@@ -806,7 +904,7 @@ export const uniformTexture = ( value = EmptyTexture ) => texture( value );
|
|
|
806
904
|
*/
|
|
807
905
|
export const textureLoad = ( ...params ) => texture( ...params ).setSampler( false );
|
|
808
906
|
|
|
809
|
-
|
|
907
|
+
export const textureLevel = ( value, uv, level ) => texture( value, uv ).level( level );
|
|
810
908
|
|
|
811
909
|
/**
|
|
812
910
|
* Converts a texture or texture node to a sampler.
|
|
@@ -346,19 +346,3 @@ export default UniformArrayNode;
|
|
|
346
346
|
* @returns {UniformArrayNode}
|
|
347
347
|
*/
|
|
348
348
|
export const uniformArray = ( values, nodeType ) => nodeObject( new UniformArrayNode( values, nodeType ) );
|
|
349
|
-
|
|
350
|
-
/**
|
|
351
|
-
* @tsl
|
|
352
|
-
* @function
|
|
353
|
-
* @deprecated since r168. Use {@link uniformArray} instead.
|
|
354
|
-
*
|
|
355
|
-
* @param {Array<any>} values - Array-like data.
|
|
356
|
-
* @param {string} nodeType - The data type of the array elements.
|
|
357
|
-
* @returns {UniformArrayNode}
|
|
358
|
-
*/
|
|
359
|
-
export const uniforms = ( values, nodeType ) => { // @deprecated, r168
|
|
360
|
-
|
|
361
|
-
console.warn( 'THREE.TSL: uniforms() has been renamed to uniformArray().' );
|
|
362
|
-
return nodeObject( new UniformArrayNode( values, nodeType ) );
|
|
363
|
-
|
|
364
|
-
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
2
|
import { addMethodChaining, nodeArray, nodeObject, nodeObjects, float } from '../tsl/TSLCore.js';
|
|
3
|
+
import { error } from '../../utils.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* This module represents the call of a {@link FunctionNode}. Developers are usually not confronted
|
|
@@ -69,12 +70,31 @@ class FunctionCallNode extends TempNode {
|
|
|
69
70
|
|
|
70
71
|
}
|
|
71
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Returns the type of this function call node.
|
|
75
|
+
*
|
|
76
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
77
|
+
* @returns {string} The type of this node.
|
|
78
|
+
*/
|
|
72
79
|
getNodeType( builder ) {
|
|
73
80
|
|
|
74
81
|
return this.functionNode.getNodeType( builder );
|
|
75
82
|
|
|
76
83
|
}
|
|
77
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Returns the function node of this function call node.
|
|
87
|
+
*
|
|
88
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
89
|
+
* @param {string} [name] - The name of the member.
|
|
90
|
+
* @returns {string} The type of the member.
|
|
91
|
+
*/
|
|
92
|
+
getMemberType( builder, name ) {
|
|
93
|
+
|
|
94
|
+
return this.functionNode.getMemberType( builder, name );
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
78
98
|
generate( builder ) {
|
|
79
99
|
|
|
80
100
|
const params = [];
|
|
@@ -102,13 +122,13 @@ class FunctionCallNode extends TempNode {
|
|
|
102
122
|
|
|
103
123
|
if ( parameters.length > inputs.length ) {
|
|
104
124
|
|
|
105
|
-
|
|
125
|
+
error( 'TSL: The number of provided parameters exceeds the expected number of inputs in \'Fn()\'.' );
|
|
106
126
|
|
|
107
127
|
parameters.length = inputs.length;
|
|
108
128
|
|
|
109
129
|
} else if ( parameters.length < inputs.length ) {
|
|
110
130
|
|
|
111
|
-
|
|
131
|
+
error( 'TSL: The number of provided parameters is less than the expected number of inputs in \'Fn()\'.' );
|
|
112
132
|
|
|
113
133
|
while ( parameters.length < inputs.length ) {
|
|
114
134
|
|
|
@@ -136,7 +156,7 @@ class FunctionCallNode extends TempNode {
|
|
|
136
156
|
|
|
137
157
|
} else {
|
|
138
158
|
|
|
139
|
-
|
|
159
|
+
error( `TSL: Input '${ inputNode.name }' not found in \'Fn()\'.` );
|
|
140
160
|
|
|
141
161
|
params.push( generateInput( float( 0 ), inputNode ) );
|
|
142
162
|
|
|
@@ -160,7 +180,7 @@ export const call = ( func, ...params ) => {
|
|
|
160
180
|
|
|
161
181
|
params = params.length > 1 || ( params[ 0 ] && params[ 0 ].isNode === true ) ? nodeArray( params ) : nodeObjects( params[ 0 ] );
|
|
162
182
|
|
|
163
|
-
return
|
|
183
|
+
return new FunctionCallNode( nodeObject( func ), params );
|
|
164
184
|
|
|
165
185
|
};
|
|
166
186
|
|
|
@@ -48,12 +48,35 @@ class FunctionNode extends CodeNode {
|
|
|
48
48
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Returns the type of this function node.
|
|
53
|
+
*
|
|
54
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
55
|
+
* @return {string} The type.
|
|
56
|
+
*/
|
|
51
57
|
getNodeType( builder ) {
|
|
52
58
|
|
|
53
59
|
return this.getNodeFunction( builder ).type;
|
|
54
60
|
|
|
55
61
|
}
|
|
56
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Returns the type of a member of this function node.
|
|
65
|
+
*
|
|
66
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
67
|
+
* @param {string} name - The name of the member.
|
|
68
|
+
* @return {string} The type of the member.
|
|
69
|
+
*/
|
|
70
|
+
getMemberType( builder, name ) {
|
|
71
|
+
|
|
72
|
+
const type = this.getNodeType( builder );
|
|
73
|
+
|
|
74
|
+
const structType = builder.getStructTypeNode( type );
|
|
75
|
+
|
|
76
|
+
return structType.getMemberType( builder, name );
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
57
80
|
/**
|
|
58
81
|
* Returns the inputs of this function node.
|
|
59
82
|
*
|
|
@@ -11,6 +11,7 @@ import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
|
11
11
|
* ] );
|
|
12
12
|
*
|
|
13
13
|
* const redColor = tintColors.element( 0 );
|
|
14
|
+
* ```
|
|
14
15
|
*
|
|
15
16
|
* @augments TempNode
|
|
16
17
|
*/
|
|
@@ -58,6 +59,18 @@ class ArrayNode extends TempNode {
|
|
|
58
59
|
|
|
59
60
|
}
|
|
60
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Returns the number of elements in the node array.
|
|
64
|
+
*
|
|
65
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
66
|
+
* @return {number} The number of elements in the node array.
|
|
67
|
+
*/
|
|
68
|
+
getArrayCount( /*builder*/ ) {
|
|
69
|
+
|
|
70
|
+
return this.count;
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
61
74
|
/**
|
|
62
75
|
* Returns the node's type.
|
|
63
76
|
*
|
|
@@ -97,6 +97,11 @@ class AssignNode extends TempNode {
|
|
|
97
97
|
|
|
98
98
|
const { targetNode, sourceNode } = this;
|
|
99
99
|
|
|
100
|
+
const scope = targetNode.getScope();
|
|
101
|
+
|
|
102
|
+
const targetProperties = builder.getNodeProperties( scope );
|
|
103
|
+
targetProperties.assign = true;
|
|
104
|
+
|
|
100
105
|
const properties = builder.getNodeProperties( this );
|
|
101
106
|
properties.sourceNode = sourceNode;
|
|
102
107
|
properties.targetNode = targetNode.context( { assign: true } );
|
|
@@ -109,11 +114,10 @@ class AssignNode extends TempNode {
|
|
|
109
114
|
|
|
110
115
|
const needsSplitAssign = this.needsSplitAssign( builder );
|
|
111
116
|
|
|
117
|
+
const target = targetNode.build( builder );
|
|
112
118
|
const targetType = targetNode.getNodeType( builder );
|
|
113
119
|
|
|
114
|
-
const target = targetNode.build( builder );
|
|
115
120
|
const source = sourceNode.build( builder, targetType );
|
|
116
|
-
|
|
117
121
|
const sourceType = sourceNode.getNodeType( builder );
|
|
118
122
|
|
|
119
123
|
const nodeData = builder.getDataFromNode( this );
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { nodeObject, varying } from '../tsl/TSLBase.js';
|
|
3
|
+
import { warn } from '../../utils.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Base class for representing shader attributes as nodes.
|
|
@@ -125,7 +126,7 @@ class AttributeNode extends Node {
|
|
|
125
126
|
|
|
126
127
|
} else {
|
|
127
128
|
|
|
128
|
-
|
|
129
|
+
warn( `AttributeNode: Vertex attribute "${ attributeName }" not found on geometry.` );
|
|
129
130
|
|
|
130
131
|
return builder.generateConst( nodeType );
|
|
131
132
|
|