@plastic-software/three 0.175.13 → 0.178.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 +3 -3
- package/build/three.cjs +7747 -6792
- package/build/three.core.js +7371 -6576
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +190 -30
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +19 -11
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +4989 -2235
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +5082 -2469
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -1
- 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 +1 -0
- 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 +18 -4
- 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 +49 -35
- 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 +12 -10
- 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 +2 -1
- 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 +7 -0
- 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/lighting/TiledLighting.js +1 -0
- package/examples/jsm/lights/LightProbeGenerator.js +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +1 -0
- package/examples/jsm/loaders/USDZLoader.js +1 -0
- 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/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/Timer.js +2 -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 +1 -0
- 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 +20 -17
- 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 +139 -12
- 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 +4 -3
- 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 +5 -2
- 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 +2 -1
- 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 +4 -1
- 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 +226 -87
- 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 +1 -0
- 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 +4 -29
- 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 +5 -4
- 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 +4 -3
- 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 +1 -1
- package/src/Three.TSL.js +18 -10
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/audio/AudioListener.js +13 -10
- package/src/cameras/ArrayCamera.js +9 -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/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/SkeletonHelper.js +1 -1
- package/src/lights/LightShadow.js +14 -0
- 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 +2 -2
- package/src/loaders/ImageBitmapLoader.js +25 -9
- package/src/loaders/ImageLoader.js +55 -8
- 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/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 +105 -19
- package/src/materials/nodes/manager/NodeMaterialObserver.js +20 -2
- 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 +6 -1
- package/src/math/FrustumArray.js +253 -0
- package/src/math/Quaternion.js +1 -1
- package/src/math/Ray.js +2 -0
- package/src/math/Sphere.js +28 -0
- package/src/nodes/Nodes.js +2 -3
- package/src/nodes/TSL.js +5 -3
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +54 -26
- package/src/nodes/accessors/Camera.js +31 -4
- 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 +102 -16
- 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 +1 -1
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SkinningNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +25 -0
- package/src/nodes/accessors/StorageTextureNode.js +14 -3
- 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 +59 -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/AssignNode.js +27 -5
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +7 -3
- package/src/nodes/core/Node.js +69 -20
- package/src/nodes/core/NodeBuilder.js +248 -29
- package/src/nodes/core/NodeUtils.js +42 -0
- package/src/nodes/core/NodeVarying.js +19 -1
- package/src/nodes/core/PropertyNode.js +8 -12
- package/src/nodes/core/StackNode.js +129 -26
- package/src/nodes/core/StructTypeNode.js +26 -4
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/VarNode.js +11 -2
- 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 +18 -19
- package/src/nodes/display/ScreenNode.js +0 -26
- 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 +14 -14
- 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 +1 -1
- 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 +78 -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/lib/mx_noise.js +1 -1
- package/src/nodes/math/ConditionalNode.js +0 -19
- package/src/nodes/math/MathNode.js +68 -21
- package/src/nodes/math/OperatorNode.js +108 -98
- package/src/nodes/shapes/Shapes.js +5 -4
- package/src/nodes/tsl/TSLBase.js +1 -0
- package/src/nodes/tsl/TSLCore.js +160 -65
- package/src/nodes/utils/DebugNode.js +15 -3
- package/src/nodes/utils/Discard.js +2 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/LoopNode.js +64 -34
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/RTTNode.js +13 -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 +16 -4
- 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 +25 -11
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Background.js +13 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/RenderList.js +0 -4
- package/src/renderers/common/RenderObject.js +80 -4
- package/src/renderers/common/Renderer.js +116 -8
- package/src/renderers/common/Storage3DTexture.js +79 -0
- package/src/renderers/common/StorageArrayTexture.js +63 -0
- package/src/renderers/common/Textures.js +15 -21
- 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 +157 -27
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +30 -23
- package/src/renderers/common/nodes/Nodes.js +13 -3
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLPrograms.js +4 -2
- package/src/renderers/webgl/WebGLShadowMap.js +3 -2
- package/src/renderers/webgl/WebGLState.js +4 -4
- package/src/renderers/webgl/WebGLTextures.js +144 -4
- package/src/renderers/webgl/WebGLUtils.js +1 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +244 -87
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +73 -7
- 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 +451 -128
- 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 +86 -33
- 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 +28 -5
- package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +45 -50
- package/src/renderers/webxr/WebXRController.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +2 -1
- package/src/textures/DepthTexture.js +6 -10
- package/src/textures/Source.js +22 -0
- package/src/textures/Texture.js +118 -1
- package/src/textures/VideoTexture.js +1 -1
- 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,6 +1,6 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { select } from '../math/ConditionalNode.js';
|
|
3
|
-
import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
|
|
3
|
+
import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack, nodeObject } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Stack is a helper for Nodes that need to produce stack-based code instead of continuous flow.
|
|
@@ -57,6 +57,16 @@ class StackNode extends Node {
|
|
|
57
57
|
*/
|
|
58
58
|
this._currentCond = null;
|
|
59
59
|
|
|
60
|
+
/**
|
|
61
|
+
* The expression node. Only
|
|
62
|
+
* relevant for Switch/Case.
|
|
63
|
+
*
|
|
64
|
+
* @private
|
|
65
|
+
* @type {Node}
|
|
66
|
+
* @default null
|
|
67
|
+
*/
|
|
68
|
+
this._expressionNode = null;
|
|
69
|
+
|
|
60
70
|
/**
|
|
61
71
|
* This flag can be used for type testing.
|
|
62
72
|
*
|
|
@@ -143,50 +153,143 @@ class StackNode extends Node {
|
|
|
143
153
|
|
|
144
154
|
}
|
|
145
155
|
|
|
146
|
-
|
|
156
|
+
/**
|
|
157
|
+
* Represents a `switch` statement in TSL.
|
|
158
|
+
*
|
|
159
|
+
* @param {any} expression - Represents the expression.
|
|
160
|
+
* @param {Function} method - TSL code which is executed if the condition evaluates to `true`.
|
|
161
|
+
* @return {StackNode} A reference to this stack node.
|
|
162
|
+
*/
|
|
163
|
+
Switch( expression ) {
|
|
147
164
|
|
|
148
|
-
|
|
165
|
+
this._expressionNode = nodeObject( expression );
|
|
149
166
|
|
|
150
|
-
|
|
167
|
+
return this;
|
|
151
168
|
|
|
152
|
-
|
|
169
|
+
}
|
|
153
170
|
|
|
154
|
-
|
|
171
|
+
/**
|
|
172
|
+
* Represents a `case` statement in TSL. The TSL version accepts an arbitrary numbers of values.
|
|
173
|
+
* The last parameter must be the callback method that should be executed in the `true` case.
|
|
174
|
+
*
|
|
175
|
+
* @param {...any} params - The values of the `Case()` statement as well as the callback method.
|
|
176
|
+
* @return {StackNode} A reference to this stack node.
|
|
177
|
+
*/
|
|
178
|
+
Case( ...params ) {
|
|
179
|
+
|
|
180
|
+
const caseNodes = [];
|
|
181
|
+
|
|
182
|
+
// extract case nodes from the parameter list
|
|
183
|
+
|
|
184
|
+
if ( params.length >= 2 ) {
|
|
185
|
+
|
|
186
|
+
for ( let i = 0; i < params.length - 1; i ++ ) {
|
|
187
|
+
|
|
188
|
+
caseNodes.push( this._expressionNode.equal( nodeObject( params[ i ] ) ) );
|
|
189
|
+
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
} else {
|
|
193
|
+
|
|
194
|
+
throw new Error( 'TSL: Invalid parameter length. Case() requires at least two parameters.' );
|
|
155
195
|
|
|
156
196
|
}
|
|
157
197
|
|
|
158
|
-
|
|
198
|
+
// extract method
|
|
199
|
+
|
|
200
|
+
const method = params[ params.length - 1 ];
|
|
201
|
+
const methodNode = new ShaderNode( method );
|
|
159
202
|
|
|
160
|
-
|
|
203
|
+
// chain multiple cases when using Case( 1, 2, 3, () => {} )
|
|
161
204
|
|
|
162
|
-
|
|
205
|
+
let caseNode = caseNodes[ 0 ];
|
|
163
206
|
|
|
164
|
-
|
|
207
|
+
for ( let i = 1; i < caseNodes.length; i ++ ) {
|
|
165
208
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
209
|
+
caseNode = caseNode.or( caseNodes[ i ] );
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// build condition
|
|
214
|
+
|
|
215
|
+
const condNode = select( caseNode, methodNode );
|
|
216
|
+
|
|
217
|
+
if ( this._currentCond === null ) {
|
|
174
218
|
|
|
175
|
-
|
|
176
|
-
|
|
219
|
+
this._currentCond = condNode;
|
|
220
|
+
|
|
221
|
+
return this.add( this._currentCond );
|
|
222
|
+
|
|
223
|
+
} else {
|
|
224
|
+
|
|
225
|
+
this._currentCond.elseNode = condNode;
|
|
226
|
+
this._currentCond = condNode;
|
|
227
|
+
|
|
228
|
+
return this;
|
|
229
|
+
|
|
230
|
+
}
|
|
177
231
|
|
|
178
232
|
}
|
|
179
233
|
|
|
180
234
|
/**
|
|
181
|
-
*
|
|
235
|
+
* Represents the default code block of a Switch/Case statement.
|
|
182
236
|
*
|
|
183
|
-
* @param {
|
|
184
|
-
* @
|
|
237
|
+
* @param {Function} method - TSL code which is executed in the `else` case.
|
|
238
|
+
* @return {StackNode} A reference to this stack node.
|
|
185
239
|
*/
|
|
186
|
-
|
|
240
|
+
Default( method ) {
|
|
241
|
+
|
|
242
|
+
this.Else( method );
|
|
243
|
+
|
|
244
|
+
return this;
|
|
245
|
+
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
build( builder, ...params ) {
|
|
249
|
+
|
|
250
|
+
const previousBuildStack = builder.currentStack;
|
|
251
|
+
const previousStack = getCurrentStack();
|
|
252
|
+
|
|
253
|
+
setCurrentStack( this );
|
|
254
|
+
|
|
255
|
+
builder.currentStack = this;
|
|
256
|
+
|
|
257
|
+
const buildStage = builder.buildStage;
|
|
258
|
+
|
|
259
|
+
for ( const node of this.nodes ) {
|
|
260
|
+
|
|
261
|
+
if ( buildStage === 'setup' ) {
|
|
262
|
+
|
|
263
|
+
node.build( builder );
|
|
264
|
+
|
|
265
|
+
} else if ( buildStage === 'analyze' ) {
|
|
266
|
+
|
|
267
|
+
node.build( builder, this );
|
|
268
|
+
|
|
269
|
+
} else if ( buildStage === 'generate' ) {
|
|
270
|
+
|
|
271
|
+
const stages = builder.getDataFromNode( node, 'any' ).stages;
|
|
272
|
+
const parents = stages && stages[ builder.shaderStage ];
|
|
273
|
+
|
|
274
|
+
if ( node.isVarNode && parents && parents.length === 1 && parents[ 0 ] && parents[ 0 ].isStackNode ) {
|
|
275
|
+
|
|
276
|
+
continue; // skip var nodes that are only used in .toVarying()
|
|
277
|
+
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
node.build( builder, 'void' );
|
|
281
|
+
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
const result = this.outputNode ? this.outputNode.build( builder, ...params ) : super.build( builder, ...params );
|
|
287
|
+
|
|
288
|
+
setCurrentStack( previousStack );
|
|
289
|
+
|
|
290
|
+
builder.currentStack = previousBuildStack;
|
|
187
291
|
|
|
188
|
-
|
|
189
|
-
return this.ElseIf( ...params );
|
|
292
|
+
return result;
|
|
190
293
|
|
|
191
294
|
}
|
|
192
295
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import Node from './Node.js';
|
|
3
|
-
import {
|
|
3
|
+
import { getByteBoundaryFromType, getMemoryLengthFromType } from './NodeUtils.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Generates a layout for struct members.
|
|
@@ -86,15 +86,37 @@ class StructTypeNode extends Node {
|
|
|
86
86
|
*/
|
|
87
87
|
getLength() {
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
const GPU_CHUNK_BYTES = 8;
|
|
90
|
+
const BYTES_PER_ELEMENT = Float32Array.BYTES_PER_ELEMENT;
|
|
91
|
+
|
|
92
|
+
let offset = 0; // global buffer offset in bytes
|
|
90
93
|
|
|
91
94
|
for ( const member of this.membersLayout ) {
|
|
92
95
|
|
|
93
|
-
|
|
96
|
+
const type = member.type;
|
|
97
|
+
|
|
98
|
+
const itemSize = getMemoryLengthFromType( type ) * BYTES_PER_ELEMENT;
|
|
99
|
+
const boundary = getByteBoundaryFromType( type );
|
|
100
|
+
|
|
101
|
+
const chunkOffset = offset % GPU_CHUNK_BYTES; // offset in the current chunk
|
|
102
|
+
const chunkPadding = chunkOffset % boundary; // required padding to match boundary
|
|
103
|
+
const chunkStart = chunkOffset + chunkPadding; // start position in the current chunk for the data
|
|
104
|
+
|
|
105
|
+
offset += chunkPadding;
|
|
106
|
+
|
|
107
|
+
// Check for chunk overflow
|
|
108
|
+
if ( chunkStart !== 0 && ( GPU_CHUNK_BYTES - chunkStart ) < itemSize ) {
|
|
109
|
+
|
|
110
|
+
// Add padding to the end of the chunk
|
|
111
|
+
offset += ( GPU_CHUNK_BYTES - chunkStart );
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
offset += itemSize;
|
|
94
116
|
|
|
95
117
|
}
|
|
96
118
|
|
|
97
|
-
return
|
|
119
|
+
return ( Math.ceil( offset / GPU_CHUNK_BYTES ) * GPU_CHUNK_BYTES ) / BYTES_PER_ELEMENT;
|
|
98
120
|
|
|
99
121
|
}
|
|
100
122
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import Node from './Node.js';
|
|
2
|
+
import { nodeObject } from '../tsl/TSLCore.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This node is used to build a sub-build in the node system.
|
|
6
|
+
*
|
|
7
|
+
* @augments Node
|
|
8
|
+
* @param {Node} node - The node to be built in the sub-build.
|
|
9
|
+
* @param {string} name - The name of the sub-build.
|
|
10
|
+
* @param {string|null} [nodeType=null] - The type of the node, if known.
|
|
11
|
+
*/
|
|
12
|
+
class SubBuildNode extends Node {
|
|
13
|
+
|
|
14
|
+
static get type() {
|
|
15
|
+
|
|
16
|
+
return 'SubBuild';
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
constructor( node, name, nodeType = null ) {
|
|
21
|
+
|
|
22
|
+
super( nodeType );
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The node to be built in the sub-build.
|
|
26
|
+
*
|
|
27
|
+
* @type {Node}
|
|
28
|
+
*/
|
|
29
|
+
this.node = node;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The name of the sub-build.
|
|
33
|
+
*
|
|
34
|
+
* @type {string}
|
|
35
|
+
*/
|
|
36
|
+
this.name = name;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* This flag can be used for type testing.
|
|
40
|
+
*
|
|
41
|
+
* @type {boolean}
|
|
42
|
+
* @readonly
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
this.isSubBuildNode = true;
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
getNodeType( builder ) {
|
|
50
|
+
|
|
51
|
+
if ( this.nodeType !== null ) return this.nodeType;
|
|
52
|
+
|
|
53
|
+
builder.addSubBuild( this.name );
|
|
54
|
+
|
|
55
|
+
const nodeType = this.node.getNodeType( builder );
|
|
56
|
+
|
|
57
|
+
builder.removeSubBuild();
|
|
58
|
+
|
|
59
|
+
return nodeType;
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
build( builder, ...params ) {
|
|
64
|
+
|
|
65
|
+
builder.addSubBuild( this.name );
|
|
66
|
+
|
|
67
|
+
const data = this.node.build( builder, ...params );
|
|
68
|
+
|
|
69
|
+
builder.removeSubBuild();
|
|
70
|
+
|
|
71
|
+
return data;
|
|
72
|
+
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export default SubBuildNode;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Creates a new sub-build node.
|
|
81
|
+
*
|
|
82
|
+
* @tsl
|
|
83
|
+
* @function
|
|
84
|
+
* @param {Node} node - The node to be built in the sub-build.
|
|
85
|
+
* @param {string} name - The name of the sub-build.
|
|
86
|
+
* @param {string|null} [type=null] - The type of the node, if known.
|
|
87
|
+
* @returns {Node} A node object wrapping the SubBuildNode instance.
|
|
88
|
+
*/
|
|
89
|
+
export const subBuild = ( node, name, type = null ) => nodeObject( new SubBuildNode( nodeObject( node ), name, type ) );
|
|
@@ -72,6 +72,15 @@ class VarNode extends Node {
|
|
|
72
72
|
*/
|
|
73
73
|
this.readOnly = readOnly;
|
|
74
74
|
|
|
75
|
+
/**
|
|
76
|
+
*
|
|
77
|
+
* Add this flag to the node system to indicate that this node require parents.
|
|
78
|
+
*
|
|
79
|
+
* @type {boolean}
|
|
80
|
+
* @default true
|
|
81
|
+
*/
|
|
82
|
+
this.parents = true;
|
|
83
|
+
|
|
75
84
|
}
|
|
76
85
|
|
|
77
86
|
getMemberType( builder, name ) {
|
|
@@ -167,7 +176,7 @@ const createVar = /*@__PURE__*/ nodeProxy( VarNode );
|
|
|
167
176
|
* @param {?string} name - The name of the variable in the shader.
|
|
168
177
|
* @returns {VarNode}
|
|
169
178
|
*/
|
|
170
|
-
export const Var = ( node, name = null ) => createVar( node, name ).
|
|
179
|
+
export const Var = ( node, name = null ) => createVar( node, name ).toStack();
|
|
171
180
|
|
|
172
181
|
/**
|
|
173
182
|
* TSL function for creating a const node.
|
|
@@ -178,7 +187,7 @@ export const Var = ( node, name = null ) => createVar( node, name ).append();
|
|
|
178
187
|
* @param {?string} name - The name of the constant in the shader.
|
|
179
188
|
* @returns {VarNode}
|
|
180
189
|
*/
|
|
181
|
-
export const Const = ( node, name = null ) => createVar( node, name, true ).
|
|
190
|
+
export const Const = ( node, name = null ) => createVar( node, name, true ).toStack();
|
|
182
191
|
|
|
183
192
|
// Method chaining
|
|
184
193
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
2
|
import { NodeShaderStage } from './constants.js';
|
|
3
3
|
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
4
|
+
import { subBuild } from './SubBuildNode.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Class for representing shader varyings as nodes. Varyings are create from
|
|
@@ -55,17 +56,45 @@ class VaryingNode extends Node {
|
|
|
55
56
|
*/
|
|
56
57
|
this.isVaryingNode = true;
|
|
57
58
|
|
|
59
|
+
/**
|
|
60
|
+
* The interpolation type of the varying data.
|
|
61
|
+
*
|
|
62
|
+
* @type {?string}
|
|
63
|
+
* @default null
|
|
64
|
+
*/
|
|
65
|
+
this.interpolationType = null;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The interpolation sampling type of varying data.
|
|
69
|
+
*
|
|
70
|
+
* @type {?string}
|
|
71
|
+
* @default null
|
|
72
|
+
*/
|
|
73
|
+
this.interpolationSampling = null;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* This flag is used for global cache.
|
|
77
|
+
*
|
|
78
|
+
* @type {boolean}
|
|
79
|
+
* @default true
|
|
80
|
+
*/
|
|
81
|
+
this.global = true;
|
|
82
|
+
|
|
58
83
|
}
|
|
59
84
|
|
|
60
85
|
/**
|
|
61
|
-
*
|
|
86
|
+
* Defines the interpolation type of the varying.
|
|
62
87
|
*
|
|
63
|
-
* @param {
|
|
64
|
-
* @
|
|
88
|
+
* @param {string} type - The interpolation type.
|
|
89
|
+
* @param {?string} sampling - The interpolation sampling type
|
|
90
|
+
* @return {VaryingNode} A reference to this node.
|
|
65
91
|
*/
|
|
66
|
-
|
|
92
|
+
setInterpolation( type, sampling = null ) {
|
|
93
|
+
|
|
94
|
+
this.interpolationType = type;
|
|
95
|
+
this.interpolationSampling = sampling;
|
|
67
96
|
|
|
68
|
-
return
|
|
97
|
+
return this;
|
|
69
98
|
|
|
70
99
|
}
|
|
71
100
|
|
|
@@ -99,9 +128,11 @@ class VaryingNode extends Node {
|
|
|
99
128
|
|
|
100
129
|
const name = this.name;
|
|
101
130
|
const type = this.getNodeType( builder );
|
|
131
|
+
const interpolationType = this.interpolationType;
|
|
132
|
+
const interpolationSampling = this.interpolationSampling;
|
|
102
133
|
|
|
103
|
-
properties.varying = varying = builder.getVaryingFromNode( this, name, type );
|
|
104
|
-
properties.node = this.node;
|
|
134
|
+
properties.varying = varying = builder.getVaryingFromNode( this, name, type, interpolationType, interpolationSampling );
|
|
135
|
+
properties.node = subBuild( this.node, 'VERTEX' );
|
|
105
136
|
|
|
106
137
|
}
|
|
107
138
|
|
|
@@ -116,43 +147,33 @@ class VaryingNode extends Node {
|
|
|
116
147
|
|
|
117
148
|
this.setupVarying( builder );
|
|
118
149
|
|
|
150
|
+
builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node );
|
|
151
|
+
|
|
119
152
|
}
|
|
120
153
|
|
|
121
154
|
analyze( builder ) {
|
|
122
155
|
|
|
123
156
|
this.setupVarying( builder );
|
|
124
157
|
|
|
125
|
-
|
|
158
|
+
builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node );
|
|
126
159
|
|
|
127
160
|
}
|
|
128
161
|
|
|
129
162
|
generate( builder ) {
|
|
130
163
|
|
|
164
|
+
const propertyKey = builder.getSubBuildProperty( 'property', builder.currentStack );
|
|
131
165
|
const properties = builder.getNodeProperties( this );
|
|
132
166
|
const varying = this.setupVarying( builder );
|
|
133
167
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
if ( properties.propertyName === undefined || needsReassign ) {
|
|
168
|
+
if ( properties[ propertyKey ] === undefined ) {
|
|
137
169
|
|
|
138
170
|
const type = this.getNodeType( builder );
|
|
139
171
|
const propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );
|
|
140
172
|
|
|
141
173
|
// force node run in vertex stage
|
|
142
|
-
builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX,
|
|
143
|
-
|
|
144
|
-
properties.propertyName = propertyName;
|
|
145
|
-
|
|
146
|
-
if ( needsReassign ) {
|
|
147
|
-
|
|
148
|
-
// once reassign varying in fragment stage
|
|
149
|
-
properties.reassignPosition = false;
|
|
150
|
-
|
|
151
|
-
} else if ( properties.reassignPosition === undefined && builder.context.isPositionNodeInput ) {
|
|
152
|
-
|
|
153
|
-
properties.reassignPosition = true;
|
|
174
|
+
builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, properties.node, type, propertyName );
|
|
154
175
|
|
|
155
|
-
|
|
176
|
+
properties[ propertyKey ] = propertyName;
|
|
156
177
|
|
|
157
178
|
}
|
|
158
179
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Fn, vec4 } from '../tsl/TSLBase.js';
|
|
1
|
+
import { Fn, If, vec4 } from '../tsl/TSLBase.js';
|
|
2
2
|
import { mix, min, step } from '../math/MathNode.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -130,6 +130,47 @@ export const blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
|
130
130
|
]
|
|
131
131
|
} );
|
|
132
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Premultiplies the RGB channels of a color by its alpha channel.
|
|
135
|
+
*
|
|
136
|
+
* This function is useful for converting a non-premultiplied alpha color
|
|
137
|
+
* into a premultiplied alpha format, where the RGB values are scaled
|
|
138
|
+
* by the alpha value. Premultiplied alpha is often used in graphics
|
|
139
|
+
* rendering for certain operations, such as compositing and image processing.
|
|
140
|
+
*
|
|
141
|
+
* @tsl
|
|
142
|
+
* @function
|
|
143
|
+
* @param {Node<vec4>} color - The input color with non-premultiplied alpha.
|
|
144
|
+
* @return {Node<vec4>} The color with premultiplied alpha.
|
|
145
|
+
*/
|
|
146
|
+
export const premultiplyAlpha = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
147
|
+
|
|
148
|
+
return vec4( color.rgb.mul( color.a ), color.a );
|
|
149
|
+
|
|
150
|
+
}, { color: 'vec4', return: 'vec4' } );
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Unpremultiplies the RGB channels of a color by its alpha channel.
|
|
154
|
+
*
|
|
155
|
+
* This function is useful for converting a premultiplied alpha color
|
|
156
|
+
* back into a non-premultiplied alpha format, where the RGB values are
|
|
157
|
+
* divided by the alpha value. Unpremultiplied alpha is often used in graphics
|
|
158
|
+
* rendering for certain operations, such as compositing and image processing.
|
|
159
|
+
*
|
|
160
|
+
* @tsl
|
|
161
|
+
* @function
|
|
162
|
+
* @param {Node<vec4>} color - The input color with premultiplied alpha.
|
|
163
|
+
* @return {Node<vec4>} The color with non-premultiplied alpha.
|
|
164
|
+
*/
|
|
165
|
+
export const unpremultiplyAlpha = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
166
|
+
|
|
167
|
+
If( color.a.equal( 0.0 ), () => vec4( 0.0 ) );
|
|
168
|
+
|
|
169
|
+
return vec4( color.rgb.div( color.a ), color.a );
|
|
170
|
+
|
|
171
|
+
}, { color: 'vec4', return: 'vec4' } );
|
|
172
|
+
|
|
173
|
+
|
|
133
174
|
// Deprecated
|
|
134
175
|
|
|
135
176
|
/**
|
|
@@ -126,36 +126,16 @@ class ColorSpaceNode extends TempNode {
|
|
|
126
126
|
|
|
127
127
|
export default ColorSpaceNode;
|
|
128
128
|
|
|
129
|
-
/**
|
|
130
|
-
* TSL function for converting a given color node to the current output color space.
|
|
131
|
-
*
|
|
132
|
-
* @tsl
|
|
133
|
-
* @function
|
|
134
|
-
* @param {Node} node - Represents the node to convert.
|
|
135
|
-
* @returns {ColorSpaceNode}
|
|
136
|
-
*/
|
|
137
|
-
export const toOutputColorSpace = ( node ) => nodeObject( new ColorSpaceNode( nodeObject( node ), WORKING_COLOR_SPACE, OUTPUT_COLOR_SPACE ) );
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* TSL function for converting a given color node to the current working color space.
|
|
141
|
-
*
|
|
142
|
-
* @tsl
|
|
143
|
-
* @function
|
|
144
|
-
* @param {Node} node - Represents the node to convert.
|
|
145
|
-
* @returns {ColorSpaceNode}
|
|
146
|
-
*/
|
|
147
|
-
export const toWorkingColorSpace = ( node ) => nodeObject( new ColorSpaceNode( nodeObject( node ), OUTPUT_COLOR_SPACE, WORKING_COLOR_SPACE ) );
|
|
148
|
-
|
|
149
129
|
/**
|
|
150
130
|
* TSL function for converting a given color node from the current working color space to the given color space.
|
|
151
131
|
*
|
|
152
132
|
* @tsl
|
|
153
133
|
* @function
|
|
154
134
|
* @param {Node} node - Represents the node to convert.
|
|
155
|
-
* @param {string}
|
|
135
|
+
* @param {string} targetColorSpace - The target color space.
|
|
156
136
|
* @returns {ColorSpaceNode}
|
|
157
137
|
*/
|
|
158
|
-
export const workingToColorSpace = ( node,
|
|
138
|
+
export const workingToColorSpace = ( node, targetColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), WORKING_COLOR_SPACE, targetColorSpace ) );
|
|
159
139
|
|
|
160
140
|
/**
|
|
161
141
|
* TSL function for converting a given color node from the given color space to the current working color space.
|
|
@@ -163,10 +143,10 @@ export const workingToColorSpace = ( node, colorSpace ) => nodeObject( new Color
|
|
|
163
143
|
* @tsl
|
|
164
144
|
* @function
|
|
165
145
|
* @param {Node} node - Represents the node to convert.
|
|
166
|
-
* @param {string}
|
|
146
|
+
* @param {string} sourceColorSpace - The source color space.
|
|
167
147
|
* @returns {ColorSpaceNode}
|
|
168
148
|
*/
|
|
169
|
-
export const colorSpaceToWorking = ( node,
|
|
149
|
+
export const colorSpaceToWorking = ( node, sourceColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), sourceColorSpace, WORKING_COLOR_SPACE ) );
|
|
170
150
|
|
|
171
151
|
/**
|
|
172
152
|
* TSL function for converting a given color node from one color space to another one.
|
|
@@ -180,8 +160,5 @@ export const colorSpaceToWorking = ( node, colorSpace ) => nodeObject( new Color
|
|
|
180
160
|
*/
|
|
181
161
|
export const convertColorSpace = ( node, sourceColorSpace, targetColorSpace ) => nodeObject( new ColorSpaceNode( nodeObject( node ), sourceColorSpace, targetColorSpace ) );
|
|
182
162
|
|
|
183
|
-
addMethodChaining( 'toOutputColorSpace', toOutputColorSpace );
|
|
184
|
-
addMethodChaining( 'toWorkingColorSpace', toWorkingColorSpace );
|
|
185
|
-
|
|
186
163
|
addMethodChaining( 'workingToColorSpace', workingToColorSpace );
|
|
187
164
|
addMethodChaining( 'colorSpaceToWorking', colorSpaceToWorking );
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
-
import { nodeImmutable, float } from '../tsl/TSLBase.js';
|
|
2
|
+
import { nodeImmutable, float, Fn } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
-
import { BackSide, WebGLCoordinateSystem } from '../../constants.js';
|
|
4
|
+
import { BackSide, DoubleSide, WebGLCoordinateSystem } from '../../constants.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* This node can be used to evaluate whether a primitive is front or back facing.
|
|
@@ -36,6 +36,10 @@ class FrontFacingNode extends Node {
|
|
|
36
36
|
|
|
37
37
|
generate( builder ) {
|
|
38
38
|
|
|
39
|
+
if ( builder.shaderStage !== 'fragment' ) return 'true';
|
|
40
|
+
|
|
41
|
+
//
|
|
42
|
+
|
|
39
43
|
const { renderer, material } = builder;
|
|
40
44
|
|
|
41
45
|
if ( renderer.coordinateSystem === WebGLCoordinateSystem ) {
|
|
@@ -72,3 +76,31 @@ export const frontFacing = /*@__PURE__*/ nodeImmutable( FrontFacingNode );
|
|
|
72
76
|
* @type {Node<float>}
|
|
73
77
|
*/
|
|
74
78
|
export const faceDirection = /*@__PURE__*/ float( frontFacing ).mul( 2.0 ).sub( 1.0 );
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Converts a direction vector to a face direction vector based on the material's side.
|
|
82
|
+
*
|
|
83
|
+
* If the material is set to `BackSide`, the direction is inverted.
|
|
84
|
+
* If the material is set to `DoubleSide`, the direction is multiplied by `faceDirection`.
|
|
85
|
+
*
|
|
86
|
+
* @tsl
|
|
87
|
+
* @param {Node<vec3>} direction - The direction vector to convert.
|
|
88
|
+
* @returns {Node<vec3>} The converted direction vector.
|
|
89
|
+
*/
|
|
90
|
+
export const directionToFaceDirection = /*@__PURE__*/ Fn( ( [ direction ], { material } ) => {
|
|
91
|
+
|
|
92
|
+
const side = material.side;
|
|
93
|
+
|
|
94
|
+
if ( side === BackSide ) {
|
|
95
|
+
|
|
96
|
+
direction = direction.mul( - 1.0 );
|
|
97
|
+
|
|
98
|
+
} else if ( side === DoubleSide ) {
|
|
99
|
+
|
|
100
|
+
direction = direction.mul( faceDirection );
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return direction;
|
|
105
|
+
|
|
106
|
+
} );
|