@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,68 @@
|
|
|
1
|
+
import StorageInstancedBufferAttribute from '../../renderers/common/StorageInstancedBufferAttribute.js';
|
|
2
|
+
import StorageBufferAttribute from '../../renderers/common/StorageBufferAttribute.js';
|
|
3
|
+
import { storage } from './StorageBufferNode.js';
|
|
4
|
+
import { getLengthFromType, getTypedArrayFromType } from '../core/NodeUtils.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* TSL function for creating a storage buffer node with a configured `StorageBufferAttribute`.
|
|
8
|
+
*
|
|
9
|
+
* @tsl
|
|
10
|
+
* @function
|
|
11
|
+
* @param {number|TypedArray} count - The data count. It is also valid to pass a typed array as an argument.
|
|
12
|
+
* @param {string|Struct} [type='float'] - The data type.
|
|
13
|
+
* @returns {StorageBufferNode}
|
|
14
|
+
*/
|
|
15
|
+
export const attributeArray = ( count, type = 'float' ) => {
|
|
16
|
+
|
|
17
|
+
let itemSize, typedArray;
|
|
18
|
+
|
|
19
|
+
if ( type.isStruct === true ) {
|
|
20
|
+
|
|
21
|
+
itemSize = type.layout.getLength();
|
|
22
|
+
typedArray = getTypedArrayFromType( 'float' );
|
|
23
|
+
|
|
24
|
+
} else {
|
|
25
|
+
|
|
26
|
+
itemSize = getLengthFromType( type );
|
|
27
|
+
typedArray = getTypedArrayFromType( type );
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const buffer = new StorageBufferAttribute( count, itemSize, typedArray );
|
|
32
|
+
const node = storage( buffer, type, count );
|
|
33
|
+
|
|
34
|
+
return node;
|
|
35
|
+
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* TSL function for creating a storage buffer node with a configured `StorageInstancedBufferAttribute`.
|
|
40
|
+
*
|
|
41
|
+
* @tsl
|
|
42
|
+
* @function
|
|
43
|
+
* @param {number|TypedArray} count - The data count. It is also valid to pass a typed array as an argument.
|
|
44
|
+
* @param {string|Struct} [type='float'] - The data type.
|
|
45
|
+
* @returns {StorageBufferNode}
|
|
46
|
+
*/
|
|
47
|
+
export const instancedArray = ( count, type = 'float' ) => {
|
|
48
|
+
|
|
49
|
+
let itemSize, typedArray;
|
|
50
|
+
|
|
51
|
+
if ( type.isStruct === true ) {
|
|
52
|
+
|
|
53
|
+
itemSize = type.layout.getLength();
|
|
54
|
+
typedArray = getTypedArrayFromType( 'float' );
|
|
55
|
+
|
|
56
|
+
} else {
|
|
57
|
+
|
|
58
|
+
itemSize = getLengthFromType( type );
|
|
59
|
+
typedArray = getTypedArrayFromType( type );
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const buffer = new StorageInstancedBufferAttribute( count, itemSize, typedArray );
|
|
64
|
+
const node = storage( buffer, type, count );
|
|
65
|
+
|
|
66
|
+
return node;
|
|
67
|
+
|
|
68
|
+
};
|
|
@@ -1,31 +1,63 @@
|
|
|
1
|
-
import Node
|
|
2
|
-
import { normalLocal } from './
|
|
3
|
-
import { positionLocal } from './
|
|
4
|
-
import { nodeProxy, vec3, mat3, mat4, int, ivec2, float, Fn } from '../
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import { normalLocal } from './Normal.js';
|
|
3
|
+
import { positionLocal } from './Position.js';
|
|
4
|
+
import { nodeProxy, vec3, mat3, mat4, int, ivec2, float, Fn } from '../tsl/TSLBase.js';
|
|
5
5
|
import { textureLoad } from './TextureNode.js';
|
|
6
6
|
import { textureSize } from './TextureSizeNode.js';
|
|
7
|
-
import { tangentLocal } from './
|
|
7
|
+
import { tangentLocal } from './Tangent.js';
|
|
8
8
|
import { instanceIndex, drawIndex } from '../core/IndexNode.js';
|
|
9
|
-
|
|
9
|
+
import { varyingProperty } from '../core/PropertyNode.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* This node implements the vertex shader logic which is required
|
|
13
|
+
* when rendering 3D objects via batching. `BatchNode` must be used
|
|
14
|
+
* with instances of {@link BatchedMesh}.
|
|
15
|
+
*
|
|
16
|
+
* @augments Node
|
|
17
|
+
*/
|
|
10
18
|
class BatchNode extends Node {
|
|
11
19
|
|
|
20
|
+
static get type() {
|
|
21
|
+
|
|
22
|
+
return 'BatchNode';
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new batch node.
|
|
28
|
+
*
|
|
29
|
+
* @param {BatchedMesh} batchMesh - A reference to batched mesh.
|
|
30
|
+
*/
|
|
12
31
|
constructor( batchMesh ) {
|
|
13
32
|
|
|
14
33
|
super( 'void' );
|
|
15
34
|
|
|
35
|
+
/**
|
|
36
|
+
* A reference to batched mesh.
|
|
37
|
+
*
|
|
38
|
+
* @type {BatchedMesh}
|
|
39
|
+
*/
|
|
16
40
|
this.batchMesh = batchMesh;
|
|
17
41
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
42
|
+
/**
|
|
43
|
+
* The batching index node.
|
|
44
|
+
*
|
|
45
|
+
* @type {?IndexNode}
|
|
46
|
+
* @default null
|
|
47
|
+
*/
|
|
21
48
|
this.batchingIdNode = null;
|
|
22
49
|
|
|
23
50
|
}
|
|
24
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Setups the internal buffers and nodes and assigns the transformed vertex data
|
|
54
|
+
* to predefined node variables for accumulation. That follows the same patterns
|
|
55
|
+
* like with morph and skinning nodes.
|
|
56
|
+
*
|
|
57
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
58
|
+
*/
|
|
25
59
|
setup( builder ) {
|
|
26
60
|
|
|
27
|
-
// POSITION
|
|
28
|
-
|
|
29
61
|
if ( this.batchingIdNode === null ) {
|
|
30
62
|
|
|
31
63
|
if ( builder.getDrawIndex() === null ) {
|
|
@@ -42,9 +74,9 @@ class BatchNode extends Node {
|
|
|
42
74
|
|
|
43
75
|
const getIndirectIndex = Fn( ( [ id ] ) => {
|
|
44
76
|
|
|
45
|
-
const size = textureSize( textureLoad( this.batchMesh._indirectTexture ), 0 );
|
|
46
|
-
const x = int( id ).
|
|
47
|
-
const y = int( id ).div(
|
|
77
|
+
const size = int( textureSize( textureLoad( this.batchMesh._indirectTexture ), 0 ) );
|
|
78
|
+
const x = int( id ).modInt( size );
|
|
79
|
+
const y = int( id ).div( size );
|
|
48
80
|
return textureLoad( this.batchMesh._indirectTexture, ivec2( x, y ) ).x;
|
|
49
81
|
|
|
50
82
|
} ).setLayout( {
|
|
@@ -55,20 +87,49 @@ class BatchNode extends Node {
|
|
|
55
87
|
]
|
|
56
88
|
} );
|
|
57
89
|
|
|
58
|
-
const
|
|
90
|
+
const indirectId = getIndirectIndex( int( this.batchingIdNode ) );
|
|
59
91
|
|
|
60
|
-
const
|
|
61
|
-
const j = float( getIndirectIndex( int( this.batchingIdNode ) ) ).mul( 4 ).toVar();
|
|
92
|
+
const matricesTexture = this.batchMesh._matricesTexture;
|
|
62
93
|
|
|
63
|
-
const
|
|
64
|
-
const
|
|
94
|
+
const size = textureSize( textureLoad( matricesTexture ), 0 );
|
|
95
|
+
const j = float( indirectId ).mul( 4 ).toInt().toVar();
|
|
96
|
+
|
|
97
|
+
const x = j.modInt( size );
|
|
98
|
+
const y = j.div( int( size ) );
|
|
65
99
|
const batchingMatrix = mat4(
|
|
66
|
-
textureLoad(
|
|
67
|
-
textureLoad(
|
|
68
|
-
textureLoad(
|
|
69
|
-
textureLoad(
|
|
100
|
+
textureLoad( matricesTexture, ivec2( x, y ) ),
|
|
101
|
+
textureLoad( matricesTexture, ivec2( x.add( 1 ), y ) ),
|
|
102
|
+
textureLoad( matricesTexture, ivec2( x.add( 2 ), y ) ),
|
|
103
|
+
textureLoad( matricesTexture, ivec2( x.add( 3 ), y ) )
|
|
70
104
|
);
|
|
71
105
|
|
|
106
|
+
|
|
107
|
+
const colorsTexture = this.batchMesh._colorsTexture;
|
|
108
|
+
|
|
109
|
+
if ( colorsTexture !== null ) {
|
|
110
|
+
|
|
111
|
+
const getBatchingColor = Fn( ( [ id ] ) => {
|
|
112
|
+
|
|
113
|
+
const size = textureSize( textureLoad( colorsTexture ), 0 ).x;
|
|
114
|
+
const j = id;
|
|
115
|
+
const x = j.modInt( size );
|
|
116
|
+
const y = j.div( size );
|
|
117
|
+
return textureLoad( colorsTexture, ivec2( x, y ) ).rgb;
|
|
118
|
+
|
|
119
|
+
} ).setLayout( {
|
|
120
|
+
name: 'getBatchingColor',
|
|
121
|
+
type: 'vec3',
|
|
122
|
+
inputs: [
|
|
123
|
+
{ name: 'id', type: 'int' }
|
|
124
|
+
]
|
|
125
|
+
} );
|
|
126
|
+
|
|
127
|
+
const color = getBatchingColor( indirectId );
|
|
128
|
+
|
|
129
|
+
varyingProperty( 'vec3', 'vBatchColor' ).assign( color );
|
|
130
|
+
|
|
131
|
+
}
|
|
132
|
+
|
|
72
133
|
const bm = mat3( batchingMatrix );
|
|
73
134
|
|
|
74
135
|
positionLocal.assign( batchingMatrix.mul( positionLocal ) );
|
|
@@ -91,6 +152,12 @@ class BatchNode extends Node {
|
|
|
91
152
|
|
|
92
153
|
export default BatchNode;
|
|
93
154
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
155
|
+
/**
|
|
156
|
+
* TSL function for creating a batch node.
|
|
157
|
+
*
|
|
158
|
+
* @tsl
|
|
159
|
+
* @function
|
|
160
|
+
* @param {BatchedMesh} batchMesh - A reference to batched mesh.
|
|
161
|
+
* @returns {BatchNode}
|
|
162
|
+
*/
|
|
163
|
+
export const batch = /*@__PURE__*/ nodeProxy( BatchNode );
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { varying } from '../core/VaryingNode.js';
|
|
2
|
+
import { cameraViewMatrix } from './Camera.js';
|
|
3
|
+
import { normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView } from './Normal.js';
|
|
4
|
+
import { tangentGeometry, tangentLocal, tangentView, tangentWorld, transformedTangentView } from './Tangent.js';
|
|
5
|
+
|
|
6
|
+
const getBitangent = ( crossNormalTangent ) => crossNormalTangent.mul( tangentGeometry.w ).xyz;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* TSL object that represents the bitangent attribute of the current rendered object.
|
|
10
|
+
*
|
|
11
|
+
* @tsl
|
|
12
|
+
* @type {Node<vec3>}
|
|
13
|
+
*/
|
|
14
|
+
export const bitangentGeometry = /*@__PURE__*/ varying( getBitangent( normalGeometry.cross( tangentGeometry ) ), 'v_bitangentGeometry' ).normalize().toVar( 'bitangentGeometry' );
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* TSL object that represents the vertex bitangent in local space of the current rendered object.
|
|
18
|
+
*
|
|
19
|
+
* @tsl
|
|
20
|
+
* @type {Node<vec3>}
|
|
21
|
+
*/
|
|
22
|
+
export const bitangentLocal = /*@__PURE__*/ varying( getBitangent( normalLocal.cross( tangentLocal ) ), 'v_bitangentLocal' ).normalize().toVar( 'bitangentLocal' );
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* TSL object that represents the vertex bitangent in view space of the current rendered object.
|
|
26
|
+
*
|
|
27
|
+
* @tsl
|
|
28
|
+
* @type {Node<vec4>}
|
|
29
|
+
*/
|
|
30
|
+
export const bitangentView = /*@__PURE__*/ varying( getBitangent( normalView.cross( tangentView ) ), 'v_bitangentView' ).normalize().toVar( 'bitangentView' );
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* TSL object that represents the vertex bitangent in world space of the current rendered object.
|
|
34
|
+
*
|
|
35
|
+
* @tsl
|
|
36
|
+
* @type {Node<vec4>}
|
|
37
|
+
*/
|
|
38
|
+
export const bitangentWorld = /*@__PURE__*/ varying( getBitangent( normalWorld.cross( tangentWorld ) ), 'v_bitangentWorld' ).normalize().toVar( 'bitangentWorld' );
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* TSL object that represents the transformed vertex bitangent in view space of the current rendered object.
|
|
42
|
+
*
|
|
43
|
+
* @tsl
|
|
44
|
+
* @type {Node<vec4>}
|
|
45
|
+
*/
|
|
46
|
+
export const transformedBitangentView = /*@__PURE__*/ getBitangent( transformedNormalView.cross( transformedTangentView ) ).normalize().toVar( 'transformedBitangentView' );
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* TSL object that represents the transformed vertex bitangent in world space of the current rendered object.
|
|
50
|
+
*
|
|
51
|
+
* @tsl
|
|
52
|
+
* @type {Node<vec4>}
|
|
53
|
+
*/
|
|
54
|
+
export const transformedBitangentWorld = /*@__PURE__*/ transformedBitangentView.transformDirection( cameraViewMatrix ).normalize().toVar( 'transformedBitangentWorld' );
|
|
@@ -1,29 +1,117 @@
|
|
|
1
1
|
import InputNode from '../core/InputNode.js';
|
|
2
|
-
import {
|
|
2
|
+
import { nodeObject, addMethodChaining } from '../tsl/TSLCore.js';
|
|
3
3
|
import { varying } from '../core/VaryingNode.js';
|
|
4
|
-
import { nodeObject, addNodeElement } from '../shadernode/ShaderNode.js';
|
|
5
4
|
|
|
6
5
|
import { InterleavedBufferAttribute } from '../../core/InterleavedBufferAttribute.js';
|
|
7
6
|
import { InterleavedBuffer } from '../../core/InterleavedBuffer.js';
|
|
8
7
|
import { StaticDrawUsage, DynamicDrawUsage } from '../../constants.js';
|
|
9
8
|
|
|
9
|
+
/**
|
|
10
|
+
* In earlier `three.js` versions it was only possible to define attribute data
|
|
11
|
+
* on geometry level. With `BufferAttributeNode`, it is also possible to do this
|
|
12
|
+
* on the node level.
|
|
13
|
+
* ```js
|
|
14
|
+
* const geometry = new THREE.PlaneGeometry();
|
|
15
|
+
* const positionAttribute = geometry.getAttribute( 'position' );
|
|
16
|
+
*
|
|
17
|
+
* const colors = [];
|
|
18
|
+
* for ( let i = 0; i < position.count; i ++ ) {
|
|
19
|
+
* colors.push( 1, 0, 0 );
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* material.colorNode = bufferAttribute( new THREE.Float32BufferAttribute( colors, 3 ) );
|
|
23
|
+
* ```
|
|
24
|
+
* This new approach is especially interesting when geometry data are generated via
|
|
25
|
+
* compute shaders. The below line converts a storage buffer into an attribute node.
|
|
26
|
+
* ```js
|
|
27
|
+
* material.positionNode = positionBuffer.toAttribute();
|
|
28
|
+
* ```
|
|
29
|
+
* @augments InputNode
|
|
30
|
+
*/
|
|
10
31
|
class BufferAttributeNode extends InputNode {
|
|
11
32
|
|
|
33
|
+
static get type() {
|
|
34
|
+
|
|
35
|
+
return 'BufferAttributeNode';
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Constructs a new buffer attribute node.
|
|
41
|
+
*
|
|
42
|
+
* @param {BufferAttribute|InterleavedBuffer|TypedArray} value - The attribute data.
|
|
43
|
+
* @param {?string} [bufferType=null] - The buffer type (e.g. `'vec3'`).
|
|
44
|
+
* @param {number} [bufferStride=0] - The buffer stride.
|
|
45
|
+
* @param {number} [bufferOffset=0] - The buffer offset.
|
|
46
|
+
*/
|
|
12
47
|
constructor( value, bufferType = null, bufferStride = 0, bufferOffset = 0 ) {
|
|
13
48
|
|
|
14
49
|
super( value, bufferType );
|
|
15
50
|
|
|
51
|
+
/**
|
|
52
|
+
* This flag can be used for type testing.
|
|
53
|
+
*
|
|
54
|
+
* @type {boolean}
|
|
55
|
+
* @readonly
|
|
56
|
+
* @default true
|
|
57
|
+
*/
|
|
16
58
|
this.isBufferNode = true;
|
|
17
59
|
|
|
60
|
+
/**
|
|
61
|
+
* The buffer type (e.g. `'vec3'`).
|
|
62
|
+
*
|
|
63
|
+
* @type {?string}
|
|
64
|
+
* @default null
|
|
65
|
+
*/
|
|
18
66
|
this.bufferType = bufferType;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The buffer stride.
|
|
70
|
+
*
|
|
71
|
+
* @type {number}
|
|
72
|
+
* @default 0
|
|
73
|
+
*/
|
|
19
74
|
this.bufferStride = bufferStride;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The buffer offset.
|
|
78
|
+
*
|
|
79
|
+
* @type {number}
|
|
80
|
+
* @default 0
|
|
81
|
+
*/
|
|
20
82
|
this.bufferOffset = bufferOffset;
|
|
21
83
|
|
|
84
|
+
/**
|
|
85
|
+
* The usage property. Set this to `THREE.DynamicDrawUsage` via `.setUsage()`,
|
|
86
|
+
* if you are planning to update the attribute data per frame.
|
|
87
|
+
*
|
|
88
|
+
* @type {number}
|
|
89
|
+
* @default StaticDrawUsage
|
|
90
|
+
*/
|
|
22
91
|
this.usage = StaticDrawUsage;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Whether the attribute is instanced or not.
|
|
95
|
+
*
|
|
96
|
+
* @type {boolean}
|
|
97
|
+
* @default false
|
|
98
|
+
*/
|
|
23
99
|
this.instanced = false;
|
|
24
100
|
|
|
101
|
+
/**
|
|
102
|
+
* A reference to the buffer attribute.
|
|
103
|
+
*
|
|
104
|
+
* @type {?BufferAttribute}
|
|
105
|
+
* @default null
|
|
106
|
+
*/
|
|
25
107
|
this.attribute = null;
|
|
26
108
|
|
|
109
|
+
/**
|
|
110
|
+
* `BufferAttributeNode` sets this property to `true` by default.
|
|
111
|
+
*
|
|
112
|
+
* @type {boolean}
|
|
113
|
+
* @default true
|
|
114
|
+
*/
|
|
27
115
|
this.global = true;
|
|
28
116
|
|
|
29
117
|
if ( value && value.isBufferAttribute === true ) {
|
|
@@ -36,6 +124,13 @@ class BufferAttributeNode extends InputNode {
|
|
|
36
124
|
|
|
37
125
|
}
|
|
38
126
|
|
|
127
|
+
/**
|
|
128
|
+
* This method is overwritten since the attribute data might be shared
|
|
129
|
+
* and thus the hash should be shared as well.
|
|
130
|
+
*
|
|
131
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
132
|
+
* @return {string} The hash.
|
|
133
|
+
*/
|
|
39
134
|
getHash( builder ) {
|
|
40
135
|
|
|
41
136
|
if ( this.bufferStride === 0 && this.bufferOffset === 0 ) {
|
|
@@ -60,6 +155,13 @@ class BufferAttributeNode extends InputNode {
|
|
|
60
155
|
|
|
61
156
|
}
|
|
62
157
|
|
|
158
|
+
/**
|
|
159
|
+
* This method is overwritten since the node type is inferred from
|
|
160
|
+
* the buffer attribute.
|
|
161
|
+
*
|
|
162
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
163
|
+
* @return {string} The node type.
|
|
164
|
+
*/
|
|
63
165
|
getNodeType( builder ) {
|
|
64
166
|
|
|
65
167
|
if ( this.bufferType === null ) {
|
|
@@ -72,6 +174,13 @@ class BufferAttributeNode extends InputNode {
|
|
|
72
174
|
|
|
73
175
|
}
|
|
74
176
|
|
|
177
|
+
/**
|
|
178
|
+
* Depending on which value was passed to the node, `setup()` behaves
|
|
179
|
+
* differently. If no instance of `BufferAttribute` was passed, the method
|
|
180
|
+
* creates an internal attribute and configures it respectively.
|
|
181
|
+
*
|
|
182
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
183
|
+
*/
|
|
75
184
|
setup( builder ) {
|
|
76
185
|
|
|
77
186
|
if ( this.attribute !== null ) return;
|
|
@@ -92,6 +201,12 @@ class BufferAttributeNode extends InputNode {
|
|
|
92
201
|
|
|
93
202
|
}
|
|
94
203
|
|
|
204
|
+
/**
|
|
205
|
+
* Generates the code snippet of the buffer attribute node.
|
|
206
|
+
*
|
|
207
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
208
|
+
* @return {string} The generated code snippet.
|
|
209
|
+
*/
|
|
95
210
|
generate( builder ) {
|
|
96
211
|
|
|
97
212
|
const nodeType = this.getNodeType( builder );
|
|
@@ -119,12 +234,24 @@ class BufferAttributeNode extends InputNode {
|
|
|
119
234
|
|
|
120
235
|
}
|
|
121
236
|
|
|
237
|
+
/**
|
|
238
|
+
* Overwrites the default implementation to return a fixed value `'bufferAttribute'`.
|
|
239
|
+
*
|
|
240
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
241
|
+
* @return {string} The input type.
|
|
242
|
+
*/
|
|
122
243
|
getInputType( /*builder*/ ) {
|
|
123
244
|
|
|
124
245
|
return 'bufferAttribute';
|
|
125
246
|
|
|
126
247
|
}
|
|
127
248
|
|
|
249
|
+
/**
|
|
250
|
+
* Sets the `usage` property to the given value.
|
|
251
|
+
*
|
|
252
|
+
* @param {number} value - The usage to set.
|
|
253
|
+
* @return {BufferAttributeNode} A reference to this node.
|
|
254
|
+
*/
|
|
128
255
|
setUsage( value ) {
|
|
129
256
|
|
|
130
257
|
this.usage = value;
|
|
@@ -139,6 +266,12 @@ class BufferAttributeNode extends InputNode {
|
|
|
139
266
|
|
|
140
267
|
}
|
|
141
268
|
|
|
269
|
+
/**
|
|
270
|
+
* Sets the `instanced` property to the given value.
|
|
271
|
+
*
|
|
272
|
+
* @param {boolean} value - The value to set.
|
|
273
|
+
* @return {BufferAttributeNode} A reference to this node.
|
|
274
|
+
*/
|
|
142
275
|
setInstanced( value ) {
|
|
143
276
|
|
|
144
277
|
this.instanced = value;
|
|
@@ -151,12 +284,57 @@ class BufferAttributeNode extends InputNode {
|
|
|
151
284
|
|
|
152
285
|
export default BufferAttributeNode;
|
|
153
286
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
287
|
+
/**
|
|
288
|
+
* TSL function for creating a buffer attribute node.
|
|
289
|
+
*
|
|
290
|
+
* @tsl
|
|
291
|
+
* @function
|
|
292
|
+
* @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
|
|
293
|
+
* @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
|
|
294
|
+
* @param {number} [stride=0] - The buffer stride.
|
|
295
|
+
* @param {number} [offset=0] - The buffer offset.
|
|
296
|
+
* @returns {BufferAttributeNode}
|
|
297
|
+
*/
|
|
298
|
+
export const bufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => nodeObject( new BufferAttributeNode( array, type, stride, offset ) );
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* TSL function for creating a buffer attribute node but with dynamic draw usage.
|
|
302
|
+
* Use this function if attribute data are updated per frame.
|
|
303
|
+
*
|
|
304
|
+
* @tsl
|
|
305
|
+
* @function
|
|
306
|
+
* @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
|
|
307
|
+
* @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
|
|
308
|
+
* @param {number} [stride=0] - The buffer stride.
|
|
309
|
+
* @param {number} [offset=0] - The buffer offset.
|
|
310
|
+
* @returns {BufferAttributeNode}
|
|
311
|
+
*/
|
|
312
|
+
export const dynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => bufferAttribute( array, type, stride, offset ).setUsage( DynamicDrawUsage );
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* TSL function for creating a buffer attribute node but with enabled instancing
|
|
316
|
+
*
|
|
317
|
+
* @tsl
|
|
318
|
+
* @function
|
|
319
|
+
* @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
|
|
320
|
+
* @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
|
|
321
|
+
* @param {number} [stride=0] - The buffer stride.
|
|
322
|
+
* @param {number} [offset=0] - The buffer offset.
|
|
323
|
+
* @returns {BufferAttributeNode}
|
|
324
|
+
*/
|
|
325
|
+
export const instancedBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => bufferAttribute( array, type, stride, offset ).setInstanced( true );
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* TSL function for creating a buffer attribute node but with dynamic draw usage and enabled instancing
|
|
329
|
+
*
|
|
330
|
+
* @tsl
|
|
331
|
+
* @function
|
|
332
|
+
* @param {BufferAttribute|InterleavedBuffer|TypedArray} array - The attribute data.
|
|
333
|
+
* @param {?string} [type=null] - The buffer type (e.g. `'vec3'`).
|
|
334
|
+
* @param {number} [stride=0] - The buffer stride.
|
|
335
|
+
* @param {number} [offset=0] - The buffer offset.
|
|
336
|
+
* @returns {BufferAttributeNode}
|
|
337
|
+
*/
|
|
338
|
+
export const instancedDynamicBufferAttribute = ( array, type = null, stride = 0, offset = 0 ) => dynamicBufferAttribute( array, type, stride, offset ).setInstanced( true );
|
|
339
|
+
|
|
340
|
+
addMethodChaining( 'toAttribute', ( bufferNode ) => bufferAttribute( bufferNode.value ) );
|
|
@@ -1,26 +1,83 @@
|
|
|
1
1
|
import UniformNode from '../core/UniformNode.js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { nodeObject } from '../tsl/TSLBase.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A special type of uniform node which represents array-like data
|
|
6
|
+
* as uniform buffers. The access usually happens via `element()`
|
|
7
|
+
* which returns an instance of {@link ArrayElementNode}. For example:
|
|
8
|
+
*
|
|
9
|
+
* ```js
|
|
10
|
+
* const bufferNode = buffer( array, 'mat4', count );
|
|
11
|
+
* const matrixNode = bufferNode.element( index ); // access a matrix from the buffer
|
|
12
|
+
* ```
|
|
13
|
+
* In general, it is recommended to use the more managed {@link UniformArrayNode}
|
|
14
|
+
* since it handles more input types and automatically cares about buffer paddings.
|
|
15
|
+
*
|
|
16
|
+
* @augments UniformNode
|
|
17
|
+
*/
|
|
5
18
|
class BufferNode extends UniformNode {
|
|
6
19
|
|
|
20
|
+
static get type() {
|
|
21
|
+
|
|
22
|
+
return 'BufferNode';
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new buffer node.
|
|
28
|
+
*
|
|
29
|
+
* @param {Array<number>} value - Array-like buffer data.
|
|
30
|
+
* @param {string} bufferType - The data type of the buffer.
|
|
31
|
+
* @param {number} [bufferCount=0] - The count of buffer elements.
|
|
32
|
+
*/
|
|
7
33
|
constructor( value, bufferType, bufferCount = 0 ) {
|
|
8
34
|
|
|
9
35
|
super( value, bufferType );
|
|
10
36
|
|
|
37
|
+
/**
|
|
38
|
+
* This flag can be used for type testing.
|
|
39
|
+
*
|
|
40
|
+
* @type {boolean}
|
|
41
|
+
* @readonly
|
|
42
|
+
* @default true
|
|
43
|
+
*/
|
|
11
44
|
this.isBufferNode = true;
|
|
12
45
|
|
|
46
|
+
/**
|
|
47
|
+
* The data type of the buffer.
|
|
48
|
+
*
|
|
49
|
+
* @type {string}
|
|
50
|
+
*/
|
|
13
51
|
this.bufferType = bufferType;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The uniform node that holds the value of the reference node.
|
|
55
|
+
*
|
|
56
|
+
* @type {number}
|
|
57
|
+
* @default 0
|
|
58
|
+
*/
|
|
14
59
|
this.bufferCount = bufferCount;
|
|
15
60
|
|
|
16
61
|
}
|
|
17
62
|
|
|
63
|
+
/**
|
|
64
|
+
* The data type of the buffer elements.
|
|
65
|
+
*
|
|
66
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
67
|
+
* @return {string} The element type.
|
|
68
|
+
*/
|
|
18
69
|
getElementType( builder ) {
|
|
19
70
|
|
|
20
71
|
return this.getNodeType( builder );
|
|
21
72
|
|
|
22
73
|
}
|
|
23
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Overwrites the default implementation to return a fixed value `'buffer'`.
|
|
77
|
+
*
|
|
78
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
79
|
+
* @return {string} The input type.
|
|
80
|
+
*/
|
|
24
81
|
getInputType( /*builder*/ ) {
|
|
25
82
|
|
|
26
83
|
return 'buffer';
|
|
@@ -31,6 +88,14 @@ class BufferNode extends UniformNode {
|
|
|
31
88
|
|
|
32
89
|
export default BufferNode;
|
|
33
90
|
|
|
91
|
+
/**
|
|
92
|
+
* TSL function for creating a buffer node.
|
|
93
|
+
*
|
|
94
|
+
* @tsl
|
|
95
|
+
* @function
|
|
96
|
+
* @param {Array} value - Array-like buffer data.
|
|
97
|
+
* @param {string} type - The data type of a buffer element.
|
|
98
|
+
* @param {number} count - The count of buffer elements.
|
|
99
|
+
* @returns {BufferNode}
|
|
100
|
+
*/
|
|
34
101
|
export const buffer = ( value, type, count ) => nodeObject( new BufferNode( value, type, count ) );
|
|
35
|
-
|
|
36
|
-
addNodeClass( 'BufferNode', BufferNode );
|