super-three 0.171.0 → 0.172.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 +157 -49
- package/build/three.core.js +104 -42
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +53 -8
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +10 -5
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +21191 -1008
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +21189 -1008
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +3 -2
- package/examples/jsm/controls/ArcballControls.js +28 -19
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +11 -7
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +22 -2
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -1
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
- package/examples/jsm/misc/Volume.js +20 -12
- package/examples/jsm/misc/VolumeSlice.js +2 -2
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +2 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +9 -4
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +1 -1
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +474 -21
- package/src/materials/nodes/PointsNodeMaterial.js +22 -13
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
- package/src/nodes/Nodes.js +1 -6
- package/src/nodes/TSL.js +2 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +24 -5
- package/src/nodes/accessors/BatchNode.js +39 -3
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +49 -0
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +302 -8
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +59 -3
- package/src/nodes/accessors/Object3DNode.js +102 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +53 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
- package/src/nodes/accessors/ReferenceNode.js +202 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +168 -4
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +36 -0
- package/src/nodes/accessors/Texture3DNode.js +89 -5
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +309 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +223 -23
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +82 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +24 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +337 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +945 -15
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +141 -0
- package/src/nodes/core/NodeVar.js +30 -0
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +33 -2
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +78 -0
- package/src/nodes/core/StructTypeNode.js +39 -1
- package/src/nodes/core/TempNode.js +30 -4
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +52 -0
- package/src/nodes/core/VaryingNode.js +83 -2
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +298 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +87 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +93 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +240 -34
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +70 -3
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +614 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +233 -0
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +1 -1
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/tsl/TSLBase.js +2 -2
- package/src/nodes/utils/ArrayElementNode.js +38 -2
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +74 -1
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +40 -0
- package/src/nodes/utils/Timer.js +19 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +1 -2
- package/src/objects/ClippingGroup.js +49 -0
- package/src/renderers/WebGLRenderer.js +23 -4
- package/src/renderers/common/Animation.js +63 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +467 -52
- package/src/renderers/common/Background.js +34 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +38 -1
- package/src/renderers/common/ClippingContext.js +107 -14
- package/src/renderers/common/Color4.js +36 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +98 -0
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +87 -0
- package/src/renderers/common/Lighting.js +26 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +75 -3
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +33 -10
- package/src/renderers/common/RenderContext.js +169 -4
- package/src/renderers/common/RenderContexts.js +42 -2
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +31 -0
- package/src/renderers/common/RenderObject.js +328 -4
- package/src/renderers/common/RenderObjects.js +101 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1096 -31
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +121 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +83 -0
- package/src/renderers/common/Uniform.js +188 -2
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +139 -2
- package/src/renderers/common/extras/PMREMGenerator.js +24 -3
- package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +189 -0
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +327 -60
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +480 -49
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
- package/src/renderers/webgpu/WebGPURenderer.js +35 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +7 -1
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/nodes/core/UniformGroup.js +0 -13
- 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/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -9,6 +9,13 @@ import { NodeUpdateType } from '../core/constants.js';
|
|
|
9
9
|
|
|
10
10
|
import { IntType, UnsignedIntType } from '../../constants.js';
|
|
11
11
|
|
|
12
|
+
/** @module TextureNode **/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* This type of uniform node represents a 2D texture.
|
|
16
|
+
*
|
|
17
|
+
* @augments module:UniformNode~UniformNode
|
|
18
|
+
*/
|
|
12
19
|
class TextureNode extends UniformNode {
|
|
13
20
|
|
|
14
21
|
static get type() {
|
|
@@ -17,26 +24,125 @@ class TextureNode extends UniformNode {
|
|
|
17
24
|
|
|
18
25
|
}
|
|
19
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new texture node.
|
|
29
|
+
*
|
|
30
|
+
* @param {Texture} value - The texture.
|
|
31
|
+
* @param {Node<vec2|vec3>?} [uvNode=null] - The uv node.
|
|
32
|
+
* @param {Node<int>?} [levelNode=null] - The level node.
|
|
33
|
+
* @param {Node<float>?} [biasNode=null] - The bias node.
|
|
34
|
+
*/
|
|
20
35
|
constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
|
|
21
36
|
|
|
22
37
|
super( value );
|
|
23
38
|
|
|
39
|
+
/**
|
|
40
|
+
* This flag can be used for type testing.
|
|
41
|
+
*
|
|
42
|
+
* @type {Boolean}
|
|
43
|
+
* @readonly
|
|
44
|
+
* @default true
|
|
45
|
+
*/
|
|
24
46
|
this.isTextureNode = true;
|
|
25
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Represents the texture coordinates.
|
|
50
|
+
*
|
|
51
|
+
* @type {Node<vec2|vec3>?}
|
|
52
|
+
* @default null
|
|
53
|
+
*/
|
|
26
54
|
this.uvNode = uvNode;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Represents the mip level that should be selected.
|
|
58
|
+
*
|
|
59
|
+
* @type {Node<int>?}
|
|
60
|
+
* @default null
|
|
61
|
+
*/
|
|
27
62
|
this.levelNode = levelNode;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Represents the bias to be applied during level-of-detail computation.
|
|
66
|
+
*
|
|
67
|
+
* @type {Node<float>?}
|
|
68
|
+
* @default null
|
|
69
|
+
*/
|
|
28
70
|
this.biasNode = biasNode;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Represents a reference value a texture sample is compared to.
|
|
74
|
+
*
|
|
75
|
+
* @type {Node<float>?}
|
|
76
|
+
* @default null
|
|
77
|
+
*/
|
|
29
78
|
this.compareNode = null;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* When using texture arrays, the depth node defines the layer to select.
|
|
82
|
+
*
|
|
83
|
+
* @type {Node<int>?}
|
|
84
|
+
* @default null
|
|
85
|
+
*/
|
|
30
86
|
this.depthNode = null;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* When defined, a texture is sampled using explicit gradients.
|
|
90
|
+
*
|
|
91
|
+
* @type {Array<Node<vec2>>?}
|
|
92
|
+
* @default null
|
|
93
|
+
*/
|
|
31
94
|
this.gradNode = null;
|
|
32
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Whether texture values should be sampled or fetched.
|
|
98
|
+
*
|
|
99
|
+
* @type {Boolean}
|
|
100
|
+
* @default true
|
|
101
|
+
*/
|
|
33
102
|
this.sampler = true;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Whether the uv transformation matrix should be
|
|
106
|
+
* automatically updated or not. Use `setUpdateMatrix()`
|
|
107
|
+
* if you want to change the value of the property.
|
|
108
|
+
*
|
|
109
|
+
* @type {Boolean}
|
|
110
|
+
* @default false
|
|
111
|
+
*/
|
|
34
112
|
this.updateMatrix = false;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* By default the `update()` method is not executed. `setUpdateMatrix()`
|
|
116
|
+
* sets the value to `frame` when the uv transformation matrix should
|
|
117
|
+
* automatically be updated.
|
|
118
|
+
*
|
|
119
|
+
* @type {String}
|
|
120
|
+
* @default 'none'
|
|
121
|
+
*/
|
|
35
122
|
this.updateType = NodeUpdateType.NONE;
|
|
36
123
|
|
|
124
|
+
/**
|
|
125
|
+
* The reference node.
|
|
126
|
+
*
|
|
127
|
+
* @type {Node?}
|
|
128
|
+
* @default null
|
|
129
|
+
*/
|
|
37
130
|
this.referenceNode = null;
|
|
38
131
|
|
|
132
|
+
/**
|
|
133
|
+
* The texture value is stored in a private property.
|
|
134
|
+
*
|
|
135
|
+
* @private
|
|
136
|
+
* @type {Texture}
|
|
137
|
+
*/
|
|
39
138
|
this._value = value;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* The uniform node that represents the uv transformation matrix.
|
|
142
|
+
*
|
|
143
|
+
* @private
|
|
144
|
+
* @type {UniformNode<mat3>?}
|
|
145
|
+
*/
|
|
40
146
|
this._matrixUniform = null;
|
|
41
147
|
|
|
42
148
|
this.setUpdateMatrix( uvNode === null );
|
|
@@ -57,18 +163,35 @@ class TextureNode extends UniformNode {
|
|
|
57
163
|
|
|
58
164
|
}
|
|
59
165
|
|
|
166
|
+
/**
|
|
167
|
+
* The texture value.
|
|
168
|
+
*
|
|
169
|
+
* @type {Texture}
|
|
170
|
+
*/
|
|
60
171
|
get value() {
|
|
61
172
|
|
|
62
173
|
return this.referenceNode ? this.referenceNode.value : this._value;
|
|
63
174
|
|
|
64
175
|
}
|
|
65
176
|
|
|
177
|
+
/**
|
|
178
|
+
* Overwritten since the uniform hash is defined by the texture's UUID.
|
|
179
|
+
*
|
|
180
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
181
|
+
* @return {String} The uniform hash.
|
|
182
|
+
*/
|
|
66
183
|
getUniformHash( /*builder*/ ) {
|
|
67
184
|
|
|
68
185
|
return this.value.uuid;
|
|
69
186
|
|
|
70
187
|
}
|
|
71
188
|
|
|
189
|
+
/**
|
|
190
|
+
* Overwritten since the node type is inferred from the texture type.
|
|
191
|
+
*
|
|
192
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
193
|
+
* @return {String} The node type.
|
|
194
|
+
*/
|
|
72
195
|
getNodeType( /*builder*/ ) {
|
|
73
196
|
|
|
74
197
|
if ( this.value.isDepthTexture === true ) return 'float';
|
|
@@ -87,24 +210,47 @@ class TextureNode extends UniformNode {
|
|
|
87
210
|
|
|
88
211
|
}
|
|
89
212
|
|
|
213
|
+
/**
|
|
214
|
+
* Overwrites the default implementation to return a fixed value `'texture'`.
|
|
215
|
+
*
|
|
216
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
217
|
+
* @return {String} The input type.
|
|
218
|
+
*/
|
|
90
219
|
getInputType( /*builder*/ ) {
|
|
91
220
|
|
|
92
221
|
return 'texture';
|
|
93
222
|
|
|
94
223
|
}
|
|
95
224
|
|
|
225
|
+
/**
|
|
226
|
+
* Returns a default uvs based on the current texture's channel.
|
|
227
|
+
*
|
|
228
|
+
* @return {AttributeNode<vec2>} The default uvs.
|
|
229
|
+
*/
|
|
96
230
|
getDefaultUV() {
|
|
97
231
|
|
|
98
232
|
return uv( this.value.channel );
|
|
99
233
|
|
|
100
234
|
}
|
|
101
235
|
|
|
236
|
+
/**
|
|
237
|
+
* Overwritten to always return the texture reference of the node.
|
|
238
|
+
*
|
|
239
|
+
* @param {Any} state - This method can be invocated in different contexts so `state` can refer to any object type.
|
|
240
|
+
* @return {Texture} The texture reference.
|
|
241
|
+
*/
|
|
102
242
|
updateReference( /*state*/ ) {
|
|
103
243
|
|
|
104
244
|
return this.value;
|
|
105
245
|
|
|
106
246
|
}
|
|
107
247
|
|
|
248
|
+
/**
|
|
249
|
+
* Transforms the given uv node with the texture transformation matrix.
|
|
250
|
+
*
|
|
251
|
+
* @param {Node} uvNode - The uv node to transform.
|
|
252
|
+
* @return {Node} The transformed uv node.
|
|
253
|
+
*/
|
|
108
254
|
getTransformedUV( uvNode ) {
|
|
109
255
|
|
|
110
256
|
if ( this._matrixUniform === null ) this._matrixUniform = uniform( this.value.matrix );
|
|
@@ -113,15 +259,29 @@ class TextureNode extends UniformNode {
|
|
|
113
259
|
|
|
114
260
|
}
|
|
115
261
|
|
|
262
|
+
/**
|
|
263
|
+
* Defines whether the uv transformation matrix should automatically be updated or not.
|
|
264
|
+
*
|
|
265
|
+
* @param {Boolean} value - The update toggle.
|
|
266
|
+
* @return {TextureNode} A reference to this node.
|
|
267
|
+
*/
|
|
116
268
|
setUpdateMatrix( value ) {
|
|
117
269
|
|
|
118
270
|
this.updateMatrix = value;
|
|
119
|
-
this.updateType = value ? NodeUpdateType.
|
|
271
|
+
this.updateType = value ? NodeUpdateType.RENDER : NodeUpdateType.NONE;
|
|
120
272
|
|
|
121
273
|
return this;
|
|
122
274
|
|
|
123
275
|
}
|
|
124
276
|
|
|
277
|
+
/**
|
|
278
|
+
* Setups the uv node. Depending on the backend as well as texture's image and type, it might be necessary
|
|
279
|
+
* to modify the uv node for correct sampling.
|
|
280
|
+
*
|
|
281
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
282
|
+
* @param {Node} uvNode - The uv node to setup.
|
|
283
|
+
* @return {Node} The updated uv node.
|
|
284
|
+
*/
|
|
125
285
|
setupUV( builder, uvNode ) {
|
|
126
286
|
|
|
127
287
|
const texture = this.value;
|
|
@@ -144,6 +304,11 @@ class TextureNode extends UniformNode {
|
|
|
144
304
|
|
|
145
305
|
}
|
|
146
306
|
|
|
307
|
+
/**
|
|
308
|
+
* Setups texture node by preparing the internal nodes for code generation.
|
|
309
|
+
*
|
|
310
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
311
|
+
*/
|
|
147
312
|
setup( builder ) {
|
|
148
313
|
|
|
149
314
|
const properties = builder.getNodeProperties( this );
|
|
@@ -151,6 +316,16 @@ class TextureNode extends UniformNode {
|
|
|
151
316
|
|
|
152
317
|
//
|
|
153
318
|
|
|
319
|
+
const texture = this.value;
|
|
320
|
+
|
|
321
|
+
if ( ! texture || texture.isTexture !== true ) {
|
|
322
|
+
|
|
323
|
+
throw new Error( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().' );
|
|
324
|
+
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
//
|
|
328
|
+
|
|
154
329
|
let uvNode = this.uvNode;
|
|
155
330
|
|
|
156
331
|
if ( ( uvNode === null || builder.context.forceUVContext === true ) && builder.context.getUV ) {
|
|
@@ -190,12 +365,32 @@ class TextureNode extends UniformNode {
|
|
|
190
365
|
|
|
191
366
|
}
|
|
192
367
|
|
|
368
|
+
/**
|
|
369
|
+
* Generates the uv code snippet.
|
|
370
|
+
*
|
|
371
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
372
|
+
* @param {Node} uvNode - The uv node to generate code for.
|
|
373
|
+
* @return {String} The generated code snippet.
|
|
374
|
+
*/
|
|
193
375
|
generateUV( builder, uvNode ) {
|
|
194
376
|
|
|
195
377
|
return uvNode.build( builder, this.sampler === true ? 'vec2' : 'ivec2' );
|
|
196
378
|
|
|
197
379
|
}
|
|
198
380
|
|
|
381
|
+
/**
|
|
382
|
+
* Generates the snippet for the texture sampling.
|
|
383
|
+
*
|
|
384
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
385
|
+
* @param {String} textureProperty - The texture property.
|
|
386
|
+
* @param {String} uvSnippet - The uv snippet.
|
|
387
|
+
* @param {String} levelSnippet - The level snippet.
|
|
388
|
+
* @param {String} biasSnippet - The bias snippet.
|
|
389
|
+
* @param {String} depthSnippet - The depth snippet.
|
|
390
|
+
* @param {String} compareSnippet - The compare snippet.
|
|
391
|
+
* @param {String} gradSnippet - The grad snippet.
|
|
392
|
+
* @return {String} The generated code snippet.
|
|
393
|
+
*/
|
|
199
394
|
generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet ) {
|
|
200
395
|
|
|
201
396
|
const texture = this.value;
|
|
@@ -232,18 +427,18 @@ class TextureNode extends UniformNode {
|
|
|
232
427
|
|
|
233
428
|
}
|
|
234
429
|
|
|
430
|
+
/**
|
|
431
|
+
* Generates the code snippet of the texture node.
|
|
432
|
+
*
|
|
433
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
434
|
+
* @param {String} output - The current output.
|
|
435
|
+
* @return {String} The generated code snippet.
|
|
436
|
+
*/
|
|
235
437
|
generate( builder, output ) {
|
|
236
438
|
|
|
237
|
-
const properties = builder.getNodeProperties( this );
|
|
238
|
-
|
|
239
439
|
const texture = this.value;
|
|
240
440
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
throw new Error( 'TextureNode: Need a three.js texture.' );
|
|
244
|
-
|
|
245
|
-
}
|
|
246
|
-
|
|
441
|
+
const properties = builder.getNodeProperties( this );
|
|
247
442
|
const textureProperty = super.generate( builder, 'property' );
|
|
248
443
|
|
|
249
444
|
if ( output === 'sampler' ) {
|
|
@@ -299,6 +494,12 @@ class TextureNode extends UniformNode {
|
|
|
299
494
|
|
|
300
495
|
}
|
|
301
496
|
|
|
497
|
+
/**
|
|
498
|
+
* Sets the sampler value.
|
|
499
|
+
*
|
|
500
|
+
* @param {Boolean} value - The sampler value to set.
|
|
501
|
+
* @return {TextureNode} A reference to this texture node.
|
|
502
|
+
*/
|
|
302
503
|
setSampler( value ) {
|
|
303
504
|
|
|
304
505
|
this.sampler = value;
|
|
@@ -307,6 +508,11 @@ class TextureNode extends UniformNode {
|
|
|
307
508
|
|
|
308
509
|
}
|
|
309
510
|
|
|
511
|
+
/**
|
|
512
|
+
* Returns the sampler value.
|
|
513
|
+
*
|
|
514
|
+
* @return {Boolean} The sampler value.
|
|
515
|
+
*/
|
|
310
516
|
getSampler() {
|
|
311
517
|
|
|
312
518
|
return this.sampler;
|
|
@@ -315,7 +521,21 @@ class TextureNode extends UniformNode {
|
|
|
315
521
|
|
|
316
522
|
// @TODO: Move to TSL
|
|
317
523
|
|
|
318
|
-
uv( uvNode ) {
|
|
524
|
+
uv( uvNode ) { // @deprecated, r172
|
|
525
|
+
|
|
526
|
+
console.warn( 'THREE.TextureNode: .uv() has been renamed. Use .sample() instead.' );
|
|
527
|
+
|
|
528
|
+
return this.sample( uvNode );
|
|
529
|
+
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
/**
|
|
533
|
+
* Samples the texture with the given uv node.
|
|
534
|
+
*
|
|
535
|
+
* @param {Node} uvNode - The uv node.
|
|
536
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
537
|
+
*/
|
|
538
|
+
sample( uvNode ) {
|
|
319
539
|
|
|
320
540
|
const textureNode = this.clone();
|
|
321
541
|
textureNode.uvNode = nodeObject( uvNode );
|
|
@@ -325,6 +545,12 @@ class TextureNode extends UniformNode {
|
|
|
325
545
|
|
|
326
546
|
}
|
|
327
547
|
|
|
548
|
+
/**
|
|
549
|
+
* Samples a blurred version of the texture by defining an internal bias.
|
|
550
|
+
*
|
|
551
|
+
* @param {Node<float>} amountNode - How blurred the texture should be.
|
|
552
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
553
|
+
*/
|
|
328
554
|
blur( amountNode ) {
|
|
329
555
|
|
|
330
556
|
const textureNode = this.clone();
|
|
@@ -335,6 +561,12 @@ class TextureNode extends UniformNode {
|
|
|
335
561
|
|
|
336
562
|
}
|
|
337
563
|
|
|
564
|
+
/**
|
|
565
|
+
* Samples a specific mip of the texture.
|
|
566
|
+
*
|
|
567
|
+
* @param {Node<int>} levelNode - The mip level to sample.
|
|
568
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
569
|
+
*/
|
|
338
570
|
level( levelNode ) {
|
|
339
571
|
|
|
340
572
|
const textureNode = this.clone();
|
|
@@ -345,12 +577,24 @@ class TextureNode extends UniformNode {
|
|
|
345
577
|
|
|
346
578
|
}
|
|
347
579
|
|
|
580
|
+
/**
|
|
581
|
+
* Returns the texture size of the requested level.
|
|
582
|
+
*
|
|
583
|
+
* @param {Node<int>} levelNode - The level to compute the size for.
|
|
584
|
+
* @return {TextureSizeNode} The texture size.
|
|
585
|
+
*/
|
|
348
586
|
size( levelNode ) {
|
|
349
587
|
|
|
350
588
|
return textureSize( this, levelNode );
|
|
351
589
|
|
|
352
590
|
}
|
|
353
591
|
|
|
592
|
+
/**
|
|
593
|
+
* Samples the texture with the given bias.
|
|
594
|
+
*
|
|
595
|
+
* @param {Node<float>} biasNode - The bias node.
|
|
596
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
597
|
+
*/
|
|
354
598
|
bias( biasNode ) {
|
|
355
599
|
|
|
356
600
|
const textureNode = this.clone();
|
|
@@ -361,6 +605,12 @@ class TextureNode extends UniformNode {
|
|
|
361
605
|
|
|
362
606
|
}
|
|
363
607
|
|
|
608
|
+
/**
|
|
609
|
+
* Samples the texture by executing a compare operation.
|
|
610
|
+
*
|
|
611
|
+
* @param {Node<float>} compareNode - The node that defines the compare value.
|
|
612
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
613
|
+
*/
|
|
364
614
|
compare( compareNode ) {
|
|
365
615
|
|
|
366
616
|
const textureNode = this.clone();
|
|
@@ -371,6 +621,13 @@ class TextureNode extends UniformNode {
|
|
|
371
621
|
|
|
372
622
|
}
|
|
373
623
|
|
|
624
|
+
/**
|
|
625
|
+
* Samples the texture using an explicit gradient.
|
|
626
|
+
*
|
|
627
|
+
* @param {Node<vec2>} gradNodeX - The gradX node.
|
|
628
|
+
* @param {Node<vec2>} gradNodeY - The gradY node.
|
|
629
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
630
|
+
*/
|
|
374
631
|
grad( gradNodeX, gradNodeY ) {
|
|
375
632
|
|
|
376
633
|
const textureNode = this.clone();
|
|
@@ -381,6 +638,12 @@ class TextureNode extends UniformNode {
|
|
|
381
638
|
|
|
382
639
|
}
|
|
383
640
|
|
|
641
|
+
/**
|
|
642
|
+
* Samples the texture by defining a depth node.
|
|
643
|
+
*
|
|
644
|
+
* @param {Node<int>} depthNode - The depth node.
|
|
645
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
646
|
+
*/
|
|
384
647
|
depth( depthNode ) {
|
|
385
648
|
|
|
386
649
|
const textureNode = this.clone();
|
|
@@ -415,6 +678,9 @@ class TextureNode extends UniformNode {
|
|
|
415
678
|
|
|
416
679
|
}
|
|
417
680
|
|
|
681
|
+
/**
|
|
682
|
+
* The update is used to implement the update of the uv transformation matrix.
|
|
683
|
+
*/
|
|
418
684
|
update() {
|
|
419
685
|
|
|
420
686
|
const texture = this.value;
|
|
@@ -430,6 +696,11 @@ class TextureNode extends UniformNode {
|
|
|
430
696
|
|
|
431
697
|
}
|
|
432
698
|
|
|
699
|
+
/**
|
|
700
|
+
* Clones the texture node.
|
|
701
|
+
*
|
|
702
|
+
* @return {TextureNode} The cloned texture node.
|
|
703
|
+
*/
|
|
433
704
|
clone() {
|
|
434
705
|
|
|
435
706
|
const newNode = new this.constructor( this.value, this.uvNode, this.levelNode, this.biasNode );
|
|
@@ -443,9 +714,37 @@ class TextureNode extends UniformNode {
|
|
|
443
714
|
|
|
444
715
|
export default TextureNode;
|
|
445
716
|
|
|
717
|
+
/**
|
|
718
|
+
* TSL function for creating a texture node.
|
|
719
|
+
*
|
|
720
|
+
* @function
|
|
721
|
+
* @param {Texture} value - The texture.
|
|
722
|
+
* @param {Node<vec2|vec3>?} [uvNode=null] - The uv node.
|
|
723
|
+
* @param {Node<int>?} [levelNode=null] - The level node.
|
|
724
|
+
* @param {Node<float>?} [biasNode=null] - The bias node.
|
|
725
|
+
* @returns {TextureNode}
|
|
726
|
+
*/
|
|
446
727
|
export const texture = /*@__PURE__*/ nodeProxy( TextureNode );
|
|
728
|
+
|
|
729
|
+
/**
|
|
730
|
+
* TSL function for creating a texture node that fetches/loads texels without interpolation.
|
|
731
|
+
*
|
|
732
|
+
* @function
|
|
733
|
+
* @param {Texture} value - The texture.
|
|
734
|
+
* @param {Node<vec2|vec3>?} [uvNode=null] - The uv node.
|
|
735
|
+
* @param {Node<int>?} [levelNode=null] - The level node.
|
|
736
|
+
* @param {Node<float>?} [biasNode=null] - The bias node.
|
|
737
|
+
* @returns {TextureNode}
|
|
738
|
+
*/
|
|
447
739
|
export const textureLoad = ( ...params ) => texture( ...params ).setSampler( false );
|
|
448
740
|
|
|
449
741
|
//export const textureLevel = ( value, uv, level ) => texture( value, uv ).level( level );
|
|
450
742
|
|
|
743
|
+
/**
|
|
744
|
+
* Converts a texture or texture node to a sampler.
|
|
745
|
+
*
|
|
746
|
+
* @function
|
|
747
|
+
* @param {TextureNode|Texture} aTexture - The texture or texture node to convert.
|
|
748
|
+
* @returns {Node}
|
|
749
|
+
*/
|
|
451
750
|
export const sampler = ( aTexture ) => ( aTexture.isNode === true ? aTexture : texture( aTexture ) ).convert( 'sampler' );
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/** @module TextureSizeNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A node that represents the dimensions of a texture. The texture size is
|
|
8
|
+
* retrieved in the shader via built-in shader functions like `textureDimensions()`
|
|
9
|
+
* or `textureSize()`.
|
|
10
|
+
*
|
|
11
|
+
* @augments Node
|
|
12
|
+
*/
|
|
4
13
|
class TextureSizeNode extends Node {
|
|
5
14
|
|
|
6
15
|
static get type() {
|
|
@@ -9,13 +18,38 @@ class TextureSizeNode extends Node {
|
|
|
9
18
|
|
|
10
19
|
}
|
|
11
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new texture size node.
|
|
23
|
+
*
|
|
24
|
+
* @param {TextureNode} textureNode - A texture node which size should be retrieved.
|
|
25
|
+
* @param {Node<int>?} [levelNode=null] - A level node which defines the requested mip.
|
|
26
|
+
*/
|
|
12
27
|
constructor( textureNode, levelNode = null ) {
|
|
13
28
|
|
|
14
29
|
super( 'uvec2' );
|
|
15
30
|
|
|
31
|
+
/**
|
|
32
|
+
* This flag can be used for type testing.
|
|
33
|
+
*
|
|
34
|
+
* @type {Boolean}
|
|
35
|
+
* @readonly
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
16
38
|
this.isTextureSizeNode = true;
|
|
17
39
|
|
|
40
|
+
/**
|
|
41
|
+
* A texture node which size should be retrieved.
|
|
42
|
+
*
|
|
43
|
+
* @type {TextureNode}
|
|
44
|
+
*/
|
|
18
45
|
this.textureNode = textureNode;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* A level node which defines the requested mip.
|
|
49
|
+
*
|
|
50
|
+
* @type {Node<int>}
|
|
51
|
+
* @default null
|
|
52
|
+
*/
|
|
19
53
|
this.levelNode = levelNode;
|
|
20
54
|
|
|
21
55
|
}
|
|
@@ -33,4 +67,12 @@ class TextureSizeNode extends Node {
|
|
|
33
67
|
|
|
34
68
|
export default TextureSizeNode;
|
|
35
69
|
|
|
70
|
+
/**
|
|
71
|
+
* TSL function for creating a texture size node.
|
|
72
|
+
*
|
|
73
|
+
* @function
|
|
74
|
+
* @param {TextureNode} textureNode - A texture node which size should be retrieved.
|
|
75
|
+
* @param {Node<int>?} [levelNode=null] - A level node which defines the requested mip.
|
|
76
|
+
* @returns {TextureSizeNode}
|
|
77
|
+
*/
|
|
36
78
|
export const textureSize = /*@__PURE__*/ nodeProxy( TextureSizeNode );
|
|
@@ -1,3 +1,12 @@
|
|
|
1
1
|
import { attribute } from '../core/AttributeNode.js';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/** @module UV **/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* TSL function for creating an uv attribute node with the given index.
|
|
7
|
+
*
|
|
8
|
+
* @function
|
|
9
|
+
* @param {Number} [index=0] - The uv index.
|
|
10
|
+
* @return {AttributeNode<vec2>} The uv attribute node.
|
|
11
|
+
*/
|
|
12
|
+
export const uv = ( index = 0 ) => attribute( 'uv' + ( index > 0 ? index : '' ), 'vec2' );
|