super-three 0.179.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +14522 -12207
- package/build/three.core.js +12005 -10954
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +2270 -1005
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +63 -18
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +16573 -7890
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +16533 -7888
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +12 -4
- package/examples/jsm/animation/CCDIKSolver.js +8 -4
- package/examples/jsm/controls/ArcballControls.js +15 -12
- package/examples/jsm/controls/DragControls.js +9 -59
- package/examples/jsm/controls/FirstPersonControls.js +61 -57
- package/examples/jsm/controls/FlyControls.js +5 -1
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +113 -10
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +9 -9
- package/examples/jsm/controls/TransformControls.js +35 -3
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +2 -2
- package/examples/jsm/exporters/GLTFExporter.js +185 -34
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +31 -5
- package/examples/jsm/geometries/DecalGeometry.js +3 -3
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +21 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +110 -13
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +542 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +380 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +268 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +2072 -0
- package/examples/jsm/inspector/ui/Style.js +1667 -0
- package/examples/jsm/inspector/ui/Tab.js +265 -0
- package/examples/jsm/inspector/ui/Values.js +476 -0
- package/examples/jsm/inspector/ui/utils.js +69 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +3 -3
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +27 -4029
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +692 -53
- package/examples/jsm/loaders/FBXLoader.js +237 -39
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +159 -185
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +162 -53
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +9 -41
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +4 -4
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/TTFLoader.js +4 -4
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -2
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +91 -7
- package/examples/jsm/objects/SkyMesh.js +151 -17
- package/examples/jsm/objects/Water.js +7 -6
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +11 -13
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +175 -61
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +21 -8
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +7 -6
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +52 -10
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +23 -9
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
- package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +59 -9
- package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +81 -20
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +638 -0
- package/examples/jsm/tsl/display/SSRNode.js +186 -69
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +381 -75
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +16 -18
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
- package/package.json +27 -38
- package/src/Three.Core.js +7 -3
- package/src/Three.TSL.js +61 -16
- package/src/Three.WebGPU.Nodes.js +7 -0
- package/src/Three.WebGPU.js +11 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +21 -5
- package/src/animation/AnimationMixer.js +9 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +54 -14
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +11 -10
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +100 -7
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +24 -12
- package/src/core/Clock.js +7 -0
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +55 -6
- package/src/core/Raycaster.js +4 -3
- package/src/core/RenderTarget.js +14 -5
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +259 -57
- package/src/extras/TextureUtils.js +6 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +10 -8
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +9 -3
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +4 -1
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +13 -2
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +30 -2
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +4 -4
- package/src/loaders/ImageBitmapLoader.js +17 -13
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +9 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +6 -4
- package/src/loaders/ObjectLoader.js +57 -17
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +5 -4
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +11 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +11 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +2 -1
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +22 -3
- package/src/materials/nodes/Line2NodeMaterial.js +36 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +95 -35
- package/src/materials/nodes/PointsNodeMaterial.js +81 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +23 -21
- package/src/math/Matrix2.js +14 -10
- package/src/math/Matrix3.js +15 -11
- package/src/math/Matrix4.js +94 -81
- package/src/math/Plane.js +5 -4
- package/src/math/Quaternion.js +60 -84
- package/src/math/Sphere.js +1 -1
- package/src/math/Spherical.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -65
- package/src/nodes/TSL.js +11 -8
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +30 -3
- package/src/nodes/accessors/Camera.js +260 -13
- package/src/nodes/accessors/ClippingNode.js +10 -9
- package/src/nodes/accessors/CubeTextureNode.js +32 -6
- package/src/nodes/accessors/InstanceNode.js +164 -39
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +16 -15
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +51 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
- package/src/nodes/accessors/ReferenceNode.js +11 -10
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -24
- package/src/nodes/accessors/StorageTextureNode.js +62 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +41 -31
- package/src/nodes/accessors/TextureNode.js +193 -63
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +25 -5
- package/src/nodes/code/FunctionNode.js +25 -3
- package/src/nodes/core/ArrayNode.js +22 -2
- package/src/nodes/core/AssignNode.js +6 -5
- package/src/nodes/core/AttributeNode.js +5 -4
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +133 -15
- package/src/nodes/core/IndexNode.js +4 -3
- package/src/nodes/core/InputNode.js +3 -2
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +264 -46
- package/src/nodes/core/NodeBuilder.js +453 -87
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +31 -23
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +25 -97
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +34 -3
- package/src/nodes/core/PropertyNode.js +26 -3
- package/src/nodes/core/StackNode.js +99 -23
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +22 -8
- package/src/nodes/core/StructTypeNode.js +13 -18
- package/src/nodes/core/SubBuildNode.js +4 -4
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +37 -13
- package/src/nodes/core/VarNode.js +96 -34
- package/src/nodes/core/VaryingNode.js +2 -18
- package/src/nodes/display/BlendModes.js +0 -63
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +18 -1
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +4 -8
- package/src/nodes/display/NormalMapNode.js +41 -5
- package/src/nodes/display/PassNode.js +175 -25
- package/src/nodes/display/RenderOutputNode.js +35 -9
- package/src/nodes/display/ScreenNode.js +47 -15
- package/src/nodes/display/ToneMappingNode.js +32 -5
- package/src/nodes/display/ToonOutlinePassNode.js +10 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +72 -14
- package/src/nodes/fog/Fog.js +18 -34
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +128 -46
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +44 -6
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
- package/src/nodes/gpgpu/ComputeNode.js +76 -38
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +34 -9
- package/src/nodes/lighting/LightsNode.js +10 -32
- package/src/nodes/lighting/PointShadowNode.js +167 -148
- package/src/nodes/lighting/ShadowFilterNode.js +55 -65
- package/src/nodes/lighting/ShadowNode.js +189 -44
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +25 -8
- package/src/nodes/math/MathNode.js +98 -57
- package/src/nodes/math/OperatorNode.js +8 -5
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +111 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -3
- package/src/nodes/tsl/TSLCore.js +488 -166
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +14 -13
- package/src/nodes/utils/EventNode.js +67 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +7 -4
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +60 -8
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +60 -1
- package/src/nodes/utils/RTTNode.js +14 -4
- package/src/nodes/utils/ReflectorNode.js +61 -11
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +12 -2
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +12 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +46 -18
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +3 -2
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +12 -2
- package/src/objects/SkinnedMesh.js +29 -10
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +372 -179
- package/src/renderers/common/Animation.js +16 -4
- package/src/renderers/common/Attributes.js +16 -2
- package/src/renderers/common/Backend.js +137 -35
- package/src/renderers/common/Background.js +28 -14
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +83 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +55 -3
- package/src/renderers/common/Info.js +337 -6
- package/src/renderers/common/InspectorBase.js +151 -0
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +41 -8
- package/src/renderers/common/PostProcessing.js +9 -226
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +18 -2
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +32 -6
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +22 -6
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +927 -335
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +9 -1
- package/src/renderers/common/Sampler.js +52 -14
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +208 -47
- package/src/renderers/common/TimestampQueryPool.js +70 -6
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +64 -2
- package/src/renderers/common/XRManager.js +79 -51
- package/src/renderers/common/extras/PMREMGenerator.js +176 -79
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +8 -5
- package/src/renderers/shaders/UniformsUtils.js +52 -9
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +11 -5
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +63 -122
- package/src/renderers/webgl/WebGLPrograms.js +65 -52
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +191 -26
- package/src/renderers/webgl/WebGLState.js +79 -40
- package/src/renderers/webgl/WebGLTextures.js +234 -68
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
- package/src/renderers/webgl/WebGLUtils.js +8 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
- package/src/renderers/webgpu/WebGPUBackend.js +403 -253
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +5 -3
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
- package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +45 -29
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/ExternalTexture.js +15 -4
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +5 -4
- package/src/textures/Texture.js +19 -7
- package/src/textures/VideoTexture.js +2 -3
- package/src/utils.js +344 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -144
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -8,8 +8,8 @@ import { positionGeometry } from '../../nodes/accessors/Position.js';
|
|
|
8
8
|
import { mix, smoothstep } from '../../nodes/math/MathNode.js';
|
|
9
9
|
import { Fn, float, vec2, vec3, vec4, If } from '../../nodes/tsl/TSLBase.js';
|
|
10
10
|
import { uv } from '../../nodes/accessors/UV.js';
|
|
11
|
-
import { viewport } from '../../nodes/display/ScreenNode.js';
|
|
12
|
-
import {
|
|
11
|
+
import { screenDPR, viewport } from '../../nodes/display/ScreenNode.js';
|
|
12
|
+
import { viewportOpaqueMipTexture } from '../../nodes/display/ViewportTextureNode.js';
|
|
13
13
|
|
|
14
14
|
import { LineDashedMaterial } from '../LineDashedMaterial.js';
|
|
15
15
|
import { NoBlending } from '../../constants.js';
|
|
@@ -56,7 +56,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
56
56
|
* @type {boolean}
|
|
57
57
|
* @default false
|
|
58
58
|
*/
|
|
59
|
-
this.
|
|
59
|
+
this.vertexColors = parameters.vertexColors;
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
62
|
* The dash offset.
|
|
@@ -133,7 +133,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
133
133
|
const { renderer } = builder;
|
|
134
134
|
|
|
135
135
|
const useAlphaToCoverage = this._useAlphaToCoverage;
|
|
136
|
-
const
|
|
136
|
+
const vertexColors = this.vertexColors;
|
|
137
137
|
const useDash = this._useDash;
|
|
138
138
|
const useWorldUnits = this._useWorldUnits;
|
|
139
139
|
|
|
@@ -300,7 +300,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
300
300
|
offset.assign( offset.mul( materialLineWidth ) );
|
|
301
301
|
|
|
302
302
|
// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...
|
|
303
|
-
offset.assign( offset.div( viewport.w ) );
|
|
303
|
+
offset.assign( offset.div( viewport.w.div( screenDPR ) ) );
|
|
304
304
|
|
|
305
305
|
// select end
|
|
306
306
|
clip.assign( positionGeometry.y.lessThan( 0.5 ).select( clipStart, clipEnd ) );
|
|
@@ -378,7 +378,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
378
378
|
|
|
379
379
|
if ( ! useDash ) {
|
|
380
380
|
|
|
381
|
-
if ( useAlphaToCoverage && renderer.
|
|
381
|
+
if ( useAlphaToCoverage && renderer.currentSamples > 0 ) {
|
|
382
382
|
|
|
383
383
|
const dnorm = norm.fwidth();
|
|
384
384
|
alpha.assign( smoothstep( dnorm.negate().add( 0.5 ), dnorm.add( 0.5 ), norm ).oneMinus() );
|
|
@@ -395,7 +395,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
395
395
|
|
|
396
396
|
// round endcaps
|
|
397
397
|
|
|
398
|
-
if ( useAlphaToCoverage && renderer.
|
|
398
|
+
if ( useAlphaToCoverage && renderer.currentSamples > 0 ) {
|
|
399
399
|
|
|
400
400
|
const a = vUv.x;
|
|
401
401
|
const b = vUv.y.greaterThan( 0.0 ).select( vUv.y.sub( 1.0 ), vUv.y.add( 1.0 ) );
|
|
@@ -434,7 +434,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
434
434
|
|
|
435
435
|
} else {
|
|
436
436
|
|
|
437
|
-
if (
|
|
437
|
+
if ( vertexColors ) {
|
|
438
438
|
|
|
439
439
|
const instanceColorStart = attribute( 'instanceColorStart' );
|
|
440
440
|
const instanceColorEnd = attribute( 'instanceColorEnd' );
|
|
@@ -459,7 +459,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
459
459
|
|
|
460
460
|
const opacityNode = this.opacityNode ? float( this.opacityNode ) : materialOpacity;
|
|
461
461
|
|
|
462
|
-
this.outputNode = vec4( this.colorNode.rgb.mul( opacityNode ).add(
|
|
462
|
+
this.outputNode = vec4( this.colorNode.rgb.mul( opacityNode ).add( viewportOpaqueMipTexture().rgb.mul( opacityNode.oneMinus() ) ), this.colorNode.a );
|
|
463
463
|
|
|
464
464
|
}
|
|
465
465
|
|
|
@@ -537,6 +537,33 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
537
537
|
|
|
538
538
|
}
|
|
539
539
|
|
|
540
|
+
/**
|
|
541
|
+
* Copies the properties of the given material to this instance.
|
|
542
|
+
*
|
|
543
|
+
* @param {Line2NodeMaterial} source - The material to copy.
|
|
544
|
+
* @return {Line2NodeMaterial} A reference to this material.
|
|
545
|
+
*/
|
|
546
|
+
copy( source ) {
|
|
547
|
+
|
|
548
|
+
super.copy( source );
|
|
549
|
+
|
|
550
|
+
this.vertexColors = source.vertexColors;
|
|
551
|
+
this.dashOffset = source.dashOffset;
|
|
552
|
+
|
|
553
|
+
this.lineColorNode = source.lineColorNode;
|
|
554
|
+
this.offsetNode = source.offsetNode;
|
|
555
|
+
this.dashScaleNode = source.dashScaleNode;
|
|
556
|
+
this.dashSizeNode = source.dashSizeNode;
|
|
557
|
+
this.gapSizeNode = source.gapSizeNode;
|
|
558
|
+
|
|
559
|
+
this._useDash = source._useDash;
|
|
560
|
+
this._useAlphaToCoverage = source._useAlphaToCoverage;
|
|
561
|
+
this._useWorldUnits = source._useWorldUnits;
|
|
562
|
+
|
|
563
|
+
return this;
|
|
564
|
+
|
|
565
|
+
}
|
|
566
|
+
|
|
540
567
|
}
|
|
541
568
|
|
|
542
569
|
export default Line2NodeMaterial;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion } from '../../nodes/core/PropertyNode.js';
|
|
1
|
+
import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness, specularColor, specularColorBlended, specularF90, diffuseColor, metalness, roughness, anisotropy, alphaT, anisotropyT, anisotropyB, ior, transmission, thickness, attenuationDistance, attenuationColor, dispersion } from '../../nodes/core/PropertyNode.js';
|
|
2
2
|
import { materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialSpecularIntensity, materialSpecularColor, materialAnisotropy, materialIOR, materialTransmission, materialThickness, materialAttenuationDistance, materialAttenuationColor, materialDispersion } from '../../nodes/accessors/MaterialNode.js';
|
|
3
3
|
import { float, vec2, vec3, If } from '../../nodes/tsl/TSLBase.js';
|
|
4
4
|
import getRoughness from '../../nodes/functions/material/getRoughness.js';
|
|
@@ -350,7 +350,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
350
350
|
const iorNode = this.iorNode ? float( this.iorNode ) : materialIOR;
|
|
351
351
|
|
|
352
352
|
ior.assign( iorNode );
|
|
353
|
-
specularColor.assign(
|
|
353
|
+
specularColor.assign( min( pow2( ior.sub( 1.0 ).div( ior.add( 1.0 ) ) ).mul( materialSpecularColor ), vec3( 1.0 ) ).mul( materialSpecularIntensity ) );
|
|
354
|
+
specularColorBlended.assign( mix( specularColor, diffuseColor.rgb, metalness ) );
|
|
354
355
|
specularF90.assign( mix( materialSpecularIntensity, 1.0, metalness ) );
|
|
355
356
|
|
|
356
357
|
}
|
|
@@ -501,6 +502,8 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
501
502
|
this.specularIntensityNode = source.specularIntensityNode;
|
|
502
503
|
this.specularColorNode = source.specularColorNode;
|
|
503
504
|
|
|
505
|
+
this.iorNode = source.iorNode;
|
|
506
|
+
|
|
504
507
|
this.transmissionNode = source.transmissionNode;
|
|
505
508
|
this.thicknessNode = source.thicknessNode;
|
|
506
509
|
this.attenuationDistanceNode = source.attenuationDistanceNode;
|
|
@@ -39,7 +39,7 @@ class SSSLightingModel extends PhysicalLightingModel {
|
|
|
39
39
|
/**
|
|
40
40
|
* Extends the default implementation with a SSS term.
|
|
41
41
|
*
|
|
42
|
-
* Reference: [Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look]
|
|
42
|
+
* Reference: [Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look](https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/)
|
|
43
43
|
*
|
|
44
44
|
* @param {Object} input - The input data.
|
|
45
45
|
* @param {NodeBuilder} builder - The current node builder.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import NodeMaterial from './NodeMaterial.js';
|
|
2
|
-
import { diffuseColor, metalness, roughness, specularColor, specularF90 } from '../../nodes/core/PropertyNode.js';
|
|
2
|
+
import { diffuseColor, diffuseContribution, metalness, roughness, specularColor, specularColorBlended, specularF90 } from '../../nodes/core/PropertyNode.js';
|
|
3
3
|
import { mix } from '../../nodes/math/MathNode.js';
|
|
4
4
|
import { materialRoughness, materialMetalness } from '../../nodes/accessors/MaterialNode.js';
|
|
5
5
|
import getRoughness from '../../nodes/functions/material/getRoughness.js';
|
|
6
6
|
import PhysicalLightingModel from '../../nodes/functions/PhysicalLightingModel.js';
|
|
7
7
|
import EnvironmentNode from '../../nodes/lighting/EnvironmentNode.js';
|
|
8
|
-
import { float, vec3
|
|
8
|
+
import { float, vec3 } from '../../nodes/tsl/TSLBase.js';
|
|
9
9
|
|
|
10
10
|
import { MeshStandardMaterial } from '../MeshStandardMaterial.js';
|
|
11
11
|
|
|
@@ -135,7 +135,8 @@ class MeshStandardNodeMaterial extends NodeMaterial {
|
|
|
135
135
|
|
|
136
136
|
const specularColorNode = mix( vec3( 0.04 ), diffuseColor.rgb, metalness );
|
|
137
137
|
|
|
138
|
-
specularColor.assign(
|
|
138
|
+
specularColor.assign( vec3( 0.04 ) );
|
|
139
|
+
specularColorBlended.assign( specularColorNode );
|
|
139
140
|
specularF90.assign( 1.0 );
|
|
140
141
|
|
|
141
142
|
}
|
|
@@ -166,7 +167,7 @@ class MeshStandardNodeMaterial extends NodeMaterial {
|
|
|
166
167
|
|
|
167
168
|
// DIFFUSE COLOR
|
|
168
169
|
|
|
169
|
-
|
|
170
|
+
diffuseContribution.assign( diffuseColor.rgb.mul( metalnessNode.oneMinus() ) );
|
|
170
171
|
|
|
171
172
|
}
|
|
172
173
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Material } from '../Material.js';
|
|
2
|
-
import { NormalBlending } from '../../constants.js';
|
|
3
2
|
|
|
4
|
-
import {
|
|
3
|
+
import { hashArray, hashString } from '../../nodes/core/NodeUtils.js';
|
|
5
4
|
import { output, diffuseColor, emissive, varyingProperty } from '../../nodes/core/PropertyNode.js';
|
|
6
5
|
import { materialAlphaTest, materialColor, materialOpacity, materialEmissive, materialNormal, materialLightMap, materialAO } from '../../nodes/accessors/MaterialNode.js';
|
|
7
6
|
import { modelViewProjection } from '../../nodes/accessors/ModelViewProjectionNode.js';
|
|
@@ -12,7 +11,7 @@ import { materialReference } from '../../nodes/accessors/MaterialReferenceNode.j
|
|
|
12
11
|
import { positionLocal, positionView } from '../../nodes/accessors/Position.js';
|
|
13
12
|
import { skinning } from '../../nodes/accessors/SkinningNode.js';
|
|
14
13
|
import { morphReference } from '../../nodes/accessors/MorphNode.js';
|
|
15
|
-
import { mix } from '../../nodes/math/MathNode.js';
|
|
14
|
+
import { fwidth, mix, smoothstep } from '../../nodes/math/MathNode.js';
|
|
16
15
|
import { float, vec3, vec4, bool } from '../../nodes/tsl/TSLBase.js';
|
|
17
16
|
import AONode from '../../nodes/lighting/AONode.js';
|
|
18
17
|
import { lightingContext } from '../../nodes/lighting/LightingContextNode.js';
|
|
@@ -181,7 +180,7 @@ class NodeMaterial extends Material {
|
|
|
181
180
|
* and `alphaMap` properties. This node property allows to overwrite the default
|
|
182
181
|
* and define the opacity with a node instead.
|
|
183
182
|
*
|
|
184
|
-
* If you don't want to overwrite the
|
|
183
|
+
* If you don't want to overwrite the opacity but modify the existing
|
|
185
184
|
* value instead, use {@link materialOpacity}.
|
|
186
185
|
*
|
|
187
186
|
* @type {?Node<float>}
|
|
@@ -240,6 +239,14 @@ class NodeMaterial extends Material {
|
|
|
240
239
|
*/
|
|
241
240
|
this.maskNode = null;
|
|
242
241
|
|
|
242
|
+
/**
|
|
243
|
+
* This node can be used to implement a shadow mask for the material.
|
|
244
|
+
*
|
|
245
|
+
* @type {?Node<bool>}
|
|
246
|
+
* @default null
|
|
247
|
+
*/
|
|
248
|
+
this.maskShadowNode = null;
|
|
249
|
+
|
|
243
250
|
/**
|
|
244
251
|
* The local vertex positions are computed based on multiple factors like the
|
|
245
252
|
* attribute data, morphing or skinning. This node property allows to overwrite
|
|
@@ -382,25 +389,41 @@ class NodeMaterial extends Material {
|
|
|
382
389
|
*/
|
|
383
390
|
this.vertexNode = null;
|
|
384
391
|
|
|
385
|
-
|
|
392
|
+
/**
|
|
393
|
+
* This node can be used as a global context management component for this material.
|
|
394
|
+
*
|
|
395
|
+
* @type {?ContextNode}
|
|
396
|
+
* @default null
|
|
397
|
+
*/
|
|
398
|
+
this.contextNode = null;
|
|
386
399
|
|
|
387
|
-
|
|
400
|
+
}
|
|
388
401
|
|
|
389
|
-
|
|
402
|
+
/**
|
|
403
|
+
* Returns an array of child nodes for this material.
|
|
404
|
+
*
|
|
405
|
+
* @private
|
|
406
|
+
* @returns {Array<{property: string, childNode: Node}>}
|
|
407
|
+
*/
|
|
408
|
+
_getNodeChildren() {
|
|
409
|
+
|
|
410
|
+
const children = [];
|
|
390
411
|
|
|
391
|
-
|
|
412
|
+
for ( const property of Object.getOwnPropertyNames( this ) ) {
|
|
392
413
|
|
|
393
|
-
|
|
414
|
+
if ( property.startsWith( '_' ) === true ) continue;
|
|
394
415
|
|
|
395
|
-
|
|
416
|
+
const object = this[ property ];
|
|
396
417
|
|
|
397
|
-
|
|
418
|
+
if ( object && object.isNode === true ) {
|
|
398
419
|
|
|
399
|
-
|
|
420
|
+
children.push( { property, childNode: object } );
|
|
400
421
|
|
|
401
422
|
}
|
|
402
423
|
|
|
403
|
-
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
return children;
|
|
404
427
|
|
|
405
428
|
}
|
|
406
429
|
|
|
@@ -412,7 +435,15 @@ class NodeMaterial extends Material {
|
|
|
412
435
|
*/
|
|
413
436
|
customProgramCacheKey() {
|
|
414
437
|
|
|
415
|
-
|
|
438
|
+
const values = [];
|
|
439
|
+
|
|
440
|
+
for ( const { property, childNode } of this._getNodeChildren() ) {
|
|
441
|
+
|
|
442
|
+
values.push( hashString( property.slice( 0, - 4 ) ), childNode.getCacheKey() );
|
|
443
|
+
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
return this.type + hashArray( values );
|
|
416
447
|
|
|
417
448
|
}
|
|
418
449
|
|
|
@@ -457,9 +488,11 @@ class NodeMaterial extends Material {
|
|
|
457
488
|
|
|
458
489
|
builder.addStack();
|
|
459
490
|
|
|
460
|
-
const mvp =
|
|
491
|
+
const mvp = this.setupVertex( builder );
|
|
461
492
|
|
|
462
|
-
const vertexNode = this.vertexNode || mvp;
|
|
493
|
+
const vertexNode = subBuild( this.vertexNode || mvp, 'VERTEX' );
|
|
494
|
+
|
|
495
|
+
builder.context.clipSpace = vertexNode;
|
|
463
496
|
|
|
464
497
|
builder.stack.outputNode = vertexNode;
|
|
465
498
|
|
|
@@ -504,7 +537,7 @@ class NodeMaterial extends Material {
|
|
|
504
537
|
|
|
505
538
|
const outgoingLightNode = this.setupLighting( builder );
|
|
506
539
|
|
|
507
|
-
if ( clippingNode !== null ) builder.stack.
|
|
540
|
+
if ( clippingNode !== null ) builder.stack.addToStack( clippingNode );
|
|
508
541
|
|
|
509
542
|
// force unsigned floats - useful for RenderTargets
|
|
510
543
|
|
|
@@ -522,6 +555,14 @@ class NodeMaterial extends Material {
|
|
|
522
555
|
|
|
523
556
|
if ( isCustomOutput ) resultNode = this.outputNode;
|
|
524
557
|
|
|
558
|
+
//
|
|
559
|
+
|
|
560
|
+
if ( builder.context.getOutput ) {
|
|
561
|
+
|
|
562
|
+
resultNode = builder.context.getOutput( resultNode, builder );
|
|
563
|
+
|
|
564
|
+
}
|
|
565
|
+
|
|
525
566
|
// MRT
|
|
526
567
|
|
|
527
568
|
if ( renderTarget !== null ) {
|
|
@@ -589,7 +630,7 @@ class NodeMaterial extends Material {
|
|
|
589
630
|
|
|
590
631
|
if ( unionPlanes.length > 0 || intersectionPlanes.length > 0 ) {
|
|
591
632
|
|
|
592
|
-
const samples = builder.renderer.
|
|
633
|
+
const samples = builder.renderer.currentSamples;
|
|
593
634
|
|
|
594
635
|
if ( this.alphaToCoverage && samples > 1 ) {
|
|
595
636
|
|
|
@@ -598,7 +639,7 @@ class NodeMaterial extends Material {
|
|
|
598
639
|
|
|
599
640
|
} else {
|
|
600
641
|
|
|
601
|
-
builder.stack.
|
|
642
|
+
builder.stack.addToStack( clipping() );
|
|
602
643
|
|
|
603
644
|
}
|
|
604
645
|
|
|
@@ -625,7 +666,7 @@ class NodeMaterial extends Material {
|
|
|
625
666
|
|
|
626
667
|
if ( candidateCount > 0 && candidateCount <= 8 && builder.isAvailable( 'clipDistance' ) ) {
|
|
627
668
|
|
|
628
|
-
builder.stack.
|
|
669
|
+
builder.stack.addToStack( hardwareClipping() );
|
|
629
670
|
|
|
630
671
|
this.hardwareClipping = true;
|
|
631
672
|
|
|
@@ -717,7 +758,7 @@ class NodeMaterial extends Material {
|
|
|
717
758
|
|
|
718
759
|
this.setupPosition( builder );
|
|
719
760
|
|
|
720
|
-
builder.context.
|
|
761
|
+
builder.context.position = builder.removeStack();
|
|
721
762
|
|
|
722
763
|
return modelViewProjection;
|
|
723
764
|
|
|
@@ -783,7 +824,9 @@ class NodeMaterial extends Material {
|
|
|
783
824
|
* @param {NodeBuilder} builder - The current node builder.
|
|
784
825
|
* @param {BufferGeometry} geometry - The geometry.
|
|
785
826
|
*/
|
|
786
|
-
setupDiffuseColor(
|
|
827
|
+
setupDiffuseColor( builder ) {
|
|
828
|
+
|
|
829
|
+
const { object, geometry } = builder;
|
|
787
830
|
|
|
788
831
|
// MASK
|
|
789
832
|
|
|
@@ -842,7 +885,16 @@ class NodeMaterial extends Material {
|
|
|
842
885
|
|
|
843
886
|
alphaTestNode = this.alphaTestNode !== null ? float( this.alphaTestNode ) : materialAlphaTest;
|
|
844
887
|
|
|
845
|
-
|
|
888
|
+
if ( this.alphaToCoverage === true ) {
|
|
889
|
+
|
|
890
|
+
diffuseColor.a = smoothstep( alphaTestNode, alphaTestNode.add( fwidth( diffuseColor.a ) ), diffuseColor.a );
|
|
891
|
+
diffuseColor.a.lessThanEqual( 0 ).discard();
|
|
892
|
+
|
|
893
|
+
} else {
|
|
894
|
+
|
|
895
|
+
diffuseColor.a.lessThanEqual( alphaTestNode ).discard();
|
|
896
|
+
|
|
897
|
+
}
|
|
846
898
|
|
|
847
899
|
}
|
|
848
900
|
|
|
@@ -856,16 +908,10 @@ class NodeMaterial extends Material {
|
|
|
856
908
|
|
|
857
909
|
// OPAQUE
|
|
858
910
|
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
if ( isOpaque ) {
|
|
911
|
+
if ( builder.isOpaque() ) {
|
|
862
912
|
|
|
863
913
|
diffuseColor.a.assign( 1.0 );
|
|
864
914
|
|
|
865
|
-
} else if ( alphaTestNode === null ) {
|
|
866
|
-
|
|
867
|
-
diffuseColor.a.lessThanEqual( 0 ).discard();
|
|
868
|
-
|
|
869
915
|
}
|
|
870
916
|
|
|
871
917
|
}
|
|
@@ -977,9 +1023,21 @@ class NodeMaterial extends Material {
|
|
|
977
1023
|
|
|
978
1024
|
}
|
|
979
1025
|
|
|
980
|
-
|
|
1026
|
+
let aoNode = this.aoNode;
|
|
1027
|
+
|
|
1028
|
+
if ( aoNode === null && builder.material.aoMap ) {
|
|
1029
|
+
|
|
1030
|
+
aoNode = materialAO;
|
|
1031
|
+
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
if ( builder.context.getAO ) {
|
|
1035
|
+
|
|
1036
|
+
aoNode = builder.context.getAO( aoNode, builder );
|
|
1037
|
+
|
|
1038
|
+
}
|
|
981
1039
|
|
|
982
|
-
|
|
1040
|
+
if ( aoNode ) {
|
|
983
1041
|
|
|
984
1042
|
materialLightsNode.push( new AONode( aoNode ) );
|
|
985
1043
|
|
|
@@ -1183,11 +1241,9 @@ class NodeMaterial extends Material {
|
|
|
1183
1241
|
}
|
|
1184
1242
|
|
|
1185
1243
|
const data = Material.prototype.toJSON.call( this, meta );
|
|
1186
|
-
const nodeChildren = getNodeChildren( this );
|
|
1187
|
-
|
|
1188
1244
|
data.inputNodes = {};
|
|
1189
1245
|
|
|
1190
|
-
for ( const { property, childNode } of
|
|
1246
|
+
for ( const { property, childNode } of this._getNodeChildren() ) {
|
|
1191
1247
|
|
|
1192
1248
|
data.inputNodes[ property ] = childNode.toJSON( meta ).uuid;
|
|
1193
1249
|
|
|
@@ -1237,6 +1293,7 @@ class NodeMaterial extends Material {
|
|
|
1237
1293
|
|
|
1238
1294
|
this.lightsNode = source.lightsNode;
|
|
1239
1295
|
this.envNode = source.envNode;
|
|
1296
|
+
this.aoNode = source.aoNode;
|
|
1240
1297
|
|
|
1241
1298
|
this.colorNode = source.colorNode;
|
|
1242
1299
|
this.normalNode = source.normalNode;
|
|
@@ -1245,6 +1302,7 @@ class NodeMaterial extends Material {
|
|
|
1245
1302
|
this.backdropAlphaNode = source.backdropAlphaNode;
|
|
1246
1303
|
this.alphaTestNode = source.alphaTestNode;
|
|
1247
1304
|
this.maskNode = source.maskNode;
|
|
1305
|
+
this.maskShadowNode = source.maskShadowNode;
|
|
1248
1306
|
|
|
1249
1307
|
this.positionNode = source.positionNode;
|
|
1250
1308
|
this.geometryNode = source.geometryNode;
|
|
@@ -1261,6 +1319,8 @@ class NodeMaterial extends Material {
|
|
|
1261
1319
|
this.fragmentNode = source.fragmentNode;
|
|
1262
1320
|
this.vertexNode = source.vertexNode;
|
|
1263
1321
|
|
|
1322
|
+
this.contextNode = source.contextNode;
|
|
1323
|
+
|
|
1264
1324
|
return super.copy( source );
|
|
1265
1325
|
|
|
1266
1326
|
}
|
|
@@ -1,18 +1,36 @@
|
|
|
1
1
|
import SpriteNodeMaterial from './SpriteNodeMaterial.js';
|
|
2
|
-
import {
|
|
2
|
+
import { viewportSize, screenDPR } from '../../nodes/display/ScreenNode.js';
|
|
3
3
|
import { positionGeometry, positionLocal, positionView } from '../../nodes/accessors/Position.js';
|
|
4
4
|
import { modelViewMatrix } from '../../nodes/accessors/ModelNode.js';
|
|
5
5
|
import { materialPointSize } from '../../nodes/accessors/MaterialNode.js';
|
|
6
6
|
import { rotate } from '../../nodes/utils/RotateNode.js';
|
|
7
|
-
import { float, vec2, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
|
|
7
|
+
import { float, uniform, vec2, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
|
|
8
8
|
|
|
9
9
|
import { PointsMaterial } from '../PointsMaterial.js';
|
|
10
|
+
import { Vector2 } from '../../math/Vector2.js';
|
|
10
11
|
|
|
11
12
|
const _defaultValues = /*@__PURE__*/ new PointsMaterial();
|
|
13
|
+
const _size = /*@__PURE__*/ new Vector2();
|
|
12
14
|
|
|
13
15
|
/**
|
|
14
16
|
* Node material version of {@link PointsMaterial}.
|
|
15
17
|
*
|
|
18
|
+
* This material can be used in two ways:
|
|
19
|
+
*
|
|
20
|
+
* - By rendering point primitives with {@link Points}. Since WebGPU only supports point primitives
|
|
21
|
+
* with a pixel size of `1`, it's not possible to define a size.
|
|
22
|
+
*
|
|
23
|
+
* ```js
|
|
24
|
+
* const pointCloud = new THREE.Points( geometry, new THREE.PointsNodeMaterial() );
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* - By rendering point primitives with {@link Sprites}. In this case, size is honored,
|
|
28
|
+
* see {@link PointsNodeMaterial#sizeNode}.
|
|
29
|
+
*
|
|
30
|
+
* ```js
|
|
31
|
+
* const instancedPoints = new THREE.Sprite( new THREE.PointsNodeMaterial( { positionNode: instancedBufferAttribute( positionAttribute ) } ) );
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
16
34
|
* @augments SpriteNodeMaterial
|
|
17
35
|
*/
|
|
18
36
|
class PointsNodeMaterial extends SpriteNodeMaterial {
|
|
@@ -68,68 +86,95 @@ class PointsNodeMaterial extends SpriteNodeMaterial {
|
|
|
68
86
|
|
|
69
87
|
}
|
|
70
88
|
|
|
71
|
-
|
|
89
|
+
setupVertexSprite( builder ) {
|
|
72
90
|
|
|
73
|
-
const
|
|
91
|
+
const { material, camera } = builder;
|
|
92
|
+
|
|
93
|
+
const { rotationNode, scaleNode, sizeNode, sizeAttenuation } = this;
|
|
94
|
+
|
|
95
|
+
let mvp = super.setupVertex( builder );
|
|
74
96
|
|
|
75
97
|
// skip further processing if the material is not a node material
|
|
76
98
|
|
|
77
|
-
if (
|
|
99
|
+
if ( material.isNodeMaterial !== true ) {
|
|
78
100
|
|
|
79
101
|
return mvp;
|
|
80
102
|
|
|
81
103
|
}
|
|
82
104
|
|
|
83
|
-
//
|
|
105
|
+
// point size
|
|
84
106
|
|
|
85
|
-
|
|
107
|
+
let pointSize = sizeNode !== null ? vec2( sizeNode ) : materialPointSize;
|
|
86
108
|
|
|
87
|
-
|
|
88
|
-
const aspect = viewport.z.div( viewport.w );
|
|
109
|
+
pointSize = pointSize.mul( screenDPR );
|
|
89
110
|
|
|
90
|
-
//
|
|
111
|
+
// size attenuation
|
|
91
112
|
|
|
92
|
-
if (
|
|
113
|
+
if ( camera.isPerspectiveCamera && sizeAttenuation === true ) {
|
|
93
114
|
|
|
94
|
-
|
|
115
|
+
// follow WebGLRenderer's implementation, and scale by half the canvas height in logical units
|
|
95
116
|
|
|
96
|
-
|
|
117
|
+
pointSize = pointSize.mul( scale.div( positionView.z.negate() ) );
|
|
97
118
|
|
|
98
119
|
}
|
|
99
120
|
|
|
100
|
-
//
|
|
101
|
-
|
|
102
|
-
let pointSize = sizeNode !== null ? vec2( sizeNode ) : materialPointSize;
|
|
121
|
+
// scale
|
|
103
122
|
|
|
104
|
-
if (
|
|
123
|
+
if ( scaleNode && scaleNode.isNode ) {
|
|
105
124
|
|
|
106
|
-
pointSize = pointSize.mul(
|
|
125
|
+
pointSize = pointSize.mul( vec2( scaleNode ) );
|
|
107
126
|
|
|
108
127
|
}
|
|
109
128
|
|
|
110
|
-
//
|
|
129
|
+
// compute offset
|
|
111
130
|
|
|
112
|
-
|
|
131
|
+
let offset = positionGeometry.xy;
|
|
113
132
|
|
|
114
|
-
|
|
133
|
+
// apply rotation
|
|
134
|
+
|
|
135
|
+
if ( rotationNode && rotationNode.isNode ) {
|
|
136
|
+
|
|
137
|
+
const rotation = float( rotationNode );
|
|
138
|
+
|
|
139
|
+
offset = rotate( offset, rotation );
|
|
115
140
|
|
|
116
141
|
}
|
|
117
142
|
|
|
118
|
-
|
|
143
|
+
// account for point size
|
|
144
|
+
|
|
145
|
+
offset = offset.mul( pointSize );
|
|
146
|
+
|
|
147
|
+
// scale by viewport size
|
|
148
|
+
|
|
149
|
+
offset = offset.div( viewportSize.div( 2 ) );
|
|
119
150
|
|
|
120
|
-
|
|
121
|
-
alignedPosition.y.assign( alignedPosition.y.mul( aspect ) );
|
|
151
|
+
// compensate for the perspective divide
|
|
122
152
|
|
|
123
|
-
|
|
124
|
-
alignedPosition.assign( alignedPosition.mul( mvp.w ) );
|
|
153
|
+
offset = offset.mul( mvp.w );
|
|
125
154
|
|
|
126
|
-
//
|
|
127
|
-
|
|
155
|
+
// add offset
|
|
156
|
+
|
|
157
|
+
mvp = mvp.add( vec4( offset, 0, 0 ) );
|
|
128
158
|
|
|
129
159
|
return mvp;
|
|
130
160
|
|
|
131
161
|
}
|
|
132
162
|
|
|
163
|
+
setupVertex( builder ) {
|
|
164
|
+
|
|
165
|
+
if ( builder.object.isPoints ) {
|
|
166
|
+
|
|
167
|
+
return super.setupVertex( builder );
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
} else {
|
|
171
|
+
|
|
172
|
+
return this.setupVertexSprite( builder );
|
|
173
|
+
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
|
|
133
178
|
/**
|
|
134
179
|
* Whether alpha to coverage should be used or not.
|
|
135
180
|
*
|
|
@@ -155,4 +200,12 @@ class PointsNodeMaterial extends SpriteNodeMaterial {
|
|
|
155
200
|
|
|
156
201
|
}
|
|
157
202
|
|
|
203
|
+
const scale = /*@__PURE__*/ uniform( 1 ).onFrameUpdate( function ( { renderer } ) {
|
|
204
|
+
|
|
205
|
+
const size = renderer.getSize( _size ); // logical units
|
|
206
|
+
|
|
207
|
+
this.value = 0.5 * size.y;
|
|
208
|
+
|
|
209
|
+
} );
|
|
210
|
+
|
|
158
211
|
export default PointsNodeMaterial;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import NodeMaterial from './NodeMaterial.js';
|
|
2
|
-
import { cameraProjectionMatrix } from '../../nodes/accessors/Camera.js';
|
|
3
2
|
import { materialRotation } from '../../nodes/accessors/MaterialNode.js';
|
|
4
3
|
import { modelViewMatrix, modelWorldMatrix } from '../../nodes/accessors/ModelNode.js';
|
|
5
4
|
import { positionGeometry } from '../../nodes/accessors/Position.js';
|
|
@@ -111,9 +110,7 @@ class SpriteNodeMaterial extends NodeMaterial {
|
|
|
111
110
|
|
|
112
111
|
const { object, camera } = builder;
|
|
113
112
|
|
|
114
|
-
const sizeAttenuation = this
|
|
115
|
-
|
|
116
|
-
const { positionNode, rotationNode, scaleNode } = this;
|
|
113
|
+
const { positionNode, rotationNode, scaleNode, sizeAttenuation } = this;
|
|
117
114
|
|
|
118
115
|
const mvPosition = modelViewMatrix.mul( vec3( positionNode || 0 ) );
|
|
119
116
|
|
|
@@ -125,18 +122,9 @@ class SpriteNodeMaterial extends NodeMaterial {
|
|
|
125
122
|
|
|
126
123
|
}
|
|
127
124
|
|
|
128
|
-
if ( sizeAttenuation === false ) {
|
|
129
|
-
|
|
130
|
-
if ( camera.isPerspectiveCamera ) {
|
|
131
|
-
|
|
132
|
-
scale = scale.mul( mvPosition.z.negate() );
|
|
133
|
-
|
|
134
|
-
} else {
|
|
135
|
-
|
|
136
|
-
const orthoScale = float( 2.0 ).div( cameraProjectionMatrix.element( 1 ).element( 1 ) );
|
|
137
|
-
scale = scale.mul( orthoScale.mul( 2 ) );
|
|
125
|
+
if ( camera.isPerspectiveCamera && sizeAttenuation === false ) {
|
|
138
126
|
|
|
139
|
-
|
|
127
|
+
scale = scale.mul( mvPosition.z.negate() );
|
|
140
128
|
|
|
141
129
|
}
|
|
142
130
|
|