super-three 0.170.1 → 0.172.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/README.md +1 -1
- package/build/three.cjs +157 -49
- package/build/three.core.js +104 -42
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +53 -8
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +10 -5
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +21191 -1008
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +21189 -1008
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +3 -2
- package/examples/jsm/controls/ArcballControls.js +28 -19
- 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 +11 -7
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -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 +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +22 -2
- 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 -1
- 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/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
- package/examples/jsm/misc/Volume.js +20 -12
- package/examples/jsm/misc/VolumeSlice.js +2 -2
- 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 +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/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/SobelOperatorShader.js +1 -1
- 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 +2 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +9 -4
- 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/PerspectiveCamera.js +18 -2
- package/src/constants.js +1 -1
- 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/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/InstancedPointsNodeMaterial.js +72 -19
- 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 +474 -21
- package/src/materials/nodes/PointsNodeMaterial.js +22 -13
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
- package/src/nodes/Nodes.js +1 -6
- package/src/nodes/TSL.js +2 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +24 -5
- package/src/nodes/accessors/BatchNode.js +39 -3
- 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 +49 -0
- 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/InstancedPointsMaterialNode.js +13 -0
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +302 -8
- 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 +59 -3
- package/src/nodes/accessors/Object3DNode.js +102 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +53 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
- package/src/nodes/accessors/ReferenceNode.js +202 -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 +168 -4
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +36 -0
- package/src/nodes/accessors/Texture3DNode.js +89 -5
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +309 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +223 -23
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +82 -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/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 +24 -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 +337 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +945 -15
- 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 +141 -0
- package/src/nodes/core/NodeVar.js +30 -0
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +33 -2
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +78 -0
- package/src/nodes/core/StructTypeNode.js +39 -1
- package/src/nodes/core/TempNode.js +30 -4
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +52 -0
- package/src/nodes/core/VaryingNode.js +83 -2
- package/src/nodes/core/constants.js +36 -0
- 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 +298 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +87 -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 +93 -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 +157 -1
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -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 +240 -34
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +70 -3
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +614 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +233 -0
- 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 +1 -1
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/tsl/TSLBase.js +2 -2
- package/src/nodes/utils/ArrayElementNode.js +38 -2
- 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 +74 -1
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -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 +40 -0
- package/src/nodes/utils/Timer.js +19 -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 +1 -2
- package/src/objects/ClippingGroup.js +49 -0
- package/src/renderers/WebGLRenderer.js +23 -4
- package/src/renderers/common/Animation.js +63 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +467 -52
- package/src/renderers/common/Background.js +34 -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 +38 -1
- package/src/renderers/common/ClippingContext.js +107 -14
- package/src/renderers/common/Color4.js +36 -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 +98 -0
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +87 -0
- package/src/renderers/common/Lighting.js +26 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +75 -3
- 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 +33 -10
- package/src/renderers/common/RenderContext.js +169 -4
- package/src/renderers/common/RenderContexts.js +42 -2
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +31 -0
- package/src/renderers/common/RenderObject.js +328 -4
- package/src/renderers/common/RenderObjects.js +101 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1096 -31
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +121 -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 +83 -0
- package/src/renderers/common/Uniform.js +188 -2
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +139 -2
- package/src/renderers/common/extras/PMREMGenerator.js +24 -3
- package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +91 -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 +189 -0
- 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 +327 -60
- 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-fallback/WebGLBackend.js +547 -29
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +480 -49
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
- package/src/renderers/webgpu/WebGPURenderer.js +35 -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 +59 -11
- 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 +10 -8
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +7 -1
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -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/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- 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,5 +1,13 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* This module uses cache management to create temporary variables
|
|
5
|
+
* if the node is used more than once to prevent duplicate calculations.
|
|
6
|
+
*
|
|
7
|
+
* The class acts as a base class for many other nodes types.
|
|
8
|
+
*
|
|
9
|
+
* @augments Node
|
|
10
|
+
*/
|
|
3
11
|
class TempNode extends Node {
|
|
4
12
|
|
|
5
13
|
static get type() {
|
|
@@ -8,14 +16,32 @@ class TempNode extends Node {
|
|
|
8
16
|
|
|
9
17
|
}
|
|
10
18
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Constructs a temp node.
|
|
21
|
+
*
|
|
22
|
+
* @param {String?} nodeType - The node type.
|
|
23
|
+
*/
|
|
24
|
+
constructor( nodeType = null ) {
|
|
25
|
+
|
|
26
|
+
super( nodeType );
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* This flag can be used for type testing.
|
|
30
|
+
*
|
|
31
|
+
* @type {Boolean}
|
|
32
|
+
* @readonly
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
15
35
|
this.isTempNode = true;
|
|
16
36
|
|
|
17
37
|
}
|
|
18
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Whether this node is used more than once in context of other nodes.
|
|
41
|
+
*
|
|
42
|
+
* @param {NodeBuilder} builder - The node builder.
|
|
43
|
+
* @return {Boolean} A flag that indicates if there is more than one dependency to other nodes.
|
|
44
|
+
*/
|
|
19
45
|
hasDependencies( builder ) {
|
|
20
46
|
|
|
21
47
|
return builder.getDataFromNode( this ).usageCount > 1;
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
|
|
3
|
+
/** @module UniformGroupNode **/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* This node can be used to group single instances of {@link UniformNode}
|
|
7
|
+
* and manage them as a uniform buffer.
|
|
8
|
+
*
|
|
9
|
+
* In most cases, the predefined nodes `objectGroup`, `renderGroup` and `frameGroup`
|
|
10
|
+
* will be used when defining the {@link UniformNode#groupNode} property.
|
|
11
|
+
*
|
|
12
|
+
* - `objectGroup`: Uniform buffer per object.
|
|
13
|
+
* - `renderGroup`: Shared uniform buffer, updated once per render call.
|
|
14
|
+
* - `frameGroup`: Shared uniform buffer, updated once per frame.
|
|
15
|
+
*
|
|
16
|
+
* @augments Node
|
|
17
|
+
*/
|
|
3
18
|
class UniformGroupNode extends Node {
|
|
4
19
|
|
|
5
20
|
static get type() {
|
|
@@ -8,22 +23,49 @@ class UniformGroupNode extends Node {
|
|
|
8
23
|
|
|
9
24
|
}
|
|
10
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new uniform group node.
|
|
28
|
+
*
|
|
29
|
+
* @param {String} name - The name of the uniform group node.
|
|
30
|
+
* @param {Boolean} [shared=false] - Whether this uniform group node is shared or not.
|
|
31
|
+
* @param {Number} [order=1] - Influences the internal sorting.
|
|
32
|
+
*/
|
|
11
33
|
constructor( name, shared = false, order = 1 ) {
|
|
12
34
|
|
|
13
35
|
super( 'string' );
|
|
14
36
|
|
|
37
|
+
/**
|
|
38
|
+
* The name of the uniform group node.
|
|
39
|
+
*
|
|
40
|
+
* @type {String}
|
|
41
|
+
*/
|
|
15
42
|
this.name = name;
|
|
16
|
-
this.version = 0;
|
|
17
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Whether this uniform group node is shared or not.
|
|
46
|
+
*
|
|
47
|
+
* @type {Boolean}
|
|
48
|
+
* @default false
|
|
49
|
+
*/
|
|
18
50
|
this.shared = shared;
|
|
19
|
-
this.order = order;
|
|
20
|
-
this.isUniformGroup = true;
|
|
21
51
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Influences the internal sorting.
|
|
54
|
+
* TODO: Add details when this property should be changed.
|
|
55
|
+
*
|
|
56
|
+
* @type {Number}
|
|
57
|
+
* @default 1
|
|
58
|
+
*/
|
|
59
|
+
this.order = order;
|
|
25
60
|
|
|
26
|
-
|
|
61
|
+
/**
|
|
62
|
+
* This flag can be used for type testing.
|
|
63
|
+
*
|
|
64
|
+
* @type {Boolean}
|
|
65
|
+
* @readonly
|
|
66
|
+
* @default true
|
|
67
|
+
*/
|
|
68
|
+
this.isUniformGroup = true;
|
|
27
69
|
|
|
28
70
|
}
|
|
29
71
|
|
|
@@ -51,9 +93,42 @@ class UniformGroupNode extends Node {
|
|
|
51
93
|
|
|
52
94
|
export default UniformGroupNode;
|
|
53
95
|
|
|
96
|
+
/**
|
|
97
|
+
* TSL function for creating a uniform group node with the given name.
|
|
98
|
+
*
|
|
99
|
+
* @function
|
|
100
|
+
* @param {String} name - The name of the uniform group node.
|
|
101
|
+
* @returns {UniformGroupNode}
|
|
102
|
+
*/
|
|
54
103
|
export const uniformGroup = ( name ) => new UniformGroupNode( name );
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* TSL function for creating a shared uniform group node with the given name and order.
|
|
107
|
+
*
|
|
108
|
+
* @function
|
|
109
|
+
* @param {String} name - The name of the uniform group node.
|
|
110
|
+
* @param {Number} [order=0] - Influences the internal sorting.
|
|
111
|
+
* @returns {UniformGroupNode}
|
|
112
|
+
*/
|
|
55
113
|
export const sharedUniformGroup = ( name, order = 0 ) => new UniformGroupNode( name, true, order );
|
|
56
114
|
|
|
115
|
+
/**
|
|
116
|
+
* TSL object that represents a shared uniform group node which is updated once per frame.
|
|
117
|
+
*
|
|
118
|
+
* @type {UniformGroupNode}
|
|
119
|
+
*/
|
|
57
120
|
export const frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame' );
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* TSL object that represents a shared uniform group node which is updated once per render.
|
|
124
|
+
*
|
|
125
|
+
* @type {UniformGroupNode}
|
|
126
|
+
*/
|
|
58
127
|
export const renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render' );
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* TSL object that represents a uniform group node which is updated once per object.
|
|
131
|
+
*
|
|
132
|
+
* @type {UniformGroupNode}
|
|
133
|
+
*/
|
|
59
134
|
export const objectGroup = /*@__PURE__*/ uniformGroup( 'object' );
|
|
@@ -2,6 +2,13 @@ import InputNode from './InputNode.js';
|
|
|
2
2
|
import { objectGroup } from './UniformGroupNode.js';
|
|
3
3
|
import { nodeObject, getConstNodeType } from '../tsl/TSLCore.js';
|
|
4
4
|
|
|
5
|
+
/** @module UniformNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Class for representing a uniform.
|
|
9
|
+
*
|
|
10
|
+
* @augments InputNode
|
|
11
|
+
*/
|
|
5
12
|
class UniformNode extends InputNode {
|
|
6
13
|
|
|
7
14
|
static get type() {
|
|
@@ -10,17 +17,50 @@ class UniformNode extends InputNode {
|
|
|
10
17
|
|
|
11
18
|
}
|
|
12
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new uniform node.
|
|
22
|
+
*
|
|
23
|
+
* @param {Any} value - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color, texture).
|
|
24
|
+
* @param {String?} nodeType - The node type. If no explicit type is defined, the node tries to derive the type from its value.
|
|
25
|
+
*/
|
|
13
26
|
constructor( value, nodeType = null ) {
|
|
14
27
|
|
|
15
28
|
super( value, nodeType );
|
|
16
29
|
|
|
30
|
+
/**
|
|
31
|
+
* This flag can be used for type testing.
|
|
32
|
+
*
|
|
33
|
+
* @type {Boolean}
|
|
34
|
+
* @readonly
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
17
37
|
this.isUniformNode = true;
|
|
18
38
|
|
|
39
|
+
/**
|
|
40
|
+
* The name or label of the uniform.
|
|
41
|
+
*
|
|
42
|
+
* @type {String}
|
|
43
|
+
* @default ''
|
|
44
|
+
*/
|
|
19
45
|
this.name = '';
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The uniform group of this uniform. By default, uniforms are
|
|
49
|
+
* managed per object but they might belong to a shared group
|
|
50
|
+
* which is updated per frame or render call.
|
|
51
|
+
*
|
|
52
|
+
* @type {UniformGroupNode}
|
|
53
|
+
*/
|
|
20
54
|
this.groupNode = objectGroup;
|
|
21
55
|
|
|
22
56
|
}
|
|
23
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Sets the {@link UniformNode#name} property.
|
|
60
|
+
*
|
|
61
|
+
* @param {String} name - The name of the uniform.
|
|
62
|
+
* @return {UniformNode} A reference to this node.
|
|
63
|
+
*/
|
|
24
64
|
label( name ) {
|
|
25
65
|
|
|
26
66
|
this.name = name;
|
|
@@ -29,6 +69,12 @@ class UniformNode extends InputNode {
|
|
|
29
69
|
|
|
30
70
|
}
|
|
31
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Sets the {@link UniformNode#groupNode} property.
|
|
74
|
+
*
|
|
75
|
+
* @param {UniformGroupNode} group - The uniform group.
|
|
76
|
+
* @return {UniformNode} A reference to this node.
|
|
77
|
+
*/
|
|
32
78
|
setGroup( group ) {
|
|
33
79
|
|
|
34
80
|
this.groupNode = group;
|
|
@@ -37,12 +83,24 @@ class UniformNode extends InputNode {
|
|
|
37
83
|
|
|
38
84
|
}
|
|
39
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Returns the {@link UniformNode#groupNode}.
|
|
88
|
+
*
|
|
89
|
+
* @return {UniformGroupNode} The uniform group.
|
|
90
|
+
*/
|
|
40
91
|
getGroup() {
|
|
41
92
|
|
|
42
93
|
return this.groupNode;
|
|
43
94
|
|
|
44
95
|
}
|
|
45
96
|
|
|
97
|
+
/**
|
|
98
|
+
* By default, this method returns the result of {@link Node#getHash} but derived
|
|
99
|
+
* classes might overwrite this method with a different implementation.
|
|
100
|
+
*
|
|
101
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
102
|
+
* @return {String} The uniform hash.
|
|
103
|
+
*/
|
|
46
104
|
getUniformHash( builder ) {
|
|
47
105
|
|
|
48
106
|
return this.getHash( builder );
|
|
@@ -100,6 +158,14 @@ class UniformNode extends InputNode {
|
|
|
100
158
|
|
|
101
159
|
export default UniformNode;
|
|
102
160
|
|
|
161
|
+
/**
|
|
162
|
+
* TSL function for creating a uniform node.
|
|
163
|
+
*
|
|
164
|
+
* @function
|
|
165
|
+
* @param {Any} arg1 - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color, texture).
|
|
166
|
+
* @param {String?} arg2 - The node type. If no explicit type is defined, the node tries to derive the type from its value.
|
|
167
|
+
* @returns {UniformNode}
|
|
168
|
+
*/
|
|
103
169
|
export const uniform = ( arg1, arg2 ) => {
|
|
104
170
|
|
|
105
171
|
const nodeType = getConstNodeType( arg2 || arg1 );
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module VarNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Class for representing shader variables as nodes. Variables are created from
|
|
8
|
+
* existing nodes like the following:
|
|
9
|
+
*
|
|
10
|
+
* ```js
|
|
11
|
+
* const depth = sampleDepth( uvNode ).toVar( 'depth' );
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @augments Node
|
|
15
|
+
*/
|
|
4
16
|
class VarNode extends Node {
|
|
5
17
|
|
|
6
18
|
static get type() {
|
|
@@ -9,15 +21,47 @@ class VarNode extends Node {
|
|
|
9
21
|
|
|
10
22
|
}
|
|
11
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new variable node.
|
|
26
|
+
*
|
|
27
|
+
* @param {Node} node - The node for which a variable should be created.
|
|
28
|
+
* @param {String?} name - The name of the variable in the shader.
|
|
29
|
+
*/
|
|
12
30
|
constructor( node, name = null ) {
|
|
13
31
|
|
|
14
32
|
super();
|
|
15
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The node for which a variable should be created.
|
|
36
|
+
*
|
|
37
|
+
* @type {Node}
|
|
38
|
+
*/
|
|
16
39
|
this.node = node;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The name of the variable in the shader. If no name is defined,
|
|
43
|
+
* the node system auto-generates one.
|
|
44
|
+
*
|
|
45
|
+
* @type {String?}
|
|
46
|
+
* @default null
|
|
47
|
+
*/
|
|
17
48
|
this.name = name;
|
|
18
49
|
|
|
50
|
+
/**
|
|
51
|
+
* `VarNode` sets this property to `true` by default.
|
|
52
|
+
*
|
|
53
|
+
* @type {Boolean}
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
19
56
|
this.global = true;
|
|
20
57
|
|
|
58
|
+
/**
|
|
59
|
+
* This flag can be used for type testing.
|
|
60
|
+
*
|
|
61
|
+
* @type {Boolean}
|
|
62
|
+
* @readonly
|
|
63
|
+
* @default true
|
|
64
|
+
*/
|
|
21
65
|
this.isVarNode = true;
|
|
22
66
|
|
|
23
67
|
}
|
|
@@ -54,6 +98,14 @@ class VarNode extends Node {
|
|
|
54
98
|
|
|
55
99
|
export default VarNode;
|
|
56
100
|
|
|
101
|
+
/**
|
|
102
|
+
* TSL function for creating a var node.
|
|
103
|
+
*
|
|
104
|
+
* @function
|
|
105
|
+
* @param {Node} node - The node for which a variable should be created.
|
|
106
|
+
* @param {String?} name - The name of the variable in the shader.
|
|
107
|
+
* @returns {VarNode}
|
|
108
|
+
*/
|
|
57
109
|
const createVar = /*@__PURE__*/ nodeProxy( VarNode );
|
|
58
110
|
|
|
59
111
|
addMethodChaining( 'toVar', ( ...params ) => createVar( ...params ).append() );
|
|
@@ -2,6 +2,18 @@ import Node from './Node.js';
|
|
|
2
2
|
import { NodeShaderStage } from './constants.js';
|
|
3
3
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
4
4
|
|
|
5
|
+
/** @module VaryingNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Class for representing shader varyings as nodes. Varyings are create from
|
|
9
|
+
* existing nodes like the following:
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* const positionLocal = positionGeometry.varying( 'vPositionLocal' );
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @augments Node
|
|
16
|
+
*/
|
|
5
17
|
class VaryingNode extends Node {
|
|
6
18
|
|
|
7
19
|
static get type() {
|
|
@@ -10,18 +22,50 @@ class VaryingNode extends Node {
|
|
|
10
22
|
|
|
11
23
|
}
|
|
12
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new varying node.
|
|
27
|
+
*
|
|
28
|
+
* @param {Node} node - The node for which a varying should be created.
|
|
29
|
+
* @param {String?} name - The name of the varying in the shader.
|
|
30
|
+
*/
|
|
13
31
|
constructor( node, name = null ) {
|
|
14
32
|
|
|
15
33
|
super();
|
|
16
34
|
|
|
35
|
+
/**
|
|
36
|
+
* The node for which a varying should be created.
|
|
37
|
+
*
|
|
38
|
+
* @type {Node}
|
|
39
|
+
*/
|
|
17
40
|
this.node = node;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The name of the varying in the shader. If no name is defined,
|
|
44
|
+
* the node system auto-generates one.
|
|
45
|
+
*
|
|
46
|
+
* @type {String?}
|
|
47
|
+
* @default null
|
|
48
|
+
*/
|
|
18
49
|
this.name = name;
|
|
19
50
|
|
|
51
|
+
/**
|
|
52
|
+
* This flag can be used for type testing.
|
|
53
|
+
*
|
|
54
|
+
* @type {Boolean}
|
|
55
|
+
* @readonly
|
|
56
|
+
* @default true
|
|
57
|
+
*/
|
|
20
58
|
this.isVaryingNode = true;
|
|
21
59
|
|
|
22
60
|
}
|
|
23
61
|
|
|
24
|
-
|
|
62
|
+
/**
|
|
63
|
+
* The method is overwritten so it always returns `true`.
|
|
64
|
+
*
|
|
65
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
66
|
+
* @return {Boolean} Whether this node is global or not.
|
|
67
|
+
*/
|
|
68
|
+
isGlobal( /*builder*/ ) {
|
|
25
69
|
|
|
26
70
|
return true;
|
|
27
71
|
|
|
@@ -41,6 +85,12 @@ class VaryingNode extends Node {
|
|
|
41
85
|
|
|
42
86
|
}
|
|
43
87
|
|
|
88
|
+
/**
|
|
89
|
+
* This method performs the setup of a varying node with the current node builder.
|
|
90
|
+
*
|
|
91
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
92
|
+
* @return {NodeVarying} The node varying from the node builder.
|
|
93
|
+
*/
|
|
44
94
|
setupVarying( builder ) {
|
|
45
95
|
|
|
46
96
|
const properties = builder.getNodeProperties( this );
|
|
@@ -83,7 +133,9 @@ class VaryingNode extends Node {
|
|
|
83
133
|
const properties = builder.getNodeProperties( this );
|
|
84
134
|
const varying = this.setupVarying( builder );
|
|
85
135
|
|
|
86
|
-
|
|
136
|
+
const needsReassign = builder.shaderStage === 'fragment' && properties.reassignPosition === true && builder.context.needsPositionReassign;
|
|
137
|
+
|
|
138
|
+
if ( properties.propertyName === undefined || needsReassign ) {
|
|
87
139
|
|
|
88
140
|
const type = this.getNodeType( builder );
|
|
89
141
|
const propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );
|
|
@@ -93,6 +145,17 @@ class VaryingNode extends Node {
|
|
|
93
145
|
|
|
94
146
|
properties.propertyName = propertyName;
|
|
95
147
|
|
|
148
|
+
if ( needsReassign ) {
|
|
149
|
+
|
|
150
|
+
// once reassign varying in fragment stage
|
|
151
|
+
properties.reassignPosition = false;
|
|
152
|
+
|
|
153
|
+
} else if ( properties.reassignPosition === undefined && builder.context.isPositionNodeInput ) {
|
|
154
|
+
|
|
155
|
+
properties.reassignPosition = true;
|
|
156
|
+
|
|
157
|
+
}
|
|
158
|
+
|
|
96
159
|
}
|
|
97
160
|
|
|
98
161
|
return builder.getPropertyName( varying );
|
|
@@ -103,6 +166,24 @@ class VaryingNode extends Node {
|
|
|
103
166
|
|
|
104
167
|
export default VaryingNode;
|
|
105
168
|
|
|
169
|
+
/**
|
|
170
|
+
* TSL function for creating a varying node.
|
|
171
|
+
*
|
|
172
|
+
* @function
|
|
173
|
+
* @param {Node} node - The node for which a varying should be created.
|
|
174
|
+
* @param {String?} name - The name of the varying in the shader.
|
|
175
|
+
* @returns {VaryingNode}
|
|
176
|
+
*/
|
|
106
177
|
export const varying = /*@__PURE__*/ nodeProxy( VaryingNode );
|
|
107
178
|
|
|
179
|
+
/**
|
|
180
|
+
* Computes a node in the vertex stage.
|
|
181
|
+
*
|
|
182
|
+
* @function
|
|
183
|
+
* @param {Node} node - The node which should be executed in the vertex stage.
|
|
184
|
+
* @returns {VaryingNode}
|
|
185
|
+
*/
|
|
186
|
+
export const vertexStage = ( node ) => varying( node );
|
|
187
|
+
|
|
108
188
|
addMethodChaining( 'varying', varying );
|
|
189
|
+
addMethodChaining( 'vertexStage', vertexStage );
|
|
@@ -1,8 +1,24 @@
|
|
|
1
|
+
/** @module NodeConstants **/
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Possible shader stages.
|
|
5
|
+
*
|
|
6
|
+
* @property {string} VERTEX The vertex shader stage.
|
|
7
|
+
* @property {string} FRAGMENT The fragment shader stage.
|
|
8
|
+
*/
|
|
1
9
|
export const NodeShaderStage = {
|
|
2
10
|
VERTEX: 'vertex',
|
|
3
11
|
FRAGMENT: 'fragment'
|
|
4
12
|
};
|
|
5
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Update types of a node.
|
|
16
|
+
*
|
|
17
|
+
* @property {string} NONE The update method is not executed.
|
|
18
|
+
* @property {string} FRAME The update method is executed per frame.
|
|
19
|
+
* @property {string} RENDER The update method is executed per render. A frame might be produced by multiple render calls so this value allows more detailed updates than FRAME.
|
|
20
|
+
* @property {string} OBJECT The update method is executed per {@link Object3D} that uses the node for rendering.
|
|
21
|
+
*/
|
|
6
22
|
export const NodeUpdateType = {
|
|
7
23
|
NONE: 'none',
|
|
8
24
|
FRAME: 'frame',
|
|
@@ -10,6 +26,19 @@ export const NodeUpdateType = {
|
|
|
10
26
|
OBJECT: 'object'
|
|
11
27
|
};
|
|
12
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Data types of a node.
|
|
31
|
+
*
|
|
32
|
+
* @property {string} BOOLEAN Boolean type.
|
|
33
|
+
* @property {string} INTEGER Integer type.
|
|
34
|
+
* @property {string} FLOAT Float type.
|
|
35
|
+
* @property {string} VECTOR2 Two-dimensional vector type.
|
|
36
|
+
* @property {string} VECTOR3 Three-dimensional vector type.
|
|
37
|
+
* @property {string} VECTOR4 Four-dimensional vector type.
|
|
38
|
+
* @property {string} MATRIX2 2x2 matrix type.
|
|
39
|
+
* @property {string} MATRIX3 3x3 matrix type.
|
|
40
|
+
* @property {string} MATRIX4 4x4 matrix type.
|
|
41
|
+
*/
|
|
13
42
|
export const NodeType = {
|
|
14
43
|
BOOLEAN: 'bool',
|
|
15
44
|
INTEGER: 'int',
|
|
@@ -22,6 +51,13 @@ export const NodeType = {
|
|
|
22
51
|
MATRIX4: 'mat4'
|
|
23
52
|
};
|
|
24
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Access types of a node. These are relevant for compute and storage usage.
|
|
56
|
+
*
|
|
57
|
+
* @property {string} READ_ONLY Read-only access
|
|
58
|
+
* @property {string} WRITE_ONLY Write-only access.
|
|
59
|
+
* @property {string} READ_WRITE Read and write access.
|
|
60
|
+
*/
|
|
25
61
|
export const NodeAccess = {
|
|
26
62
|
READ_ONLY: 'readOnly',
|
|
27
63
|
WRITE_ONLY: 'writeOnly',
|
|
@@ -5,6 +5,8 @@ import { positionView } from '../accessors/Position.js';
|
|
|
5
5
|
import { faceDirection } from './FrontFacingNode.js';
|
|
6
6
|
import { Fn, nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
|
|
7
7
|
|
|
8
|
+
/** @module BumpMapNode **/
|
|
9
|
+
|
|
8
10
|
// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen
|
|
9
11
|
// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
|
|
10
12
|
|
|
@@ -44,6 +46,15 @@ const perturbNormalArb = Fn( ( inputs ) => {
|
|
|
44
46
|
|
|
45
47
|
} );
|
|
46
48
|
|
|
49
|
+
/**
|
|
50
|
+
* This class can be used for applying bump maps to materials.
|
|
51
|
+
*
|
|
52
|
+
* ```js
|
|
53
|
+
* material.normalNode = bumpMap( texture( bumpTex ) );
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* @augments TempNode
|
|
57
|
+
*/
|
|
47
58
|
class BumpMapNode extends TempNode {
|
|
48
59
|
|
|
49
60
|
static get type() {
|
|
@@ -52,11 +63,29 @@ class BumpMapNode extends TempNode {
|
|
|
52
63
|
|
|
53
64
|
}
|
|
54
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Constructs a new bump map node.
|
|
68
|
+
*
|
|
69
|
+
* @param {Node} textureNode - Represents the bump map data.
|
|
70
|
+
* @param {Node?} [scaleNode=null] - Controls the intensity of the bump effect.
|
|
71
|
+
*/
|
|
55
72
|
constructor( textureNode, scaleNode = null ) {
|
|
56
73
|
|
|
57
74
|
super( 'vec3' );
|
|
58
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Represents the bump map data.
|
|
78
|
+
*
|
|
79
|
+
* @type {Node}
|
|
80
|
+
*/
|
|
59
81
|
this.textureNode = textureNode;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Controls the intensity of the bump effect.
|
|
85
|
+
*
|
|
86
|
+
* @type {Node?}
|
|
87
|
+
* @default null
|
|
88
|
+
*/
|
|
60
89
|
this.scaleNode = scaleNode;
|
|
61
90
|
|
|
62
91
|
}
|
|
@@ -78,4 +107,12 @@ class BumpMapNode extends TempNode {
|
|
|
78
107
|
|
|
79
108
|
export default BumpMapNode;
|
|
80
109
|
|
|
110
|
+
/**
|
|
111
|
+
* TSL function for creating a bump map node.
|
|
112
|
+
*
|
|
113
|
+
* @function
|
|
114
|
+
* @param {Node} textureNode - Represents the bump map data.
|
|
115
|
+
* @param {Node?} [scaleNode=null] - Controls the intensity of the bump effect.
|
|
116
|
+
* @returns {BumpMapNode}
|
|
117
|
+
*/
|
|
81
118
|
export const bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode );
|