super-three 0.171.0 → 0.173.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 +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -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 +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/ImageUtils.js +1 -11
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +113 -3
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/ArrayNode.js +125 -0
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- 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 +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +110 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +54 -0
- package/src/nodes/utils/Timer.js +40 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +243 -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 +352 -78
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -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 +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -1,8 +1,52 @@
|
|
|
1
1
|
import { sub, mul, div, add } from './OperatorNode.js';
|
|
2
2
|
import { PI, pow, sin } from './MathNode.js';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
/** @module MathUtils **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A function that remaps the `[0,1]` interval into the `[0,1]` interval.
|
|
8
|
+
* The corners are mapped to `0` and the center to `1`.
|
|
9
|
+
* Reference: {@link https://iquilezles.org/articles/functions/}.
|
|
10
|
+
*
|
|
11
|
+
* @method
|
|
12
|
+
* @param {Node<float>} x - The value to remap.
|
|
13
|
+
* @param {Node<float>} k - Allows to control the remapping functions shape by rising the parabola to a power `k`.
|
|
14
|
+
* @return {Node<float>} The remapped value.
|
|
15
|
+
*/
|
|
5
16
|
export const parabola = ( x, k ) => pow( mul( 4.0, x.mul( sub( 1.0, x ) ) ), k );
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A function that remaps the `[0,1]` interval into the `[0,1]` interval.
|
|
20
|
+
* Expands the sides and compresses the center, and keeps `0.5` mapped to `0.5`.
|
|
21
|
+
* Reference: {@link https://iquilezles.org/articles/functions/}.
|
|
22
|
+
*
|
|
23
|
+
* @method
|
|
24
|
+
* @param {Node<float>} x - The value to remap.
|
|
25
|
+
* @param {Node<float>} k - `k=1` is the identity curve,`k<1` produces the classic `gain()` shape, and `k>1` produces "s" shaped curves.
|
|
26
|
+
* @return {Node<float>} The remapped value.
|
|
27
|
+
*/
|
|
6
28
|
export const gain = ( x, k ) => x.lessThan( 0.5 ) ? parabola( x.mul( 2.0 ), k ).div( 2.0 ) : sub( 1.0, parabola( mul( sub( 1.0, x ), 2.0 ), k ).div( 2.0 ) );
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A function that remaps the `[0,1]` interval into the `[0,1]` interval.
|
|
32
|
+
* A generalization of the `parabola()`. Keeps the corners mapped to 0 but allows the control of the shape one either side of the curve.
|
|
33
|
+
* Reference: {@link https://iquilezles.org/articles/functions/}.
|
|
34
|
+
*
|
|
35
|
+
* @method
|
|
36
|
+
* @param {Node<float>} x - The value to remap.
|
|
37
|
+
* @param {Node<float>} a - First control parameter.
|
|
38
|
+
* @param {Node<float>} b - Second control parameter.
|
|
39
|
+
* @return {Node<float>} The remapped value.
|
|
40
|
+
*/
|
|
7
41
|
export const pcurve = ( x, a, b ) => pow( div( pow( x, a ), add( pow( x, a ), pow( sub( 1.0, x ), b ) ) ), 1.0 / a );
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* A phase shifted sinus curve that starts at zero and ends at zero, with bouncing behavior.
|
|
45
|
+
* Reference: {@link https://iquilezles.org/articles/functions/}.
|
|
46
|
+
*
|
|
47
|
+
* @method
|
|
48
|
+
* @param {Node<float>} x - The value to compute the sin for.
|
|
49
|
+
* @param {Node<float>} k - Controls the amount of bounces.
|
|
50
|
+
* @return {Node<float>} The result value.
|
|
51
|
+
*/
|
|
8
52
|
export const sinc = ( x, k ) => sin( PI.mul( k.mul( x ).sub( 1.0 ) ) ).div( PI.mul( k.mul( x ).sub( 1.0 ) ) );
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
2
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module OperatorNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This node represents basic mathematical and logical operations like addition,
|
|
8
|
+
* subtraction or comparisons (e.g. `equal()`).
|
|
9
|
+
*
|
|
10
|
+
* @augments TempNode
|
|
11
|
+
*/
|
|
4
12
|
class OperatorNode extends TempNode {
|
|
5
13
|
|
|
6
14
|
static get type() {
|
|
@@ -9,6 +17,14 @@ class OperatorNode extends TempNode {
|
|
|
9
17
|
|
|
10
18
|
}
|
|
11
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new operator node.
|
|
22
|
+
*
|
|
23
|
+
* @param {String} op - The operator.
|
|
24
|
+
* @param {Node} aNode - The first input.
|
|
25
|
+
* @param {Node} bNode - The second input.
|
|
26
|
+
* @param {...Node} params - Additional input parameters.
|
|
27
|
+
*/
|
|
12
28
|
constructor( op, aNode, bNode, ...params ) {
|
|
13
29
|
|
|
14
30
|
super();
|
|
@@ -28,12 +44,46 @@ class OperatorNode extends TempNode {
|
|
|
28
44
|
|
|
29
45
|
}
|
|
30
46
|
|
|
47
|
+
/**
|
|
48
|
+
* The operator.
|
|
49
|
+
*
|
|
50
|
+
* @type {String}
|
|
51
|
+
*/
|
|
31
52
|
this.op = op;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The first input.
|
|
56
|
+
*
|
|
57
|
+
* @type {Node}
|
|
58
|
+
*/
|
|
32
59
|
this.aNode = aNode;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The second input.
|
|
63
|
+
*
|
|
64
|
+
* @type {Node}
|
|
65
|
+
*/
|
|
33
66
|
this.bNode = bNode;
|
|
34
67
|
|
|
68
|
+
/**
|
|
69
|
+
* This flag can be used for type testing.
|
|
70
|
+
*
|
|
71
|
+
* @type {Boolean}
|
|
72
|
+
* @readonly
|
|
73
|
+
* @default true
|
|
74
|
+
*/
|
|
75
|
+
this.isOperatorNode = true;
|
|
76
|
+
|
|
35
77
|
}
|
|
36
78
|
|
|
79
|
+
/**
|
|
80
|
+
* This method is overwritten since the node type is inferred from the operator
|
|
81
|
+
* and the input node types.
|
|
82
|
+
*
|
|
83
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
84
|
+
* @param {String} output - The current output string.
|
|
85
|
+
* @return {String} The node type.
|
|
86
|
+
*/
|
|
37
87
|
getNodeType( builder, output ) {
|
|
38
88
|
|
|
39
89
|
const op = this.op;
|
|
@@ -68,23 +118,39 @@ class OperatorNode extends TempNode {
|
|
|
68
118
|
|
|
69
119
|
} else {
|
|
70
120
|
|
|
71
|
-
|
|
121
|
+
// Handle matrix operations
|
|
122
|
+
if ( builder.isMatrix( typeA ) ) {
|
|
72
123
|
|
|
73
|
-
|
|
124
|
+
if ( typeB === 'float' ) {
|
|
125
|
+
|
|
126
|
+
return typeA; // matrix * scalar = matrix
|
|
127
|
+
|
|
128
|
+
} else if ( builder.isVector( typeB ) ) {
|
|
129
|
+
|
|
130
|
+
return builder.getVectorFromMatrix( typeA ); // matrix * vector
|
|
131
|
+
|
|
132
|
+
} else if ( builder.isMatrix( typeB ) ) {
|
|
74
133
|
|
|
75
|
-
|
|
134
|
+
return typeA; // matrix * matrix
|
|
76
135
|
|
|
77
|
-
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
} else if ( builder.isMatrix( typeB ) ) {
|
|
139
|
+
|
|
140
|
+
if ( typeA === 'float' ) {
|
|
141
|
+
|
|
142
|
+
return typeB; // scalar * matrix = matrix
|
|
78
143
|
|
|
79
|
-
|
|
144
|
+
} else if ( builder.isVector( typeA ) ) {
|
|
80
145
|
|
|
81
|
-
|
|
146
|
+
return builder.getVectorFromMatrix( typeB ); // vector * matrix
|
|
82
147
|
|
|
83
|
-
|
|
148
|
+
}
|
|
84
149
|
|
|
85
|
-
|
|
150
|
+
}
|
|
86
151
|
|
|
87
|
-
|
|
152
|
+
// Handle non-matrix cases
|
|
153
|
+
if ( builder.getTypeLength( typeB ) > builder.getTypeLength( typeA ) ) {
|
|
88
154
|
|
|
89
155
|
// anytype x anytype: use the greater length vector
|
|
90
156
|
|
|
@@ -132,17 +198,43 @@ class OperatorNode extends TempNode {
|
|
|
132
198
|
typeA = type;
|
|
133
199
|
typeB = builder.changeComponentType( typeB, 'uint' );
|
|
134
200
|
|
|
135
|
-
} else if ( builder.isMatrix( typeA )
|
|
201
|
+
} else if ( builder.isMatrix( typeA ) ) {
|
|
202
|
+
|
|
203
|
+
if ( typeB === 'float' ) {
|
|
204
|
+
|
|
205
|
+
// Keep matrix type for typeA, but ensure typeB stays float
|
|
206
|
+
typeB = 'float';
|
|
136
207
|
|
|
137
|
-
|
|
208
|
+
} else if ( builder.isVector( typeB ) ) {
|
|
138
209
|
|
|
139
|
-
|
|
210
|
+
// matrix x vector
|
|
211
|
+
typeB = builder.getVectorFromMatrix( typeA );
|
|
140
212
|
|
|
141
|
-
|
|
213
|
+
} else if ( builder.isMatrix( typeB ) ) {
|
|
214
|
+
// matrix x matrix - keep both types
|
|
215
|
+
} else {
|
|
216
|
+
|
|
217
|
+
typeA = typeB = type;
|
|
218
|
+
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
} else if ( builder.isMatrix( typeB ) ) {
|
|
222
|
+
|
|
223
|
+
if ( typeA === 'float' ) {
|
|
224
|
+
|
|
225
|
+
// Keep matrix type for typeB, but ensure typeA stays float
|
|
226
|
+
typeA = 'float';
|
|
227
|
+
|
|
228
|
+
} else if ( builder.isVector( typeA ) ) {
|
|
142
229
|
|
|
143
|
-
|
|
230
|
+
// vector x matrix
|
|
231
|
+
typeA = builder.getVectorFromMatrix( typeB );
|
|
144
232
|
|
|
145
|
-
|
|
233
|
+
} else {
|
|
234
|
+
|
|
235
|
+
typeA = typeB = type;
|
|
236
|
+
|
|
237
|
+
}
|
|
146
238
|
|
|
147
239
|
} else {
|
|
148
240
|
|
|
@@ -224,7 +316,20 @@ class OperatorNode extends TempNode {
|
|
|
224
316
|
|
|
225
317
|
} else {
|
|
226
318
|
|
|
227
|
-
|
|
319
|
+
// Handle matrix operations
|
|
320
|
+
if ( builder.isMatrix( typeA ) && typeB === 'float' ) {
|
|
321
|
+
|
|
322
|
+
return builder.format( `( ${ b } ${ op } ${ a } )`, type, output );
|
|
323
|
+
|
|
324
|
+
} else if ( typeA === 'float' && builder.isMatrix( typeB ) ) {
|
|
325
|
+
|
|
326
|
+
return builder.format( `${ a } ${ op } ${ b }`, type, output );
|
|
327
|
+
|
|
328
|
+
} else {
|
|
329
|
+
|
|
330
|
+
return builder.format( `( ${ a } ${ op } ${ b } )`, type, output );
|
|
331
|
+
|
|
332
|
+
}
|
|
228
333
|
|
|
229
334
|
}
|
|
230
335
|
|
|
@@ -236,7 +341,15 @@ class OperatorNode extends TempNode {
|
|
|
236
341
|
|
|
237
342
|
} else {
|
|
238
343
|
|
|
239
|
-
|
|
344
|
+
if ( builder.isMatrix( typeA ) && typeB === 'float' ) {
|
|
345
|
+
|
|
346
|
+
return builder.format( `${ b } ${ op } ${ a }`, type, output );
|
|
347
|
+
|
|
348
|
+
} else {
|
|
349
|
+
|
|
350
|
+
return builder.format( `${ a } ${ op } ${ b }`, type, output );
|
|
351
|
+
|
|
352
|
+
}
|
|
240
353
|
|
|
241
354
|
}
|
|
242
355
|
|
|
@@ -264,26 +377,218 @@ class OperatorNode extends TempNode {
|
|
|
264
377
|
|
|
265
378
|
export default OperatorNode;
|
|
266
379
|
|
|
380
|
+
/**
|
|
381
|
+
* Returns the addition of two or more value.
|
|
382
|
+
*
|
|
383
|
+
* @function
|
|
384
|
+
* @param {Node} aNode - The first input.
|
|
385
|
+
* @param {Node} bNode - The second input.
|
|
386
|
+
* @param {...Node} params - Additional input parameters.
|
|
387
|
+
* @returns {OperatorNode}
|
|
388
|
+
*/
|
|
267
389
|
export const add = /*@__PURE__*/ nodeProxy( OperatorNode, '+' );
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Returns the subtraction of two or more value.
|
|
393
|
+
*
|
|
394
|
+
* @function
|
|
395
|
+
* @param {Node} aNode - The first input.
|
|
396
|
+
* @param {Node} bNode - The second input.
|
|
397
|
+
* @param {...Node} params - Additional input parameters.
|
|
398
|
+
* @returns {OperatorNode}
|
|
399
|
+
*/
|
|
268
400
|
export const sub = /*@__PURE__*/ nodeProxy( OperatorNode, '-' );
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* Returns the multiplication of two or more value.
|
|
404
|
+
*
|
|
405
|
+
* @function
|
|
406
|
+
* @param {Node} aNode - The first input.
|
|
407
|
+
* @param {Node} bNode - The second input.
|
|
408
|
+
* @param {...Node} params - Additional input parameters.
|
|
409
|
+
* @returns {OperatorNode}
|
|
410
|
+
*/
|
|
269
411
|
export const mul = /*@__PURE__*/ nodeProxy( OperatorNode, '*' );
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Returns the division of two or more value.
|
|
415
|
+
*
|
|
416
|
+
* @function
|
|
417
|
+
* @param {Node} aNode - The first input.
|
|
418
|
+
* @param {Node} bNode - The second input.
|
|
419
|
+
* @param {...Node} params - Additional input parameters.
|
|
420
|
+
* @returns {OperatorNode}
|
|
421
|
+
*/
|
|
270
422
|
export const div = /*@__PURE__*/ nodeProxy( OperatorNode, '/' );
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Computes the remainder of dividing the first node by the second, for integer values.
|
|
426
|
+
*
|
|
427
|
+
* @function
|
|
428
|
+
* @param {Node} aNode - The first input.
|
|
429
|
+
* @param {Node} bNode - The second input.
|
|
430
|
+
* @returns {OperatorNode}
|
|
431
|
+
*/
|
|
271
432
|
export const modInt = /*@__PURE__*/ nodeProxy( OperatorNode, '%' );
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Checks if two nodes are equal.
|
|
436
|
+
*
|
|
437
|
+
* @function
|
|
438
|
+
* @param {Node} aNode - The first input.
|
|
439
|
+
* @param {Node} bNode - The second input.
|
|
440
|
+
* @returns {OperatorNode}
|
|
441
|
+
*/
|
|
272
442
|
export const equal = /*@__PURE__*/ nodeProxy( OperatorNode, '==' );
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Checks if two nodes are not equal.
|
|
446
|
+
*
|
|
447
|
+
* @function
|
|
448
|
+
* @param {Node} aNode - The first input.
|
|
449
|
+
* @param {Node} bNode - The second input.
|
|
450
|
+
* @returns {OperatorNode}
|
|
451
|
+
*/
|
|
273
452
|
export const notEqual = /*@__PURE__*/ nodeProxy( OperatorNode, '!=' );
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Checks if the first node is less than the second.
|
|
456
|
+
*
|
|
457
|
+
* @function
|
|
458
|
+
* @param {Node} aNode - The first input.
|
|
459
|
+
* @param {Node} bNode - The second input.
|
|
460
|
+
* @returns {OperatorNode}
|
|
461
|
+
*/
|
|
274
462
|
export const lessThan = /*@__PURE__*/ nodeProxy( OperatorNode, '<' );
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Checks if the first node is greater than the second.
|
|
466
|
+
*
|
|
467
|
+
* @function
|
|
468
|
+
* @param {Node} aNode - The first input.
|
|
469
|
+
* @param {Node} bNode - The second input.
|
|
470
|
+
* @returns {OperatorNode}
|
|
471
|
+
*/
|
|
275
472
|
export const greaterThan = /*@__PURE__*/ nodeProxy( OperatorNode, '>' );
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Checks if the first node is less than or equal to the second.
|
|
476
|
+
*
|
|
477
|
+
* @function
|
|
478
|
+
* @param {Node} aNode - The first input.
|
|
479
|
+
* @param {Node} bNode - The second input.
|
|
480
|
+
* @returns {OperatorNode}
|
|
481
|
+
*/
|
|
276
482
|
export const lessThanEqual = /*@__PURE__*/ nodeProxy( OperatorNode, '<=' );
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* Checks if the first node is greater than or equal to the second.
|
|
486
|
+
*
|
|
487
|
+
* @function
|
|
488
|
+
* @param {Node} aNode - The first input.
|
|
489
|
+
* @param {Node} bNode - The second input.
|
|
490
|
+
* @returns {OperatorNode}
|
|
491
|
+
*/
|
|
277
492
|
export const greaterThanEqual = /*@__PURE__*/ nodeProxy( OperatorNode, '>=' );
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Performs logical AND on two nodes.
|
|
496
|
+
*
|
|
497
|
+
* @function
|
|
498
|
+
* @param {Node} aNode - The first input.
|
|
499
|
+
* @param {Node} bNode - The second input.
|
|
500
|
+
* @returns {OperatorNode}
|
|
501
|
+
*/
|
|
278
502
|
export const and = /*@__PURE__*/ nodeProxy( OperatorNode, '&&' );
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* Performs logical OR on two nodes.
|
|
506
|
+
*
|
|
507
|
+
* @function
|
|
508
|
+
* @param {Node} aNode - The first input.
|
|
509
|
+
* @param {Node} bNode - The second input.
|
|
510
|
+
* @returns {OperatorNode}
|
|
511
|
+
*/
|
|
279
512
|
export const or = /*@__PURE__*/ nodeProxy( OperatorNode, '||' );
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* Performs logical NOT on a node.
|
|
516
|
+
*
|
|
517
|
+
* @function
|
|
518
|
+
* @param {Node} aNode - The first input.
|
|
519
|
+
* @param {Node} bNode - The second input.
|
|
520
|
+
* @returns {OperatorNode}
|
|
521
|
+
*/
|
|
280
522
|
export const not = /*@__PURE__*/ nodeProxy( OperatorNode, '!' );
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* Performs logical XOR on two nodes.
|
|
526
|
+
*
|
|
527
|
+
* @function
|
|
528
|
+
* @param {Node} aNode - The first input.
|
|
529
|
+
* @param {Node} bNode - The second input.
|
|
530
|
+
* @returns {OperatorNode}
|
|
531
|
+
*/
|
|
281
532
|
export const xor = /*@__PURE__*/ nodeProxy( OperatorNode, '^^' );
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* Performs bitwise AND on two nodes.
|
|
536
|
+
*
|
|
537
|
+
* @function
|
|
538
|
+
* @param {Node} aNode - The first input.
|
|
539
|
+
* @param {Node} bNode - The second input.
|
|
540
|
+
* @returns {OperatorNode}
|
|
541
|
+
*/
|
|
282
542
|
export const bitAnd = /*@__PURE__*/ nodeProxy( OperatorNode, '&' );
|
|
543
|
+
|
|
544
|
+
/**
|
|
545
|
+
* Performs bitwise NOT on a node.
|
|
546
|
+
*
|
|
547
|
+
* @function
|
|
548
|
+
* @param {Node} aNode - The first input.
|
|
549
|
+
* @param {Node} bNode - The second input.
|
|
550
|
+
* @returns {OperatorNode}
|
|
551
|
+
*/
|
|
283
552
|
export const bitNot = /*@__PURE__*/ nodeProxy( OperatorNode, '~' );
|
|
553
|
+
|
|
554
|
+
/**
|
|
555
|
+
* Performs bitwise OR on two nodes.
|
|
556
|
+
*
|
|
557
|
+
* @function
|
|
558
|
+
* @param {Node} aNode - The first input.
|
|
559
|
+
* @param {Node} bNode - The second input.
|
|
560
|
+
* @returns {OperatorNode}
|
|
561
|
+
*/
|
|
284
562
|
export const bitOr = /*@__PURE__*/ nodeProxy( OperatorNode, '|' );
|
|
563
|
+
|
|
564
|
+
/**
|
|
565
|
+
* Performs bitwise XOR on two nodes.
|
|
566
|
+
*
|
|
567
|
+
* @function
|
|
568
|
+
* @param {Node} aNode - The first input.
|
|
569
|
+
* @param {Node} bNode - The second input.
|
|
570
|
+
* @returns {OperatorNode}
|
|
571
|
+
*/
|
|
285
572
|
export const bitXor = /*@__PURE__*/ nodeProxy( OperatorNode, '^' );
|
|
573
|
+
|
|
574
|
+
/**
|
|
575
|
+
* Shifts a node to the left.
|
|
576
|
+
*
|
|
577
|
+
* @function
|
|
578
|
+
* @param {Node} aNode - The node to shift.
|
|
579
|
+
* @param {Node} bNode - The value to shift.
|
|
580
|
+
* @returns {OperatorNode}
|
|
581
|
+
*/
|
|
286
582
|
export const shiftLeft = /*@__PURE__*/ nodeProxy( OperatorNode, '<<' );
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Shifts a node to the right.
|
|
586
|
+
*
|
|
587
|
+
* @function
|
|
588
|
+
* @param {Node} aNode - The node to shift.
|
|
589
|
+
* @param {Node} bNode - The value to shift.
|
|
590
|
+
* @returns {OperatorNode}
|
|
591
|
+
*/
|
|
287
592
|
export const shiftRight = /*@__PURE__*/ nodeProxy( OperatorNode, '>>' );
|
|
288
593
|
|
|
289
594
|
addMethodChaining( 'add', add );
|
|
@@ -308,7 +613,13 @@ addMethodChaining( 'bitXor', bitXor );
|
|
|
308
613
|
addMethodChaining( 'shiftLeft', shiftLeft );
|
|
309
614
|
addMethodChaining( 'shiftRight', shiftRight );
|
|
310
615
|
|
|
311
|
-
|
|
616
|
+
/**
|
|
617
|
+
* @function
|
|
618
|
+
* @deprecated since r168. Use {@link modInt} instead.
|
|
619
|
+
*
|
|
620
|
+
* @param {...any} params
|
|
621
|
+
* @returns {Function}
|
|
622
|
+
*/
|
|
312
623
|
export const remainder = ( ...params ) => { // @deprecated, r168
|
|
313
624
|
|
|
314
625
|
console.warn( 'TSL.OperatorNode: .remainder() has been renamed to .modInt().' );
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
import { Loop } from '../utils/LoopNode.js';
|
|
4
4
|
import { float, vec3, Fn } from '../tsl/TSLBase.js';
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
/** @module TriNoise3D **/
|
|
7
|
+
|
|
8
|
+
const tri = /*@__PURE__*/ Fn( ( [ x ] ) => {
|
|
7
9
|
|
|
8
10
|
return x.fract().sub( .5 ).abs();
|
|
9
11
|
|
|
@@ -15,7 +17,7 @@ export const tri = /*@__PURE__*/ Fn( ( [ x ] ) => {
|
|
|
15
17
|
]
|
|
16
18
|
} );
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
const tri3 = /*@__PURE__*/ Fn( ( [ p ] ) => {
|
|
19
21
|
|
|
20
22
|
return vec3( tri( p.z.add( tri( p.y.mul( 1. ) ) ) ), tri( p.z.add( tri( p.x.mul( 1. ) ) ) ), tri( p.y.add( tri( p.x.mul( 1. ) ) ) ) );
|
|
21
23
|
|
|
@@ -27,9 +29,18 @@ export const tri3 = /*@__PURE__*/ Fn( ( [ p ] ) => {
|
|
|
27
29
|
]
|
|
28
30
|
} );
|
|
29
31
|
|
|
30
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Generates a noise value from the given position, speed and time parameters.
|
|
34
|
+
*
|
|
35
|
+
* @method
|
|
36
|
+
* @param {Node<vec3>} position - The position.
|
|
37
|
+
* @param {Node<float>} speed - The speed.
|
|
38
|
+
* @param {Node<float>} time - The time.
|
|
39
|
+
* @return {Node<float>} The generated noise.
|
|
40
|
+
*/
|
|
41
|
+
export const triNoise3D = /*@__PURE__*/ Fn( ( [ position, speed, time ] ) => {
|
|
31
42
|
|
|
32
|
-
const p = vec3(
|
|
43
|
+
const p = vec3( position ).toVar();
|
|
33
44
|
const z = float( 1.4 ).toVar();
|
|
34
45
|
const rz = float( 0.0 ).toVar();
|
|
35
46
|
const bp = vec3( p ).toVar();
|
|
@@ -37,7 +48,7 @@ export const triNoise3D = /*@__PURE__*/ Fn( ( [ p_immutable, spd, time ] ) => {
|
|
|
37
48
|
Loop( { start: float( 0.0 ), end: float( 3.0 ), type: 'float', condition: '<=' }, () => {
|
|
38
49
|
|
|
39
50
|
const dg = vec3( tri3( bp.mul( 2.0 ) ) ).toVar();
|
|
40
|
-
p.addAssign( dg.add( time.mul( float( 0.1 ).mul(
|
|
51
|
+
p.addAssign( dg.add( time.mul( float( 0.1 ).mul( speed ) ) ) );
|
|
41
52
|
bp.mulAssign( 1.8 );
|
|
42
53
|
z.mulAssign( 1.5 );
|
|
43
54
|
p.mulAssign( 1.2 );
|
|
@@ -54,8 +65,8 @@ export const triNoise3D = /*@__PURE__*/ Fn( ( [ p_immutable, spd, time ] ) => {
|
|
|
54
65
|
name: 'triNoise3D',
|
|
55
66
|
type: 'float',
|
|
56
67
|
inputs: [
|
|
57
|
-
{ name: '
|
|
58
|
-
{ name: '
|
|
68
|
+
{ name: 'position', type: 'vec3' },
|
|
69
|
+
{ name: 'speed', type: 'float' },
|
|
59
70
|
{ name: 'time', type: 'float' }
|
|
60
71
|
]
|
|
61
72
|
} );
|
|
@@ -101,8 +101,18 @@ const parse = ( source ) => {
|
|
|
101
101
|
|
|
102
102
|
};
|
|
103
103
|
|
|
104
|
+
/**
|
|
105
|
+
* This class represents a GLSL node function.
|
|
106
|
+
*
|
|
107
|
+
* @augments NodeFunction
|
|
108
|
+
*/
|
|
104
109
|
class GLSLNodeFunction extends NodeFunction {
|
|
105
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Constructs a new GLSL node function.
|
|
113
|
+
*
|
|
114
|
+
* @param {String} source - The GLSL source.
|
|
115
|
+
*/
|
|
106
116
|
constructor( source ) {
|
|
107
117
|
|
|
108
118
|
const { type, inputs, name, precision, inputsCode, blockCode, headerCode } = parse( source );
|
|
@@ -115,6 +125,12 @@ class GLSLNodeFunction extends NodeFunction {
|
|
|
115
125
|
|
|
116
126
|
}
|
|
117
127
|
|
|
128
|
+
/**
|
|
129
|
+
* This method returns the GLSL code of the node function.
|
|
130
|
+
*
|
|
131
|
+
* @param {String} [name=this.name] - The function's name.
|
|
132
|
+
* @return {String} The shader code.
|
|
133
|
+
*/
|
|
118
134
|
getCode( name = this.name ) {
|
|
119
135
|
|
|
120
136
|
let code;
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import NodeParser from '../core/NodeParser.js';
|
|
2
2
|
import GLSLNodeFunction from './GLSLNodeFunction.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* A GLSL node parser.
|
|
6
|
+
*
|
|
7
|
+
* @augments NodeParser
|
|
8
|
+
*/
|
|
4
9
|
class GLSLNodeParser extends NodeParser {
|
|
5
10
|
|
|
11
|
+
/**
|
|
12
|
+
* The method parses the given GLSL code an returns a node function.
|
|
13
|
+
*
|
|
14
|
+
* @param {String} source - The GLSL code.
|
|
15
|
+
* @return {GLSLNodeFunction} A node function.
|
|
16
|
+
*/
|
|
6
17
|
parseFunction( source ) {
|
|
7
18
|
|
|
8
19
|
return new GLSLNodeFunction( source );
|