@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
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Non-PURE exports list, side-effects are required here.
|
|
2
|
+
// TSL Base Syntax
|
|
3
|
+
|
|
4
|
+
export * from './TSLCore.js'; // float(), vec2(), vec3(), vec4(), mat3(), mat4(), Fn(), If(), element(), nodeObject(), nodeProxy(), ...
|
|
5
|
+
export * from '../core/ArrayNode.js'; // array(), .toArray()
|
|
6
|
+
export * from '../core/UniformNode.js'; // uniform()
|
|
7
|
+
export * from '../core/PropertyNode.js'; // property() <-> TODO: Separate Material Properties in other file
|
|
8
|
+
export * from '../core/AssignNode.js'; // .assign()
|
|
9
|
+
export * from '../code/FunctionCallNode.js'; // .call()
|
|
10
|
+
export * from '../math/OperatorNode.js'; // .add(), .sub(), ...
|
|
11
|
+
export * from '../math/MathNode.js'; // abs(), floor(), ...
|
|
12
|
+
export * from '../math/ConditionalNode.js'; // select(), ...
|
|
13
|
+
export * from '../core/ContextNode.js'; // .context()
|
|
14
|
+
export * from '../core/VarNode.js'; // .var() -> TODO: Maybe rename .toVar() -> .var()
|
|
15
|
+
export * from '../core/VaryingNode.js'; // varying(), vertexStage()
|
|
16
|
+
export * from '../display/ColorSpaceNode.js'; // .toColorSpace()
|
|
17
|
+
export * from '../display/ToneMappingNode.js'; // .toToneMapping()
|
|
18
|
+
export * from '../accessors/BufferAttributeNode.js'; // .toAttribute()
|
|
19
|
+
export * from '../gpgpu/ComputeNode.js'; // .compute()
|
|
20
|
+
export * from '../core/CacheNode.js'; // .cache()
|
|
21
|
+
export * from '../core/BypassNode.js'; // .bypass()
|
|
22
|
+
export * from '../utils/RemapNode.js'; // .remap(), .remapClamp()
|
|
23
|
+
export * from '../code/ExpressionNode.js'; // expression()
|
|
24
|
+
export * from '../utils/Discard.js'; // Discard(), Return()
|
|
25
|
+
export * from '../display/RenderOutputNode.js'; // .renderOutput()
|
|
26
|
+
|
|
27
|
+
export function addNodeElement( name/*, nodeElement*/ ) {
|
|
28
|
+
|
|
29
|
+
console.warn( 'THREE.TSLBase: AddNodeElement has been removed in favor of tree-shaking. Trying add', name );
|
|
30
|
+
|
|
31
|
+
}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import Node
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
3
3
|
import ConvertNode from '../utils/ConvertNode.js';
|
|
4
4
|
import JoinNode from '../utils/JoinNode.js';
|
|
5
5
|
import SplitNode from '../utils/SplitNode.js';
|
|
6
6
|
import SetNode from '../utils/SetNode.js';
|
|
7
|
+
import FlipNode from '../utils/FlipNode.js';
|
|
7
8
|
import ConstNode from '../core/ConstNode.js';
|
|
9
|
+
import MemberNode from '../utils/MemberNode.js';
|
|
8
10
|
import { getValueFromType, getValueType } from '../core/NodeUtils.js';
|
|
9
11
|
|
|
10
|
-
//
|
|
11
|
-
|
|
12
12
|
let currentStack = null;
|
|
13
13
|
|
|
14
|
-
const NodeElements = new Map();
|
|
14
|
+
const NodeElements = new Map();
|
|
15
15
|
|
|
16
|
-
export function
|
|
16
|
+
export function addMethodChaining( name, nodeElement ) {
|
|
17
17
|
|
|
18
18
|
if ( NodeElements.has( name ) ) {
|
|
19
19
|
|
|
20
|
-
console.warn( `Redefinition of
|
|
20
|
+
console.warn( `Redefinition of method chaining ${ name }` );
|
|
21
21
|
return;
|
|
22
22
|
|
|
23
23
|
}
|
|
@@ -29,6 +29,7 @@ export function addNodeElement( name, nodeElement ) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const parseSwizzle = ( props ) => props.replace( /r|s/g, 'x' ).replace( /g|t/g, 'y' ).replace( /b|p/g, 'z' ).replace( /a|q/g, 'w' );
|
|
32
|
+
const parseSwizzleAndSort = ( props ) => parseSwizzle( props ).split( '' ).sort().join( '' );
|
|
32
33
|
|
|
33
34
|
const shaderNodeHandler = {
|
|
34
35
|
|
|
@@ -80,15 +81,19 @@ const shaderNodeHandler = {
|
|
|
80
81
|
|
|
81
82
|
} else if ( /^set[XYZWRGBASTPQ]{1,4}$/.test( prop ) === true ) {
|
|
82
83
|
|
|
83
|
-
// set properties ( swizzle )
|
|
84
|
+
// set properties ( swizzle ) and sort to xyzw sequence
|
|
84
85
|
|
|
85
|
-
prop =
|
|
86
|
+
prop = parseSwizzleAndSort( prop.slice( 3 ).toLowerCase() );
|
|
86
87
|
|
|
87
|
-
|
|
88
|
+
return ( value ) => nodeObject( new SetNode( node, prop, value ) );
|
|
88
89
|
|
|
89
|
-
|
|
90
|
+
} else if ( /^flip[XYZWRGBASTPQ]{1,4}$/.test( prop ) === true ) {
|
|
90
91
|
|
|
91
|
-
|
|
92
|
+
// set properties ( swizzle ) and sort to xyzw sequence
|
|
93
|
+
|
|
94
|
+
prop = parseSwizzleAndSort( prop.slice( 4 ).toLowerCase() );
|
|
95
|
+
|
|
96
|
+
return () => nodeObject( new FlipNode( nodeObject( node ), prop ) );
|
|
92
97
|
|
|
93
98
|
} else if ( prop === 'width' || prop === 'height' || prop === 'depth' ) {
|
|
94
99
|
|
|
@@ -106,6 +111,12 @@ const shaderNodeHandler = {
|
|
|
106
111
|
|
|
107
112
|
return nodeObject( new ArrayElementNode( nodeObj, new ConstNode( Number( prop ), 'uint' ) ) );
|
|
108
113
|
|
|
114
|
+
} else if ( /^get$/.test( prop ) === true ) {
|
|
115
|
+
|
|
116
|
+
// accessing properties
|
|
117
|
+
|
|
118
|
+
return ( value ) => nodeObject( new MemberNode( nodeObj, value ) );
|
|
119
|
+
|
|
109
120
|
}
|
|
110
121
|
|
|
111
122
|
}
|
|
@@ -251,15 +262,13 @@ class ShaderCallNodeInternal extends Node {
|
|
|
251
262
|
|
|
252
263
|
getNodeType( builder ) {
|
|
253
264
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
if ( properties.outputNode === null ) {
|
|
265
|
+
return this.shaderNode.nodeType || this.getOutputNode( builder ).getNodeType( builder );
|
|
257
266
|
|
|
258
|
-
|
|
267
|
+
}
|
|
259
268
|
|
|
260
|
-
|
|
269
|
+
getMemberType( builder, name ) {
|
|
261
270
|
|
|
262
|
-
return
|
|
271
|
+
return this.getOutputNode( builder ).getMemberType( builder, name );
|
|
263
272
|
|
|
264
273
|
}
|
|
265
274
|
|
|
@@ -267,6 +276,13 @@ class ShaderCallNodeInternal extends Node {
|
|
|
267
276
|
|
|
268
277
|
const { shaderNode, inputNodes } = this;
|
|
269
278
|
|
|
279
|
+
const properties = builder.getNodeProperties( shaderNode );
|
|
280
|
+
if ( properties.onceOutput ) return properties.onceOutput;
|
|
281
|
+
|
|
282
|
+
//
|
|
283
|
+
|
|
284
|
+
let result = null;
|
|
285
|
+
|
|
270
286
|
if ( shaderNode.layout ) {
|
|
271
287
|
|
|
272
288
|
let functionNodesCacheMap = nodeBuilderFunctionsCacheMap.get( builder.constructor );
|
|
@@ -289,28 +305,46 @@ class ShaderCallNodeInternal extends Node {
|
|
|
289
305
|
|
|
290
306
|
}
|
|
291
307
|
|
|
292
|
-
|
|
308
|
+
builder.addInclude( functionNode );
|
|
293
309
|
|
|
294
|
-
|
|
310
|
+
result = nodeObject( functionNode.call( inputNodes ) );
|
|
295
311
|
|
|
296
|
-
|
|
312
|
+
} else {
|
|
313
|
+
|
|
314
|
+
const jsFunc = shaderNode.jsFunc;
|
|
315
|
+
const outputNode = inputNodes !== null || jsFunc.length > 1 ? jsFunc( inputNodes || [], builder ) : jsFunc( builder );
|
|
297
316
|
|
|
298
|
-
|
|
317
|
+
result = nodeObject( outputNode );
|
|
299
318
|
|
|
300
319
|
}
|
|
301
320
|
|
|
302
|
-
|
|
303
|
-
|
|
321
|
+
if ( shaderNode.once ) {
|
|
322
|
+
|
|
323
|
+
properties.onceOutput = result;
|
|
304
324
|
|
|
305
|
-
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
return result;
|
|
306
328
|
|
|
307
329
|
}
|
|
308
330
|
|
|
309
|
-
|
|
331
|
+
getOutputNode( builder ) {
|
|
310
332
|
|
|
311
|
-
const
|
|
333
|
+
const properties = builder.getNodeProperties( this );
|
|
312
334
|
|
|
313
|
-
|
|
335
|
+
if ( properties.outputNode === null ) {
|
|
336
|
+
|
|
337
|
+
properties.outputNode = this.setupOutput( builder );
|
|
338
|
+
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
return properties.outputNode;
|
|
342
|
+
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
setup( builder ) {
|
|
346
|
+
|
|
347
|
+
return this.getOutputNode( builder );
|
|
314
348
|
|
|
315
349
|
}
|
|
316
350
|
|
|
@@ -326,17 +360,9 @@ class ShaderCallNodeInternal extends Node {
|
|
|
326
360
|
|
|
327
361
|
generate( builder, output ) {
|
|
328
362
|
|
|
329
|
-
const
|
|
330
|
-
|
|
331
|
-
if ( outputNode === null ) {
|
|
363
|
+
const outputNode = this.getOutputNode( builder );
|
|
332
364
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
return this.call( builder ).build( builder, output );
|
|
336
|
-
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
return super.generate( builder, output );
|
|
365
|
+
return outputNode.build( builder, output );
|
|
340
366
|
|
|
341
367
|
}
|
|
342
368
|
|
|
@@ -344,20 +370,16 @@ class ShaderCallNodeInternal extends Node {
|
|
|
344
370
|
|
|
345
371
|
class ShaderNodeInternal extends Node {
|
|
346
372
|
|
|
347
|
-
constructor( jsFunc ) {
|
|
373
|
+
constructor( jsFunc, nodeType ) {
|
|
348
374
|
|
|
349
|
-
super();
|
|
375
|
+
super( nodeType );
|
|
350
376
|
|
|
351
377
|
this.jsFunc = jsFunc;
|
|
352
378
|
this.layout = null;
|
|
353
379
|
|
|
354
380
|
this.global = true;
|
|
355
381
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
get isArrayInput() {
|
|
359
|
-
|
|
360
|
-
return /^\((\s+)?\[/.test( this.jsFunc.toString() );
|
|
382
|
+
this.once = false;
|
|
361
383
|
|
|
362
384
|
}
|
|
363
385
|
|
|
@@ -480,9 +502,9 @@ export const getConstNodeType = ( value ) => ( value !== undefined && value !==
|
|
|
480
502
|
|
|
481
503
|
// shader node base
|
|
482
504
|
|
|
483
|
-
export function ShaderNode( jsFunc ) {
|
|
505
|
+
export function ShaderNode( jsFunc, nodeType ) {
|
|
484
506
|
|
|
485
|
-
return new Proxy( new ShaderNodeInternal( jsFunc ), shaderNodeHandler );
|
|
507
|
+
return new Proxy( new ShaderNodeInternal( jsFunc, nodeType ), shaderNodeHandler );
|
|
486
508
|
|
|
487
509
|
}
|
|
488
510
|
|
|
@@ -492,9 +514,9 @@ export const nodeArray = ( val, altType = null ) => new ShaderNodeArray( val, al
|
|
|
492
514
|
export const nodeProxy = ( ...params ) => new ShaderNodeProxy( ...params );
|
|
493
515
|
export const nodeImmutable = ( ...params ) => new ShaderNodeImmutable( ...params );
|
|
494
516
|
|
|
495
|
-
export const Fn = ( jsFunc ) => {
|
|
517
|
+
export const Fn = ( jsFunc, nodeType ) => {
|
|
496
518
|
|
|
497
|
-
const shaderNode = new ShaderNode( jsFunc );
|
|
519
|
+
const shaderNode = new ShaderNode( jsFunc, nodeType );
|
|
498
520
|
|
|
499
521
|
const fn = ( ...params ) => {
|
|
500
522
|
|
|
@@ -517,6 +539,7 @@ export const Fn = ( jsFunc ) => {
|
|
|
517
539
|
};
|
|
518
540
|
|
|
519
541
|
fn.shaderNode = shaderNode;
|
|
542
|
+
|
|
520
543
|
fn.setLayout = ( layout ) => {
|
|
521
544
|
|
|
522
545
|
shaderNode.setLayout( layout );
|
|
@@ -525,22 +548,36 @@ export const Fn = ( jsFunc ) => {
|
|
|
525
548
|
|
|
526
549
|
};
|
|
527
550
|
|
|
551
|
+
fn.once = () => {
|
|
552
|
+
|
|
553
|
+
shaderNode.once = true;
|
|
554
|
+
|
|
555
|
+
return fn;
|
|
556
|
+
|
|
557
|
+
};
|
|
558
|
+
|
|
528
559
|
return fn;
|
|
529
560
|
|
|
530
561
|
};
|
|
531
562
|
|
|
563
|
+
/**
|
|
564
|
+
* @tsl
|
|
565
|
+
* @function
|
|
566
|
+
* @deprecated since r168. Use {@link Fn} instead.
|
|
567
|
+
*
|
|
568
|
+
* @param {...any} params
|
|
569
|
+
* @returns {Function}
|
|
570
|
+
*/
|
|
532
571
|
export const tslFn = ( ...params ) => { // @deprecated, r168
|
|
533
572
|
|
|
534
|
-
console.warn( 'TSL.
|
|
573
|
+
console.warn( 'TSL.ShaderNode: tslFn() has been renamed to Fn().' );
|
|
535
574
|
return Fn( ...params );
|
|
536
575
|
|
|
537
576
|
};
|
|
538
577
|
|
|
539
|
-
addNodeClass( 'ShaderNode', ShaderNode );
|
|
540
|
-
|
|
541
578
|
//
|
|
542
579
|
|
|
543
|
-
|
|
580
|
+
addMethodChaining( 'toGlobal', ( node ) => {
|
|
544
581
|
|
|
545
582
|
node.global = true;
|
|
546
583
|
|
|
@@ -574,10 +611,9 @@ export function append( node ) {
|
|
|
574
611
|
|
|
575
612
|
}
|
|
576
613
|
|
|
577
|
-
|
|
614
|
+
addMethodChaining( 'append', append );
|
|
578
615
|
|
|
579
616
|
// types
|
|
580
|
-
// @TODO: Maybe export from ConstNode.js?
|
|
581
617
|
|
|
582
618
|
export const color = new ConvertType( 'color' );
|
|
583
619
|
|
|
@@ -602,58 +638,38 @@ export const uvec4 = new ConvertType( 'uvec4' );
|
|
|
602
638
|
export const bvec4 = new ConvertType( 'bvec4' );
|
|
603
639
|
|
|
604
640
|
export const mat2 = new ConvertType( 'mat2' );
|
|
605
|
-
export const imat2 = new ConvertType( 'imat2' );
|
|
606
|
-
export const umat2 = new ConvertType( 'umat2' );
|
|
607
|
-
export const bmat2 = new ConvertType( 'bmat2' );
|
|
608
|
-
|
|
609
641
|
export const mat3 = new ConvertType( 'mat3' );
|
|
610
|
-
export const imat3 = new ConvertType( 'imat3' );
|
|
611
|
-
export const umat3 = new ConvertType( 'umat3' );
|
|
612
|
-
export const bmat3 = new ConvertType( 'bmat3' );
|
|
613
|
-
|
|
614
642
|
export const mat4 = new ConvertType( 'mat4' );
|
|
615
|
-
export const imat4 = new ConvertType( 'imat4' );
|
|
616
|
-
export const umat4 = new ConvertType( 'umat4' );
|
|
617
|
-
export const bmat4 = new ConvertType( 'bmat4' );
|
|
618
643
|
|
|
619
644
|
export const string = ( value = '' ) => nodeObject( new ConstNode( value, 'string' ) );
|
|
620
645
|
export const arrayBuffer = ( value ) => nodeObject( new ConstNode( value, 'ArrayBuffer' ) );
|
|
621
646
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
addNodeElement( 'toBmat2', bmat2 );
|
|
643
|
-
addNodeElement( 'toMat3', mat3 );
|
|
644
|
-
addNodeElement( 'toImat3', imat3 );
|
|
645
|
-
addNodeElement( 'toUmat3', umat3 );
|
|
646
|
-
addNodeElement( 'toBmat3', bmat3 );
|
|
647
|
-
addNodeElement( 'toMat4', mat4 );
|
|
648
|
-
addNodeElement( 'toImat4', imat4 );
|
|
649
|
-
addNodeElement( 'toUmat4', umat4 );
|
|
650
|
-
addNodeElement( 'toBmat4', bmat4 );
|
|
647
|
+
addMethodChaining( 'toColor', color );
|
|
648
|
+
addMethodChaining( 'toFloat', float );
|
|
649
|
+
addMethodChaining( 'toInt', int );
|
|
650
|
+
addMethodChaining( 'toUint', uint );
|
|
651
|
+
addMethodChaining( 'toBool', bool );
|
|
652
|
+
addMethodChaining( 'toVec2', vec2 );
|
|
653
|
+
addMethodChaining( 'toIVec2', ivec2 );
|
|
654
|
+
addMethodChaining( 'toUVec2', uvec2 );
|
|
655
|
+
addMethodChaining( 'toBVec2', bvec2 );
|
|
656
|
+
addMethodChaining( 'toVec3', vec3 );
|
|
657
|
+
addMethodChaining( 'toIVec3', ivec3 );
|
|
658
|
+
addMethodChaining( 'toUVec3', uvec3 );
|
|
659
|
+
addMethodChaining( 'toBVec3', bvec3 );
|
|
660
|
+
addMethodChaining( 'toVec4', vec4 );
|
|
661
|
+
addMethodChaining( 'toIVec4', ivec4 );
|
|
662
|
+
addMethodChaining( 'toUVec4', uvec4 );
|
|
663
|
+
addMethodChaining( 'toBVec4', bvec4 );
|
|
664
|
+
addMethodChaining( 'toMat2', mat2 );
|
|
665
|
+
addMethodChaining( 'toMat3', mat3 );
|
|
666
|
+
addMethodChaining( 'toMat4', mat4 );
|
|
651
667
|
|
|
652
668
|
// basic nodes
|
|
653
|
-
|
|
654
|
-
export const element = nodeProxy( ArrayElementNode );
|
|
669
|
+
|
|
670
|
+
export const element = /*@__PURE__*/ nodeProxy( ArrayElementNode );
|
|
655
671
|
export const convert = ( node, types ) => nodeObject( new ConvertNode( nodeObject( node ), types ) );
|
|
656
672
|
export const split = ( node, channels ) => nodeObject( new SplitNode( nodeObject( node ), channels ) );
|
|
657
673
|
|
|
658
|
-
|
|
659
|
-
|
|
674
|
+
addMethodChaining( 'element', element );
|
|
675
|
+
addMethodChaining( 'convert', convert );
|
|
@@ -1,18 +1,60 @@
|
|
|
1
|
-
import Node
|
|
2
|
-
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Base class for representing element access on an array-like
|
|
5
|
+
* node data structures.
|
|
6
|
+
*
|
|
7
|
+
* @augments Node
|
|
8
|
+
*/
|
|
3
9
|
class ArrayElementNode extends Node { // @TODO: If extending from TempNode it breaks webgpu_compute
|
|
4
10
|
|
|
11
|
+
static get type() {
|
|
12
|
+
|
|
13
|
+
return 'ArrayElementNode';
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Constructs an array element node.
|
|
19
|
+
*
|
|
20
|
+
* @param {Node} node - The array-like node.
|
|
21
|
+
* @param {Node} indexNode - The index node that defines the element access.
|
|
22
|
+
*/
|
|
5
23
|
constructor( node, indexNode ) {
|
|
6
24
|
|
|
7
25
|
super();
|
|
8
26
|
|
|
27
|
+
/**
|
|
28
|
+
* The array-like node.
|
|
29
|
+
*
|
|
30
|
+
* @type {Node}
|
|
31
|
+
*/
|
|
9
32
|
this.node = node;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The index node that defines the element access.
|
|
36
|
+
*
|
|
37
|
+
* @type {Node}
|
|
38
|
+
*/
|
|
10
39
|
this.indexNode = indexNode;
|
|
11
40
|
|
|
41
|
+
/**
|
|
42
|
+
* This flag can be used for type testing.
|
|
43
|
+
*
|
|
44
|
+
* @type {boolean}
|
|
45
|
+
* @readonly
|
|
46
|
+
* @default true
|
|
47
|
+
*/
|
|
12
48
|
this.isArrayElementNode = true;
|
|
13
49
|
|
|
14
50
|
}
|
|
15
51
|
|
|
52
|
+
/**
|
|
53
|
+
* This method is overwritten since the node type is inferred from the array-like node.
|
|
54
|
+
*
|
|
55
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
56
|
+
* @return {string} The node type.
|
|
57
|
+
*/
|
|
16
58
|
getNodeType( builder ) {
|
|
17
59
|
|
|
18
60
|
return this.node.getElementType( builder );
|
|
@@ -24,12 +66,10 @@ class ArrayElementNode extends Node { // @TODO: If extending from TempNode it br
|
|
|
24
66
|
const nodeSnippet = this.node.build( builder );
|
|
25
67
|
const indexSnippet = this.indexNode.build( builder, 'uint' );
|
|
26
68
|
|
|
27
|
-
return `${nodeSnippet}[ ${indexSnippet} ]`;
|
|
69
|
+
return `${ nodeSnippet }[ ${ indexSnippet } ]`;
|
|
28
70
|
|
|
29
71
|
}
|
|
30
72
|
|
|
31
73
|
}
|
|
32
74
|
|
|
33
75
|
export default ArrayElementNode;
|
|
34
|
-
|
|
35
|
-
addNodeClass( 'ArrayElementNode', ArrayElementNode );
|
|
@@ -1,16 +1,53 @@
|
|
|
1
|
-
import Node
|
|
2
|
-
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This module is part of the TSL core and usually not used in app level code.
|
|
5
|
+
* It represents a convert operation during the shader generation process
|
|
6
|
+
* meaning it converts the data type of a node to a target data type.
|
|
7
|
+
*
|
|
8
|
+
* @augments Node
|
|
9
|
+
*/
|
|
3
10
|
class ConvertNode extends Node {
|
|
4
11
|
|
|
12
|
+
static get type() {
|
|
13
|
+
|
|
14
|
+
return 'ConvertNode';
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new convert node.
|
|
20
|
+
*
|
|
21
|
+
* @param {Node} node - The node which type should be converted.
|
|
22
|
+
* @param {string} convertTo - The target node type. Multiple types can be defined by separating them with a `|` sign.
|
|
23
|
+
*/
|
|
5
24
|
constructor( node, convertTo ) {
|
|
6
25
|
|
|
7
26
|
super();
|
|
8
27
|
|
|
28
|
+
/**
|
|
29
|
+
* The node which type should be converted.
|
|
30
|
+
*
|
|
31
|
+
* @type {Node}
|
|
32
|
+
*/
|
|
9
33
|
this.node = node;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The target node type. Multiple types can be defined by separating them with a `|` sign.
|
|
37
|
+
*
|
|
38
|
+
* @type {string}
|
|
39
|
+
*/
|
|
10
40
|
this.convertTo = convertTo;
|
|
11
41
|
|
|
12
42
|
}
|
|
13
43
|
|
|
44
|
+
/**
|
|
45
|
+
* This method is overwritten since the implementation tries to infer the best
|
|
46
|
+
* matching type from the {@link ConvertNode#convertTo} property.
|
|
47
|
+
*
|
|
48
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
49
|
+
* @return {string} The node type.
|
|
50
|
+
*/
|
|
14
51
|
getNodeType( builder ) {
|
|
15
52
|
|
|
16
53
|
const requestType = this.node.getNodeType( builder );
|
|
@@ -61,5 +98,3 @@ class ConvertNode extends Node {
|
|
|
61
98
|
}
|
|
62
99
|
|
|
63
100
|
export default ConvertNode;
|
|
64
|
-
|
|
65
|
-
addNodeClass( 'ConvertNode', ConvertNode );
|
|
@@ -1,30 +1,80 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
|
-
import { addNodeClass } from '../core/Node.js';
|
|
3
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
4
|
-
import { nodeProxy } from '../
|
|
3
|
+
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
5
4
|
import { CubeTexture } from '../../textures/CubeTexture.js';
|
|
6
5
|
import { cubeTexture } from '../accessors/CubeTextureNode.js';
|
|
7
6
|
import CubeRenderTarget from '../../renderers/common/CubeRenderTarget.js';
|
|
8
|
-
import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants';
|
|
7
|
+
import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants.js';
|
|
9
8
|
|
|
10
9
|
const _cache = new WeakMap();
|
|
11
10
|
|
|
11
|
+
/**
|
|
12
|
+
* This node can be used to automatically convert environment maps in the
|
|
13
|
+
* equirectangular format into the cube map format.
|
|
14
|
+
*
|
|
15
|
+
* @augments TempNode
|
|
16
|
+
*/
|
|
12
17
|
class CubeMapNode extends TempNode {
|
|
13
18
|
|
|
19
|
+
static get type() {
|
|
20
|
+
|
|
21
|
+
return 'CubeMapNode';
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new cube map node.
|
|
27
|
+
*
|
|
28
|
+
* @param {Node} envNode - The node representing the environment map.
|
|
29
|
+
*/
|
|
14
30
|
constructor( envNode ) {
|
|
15
31
|
|
|
16
32
|
super( 'vec3' );
|
|
17
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The node representing the environment map.
|
|
36
|
+
*
|
|
37
|
+
* @type {Node}
|
|
38
|
+
*/
|
|
18
39
|
this.envNode = envNode;
|
|
19
40
|
|
|
41
|
+
/**
|
|
42
|
+
* A reference to the internal cube texture.
|
|
43
|
+
*
|
|
44
|
+
* @private
|
|
45
|
+
* @type {CubeTexture}
|
|
46
|
+
* @default null
|
|
47
|
+
*/
|
|
20
48
|
this._cubeTexture = null;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* A reference to the internal cube texture node.
|
|
52
|
+
*
|
|
53
|
+
* @private
|
|
54
|
+
* @type {CubeTextureNode}
|
|
55
|
+
*/
|
|
21
56
|
this._cubeTextureNode = cubeTexture();
|
|
22
57
|
|
|
23
58
|
const defaultTexture = new CubeTexture();
|
|
24
59
|
defaultTexture.isRenderTargetTexture = true;
|
|
25
60
|
|
|
61
|
+
/**
|
|
62
|
+
* A default cube texture that acts as a placeholder.
|
|
63
|
+
* It is used when the conversion from equirectangular to cube
|
|
64
|
+
* map has not finished yet for a given texture.
|
|
65
|
+
*
|
|
66
|
+
* @private
|
|
67
|
+
* @type {CubeTexture}
|
|
68
|
+
*/
|
|
26
69
|
this._defaultTexture = defaultTexture;
|
|
27
70
|
|
|
71
|
+
/**
|
|
72
|
+
* The `updateBeforeType` is set to `NodeUpdateType.RENDER` since the node updates
|
|
73
|
+
* the texture once per render in its {@link CubeMapNode#updateBefore} method.
|
|
74
|
+
*
|
|
75
|
+
* @type {string}
|
|
76
|
+
* @default 'render'
|
|
77
|
+
*/
|
|
28
78
|
this.updateBeforeType = NodeUpdateType.RENDER;
|
|
29
79
|
|
|
30
80
|
}
|
|
@@ -110,6 +160,16 @@ class CubeMapNode extends TempNode {
|
|
|
110
160
|
|
|
111
161
|
}
|
|
112
162
|
|
|
163
|
+
export default CubeMapNode;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Returns true if the given equirectangular image has been fully loaded
|
|
167
|
+
* and is ready for further processing.
|
|
168
|
+
*
|
|
169
|
+
* @private
|
|
170
|
+
* @param {Image} image - The equirectangular image to check.
|
|
171
|
+
* @return {boolean} Whether the image is ready or not.
|
|
172
|
+
*/
|
|
113
173
|
function isEquirectangularMapReady( image ) {
|
|
114
174
|
|
|
115
175
|
if ( image === null || image === undefined ) return false;
|
|
@@ -118,6 +178,14 @@ function isEquirectangularMapReady( image ) {
|
|
|
118
178
|
|
|
119
179
|
}
|
|
120
180
|
|
|
181
|
+
/**
|
|
182
|
+
* This function is executed when `dispose()` is called on the equirectangular
|
|
183
|
+
* texture. In this case, the generated cube map with its render target
|
|
184
|
+
* is deleted as well.
|
|
185
|
+
*
|
|
186
|
+
* @private
|
|
187
|
+
* @param {Object} event - The event object.
|
|
188
|
+
*/
|
|
121
189
|
function onTextureDispose( event ) {
|
|
122
190
|
|
|
123
191
|
const texture = event.target;
|
|
@@ -136,6 +204,14 @@ function onTextureDispose( event ) {
|
|
|
136
204
|
|
|
137
205
|
}
|
|
138
206
|
|
|
207
|
+
/**
|
|
208
|
+
* This function makes sure the generated cube map uses the correct
|
|
209
|
+
* texture mapping that corresponds to the equirectangular original.
|
|
210
|
+
*
|
|
211
|
+
* @private
|
|
212
|
+
* @param {Texture} texture - The cube texture.
|
|
213
|
+
* @param {number} mapping - The original texture mapping.
|
|
214
|
+
*/
|
|
139
215
|
function mapTextureMapping( texture, mapping ) {
|
|
140
216
|
|
|
141
217
|
if ( mapping === EquirectangularReflectionMapping ) {
|
|
@@ -150,8 +226,12 @@ function mapTextureMapping( texture, mapping ) {
|
|
|
150
226
|
|
|
151
227
|
}
|
|
152
228
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
229
|
+
/**
|
|
230
|
+
* TSL function for creating a cube map node.
|
|
231
|
+
*
|
|
232
|
+
* @tsl
|
|
233
|
+
* @function
|
|
234
|
+
* @param {Node} envNode - The node representing the environment map.
|
|
235
|
+
* @returns {CubeMapNode}
|
|
236
|
+
*/
|
|
237
|
+
export const cubeMapNode = /*@__PURE__*/ nodeProxy( CubeMapNode );
|