@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,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
|
+
} );
|
|
@@ -1,41 +1,11 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
|
-
import { add } from '../math/OperatorNode.js';
|
|
3
2
|
|
|
4
3
|
import { normalView, transformNormalToView } from '../accessors/Normal.js';
|
|
5
|
-
import { positionView } from '../accessors/Position.js';
|
|
6
4
|
import { TBNViewMatrix } from '../accessors/AccessorsUtils.js';
|
|
7
|
-
import {
|
|
8
|
-
import { faceDirection } from './FrontFacingNode.js';
|
|
9
|
-
import { Fn, nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
5
|
+
import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
10
6
|
|
|
11
7
|
import { TangentSpaceNormalMap, ObjectSpaceNormalMap } from '../../constants.js';
|
|
12
|
-
|
|
13
|
-
// Normal Mapping Without Precomputed Tangents
|
|
14
|
-
// http://www.thetenthplanet.de/archives/1180
|
|
15
|
-
|
|
16
|
-
const perturbNormal2Arb = /*@__PURE__*/ Fn( ( inputs ) => {
|
|
17
|
-
|
|
18
|
-
const { eye_pos, surf_norm, mapN, uv } = inputs;
|
|
19
|
-
|
|
20
|
-
const q0 = eye_pos.dFdx();
|
|
21
|
-
const q1 = eye_pos.dFdy();
|
|
22
|
-
const st0 = uv.dFdx();
|
|
23
|
-
const st1 = uv.dFdy();
|
|
24
|
-
|
|
25
|
-
const N = surf_norm; // normalized
|
|
26
|
-
|
|
27
|
-
const q1perp = q1.cross( N );
|
|
28
|
-
const q0perp = N.cross( q0 );
|
|
29
|
-
|
|
30
|
-
const T = q1perp.mul( st0.x ).add( q0perp.mul( st1.x ) );
|
|
31
|
-
const B = q1perp.mul( st0.y ).add( q0perp.mul( st1.y ) );
|
|
32
|
-
|
|
33
|
-
const det = T.dot( T ).max( B.dot( B ) );
|
|
34
|
-
const scale = faceDirection.mul( det.inverseSqrt() );
|
|
35
|
-
|
|
36
|
-
return add( T.mul( mapN.x, scale ), B.mul( mapN.y, scale ), N.mul( mapN.z ) ).normalize();
|
|
37
|
-
|
|
38
|
-
} );
|
|
8
|
+
import { directionToFaceDirection } from './FrontFacingNode.js';
|
|
39
9
|
|
|
40
10
|
/**
|
|
41
11
|
* This class can be used for applying normals maps to materials.
|
|
@@ -89,7 +59,7 @@ class NormalMapNode extends TempNode {
|
|
|
89
59
|
|
|
90
60
|
}
|
|
91
61
|
|
|
92
|
-
setup(
|
|
62
|
+
setup( { material } ) {
|
|
93
63
|
|
|
94
64
|
const { normalMapType, scaleNode } = this;
|
|
95
65
|
|
|
@@ -97,38 +67,37 @@ class NormalMapNode extends TempNode {
|
|
|
97
67
|
|
|
98
68
|
if ( scaleNode !== null ) {
|
|
99
69
|
|
|
100
|
-
|
|
70
|
+
let scale = scaleNode;
|
|
71
|
+
|
|
72
|
+
if ( material.flatShading === true ) {
|
|
73
|
+
|
|
74
|
+
scale = directionToFaceDirection( scale );
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
normalMap = vec3( normalMap.xy.mul( scale ), normalMap.z );
|
|
101
79
|
|
|
102
80
|
}
|
|
103
81
|
|
|
104
|
-
let
|
|
82
|
+
let output = null;
|
|
105
83
|
|
|
106
84
|
if ( normalMapType === ObjectSpaceNormalMap ) {
|
|
107
85
|
|
|
108
|
-
|
|
86
|
+
output = transformNormalToView( normalMap );
|
|
109
87
|
|
|
110
88
|
} else if ( normalMapType === TangentSpaceNormalMap ) {
|
|
111
89
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if ( tangent === true ) {
|
|
90
|
+
output = TBNViewMatrix.mul( normalMap ).normalize();
|
|
115
91
|
|
|
116
|
-
|
|
92
|
+
} else {
|
|
117
93
|
|
|
118
|
-
|
|
94
|
+
console.error( `THREE.NodeMaterial: Unsupported normal map type: ${ normalMapType }` );
|
|
119
95
|
|
|
120
|
-
|
|
121
|
-
eye_pos: positionView,
|
|
122
|
-
surf_norm: normalView,
|
|
123
|
-
mapN: normalMap,
|
|
124
|
-
uv: uv()
|
|
125
|
-
} );
|
|
126
|
-
|
|
127
|
-
}
|
|
96
|
+
output = normalView; // Fallback to default normal view
|
|
128
97
|
|
|
129
98
|
}
|
|
130
99
|
|
|
131
|
-
return
|
|
100
|
+
return output;
|
|
132
101
|
|
|
133
102
|
}
|
|
134
103
|
|
|
@@ -7,6 +7,7 @@ import { viewZToOrthographicDepth, perspectiveDepthToViewZ } from './ViewportDep
|
|
|
7
7
|
|
|
8
8
|
import { HalfFloatType/*, FloatType*/ } from '../../constants.js';
|
|
9
9
|
import { Vector2 } from '../../math/Vector2.js';
|
|
10
|
+
import { Vector4 } from '../../math/Vector4.js';
|
|
10
11
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
11
12
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
12
13
|
|
|
@@ -48,7 +49,7 @@ class PassTextureNode extends TextureNode {
|
|
|
48
49
|
|
|
49
50
|
setup( builder ) {
|
|
50
51
|
|
|
51
|
-
|
|
52
|
+
this.passNode.build( builder );
|
|
52
53
|
|
|
53
54
|
return super.setup( builder );
|
|
54
55
|
|
|
@@ -126,7 +127,16 @@ class PassMultipleTextureNode extends PassTextureNode {
|
|
|
126
127
|
|
|
127
128
|
clone() {
|
|
128
129
|
|
|
129
|
-
|
|
130
|
+
const newNode = new this.constructor( this.passNode, this.textureName, this.previousTexture );
|
|
131
|
+
newNode.uvNode = this.uvNode;
|
|
132
|
+
newNode.levelNode = this.levelNode;
|
|
133
|
+
newNode.biasNode = this.biasNode;
|
|
134
|
+
newNode.sampler = this.sampler;
|
|
135
|
+
newNode.depthNode = this.depthNode;
|
|
136
|
+
newNode.compareNode = this.compareNode;
|
|
137
|
+
newNode.gradNode = this.gradNode;
|
|
138
|
+
|
|
139
|
+
return newNode;
|
|
130
140
|
|
|
131
141
|
}
|
|
132
142
|
|
|
@@ -314,10 +324,43 @@ class PassNode extends TempNode {
|
|
|
314
324
|
*/
|
|
315
325
|
this._mrt = null;
|
|
316
326
|
|
|
327
|
+
/**
|
|
328
|
+
* Layer object for configuring the camera that is used
|
|
329
|
+
* to produce the pass.
|
|
330
|
+
*
|
|
331
|
+
* @private
|
|
332
|
+
* @type {?Layers}
|
|
333
|
+
* @default null
|
|
334
|
+
*/
|
|
317
335
|
this._layers = null;
|
|
318
336
|
|
|
337
|
+
/**
|
|
338
|
+
* Scales the resolution of the internal render target.
|
|
339
|
+
*
|
|
340
|
+
* @private
|
|
341
|
+
* @type {number}
|
|
342
|
+
* @default 1
|
|
343
|
+
*/
|
|
319
344
|
this._resolution = 1;
|
|
320
345
|
|
|
346
|
+
/**
|
|
347
|
+
* Custom viewport definition.
|
|
348
|
+
*
|
|
349
|
+
* @private
|
|
350
|
+
* @type {?Vector4}
|
|
351
|
+
* @default null
|
|
352
|
+
*/
|
|
353
|
+
this._viewport = null;
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Custom scissor definition.
|
|
357
|
+
*
|
|
358
|
+
* @private
|
|
359
|
+
* @type {?Vector4}
|
|
360
|
+
* @default null
|
|
361
|
+
*/
|
|
362
|
+
this._scissor = null;
|
|
363
|
+
|
|
321
364
|
/**
|
|
322
365
|
* This flag can be used for type testing.
|
|
323
366
|
*
|
|
@@ -336,6 +379,14 @@ class PassNode extends TempNode {
|
|
|
336
379
|
*/
|
|
337
380
|
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
338
381
|
|
|
382
|
+
/**
|
|
383
|
+
* This flag is used for global cache.
|
|
384
|
+
*
|
|
385
|
+
* @type {boolean}
|
|
386
|
+
* @default true
|
|
387
|
+
*/
|
|
388
|
+
this.global = true;
|
|
389
|
+
|
|
339
390
|
}
|
|
340
391
|
|
|
341
392
|
/**
|
|
@@ -357,7 +408,6 @@ class PassNode extends TempNode {
|
|
|
357
408
|
* Gets the current resolution of the pass.
|
|
358
409
|
*
|
|
359
410
|
* @return {number} The current resolution. A value of `1` means full resolution.
|
|
360
|
-
* @default 1
|
|
361
411
|
*/
|
|
362
412
|
getResolution() {
|
|
363
413
|
|
|
@@ -365,6 +415,12 @@ class PassNode extends TempNode {
|
|
|
365
415
|
|
|
366
416
|
}
|
|
367
417
|
|
|
418
|
+
/**
|
|
419
|
+
* Sets the layer configuration that should be used when rendering the pass.
|
|
420
|
+
*
|
|
421
|
+
* @param {Layers} layers - The layers object to set.
|
|
422
|
+
* @return {PassNode} A reference to this pass.
|
|
423
|
+
*/
|
|
368
424
|
setLayers( layers ) {
|
|
369
425
|
|
|
370
426
|
this._layers = layers;
|
|
@@ -373,6 +429,11 @@ class PassNode extends TempNode {
|
|
|
373
429
|
|
|
374
430
|
}
|
|
375
431
|
|
|
432
|
+
/**
|
|
433
|
+
* Gets the current layer configuration of the pass.
|
|
434
|
+
*
|
|
435
|
+
* @return {?Layers} .
|
|
436
|
+
*/
|
|
376
437
|
getLayers() {
|
|
377
438
|
|
|
378
439
|
return this._layers;
|
|
@@ -404,17 +465,6 @@ class PassNode extends TempNode {
|
|
|
404
465
|
|
|
405
466
|
}
|
|
406
467
|
|
|
407
|
-
/**
|
|
408
|
-
* The method is overwritten so it always returns `true`.
|
|
409
|
-
*
|
|
410
|
-
* @return {boolean} Whether this node is global or not.
|
|
411
|
-
*/
|
|
412
|
-
isGlobal() {
|
|
413
|
-
|
|
414
|
-
return true;
|
|
415
|
-
|
|
416
|
-
}
|
|
417
|
-
|
|
418
468
|
/**
|
|
419
469
|
* Returns the texture for the given output name.
|
|
420
470
|
*
|
|
@@ -585,16 +635,35 @@ class PassNode extends TempNode {
|
|
|
585
635
|
|
|
586
636
|
}
|
|
587
637
|
|
|
588
|
-
|
|
638
|
+
/**
|
|
639
|
+
* Precompiles the pass.
|
|
640
|
+
*
|
|
641
|
+
* Note that this method must be called after the pass configuartion is complete.
|
|
642
|
+
* So calls like `setMRT()` and `getTextureNode()` must proceed the precompilation.
|
|
643
|
+
*
|
|
644
|
+
* @async
|
|
645
|
+
* @param {Renderer} renderer - The renderer.
|
|
646
|
+
* @return {Promise} A Promise that resolves when the compile has been finished.
|
|
647
|
+
* @see {@link Renderer#compileAsync}
|
|
648
|
+
*/
|
|
649
|
+
async compileAsync( renderer ) {
|
|
589
650
|
|
|
590
|
-
|
|
651
|
+
const currentRenderTarget = renderer.getRenderTarget();
|
|
652
|
+
const currentMRT = renderer.getMRT();
|
|
591
653
|
|
|
592
|
-
|
|
593
|
-
|
|
654
|
+
renderer.setRenderTarget( this.renderTarget );
|
|
655
|
+
renderer.setMRT( this._mrt );
|
|
594
656
|
|
|
595
|
-
|
|
657
|
+
await renderer.compileAsync( this.scene, this.camera );
|
|
596
658
|
|
|
597
|
-
|
|
659
|
+
renderer.setRenderTarget( currentRenderTarget );
|
|
660
|
+
renderer.setMRT( currentMRT );
|
|
661
|
+
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
setup( { renderer } ) {
|
|
665
|
+
|
|
666
|
+
this.renderTarget.samples = this.options.samples === undefined ? renderer.samples : this.options.samples;
|
|
598
667
|
|
|
599
668
|
this.renderTarget.texture.type = renderer.getColorBufferType();
|
|
600
669
|
|
|
@@ -681,6 +750,82 @@ class PassNode extends TempNode {
|
|
|
681
750
|
|
|
682
751
|
this.renderTarget.setSize( effectiveWidth, effectiveHeight );
|
|
683
752
|
|
|
753
|
+
if ( this._scissor !== null ) this.renderTarget.scissor.copy( this._scissor );
|
|
754
|
+
if ( this._viewport !== null ) this.renderTarget.viewport.copy( this._viewport );
|
|
755
|
+
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
/**
|
|
759
|
+
* This method allows to define the pass's scissor rectangle. By default, the scissor rectangle is kept
|
|
760
|
+
* in sync with the pass's dimensions. To reverse the process and use auto-sizing again, call the method
|
|
761
|
+
* with `null` as the single argument.
|
|
762
|
+
*
|
|
763
|
+
* @param {?(number | Vector4)} x - The horizontal coordinate for the lower left corner of the box in logical pixel unit.
|
|
764
|
+
* Instead of passing four arguments, the method also works with a single four-dimensional vector.
|
|
765
|
+
* @param {number} y - The vertical coordinate for the lower left corner of the box in logical pixel unit.
|
|
766
|
+
* @param {number} width - The width of the scissor box in logical pixel unit.
|
|
767
|
+
* @param {number} height - The height of the scissor box in logical pixel unit.
|
|
768
|
+
*/
|
|
769
|
+
setScissor( x, y, width, height ) {
|
|
770
|
+
|
|
771
|
+
if ( x === null ) {
|
|
772
|
+
|
|
773
|
+
this._scissor = null;
|
|
774
|
+
|
|
775
|
+
} else {
|
|
776
|
+
|
|
777
|
+
if ( this._scissor === null ) this._scissor = new Vector4();
|
|
778
|
+
|
|
779
|
+
if ( x.isVector4 ) {
|
|
780
|
+
|
|
781
|
+
this._scissor.copy( x );
|
|
782
|
+
|
|
783
|
+
} else {
|
|
784
|
+
|
|
785
|
+
this._scissor.set( x, y, width, height );
|
|
786
|
+
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
this._scissor.multiplyScalar( this._pixelRatio * this._resolution ).floor();
|
|
790
|
+
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
/**
|
|
796
|
+
* This method allows to define the pass's viewport. By default, the viewport is kept in sync
|
|
797
|
+
* with the pass's dimensions. To reverse the process and use auto-sizing again, call the method
|
|
798
|
+
* with `null` as the single argument.
|
|
799
|
+
*
|
|
800
|
+
* @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.
|
|
801
|
+
* @param {number} y - The vertical coordinate for the lower left corner of the viewport origin in logical pixel unit.
|
|
802
|
+
* @param {number} width - The width of the viewport in logical pixel unit.
|
|
803
|
+
* @param {number} height - The height of the viewport in logical pixel unit.
|
|
804
|
+
*/
|
|
805
|
+
setViewport( x, y, width, height ) {
|
|
806
|
+
|
|
807
|
+
if ( x === null ) {
|
|
808
|
+
|
|
809
|
+
this._viewport = null;
|
|
810
|
+
|
|
811
|
+
} else {
|
|
812
|
+
|
|
813
|
+
if ( this._viewport === null ) this._viewport = new Vector4();
|
|
814
|
+
|
|
815
|
+
if ( x.isVector4 ) {
|
|
816
|
+
|
|
817
|
+
this._viewport.copy( x );
|
|
818
|
+
|
|
819
|
+
} else {
|
|
820
|
+
|
|
821
|
+
this._viewport.set( x, y, width, height );
|
|
822
|
+
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
this._viewport.multiplyScalar( this._pixelRatio * this._resolution ).floor();
|
|
826
|
+
|
|
827
|
+
}
|
|
828
|
+
|
|
684
829
|
}
|
|
685
830
|
|
|
686
831
|
/**
|
|
@@ -258,29 +258,3 @@ export const viewportResolution = /*@__PURE__*/ ( Fn( () => { // @deprecated, r1
|
|
|
258
258
|
return screenSize;
|
|
259
259
|
|
|
260
260
|
}, 'vec2' ).once() )();
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* @tsl
|
|
264
|
-
* @deprecated since r168. Use {@link screenUV} instead.
|
|
265
|
-
* @type {Node<vec2>}
|
|
266
|
-
*/
|
|
267
|
-
export const viewportTopLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
|
|
268
|
-
|
|
269
|
-
console.warn( 'THREE.TSL: "viewportTopLeft" is deprecated. Use "screenUV" instead.' );
|
|
270
|
-
|
|
271
|
-
return screenUV;
|
|
272
|
-
|
|
273
|
-
}, 'vec2' ).once() )();
|
|
274
|
-
|
|
275
|
-
/**
|
|
276
|
-
* @tsl
|
|
277
|
-
* @deprecated since r168. Use `screenUV.flipY()` instead.
|
|
278
|
-
* @type {Node<vec2>}
|
|
279
|
-
*/
|
|
280
|
-
export const viewportBottomLeft = /*@__PURE__*/ ( Fn( () => { // @deprecated, r168
|
|
281
|
-
|
|
282
|
-
console.warn( 'THREE.TSL: "viewportBottomLeft" is deprecated. Use "screenUV.flipY()" instead.' );
|
|
283
|
-
|
|
284
|
-
return screenUV.flipY();
|
|
285
|
-
|
|
286
|
-
}, 'vec2' ).once() )();
|