@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,9 +1,10 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
1
2
|
import TextureNode from '../accessors/TextureNode.js';
|
|
2
|
-
import { nodeObject
|
|
3
|
+
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
4
|
import { NodeUpdateType } from '../core/constants.js';
|
|
4
|
-
import {
|
|
5
|
+
import { screenUV } from '../display/ScreenNode.js';
|
|
5
6
|
|
|
6
|
-
import { HalfFloatType, LinearMipMapLinearFilter } from '../../constants.js';
|
|
7
|
+
import { HalfFloatType, LinearMipMapLinearFilter, WebGPUCoordinateSystem } from '../../constants.js';
|
|
7
8
|
import { Plane } from '../../math/Plane.js';
|
|
8
9
|
import { Object3D } from '../../core/Object3D.js';
|
|
9
10
|
import { Vector2 } from '../../math/Vector2.js';
|
|
@@ -11,6 +12,7 @@ import { Vector3 } from '../../math/Vector3.js';
|
|
|
11
12
|
import { Vector4 } from '../../math/Vector4.js';
|
|
12
13
|
import { Matrix4 } from '../../math/Matrix4.js';
|
|
13
14
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
15
|
+
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
14
16
|
|
|
15
17
|
const _reflectorPlane = new Plane();
|
|
16
18
|
const _normal = new Vector3();
|
|
@@ -27,38 +29,267 @@ const _q = new Vector4();
|
|
|
27
29
|
const _size = new Vector2();
|
|
28
30
|
|
|
29
31
|
const _defaultRT = new RenderTarget();
|
|
30
|
-
const _defaultUV =
|
|
32
|
+
const _defaultUV = screenUV.flipX();
|
|
33
|
+
|
|
34
|
+
_defaultRT.depthTexture = new DepthTexture( 1, 1 );
|
|
31
35
|
|
|
32
36
|
let _inReflector = false;
|
|
33
37
|
|
|
38
|
+
/**
|
|
39
|
+
* This node can be used to implement mirror-like flat reflective surfaces.
|
|
40
|
+
*
|
|
41
|
+
* ```js
|
|
42
|
+
* const groundReflector = reflector();
|
|
43
|
+
* material.colorNode = groundReflector;
|
|
44
|
+
*
|
|
45
|
+
* const plane = new Mesh( geometry, material );
|
|
46
|
+
* plane.add( groundReflector.target );
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @augments TextureNode
|
|
50
|
+
*/
|
|
34
51
|
class ReflectorNode extends TextureNode {
|
|
35
52
|
|
|
53
|
+
static get type() {
|
|
54
|
+
|
|
55
|
+
return 'ReflectorNode';
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Constructs a new reflector node.
|
|
61
|
+
*
|
|
62
|
+
* @param {Object} [parameters={}] - An object holding configuration parameters.
|
|
63
|
+
* @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
|
|
64
|
+
* @param {number} [parameters.resolution=1] - The resolution scale.
|
|
65
|
+
* @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
|
|
66
|
+
* @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
|
|
67
|
+
* @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
|
|
68
|
+
* @param {TextureNode} [parameters.defaultTexture] - The default texture node.
|
|
69
|
+
* @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
|
|
70
|
+
*/
|
|
36
71
|
constructor( parameters = {} ) {
|
|
37
72
|
|
|
38
|
-
super( _defaultRT.texture, _defaultUV );
|
|
73
|
+
super( parameters.defaultTexture || _defaultRT.texture, _defaultUV );
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* A reference to the internal reflector base node which holds the actual implementation.
|
|
77
|
+
*
|
|
78
|
+
* @private
|
|
79
|
+
* @type {?ReflectorBaseNode}
|
|
80
|
+
* @default null
|
|
81
|
+
*/
|
|
82
|
+
this._reflectorBaseNode = parameters.reflector || new ReflectorBaseNode( this, parameters );
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* A reference to the internal depth node.
|
|
86
|
+
*
|
|
87
|
+
* @private
|
|
88
|
+
* @type {?Node}
|
|
89
|
+
* @default null
|
|
90
|
+
*/
|
|
91
|
+
this._depthNode = null;
|
|
92
|
+
|
|
93
|
+
this.setUpdateMatrix( false );
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* A reference to the internal reflector node.
|
|
99
|
+
*
|
|
100
|
+
* @type {ReflectorBaseNode}
|
|
101
|
+
*/
|
|
102
|
+
get reflector() {
|
|
103
|
+
|
|
104
|
+
return this._reflectorBaseNode;
|
|
105
|
+
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* A reference to 3D object the reflector is linked to.
|
|
110
|
+
*
|
|
111
|
+
* @type {Object3D}
|
|
112
|
+
*/
|
|
113
|
+
get target() {
|
|
114
|
+
|
|
115
|
+
return this._reflectorBaseNode.target;
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Returns a node representing the mirror's depth. That can be used
|
|
121
|
+
* to implement more advanced reflection effects like distance attenuation.
|
|
122
|
+
*
|
|
123
|
+
* @return {Node} The depth node.
|
|
124
|
+
*/
|
|
125
|
+
getDepthNode() {
|
|
126
|
+
|
|
127
|
+
if ( this._depthNode === null ) {
|
|
128
|
+
|
|
129
|
+
if ( this._reflectorBaseNode.depth !== true ) {
|
|
130
|
+
|
|
131
|
+
throw new Error( 'THREE.ReflectorNode: Depth node can only be requested when the reflector is created with { depth: true }. ' );
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
this._depthNode = nodeObject( new ReflectorNode( {
|
|
136
|
+
defaultTexture: _defaultRT.depthTexture,
|
|
137
|
+
reflector: this._reflectorBaseNode
|
|
138
|
+
} ) );
|
|
139
|
+
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return this._depthNode;
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
setup( builder ) {
|
|
147
|
+
|
|
148
|
+
// ignore if used in post-processing
|
|
149
|
+
if ( ! builder.object.isQuadMesh ) this._reflectorBaseNode.build( builder );
|
|
150
|
+
|
|
151
|
+
return super.setup( builder );
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
clone() {
|
|
156
|
+
|
|
157
|
+
const texture = new this.constructor( this.reflectorNode );
|
|
158
|
+
texture._reflectorBaseNode = this._reflectorBaseNode;
|
|
159
|
+
|
|
160
|
+
return texture;
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Holds the actual implementation of the reflector.
|
|
168
|
+
*
|
|
169
|
+
* TODO: Explain why `ReflectorBaseNode`. Originally the entire logic was implemented
|
|
170
|
+
* in `ReflectorNode`, see #29619.
|
|
171
|
+
*
|
|
172
|
+
* @private
|
|
173
|
+
* @augments Node
|
|
174
|
+
*/
|
|
175
|
+
class ReflectorBaseNode extends Node {
|
|
176
|
+
|
|
177
|
+
static get type() {
|
|
178
|
+
|
|
179
|
+
return 'ReflectorBaseNode';
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Constructs a new reflector base node.
|
|
185
|
+
*
|
|
186
|
+
* @param {TextureNode} textureNode - Represents the rendered reflections as a texture node.
|
|
187
|
+
* @param {Object} [parameters={}] - An object holding configuration parameters.
|
|
188
|
+
* @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
|
|
189
|
+
* @param {number} [parameters.resolution=1] - The resolution scale.
|
|
190
|
+
* @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
|
|
191
|
+
* @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
|
|
192
|
+
* @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
|
|
193
|
+
*/
|
|
194
|
+
constructor( textureNode, parameters = {} ) {
|
|
195
|
+
|
|
196
|
+
super();
|
|
39
197
|
|
|
40
198
|
const {
|
|
41
199
|
target = new Object3D(),
|
|
42
200
|
resolution = 1,
|
|
43
201
|
generateMipmaps = false,
|
|
44
|
-
bounces = true
|
|
202
|
+
bounces = true,
|
|
203
|
+
depth = false
|
|
45
204
|
} = parameters;
|
|
46
205
|
|
|
47
|
-
|
|
48
|
-
|
|
206
|
+
/**
|
|
207
|
+
* Represents the rendered reflections as a texture node.
|
|
208
|
+
*
|
|
209
|
+
* @type {TextureNode}
|
|
210
|
+
*/
|
|
211
|
+
this.textureNode = textureNode;
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* The 3D object the reflector is linked to.
|
|
215
|
+
*
|
|
216
|
+
* @type {Object3D}
|
|
217
|
+
* @default {new Object3D()}
|
|
218
|
+
*/
|
|
49
219
|
this.target = target;
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* The resolution scale.
|
|
223
|
+
*
|
|
224
|
+
* @type {number}
|
|
225
|
+
* @default {1}
|
|
226
|
+
*/
|
|
50
227
|
this.resolution = resolution;
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Whether mipmaps should be generated or not.
|
|
231
|
+
*
|
|
232
|
+
* @type {boolean}
|
|
233
|
+
* @default {false}
|
|
234
|
+
*/
|
|
51
235
|
this.generateMipmaps = generateMipmaps;
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Whether reflectors can render other reflector nodes or not.
|
|
239
|
+
*
|
|
240
|
+
* @type {boolean}
|
|
241
|
+
* @default {true}
|
|
242
|
+
*/
|
|
52
243
|
this.bounces = bounces;
|
|
53
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Whether depth data should be generated or not.
|
|
247
|
+
*
|
|
248
|
+
* @type {boolean}
|
|
249
|
+
* @default {false}
|
|
250
|
+
*/
|
|
251
|
+
this.depth = depth;
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* The `updateBeforeType` is set to `NodeUpdateType.RENDER` when {@link ReflectorBaseNode#bounces}
|
|
255
|
+
* is `true`. Otherwise it's `NodeUpdateType.FRAME`.
|
|
256
|
+
*
|
|
257
|
+
* @type {string}
|
|
258
|
+
* @default 'render'
|
|
259
|
+
*/
|
|
54
260
|
this.updateBeforeType = bounces ? NodeUpdateType.RENDER : NodeUpdateType.FRAME;
|
|
55
261
|
|
|
262
|
+
/**
|
|
263
|
+
* Weak map for managing virtual cameras.
|
|
264
|
+
*
|
|
265
|
+
* @type {WeakMap<Camera, Camera>}
|
|
266
|
+
*/
|
|
56
267
|
this.virtualCameras = new WeakMap();
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Weak map for managing render targets.
|
|
271
|
+
*
|
|
272
|
+
* @type {WeakMap<Camera, RenderTarget>}
|
|
273
|
+
*/
|
|
57
274
|
this.renderTargets = new WeakMap();
|
|
58
275
|
|
|
276
|
+
/**
|
|
277
|
+
* Force render even if reflector is facing away from camera.
|
|
278
|
+
*
|
|
279
|
+
* @type {boolean}
|
|
280
|
+
* @default {false}
|
|
281
|
+
*/
|
|
282
|
+
this.forceUpdate = false;
|
|
59
283
|
|
|
60
284
|
}
|
|
61
285
|
|
|
286
|
+
/**
|
|
287
|
+
* Updates the resolution of the internal render target.
|
|
288
|
+
*
|
|
289
|
+
* @private
|
|
290
|
+
* @param {RenderTarget} renderTarget - The render target to resize.
|
|
291
|
+
* @param {Renderer} renderer - The renderer that is used to determine the new size.
|
|
292
|
+
*/
|
|
62
293
|
_updateResolution( renderTarget, renderer ) {
|
|
63
294
|
|
|
64
295
|
const resolution = this.resolution;
|
|
@@ -77,12 +308,13 @@ class ReflectorNode extends TextureNode {
|
|
|
77
308
|
|
|
78
309
|
}
|
|
79
310
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
311
|
+
/**
|
|
312
|
+
* Returns a virtual camera for the given camera. The virtual camera is used to
|
|
313
|
+
* render the scene from the reflector's view so correct reflections can be produced.
|
|
314
|
+
*
|
|
315
|
+
* @param {Camera} camera - The scene's camera.
|
|
316
|
+
* @return {Camera} The corresponding virtual camera.
|
|
317
|
+
*/
|
|
86
318
|
getVirtualCamera( camera ) {
|
|
87
319
|
|
|
88
320
|
let virtualCamera = this.virtualCameras.get( camera );
|
|
@@ -99,6 +331,13 @@ class ReflectorNode extends TextureNode {
|
|
|
99
331
|
|
|
100
332
|
}
|
|
101
333
|
|
|
334
|
+
/**
|
|
335
|
+
* Returns a render target for the given camera. The reflections are rendered
|
|
336
|
+
* into this render target.
|
|
337
|
+
*
|
|
338
|
+
* @param {Camera} camera - The scene's camera.
|
|
339
|
+
* @return {RenderTarget} The render target.
|
|
340
|
+
*/
|
|
102
341
|
getRenderTarget( camera ) {
|
|
103
342
|
|
|
104
343
|
let renderTarget = this.renderTargets.get( camera );
|
|
@@ -109,8 +348,14 @@ class ReflectorNode extends TextureNode {
|
|
|
109
348
|
|
|
110
349
|
if ( this.generateMipmaps === true ) {
|
|
111
350
|
|
|
112
|
-
|
|
113
|
-
|
|
351
|
+
renderTarget.texture.minFilter = LinearMipMapLinearFilter;
|
|
352
|
+
renderTarget.texture.generateMipmaps = true;
|
|
353
|
+
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
if ( this.depth === true ) {
|
|
357
|
+
|
|
358
|
+
renderTarget.depthTexture = new DepthTexture();
|
|
114
359
|
|
|
115
360
|
}
|
|
116
361
|
|
|
@@ -150,9 +395,10 @@ class ReflectorNode extends TextureNode {
|
|
|
150
395
|
|
|
151
396
|
_view.subVectors( _reflectorWorldPosition, _cameraWorldPosition );
|
|
152
397
|
|
|
153
|
-
// Avoid rendering when reflector is facing away
|
|
398
|
+
// Avoid rendering when reflector is facing away unless forcing an update
|
|
399
|
+
const isFacingAway = _view.dot( _normal ) > 0;
|
|
154
400
|
|
|
155
|
-
if (
|
|
401
|
+
if ( isFacingAway === true && this.forceUpdate === false ) return;
|
|
156
402
|
|
|
157
403
|
_view.reflect( _normal ).negate();
|
|
158
404
|
_view.add( _reflectorWorldPosition );
|
|
@@ -204,32 +450,60 @@ class ReflectorNode extends TextureNode {
|
|
|
204
450
|
// Replacing the third row of the projection matrix
|
|
205
451
|
projectionMatrix.elements[ 2 ] = clipPlane.x;
|
|
206
452
|
projectionMatrix.elements[ 6 ] = clipPlane.y;
|
|
207
|
-
projectionMatrix.elements[ 10 ] = clipPlane.z - clipBias;
|
|
453
|
+
projectionMatrix.elements[ 10 ] = ( renderer.coordinateSystem === WebGPUCoordinateSystem ) ? ( clipPlane.z - clipBias ) : ( clipPlane.z + 1.0 - clipBias );
|
|
208
454
|
projectionMatrix.elements[ 14 ] = clipPlane.w;
|
|
209
455
|
|
|
210
456
|
//
|
|
211
457
|
|
|
212
|
-
this.value = renderTarget.texture;
|
|
458
|
+
this.textureNode.value = renderTarget.texture;
|
|
459
|
+
|
|
460
|
+
if ( this.depth === true ) {
|
|
461
|
+
|
|
462
|
+
this.textureNode.getDepthNode().value = renderTarget.depthTexture;
|
|
463
|
+
|
|
464
|
+
}
|
|
213
465
|
|
|
214
466
|
material.visible = false;
|
|
215
467
|
|
|
216
468
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
469
|
+
const currentMRT = renderer.getMRT();
|
|
470
|
+
const currentAutoClear = renderer.autoClear;
|
|
217
471
|
|
|
472
|
+
renderer.setMRT( null );
|
|
218
473
|
renderer.setRenderTarget( renderTarget );
|
|
474
|
+
renderer.autoClear = true;
|
|
219
475
|
|
|
220
476
|
renderer.render( scene, virtualCamera );
|
|
221
477
|
|
|
478
|
+
renderer.setMRT( currentMRT );
|
|
222
479
|
renderer.setRenderTarget( currentRenderTarget );
|
|
480
|
+
renderer.autoClear = currentAutoClear;
|
|
223
481
|
|
|
224
482
|
material.visible = true;
|
|
225
483
|
|
|
226
484
|
_inReflector = false;
|
|
227
485
|
|
|
486
|
+
this.forceUpdate = false;
|
|
487
|
+
|
|
228
488
|
}
|
|
229
489
|
|
|
230
490
|
}
|
|
231
491
|
|
|
492
|
+
/**
|
|
493
|
+
* TSL function for creating a reflector node.
|
|
494
|
+
*
|
|
495
|
+
* @tsl
|
|
496
|
+
* @function
|
|
497
|
+
* @param {Object} [parameters={}] - An object holding configuration parameters.
|
|
498
|
+
* @param {Object3D} [parameters.target=new Object3D()] - The 3D object the reflector is linked to.
|
|
499
|
+
* @param {number} [parameters.resolution=1] - The resolution scale.
|
|
500
|
+
* @param {boolean} [parameters.generateMipmaps=false] - Whether mipmaps should be generated or not.
|
|
501
|
+
* @param {boolean} [parameters.bounces=true] - Whether reflectors can render other reflector nodes or not.
|
|
502
|
+
* @param {boolean} [parameters.depth=false] - Whether depth data should be generated or not.
|
|
503
|
+
* @param {TextureNode} [parameters.defaultTexture] - The default texture node.
|
|
504
|
+
* @param {ReflectorBaseNode} [parameters.reflector] - The reflector base node.
|
|
505
|
+
* @returns {ReflectorNode}
|
|
506
|
+
*/
|
|
232
507
|
export const reflector = ( parameters ) => nodeObject( new ReflectorNode( parameters ) );
|
|
233
508
|
|
|
234
509
|
export default ReflectorNode;
|
|
235
|
-
|
|
@@ -1,18 +1,78 @@
|
|
|
1
|
-
import Node
|
|
2
|
-
import { float,
|
|
3
|
-
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import { float, addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This node allows to remap a node value from one range into another. E.g a value of
|
|
6
|
+
* `0.4` in the range `[ 0.3, 0.5 ]` should be remapped into the normalized range `[ 0, 1 ]`.
|
|
7
|
+
* `RemapNode` takes care of that and converts the original value of `0.4` to `0.5`.
|
|
8
|
+
*
|
|
9
|
+
* @augments Node
|
|
10
|
+
*/
|
|
4
11
|
class RemapNode extends Node {
|
|
5
12
|
|
|
13
|
+
static get type() {
|
|
14
|
+
|
|
15
|
+
return 'RemapNode';
|
|
16
|
+
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a new remap node.
|
|
21
|
+
*
|
|
22
|
+
* @param {Node} node - The node that should be remapped.
|
|
23
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
24
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
25
|
+
* @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
26
|
+
* @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
27
|
+
*/
|
|
6
28
|
constructor( node, inLowNode, inHighNode, outLowNode = float( 0 ), outHighNode = float( 1 ) ) {
|
|
7
29
|
|
|
8
30
|
super();
|
|
9
31
|
|
|
32
|
+
/**
|
|
33
|
+
* The node that should be remapped.
|
|
34
|
+
*
|
|
35
|
+
* @type {Node}
|
|
36
|
+
*/
|
|
10
37
|
this.node = node;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The source or current lower bound of the range.
|
|
41
|
+
*
|
|
42
|
+
* @type {Node}
|
|
43
|
+
*/
|
|
11
44
|
this.inLowNode = inLowNode;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The source or current upper bound of the range.
|
|
48
|
+
*
|
|
49
|
+
* @type {Node}
|
|
50
|
+
*/
|
|
12
51
|
this.inHighNode = inHighNode;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The target lower bound of the range.
|
|
55
|
+
*
|
|
56
|
+
* @type {Node}
|
|
57
|
+
* @default float(0)
|
|
58
|
+
*/
|
|
13
59
|
this.outLowNode = outLowNode;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The target upper bound of the range.
|
|
63
|
+
*
|
|
64
|
+
* @type {Node}
|
|
65
|
+
* @default float(1)
|
|
66
|
+
*/
|
|
14
67
|
this.outHighNode = outHighNode;
|
|
15
68
|
|
|
69
|
+
/**
|
|
70
|
+
* Whether the node value should be clamped before
|
|
71
|
+
* remapping it to the target range.
|
|
72
|
+
*
|
|
73
|
+
* @type {boolean}
|
|
74
|
+
* @default true
|
|
75
|
+
*/
|
|
16
76
|
this.doClamp = true;
|
|
17
77
|
|
|
18
78
|
}
|
|
@@ -33,10 +93,33 @@ class RemapNode extends Node {
|
|
|
33
93
|
|
|
34
94
|
export default RemapNode;
|
|
35
95
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
96
|
+
/**
|
|
97
|
+
* TSL function for creating a remap node.
|
|
98
|
+
*
|
|
99
|
+
* @tsl
|
|
100
|
+
* @function
|
|
101
|
+
* @param {Node} node - The node that should be remapped.
|
|
102
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
103
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
104
|
+
* @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
105
|
+
* @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
106
|
+
* @returns {RemapNode}
|
|
107
|
+
*/
|
|
108
|
+
export const remap = /*@__PURE__*/ nodeProxy( RemapNode, null, null, { doClamp: false } );
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* TSL function for creating a remap node, but with enabled clamping.
|
|
112
|
+
*
|
|
113
|
+
* @tsl
|
|
114
|
+
* @function
|
|
115
|
+
* @param {Node} node - The node that should be remapped.
|
|
116
|
+
* @param {Node} inLowNode - The source or current lower bound of the range.
|
|
117
|
+
* @param {Node} inHighNode - The source or current upper bound of the range.
|
|
118
|
+
* @param {Node} [outLowNode=float(0)] - The target lower bound of the range.
|
|
119
|
+
* @param {Node} [outHighNode=float(1)] - The target upper bound of the range.
|
|
120
|
+
* @returns {RemapNode}
|
|
121
|
+
*/
|
|
122
|
+
export const remapClamp = /*@__PURE__*/ nodeProxy( RemapNode );
|
|
123
|
+
|
|
124
|
+
addMethodChaining( 'remap', remap );
|
|
125
|
+
addMethodChaining( 'remapClamp', remapClamp );
|
|
@@ -1,25 +1,54 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
addNodeElement,
|
|
5
|
-
nodeProxy,
|
|
6
|
-
vec4,
|
|
7
|
-
mat2,
|
|
8
|
-
mat4,
|
|
9
|
-
} from '../shadernode/ShaderNode.js';
|
|
2
|
+
import { nodeProxy, vec4, mat2, mat4 } from '../tsl/TSLBase.js';
|
|
10
3
|
import { cos, sin } from '../math/MathNode.js';
|
|
11
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Applies a rotation to the given position node.
|
|
7
|
+
*
|
|
8
|
+
* @augments TempNode
|
|
9
|
+
*/
|
|
12
10
|
class RotateNode extends TempNode {
|
|
13
11
|
|
|
12
|
+
static get type() {
|
|
13
|
+
|
|
14
|
+
return 'RotateNode';
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new rotate node.
|
|
20
|
+
*
|
|
21
|
+
* @param {Node} positionNode - The position node.
|
|
22
|
+
* @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending
|
|
23
|
+
* on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
24
|
+
*/
|
|
14
25
|
constructor( positionNode, rotationNode ) {
|
|
15
26
|
|
|
16
27
|
super();
|
|
17
28
|
|
|
29
|
+
/**
|
|
30
|
+
* The position node.
|
|
31
|
+
*
|
|
32
|
+
* @type {Node}
|
|
33
|
+
*/
|
|
18
34
|
this.positionNode = positionNode;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Represents the rotation that is applied to the position node.
|
|
38
|
+
* Depending on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
39
|
+
*
|
|
40
|
+
* @type {Node}
|
|
41
|
+
*/
|
|
19
42
|
this.rotationNode = rotationNode;
|
|
20
43
|
|
|
21
44
|
}
|
|
22
45
|
|
|
46
|
+
/**
|
|
47
|
+
* The type of the {@link RotateNode#positionNode} defines the node's type.
|
|
48
|
+
*
|
|
49
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
50
|
+
* @return {string} The node's type.
|
|
51
|
+
*/
|
|
23
52
|
getNodeType( builder ) {
|
|
24
53
|
|
|
25
54
|
return this.positionNode.getNodeType( builder );
|
|
@@ -61,8 +90,14 @@ class RotateNode extends TempNode {
|
|
|
61
90
|
|
|
62
91
|
export default RotateNode;
|
|
63
92
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
93
|
+
/**
|
|
94
|
+
* TSL function for creating a rotate node.
|
|
95
|
+
*
|
|
96
|
+
* @tsl
|
|
97
|
+
* @function
|
|
98
|
+
* @param {Node} positionNode - The position node.
|
|
99
|
+
* @param {Node} rotationNode - Represents the rotation that is applied to the position node. Depending
|
|
100
|
+
* on whether the position data are 2D or 3D, the rotation is expressed a single float value or an Euler value.
|
|
101
|
+
* @returns {RotateNode}
|
|
102
|
+
*/
|
|
103
|
+
export const rotate = /*@__PURE__*/ nodeProxy( RotateNode );
|
|
@@ -1,19 +1,65 @@
|
|
|
1
|
-
import { addNodeClass } from '../core/Node.js';
|
|
2
1
|
import TempNode from '../core/TempNode.js';
|
|
3
2
|
import { vectorComponents } from '../core/constants.js';
|
|
4
3
|
|
|
4
|
+
/**
|
|
5
|
+
* This module is part of the TSL core and usually not used in app level code.
|
|
6
|
+
* `SetNode` represents a set operation which means it is used to implement any
|
|
7
|
+
* `setXYZW()`, `setRGBA()` and `setSTPQ()` method invocations on node objects.
|
|
8
|
+
* For example:
|
|
9
|
+
* ```js
|
|
10
|
+
* materialLine.colorNode = color( 0, 0, 0 ).setR( float( 1 ) );
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @augments TempNode
|
|
14
|
+
*/
|
|
5
15
|
class SetNode extends TempNode {
|
|
6
16
|
|
|
17
|
+
static get type() {
|
|
18
|
+
|
|
19
|
+
return 'SetNode';
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a new set node.
|
|
25
|
+
*
|
|
26
|
+
* @param {Node} sourceNode - The node that should be updated.
|
|
27
|
+
* @param {string} components - The components that should be updated.
|
|
28
|
+
* @param {Node} targetNode - The value node.
|
|
29
|
+
*/
|
|
7
30
|
constructor( sourceNode, components, targetNode ) {
|
|
8
31
|
|
|
9
32
|
super();
|
|
10
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The node that should be updated.
|
|
36
|
+
*
|
|
37
|
+
* @type {Node}
|
|
38
|
+
*/
|
|
11
39
|
this.sourceNode = sourceNode;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The components that should be updated.
|
|
43
|
+
*
|
|
44
|
+
* @type {string}
|
|
45
|
+
*/
|
|
12
46
|
this.components = components;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The value node.
|
|
50
|
+
*
|
|
51
|
+
* @type {Node}
|
|
52
|
+
*/
|
|
13
53
|
this.targetNode = targetNode;
|
|
14
54
|
|
|
15
55
|
}
|
|
16
56
|
|
|
57
|
+
/**
|
|
58
|
+
* This method is overwritten since the node type is inferred from {@link SetNode#sourceNode}.
|
|
59
|
+
*
|
|
60
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
61
|
+
* @return {string} The node type.
|
|
62
|
+
*/
|
|
17
63
|
getNodeType( builder ) {
|
|
18
64
|
|
|
19
65
|
return this.sourceNode.getNodeType( builder );
|
|
@@ -25,7 +71,9 @@ class SetNode extends TempNode {
|
|
|
25
71
|
const { sourceNode, components, targetNode } = this;
|
|
26
72
|
|
|
27
73
|
const sourceType = this.getNodeType( builder );
|
|
28
|
-
|
|
74
|
+
|
|
75
|
+
const componentType = builder.getComponentType( targetNode.getNodeType( builder ) );
|
|
76
|
+
const targetType = builder.getTypeFromLength( components.length, componentType );
|
|
29
77
|
|
|
30
78
|
const targetSnippet = targetNode.build( builder, targetType );
|
|
31
79
|
const sourceSnippet = sourceNode.build( builder, sourceType );
|
|
@@ -58,5 +106,3 @@ class SetNode extends TempNode {
|
|
|
58
106
|
}
|
|
59
107
|
|
|
60
108
|
export default SetNode;
|
|
61
|
-
|
|
62
|
-
addNodeClass( 'SetNode', SetNode );
|