@plastic-software/three 0.167.4 → 0.174.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +36217 -23964
- package/build/three.core.js +48830 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +10175 -46744
- package/build/three.module.min.js +2 -3
- package/build/three.tsl.js +550 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +44348 -50671
- package/build/three.webgpu.min.js +2 -3
- package/build/three.webgpu.nodes.js +70301 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +3 -15
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/animation/CCDIKSolver.js +61 -11
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/capabilities/WebGPU.js +1 -10
- package/examples/jsm/controls/ArcballControls.js +262 -231
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +801 -777
- package/examples/jsm/controls/PointerLockControls.js +26 -20
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +119 -68
- package/examples/jsm/csm/CSM.js +2 -2
- package/examples/jsm/csm/CSMFrustum.js +7 -4
- package/examples/jsm/csm/CSMHelper.js +2 -0
- package/examples/jsm/csm/CSMShadowNode.js +442 -0
- package/examples/jsm/curves/NURBSCurve.js +33 -2
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +181 -109
- package/examples/jsm/exporters/KTX2Exporter.js +54 -23
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +11 -9
- package/examples/jsm/exporters/USDZExporter.js +50 -11
- package/examples/jsm/geometries/DecalGeometry.js +73 -21
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/HTMLMesh.js +1 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/interactive/SelectionHelper.js +3 -1
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +18 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -12
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/LineGeometry.js +25 -0
- package/examples/jsm/lines/LineMaterial.js +0 -1
- package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
- package/examples/jsm/lines/webgpu/Line2.js +2 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
- package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +104 -2
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +15 -12
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +71 -22
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +29 -14
- package/examples/jsm/loaders/KTX2Loader.js +160 -58
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +22 -136
- package/examples/jsm/loaders/LottieLoader.js +2 -1
- package/examples/jsm/loaders/MTLLoader.js +27 -7
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +15 -12
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +17 -18
- package/examples/jsm/loaders/VRMLLoader.js +17 -17
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ColorSpaces.js +76 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
- package/examples/jsm/misc/Timer.js +27 -12
- package/examples/jsm/misc/Volume.js +28 -18
- package/examples/jsm/misc/VolumeSlice.js +19 -16
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/LensflareMesh.js +324 -0
- package/examples/jsm/objects/Reflector.js +5 -2
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +14 -14
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +11 -9
- package/examples/jsm/objects/WaterMesh.js +38 -33
- package/examples/jsm/physics/JoltPhysics.js +8 -8
- package/examples/jsm/physics/RapierPhysics.js +5 -5
- package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +37 -51
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +8 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/FXAAShader.js +225 -224
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +6 -2
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +12 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
- package/examples/jsm/transpiler/TSLEncoder.js +96 -21
- package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
- package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
- package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
- package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
- package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
- package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
- package/examples/jsm/tsl/display/FXAANode.js +364 -0
- package/examples/jsm/tsl/display/FilmNode.js +100 -0
- package/examples/jsm/tsl/display/GTAONode.js +521 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
- package/examples/jsm/tsl/display/LensflareNode.js +278 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +750 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
- package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
- package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
- package/examples/jsm/tsl/display/SMAANode.js +767 -0
- package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
- package/examples/jsm/tsl/display/SSRNode.js +538 -0
- package/examples/jsm/tsl/display/Sepia.js +24 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
- package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
- package/examples/jsm/tsl/display/TransitionNode.js +140 -0
- package/examples/jsm/tsl/display/hashBlur.js +34 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
- package/examples/jsm/tsl/math/Bayer.js +18 -0
- package/examples/jsm/tsl/utils/Raymarching.js +65 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneOptimizer.js +410 -0
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/UVsDebug.js +1 -1
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
- package/examples/jsm/webxr/Text2D.js +6 -6
- package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +14 -9
- package/src/Three.Core.js +182 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +543 -0
- package/src/Three.WebGPU.Nodes.js +23 -0
- package/src/Three.WebGPU.js +13 -184
- package/src/Three.js +1 -176
- package/src/animation/AnimationClip.js +2 -2
- package/src/animation/AnimationObjectGroup.js +2 -2
- package/src/animation/AnimationUtils.js +1 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +379 -2
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +29 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +173 -34
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +6 -6
- package/src/core/BufferAttribute.js +4 -9
- package/src/core/BufferGeometry.js +48 -8
- package/src/core/Clock.js +1 -1
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/InterleavedBuffer.js +4 -13
- package/src/core/Object3D.js +573 -3
- package/src/core/RenderTarget.js +22 -4
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Controls.js +104 -0
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +18 -7
- package/src/extras/ImageUtils.js +18 -11
- package/src/extras/PMREMGenerator.js +40 -9
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +96 -10
- package/src/extras/core/Curve.js +153 -53
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +50 -4
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +52 -0
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +43 -3
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +61 -18
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +24 -2
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- package/src/loaders/Loader.js +132 -0
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/nodes/NodeLoader.js +189 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
- package/src/loaders/nodes/NodeObjectLoader.js +151 -0
- package/src/materials/LineDashedMaterial.js +0 -1
- package/src/materials/Material.js +469 -7
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -2
- package/src/materials/MeshStandardMaterial.js +2 -2
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
- package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
- package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
- package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
- package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
- package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
- package/src/materials/nodes/NodeMaterial.js +1180 -0
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
- package/src/materials/nodes/PointsNodeMaterial.js +153 -0
- package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
- package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/ColorManagement.js +143 -102
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +96 -2
- package/src/math/MathUtils.js +182 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +265 -9
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +230 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -13
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +84 -166
- package/src/nodes/TSL.js +167 -0
- package/src/nodes/accessors/AccessorsUtils.js +39 -10
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +93 -26
- package/src/nodes/accessors/Bitangent.js +54 -0
- package/src/nodes/accessors/BufferAttributeNode.js +189 -11
- package/src/nodes/accessors/BufferNode.js +70 -5
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +129 -0
- package/src/nodes/accessors/ClippingNode.js +152 -43
- package/src/nodes/accessors/CubeTextureNode.js +76 -13
- package/src/nodes/accessors/InstanceNode.js +118 -35
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +129 -0
- package/src/nodes/accessors/MaterialNode.js +394 -58
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
- package/src/nodes/accessors/ModelNode.js +159 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
- package/src/nodes/accessors/MorphNode.js +60 -13
- package/src/nodes/accessors/Normal.js +156 -0
- package/src/nodes/accessors/Object3DNode.js +154 -35
- package/src/nodes/accessors/PointUVNode.js +35 -6
- package/src/nodes/accessors/Position.js +64 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
- package/src/nodes/accessors/ReferenceNode.js +243 -6
- package/src/nodes/accessors/ReflectVector.js +36 -0
- package/src/nodes/accessors/RendererReferenceNode.js +57 -7
- package/src/nodes/accessors/SceneNode.js +98 -6
- package/src/nodes/accessors/SkinningNode.js +214 -21
- package/src/nodes/accessors/StorageBufferNode.js +288 -28
- package/src/nodes/accessors/StorageTextureNode.js +139 -12
- package/src/nodes/accessors/Tangent.js +62 -0
- package/src/nodes/accessors/Texture3DNode.js +98 -12
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
- package/src/nodes/accessors/TextureNode.js +347 -34
- package/src/nodes/accessors/TextureSizeNode.js +51 -9
- package/src/nodes/accessors/UV.js +11 -0
- package/src/nodes/accessors/UniformArrayNode.js +241 -32
- package/src/nodes/accessors/UserDataNode.js +55 -7
- package/src/nodes/accessors/VelocityNode.js +223 -0
- package/src/nodes/accessors/VertexColorNode.js +45 -6
- package/src/nodes/code/CodeNode.js +108 -8
- package/src/nodes/code/ExpressionNode.js +38 -7
- package/src/nodes/code/FunctionCallNode.js +62 -11
- package/src/nodes/code/FunctionNode.js +54 -24
- package/src/nodes/code/ScriptableNode.js +241 -17
- package/src/nodes/code/ScriptableValueNode.js +93 -8
- package/src/nodes/core/ArrayNode.js +142 -0
- package/src/nodes/core/AssignNode.js +60 -12
- package/src/nodes/core/AttributeNode.js +55 -22
- package/src/nodes/core/BypassNode.js +59 -11
- package/src/nodes/core/CacheNode.js +64 -10
- package/src/nodes/core/ConstNode.js +38 -3
- package/src/nodes/core/ContextNode.js +87 -12
- package/src/nodes/core/IndexNode.js +102 -10
- package/src/nodes/core/InputNode.js +55 -3
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +81 -7
- package/src/nodes/core/Node.js +368 -50
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1317 -83
- 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 +226 -6
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +61 -17
- package/src/nodes/core/ParameterNode.js +34 -4
- package/src/nodes/core/PropertyNode.js +296 -32
- package/src/nodes/core/StackNode.js +108 -8
- package/src/nodes/core/StructNode.js +120 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +116 -9
- package/src/nodes/core/TempNode.js +37 -7
- package/src/nodes/core/UniformGroupNode.js +98 -17
- package/src/nodes/core/UniformNode.js +72 -4
- package/src/nodes/core/VarNode.js +170 -13
- package/src/nodes/core/VaryingNode.js +109 -8
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +193 -0
- package/src/nodes/display/BumpMapNode.js +47 -10
- package/src/nodes/display/ColorAdjustment.js +141 -0
- package/src/nodes/display/ColorSpaceFunctions.js +54 -0
- package/src/nodes/display/ColorSpaceNode.js +147 -68
- package/src/nodes/display/FrontFacingNode.js +39 -6
- package/src/nodes/display/NormalMapNode.js +55 -13
- package/src/nodes/display/PassNode.js +420 -19
- package/src/nodes/display/PosterizeNode.js +40 -7
- package/src/nodes/display/RenderOutputNode.js +81 -13
- package/src/nodes/display/ScreenNode.js +286 -0
- package/src/nodes/display/ToneMappingFunctions.js +242 -0
- package/src/nodes/display/ToneMappingNode.js +68 -175
- package/src/nodes/display/ToonOutlinePassNode.js +183 -0
- package/src/nodes/display/ViewportDepthNode.js +210 -36
- package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
- package/src/nodes/display/ViewportTextureNode.js +68 -11
- package/src/nodes/fog/Fog.js +113 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +50 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +27 -6
- package/src/nodes/functions/PhongLightingModel.js +38 -8
- package/src/nodes/functions/PhysicalLightingModel.js +215 -51
- package/src/nodes/functions/ShadowMaskModel.js +24 -1
- package/src/nodes/functions/ToonLightingModel.js +24 -5
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +62 -7
- package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
- package/src/nodes/gpgpu/BarrierNode.js +89 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
- package/src/nodes/gpgpu/ComputeNode.js +124 -9
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
- package/src/nodes/lighting/AONode.js +24 -3
- package/src/nodes/lighting/AmbientLightNode.js +16 -8
- package/src/nodes/lighting/AnalyticLightNode.js +151 -231
- package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
- package/src/nodes/lighting/BasicLightMapNode.js +25 -5
- package/src/nodes/lighting/DirectionalLightNode.js +19 -20
- package/src/nodes/lighting/EnvironmentNode.js +34 -17
- package/src/nodes/lighting/HemisphereLightNode.js +42 -11
- package/src/nodes/lighting/IESSpotLightNode.js +18 -9
- package/src/nodes/lighting/IrradianceNode.js +23 -3
- package/src/nodes/lighting/LightProbeNode.js +29 -36
- package/src/nodes/lighting/LightUtils.js +12 -4
- package/src/nodes/lighting/LightingContextNode.js +70 -21
- package/src/nodes/lighting/LightingNode.js +22 -9
- package/src/nodes/lighting/LightsNode.js +309 -86
- package/src/nodes/lighting/PointLightNode.js +66 -32
- package/src/nodes/lighting/PointShadowNode.js +306 -0
- package/src/nodes/lighting/RectAreaLightNode.js +61 -25
- package/src/nodes/lighting/ShadowBaseNode.js +92 -0
- package/src/nodes/lighting/ShadowNode.js +812 -0
- package/src/nodes/lighting/SpotLightNode.js +73 -31
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +27 -22
- package/src/nodes/materialx/lib/mx_noise.js +70 -70
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/ConditionalNode.js +230 -0
- package/src/nodes/math/Hash.js +21 -0
- package/src/nodes/math/MathNode.js +812 -131
- package/src/nodes/math/MathUtils.js +47 -8
- package/src/nodes/math/OperatorNode.js +410 -66
- package/src/nodes/math/TriNoise3D.js +32 -32
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +188 -28
- package/src/nodes/pmrem/PMREMUtils.js +24 -24
- package/src/nodes/procedural/Checker.js +22 -0
- package/src/nodes/shapes/Shapes.js +32 -0
- package/src/nodes/tsl/TSLBase.js +31 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
- package/src/nodes/utils/ArrayElementNode.js +45 -5
- package/src/nodes/utils/ConvertNode.js +39 -4
- package/src/nodes/utils/CubeMapNode.js +88 -8
- package/src/nodes/utils/Discard.js +24 -0
- package/src/nodes/utils/EquirectUVNode.js +39 -7
- package/src/nodes/utils/FlipNode.js +106 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
- package/src/nodes/utils/JoinNode.js +31 -3
- package/src/nodes/utils/LoopNode.js +95 -9
- package/src/nodes/utils/MatcapUVNode.js +27 -8
- package/src/nodes/utils/MaxMipLevelNode.js +57 -6
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +21 -0
- package/src/nodes/utils/PostProcessingUtils.js +95 -0
- package/src/nodes/utils/RTTNode.js +141 -9
- package/src/nodes/utils/ReflectorNode.js +295 -21
- package/src/nodes/utils/RemapNode.js +93 -10
- package/src/nodes/utils/RotateNode.js +48 -13
- package/src/nodes/utils/SetNode.js +50 -4
- package/src/nodes/utils/SplitNode.js +62 -6
- package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
- package/src/nodes/utils/SpriteUtils.js +21 -5
- package/src/nodes/utils/StorageArrayElementNode.js +64 -12
- package/src/nodes/utils/Timer.js +73 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
- package/src/nodes/utils/UVUtils.js +27 -9
- package/src/nodes/utils/ViewportUtils.js +16 -4
- package/src/objects/BatchedMesh.js +808 -281
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +120 -5
- package/src/objects/Line.js +89 -6
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +82 -23
- package/src/objects/Points.js +62 -0
- package/src/objects/Skeleton.js +107 -2
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- package/src/renderers/WebGLRenderer.js +274 -157
- package/src/renderers/common/Animation.js +109 -12
- package/src/renderers/common/Attributes.js +40 -0
- package/src/renderers/common/Backend.js +504 -44
- package/src/renderers/common/Background.js +67 -9
- package/src/renderers/common/BindGroup.js +45 -1
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +136 -19
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +83 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +175 -80
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +22 -3
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +111 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +73 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +112 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +56 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +205 -7
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +230 -21
- package/src/renderers/common/RenderLists.js +45 -6
- package/src/renderers/common/RenderObject.js +552 -41
- package/src/renderers/common/RenderObjects.js +118 -9
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1537 -239
- package/src/renderers/common/RendererUtils.js +191 -0
- package/src/renderers/common/SampledTexture.js +132 -3
- 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 +142 -32
- package/src/renderers/common/TimestampQueryPool.js +98 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +157 -6
- package/src/renderers/common/XRManager.js +1185 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +211 -53
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +194 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- 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 +390 -70
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLBackground.js +24 -1
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +2 -0
- package/src/renderers/webgl/WebGLGeometries.js +0 -28
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLProgram.js +27 -29
- package/src/renderers/webgl/WebGLPrograms.js +24 -16
- package/src/renderers/webgl/WebGLState.js +68 -11
- package/src/renderers/webgl/WebGLTextures.js +49 -10
- package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +816 -236
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
- package/src/renderers/webgpu/WebGPURenderer.js +45 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +54 -32
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +87 -0
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +368 -5
- package/src/textures/VideoFrameTexture.js +35 -0
- package/src/utils.js +33 -1
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/controls/Controls.js +0 -32
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/BitangentNode.js +0 -13
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/accessors/UVNode.js +0 -3
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -152
- package/src/nodes/display/AnamorphicNode.js +0 -145
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/DenoiseNode.js +0 -198
- package/src/nodes/display/DotScreenNode.js +0 -75
- package/src/nodes/display/FXAANode.js +0 -327
- package/src/nodes/display/FilmNode.js +0 -52
- package/src/nodes/display/GTAONode.js +0 -324
- package/src/nodes/display/GaussianBlurNode.js +0 -207
- package/src/nodes/display/Lut3DNode.js +0 -53
- package/src/nodes/display/RGBShiftNode.js +0 -49
- package/src/nodes/display/SepiaNode.js +0 -18
- package/src/nodes/display/TransitionNode.js +0 -76
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/fog/FogExp2Node.js +0 -34
- package/src/nodes/fog/FogNode.js +0 -48
- package/src/nodes/fog/FogRangeNode.js +0 -35
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/loaders/NodeLoader.js +0 -110
- package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
- package/src/nodes/loaders/NodeObjectLoader.js +0 -71
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
- package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
- package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
- package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
- package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
- package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
- package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
- package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
- package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
- package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
- package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
- package/src/nodes/materials/NodeMaterial.js +0 -680
- package/src/nodes/materials/PointsNodeMaterial.js +0 -39
- package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
- package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
- package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
- package/src/nodes/math/CondNode.js +0 -139
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/OscNode.js +0 -81
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/TimerNode.js +0 -94
|
@@ -1,37 +1,146 @@
|
|
|
1
1
|
import UniformNode, { uniform } from '../core/UniformNode.js';
|
|
2
|
-
import { uv } from './
|
|
2
|
+
import { uv } from './UV.js';
|
|
3
3
|
import { textureSize } from './TextureSizeNode.js';
|
|
4
|
-
import {
|
|
4
|
+
import { colorSpaceToWorking } from '../display/ColorSpaceNode.js';
|
|
5
5
|
import { expression } from '../code/ExpressionNode.js';
|
|
6
|
-
import { addNodeClass } from '../core/Node.js';
|
|
7
6
|
import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
|
|
8
|
-
import {
|
|
7
|
+
import { nodeProxy, vec3, nodeObject, int } from '../tsl/TSLBase.js';
|
|
9
8
|
import { NodeUpdateType } from '../core/constants.js';
|
|
10
9
|
|
|
11
10
|
import { IntType, UnsignedIntType } from '../../constants.js';
|
|
12
11
|
|
|
12
|
+
/**
|
|
13
|
+
* This type of uniform node represents a 2D texture.
|
|
14
|
+
*
|
|
15
|
+
* @augments UniformNode
|
|
16
|
+
*/
|
|
13
17
|
class TextureNode extends UniformNode {
|
|
14
18
|
|
|
19
|
+
static get type() {
|
|
20
|
+
|
|
21
|
+
return 'TextureNode';
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new texture node.
|
|
27
|
+
*
|
|
28
|
+
* @param {Texture} value - The texture.
|
|
29
|
+
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
30
|
+
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
31
|
+
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
32
|
+
*/
|
|
15
33
|
constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
|
|
16
34
|
|
|
17
35
|
super( value );
|
|
18
36
|
|
|
37
|
+
/**
|
|
38
|
+
* This flag can be used for type testing.
|
|
39
|
+
*
|
|
40
|
+
* @type {boolean}
|
|
41
|
+
* @readonly
|
|
42
|
+
* @default true
|
|
43
|
+
*/
|
|
19
44
|
this.isTextureNode = true;
|
|
20
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Represents the texture coordinates.
|
|
48
|
+
*
|
|
49
|
+
* @type {?Node<vec2|vec3>}
|
|
50
|
+
* @default null
|
|
51
|
+
*/
|
|
21
52
|
this.uvNode = uvNode;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Represents the mip level that should be selected.
|
|
56
|
+
*
|
|
57
|
+
* @type {?Node<int>}
|
|
58
|
+
* @default null
|
|
59
|
+
*/
|
|
22
60
|
this.levelNode = levelNode;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Represents the bias to be applied during level-of-detail computation.
|
|
64
|
+
*
|
|
65
|
+
* @type {?Node<float>}
|
|
66
|
+
* @default null
|
|
67
|
+
*/
|
|
23
68
|
this.biasNode = biasNode;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Represents a reference value a texture sample is compared to.
|
|
72
|
+
*
|
|
73
|
+
* @type {?Node<float>}
|
|
74
|
+
* @default null
|
|
75
|
+
*/
|
|
24
76
|
this.compareNode = null;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* When using texture arrays, the depth node defines the layer to select.
|
|
80
|
+
*
|
|
81
|
+
* @type {?Node<int>}
|
|
82
|
+
* @default null
|
|
83
|
+
*/
|
|
25
84
|
this.depthNode = null;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* When defined, a texture is sampled using explicit gradients.
|
|
88
|
+
*
|
|
89
|
+
* @type {?Array<Node<vec2>>}
|
|
90
|
+
* @default null
|
|
91
|
+
*/
|
|
26
92
|
this.gradNode = null;
|
|
27
93
|
|
|
94
|
+
/**
|
|
95
|
+
* Whether texture values should be sampled or fetched.
|
|
96
|
+
*
|
|
97
|
+
* @type {boolean}
|
|
98
|
+
* @default true
|
|
99
|
+
*/
|
|
28
100
|
this.sampler = true;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Whether the uv transformation matrix should be
|
|
104
|
+
* automatically updated or not. Use `setUpdateMatrix()`
|
|
105
|
+
* if you want to change the value of the property.
|
|
106
|
+
*
|
|
107
|
+
* @type {boolean}
|
|
108
|
+
* @default false
|
|
109
|
+
*/
|
|
29
110
|
this.updateMatrix = false;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* By default the `update()` method is not executed. `setUpdateMatrix()`
|
|
114
|
+
* sets the value to `frame` when the uv transformation matrix should
|
|
115
|
+
* automatically be updated.
|
|
116
|
+
*
|
|
117
|
+
* @type {string}
|
|
118
|
+
* @default 'none'
|
|
119
|
+
*/
|
|
30
120
|
this.updateType = NodeUpdateType.NONE;
|
|
31
121
|
|
|
122
|
+
/**
|
|
123
|
+
* The reference node.
|
|
124
|
+
*
|
|
125
|
+
* @type {?Node}
|
|
126
|
+
* @default null
|
|
127
|
+
*/
|
|
32
128
|
this.referenceNode = null;
|
|
33
129
|
|
|
130
|
+
/**
|
|
131
|
+
* The texture value is stored in a private property.
|
|
132
|
+
*
|
|
133
|
+
* @private
|
|
134
|
+
* @type {Texture}
|
|
135
|
+
*/
|
|
34
136
|
this._value = value;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* The uniform node that represents the uv transformation matrix.
|
|
140
|
+
*
|
|
141
|
+
* @private
|
|
142
|
+
* @type {?UniformNode<mat3>}
|
|
143
|
+
*/
|
|
35
144
|
this._matrixUniform = null;
|
|
36
145
|
|
|
37
146
|
this.setUpdateMatrix( uvNode === null );
|
|
@@ -52,18 +161,35 @@ class TextureNode extends UniformNode {
|
|
|
52
161
|
|
|
53
162
|
}
|
|
54
163
|
|
|
164
|
+
/**
|
|
165
|
+
* The texture value.
|
|
166
|
+
*
|
|
167
|
+
* @type {Texture}
|
|
168
|
+
*/
|
|
55
169
|
get value() {
|
|
56
170
|
|
|
57
171
|
return this.referenceNode ? this.referenceNode.value : this._value;
|
|
58
172
|
|
|
59
173
|
}
|
|
60
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Overwritten since the uniform hash is defined by the texture's UUID.
|
|
177
|
+
*
|
|
178
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
179
|
+
* @return {string} The uniform hash.
|
|
180
|
+
*/
|
|
61
181
|
getUniformHash( /*builder*/ ) {
|
|
62
182
|
|
|
63
183
|
return this.value.uuid;
|
|
64
184
|
|
|
65
185
|
}
|
|
66
186
|
|
|
187
|
+
/**
|
|
188
|
+
* Overwritten since the node type is inferred from the texture type.
|
|
189
|
+
*
|
|
190
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
191
|
+
* @return {string} The node type.
|
|
192
|
+
*/
|
|
67
193
|
getNodeType( /*builder*/ ) {
|
|
68
194
|
|
|
69
195
|
if ( this.value.isDepthTexture === true ) return 'float';
|
|
@@ -82,49 +208,93 @@ class TextureNode extends UniformNode {
|
|
|
82
208
|
|
|
83
209
|
}
|
|
84
210
|
|
|
211
|
+
/**
|
|
212
|
+
* Overwrites the default implementation to return a fixed value `'texture'`.
|
|
213
|
+
*
|
|
214
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
215
|
+
* @return {string} The input type.
|
|
216
|
+
*/
|
|
85
217
|
getInputType( /*builder*/ ) {
|
|
86
218
|
|
|
87
219
|
return 'texture';
|
|
88
220
|
|
|
89
221
|
}
|
|
90
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Returns a default uvs based on the current texture's channel.
|
|
225
|
+
*
|
|
226
|
+
* @return {AttributeNode<vec2>} The default uvs.
|
|
227
|
+
*/
|
|
91
228
|
getDefaultUV() {
|
|
92
229
|
|
|
93
230
|
return uv( this.value.channel );
|
|
94
231
|
|
|
95
232
|
}
|
|
96
233
|
|
|
234
|
+
/**
|
|
235
|
+
* Overwritten to always return the texture reference of the node.
|
|
236
|
+
*
|
|
237
|
+
* @param {any} state - This method can be invocated in different contexts so `state` can refer to any object type.
|
|
238
|
+
* @return {Texture} The texture reference.
|
|
239
|
+
*/
|
|
97
240
|
updateReference( /*state*/ ) {
|
|
98
241
|
|
|
99
242
|
return this.value;
|
|
100
243
|
|
|
101
244
|
}
|
|
102
245
|
|
|
246
|
+
/**
|
|
247
|
+
* Transforms the given uv node with the texture transformation matrix.
|
|
248
|
+
*
|
|
249
|
+
* @param {Node} uvNode - The uv node to transform.
|
|
250
|
+
* @return {Node} The transformed uv node.
|
|
251
|
+
*/
|
|
103
252
|
getTransformedUV( uvNode ) {
|
|
104
253
|
|
|
105
254
|
if ( this._matrixUniform === null ) this._matrixUniform = uniform( this.value.matrix );
|
|
106
255
|
|
|
107
256
|
return this._matrixUniform.mul( vec3( uvNode, 1 ) ).xy;
|
|
108
257
|
|
|
109
|
-
|
|
110
258
|
}
|
|
111
259
|
|
|
260
|
+
/**
|
|
261
|
+
* Defines whether the uv transformation matrix should automatically be updated or not.
|
|
262
|
+
*
|
|
263
|
+
* @param {boolean} value - The update toggle.
|
|
264
|
+
* @return {TextureNode} A reference to this node.
|
|
265
|
+
*/
|
|
112
266
|
setUpdateMatrix( value ) {
|
|
113
267
|
|
|
114
268
|
this.updateMatrix = value;
|
|
115
|
-
this.updateType = value ? NodeUpdateType.
|
|
269
|
+
this.updateType = value ? NodeUpdateType.RENDER : NodeUpdateType.NONE;
|
|
116
270
|
|
|
117
271
|
return this;
|
|
118
272
|
|
|
119
273
|
}
|
|
120
274
|
|
|
275
|
+
/**
|
|
276
|
+
* Setups the uv node. Depending on the backend as well as texture's image and type, it might be necessary
|
|
277
|
+
* to modify the uv node for correct sampling.
|
|
278
|
+
*
|
|
279
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
280
|
+
* @param {Node} uvNode - The uv node to setup.
|
|
281
|
+
* @return {Node} The updated uv node.
|
|
282
|
+
*/
|
|
121
283
|
setupUV( builder, uvNode ) {
|
|
122
284
|
|
|
123
285
|
const texture = this.value;
|
|
124
286
|
|
|
125
|
-
if ( builder.isFlipY() && ( texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true ) ) {
|
|
287
|
+
if ( builder.isFlipY() && ( ( texture.image instanceof ImageBitmap && texture.flipY === true ) || texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true ) ) {
|
|
288
|
+
|
|
289
|
+
if ( this.sampler ) {
|
|
126
290
|
|
|
127
|
-
|
|
291
|
+
uvNode = uvNode.flipY();
|
|
292
|
+
|
|
293
|
+
} else {
|
|
294
|
+
|
|
295
|
+
uvNode = uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( uvNode.y ).sub( 1 ) );
|
|
296
|
+
|
|
297
|
+
}
|
|
128
298
|
|
|
129
299
|
}
|
|
130
300
|
|
|
@@ -132,6 +302,11 @@ class TextureNode extends UniformNode {
|
|
|
132
302
|
|
|
133
303
|
}
|
|
134
304
|
|
|
305
|
+
/**
|
|
306
|
+
* Setups texture node by preparing the internal nodes for code generation.
|
|
307
|
+
*
|
|
308
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
309
|
+
*/
|
|
135
310
|
setup( builder ) {
|
|
136
311
|
|
|
137
312
|
const properties = builder.getNodeProperties( this );
|
|
@@ -139,6 +314,16 @@ class TextureNode extends UniformNode {
|
|
|
139
314
|
|
|
140
315
|
//
|
|
141
316
|
|
|
317
|
+
const texture = this.value;
|
|
318
|
+
|
|
319
|
+
if ( ! texture || texture.isTexture !== true ) {
|
|
320
|
+
|
|
321
|
+
throw new Error( 'THREE.TSL: `texture( value )` function expects a valid instance of THREE.Texture().' );
|
|
322
|
+
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
//
|
|
326
|
+
|
|
142
327
|
let uvNode = this.uvNode;
|
|
143
328
|
|
|
144
329
|
if ( ( uvNode === null || builder.context.forceUVContext === true ) && builder.context.getUV ) {
|
|
@@ -178,12 +363,32 @@ class TextureNode extends UniformNode {
|
|
|
178
363
|
|
|
179
364
|
}
|
|
180
365
|
|
|
366
|
+
/**
|
|
367
|
+
* Generates the uv code snippet.
|
|
368
|
+
*
|
|
369
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
370
|
+
* @param {Node} uvNode - The uv node to generate code for.
|
|
371
|
+
* @return {string} The generated code snippet.
|
|
372
|
+
*/
|
|
181
373
|
generateUV( builder, uvNode ) {
|
|
182
374
|
|
|
183
375
|
return uvNode.build( builder, this.sampler === true ? 'vec2' : 'ivec2' );
|
|
184
376
|
|
|
185
377
|
}
|
|
186
378
|
|
|
379
|
+
/**
|
|
380
|
+
* Generates the snippet for the texture sampling.
|
|
381
|
+
*
|
|
382
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
383
|
+
* @param {string} textureProperty - The texture property.
|
|
384
|
+
* @param {string} uvSnippet - The uv snippet.
|
|
385
|
+
* @param {?string} levelSnippet - The level snippet.
|
|
386
|
+
* @param {?string} biasSnippet - The bias snippet.
|
|
387
|
+
* @param {?string} depthSnippet - The depth snippet.
|
|
388
|
+
* @param {?string} compareSnippet - The compare snippet.
|
|
389
|
+
* @param {?Array<string>} gradSnippet - The grad snippet.
|
|
390
|
+
* @return {string} The generated code snippet.
|
|
391
|
+
*/
|
|
187
392
|
generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet ) {
|
|
188
393
|
|
|
189
394
|
const texture = this.value;
|
|
@@ -220,18 +425,18 @@ class TextureNode extends UniformNode {
|
|
|
220
425
|
|
|
221
426
|
}
|
|
222
427
|
|
|
428
|
+
/**
|
|
429
|
+
* Generates the code snippet of the texture node.
|
|
430
|
+
*
|
|
431
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
432
|
+
* @param {string} output - The current output.
|
|
433
|
+
* @return {string} The generated code snippet.
|
|
434
|
+
*/
|
|
223
435
|
generate( builder, output ) {
|
|
224
436
|
|
|
225
|
-
const properties = builder.getNodeProperties( this );
|
|
226
|
-
|
|
227
437
|
const texture = this.value;
|
|
228
438
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
throw new Error( 'TextureNode: Need a three.js texture.' );
|
|
232
|
-
|
|
233
|
-
}
|
|
234
|
-
|
|
439
|
+
const properties = builder.getNodeProperties( this );
|
|
235
440
|
const textureProperty = super.generate( builder, 'property' );
|
|
236
441
|
|
|
237
442
|
if ( output === 'sampler' ) {
|
|
@@ -265,7 +470,7 @@ class TextureNode extends UniformNode {
|
|
|
265
470
|
|
|
266
471
|
const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet );
|
|
267
472
|
|
|
268
|
-
builder.addLineFlowCode( `${propertyName} = ${snippet}
|
|
473
|
+
builder.addLineFlowCode( `${propertyName} = ${snippet}`, this );
|
|
269
474
|
|
|
270
475
|
nodeData.snippet = snippet;
|
|
271
476
|
nodeData.propertyName = propertyName;
|
|
@@ -275,9 +480,9 @@ class TextureNode extends UniformNode {
|
|
|
275
480
|
let snippet = propertyName;
|
|
276
481
|
const nodeType = this.getNodeType( builder );
|
|
277
482
|
|
|
278
|
-
if ( builder.
|
|
483
|
+
if ( builder.needsToWorkingColorSpace( texture ) ) {
|
|
279
484
|
|
|
280
|
-
snippet =
|
|
485
|
+
snippet = colorSpaceToWorking( expression( snippet, nodeType ), texture.colorSpace ).setup( builder ).build( builder, nodeType );
|
|
281
486
|
|
|
282
487
|
}
|
|
283
488
|
|
|
@@ -287,6 +492,12 @@ class TextureNode extends UniformNode {
|
|
|
287
492
|
|
|
288
493
|
}
|
|
289
494
|
|
|
495
|
+
/**
|
|
496
|
+
* Sets the sampler value.
|
|
497
|
+
*
|
|
498
|
+
* @param {boolean} value - The sampler value to set.
|
|
499
|
+
* @return {TextureNode} A reference to this texture node.
|
|
500
|
+
*/
|
|
290
501
|
setSampler( value ) {
|
|
291
502
|
|
|
292
503
|
this.sampler = value;
|
|
@@ -295,6 +506,11 @@ class TextureNode extends UniformNode {
|
|
|
295
506
|
|
|
296
507
|
}
|
|
297
508
|
|
|
509
|
+
/**
|
|
510
|
+
* Returns the sampler value.
|
|
511
|
+
*
|
|
512
|
+
* @return {boolean} The sampler value.
|
|
513
|
+
*/
|
|
298
514
|
getSampler() {
|
|
299
515
|
|
|
300
516
|
return this.sampler;
|
|
@@ -303,78 +519,141 @@ class TextureNode extends UniformNode {
|
|
|
303
519
|
|
|
304
520
|
// @TODO: Move to TSL
|
|
305
521
|
|
|
306
|
-
|
|
522
|
+
/**
|
|
523
|
+
* @function
|
|
524
|
+
* @deprecated since r172. Use {@link TextureNode#sample} instead.
|
|
525
|
+
*
|
|
526
|
+
* @param {Node} uvNode - The uv node.
|
|
527
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
528
|
+
*/
|
|
529
|
+
uv( uvNode ) { // @deprecated, r172
|
|
530
|
+
|
|
531
|
+
console.warn( 'THREE.TextureNode: .uv() has been renamed. Use .sample() instead.' );
|
|
532
|
+
|
|
533
|
+
return this.sample( uvNode );
|
|
534
|
+
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* Samples the texture with the given uv node.
|
|
539
|
+
*
|
|
540
|
+
* @param {Node} uvNode - The uv node.
|
|
541
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
542
|
+
*/
|
|
543
|
+
sample( uvNode ) {
|
|
307
544
|
|
|
308
545
|
const textureNode = this.clone();
|
|
309
546
|
textureNode.uvNode = nodeObject( uvNode );
|
|
310
|
-
textureNode.referenceNode = this;
|
|
547
|
+
textureNode.referenceNode = this.getSelf();
|
|
311
548
|
|
|
312
549
|
return nodeObject( textureNode );
|
|
313
550
|
|
|
314
551
|
}
|
|
315
552
|
|
|
553
|
+
/**
|
|
554
|
+
* Samples a blurred version of the texture by defining an internal bias.
|
|
555
|
+
*
|
|
556
|
+
* @param {Node<float>} amountNode - How blurred the texture should be.
|
|
557
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
558
|
+
*/
|
|
316
559
|
blur( amountNode ) {
|
|
317
560
|
|
|
318
561
|
const textureNode = this.clone();
|
|
319
562
|
textureNode.biasNode = nodeObject( amountNode ).mul( maxMipLevel( textureNode ) );
|
|
320
|
-
textureNode.referenceNode = this;
|
|
563
|
+
textureNode.referenceNode = this.getSelf();
|
|
321
564
|
|
|
322
565
|
return nodeObject( textureNode );
|
|
323
566
|
|
|
324
567
|
}
|
|
325
568
|
|
|
569
|
+
/**
|
|
570
|
+
* Samples a specific mip of the texture.
|
|
571
|
+
*
|
|
572
|
+
* @param {Node<int>} levelNode - The mip level to sample.
|
|
573
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
574
|
+
*/
|
|
326
575
|
level( levelNode ) {
|
|
327
576
|
|
|
328
577
|
const textureNode = this.clone();
|
|
329
578
|
textureNode.levelNode = nodeObject( levelNode );
|
|
330
|
-
textureNode.referenceNode = this;
|
|
579
|
+
textureNode.referenceNode = this.getSelf();
|
|
331
580
|
|
|
332
581
|
return nodeObject( textureNode );
|
|
333
582
|
|
|
334
583
|
}
|
|
335
584
|
|
|
585
|
+
/**
|
|
586
|
+
* Returns the texture size of the requested level.
|
|
587
|
+
*
|
|
588
|
+
* @param {Node<int>} levelNode - The level to compute the size for.
|
|
589
|
+
* @return {TextureSizeNode} The texture size.
|
|
590
|
+
*/
|
|
336
591
|
size( levelNode ) {
|
|
337
592
|
|
|
338
593
|
return textureSize( this, levelNode );
|
|
339
594
|
|
|
340
595
|
}
|
|
341
596
|
|
|
597
|
+
/**
|
|
598
|
+
* Samples the texture with the given bias.
|
|
599
|
+
*
|
|
600
|
+
* @param {Node<float>} biasNode - The bias node.
|
|
601
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
602
|
+
*/
|
|
342
603
|
bias( biasNode ) {
|
|
343
604
|
|
|
344
605
|
const textureNode = this.clone();
|
|
345
606
|
textureNode.biasNode = nodeObject( biasNode );
|
|
346
|
-
textureNode.referenceNode = this;
|
|
607
|
+
textureNode.referenceNode = this.getSelf();
|
|
347
608
|
|
|
348
609
|
return nodeObject( textureNode );
|
|
349
610
|
|
|
350
611
|
}
|
|
351
612
|
|
|
613
|
+
/**
|
|
614
|
+
* Samples the texture by executing a compare operation.
|
|
615
|
+
*
|
|
616
|
+
* @param {Node<float>} compareNode - The node that defines the compare value.
|
|
617
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
618
|
+
*/
|
|
352
619
|
compare( compareNode ) {
|
|
353
620
|
|
|
354
621
|
const textureNode = this.clone();
|
|
355
622
|
textureNode.compareNode = nodeObject( compareNode );
|
|
356
|
-
textureNode.referenceNode = this;
|
|
623
|
+
textureNode.referenceNode = this.getSelf();
|
|
357
624
|
|
|
358
625
|
return nodeObject( textureNode );
|
|
359
626
|
|
|
360
627
|
}
|
|
361
628
|
|
|
629
|
+
/**
|
|
630
|
+
* Samples the texture using an explicit gradient.
|
|
631
|
+
*
|
|
632
|
+
* @param {Node<vec2>} gradNodeX - The gradX node.
|
|
633
|
+
* @param {Node<vec2>} gradNodeY - The gradY node.
|
|
634
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
635
|
+
*/
|
|
362
636
|
grad( gradNodeX, gradNodeY ) {
|
|
363
637
|
|
|
364
638
|
const textureNode = this.clone();
|
|
365
639
|
textureNode.gradNode = [ nodeObject( gradNodeX ), nodeObject( gradNodeY ) ];
|
|
366
|
-
|
|
367
|
-
textureNode.referenceNode = this;
|
|
640
|
+
textureNode.referenceNode = this.getSelf();
|
|
368
641
|
|
|
369
642
|
return nodeObject( textureNode );
|
|
370
643
|
|
|
371
644
|
}
|
|
372
645
|
|
|
646
|
+
/**
|
|
647
|
+
* Samples the texture by defining a depth node.
|
|
648
|
+
*
|
|
649
|
+
* @param {Node<int>} depthNode - The depth node.
|
|
650
|
+
* @return {TextureNode} A texture node representing the texture sample.
|
|
651
|
+
*/
|
|
373
652
|
depth( depthNode ) {
|
|
374
653
|
|
|
375
654
|
const textureNode = this.clone();
|
|
376
655
|
textureNode.depthNode = nodeObject( depthNode );
|
|
377
|
-
textureNode.referenceNode = this;
|
|
656
|
+
textureNode.referenceNode = this.getSelf();
|
|
378
657
|
|
|
379
658
|
return nodeObject( textureNode );
|
|
380
659
|
|
|
@@ -404,6 +683,9 @@ class TextureNode extends UniformNode {
|
|
|
404
683
|
|
|
405
684
|
}
|
|
406
685
|
|
|
686
|
+
/**
|
|
687
|
+
* The update is used to implement the update of the uv transformation matrix.
|
|
688
|
+
*/
|
|
407
689
|
update() {
|
|
408
690
|
|
|
409
691
|
const texture = this.value;
|
|
@@ -419,6 +701,11 @@ class TextureNode extends UniformNode {
|
|
|
419
701
|
|
|
420
702
|
}
|
|
421
703
|
|
|
704
|
+
/**
|
|
705
|
+
* Clones the texture node.
|
|
706
|
+
*
|
|
707
|
+
* @return {TextureNode} The cloned texture node.
|
|
708
|
+
*/
|
|
422
709
|
clone() {
|
|
423
710
|
|
|
424
711
|
const newNode = new this.constructor( this.value, this.uvNode, this.levelNode, this.biasNode );
|
|
@@ -432,14 +719,40 @@ class TextureNode extends UniformNode {
|
|
|
432
719
|
|
|
433
720
|
export default TextureNode;
|
|
434
721
|
|
|
435
|
-
|
|
722
|
+
/**
|
|
723
|
+
* TSL function for creating a texture node.
|
|
724
|
+
*
|
|
725
|
+
* @tsl
|
|
726
|
+
* @function
|
|
727
|
+
* @param {Texture} value - The texture.
|
|
728
|
+
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
729
|
+
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
730
|
+
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
731
|
+
* @returns {TextureNode}
|
|
732
|
+
*/
|
|
733
|
+
export const texture = /*@__PURE__*/ nodeProxy( TextureNode );
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* TSL function for creating a texture node that fetches/loads texels without interpolation.
|
|
737
|
+
*
|
|
738
|
+
* @tsl
|
|
739
|
+
* @function
|
|
740
|
+
* @param {Texture} value - The texture.
|
|
741
|
+
* @param {?Node<vec2|vec3>} [uvNode=null] - The uv node.
|
|
742
|
+
* @param {?Node<int>} [levelNode=null] - The level node.
|
|
743
|
+
* @param {?Node<float>} [biasNode=null] - The bias node.
|
|
744
|
+
* @returns {TextureNode}
|
|
745
|
+
*/
|
|
436
746
|
export const textureLoad = ( ...params ) => texture( ...params ).setSampler( false );
|
|
437
747
|
|
|
438
748
|
//export const textureLevel = ( value, uv, level ) => texture( value, uv ).level( level );
|
|
439
749
|
|
|
750
|
+
/**
|
|
751
|
+
* Converts a texture or texture node to a sampler.
|
|
752
|
+
*
|
|
753
|
+
* @tsl
|
|
754
|
+
* @function
|
|
755
|
+
* @param {TextureNode|Texture} aTexture - The texture or texture node to convert.
|
|
756
|
+
* @returns {Node}
|
|
757
|
+
*/
|
|
440
758
|
export const sampler = ( aTexture ) => ( aTexture.isNode === true ? aTexture : texture( aTexture ) ).convert( 'sampler' );
|
|
441
|
-
|
|
442
|
-
addNodeElement( 'texture', texture );
|
|
443
|
-
//addNodeElement( 'textureLevel', textureLevel );
|
|
444
|
-
|
|
445
|
-
addNodeClass( 'TextureNode', TextureNode );
|
|
@@ -1,16 +1,53 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
-
import {
|
|
3
|
-
import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
|
|
2
|
+
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
4
3
|
|
|
4
|
+
/**
|
|
5
|
+
* A node that represents the dimensions of a texture. The texture size is
|
|
6
|
+
* retrieved in the shader via built-in shader functions like `textureDimensions()`
|
|
7
|
+
* or `textureSize()`.
|
|
8
|
+
*
|
|
9
|
+
* @augments Node
|
|
10
|
+
*/
|
|
5
11
|
class TextureSizeNode extends Node {
|
|
6
12
|
|
|
13
|
+
static get type() {
|
|
14
|
+
|
|
15
|
+
return 'TextureSizeNode';
|
|
16
|
+
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new texture size node.
|
|
21
|
+
*
|
|
22
|
+
* @param {TextureNode} textureNode - A texture node which size should be retrieved.
|
|
23
|
+
* @param {?Node<int>} [levelNode=null] - A level node which defines the requested mip.
|
|
24
|
+
*/
|
|
7
25
|
constructor( textureNode, levelNode = null ) {
|
|
8
26
|
|
|
9
27
|
super( 'uvec2' );
|
|
10
28
|
|
|
29
|
+
/**
|
|
30
|
+
* This flag can be used for type testing.
|
|
31
|
+
*
|
|
32
|
+
* @type {boolean}
|
|
33
|
+
* @readonly
|
|
34
|
+
* @default true
|
|
35
|
+
*/
|
|
11
36
|
this.isTextureSizeNode = true;
|
|
12
37
|
|
|
38
|
+
/**
|
|
39
|
+
* A texture node which size should be retrieved.
|
|
40
|
+
*
|
|
41
|
+
* @type {TextureNode}
|
|
42
|
+
*/
|
|
13
43
|
this.textureNode = textureNode;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* A level node which defines the requested mip.
|
|
47
|
+
*
|
|
48
|
+
* @type {Node<int>}
|
|
49
|
+
* @default null
|
|
50
|
+
*/
|
|
14
51
|
this.levelNode = levelNode;
|
|
15
52
|
|
|
16
53
|
}
|
|
@@ -18,9 +55,9 @@ class TextureSizeNode extends Node {
|
|
|
18
55
|
generate( builder, output ) {
|
|
19
56
|
|
|
20
57
|
const textureProperty = this.textureNode.build( builder, 'property' );
|
|
21
|
-
const
|
|
58
|
+
const level = this.levelNode === null ? '0' : this.levelNode.build( builder, 'int' );
|
|
22
59
|
|
|
23
|
-
return builder.format( `${ builder.getMethod( 'textureDimensions' ) }( ${ textureProperty }, ${
|
|
60
|
+
return builder.format( `${ builder.getMethod( 'textureDimensions' ) }( ${ textureProperty }, ${ level } )`, this.getNodeType( builder ), output );
|
|
24
61
|
|
|
25
62
|
}
|
|
26
63
|
|
|
@@ -28,8 +65,13 @@ class TextureSizeNode extends Node {
|
|
|
28
65
|
|
|
29
66
|
export default TextureSizeNode;
|
|
30
67
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
68
|
+
/**
|
|
69
|
+
* TSL function for creating a texture size node.
|
|
70
|
+
*
|
|
71
|
+
* @tsl
|
|
72
|
+
* @function
|
|
73
|
+
* @param {TextureNode} textureNode - A texture node which size should be retrieved.
|
|
74
|
+
* @param {?Node<int>} [levelNode=null] - A level node which defines the requested mip.
|
|
75
|
+
* @returns {TextureSizeNode}
|
|
76
|
+
*/
|
|
77
|
+
export const textureSize = /*@__PURE__*/ nodeProxy( TextureSizeNode );
|