super-three 0.171.0 → 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,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,37 @@ 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
|
|
|
35
68
|
}
|
|
36
69
|
|
|
70
|
+
/**
|
|
71
|
+
* This method is overwritten since the node type is inferred from the operator
|
|
72
|
+
* and the input node types.
|
|
73
|
+
*
|
|
74
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
75
|
+
* @param {String} output - The current output string.
|
|
76
|
+
* @return {String} The node type.
|
|
77
|
+
*/
|
|
37
78
|
getNodeType( builder, output ) {
|
|
38
79
|
|
|
39
80
|
const op = this.op;
|
|
@@ -264,26 +305,218 @@ class OperatorNode extends TempNode {
|
|
|
264
305
|
|
|
265
306
|
export default OperatorNode;
|
|
266
307
|
|
|
308
|
+
/**
|
|
309
|
+
* Returns the addition of two or more value.
|
|
310
|
+
*
|
|
311
|
+
* @function
|
|
312
|
+
* @param {Node} aNode - The first input.
|
|
313
|
+
* @param {Node} bNode - The second input.
|
|
314
|
+
* @param {...Node} params - Additional input parameters.
|
|
315
|
+
* @returns {OperatorNode}
|
|
316
|
+
*/
|
|
267
317
|
export const add = /*@__PURE__*/ nodeProxy( OperatorNode, '+' );
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Returns the subtraction of two or more value.
|
|
321
|
+
*
|
|
322
|
+
* @function
|
|
323
|
+
* @param {Node} aNode - The first input.
|
|
324
|
+
* @param {Node} bNode - The second input.
|
|
325
|
+
* @param {...Node} params - Additional input parameters.
|
|
326
|
+
* @returns {OperatorNode}
|
|
327
|
+
*/
|
|
268
328
|
export const sub = /*@__PURE__*/ nodeProxy( OperatorNode, '-' );
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Returns the multiplication of two or more value.
|
|
332
|
+
*
|
|
333
|
+
* @function
|
|
334
|
+
* @param {Node} aNode - The first input.
|
|
335
|
+
* @param {Node} bNode - The second input.
|
|
336
|
+
* @param {...Node} params - Additional input parameters.
|
|
337
|
+
* @returns {OperatorNode}
|
|
338
|
+
*/
|
|
269
339
|
export const mul = /*@__PURE__*/ nodeProxy( OperatorNode, '*' );
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Returns the division of two or more value.
|
|
343
|
+
*
|
|
344
|
+
* @function
|
|
345
|
+
* @param {Node} aNode - The first input.
|
|
346
|
+
* @param {Node} bNode - The second input.
|
|
347
|
+
* @param {...Node} params - Additional input parameters.
|
|
348
|
+
* @returns {OperatorNode}
|
|
349
|
+
*/
|
|
270
350
|
export const div = /*@__PURE__*/ nodeProxy( OperatorNode, '/' );
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Computes the remainder of dividing the first node by the second, for integer values.
|
|
354
|
+
*
|
|
355
|
+
* @function
|
|
356
|
+
* @param {Node} aNode - The first input.
|
|
357
|
+
* @param {Node} bNode - The second input.
|
|
358
|
+
* @returns {OperatorNode}
|
|
359
|
+
*/
|
|
271
360
|
export const modInt = /*@__PURE__*/ nodeProxy( OperatorNode, '%' );
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Checks if two nodes are equal.
|
|
364
|
+
*
|
|
365
|
+
* @function
|
|
366
|
+
* @param {Node} aNode - The first input.
|
|
367
|
+
* @param {Node} bNode - The second input.
|
|
368
|
+
* @returns {OperatorNode}
|
|
369
|
+
*/
|
|
272
370
|
export const equal = /*@__PURE__*/ nodeProxy( OperatorNode, '==' );
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Checks if two nodes are not equal.
|
|
374
|
+
*
|
|
375
|
+
* @function
|
|
376
|
+
* @param {Node} aNode - The first input.
|
|
377
|
+
* @param {Node} bNode - The second input.
|
|
378
|
+
* @returns {OperatorNode}
|
|
379
|
+
*/
|
|
273
380
|
export const notEqual = /*@__PURE__*/ nodeProxy( OperatorNode, '!=' );
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Checks if the first node is less than the second.
|
|
384
|
+
*
|
|
385
|
+
* @function
|
|
386
|
+
* @param {Node} aNode - The first input.
|
|
387
|
+
* @param {Node} bNode - The second input.
|
|
388
|
+
* @returns {OperatorNode}
|
|
389
|
+
*/
|
|
274
390
|
export const lessThan = /*@__PURE__*/ nodeProxy( OperatorNode, '<' );
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Checks if the first node is greater than the second.
|
|
394
|
+
*
|
|
395
|
+
* @function
|
|
396
|
+
* @param {Node} aNode - The first input.
|
|
397
|
+
* @param {Node} bNode - The second input.
|
|
398
|
+
* @returns {OperatorNode}
|
|
399
|
+
*/
|
|
275
400
|
export const greaterThan = /*@__PURE__*/ nodeProxy( OperatorNode, '>' );
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* Checks if the first node is less than or equal to the second.
|
|
404
|
+
*
|
|
405
|
+
* @function
|
|
406
|
+
* @param {Node} aNode - The first input.
|
|
407
|
+
* @param {Node} bNode - The second input.
|
|
408
|
+
* @returns {OperatorNode}
|
|
409
|
+
*/
|
|
276
410
|
export const lessThanEqual = /*@__PURE__*/ nodeProxy( OperatorNode, '<=' );
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* Checks if the first node is greater than or equal to the second.
|
|
414
|
+
*
|
|
415
|
+
* @function
|
|
416
|
+
* @param {Node} aNode - The first input.
|
|
417
|
+
* @param {Node} bNode - The second input.
|
|
418
|
+
* @returns {OperatorNode}
|
|
419
|
+
*/
|
|
277
420
|
export const greaterThanEqual = /*@__PURE__*/ nodeProxy( OperatorNode, '>=' );
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* Performs logical AND on two nodes.
|
|
424
|
+
*
|
|
425
|
+
* @function
|
|
426
|
+
* @param {Node} aNode - The first input.
|
|
427
|
+
* @param {Node} bNode - The second input.
|
|
428
|
+
* @returns {OperatorNode}
|
|
429
|
+
*/
|
|
278
430
|
export const and = /*@__PURE__*/ nodeProxy( OperatorNode, '&&' );
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Performs logical OR on two nodes.
|
|
434
|
+
*
|
|
435
|
+
* @function
|
|
436
|
+
* @param {Node} aNode - The first input.
|
|
437
|
+
* @param {Node} bNode - The second input.
|
|
438
|
+
* @returns {OperatorNode}
|
|
439
|
+
*/
|
|
279
440
|
export const or = /*@__PURE__*/ nodeProxy( OperatorNode, '||' );
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Performs logical NOT on a node.
|
|
444
|
+
*
|
|
445
|
+
* @function
|
|
446
|
+
* @param {Node} aNode - The first input.
|
|
447
|
+
* @param {Node} bNode - The second input.
|
|
448
|
+
* @returns {OperatorNode}
|
|
449
|
+
*/
|
|
280
450
|
export const not = /*@__PURE__*/ nodeProxy( OperatorNode, '!' );
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* Performs logical XOR on two nodes.
|
|
454
|
+
*
|
|
455
|
+
* @function
|
|
456
|
+
* @param {Node} aNode - The first input.
|
|
457
|
+
* @param {Node} bNode - The second input.
|
|
458
|
+
* @returns {OperatorNode}
|
|
459
|
+
*/
|
|
281
460
|
export const xor = /*@__PURE__*/ nodeProxy( OperatorNode, '^^' );
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Performs bitwise AND on two nodes.
|
|
464
|
+
*
|
|
465
|
+
* @function
|
|
466
|
+
* @param {Node} aNode - The first input.
|
|
467
|
+
* @param {Node} bNode - The second input.
|
|
468
|
+
* @returns {OperatorNode}
|
|
469
|
+
*/
|
|
282
470
|
export const bitAnd = /*@__PURE__*/ nodeProxy( OperatorNode, '&' );
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Performs bitwise NOT on a node.
|
|
474
|
+
*
|
|
475
|
+
* @function
|
|
476
|
+
* @param {Node} aNode - The first input.
|
|
477
|
+
* @param {Node} bNode - The second input.
|
|
478
|
+
* @returns {OperatorNode}
|
|
479
|
+
*/
|
|
283
480
|
export const bitNot = /*@__PURE__*/ nodeProxy( OperatorNode, '~' );
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Performs bitwise OR on two nodes.
|
|
484
|
+
*
|
|
485
|
+
* @function
|
|
486
|
+
* @param {Node} aNode - The first input.
|
|
487
|
+
* @param {Node} bNode - The second input.
|
|
488
|
+
* @returns {OperatorNode}
|
|
489
|
+
*/
|
|
284
490
|
export const bitOr = /*@__PURE__*/ nodeProxy( OperatorNode, '|' );
|
|
491
|
+
|
|
492
|
+
/**
|
|
493
|
+
* Performs bitwise XOR on two nodes.
|
|
494
|
+
*
|
|
495
|
+
* @function
|
|
496
|
+
* @param {Node} aNode - The first input.
|
|
497
|
+
* @param {Node} bNode - The second input.
|
|
498
|
+
* @returns {OperatorNode}
|
|
499
|
+
*/
|
|
285
500
|
export const bitXor = /*@__PURE__*/ nodeProxy( OperatorNode, '^' );
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Shifts a node to the left.
|
|
504
|
+
*
|
|
505
|
+
* @function
|
|
506
|
+
* @param {Node} aNode - The node to shift.
|
|
507
|
+
* @param {Node} bNode - The value to shift.
|
|
508
|
+
* @returns {OperatorNode}
|
|
509
|
+
*/
|
|
286
510
|
export const shiftLeft = /*@__PURE__*/ nodeProxy( OperatorNode, '<<' );
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* Shifts a node to the right.
|
|
514
|
+
*
|
|
515
|
+
* @function
|
|
516
|
+
* @param {Node} aNode - The node to shift.
|
|
517
|
+
* @param {Node} bNode - The value to shift.
|
|
518
|
+
* @returns {OperatorNode}
|
|
519
|
+
*/
|
|
287
520
|
export const shiftRight = /*@__PURE__*/ nodeProxy( OperatorNode, '>>' );
|
|
288
521
|
|
|
289
522
|
addMethodChaining( 'add', add );
|
|
@@ -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 );
|
|
@@ -8,10 +8,19 @@ import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
|
8
8
|
import { WebGLCoordinateSystem } from '../../constants.js';
|
|
9
9
|
import { Texture } from '../../textures/Texture.js';
|
|
10
10
|
|
|
11
|
+
/** @module PMREMNode **/
|
|
12
|
+
|
|
11
13
|
let _generator = null;
|
|
12
14
|
|
|
13
15
|
const _cache = new WeakMap();
|
|
14
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Generates the cubeUV size based on the given image height.
|
|
19
|
+
*
|
|
20
|
+
* @private
|
|
21
|
+
* @param {Number} imageHeight - The image height.
|
|
22
|
+
* @return {{texelWidth: Number,texelHeight: Number, maxMip: Number}} The result object.
|
|
23
|
+
*/
|
|
15
24
|
function _generateCubeUVSize( imageHeight ) {
|
|
16
25
|
|
|
17
26
|
const maxMip = Math.log2( imageHeight ) - 2;
|
|
@@ -24,6 +33,13 @@ function _generateCubeUVSize( imageHeight ) {
|
|
|
24
33
|
|
|
25
34
|
}
|
|
26
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Generates a PMREM from the given texture .
|
|
38
|
+
*
|
|
39
|
+
* @private
|
|
40
|
+
* @param {Texture} texture - The texture to create the PMREM for.
|
|
41
|
+
* @return {Texture} The PMREM.
|
|
42
|
+
*/
|
|
27
43
|
function _getPMREMFromTexture( texture ) {
|
|
28
44
|
|
|
29
45
|
let cacheTexture = _cache.get( texture );
|
|
@@ -71,6 +87,17 @@ function _getPMREMFromTexture( texture ) {
|
|
|
71
87
|
|
|
72
88
|
}
|
|
73
89
|
|
|
90
|
+
/**
|
|
91
|
+
* This node represents a PMREM which is a special type of preprocessed
|
|
92
|
+
* environment map intended for PBR materials.
|
|
93
|
+
*
|
|
94
|
+
* ```js
|
|
95
|
+
* const material = new MeshStandardNodeMaterial();
|
|
96
|
+
* material.envNode = pmremTexture( envMap );
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* @augments TempNode
|
|
100
|
+
*/
|
|
74
101
|
class PMREMNode extends TempNode {
|
|
75
102
|
|
|
76
103
|
static get type() {
|
|
@@ -79,27 +106,98 @@ class PMREMNode extends TempNode {
|
|
|
79
106
|
|
|
80
107
|
}
|
|
81
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Constructs a new function overloading node.
|
|
111
|
+
*
|
|
112
|
+
* @param {Texture} value - The input texture.
|
|
113
|
+
* @param {Node<vec2>} [uvNode=null] - The uv node.
|
|
114
|
+
* @param {Node<float>} [levelNode=null] - The level node.
|
|
115
|
+
*/
|
|
82
116
|
constructor( value, uvNode = null, levelNode = null ) {
|
|
83
117
|
|
|
84
118
|
super( 'vec3' );
|
|
85
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Reference to the input texture.
|
|
122
|
+
*
|
|
123
|
+
* @private
|
|
124
|
+
* @type {Texture}
|
|
125
|
+
*/
|
|
86
126
|
this._value = value;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Reference to the generated PMREM.
|
|
130
|
+
*
|
|
131
|
+
* @private
|
|
132
|
+
* @type {Texture | null}
|
|
133
|
+
* @default null
|
|
134
|
+
*/
|
|
87
135
|
this._pmrem = null;
|
|
88
136
|
|
|
137
|
+
/**
|
|
138
|
+
* The uv node.
|
|
139
|
+
*
|
|
140
|
+
* @type {Node<vec2>}
|
|
141
|
+
*/
|
|
89
142
|
this.uvNode = uvNode;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* The level node.
|
|
146
|
+
*
|
|
147
|
+
* @type {Node<float>}
|
|
148
|
+
*/
|
|
90
149
|
this.levelNode = levelNode;
|
|
91
150
|
|
|
151
|
+
/**
|
|
152
|
+
* Reference to a PMREM generator.
|
|
153
|
+
*
|
|
154
|
+
* @private
|
|
155
|
+
* @type {PMREMGenerator}
|
|
156
|
+
* @default null
|
|
157
|
+
*/
|
|
92
158
|
this._generator = null;
|
|
93
159
|
|
|
94
160
|
const defaultTexture = new Texture();
|
|
95
161
|
defaultTexture.isRenderTargetTexture = true;
|
|
96
162
|
|
|
163
|
+
/**
|
|
164
|
+
* The texture node holding the generated PMREM.
|
|
165
|
+
*
|
|
166
|
+
* @private
|
|
167
|
+
* @type {TextureNode}
|
|
168
|
+
*/
|
|
97
169
|
this._texture = texture( defaultTexture );
|
|
98
170
|
|
|
171
|
+
/**
|
|
172
|
+
* A uniform representing the PMREM's width.
|
|
173
|
+
*
|
|
174
|
+
* @private
|
|
175
|
+
* @type {UniformNode<float>}
|
|
176
|
+
*/
|
|
99
177
|
this._width = uniform( 0 );
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* A uniform representing the PMREM's height.
|
|
181
|
+
*
|
|
182
|
+
* @private
|
|
183
|
+
* @type {UniformNode<float>}
|
|
184
|
+
*/
|
|
100
185
|
this._height = uniform( 0 );
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* A uniform representing the PMREM's max Mip.
|
|
189
|
+
*
|
|
190
|
+
* @private
|
|
191
|
+
* @type {UniformNode<float>}
|
|
192
|
+
*/
|
|
101
193
|
this._maxMip = uniform( 0 );
|
|
102
194
|
|
|
195
|
+
/**
|
|
196
|
+
* The `updateBeforeType` is set to `NodeUpdateType.RENDER`.
|
|
197
|
+
*
|
|
198
|
+
* @type {String}
|
|
199
|
+
* @default 'render'
|
|
200
|
+
*/
|
|
103
201
|
this.updateBeforeType = NodeUpdateType.RENDER;
|
|
104
202
|
|
|
105
203
|
}
|
|
@@ -111,12 +209,22 @@ class PMREMNode extends TempNode {
|
|
|
111
209
|
|
|
112
210
|
}
|
|
113
211
|
|
|
212
|
+
/**
|
|
213
|
+
* The node's texture value.
|
|
214
|
+
*
|
|
215
|
+
* @type {Texture}
|
|
216
|
+
*/
|
|
114
217
|
get value() {
|
|
115
218
|
|
|
116
219
|
return this._value;
|
|
117
220
|
|
|
118
221
|
}
|
|
119
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Uses the given PMREM texture to update internal values.
|
|
225
|
+
*
|
|
226
|
+
* @param {Texture} texture - The PMREM texture.
|
|
227
|
+
*/
|
|
120
228
|
updateFromTexture( texture ) {
|
|
121
229
|
|
|
122
230
|
const cubeUVSize = _generateCubeUVSize( texture.image.height );
|
|
@@ -191,6 +299,8 @@ class PMREMNode extends TempNode {
|
|
|
191
299
|
|
|
192
300
|
}
|
|
193
301
|
|
|
302
|
+
uvNode = vec3( uvNode.x, uvNode.y.negate(), uvNode.z );
|
|
303
|
+
|
|
194
304
|
//
|
|
195
305
|
|
|
196
306
|
let levelNode = this.levelNode;
|
|
@@ -211,6 +321,13 @@ class PMREMNode extends TempNode {
|
|
|
211
321
|
|
|
212
322
|
export default PMREMNode;
|
|
213
323
|
|
|
324
|
+
/**
|
|
325
|
+
* Returns `true` if the given cube map image has been fully loaded.
|
|
326
|
+
*
|
|
327
|
+
* @private
|
|
328
|
+
* @param {Array<(Image|Object)>} image - The cube map image.
|
|
329
|
+
* @return {Boolean} Whether the given cube map is ready or not.
|
|
330
|
+
*/
|
|
214
331
|
function isCubeMapReady( image ) {
|
|
215
332
|
|
|
216
333
|
if ( image === null || image === undefined ) return false;
|
|
@@ -229,6 +346,13 @@ function isCubeMapReady( image ) {
|
|
|
229
346
|
|
|
230
347
|
}
|
|
231
348
|
|
|
349
|
+
/**
|
|
350
|
+
* Returns `true` if the given equirectangular image has been fully loaded.
|
|
351
|
+
*
|
|
352
|
+
* @private
|
|
353
|
+
* @param {(Image|Object)} image - The equirectangular image.
|
|
354
|
+
* @return {Boolean} Whether the given cube map is ready or not.
|
|
355
|
+
*/
|
|
232
356
|
function isEquirectangularMapReady( image ) {
|
|
233
357
|
|
|
234
358
|
if ( image === null || image === undefined ) return false;
|
|
@@ -237,4 +361,13 @@ function isEquirectangularMapReady( image ) {
|
|
|
237
361
|
|
|
238
362
|
}
|
|
239
363
|
|
|
364
|
+
/**
|
|
365
|
+
* TSL function for creating a PMREM node.
|
|
366
|
+
*
|
|
367
|
+
* @function
|
|
368
|
+
* @param {Texture} value - The input texture.
|
|
369
|
+
* @param {Node<vec2>} [uvNode=null] - The uv node.
|
|
370
|
+
* @param {Node<float>} [levelNode=null] - The level node.
|
|
371
|
+
* @returns {PMREMNode}
|
|
372
|
+
*/
|
|
240
373
|
export const pmremTexture = /*@__PURE__*/ nodeProxy( PMREMNode );
|
|
@@ -237,7 +237,7 @@ const bilinearCubeUV = /*@__PURE__*/ Fn( ( [ envMap, direction_immutable, mipInt
|
|
|
237
237
|
uv.x.mulAssign( CUBEUV_TEXEL_WIDTH );
|
|
238
238
|
uv.y.mulAssign( CUBEUV_TEXEL_HEIGHT );
|
|
239
239
|
|
|
240
|
-
return envMap.
|
|
240
|
+
return envMap.sample( uv ).grad( vec2(), vec2() ); // disable anisotropic filtering
|
|
241
241
|
|
|
242
242
|
} );
|
|
243
243
|
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { uv } from '../accessors/UV.js';
|
|
2
2
|
import { Fn } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/** @module Procedural **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Creates a 2x2 checkerboard pattern that can be used as procedural texture data.
|
|
8
|
+
*
|
|
9
|
+
* @method
|
|
10
|
+
* @param {Node<vec2>} coord - The uv coordinates.
|
|
11
|
+
* @return {Node<float>} The result data.
|
|
12
|
+
*/
|
|
4
13
|
export const checker = /*@__PURE__*/ Fn( ( [ coord = uv() ] ) => {
|
|
5
14
|
|
|
6
15
|
const uv = coord.mul( 2.0 );
|