@plastic-software/three 0.175.14 → 0.179.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 +4 -4
- package/build/three.cjs +8402 -6787
- package/build/three.core.js +8007 -6688
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +397 -102
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +84 -27
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +6831 -2838
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +6648 -2838
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -3
- package/examples/jsm/animation/AnimationClipCreator.js +1 -0
- package/examples/jsm/animation/CCDIKSolver.js +6 -3
- package/examples/jsm/capabilities/WebGL.js +1 -27
- package/examples/jsm/capabilities/WebGPU.js +2 -1
- package/examples/jsm/controls/ArcballControls.js +15 -4
- package/examples/jsm/controls/DragControls.js +1 -0
- package/examples/jsm/controls/FirstPersonControls.js +1 -0
- package/examples/jsm/controls/FlyControls.js +1 -0
- package/examples/jsm/controls/MapControls.js +1 -0
- package/examples/jsm/controls/OrbitControls.js +1 -0
- package/examples/jsm/controls/PointerLockControls.js +5 -3
- package/examples/jsm/controls/TrackballControls.js +1 -0
- package/examples/jsm/controls/TransformControls.js +62 -14
- package/examples/jsm/csm/CSM.js +2 -0
- package/examples/jsm/csm/CSMFrustum.js +2 -0
- package/examples/jsm/csm/CSMHelper.js +1 -0
- package/examples/jsm/csm/CSMShader.js +4 -1
- package/examples/jsm/csm/CSMShadowNode.js +22 -8
- package/examples/jsm/curves/CurveExtras.js +14 -0
- package/examples/jsm/curves/NURBSCurve.js +1 -0
- package/examples/jsm/curves/NURBSSurface.js +2 -0
- package/examples/jsm/curves/NURBSUtils.js +4 -1
- package/examples/jsm/curves/NURBSVolume.js +2 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -0
- package/examples/jsm/effects/AsciiEffect.js +2 -0
- package/examples/jsm/effects/OutlineEffect.js +2 -0
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
- package/examples/jsm/effects/StereoEffect.js +2 -0
- package/examples/jsm/environments/DebugEnvironment.js +1 -0
- package/examples/jsm/environments/RoomEnvironment.js +57 -38
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -0
- package/examples/jsm/exporters/GLTFExporter.js +7 -4
- package/examples/jsm/exporters/KTX2Exporter.js +2 -0
- package/examples/jsm/exporters/OBJExporter.js +3 -1
- package/examples/jsm/exporters/PLYExporter.js +4 -2
- package/examples/jsm/exporters/STLExporter.js +2 -0
- package/examples/jsm/exporters/USDZExporter.js +679 -300
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
- package/examples/jsm/geometries/ConvexGeometry.js +1 -0
- package/examples/jsm/geometries/DecalGeometry.js +1 -0
- package/examples/jsm/geometries/ParametricFunctions.js +4 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -0
- package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
- package/examples/jsm/geometries/TeapotGeometry.js +1 -0
- package/examples/jsm/geometries/TextGeometry.js +1 -0
- package/examples/jsm/helpers/LightProbeHelper.js +1 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelper.js +1 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
- package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +1 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -2
- package/examples/jsm/interactive/InteractiveGroup.js +1 -0
- package/examples/jsm/interactive/SelectionBox.js +2 -0
- package/examples/jsm/interactive/SelectionHelper.js +2 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +15 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
- package/examples/jsm/lines/Line2.js +1 -0
- package/examples/jsm/lines/LineGeometry.js +1 -0
- package/examples/jsm/lines/LineMaterial.js +4 -4
- package/examples/jsm/lines/LineSegments2.js +1 -0
- package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
- package/examples/jsm/lines/Wireframe.js +1 -0
- package/examples/jsm/lines/WireframeGeometry2.js +1 -0
- package/examples/jsm/lines/webgpu/Line2.js +1 -0
- package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -0
- package/examples/jsm/loaders/3MFLoader.js +1 -0
- package/examples/jsm/loaders/AMFLoader.js +1 -0
- package/examples/jsm/loaders/BVHLoader.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +6 -5
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -1
- package/examples/jsm/loaders/EXRLoader.js +211 -22
- package/examples/jsm/loaders/FBXLoader.js +25 -23
- package/examples/jsm/loaders/FontLoader.js +1 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -0
- package/examples/jsm/loaders/GLTFLoader.js +10 -82
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
- package/examples/jsm/loaders/IESLoader.js +1 -0
- package/examples/jsm/loaders/KMZLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +67 -26
- package/examples/jsm/loaders/KTXLoader.js +1 -0
- package/examples/jsm/loaders/LDrawLoader.js +55 -3
- package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
- package/examples/jsm/loaders/LUTImageLoader.js +1 -0
- package/examples/jsm/loaders/LWOLoader.js +1 -13
- package/examples/jsm/loaders/LottieLoader.js +15 -0
- package/examples/jsm/loaders/MD2Loader.js +1 -0
- package/examples/jsm/loaders/MDDLoader.js +1 -0
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +213 -30
- package/examples/jsm/loaders/NRRDLoader.js +1 -0
- package/examples/jsm/loaders/OBJLoader.js +1 -0
- package/examples/jsm/loaders/PCDLoader.js +122 -19
- package/examples/jsm/loaders/PDBLoader.js +1 -0
- package/examples/jsm/loaders/PLYLoader.js +1 -0
- package/examples/jsm/loaders/PVRLoader.js +1 -0
- package/examples/jsm/loaders/RGBELoader.js +1 -0
- package/examples/jsm/loaders/RGBMLoader.js +1 -0
- package/examples/jsm/loaders/STLLoader.js +1 -0
- package/examples/jsm/loaders/SVGLoader.js +1 -0
- package/examples/jsm/loaders/TDSLoader.js +1 -0
- package/examples/jsm/loaders/TGALoader.js +1 -0
- package/examples/jsm/loaders/TIFFLoader.js +1 -0
- package/examples/jsm/loaders/TTFLoader.js +14 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -891
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +3 -2
- package/examples/jsm/loaders/VTKLoader.js +1 -0
- package/examples/jsm/loaders/XYZLoader.js +1 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
- package/examples/jsm/math/Capsule.js +2 -0
- package/examples/jsm/math/ColorConverter.js +1 -0
- package/examples/jsm/math/ConvexHull.js +2 -0
- package/examples/jsm/math/ImprovedNoise.js +19 -14
- package/examples/jsm/math/Lut.js +2 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
- package/examples/jsm/math/OBB.js +2 -0
- package/examples/jsm/math/Octree.js +20 -1
- package/examples/jsm/math/SimplexNoise.js +2 -0
- package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/Gyroscope.js +1 -0
- package/examples/jsm/misc/MD2Character.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
- package/examples/jsm/misc/MorphAnimMesh.js +1 -0
- package/examples/jsm/misc/MorphBlendMesh.js +1 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +5 -0
- package/examples/jsm/misc/TubePainter.js +1 -0
- package/examples/jsm/misc/Volume.js +2 -0
- package/examples/jsm/misc/VolumeSlice.js +1 -0
- package/examples/jsm/modifiers/CurveModifier.js +3 -0
- package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
- package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
- package/examples/jsm/modifiers/TessellateModifier.js +2 -0
- package/examples/jsm/objects/GroundedSkybox.js +1 -0
- package/examples/jsm/objects/Lensflare.js +3 -0
- package/examples/jsm/objects/LensflareMesh.js +4 -3
- package/examples/jsm/objects/MarchingCubes.js +2 -0
- package/examples/jsm/objects/Reflector.js +1 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Refractor.js +1 -0
- package/examples/jsm/objects/ShadowMesh.js +1 -0
- package/examples/jsm/objects/Sky.js +2 -1
- package/examples/jsm/objects/SkyMesh.js +22 -19
- package/examples/jsm/objects/Water.js +1 -0
- package/examples/jsm/objects/Water2.js +1 -0
- package/examples/jsm/objects/Water2Mesh.js +3 -1
- package/examples/jsm/objects/WaterMesh.js +2 -1
- package/examples/jsm/physics/AmmoPhysics.js +1 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +149 -13
- package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -1
- package/examples/jsm/postprocessing/BokehPass.js +2 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -0
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -2
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/GTAOPass.js +14 -12
- package/examples/jsm/postprocessing/GlitchPass.js +2 -1
- package/examples/jsm/postprocessing/HalftonePass.js +2 -1
- package/examples/jsm/postprocessing/LUTPass.js +1 -0
- package/examples/jsm/postprocessing/MaskPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +22 -19
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +3 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
- package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +3 -2
- package/examples/jsm/postprocessing/SMAAPass.js +3 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
- package/examples/jsm/postprocessing/SSAOPass.js +12 -10
- package/examples/jsm/postprocessing/SSRPass.js +4 -3
- package/examples/jsm/postprocessing/SavePass.js +2 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
- package/examples/jsm/postprocessing/TexturePass.js +1 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
- package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
- package/examples/jsm/renderers/Projector.js +2 -0
- package/examples/jsm/renderers/SVGRenderer.js +3 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
- package/examples/jsm/shaders/AfterimageShader.js +4 -1
- package/examples/jsm/shaders/BasicShader.js +4 -1
- package/examples/jsm/shaders/BleachBypassShader.js +4 -1
- package/examples/jsm/shaders/BlendShader.js +4 -1
- package/examples/jsm/shaders/BokehShader.js +4 -1
- package/examples/jsm/shaders/BokehShader2.js +4 -1
- package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
- package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
- package/examples/jsm/shaders/ColorifyShader.js +4 -1
- package/examples/jsm/shaders/ConvolutionShader.js +4 -1
- package/examples/jsm/shaders/CopyShader.js +4 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/DigitalGlitch.js +4 -1
- package/examples/jsm/shaders/DotScreenShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +4 -1
- package/examples/jsm/shaders/FXAAShader.js +4 -1
- package/examples/jsm/shaders/FilmShader.js +4 -1
- package/examples/jsm/shaders/FocusShader.js +4 -1
- package/examples/jsm/shaders/FreiChenShader.js +4 -1
- package/examples/jsm/shaders/GTAOShader.js +4 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
- package/examples/jsm/shaders/GodRaysShader.js +4 -1
- package/examples/jsm/shaders/HalftoneShader.js +4 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/HueSaturationShader.js +4 -1
- package/examples/jsm/shaders/KaleidoShader.js +4 -1
- package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
- package/examples/jsm/shaders/LuminosityShader.js +4 -1
- package/examples/jsm/shaders/MirrorShader.js +4 -1
- package/examples/jsm/shaders/NormalMapShader.js +4 -1
- package/examples/jsm/shaders/OutputShader.js +4 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
- package/examples/jsm/shaders/RGBShiftShader.js +4 -1
- package/examples/jsm/shaders/SAOShader.js +4 -1
- package/examples/jsm/shaders/SMAAShader.js +1 -0
- package/examples/jsm/shaders/SSAOShader.js +4 -1
- package/examples/jsm/shaders/SSRShader.js +1 -0
- package/examples/jsm/shaders/SepiaShader.js +4 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
- package/examples/jsm/shaders/TechnicolorShader.js +4 -1
- package/examples/jsm/shaders/ToonShader.js +2 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
- package/examples/jsm/shaders/VelocityShader.js +4 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
- package/examples/jsm/shaders/VignetteShader.js +4 -1
- package/examples/jsm/shaders/VolumeShader.js +5 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
- package/examples/jsm/textures/FlakesTexture.js +2 -0
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +234 -85
- package/examples/jsm/transpiler/Transpiler.js +19 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
- package/examples/jsm/tsl/display/BloomNode.js +9 -7
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
- package/examples/jsm/tsl/display/FXAANode.js +3 -2
- package/examples/jsm/tsl/display/FilmNode.js +1 -0
- package/examples/jsm/tsl/display/GTAONode.js +1 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
- package/examples/jsm/tsl/display/LensflareNode.js +1 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
- package/examples/jsm/tsl/display/OutlineNode.js +1 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
- package/examples/jsm/tsl/display/SMAANode.js +9 -8
- package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
- package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
- package/examples/jsm/tsl/display/TransitionNode.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +28 -6
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
- package/examples/jsm/tsl/math/Bayer.js +4 -1
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +6 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +4 -1
- package/examples/jsm/utils/LDrawUtils.js +2 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -0
- package/examples/jsm/utils/SceneUtils.js +4 -1
- package/examples/jsm/utils/ShadowMapViewer.js +2 -0
- package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
- package/examples/jsm/utils/SkeletonUtils.js +4 -1
- package/examples/jsm/utils/SortUtils.js +4 -1
- package/examples/jsm/utils/UVsDebug.js +4 -1
- package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
- package/examples/jsm/utils/WorkerPool.js +2 -0
- package/examples/jsm/webxr/ARButton.js +1 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
- package/examples/jsm/webxr/Text2D.js +4 -1
- package/examples/jsm/webxr/VRButton.js +1 -0
- package/examples/jsm/webxr/XRButton.js +1 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
- package/examples/jsm/webxr/XREstimatedLight.js +1 -0
- package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
- package/examples/jsm/webxr/XRPlanes.js +1 -0
- package/package.json +6 -4
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +83 -26
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +47 -20
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +2 -5
- package/src/core/Clock.js +2 -8
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/Object3D.js +23 -22
- package/src/core/RenderTarget.js +65 -21
- package/src/core/RenderTarget3D.js +1 -0
- package/{examples/jsm/misc → src/core}/Timer.js +4 -40
- package/src/extras/PMREMGenerator.js +11 -0
- package/src/extras/TextureUtils.js +1 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +22 -22
- package/src/geometries/CapsuleGeometry.js +167 -17
- package/src/geometries/ExtrudeGeometry.js +39 -29
- package/src/helpers/ArrowHelper.js +2 -2
- package/src/helpers/CameraHelper.js +41 -11
- package/src/helpers/SkeletonHelper.js +36 -7
- package/src/lights/LightShadow.js +34 -7
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/SpotLightShadow.js +9 -1
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/BufferGeometryLoader.js +1 -10
- package/src/loaders/FileLoader.js +27 -4
- package/src/loaders/ImageBitmapLoader.js +48 -9
- package/src/loaders/ImageLoader.js +55 -8
- package/src/loaders/Loader.js +14 -0
- package/src/loaders/LoadingManager.js +23 -0
- package/src/loaders/ObjectLoader.js +44 -16
- package/src/loaders/nodes/NodeObjectLoader.js +2 -2
- package/src/materials/Material.js +1 -7
- package/src/materials/MeshBasicMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +0 -8
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +106 -20
- package/src/materials/nodes/PointsNodeMaterial.js +5 -0
- package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
- package/src/math/Box3.js +28 -0
- package/src/math/Color.js +7 -7
- package/src/math/ColorManagement.js +22 -3
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Line3.js +129 -2
- package/src/math/Matrix4.js +48 -27
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/math/Spherical.js +2 -2
- package/src/nodes/Nodes.js +3 -3
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +40 -13
- package/src/nodes/accessors/CubeTextureNode.js +50 -2
- package/src/nodes/accessors/InstanceNode.js +5 -4
- package/src/nodes/accessors/Lights.js +2 -2
- package/src/nodes/accessors/MaterialNode.js +4 -0
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +110 -24
- package/src/nodes/accessors/Object3DNode.js +7 -8
- package/src/nodes/accessors/Position.js +14 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +19 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +15 -4
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +71 -8
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/accessors/VelocityNode.js +1 -0
- package/src/nodes/accessors/VertexColorNode.js +4 -4
- package/src/nodes/code/CodeNode.js +8 -11
- package/src/nodes/core/ArrayNode.js +12 -0
- package/src/nodes/core/AssignNode.js +30 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +27 -4
- package/src/nodes/core/Node.js +83 -22
- package/src/nodes/core/NodeBuilder.js +273 -49
- package/src/nodes/core/NodeUtils.js +46 -1
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +171 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +63 -5
- package/src/nodes/core/VarNode.js +102 -4
- package/src/nodes/core/VaryingNode.js +45 -24
- package/src/nodes/display/BlendModes.js +42 -1
- package/src/nodes/display/ColorSpaceNode.js +4 -27
- package/src/nodes/display/FrontFacingNode.js +34 -2
- package/src/nodes/display/NormalMapNode.js +19 -50
- package/src/nodes/display/PassNode.js +165 -20
- package/src/nodes/display/ScreenNode.js +0 -26
- package/src/nodes/display/ViewportTextureNode.js +67 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +16 -16
- package/src/nodes/functions/ShadowMaskModel.js +5 -1
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
- package/src/nodes/gpgpu/BarrierNode.js +3 -3
- package/src/nodes/gpgpu/ComputeNode.js +68 -24
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
- package/src/nodes/lighting/AnalyticLightNode.js +7 -13
- package/src/nodes/lighting/EnvironmentNode.js +5 -5
- package/src/nodes/lighting/HemisphereLightNode.js +2 -2
- package/src/nodes/lighting/IESSpotLightNode.js +2 -1
- package/src/nodes/lighting/LightsNode.js +29 -11
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/ShadowBaseNode.js +1 -12
- package/src/nodes/lighting/ShadowFilterNode.js +274 -0
- package/src/nodes/lighting/ShadowNode.js +174 -242
- package/src/nodes/lighting/SpotLightNode.js +44 -7
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/ConditionalNode.js +1 -20
- package/src/nodes/math/MathNode.js +146 -75
- package/src/nodes/math/OperatorNode.js +129 -119
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +222 -72
- package/src/nodes/utils/DebugNode.js +16 -4
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +83 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +22 -5
- package/src/nodes/utils/ReflectorNode.js +77 -7
- package/src/nodes/utils/SampleNode.js +81 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +20 -6
- package/src/objects/Mesh.js +9 -0
- package/src/objects/Skeleton.js +1 -1
- package/src/objects/Sprite.js +9 -0
- package/src/renderers/WebGL3DRenderTarget.js +1 -0
- package/src/renderers/WebGLArrayRenderTarget.js +1 -0
- package/src/renderers/WebGLCubeRenderTarget.js +2 -4
- package/src/renderers/WebGLRenderer.js +45 -32
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/Bindings.js +19 -18
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/PostProcessing.js +60 -5
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +133 -22
- package/src/renderers/common/SampledTexture.js +3 -71
- package/src/renderers/common/Sampler.js +79 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +19 -0
- package/src/renderers/common/Textures.js +34 -24
- package/src/renderers/common/TimestampQueryPool.js +1 -0
- package/src/renderers/common/Uniform.js +1 -1
- package/src/renderers/common/UniformsGroup.js +14 -18
- package/src/renderers/common/XRManager.js +183 -35
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +6 -6
- package/src/renderers/webgl/WebGLProgram.js +22 -16
- package/src/renderers/webgl/WebGLPrograms.js +8 -6
- package/src/renderers/webgl/WebGLShadowMap.js +14 -3
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +163 -11
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
- package/src/renderers/webgpu/WebGPUBackend.js +505 -143
- package/src/renderers/webgpu/WebGPURenderer.js +7 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
- package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +70 -9
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/ExternalTexture.js +45 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +32 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +31 -3
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
- package/src/core/RenderTargetArray.js +0 -40
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { attribute } from '../core/AttributeNode.js';
|
|
2
2
|
import { cameraViewMatrix } from './Camera.js';
|
|
3
3
|
import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
|
|
4
|
-
import { mat3, vec3, Fn
|
|
4
|
+
import { mat3, vec3, Fn } from '../tsl/TSLBase.js';
|
|
5
5
|
import { positionView } from './Position.js';
|
|
6
|
-
import {
|
|
6
|
+
import { directionToFaceDirection } from '../display/FrontFacingNode.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* TSL object that represents the normal attribute of the current rendered object.
|
|
9
|
+
* TSL object that represents the normal attribute of the current rendered object in local space.
|
|
10
10
|
*
|
|
11
11
|
* @tsl
|
|
12
12
|
* @type {Node<vec3>}
|
|
@@ -14,7 +14,7 @@ import { faceDirection } from '../display/FrontFacingNode.js';
|
|
|
14
14
|
export const normalGeometry = /*@__PURE__*/ attribute( 'normal', 'vec3' );
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
* TSL object that represents the vertex normal
|
|
17
|
+
* TSL object that represents the vertex normal of the current rendered object in local space.
|
|
18
18
|
*
|
|
19
19
|
* @tsl
|
|
20
20
|
* @type {Node<vec3>}
|
|
@@ -34,7 +34,7 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
34
34
|
}, 'vec3' ).once() )().toVar( 'normalLocal' );
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
|
-
* TSL object that represents the flat vertex normal
|
|
37
|
+
* TSL object that represents the flat vertex normal of the current rendered object in view space.
|
|
38
38
|
*
|
|
39
39
|
* @tsl
|
|
40
40
|
* @type {Node<vec3>}
|
|
@@ -42,12 +42,12 @@ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
42
42
|
export const normalFlat = /*@__PURE__*/ positionView.dFdx().cross( positionView.dFdy() ).normalize().toVar( 'normalFlat' );
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
|
-
* TSL object that represents the vertex normal
|
|
45
|
+
* TSL object that represents the vertex normal of the current rendered object in view space.
|
|
46
46
|
*
|
|
47
47
|
* @tsl
|
|
48
48
|
* @type {Node<vec3>}
|
|
49
49
|
*/
|
|
50
|
-
export const
|
|
50
|
+
export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
51
51
|
|
|
52
52
|
let node;
|
|
53
53
|
|
|
@@ -57,57 +57,99 @@ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
|
57
57
|
|
|
58
58
|
} else {
|
|
59
59
|
|
|
60
|
-
node =
|
|
60
|
+
node = transformNormalToView( normalLocal ).toVarying( 'v_normalViewGeometry' ).normalize();
|
|
61
61
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
return node;
|
|
65
65
|
|
|
66
|
-
}, 'vec3' ).once() )().toVar( '
|
|
66
|
+
}, 'vec3' ).once() )().toVar( 'normalViewGeometry' );
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
|
-
* TSL object that represents the vertex normal
|
|
69
|
+
* TSL object that represents the vertex normal of the current rendered object in world space.
|
|
70
70
|
*
|
|
71
71
|
* @tsl
|
|
72
72
|
* @type {Node<vec3>}
|
|
73
73
|
*/
|
|
74
|
-
export const
|
|
74
|
+
export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
75
|
+
|
|
76
|
+
let normal = normalViewGeometry.transformDirection( cameraViewMatrix );
|
|
77
|
+
|
|
78
|
+
if ( builder.material.flatShading !== true ) {
|
|
79
|
+
|
|
80
|
+
normal = normal.toVarying( 'v_normalWorldGeometry' );
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return normal.normalize().toVar( 'normalWorldGeometry' );
|
|
85
|
+
|
|
86
|
+
}, 'vec3' ).once() )();
|
|
75
87
|
|
|
76
88
|
/**
|
|
77
|
-
* TSL object that represents the
|
|
89
|
+
* TSL object that represents the vertex normal of the current rendered object in view space.
|
|
78
90
|
*
|
|
79
91
|
* @tsl
|
|
80
92
|
* @type {Node<vec3>}
|
|
81
93
|
*/
|
|
82
|
-
export const
|
|
94
|
+
export const normalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, material, context } ) => {
|
|
95
|
+
|
|
96
|
+
let node;
|
|
97
|
+
|
|
98
|
+
if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
|
|
99
|
+
|
|
100
|
+
node = normalViewGeometry;
|
|
101
|
+
|
|
102
|
+
if ( material.flatShading !== true ) {
|
|
103
|
+
|
|
104
|
+
node = directionToFaceDirection( node );
|
|
105
|
+
|
|
106
|
+
}
|
|
83
107
|
|
|
84
|
-
|
|
108
|
+
} else {
|
|
109
|
+
|
|
110
|
+
// Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
|
|
85
111
|
|
|
86
|
-
|
|
112
|
+
node = context.setupNormal().context( { getUV: null } );
|
|
87
113
|
|
|
88
|
-
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return node;
|
|
117
|
+
|
|
118
|
+
}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'normalView' );
|
|
89
119
|
|
|
90
120
|
/**
|
|
91
|
-
* TSL object that represents the
|
|
121
|
+
* TSL object that represents the vertex normal of the current rendered object in world space.
|
|
92
122
|
*
|
|
93
123
|
* @tsl
|
|
94
124
|
* @type {Node<vec3>}
|
|
95
125
|
*/
|
|
96
|
-
export const
|
|
126
|
+
export const normalWorld = /*@__PURE__*/ normalView.transformDirection( cameraViewMatrix ).toVar( 'normalWorld' );
|
|
97
127
|
|
|
98
128
|
/**
|
|
99
|
-
* TSL object that represents the
|
|
129
|
+
* TSL object that represents the clearcoat vertex normal of the current rendered object in view space.
|
|
100
130
|
*
|
|
101
131
|
* @tsl
|
|
102
132
|
* @type {Node<vec3>}
|
|
103
133
|
*/
|
|
104
|
-
export const
|
|
134
|
+
export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context } ) => {
|
|
135
|
+
|
|
136
|
+
let node;
|
|
137
|
+
|
|
138
|
+
if ( subBuildFn === 'NORMAL' || subBuildFn === 'VERTEX' ) {
|
|
105
139
|
|
|
106
|
-
|
|
140
|
+
node = normalView;
|
|
141
|
+
|
|
142
|
+
} else {
|
|
107
143
|
|
|
108
|
-
|
|
144
|
+
// Use getUV context to avoid side effects from nodes overwriting getUV in the context (e.g. EnvironmentNode)
|
|
109
145
|
|
|
110
|
-
|
|
146
|
+
node = context.setupClearcoatNormal().context( { getUV: null } );
|
|
147
|
+
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return node;
|
|
151
|
+
|
|
152
|
+
}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'clearcoatNormalView' );
|
|
111
153
|
|
|
112
154
|
/**
|
|
113
155
|
* Transforms the normal with the given matrix.
|
|
@@ -139,7 +181,7 @@ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorld
|
|
|
139
181
|
*/
|
|
140
182
|
export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
|
|
141
183
|
|
|
142
|
-
const modelNormalViewMatrix = builder.renderer.
|
|
184
|
+
const modelNormalViewMatrix = builder.renderer.overrideNodes.modelNormalViewMatrix;
|
|
143
185
|
|
|
144
186
|
if ( modelNormalViewMatrix !== null ) {
|
|
145
187
|
|
|
@@ -154,3 +196,47 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
|
|
|
154
196
|
return cameraViewMatrix.transformDirection( transformedNormal );
|
|
155
197
|
|
|
156
198
|
} );
|
|
199
|
+
|
|
200
|
+
// Deprecated
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* TSL object that represents the transformed vertex normal of the current rendered object in view space.
|
|
204
|
+
*
|
|
205
|
+
* @tsl
|
|
206
|
+
* @type {Node<vec3>}
|
|
207
|
+
* @deprecated since r178. Use `normalView` instead.
|
|
208
|
+
*/
|
|
209
|
+
export const transformedNormalView = ( Fn( () => { // @deprecated, r177
|
|
210
|
+
|
|
211
|
+
console.warn( 'THREE.TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
|
|
212
|
+
return normalView;
|
|
213
|
+
|
|
214
|
+
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* TSL object that represents the transformed vertex normal of the current rendered object in world space.
|
|
218
|
+
*
|
|
219
|
+
* @tsl
|
|
220
|
+
* @type {Node<vec3>}
|
|
221
|
+
* @deprecated since r178. Use `normalWorld` instead.
|
|
222
|
+
*/
|
|
223
|
+
export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
|
|
224
|
+
|
|
225
|
+
console.warn( 'THREE.TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
|
|
226
|
+
return normalWorld;
|
|
227
|
+
|
|
228
|
+
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* TSL object that represents the transformed clearcoat vertex normal of the current rendered object in view space.
|
|
232
|
+
*
|
|
233
|
+
* @tsl
|
|
234
|
+
* @type {Node<vec3>}
|
|
235
|
+
* @deprecated since r178. Use `clearcoatNormalView` instead.
|
|
236
|
+
*/
|
|
237
|
+
export const transformedClearcoatNormalView = ( Fn( () => { // @deprecated, r177
|
|
238
|
+
|
|
239
|
+
console.warn( 'THREE.TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
|
|
240
|
+
return clearcoatNormalView;
|
|
241
|
+
|
|
242
|
+
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
@@ -64,10 +64,9 @@ class Object3DNode extends Node {
|
|
|
64
64
|
/**
|
|
65
65
|
* Holds the value of the node as a uniform.
|
|
66
66
|
*
|
|
67
|
-
* @private
|
|
68
67
|
* @type {UniformNode}
|
|
69
68
|
*/
|
|
70
|
-
this.
|
|
69
|
+
this.uniformNode = new UniformNode( null );
|
|
71
70
|
|
|
72
71
|
}
|
|
73
72
|
|
|
@@ -104,7 +103,7 @@ class Object3DNode extends Node {
|
|
|
104
103
|
update( frame ) {
|
|
105
104
|
|
|
106
105
|
const object = this.object3d;
|
|
107
|
-
const uniformNode = this.
|
|
106
|
+
const uniformNode = this.uniformNode;
|
|
108
107
|
const scope = this.scope;
|
|
109
108
|
|
|
110
109
|
if ( scope === Object3DNode.WORLD_MATRIX ) {
|
|
@@ -165,19 +164,19 @@ class Object3DNode extends Node {
|
|
|
165
164
|
|
|
166
165
|
if ( scope === Object3DNode.WORLD_MATRIX ) {
|
|
167
166
|
|
|
168
|
-
this.
|
|
167
|
+
this.uniformNode.nodeType = 'mat4';
|
|
169
168
|
|
|
170
169
|
} else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {
|
|
171
170
|
|
|
172
|
-
this.
|
|
171
|
+
this.uniformNode.nodeType = 'vec3';
|
|
173
172
|
|
|
174
173
|
} else if ( scope === Object3DNode.RADIUS ) {
|
|
175
174
|
|
|
176
|
-
this.
|
|
175
|
+
this.uniformNode.nodeType = 'float';
|
|
177
176
|
|
|
178
177
|
}
|
|
179
178
|
|
|
180
|
-
return this.
|
|
179
|
+
return this.uniformNode.build( builder );
|
|
181
180
|
|
|
182
181
|
}
|
|
183
182
|
|
|
@@ -264,6 +263,6 @@ export const objectViewPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3
|
|
|
264
263
|
* @tsl
|
|
265
264
|
* @function
|
|
266
265
|
* @param {?Object3D} [object3d] - The 3D object.
|
|
267
|
-
* @returns {Object3DNode<
|
|
266
|
+
* @returns {Object3DNode<float>}
|
|
268
267
|
*/
|
|
269
268
|
export const objectRadius = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.RADIUS ).setParameterLength( 1 );
|
|
@@ -33,7 +33,11 @@ export const positionPrevious = /*@__PURE__*/ positionGeometry.toVarying( 'posit
|
|
|
33
33
|
* @tsl
|
|
34
34
|
* @type {VaryingNode<vec3>}
|
|
35
35
|
*/
|
|
36
|
-
export const positionWorld = /*@__PURE__*/
|
|
36
|
+
export const positionWorld = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
37
|
+
|
|
38
|
+
return modelWorldMatrix.mul( positionLocal ).xyz.toVarying( builder.getSubBuildProperty( 'v_positionWorld' ) );
|
|
39
|
+
|
|
40
|
+
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
37
41
|
|
|
38
42
|
/**
|
|
39
43
|
* TSL object that represents the position world direction of the current rendered object.
|
|
@@ -41,7 +45,13 @@ export const positionWorld = /*@__PURE__*/ modelWorldMatrix.mul( positionLocal )
|
|
|
41
45
|
* @tsl
|
|
42
46
|
* @type {Node<vec3>}
|
|
43
47
|
*/
|
|
44
|
-
export const positionWorldDirection = /*@__PURE__*/
|
|
48
|
+
export const positionWorldDirection = /*@__PURE__*/ ( Fn( () => {
|
|
49
|
+
|
|
50
|
+
const vertexPWD = positionLocal.transformDirection( modelWorldMatrix ).toVarying( 'v_positionWorldDirection' );
|
|
51
|
+
|
|
52
|
+
return vertexPWD.normalize().toVar( 'positionWorldDirection' );
|
|
53
|
+
|
|
54
|
+
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
45
55
|
|
|
46
56
|
/**
|
|
47
57
|
* TSL object that represents the vertex position in view space of the current rendered object.
|
|
@@ -51,9 +61,9 @@ export const positionWorldDirection = /*@__PURE__*/ positionLocal.transformDirec
|
|
|
51
61
|
*/
|
|
52
62
|
export const positionView = /*@__PURE__*/ ( Fn( ( builder ) => {
|
|
53
63
|
|
|
54
|
-
return builder.context.setupPositionView();
|
|
64
|
+
return builder.context.setupPositionView().toVarying( 'v_positionView' );
|
|
55
65
|
|
|
56
|
-
}, 'vec3' ).once(
|
|
66
|
+
}, 'vec3' ).once( [ 'POSITION' ] ) )();
|
|
57
67
|
|
|
58
68
|
/**
|
|
59
69
|
* TSL object that represents the position view direction of the current rendered object.
|
|
@@ -294,7 +294,7 @@ class ReferenceBaseNode extends Node {
|
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
/**
|
|
297
|
-
* Overwritten to
|
|
297
|
+
* Overwritten to update the internal uniform value.
|
|
298
298
|
*
|
|
299
299
|
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
300
300
|
*/
|
|
@@ -216,12 +216,12 @@ class ReferenceNode extends Node {
|
|
|
216
216
|
}
|
|
217
217
|
|
|
218
218
|
/**
|
|
219
|
-
* Sets the
|
|
219
|
+
* Sets the name for the internal uniform.
|
|
220
220
|
*
|
|
221
221
|
* @param {string} name - The label to set.
|
|
222
222
|
* @return {ReferenceNode} A reference to this node.
|
|
223
223
|
*/
|
|
224
|
-
|
|
224
|
+
setName( name ) {
|
|
225
225
|
|
|
226
226
|
this.name = name;
|
|
227
227
|
|
|
@@ -229,6 +229,21 @@ class ReferenceNode extends Node {
|
|
|
229
229
|
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
+
/**
|
|
233
|
+
* Sets the label for the internal uniform.
|
|
234
|
+
*
|
|
235
|
+
* @deprecated
|
|
236
|
+
* @param {string} name - The label to set.
|
|
237
|
+
* @return {ReferenceNode} A reference to this node.
|
|
238
|
+
*/
|
|
239
|
+
label( name ) {
|
|
240
|
+
|
|
241
|
+
console.warn( 'THREE.TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
|
|
242
|
+
|
|
243
|
+
return this.setName( name );
|
|
244
|
+
|
|
245
|
+
}
|
|
246
|
+
|
|
232
247
|
/**
|
|
233
248
|
* Sets the node type which automatically defines the internal
|
|
234
249
|
* uniform type.
|
|
@@ -267,7 +282,7 @@ class ReferenceNode extends Node {
|
|
|
267
282
|
|
|
268
283
|
}
|
|
269
284
|
|
|
270
|
-
if ( this.name !== null ) node.
|
|
285
|
+
if ( this.name !== null ) node.setName( this.name );
|
|
271
286
|
|
|
272
287
|
this.node = node.getSelf();
|
|
273
288
|
|
|
@@ -345,7 +360,7 @@ class ReferenceNode extends Node {
|
|
|
345
360
|
}
|
|
346
361
|
|
|
347
362
|
/**
|
|
348
|
-
* Overwritten to
|
|
363
|
+
* Overwritten to update the internal uniform value.
|
|
349
364
|
*
|
|
350
365
|
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
351
366
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cameraViewMatrix } from './Camera.js';
|
|
2
|
-
import {
|
|
2
|
+
import { normalView } from './Normal.js';
|
|
3
3
|
import { positionViewDirection } from './Position.js';
|
|
4
4
|
import { materialRefractionRatio } from './MaterialProperties.js';
|
|
5
5
|
|
|
@@ -9,7 +9,7 @@ import { materialRefractionRatio } from './MaterialProperties.js';
|
|
|
9
9
|
* @tsl
|
|
10
10
|
* @type {Node<vec3>}
|
|
11
11
|
*/
|
|
12
|
-
export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect(
|
|
12
|
+
export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect( normalView );
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* The refract vector in view space.
|
|
@@ -17,7 +17,7 @@ export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect(
|
|
|
17
17
|
* @tsl
|
|
18
18
|
* @type {Node<vec3>}
|
|
19
19
|
*/
|
|
20
|
-
export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract(
|
|
20
|
+
export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract( normalView, materialRefractionRatio );
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Used for sampling cube maps when using cube reflection mapping.
|
|
@@ -78,7 +78,7 @@ class SceneNode extends Node {
|
|
|
78
78
|
|
|
79
79
|
} else if ( scope === SceneNode.BACKGROUND_ROTATION ) {
|
|
80
80
|
|
|
81
|
-
output = uniform( 'mat4' ).
|
|
81
|
+
output = uniform( 'mat4' ).setName( 'backgroundRotation' ).setGroup( renderGroup ).onRenderUpdate( () => {
|
|
82
82
|
|
|
83
83
|
const background = scene.background;
|
|
84
84
|
|
|
@@ -178,7 +178,7 @@ class SkinningNode extends Node {
|
|
|
178
178
|
}
|
|
179
179
|
|
|
180
180
|
/**
|
|
181
|
-
*
|
|
181
|
+
* Computes the transformed/skinned vertex position of the previous frame.
|
|
182
182
|
*
|
|
183
183
|
* @param {NodeBuilder} builder - The current node builder.
|
|
184
184
|
* @return {Node<vec3>} The skinned position from the previous frame.
|
|
@@ -200,7 +200,8 @@ class SkinningNode extends Node {
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
/**
|
|
203
|
-
* Returns `true` if bone matrices from the previous frame are required.
|
|
203
|
+
* Returns `true` if bone matrices from the previous frame are required. Relevant
|
|
204
|
+
* when computing motion vectors with {@link VelocityNode}.
|
|
204
205
|
*
|
|
205
206
|
* @param {NodeBuilder} builder - The current node builder.
|
|
206
207
|
* @return {boolean} Whether bone matrices from the previous frame are required or not.
|
|
@@ -60,6 +60,12 @@ class StorageBufferNode extends BufferNode {
|
|
|
60
60
|
nodeType = 'struct';
|
|
61
61
|
structTypeNode = bufferType.layout;
|
|
62
62
|
|
|
63
|
+
if ( value.isStorageBufferAttribute || value.isStorageInstancedBufferAttribute ) {
|
|
64
|
+
|
|
65
|
+
bufferCount = value.count;
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
63
69
|
} else if ( bufferType === null && ( value.isStorageBufferAttribute || value.isStorageInstancedBufferAttribute ) ) {
|
|
64
70
|
|
|
65
71
|
nodeType = getTypeFromLength( value.itemSize );
|
|
@@ -329,6 +335,25 @@ class StorageBufferNode extends BufferNode {
|
|
|
329
335
|
|
|
330
336
|
}
|
|
331
337
|
|
|
338
|
+
/**
|
|
339
|
+
* Returns the type of a member of the struct.
|
|
340
|
+
*
|
|
341
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
342
|
+
* @param {string} name - The name of the member.
|
|
343
|
+
* @return {string} The type of the member.
|
|
344
|
+
*/
|
|
345
|
+
getMemberType( builder, name ) {
|
|
346
|
+
|
|
347
|
+
if ( this.structTypeNode !== null ) {
|
|
348
|
+
|
|
349
|
+
return this.structTypeNode.getMemberType( builder, name );
|
|
350
|
+
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
return 'void';
|
|
354
|
+
|
|
355
|
+
}
|
|
356
|
+
|
|
332
357
|
/**
|
|
333
358
|
* Generates the code snippet of the storage buffer node.
|
|
334
359
|
*
|
|
@@ -98,6 +98,8 @@ class StorageTextureNode extends TextureNode {
|
|
|
98
98
|
const properties = builder.getNodeProperties( this );
|
|
99
99
|
properties.storeNode = this.storeNode;
|
|
100
100
|
|
|
101
|
+
return properties;
|
|
102
|
+
|
|
101
103
|
}
|
|
102
104
|
|
|
103
105
|
/**
|
|
@@ -181,18 +183,27 @@ class StorageTextureNode extends TextureNode {
|
|
|
181
183
|
|
|
182
184
|
const properties = builder.getNodeProperties( this );
|
|
183
185
|
|
|
184
|
-
const { uvNode, storeNode } = properties;
|
|
186
|
+
const { uvNode, storeNode, depthNode } = properties;
|
|
185
187
|
|
|
186
188
|
const textureProperty = super.generate( builder, 'property' );
|
|
187
|
-
const uvSnippet = uvNode.build( builder, 'uvec2' );
|
|
189
|
+
const uvSnippet = uvNode.build( builder, this.value.is3DTexture === true ? 'uvec3' : 'uvec2' );
|
|
188
190
|
const storeSnippet = storeNode.build( builder, 'vec4' );
|
|
191
|
+
const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
|
|
189
192
|
|
|
190
|
-
const snippet = builder.generateTextureStore( builder, textureProperty, uvSnippet, storeSnippet );
|
|
193
|
+
const snippet = builder.generateTextureStore( builder, textureProperty, uvSnippet, depthSnippet, storeSnippet );
|
|
191
194
|
|
|
192
195
|
builder.addLineFlowCode( snippet, this );
|
|
193
196
|
|
|
194
197
|
}
|
|
195
198
|
|
|
199
|
+
clone() {
|
|
200
|
+
|
|
201
|
+
const newNode = super.clone();
|
|
202
|
+
newNode.storeNode = this.storeNode;
|
|
203
|
+
return newNode;
|
|
204
|
+
|
|
205
|
+
}
|
|
206
|
+
|
|
196
207
|
}
|
|
197
208
|
|
|
198
209
|
export default StorageTextureNode;
|
|
@@ -224,7 +235,7 @@ export const textureStore = ( value, uvNode, storeNode ) => {
|
|
|
224
235
|
|
|
225
236
|
const node = storageTexture( value, uvNode, storeNode );
|
|
226
237
|
|
|
227
|
-
if ( storeNode !== null ) node.
|
|
238
|
+
if ( storeNode !== null ) node.toStack();
|
|
228
239
|
|
|
229
240
|
return node;
|
|
230
241
|
|
|
@@ -2,6 +2,8 @@ import { attribute } from '../core/AttributeNode.js';
|
|
|
2
2
|
import { cameraViewMatrix } from './Camera.js';
|
|
3
3
|
import { modelViewMatrix } from './ModelNode.js';
|
|
4
4
|
import { Fn, vec4 } from '../tsl/TSLBase.js';
|
|
5
|
+
import { tangentViewFrame } from './TangentUtils.js';
|
|
6
|
+
import { directionToFaceDirection } from '../display/FrontFacingNode.js';
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* TSL object that represents the tangent attribute of the current rendered object.
|
|
@@ -35,28 +37,34 @@ export const tangentLocal = /*@__PURE__*/ tangentGeometry.xyz.toVar( 'tangentLoc
|
|
|
35
37
|
* @tsl
|
|
36
38
|
* @type {Node<vec3>}
|
|
37
39
|
*/
|
|
38
|
-
export const tangentView = /*@__PURE__*/
|
|
40
|
+
export const tangentView = /*@__PURE__*/ ( Fn( ( { subBuildFn, geometry, material } ) => {
|
|
39
41
|
|
|
40
|
-
|
|
41
|
-
* TSL object that represents the vertex tangent in world space of the current rendered object.
|
|
42
|
-
*
|
|
43
|
-
* @tsl
|
|
44
|
-
* @type {Node<vec3>}
|
|
45
|
-
*/
|
|
46
|
-
export const tangentWorld = /*@__PURE__*/ tangentView.transformDirection( cameraViewMatrix ).toVarying( 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' );
|
|
42
|
+
let node;
|
|
47
43
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
44
|
+
if ( subBuildFn === 'VERTEX' || geometry.hasAttribute( 'tangent' ) ) {
|
|
45
|
+
|
|
46
|
+
node = modelViewMatrix.mul( vec4( tangentLocal, 0 ) ).xyz.toVarying( 'v_tangentView' ).normalize();
|
|
47
|
+
|
|
48
|
+
} else {
|
|
49
|
+
|
|
50
|
+
node = tangentViewFrame;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if ( material.flatShading !== true ) {
|
|
55
|
+
|
|
56
|
+
node = directionToFaceDirection( node );
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return node;
|
|
61
|
+
|
|
62
|
+
}, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'tangentView' );
|
|
55
63
|
|
|
56
64
|
/**
|
|
57
|
-
* TSL object that represents the
|
|
65
|
+
* TSL object that represents the vertex tangent in world space of the current rendered object.
|
|
58
66
|
*
|
|
59
67
|
* @tsl
|
|
60
68
|
* @type {Node<vec3>}
|
|
61
69
|
*/
|
|
62
|
-
export const
|
|
70
|
+
export const tangentWorld = /*@__PURE__*/ tangentView.transformDirection( cameraViewMatrix ).toVarying( 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' );
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { uv as getUV } from './UV.js';
|
|
2
|
+
import { positionView } from './Position.js';
|
|
3
|
+
import { normalView } from './Normal.js';
|
|
4
|
+
|
|
5
|
+
// Normal Mapping Without Precomputed Tangents
|
|
6
|
+
// http://www.thetenthplanet.de/archives/1180
|
|
7
|
+
|
|
8
|
+
const uv = getUV();
|
|
9
|
+
|
|
10
|
+
const q0 = positionView.dFdx();
|
|
11
|
+
const q1 = positionView.dFdy();
|
|
12
|
+
const st0 = uv.dFdx();
|
|
13
|
+
const st1 = uv.dFdy();
|
|
14
|
+
|
|
15
|
+
const N = normalView;
|
|
16
|
+
|
|
17
|
+
const q1perp = q1.cross( N );
|
|
18
|
+
const q0perp = N.cross( q0 );
|
|
19
|
+
|
|
20
|
+
const T = q1perp.mul( st0.x ).add( q0perp.mul( st1.x ) );
|
|
21
|
+
const B = q1perp.mul( st0.y ).add( q0perp.mul( st1.y ) );
|
|
22
|
+
|
|
23
|
+
const det = T.dot( T ).max( B.dot( B ) );
|
|
24
|
+
const scale = det.equal( 0.0 ).select( 0.0, det.inverseSqrt() );
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Tangent vector in view space, computed dynamically from geometry and UV derivatives.
|
|
28
|
+
* Useful for normal mapping without precomputed tangents.
|
|
29
|
+
*
|
|
30
|
+
* Reference: http://www.thetenthplanet.de/archives/1180
|
|
31
|
+
*
|
|
32
|
+
* @tsl
|
|
33
|
+
* @type {Node<vec3>}
|
|
34
|
+
*/
|
|
35
|
+
export const tangentViewFrame = /*@__PURE__*/ T.mul( scale ).toVar( 'tangentViewFrame' );
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Bitangent vector in view space, computed dynamically from geometry and UV derivatives.
|
|
39
|
+
* Complements the tangentViewFrame for constructing the tangent space basis.
|
|
40
|
+
*
|
|
41
|
+
* Reference: http://www.thetenthplanet.de/archives/1180
|
|
42
|
+
*
|
|
43
|
+
* @tsl
|
|
44
|
+
* @type {Node<vec3>}
|
|
45
|
+
*/
|
|
46
|
+
export const bitangentViewFrame = /*@__PURE__*/ B.mul( scale ).toVar( 'bitangentViewFrame' );
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { add, mul, div } from '../math/OperatorNode.js';
|
|
2
2
|
import { floor, ceil, fract, pow } from '../math/MathNode.js';
|
|
3
|
-
import { Fn,
|
|
3
|
+
import { Fn, vec2, vec4, int } from '../tsl/TSLBase.js';
|
|
4
|
+
import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
|
|
4
5
|
|
|
5
6
|
// Mipped Bicubic Texture Filtering by N8
|
|
6
7
|
// https://www.shadertoy.com/view/Dl2SDW
|
|
@@ -57,10 +58,10 @@ const bicubic = ( textureNode, texelSize, lod ) => {
|
|
|
57
58
|
* @tsl
|
|
58
59
|
* @function
|
|
59
60
|
* @param {TextureNode} textureNode - The texture node that should be filtered.
|
|
60
|
-
* @param {Node<float>}
|
|
61
|
+
* @param {Node<float>} lodNode - Defines the LOD to sample from.
|
|
61
62
|
* @return {Node} The filtered texture sample.
|
|
62
63
|
*/
|
|
63
|
-
export const
|
|
64
|
+
export const textureBicubicLevel = /*@__PURE__*/ Fn( ( [ textureNode, lodNode ] ) => {
|
|
64
65
|
|
|
65
66
|
const fLodSize = vec2( textureNode.size( int( lodNode ) ) );
|
|
66
67
|
const cLodSize = vec2( textureNode.size( int( lodNode.add( 1.0 ) ) ) );
|
|
@@ -72,3 +73,20 @@ export const textureBicubic = /*@__PURE__*/ Fn( ( [ textureNode, lodNode = float
|
|
|
72
73
|
return fract( lodNode ).mix( fSample, cSample );
|
|
73
74
|
|
|
74
75
|
} );
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Applies mipped bicubic texture filtering to the given texture node.
|
|
79
|
+
*
|
|
80
|
+
* @tsl
|
|
81
|
+
* @function
|
|
82
|
+
* @param {TextureNode} textureNode - The texture node that should be filtered.
|
|
83
|
+
* @param {Node<float>} [strength] - Defines the strength of the bicubic filtering.
|
|
84
|
+
* @return {Node} The filtered texture sample.
|
|
85
|
+
*/
|
|
86
|
+
export const textureBicubic = /*@__PURE__*/ Fn( ( [ textureNode, strength ] ) => {
|
|
87
|
+
|
|
88
|
+
const lod = strength.mul( maxMipLevel( textureNode ) );
|
|
89
|
+
|
|
90
|
+
return textureBicubicLevel( textureNode, lod );
|
|
91
|
+
|
|
92
|
+
} );
|