@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,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
|
|
|
@@ -126,7 +126,16 @@ class PassMultipleTextureNode extends PassTextureNode {
|
|
|
126
126
|
|
|
127
127
|
clone() {
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
const newNode = new this.constructor( this.passNode, this.textureName, this.previousTexture );
|
|
130
|
+
newNode.uvNode = this.uvNode;
|
|
131
|
+
newNode.levelNode = this.levelNode;
|
|
132
|
+
newNode.biasNode = this.biasNode;
|
|
133
|
+
newNode.sampler = this.sampler;
|
|
134
|
+
newNode.depthNode = this.depthNode;
|
|
135
|
+
newNode.compareNode = this.compareNode;
|
|
136
|
+
newNode.gradNode = this.gradNode;
|
|
137
|
+
|
|
138
|
+
return newNode;
|
|
130
139
|
|
|
131
140
|
}
|
|
132
141
|
|
|
@@ -336,6 +345,14 @@ class PassNode extends TempNode {
|
|
|
336
345
|
*/
|
|
337
346
|
this.updateBeforeType = NodeUpdateType.FRAME;
|
|
338
347
|
|
|
348
|
+
/**
|
|
349
|
+
* This flag is used for global cache.
|
|
350
|
+
*
|
|
351
|
+
* @type {boolean}
|
|
352
|
+
* @default true
|
|
353
|
+
*/
|
|
354
|
+
this.global = true;
|
|
355
|
+
|
|
339
356
|
}
|
|
340
357
|
|
|
341
358
|
/**
|
|
@@ -404,17 +421,6 @@ class PassNode extends TempNode {
|
|
|
404
421
|
|
|
405
422
|
}
|
|
406
423
|
|
|
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
424
|
/**
|
|
419
425
|
* Returns the texture for the given output name.
|
|
420
426
|
*
|
|
@@ -589,13 +595,6 @@ class PassNode extends TempNode {
|
|
|
589
595
|
|
|
590
596
|
this.renderTarget.samples = this.options.samples === undefined ? renderer.samples : this.options.samples;
|
|
591
597
|
|
|
592
|
-
// TODO: Disable MSAA for WebGL backend for now
|
|
593
|
-
if ( renderer.backend.isWebGLBackend === true ) {
|
|
594
|
-
|
|
595
|
-
this.renderTarget.samples = 0;
|
|
596
|
-
|
|
597
|
-
}
|
|
598
|
-
|
|
599
598
|
this.renderTarget.texture.type = renderer.getColorBufferType();
|
|
600
599
|
|
|
601
600
|
return this.scope === PassNode.COLOR ? this.getTextureNode() : this.getLinearDepthNode();
|
|
@@ -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() )();
|
|
@@ -3,17 +3,13 @@ import V_GGX_SmithCorrelated from './V_GGX_SmithCorrelated.js';
|
|
|
3
3
|
import V_GGX_SmithCorrelated_Anisotropic from './V_GGX_SmithCorrelated_Anisotropic.js';
|
|
4
4
|
import D_GGX from './D_GGX.js';
|
|
5
5
|
import D_GGX_Anisotropic from './D_GGX_Anisotropic.js';
|
|
6
|
-
import {
|
|
6
|
+
import { normalView as NormalView } from '../../accessors/Normal.js';
|
|
7
7
|
import { positionViewDirection } from '../../accessors/Position.js';
|
|
8
8
|
import { iridescence, alphaT, anisotropyT, anisotropyB } from '../../core/PropertyNode.js';
|
|
9
9
|
import { Fn, defined } from '../../tsl/TSLBase.js';
|
|
10
10
|
|
|
11
11
|
// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility
|
|
12
|
-
const BRDF_GGX = /*@__PURE__*/ Fn( (
|
|
13
|
-
|
|
14
|
-
const { lightDirection, f0, f90, roughness, f, USE_IRIDESCENCE, USE_ANISOTROPY } = inputs;
|
|
15
|
-
|
|
16
|
-
const normalView = inputs.normalView || transformedNormalView;
|
|
12
|
+
const BRDF_GGX = /*@__PURE__*/ Fn( ( { lightDirection, f0, f90, roughness, f, normalView = NormalView, USE_IRIDESCENCE, USE_ANISOTROPY } ) => {
|
|
17
13
|
|
|
18
14
|
const alpha = roughness.pow2(); // UE4's roughness
|
|
19
15
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { normalView } from '../../accessors/Normal.js';
|
|
2
2
|
import { positionViewDirection } from '../../accessors/Position.js';
|
|
3
3
|
import { sheen, sheenRoughness } from '../../core/PropertyNode.js';
|
|
4
4
|
import { Fn, float } from '../../tsl/TSLBase.js';
|
|
@@ -43,9 +43,9 @@ const BRDF_Sheen = /*@__PURE__*/ Fn( ( { lightDirection } ) => {
|
|
|
43
43
|
|
|
44
44
|
const halfDir = lightDirection.add( positionViewDirection ).normalize();
|
|
45
45
|
|
|
46
|
-
const dotNL =
|
|
47
|
-
const dotNV =
|
|
48
|
-
const dotNH =
|
|
46
|
+
const dotNL = normalView.dot( lightDirection ).clamp();
|
|
47
|
+
const dotNV = normalView.dot( positionViewDirection ).clamp();
|
|
48
|
+
const dotNH = normalView.dot( halfDir ).clamp();
|
|
49
49
|
|
|
50
50
|
const D = D_Charlie( { roughness: sheenRoughness, dotNH } );
|
|
51
51
|
const V = V_Neubelt( { dotNV, dotNL } );
|
|
@@ -2,7 +2,7 @@ import BasicLightingModel from './BasicLightingModel.js';
|
|
|
2
2
|
import F_Schlick from './BSDF/F_Schlick.js';
|
|
3
3
|
import BRDF_Lambert from './BSDF/BRDF_Lambert.js';
|
|
4
4
|
import { diffuseColor, shininess, specularColor } from '../core/PropertyNode.js';
|
|
5
|
-
import {
|
|
5
|
+
import { normalView } from '../accessors/Normal.js';
|
|
6
6
|
import { materialSpecularStrength } from '../accessors/MaterialNode.js';
|
|
7
7
|
import { positionViewDirection } from '../accessors/Position.js';
|
|
8
8
|
import { Fn, float } from '../tsl/TSLBase.js';
|
|
@@ -19,7 +19,7 @@ const BRDF_BlinnPhong = /*@__PURE__*/ Fn( ( { lightDirection } ) => {
|
|
|
19
19
|
|
|
20
20
|
const halfDir = lightDirection.add( positionViewDirection ).normalize();
|
|
21
21
|
|
|
22
|
-
const dotNH =
|
|
22
|
+
const dotNH = normalView.dot( halfDir ).clamp();
|
|
23
23
|
const dotVH = positionViewDirection.dot( halfDir ).clamp();
|
|
24
24
|
|
|
25
25
|
const F = F_Schlick( { f0: specularColor, f90: 1.0, dotVH } );
|
|
@@ -66,7 +66,7 @@ class PhongLightingModel extends BasicLightingModel {
|
|
|
66
66
|
*/
|
|
67
67
|
direct( { lightDirection, lightColor, reflectedLight } ) {
|
|
68
68
|
|
|
69
|
-
const dotNL =
|
|
69
|
+
const dotNL = normalView.dot( lightDirection ).clamp();
|
|
70
70
|
const irradiance = dotNL.mul( lightColor );
|
|
71
71
|
|
|
72
72
|
reflectedLight.directDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor: diffuseColor.rgb } ) ) );
|
|
@@ -8,7 +8,7 @@ import BRDF_Sheen from './BSDF/BRDF_Sheen.js';
|
|
|
8
8
|
import { LTC_Evaluate, LTC_Uv } from './BSDF/LTC.js';
|
|
9
9
|
import LightingModel from '../core/LightingModel.js';
|
|
10
10
|
import { diffuseColor, specularColor, specularF90, roughness, clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, ior, thickness, transmission, attenuationDistance, attenuationColor, dispersion } from '../core/PropertyNode.js';
|
|
11
|
-
import {
|
|
11
|
+
import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js';
|
|
12
12
|
import { positionViewDirection, positionView, positionWorld } from '../accessors/Position.js';
|
|
13
13
|
import { Fn, float, vec2, vec3, vec4, mat3, If } from '../tsl/TSLBase.js';
|
|
14
14
|
import { select } from '../math/ConditionalNode.js';
|
|
@@ -18,7 +18,7 @@ import { cameraPosition, cameraProjectionMatrix, cameraViewMatrix } from '../acc
|
|
|
18
18
|
import { modelWorldMatrix } from '../accessors/ModelNode.js';
|
|
19
19
|
import { screenSize } from '../display/ScreenNode.js';
|
|
20
20
|
import { viewportMipTexture } from '../display/ViewportTextureNode.js';
|
|
21
|
-
import {
|
|
21
|
+
import { textureBicubicLevel } from '../accessors/TextureBicubic.js';
|
|
22
22
|
import { Loop } from '../utils/LoopNode.js';
|
|
23
23
|
import { BackSide } from '../../constants.js';
|
|
24
24
|
|
|
@@ -80,7 +80,7 @@ const getTransmissionSample = /*@__PURE__*/ Fn( ( [ fragCoord, roughness, ior ],
|
|
|
80
80
|
|
|
81
81
|
const lod = log2( screenSize.x ).mul( applyIorToRoughness( roughness, ior ) );
|
|
82
82
|
|
|
83
|
-
return
|
|
83
|
+
return textureBicubicLevel( transmissionSample, lod );
|
|
84
84
|
|
|
85
85
|
} );
|
|
86
86
|
|
|
@@ -494,7 +494,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
494
494
|
|
|
495
495
|
if ( this.iridescence === true ) {
|
|
496
496
|
|
|
497
|
-
const dotNVi =
|
|
497
|
+
const dotNVi = normalView.dot( positionViewDirection ).clamp();
|
|
498
498
|
|
|
499
499
|
this.iridescenceFresnel = evalIridescence( {
|
|
500
500
|
outsideIOR: float( 1.0 ),
|
|
@@ -512,7 +512,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
512
512
|
|
|
513
513
|
const position = positionWorld;
|
|
514
514
|
const v = cameraPosition.sub( positionWorld ).normalize(); // TODO: Create Node for this, same issue in MaterialX
|
|
515
|
-
const n =
|
|
515
|
+
const n = normalWorld;
|
|
516
516
|
|
|
517
517
|
const context = builder.context;
|
|
518
518
|
|
|
@@ -550,7 +550,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
550
550
|
|
|
551
551
|
computeMultiscattering( singleScatter, multiScatter, specularF90 ) {
|
|
552
552
|
|
|
553
|
-
const dotNV =
|
|
553
|
+
const dotNV = normalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
|
|
554
554
|
|
|
555
555
|
const fab = DFGApprox( { roughness, dotNV } );
|
|
556
556
|
|
|
@@ -577,7 +577,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
577
577
|
*/
|
|
578
578
|
direct( { lightDirection, lightColor, reflectedLight } ) {
|
|
579
579
|
|
|
580
|
-
const dotNL =
|
|
580
|
+
const dotNL = normalView.dot( lightDirection ).clamp();
|
|
581
581
|
const irradiance = dotNL.mul( lightColor );
|
|
582
582
|
|
|
583
583
|
if ( this.sheen === true ) {
|
|
@@ -588,10 +588,10 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
588
588
|
|
|
589
589
|
if ( this.clearcoat === true ) {
|
|
590
590
|
|
|
591
|
-
const dotNLcc =
|
|
591
|
+
const dotNLcc = clearcoatNormalView.dot( lightDirection ).clamp();
|
|
592
592
|
const ccIrradiance = dotNLcc.mul( lightColor );
|
|
593
593
|
|
|
594
|
-
this.clearcoatSpecularDirect.addAssign( ccIrradiance.mul( BRDF_GGX( { lightDirection, f0: clearcoatF0, f90: clearcoatF90, roughness: clearcoatRoughness, normalView:
|
|
594
|
+
this.clearcoatSpecularDirect.addAssign( ccIrradiance.mul( BRDF_GGX( { lightDirection, f0: clearcoatF0, f90: clearcoatF90, roughness: clearcoatRoughness, normalView: clearcoatNormalView } ) ) );
|
|
595
595
|
|
|
596
596
|
}
|
|
597
597
|
|
|
@@ -615,7 +615,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
615
615
|
const p2 = lightPosition.sub( halfWidth ).add( halfHeight );
|
|
616
616
|
const p3 = lightPosition.add( halfWidth ).add( halfHeight );
|
|
617
617
|
|
|
618
|
-
const N =
|
|
618
|
+
const N = normalView;
|
|
619
619
|
const V = positionViewDirection;
|
|
620
620
|
const P = positionView.toVar();
|
|
621
621
|
|
|
@@ -680,7 +680,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
680
680
|
this.sheenSpecularIndirect.addAssign( iblIrradiance.mul(
|
|
681
681
|
sheen,
|
|
682
682
|
IBLSheenBRDF( {
|
|
683
|
-
normal:
|
|
683
|
+
normal: normalView,
|
|
684
684
|
viewDir: positionViewDirection,
|
|
685
685
|
roughness: sheenRoughness
|
|
686
686
|
} )
|
|
@@ -690,7 +690,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
690
690
|
|
|
691
691
|
if ( this.clearcoat === true ) {
|
|
692
692
|
|
|
693
|
-
const dotNVcc =
|
|
693
|
+
const dotNVcc = clearcoatNormalView.dot( positionViewDirection ).clamp();
|
|
694
694
|
|
|
695
695
|
const clearcoatEnv = EnvironmentBRDF( {
|
|
696
696
|
dotNV: dotNVcc,
|
|
@@ -731,7 +731,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
731
731
|
|
|
732
732
|
const { ambientOcclusion, reflectedLight } = builder.context;
|
|
733
733
|
|
|
734
|
-
const dotNV =
|
|
734
|
+
const dotNV = normalView.dot( positionViewDirection ).clamp(); // @ TODO: Move to core dotNV
|
|
735
735
|
|
|
736
736
|
const aoNV = dotNV.add( ambientOcclusion );
|
|
737
737
|
const aoExp = roughness.mul( - 16.0 ).oneMinus().negate().exp2();
|
|
@@ -766,7 +766,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
766
766
|
|
|
767
767
|
if ( this.clearcoat === true ) {
|
|
768
768
|
|
|
769
|
-
const dotNVcc =
|
|
769
|
+
const dotNVcc = clearcoatNormalView.dot( positionViewDirection ).clamp();
|
|
770
770
|
|
|
771
771
|
const Fcc = F_Schlick( {
|
|
772
772
|
dotVH: dotNVcc,
|
|
@@ -32,7 +32,11 @@ class ShadowMaskModel extends LightingModel {
|
|
|
32
32
|
*/
|
|
33
33
|
direct( { lightNode } ) {
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
if ( lightNode.shadowNode !== null ) {
|
|
36
|
+
|
|
37
|
+
this.shadowNode.mulAssign( lightNode.shadowNode );
|
|
38
|
+
|
|
39
|
+
}
|
|
36
40
|
|
|
37
41
|
}
|
|
38
42
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { normalViewGeometry } from '../../accessors/Normal.js';
|
|
2
2
|
import { float, Fn } from '../../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
4
|
const getGeometryRoughness = /*@__PURE__*/ Fn( ( builder ) => {
|
|
@@ -9,7 +9,7 @@ const getGeometryRoughness = /*@__PURE__*/ Fn( ( builder ) => {
|
|
|
9
9
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
const dxy =
|
|
12
|
+
const dxy = normalViewGeometry.dFdx().abs().max( normalViewGeometry.dFdy().abs() );
|
|
13
13
|
const geometryRoughness = dxy.x.max( dxy.y ).max( dxy.z );
|
|
14
14
|
|
|
15
15
|
return geometryRoughness;
|
|
@@ -28,7 +28,7 @@ const getParallaxCorrectNormal = /*@__PURE__*/ Fn( ( [ normal, cubeSize, cubePos
|
|
|
28
28
|
rbminmax.y = nDir.y.greaterThan( float( 0 ) ).select( rbmax.y, rbmin.y );
|
|
29
29
|
rbminmax.z = nDir.z.greaterThan( float( 0 ) ).select( rbmax.z, rbmin.z );
|
|
30
30
|
|
|
31
|
-
const correction = min(
|
|
31
|
+
const correction = min( rbminmax.x, rbminmax.y, rbminmax.z ).toVar();
|
|
32
32
|
const boxIntersection = positionWorld.add( nDir.mul( correction ) ).toVar();
|
|
33
33
|
return boxIntersection.sub( cubePos );
|
|
34
34
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import { expression } from '../code/ExpressionNode.js';
|
|
2
3
|
import { nodeProxy } from '../tsl/TSLCore.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -10,9 +11,9 @@ import { nodeProxy } from '../tsl/TSLCore.js';
|
|
|
10
11
|
*
|
|
11
12
|
* This node can only be used with a WebGPU backend.
|
|
12
13
|
*
|
|
13
|
-
* @augments
|
|
14
|
+
* @augments Node
|
|
14
15
|
*/
|
|
15
|
-
class AtomicFunctionNode extends
|
|
16
|
+
class AtomicFunctionNode extends Node {
|
|
16
17
|
|
|
17
18
|
static get type() {
|
|
18
19
|
|
|
@@ -52,6 +53,14 @@ class AtomicFunctionNode extends TempNode {
|
|
|
52
53
|
*/
|
|
53
54
|
this.valueNode = valueNode;
|
|
54
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Creates a list of the parents for this node for detecting if the node needs to return a value.
|
|
58
|
+
*
|
|
59
|
+
* @type {boolean}
|
|
60
|
+
* @default true
|
|
61
|
+
*/
|
|
62
|
+
this.parents = true;
|
|
63
|
+
|
|
55
64
|
}
|
|
56
65
|
|
|
57
66
|
/**
|
|
@@ -81,6 +90,9 @@ class AtomicFunctionNode extends TempNode {
|
|
|
81
90
|
|
|
82
91
|
generate( builder ) {
|
|
83
92
|
|
|
93
|
+
const properties = builder.getNodeProperties( this );
|
|
94
|
+
const parents = properties.parents;
|
|
95
|
+
|
|
84
96
|
const method = this.method;
|
|
85
97
|
|
|
86
98
|
const type = this.getNodeType( builder );
|
|
@@ -101,14 +113,23 @@ class AtomicFunctionNode extends TempNode {
|
|
|
101
113
|
}
|
|
102
114
|
|
|
103
115
|
const methodSnippet = `${ builder.getMethod( method, type ) }( ${ params.join( ', ' ) } )`;
|
|
116
|
+
const isVoid = parents.length === 1 && parents[ 0 ].isStackNode === true;
|
|
104
117
|
|
|
105
|
-
if (
|
|
118
|
+
if ( isVoid ) {
|
|
106
119
|
|
|
107
120
|
builder.addLineFlowCode( methodSnippet, this );
|
|
108
121
|
|
|
109
|
-
}
|
|
122
|
+
} else {
|
|
110
123
|
|
|
111
|
-
|
|
124
|
+
if ( properties.constNode === undefined ) {
|
|
125
|
+
|
|
126
|
+
properties.constNode = expression( methodSnippet, type ).toConst();
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return properties.constNode.build( builder );
|
|
131
|
+
|
|
132
|
+
}
|
|
112
133
|
|
|
113
134
|
}
|
|
114
135
|
|
|
@@ -150,10 +171,7 @@ const atomicNode = nodeProxy( AtomicFunctionNode );
|
|
|
150
171
|
*/
|
|
151
172
|
export const atomicFunc = ( method, pointerNode, valueNode ) => {
|
|
152
173
|
|
|
153
|
-
|
|
154
|
-
node.append();
|
|
155
|
-
|
|
156
|
-
return node;
|
|
174
|
+
return atomicNode( method, pointerNode, valueNode ).toStack();
|
|
157
175
|
|
|
158
176
|
};
|
|
159
177
|
|
|
@@ -63,7 +63,7 @@ const barrier = nodeProxy( BarrierNode );
|
|
|
63
63
|
* @function
|
|
64
64
|
* @returns {BarrierNode}
|
|
65
65
|
*/
|
|
66
|
-
export const workgroupBarrier = () => barrier( 'workgroup' ).
|
|
66
|
+
export const workgroupBarrier = () => barrier( 'workgroup' ).toStack();
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
69
|
* TSL function for creating a storage barrier. All invocations must
|
|
@@ -74,7 +74,7 @@ export const workgroupBarrier = () => barrier( 'workgroup' ).append();
|
|
|
74
74
|
* @function
|
|
75
75
|
* @returns {BarrierNode}
|
|
76
76
|
*/
|
|
77
|
-
export const storageBarrier = () => barrier( 'storage' ).
|
|
77
|
+
export const storageBarrier = () => barrier( 'storage' ).toStack();
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
80
|
* TSL function for creating a texture barrier. All invocations must
|
|
@@ -85,5 +85,5 @@ export const storageBarrier = () => barrier( 'storage' ).append();
|
|
|
85
85
|
* @function
|
|
86
86
|
* @returns {BarrierNode}
|
|
87
87
|
*/
|
|
88
|
-
export const textureBarrier = () => barrier( 'texture' ).
|
|
88
|
+
export const textureBarrier = () => barrier( 'texture' ).toStack();
|
|
89
89
|
|
|
@@ -3,7 +3,6 @@ import { NodeUpdateType } from '../core/constants.js';
|
|
|
3
3
|
import { uniform } from '../core/UniformNode.js';
|
|
4
4
|
import { Color } from '../../math/Color.js';
|
|
5
5
|
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
6
|
-
import { hash } from '../core/NodeUtils.js';
|
|
7
6
|
import { shadow } from './ShadowNode.js';
|
|
8
7
|
import { nodeObject } from '../tsl/TSLCore.js';
|
|
9
8
|
import { lightViewPosition } from '../accessors/Lights.js';
|
|
@@ -99,24 +98,19 @@ class AnalyticLightNode extends LightingNode {
|
|
|
99
98
|
|
|
100
99
|
}
|
|
101
100
|
|
|
102
|
-
/**
|
|
103
|
-
* Overwrites the default {@link Node#customCacheKey} implementation by including the
|
|
104
|
-
* `light.id` and `light.castShadow` into the cache key.
|
|
105
|
-
*
|
|
106
|
-
* @return {number} The custom cache key.
|
|
107
|
-
*/
|
|
108
|
-
customCacheKey() {
|
|
109
|
-
|
|
110
|
-
return hash( this.light.id, this.light.castShadow ? 1 : 0 );
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
|
|
114
101
|
getHash() {
|
|
115
102
|
|
|
116
103
|
return this.light.uuid;
|
|
117
104
|
|
|
118
105
|
}
|
|
119
106
|
|
|
107
|
+
/**
|
|
108
|
+
* Returns a node representing a direction vector which points from the current
|
|
109
|
+
* position in view space to the light's position in view space.
|
|
110
|
+
*
|
|
111
|
+
* @param {NodeBuilder} builder - The builder object used for setting up the light.
|
|
112
|
+
* @return {Node<vec3>} The light vector node.
|
|
113
|
+
*/
|
|
120
114
|
getLightVector( builder ) {
|
|
121
115
|
|
|
122
116
|
return lightViewPosition( this.light ).sub( builder.context.positionView || positionView );
|
|
@@ -2,10 +2,10 @@ import LightingNode from './LightingNode.js';
|
|
|
2
2
|
import { cache } from '../core/CacheNode.js';
|
|
3
3
|
import { roughness, clearcoatRoughness } from '../core/PropertyNode.js';
|
|
4
4
|
import { cameraViewMatrix } from '../accessors/Camera.js';
|
|
5
|
-
import {
|
|
5
|
+
import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js';
|
|
6
6
|
import { positionViewDirection } from '../accessors/Position.js';
|
|
7
7
|
import { float } from '../tsl/TSLBase.js';
|
|
8
|
-
import {
|
|
8
|
+
import { bentNormalView } from '../accessors/AccessorsUtils.js';
|
|
9
9
|
import { pmremTexture } from '../pmrem/PMREMNode.js';
|
|
10
10
|
import { materialEnvIntensity } from '../accessors/MaterialProperties.js';
|
|
11
11
|
|
|
@@ -72,10 +72,10 @@ class EnvironmentNode extends LightingNode {
|
|
|
72
72
|
//
|
|
73
73
|
|
|
74
74
|
const useAnisotropy = material.useAnisotropy === true || material.anisotropy > 0;
|
|
75
|
-
const radianceNormalView = useAnisotropy ?
|
|
75
|
+
const radianceNormalView = useAnisotropy ? bentNormalView : normalView;
|
|
76
76
|
|
|
77
77
|
const radiance = envNode.context( createRadianceContext( roughness, radianceNormalView ) ).mul( materialEnvIntensity );
|
|
78
|
-
const irradiance = envNode.context( createIrradianceContext(
|
|
78
|
+
const irradiance = envNode.context( createIrradianceContext( normalWorld ) ).mul( Math.PI ).mul( materialEnvIntensity );
|
|
79
79
|
|
|
80
80
|
const isolateRadiance = cache( radiance );
|
|
81
81
|
const isolateIrradiance = cache( irradiance );
|
|
@@ -92,7 +92,7 @@ class EnvironmentNode extends LightingNode {
|
|
|
92
92
|
|
|
93
93
|
if ( clearcoatRadiance ) {
|
|
94
94
|
|
|
95
|
-
const clearcoatRadianceContext = envNode.context( createRadianceContext( clearcoatRoughness,
|
|
95
|
+
const clearcoatRadianceContext = envNode.context( createRadianceContext( clearcoatRoughness, clearcoatNormalView ) ).mul( materialEnvIntensity );
|
|
96
96
|
const isolateClearcoatRadiance = cache( clearcoatRadianceContext );
|
|
97
97
|
|
|
98
98
|
clearcoatRadiance.addAssign( isolateClearcoatRadiance );
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import AnalyticLightNode from './AnalyticLightNode.js';
|
|
2
2
|
import { uniform } from '../core/UniformNode.js';
|
|
3
3
|
import { mix } from '../math/MathNode.js';
|
|
4
|
-
import {
|
|
4
|
+
import { normalWorld } from '../accessors/Normal.js';
|
|
5
5
|
import { lightPosition } from '../accessors/Lights.js';
|
|
6
6
|
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
7
7
|
|
|
@@ -73,7 +73,7 @@ class HemisphereLightNode extends AnalyticLightNode {
|
|
|
73
73
|
|
|
74
74
|
const { colorNode, groundColorNode, lightDirectionNode } = this;
|
|
75
75
|
|
|
76
|
-
const dotNL =
|
|
76
|
+
const dotNL = normalWorld.dot( lightDirectionNode );
|
|
77
77
|
const hemiDiffuseWeight = dotNL.mul( 0.5 ).add( 0.5 );
|
|
78
78
|
|
|
79
79
|
const irradiance = mix( groundColorNode, colorNode, hemiDiffuseWeight );
|
|
@@ -18,10 +18,11 @@ class IESSpotLightNode extends SpotLightNode {
|
|
|
18
18
|
/**
|
|
19
19
|
* Overwrites the default implementation to compute an IES conform spot attenuation.
|
|
20
20
|
*
|
|
21
|
+
* @param {NodeBuilder} builder - The node builder.
|
|
21
22
|
* @param {Node<float>} angleCosine - The angle to compute the spot attenuation for.
|
|
22
23
|
* @return {Node<float>} The spot attenuation.
|
|
23
24
|
*/
|
|
24
|
-
getSpotAttenuation( angleCosine ) {
|
|
25
|
+
getSpotAttenuation( builder, angleCosine ) {
|
|
25
26
|
|
|
26
27
|
const iesMap = this.light.iesMap;
|
|
27
28
|
|