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
|
@@ -2,6 +2,19 @@ import TempNode from '../core/TempNode.js';
|
|
|
2
2
|
import { positionWorldDirection } from '../accessors/Position.js';
|
|
3
3
|
import { nodeProxy, vec2 } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
|
+
/** @module EquirectUVNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Can be used to compute texture coordinates for projecting an
|
|
9
|
+
* equirectangular texture onto a mesh for using it as the scene's
|
|
10
|
+
* background.
|
|
11
|
+
*
|
|
12
|
+
* ```js
|
|
13
|
+
* scene.backgroundNode = texture( equirectTexture, equirectUV() );
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @augments TempNode
|
|
17
|
+
*/
|
|
5
18
|
class EquirectUVNode extends TempNode {
|
|
6
19
|
|
|
7
20
|
static get type() {
|
|
@@ -10,10 +23,20 @@ class EquirectUVNode extends TempNode {
|
|
|
10
23
|
|
|
11
24
|
}
|
|
12
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new equirect uv node.
|
|
28
|
+
*
|
|
29
|
+
* @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
|
|
30
|
+
*/
|
|
13
31
|
constructor( dirNode = positionWorldDirection ) {
|
|
14
32
|
|
|
15
33
|
super( 'vec2' );
|
|
16
34
|
|
|
35
|
+
/**
|
|
36
|
+
* A direction vector for sampling why is by default `positionWorldDirection`.
|
|
37
|
+
*
|
|
38
|
+
* @type {Node<vec3>}
|
|
39
|
+
*/
|
|
17
40
|
this.dirNode = dirNode;
|
|
18
41
|
|
|
19
42
|
}
|
|
@@ -22,7 +45,7 @@ class EquirectUVNode extends TempNode {
|
|
|
22
45
|
|
|
23
46
|
const dir = this.dirNode;
|
|
24
47
|
|
|
25
|
-
const u = dir.z.
|
|
48
|
+
const u = dir.z.atan( dir.x ).mul( 1 / ( Math.PI * 2 ) ).add( 0.5 );
|
|
26
49
|
const v = dir.y.clamp( - 1.0, 1.0 ).asin().mul( 1 / Math.PI ).add( 0.5 );
|
|
27
50
|
|
|
28
51
|
return vec2( u, v );
|
|
@@ -33,4 +56,11 @@ class EquirectUVNode extends TempNode {
|
|
|
33
56
|
|
|
34
57
|
export default EquirectUVNode;
|
|
35
58
|
|
|
59
|
+
/**
|
|
60
|
+
* TSL function for creating an equirect uv node.
|
|
61
|
+
*
|
|
62
|
+
* @function
|
|
63
|
+
* @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`.
|
|
64
|
+
* @returns {EquirectUVNode}
|
|
65
|
+
*/
|
|
36
66
|
export const equirectUV = /*@__PURE__*/ nodeProxy( EquirectUVNode );
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
2
|
import { vectorComponents } from '../core/constants.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* This module is part of the TSL core and usually not used in app level code.
|
|
6
|
+
* It represents a flip operation during the shader generation process
|
|
7
|
+
* meaning it flips normalized values with the following formula:
|
|
8
|
+
* ```
|
|
9
|
+
* x = 1 - x;
|
|
10
|
+
* ```
|
|
11
|
+
* `FlipNode` is internally used to implement any `flipXYZW()`, `flipRGBA()` and
|
|
12
|
+
* `flipSTPQ()` method invocations on node objects. For example:
|
|
13
|
+
* ```js
|
|
14
|
+
* uvNode = uvNode.flipY();
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @augments TempNode
|
|
18
|
+
*/
|
|
4
19
|
class FlipNode extends TempNode {
|
|
5
20
|
|
|
6
21
|
static get type() {
|
|
@@ -9,15 +24,38 @@ class FlipNode extends TempNode {
|
|
|
9
24
|
|
|
10
25
|
}
|
|
11
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a new flip node.
|
|
29
|
+
*
|
|
30
|
+
* @param {Node} sourceNode - The node which component(s) should be flipped.
|
|
31
|
+
* @param {String} components - The components that should be flipped e.g. `'x'` or `'xy'`.
|
|
32
|
+
*/
|
|
12
33
|
constructor( sourceNode, components ) {
|
|
13
34
|
|
|
14
35
|
super();
|
|
15
36
|
|
|
37
|
+
/**
|
|
38
|
+
* The node which component(s) should be flipped.
|
|
39
|
+
*
|
|
40
|
+
* @type {Node}
|
|
41
|
+
*/
|
|
16
42
|
this.sourceNode = sourceNode;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The components that should be flipped e.g. `'x'` or `'xy'`.
|
|
46
|
+
*
|
|
47
|
+
* @type {String}
|
|
48
|
+
*/
|
|
17
49
|
this.components = components;
|
|
18
50
|
|
|
19
51
|
}
|
|
20
52
|
|
|
53
|
+
/**
|
|
54
|
+
* This method is overwritten since the node type is inferred from the source node.
|
|
55
|
+
*
|
|
56
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
57
|
+
* @return {String} The node type.
|
|
58
|
+
*/
|
|
21
59
|
getNodeType( builder ) {
|
|
22
60
|
|
|
23
61
|
return this.sourceNode.getNodeType( builder );
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
-
import { nodeProxy } from '../tsl/
|
|
2
|
+
import { nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
|
+
/** @module FunctionOverloadingNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This class allows to define multiple overloaded versions
|
|
8
|
+
* of the same function. Depending on the parameters of the function
|
|
9
|
+
* call, the node picks the best-fit overloaded version.
|
|
10
|
+
*
|
|
11
|
+
* @augments Node
|
|
12
|
+
*/
|
|
4
13
|
class FunctionOverloadingNode extends Node {
|
|
5
14
|
|
|
6
15
|
static get type() {
|
|
@@ -9,19 +18,55 @@ class FunctionOverloadingNode extends Node {
|
|
|
9
18
|
|
|
10
19
|
}
|
|
11
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Constructs a new function overloading node.
|
|
23
|
+
*
|
|
24
|
+
* @param {Array<Function>} functionNodes - Array of `Fn` function definitions.
|
|
25
|
+
* @param {...Node} parametersNodes - A list of parameter nodes.
|
|
26
|
+
*/
|
|
12
27
|
constructor( functionNodes = [], ...parametersNodes ) {
|
|
13
28
|
|
|
14
29
|
super();
|
|
15
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Array of `Fn` function definitions.
|
|
33
|
+
*
|
|
34
|
+
* @type {Array<Function>}
|
|
35
|
+
*/
|
|
16
36
|
this.functionNodes = functionNodes;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* A list of parameter nodes.
|
|
40
|
+
*
|
|
41
|
+
* @type {Array<Node>}
|
|
42
|
+
*/
|
|
17
43
|
this.parametersNodes = parametersNodes;
|
|
18
44
|
|
|
45
|
+
/**
|
|
46
|
+
* The selected overloaded function call.
|
|
47
|
+
*
|
|
48
|
+
* @private
|
|
49
|
+
* @type {ShaderCallNodeInternal}
|
|
50
|
+
*/
|
|
19
51
|
this._candidateFnCall = null;
|
|
20
52
|
|
|
53
|
+
/**
|
|
54
|
+
* This node is marked as global.
|
|
55
|
+
*
|
|
56
|
+
* @type {Boolean}
|
|
57
|
+
* @default true
|
|
58
|
+
*/
|
|
21
59
|
this.global = true;
|
|
22
60
|
|
|
23
61
|
}
|
|
24
62
|
|
|
63
|
+
/**
|
|
64
|
+
* This method is overwritten since the node type is inferred from
|
|
65
|
+
* the function's return type.
|
|
66
|
+
*
|
|
67
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
68
|
+
* @return {String} The node type.
|
|
69
|
+
*/
|
|
25
70
|
getNodeType() {
|
|
26
71
|
|
|
27
72
|
return this.functionNodes[ 0 ].shaderNode.layout.type;
|
|
@@ -98,4 +143,11 @@ export default FunctionOverloadingNode;
|
|
|
98
143
|
|
|
99
144
|
const overloadingBaseFn = /*@__PURE__*/ nodeProxy( FunctionOverloadingNode );
|
|
100
145
|
|
|
146
|
+
/**
|
|
147
|
+
* TSL function for creating a function overloading node.
|
|
148
|
+
*
|
|
149
|
+
* @function
|
|
150
|
+
* @param {Array<Function>} functionNodes - Array of `Fn` function definitions.
|
|
151
|
+
* @returns {FunctionOverloadingNode}
|
|
152
|
+
*/
|
|
101
153
|
export const overloadingFn = ( functionNodes ) => ( ...params ) => overloadingBaseFn( functionNodes, ...params );
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* This module is part of the TSL core and usually not used in app level code.
|
|
5
|
+
* It represents a join operation during the shader generation process.
|
|
6
|
+
* For example in can compose/join two single floats into a `vec2` type.
|
|
7
|
+
*
|
|
8
|
+
* @augments TempNode
|
|
9
|
+
*/
|
|
3
10
|
class JoinNode extends TempNode {
|
|
4
11
|
|
|
5
12
|
static get type() {
|
|
@@ -8,14 +15,32 @@ class JoinNode extends TempNode {
|
|
|
8
15
|
|
|
9
16
|
}
|
|
10
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new join node.
|
|
20
|
+
*
|
|
21
|
+
* @param {Array<Node>} nodes - An array of nodes that should be joined.
|
|
22
|
+
* @param {String?} [nodeType=null] - The node type.
|
|
23
|
+
*/
|
|
11
24
|
constructor( nodes = [], nodeType = null ) {
|
|
12
25
|
|
|
13
26
|
super( nodeType );
|
|
14
27
|
|
|
28
|
+
/**
|
|
29
|
+
* An array of nodes that should be joined.
|
|
30
|
+
*
|
|
31
|
+
* @type {Array<Node>}
|
|
32
|
+
*/
|
|
15
33
|
this.nodes = nodes;
|
|
16
34
|
|
|
17
35
|
}
|
|
18
36
|
|
|
37
|
+
/**
|
|
38
|
+
* This method is overwritten since the node type must be inferred from the
|
|
39
|
+
* joined data length if not explicitly defined.
|
|
40
|
+
*
|
|
41
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
42
|
+
* @return {String} The node type.
|
|
43
|
+
*/
|
|
19
44
|
getNodeType( builder ) {
|
|
20
45
|
|
|
21
46
|
if ( this.nodeType !== null ) {
|
|
@@ -2,6 +2,34 @@ import Node from '../core/Node.js';
|
|
|
2
2
|
import { expression } from '../code/ExpressionNode.js';
|
|
3
3
|
import { nodeObject, nodeArray } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
|
+
/** @module LoopNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* This module offers a variety of ways to implement loops in TSL. In it's basic form it's:
|
|
9
|
+
* ```js
|
|
10
|
+
* Loop( count, ( { i } ) => {
|
|
11
|
+
*
|
|
12
|
+
* } );
|
|
13
|
+
* ```
|
|
14
|
+
* However, it is also possible to define a start and end ranges, data types and loop conditions:
|
|
15
|
+
* ```js
|
|
16
|
+
* Loop( { start: int( 0 ), end: int( 10 ), type: 'int', condition: '<' }, ( { i } ) => {
|
|
17
|
+
*
|
|
18
|
+
* } );
|
|
19
|
+
*```
|
|
20
|
+
* Nested loops can be defined in a compacted form:
|
|
21
|
+
* ```js
|
|
22
|
+
* Loop( 10, 5, ( { i, j } ) => {
|
|
23
|
+
*
|
|
24
|
+
* } );
|
|
25
|
+
* ```
|
|
26
|
+
* Loops that should run backwards can be defined like so:
|
|
27
|
+
* ```js
|
|
28
|
+
* Loop( { start: 10 }, () => {} );
|
|
29
|
+
* ```
|
|
30
|
+
* The module also provides `Break()` and `Continue()` TSL expression for loop control.
|
|
31
|
+
* @augments Node
|
|
32
|
+
*/
|
|
5
33
|
class LoopNode extends Node {
|
|
6
34
|
|
|
7
35
|
static get type() {
|
|
@@ -10,6 +38,11 @@ class LoopNode extends Node {
|
|
|
10
38
|
|
|
11
39
|
}
|
|
12
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Constructs a new loop node.
|
|
43
|
+
*
|
|
44
|
+
* @param {Array<Any>} params - Depending on the loop type, array holds different parameterization values for the loop.
|
|
45
|
+
*/
|
|
13
46
|
constructor( params = [] ) {
|
|
14
47
|
|
|
15
48
|
super();
|
|
@@ -18,12 +51,25 @@ class LoopNode extends Node {
|
|
|
18
51
|
|
|
19
52
|
}
|
|
20
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Returns a loop variable name based on an index. The pattern is
|
|
56
|
+
* `0` = `i`, `1`= `j`, `2`= `k` and so on.
|
|
57
|
+
*
|
|
58
|
+
* @param {Number} index - The index.
|
|
59
|
+
* @return {String} The loop variable name.
|
|
60
|
+
*/
|
|
21
61
|
getVarName( index ) {
|
|
22
62
|
|
|
23
|
-
return String.fromCharCode( 'i'.charCodeAt() + index );
|
|
63
|
+
return String.fromCharCode( 'i'.charCodeAt( 0 ) + index );
|
|
24
64
|
|
|
25
65
|
}
|
|
26
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Returns properties about this node.
|
|
69
|
+
*
|
|
70
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
71
|
+
* @return {Object} The node properties.
|
|
72
|
+
*/
|
|
27
73
|
getProperties( builder ) {
|
|
28
74
|
|
|
29
75
|
const properties = builder.getNodeProperties( this );
|
|
@@ -56,6 +102,12 @@ class LoopNode extends Node {
|
|
|
56
102
|
|
|
57
103
|
}
|
|
58
104
|
|
|
105
|
+
/**
|
|
106
|
+
* This method is overwritten since the node type is inferred based on the loop configuration.
|
|
107
|
+
*
|
|
108
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
109
|
+
* @return {String} The node type.
|
|
110
|
+
*/
|
|
59
111
|
getNodeType( builder ) {
|
|
60
112
|
|
|
61
113
|
const { returnsNode } = this.getProperties( builder );
|
|
@@ -197,12 +249,40 @@ class LoopNode extends Node {
|
|
|
197
249
|
|
|
198
250
|
export default LoopNode;
|
|
199
251
|
|
|
252
|
+
/**
|
|
253
|
+
* TSL function for creating a loop node.
|
|
254
|
+
*
|
|
255
|
+
* @function
|
|
256
|
+
* @param {...Any} params - A list of parameters.
|
|
257
|
+
* @returns {LoopNode}
|
|
258
|
+
*/
|
|
200
259
|
export const Loop = ( ...params ) => nodeObject( new LoopNode( nodeArray( params, 'int' ) ) ).append();
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* TSL function for creating a `Continue()` expression.
|
|
263
|
+
*
|
|
264
|
+
* @function
|
|
265
|
+
* @returns {ExpressionNode}
|
|
266
|
+
*/
|
|
201
267
|
export const Continue = () => expression( 'continue' ).append();
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* TSL function for creating a `Break()` expression.
|
|
271
|
+
*
|
|
272
|
+
* @function
|
|
273
|
+
* @returns {ExpressionNode}
|
|
274
|
+
*/
|
|
202
275
|
export const Break = () => expression( 'break' ).append();
|
|
203
276
|
|
|
204
|
-
//
|
|
277
|
+
// Deprecated
|
|
205
278
|
|
|
279
|
+
/**
|
|
280
|
+
* @function
|
|
281
|
+
* @deprecated since r168. Use {@link Loop} instead.
|
|
282
|
+
*
|
|
283
|
+
* @param {...any} params
|
|
284
|
+
* @returns {LoopNode}
|
|
285
|
+
*/
|
|
206
286
|
export const loop = ( ...params ) => { // @deprecated, r168
|
|
207
287
|
|
|
208
288
|
console.warn( 'TSL.LoopNode: loop() has been renamed to Loop().' );
|
|
@@ -3,6 +3,14 @@ import { transformedNormalView } from '../accessors/Normal.js';
|
|
|
3
3
|
import { positionViewDirection } from '../accessors/Position.js';
|
|
4
4
|
import { nodeImmutable, vec2, vec3 } from '../tsl/TSLBase.js';
|
|
5
5
|
|
|
6
|
+
/** @module MatcapUVNode **/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Can be used to compute texture coordinates for projecting a
|
|
10
|
+
* matcap onto a mesh. Used by {@link MeshMatcapNodeMaterial}.
|
|
11
|
+
*
|
|
12
|
+
* @augments TempNode
|
|
13
|
+
*/
|
|
6
14
|
class MatcapUVNode extends TempNode {
|
|
7
15
|
|
|
8
16
|
static get type() {
|
|
@@ -11,6 +19,9 @@ class MatcapUVNode extends TempNode {
|
|
|
11
19
|
|
|
12
20
|
}
|
|
13
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new matcap uv node.
|
|
24
|
+
*/
|
|
14
25
|
constructor() {
|
|
15
26
|
|
|
16
27
|
super( 'vec2' );
|
|
@@ -30,4 +41,10 @@ class MatcapUVNode extends TempNode {
|
|
|
30
41
|
|
|
31
42
|
export default MatcapUVNode;
|
|
32
43
|
|
|
44
|
+
/**
|
|
45
|
+
* TSL function for creating a matcap uv node.
|
|
46
|
+
*
|
|
47
|
+
* @function
|
|
48
|
+
* @returns {MatcapUVNode}
|
|
49
|
+
*/
|
|
33
50
|
export const matcapUV = /*@__PURE__*/ nodeImmutable( MatcapUVNode );
|
|
@@ -2,6 +2,18 @@ import UniformNode from '../core/UniformNode.js';
|
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
3
|
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
|
+
/** @module MatcapUVNode **/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A special type of uniform node that computes the
|
|
9
|
+
* maximum mipmap level for a given texture node.
|
|
10
|
+
*
|
|
11
|
+
* ```js
|
|
12
|
+
* const level = maxMipLevel( textureNode );
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @augments module:UniformNode~UniformNode
|
|
16
|
+
*/
|
|
5
17
|
class MaxMipLevelNode extends UniformNode {
|
|
6
18
|
|
|
7
19
|
static get type() {
|
|
@@ -10,22 +22,52 @@ class MaxMipLevelNode extends UniformNode {
|
|
|
10
22
|
|
|
11
23
|
}
|
|
12
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a new max mip level node.
|
|
27
|
+
*
|
|
28
|
+
* @param {TextureNode} textureNode - The texture node to compute the max mip level for.
|
|
29
|
+
*/
|
|
13
30
|
constructor( textureNode ) {
|
|
14
31
|
|
|
15
32
|
super( 0 );
|
|
16
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The texture node to compute the max mip level for.
|
|
36
|
+
*
|
|
37
|
+
* @private
|
|
38
|
+
* @type {TextureNode}
|
|
39
|
+
*/
|
|
17
40
|
this._textureNode = textureNode;
|
|
18
41
|
|
|
42
|
+
/**
|
|
43
|
+
* The `updateType` is set to `NodeUpdateType.FRAME` since the node updates
|
|
44
|
+
* the texture once per frame in its {@link MaxMipLevelNode#update} method.
|
|
45
|
+
*
|
|
46
|
+
* @type {String}
|
|
47
|
+
* @default 'frame'
|
|
48
|
+
*/
|
|
19
49
|
this.updateType = NodeUpdateType.FRAME;
|
|
20
50
|
|
|
21
51
|
}
|
|
22
52
|
|
|
53
|
+
/**
|
|
54
|
+
* The texture node to compute the max mip level for.
|
|
55
|
+
*
|
|
56
|
+
* @readonly
|
|
57
|
+
* @type {TextureNode}
|
|
58
|
+
*/
|
|
23
59
|
get textureNode() {
|
|
24
60
|
|
|
25
61
|
return this._textureNode;
|
|
26
62
|
|
|
27
63
|
}
|
|
28
64
|
|
|
65
|
+
/**
|
|
66
|
+
* The texture.
|
|
67
|
+
*
|
|
68
|
+
* @readonly
|
|
69
|
+
* @type {Texture}
|
|
70
|
+
*/
|
|
29
71
|
get texture() {
|
|
30
72
|
|
|
31
73
|
return this._textureNode.value;
|
|
@@ -52,4 +94,11 @@ class MaxMipLevelNode extends UniformNode {
|
|
|
52
94
|
|
|
53
95
|
export default MaxMipLevelNode;
|
|
54
96
|
|
|
97
|
+
/**
|
|
98
|
+
* TSL function for creating a max mip level node.
|
|
99
|
+
*
|
|
100
|
+
* @function
|
|
101
|
+
* @param {TextureNode} textureNode - The texture node to compute the max mip level for.
|
|
102
|
+
* @returns {MaxMipLevelNode}
|
|
103
|
+
*/
|
|
55
104
|
export const maxMipLevel = /*@__PURE__*/ nodeProxy( MaxMipLevelNode );
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Base class for representing member access on an object-like
|
|
5
|
+
* node data structures.
|
|
6
|
+
*
|
|
7
|
+
* @augments Node
|
|
8
|
+
*/
|
|
9
|
+
class MemberNode extends Node {
|
|
10
|
+
|
|
11
|
+
static get type() {
|
|
12
|
+
|
|
13
|
+
return 'MemberNode';
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Constructs an array element node.
|
|
19
|
+
*
|
|
20
|
+
* @param {Node} node - The array-like node.
|
|
21
|
+
* @param {String} property - The property name.
|
|
22
|
+
*/
|
|
23
|
+
constructor( node, property ) {
|
|
24
|
+
|
|
25
|
+
super();
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The array-like node.
|
|
29
|
+
*
|
|
30
|
+
* @type {Node}
|
|
31
|
+
*/
|
|
32
|
+
this.node = node;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The property name.
|
|
36
|
+
*
|
|
37
|
+
* @type {Node}
|
|
38
|
+
*/
|
|
39
|
+
this.property = property;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* This flag can be used for type testing.
|
|
43
|
+
*
|
|
44
|
+
* @type {Boolean}
|
|
45
|
+
* @readonly
|
|
46
|
+
* @default true
|
|
47
|
+
*/
|
|
48
|
+
this.isMemberNode = true;
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
getNodeType( builder ) {
|
|
53
|
+
|
|
54
|
+
return this.node.getMemberType( builder, this.property );
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
generate( builder ) {
|
|
59
|
+
|
|
60
|
+
const propertyName = this.node.build( builder );
|
|
61
|
+
|
|
62
|
+
return propertyName + '.' + this.property;
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export default MemberNode;
|
|
@@ -1,6 +1,39 @@
|
|
|
1
1
|
import { time } from './Timer.js';
|
|
2
2
|
|
|
3
|
+
/** @module Oscillators **/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates a sine wave oscillation based on a timer.
|
|
7
|
+
*
|
|
8
|
+
* @method
|
|
9
|
+
* @param {Node<float>} t - The timer to generate the oscillation with.
|
|
10
|
+
* @return {Node<float>} The oscillation node.
|
|
11
|
+
*/
|
|
3
12
|
export const oscSine = ( t = time ) => t.add( 0.75 ).mul( Math.PI * 2 ).sin().mul( 0.5 ).add( 0.5 );
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Generates a square wave oscillation based on a timer.
|
|
16
|
+
*
|
|
17
|
+
* @method
|
|
18
|
+
* @param {Node<float>} t - The timer to generate the oscillation with.
|
|
19
|
+
* @return {Node<float>} The oscillation node.
|
|
20
|
+
*/
|
|
4
21
|
export const oscSquare = ( t = time ) => t.fract().round();
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Generates a triangle wave oscillation based on a timer.
|
|
25
|
+
*
|
|
26
|
+
* @method
|
|
27
|
+
* @param {Node<float>} t - The timer to generate the oscillation with.
|
|
28
|
+
* @return {Node<float>} The oscillation node.
|
|
29
|
+
*/
|
|
5
30
|
export const oscTriangle = ( t = time ) => t.add( 0.5 ).fract().mul( 2 ).sub( 1 ).abs();
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Generates a sawtooth wave oscillation based on a timer.
|
|
34
|
+
*
|
|
35
|
+
* @method
|
|
36
|
+
* @param {Node<float>} t - The timer to generate the oscillation with.
|
|
37
|
+
* @return {Node<float>} The oscillation node.
|
|
38
|
+
*/
|
|
6
39
|
export const oscSawtooth = ( t = time ) => t.fract();
|
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
import { nodeObject } from '../tsl/TSLBase.js';
|
|
2
2
|
|
|
3
|
+
/** @module Packing **/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Packs a direction vector into a color value.
|
|
7
|
+
*
|
|
8
|
+
* @method
|
|
9
|
+
* @param {Node<vec3>} node - The direction to pack.
|
|
10
|
+
* @return {Node<vec3>} The color.
|
|
11
|
+
*/
|
|
3
12
|
export const directionToColor = ( node ) => nodeObject( node ).mul( 0.5 ).add( 0.5 );
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Unpacks a color value into a direction vector.
|
|
16
|
+
*
|
|
17
|
+
* @method
|
|
18
|
+
* @param {Node<vec3>} node - The color to unpack.
|
|
19
|
+
* @return {Node<vec3>} The direction.
|
|
20
|
+
*/
|
|
4
21
|
export const colorToDirection = ( node ) => nodeObject( node ).mul( 2.0 ).sub( 1 );
|
|
@@ -3,15 +3,18 @@ import { textureSize } from '../accessors/TextureSizeNode.js';
|
|
|
3
3
|
import { textureLoad } from '../accessors/TextureNode.js';
|
|
4
4
|
import { WebGPUCoordinateSystem } from '../../constants.js';
|
|
5
5
|
|
|
6
|
+
/** @module PostProcessingUtils **/
|
|
7
|
+
|
|
6
8
|
/**
|
|
7
|
-
* Computes a position in view space based on a fragment's screen position expressed as uv coordinates, the fragments
|
|
8
|
-
* depth value and the camera's inverse projection matrix.
|
|
9
|
-
*
|
|
10
|
-
* @
|
|
11
|
-
* @param {
|
|
12
|
-
* @param {
|
|
13
|
-
* @
|
|
14
|
-
|
|
9
|
+
* Computes a position in view space based on a fragment's screen position expressed as uv coordinates, the fragments
|
|
10
|
+
* depth value and the camera's inverse projection matrix.
|
|
11
|
+
*
|
|
12
|
+
* @method
|
|
13
|
+
* @param {Node<vec2>} screenPosition - The fragment's screen position expressed as uv coordinates.
|
|
14
|
+
* @param {Node<float>} depth - The fragment's depth value.
|
|
15
|
+
* @param {Node<mat4>} projectionMatrixInverse - The camera's inverse projection matrix.
|
|
16
|
+
* @return {Node<vec3>} The fragments position in view space.
|
|
17
|
+
*/
|
|
15
18
|
export const getViewPosition = /*@__PURE__*/ Fn( ( [ screenPosition, depth, projectionMatrixInverse ], builder ) => {
|
|
16
19
|
|
|
17
20
|
let clipSpacePosition;
|
|
@@ -34,13 +37,14 @@ export const getViewPosition = /*@__PURE__*/ Fn( ( [ screenPosition, depth, proj
|
|
|
34
37
|
} );
|
|
35
38
|
|
|
36
39
|
/**
|
|
37
|
-
* Computes a screen position expressed as uv coordinates based on a fragment's position in view space
|
|
38
|
-
* and the camera's projection matrix
|
|
39
|
-
*
|
|
40
|
-
* @
|
|
41
|
-
* @param {
|
|
42
|
-
* @
|
|
43
|
-
|
|
40
|
+
* Computes a screen position expressed as uv coordinates based on a fragment's position in view space
|
|
41
|
+
* and the camera's projection matrix
|
|
42
|
+
*
|
|
43
|
+
* @method
|
|
44
|
+
* @param {Node<vec3>} viewPosition - The fragments position in view space.
|
|
45
|
+
* @param {Node<mat4>} projectionMatrix - The camera's projection matrix.
|
|
46
|
+
* @return {Node<vec2>} The fragment's screen position expressed as uv coordinates.
|
|
47
|
+
*/
|
|
44
48
|
export const getScreenPosition = /*@__PURE__*/ Fn( ( [ viewPosition, projectionMatrix ] ) => {
|
|
45
49
|
|
|
46
50
|
const sampleClipPos = projectionMatrix.mul( vec4( viewPosition, 1.0 ) );
|
|
@@ -50,14 +54,15 @@ export const getScreenPosition = /*@__PURE__*/ Fn( ( [ viewPosition, projectionM
|
|
|
50
54
|
} );
|
|
51
55
|
|
|
52
56
|
/**
|
|
53
|
-
* Computes a normal vector based on depth data. Can be used as a fallback when no normal render
|
|
54
|
-
* target is available or if flat surface normals are required.
|
|
55
|
-
*
|
|
56
|
-
* @
|
|
57
|
-
* @param {
|
|
58
|
-
* @param {
|
|
59
|
-
* @
|
|
60
|
-
|
|
57
|
+
* Computes a normal vector based on depth data. Can be used as a fallback when no normal render
|
|
58
|
+
* target is available or if flat surface normals are required.
|
|
59
|
+
*
|
|
60
|
+
* @method
|
|
61
|
+
* @param {Node<vec2>} uv - The texture coordinate.
|
|
62
|
+
* @param {DepthTexture} depthTexture - The depth texture.
|
|
63
|
+
* @param {Node<mat4>} projectionMatrixInverse - The camera's inverse projection matrix.
|
|
64
|
+
* @return {Node<vec3>} The computed normal vector.
|
|
65
|
+
*/
|
|
61
66
|
export const getNormalFromDepth = /*@__PURE__*/ Fn( ( [ uv, depthTexture, projectionMatrixInverse ] ) => {
|
|
62
67
|
|
|
63
68
|
const size = textureSize( textureLoad( depthTexture ) );
|