super-three 0.177.0 → 0.181.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 +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -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 +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- 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 +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- 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/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/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- 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/SimplexNoise.js +1 -1
- 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/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- 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 +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- 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 +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- 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 +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- 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 +8 -6
- 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/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 +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- 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 +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- 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/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- 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 +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- 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/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- 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,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,8 +11,8 @@ 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';
|
|
16
|
-
import {
|
|
14
|
+
import { fwidth, mix, smoothstep } from '../../nodes/math/MathNode.js';
|
|
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';
|
|
19
18
|
import IrradianceNode from '../../nodes/lighting/IrradianceNode.js';
|
|
@@ -24,6 +23,9 @@ import NodeMaterialObserver from './manager/NodeMaterialObserver.js';
|
|
|
24
23
|
import getAlphaHashThreshold from '../../nodes/functions/material/getAlphaHashThreshold.js';
|
|
25
24
|
import { modelViewMatrix } from '../../nodes/accessors/ModelNode.js';
|
|
26
25
|
import { vertexColor } from '../../nodes/accessors/VertexColorNode.js';
|
|
26
|
+
import { premultiplyAlpha } from '../../nodes/display/BlendModes.js';
|
|
27
|
+
import { subBuild } from '../../nodes/core/SubBuildNode.js';
|
|
28
|
+
import { warn } from '../../utils.js';
|
|
27
29
|
|
|
28
30
|
/**
|
|
29
31
|
* Base class for all node materials.
|
|
@@ -179,7 +181,7 @@ class NodeMaterial extends Material {
|
|
|
179
181
|
* and `alphaMap` properties. This node property allows to overwrite the default
|
|
180
182
|
* and define the opacity with a node instead.
|
|
181
183
|
*
|
|
182
|
-
* If you don't want to overwrite the
|
|
184
|
+
* If you don't want to overwrite the opacity but modify the existing
|
|
183
185
|
* value instead, use {@link materialOpacity}.
|
|
184
186
|
*
|
|
185
187
|
* @type {?Node<float>}
|
|
@@ -392,7 +394,7 @@ class NodeMaterial extends Material {
|
|
|
392
394
|
|
|
393
395
|
set: ( value ) => {
|
|
394
396
|
|
|
395
|
-
|
|
397
|
+
warn( 'NodeMaterial: ".shadowPositionNode" was renamed to ".receivedShadowPositionNode".' );
|
|
396
398
|
|
|
397
399
|
this.receivedShadowPositionNode = value;
|
|
398
400
|
|
|
@@ -402,6 +404,34 @@ class NodeMaterial extends Material {
|
|
|
402
404
|
|
|
403
405
|
}
|
|
404
406
|
|
|
407
|
+
/**
|
|
408
|
+
* Returns an array of child nodes for this material.
|
|
409
|
+
*
|
|
410
|
+
* @private
|
|
411
|
+
* @returns {Array<{property: string, childNode: Node}>}
|
|
412
|
+
*/
|
|
413
|
+
_getNodeChildren() {
|
|
414
|
+
|
|
415
|
+
const children = [];
|
|
416
|
+
|
|
417
|
+
for ( const property of Object.getOwnPropertyNames( this ) ) {
|
|
418
|
+
|
|
419
|
+
if ( property.startsWith( '_' ) === true ) continue;
|
|
420
|
+
|
|
421
|
+
const object = this[ property ];
|
|
422
|
+
|
|
423
|
+
if ( object && object.isNode === true ) {
|
|
424
|
+
|
|
425
|
+
children.push( { property, childNode: object } );
|
|
426
|
+
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
return children;
|
|
432
|
+
|
|
433
|
+
}
|
|
434
|
+
|
|
405
435
|
/**
|
|
406
436
|
* Allows to define a custom cache key that influence the material key computation
|
|
407
437
|
* for render objects.
|
|
@@ -410,7 +440,15 @@ class NodeMaterial extends Material {
|
|
|
410
440
|
*/
|
|
411
441
|
customProgramCacheKey() {
|
|
412
442
|
|
|
413
|
-
|
|
443
|
+
const values = [];
|
|
444
|
+
|
|
445
|
+
for ( const { property, childNode } of this._getNodeChildren() ) {
|
|
446
|
+
|
|
447
|
+
values.push( hashString( property.slice( 0, - 4 ) ), childNode.getCacheKey() );
|
|
448
|
+
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
return this.type + hashArray( values );
|
|
414
452
|
|
|
415
453
|
}
|
|
416
454
|
|
|
@@ -444,7 +482,7 @@ class NodeMaterial extends Material {
|
|
|
444
482
|
*/
|
|
445
483
|
setup( builder ) {
|
|
446
484
|
|
|
447
|
-
builder.context.setupNormal = () => this.setupNormal( builder );
|
|
485
|
+
builder.context.setupNormal = () => subBuild( this.setupNormal( builder ), 'NORMAL', 'vec3' );
|
|
448
486
|
builder.context.setupPositionView = () => this.setupPositionView( builder );
|
|
449
487
|
builder.context.setupModelViewProjection = () => this.setupModelViewProjection( builder );
|
|
450
488
|
|
|
@@ -455,7 +493,7 @@ class NodeMaterial extends Material {
|
|
|
455
493
|
|
|
456
494
|
builder.addStack();
|
|
457
495
|
|
|
458
|
-
const mvp = this.setupVertex( builder );
|
|
496
|
+
const mvp = subBuild( this.setupVertex( builder ), 'VERTEX' );
|
|
459
497
|
|
|
460
498
|
const vertexNode = this.vertexNode || mvp;
|
|
461
499
|
|
|
@@ -502,7 +540,7 @@ class NodeMaterial extends Material {
|
|
|
502
540
|
|
|
503
541
|
const outgoingLightNode = this.setupLighting( builder );
|
|
504
542
|
|
|
505
|
-
if ( clippingNode !== null ) builder.stack.
|
|
543
|
+
if ( clippingNode !== null ) builder.stack.addToStack( clippingNode );
|
|
506
544
|
|
|
507
545
|
// force unsigned floats - useful for RenderTargets
|
|
508
546
|
|
|
@@ -587,7 +625,7 @@ class NodeMaterial extends Material {
|
|
|
587
625
|
|
|
588
626
|
if ( unionPlanes.length > 0 || intersectionPlanes.length > 0 ) {
|
|
589
627
|
|
|
590
|
-
const samples = builder.renderer.
|
|
628
|
+
const samples = builder.renderer.currentSamples;
|
|
591
629
|
|
|
592
630
|
if ( this.alphaToCoverage && samples > 1 ) {
|
|
593
631
|
|
|
@@ -596,7 +634,7 @@ class NodeMaterial extends Material {
|
|
|
596
634
|
|
|
597
635
|
} else {
|
|
598
636
|
|
|
599
|
-
builder.stack.
|
|
637
|
+
builder.stack.addToStack( clipping() );
|
|
600
638
|
|
|
601
639
|
}
|
|
602
640
|
|
|
@@ -623,7 +661,7 @@ class NodeMaterial extends Material {
|
|
|
623
661
|
|
|
624
662
|
if ( candidateCount > 0 && candidateCount <= 8 && builder.isAvailable( 'clipDistance' ) ) {
|
|
625
663
|
|
|
626
|
-
builder.stack.
|
|
664
|
+
builder.stack.addToStack( hardwareClipping() );
|
|
627
665
|
|
|
628
666
|
this.hardwareClipping = true;
|
|
629
667
|
|
|
@@ -767,7 +805,7 @@ class NodeMaterial extends Material {
|
|
|
767
805
|
|
|
768
806
|
if ( this.positionNode !== null ) {
|
|
769
807
|
|
|
770
|
-
positionLocal.assign(
|
|
808
|
+
positionLocal.assign( subBuild( this.positionNode, 'POSITION', 'vec3' ) );
|
|
771
809
|
|
|
772
810
|
}
|
|
773
811
|
|
|
@@ -781,7 +819,9 @@ class NodeMaterial extends Material {
|
|
|
781
819
|
* @param {NodeBuilder} builder - The current node builder.
|
|
782
820
|
* @param {BufferGeometry} geometry - The geometry.
|
|
783
821
|
*/
|
|
784
|
-
setupDiffuseColor(
|
|
822
|
+
setupDiffuseColor( builder ) {
|
|
823
|
+
|
|
824
|
+
const { object, geometry } = builder;
|
|
785
825
|
|
|
786
826
|
// MASK
|
|
787
827
|
|
|
@@ -840,7 +880,16 @@ class NodeMaterial extends Material {
|
|
|
840
880
|
|
|
841
881
|
alphaTestNode = this.alphaTestNode !== null ? float( this.alphaTestNode ) : materialAlphaTest;
|
|
842
882
|
|
|
843
|
-
|
|
883
|
+
if ( this.alphaToCoverage === true ) {
|
|
884
|
+
|
|
885
|
+
diffuseColor.a = smoothstep( alphaTestNode, alphaTestNode.add( fwidth( diffuseColor.a ) ), diffuseColor.a );
|
|
886
|
+
diffuseColor.a.lessThanEqual( 0 ).discard();
|
|
887
|
+
|
|
888
|
+
} else {
|
|
889
|
+
|
|
890
|
+
diffuseColor.a.lessThanEqual( alphaTestNode ).discard();
|
|
891
|
+
|
|
892
|
+
}
|
|
844
893
|
|
|
845
894
|
}
|
|
846
895
|
|
|
@@ -854,16 +903,10 @@ class NodeMaterial extends Material {
|
|
|
854
903
|
|
|
855
904
|
// OPAQUE
|
|
856
905
|
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
if ( isOpaque ) {
|
|
906
|
+
if ( builder.isOpaque() ) {
|
|
860
907
|
|
|
861
908
|
diffuseColor.a.assign( 1.0 );
|
|
862
909
|
|
|
863
|
-
} else if ( alphaTestNode === null ) {
|
|
864
|
-
|
|
865
|
-
diffuseColor.a.lessThanEqual( 0 ).discard();
|
|
866
|
-
|
|
867
910
|
}
|
|
868
911
|
|
|
869
912
|
}
|
|
@@ -1069,7 +1112,7 @@ class NodeMaterial extends Material {
|
|
|
1069
1112
|
|
|
1070
1113
|
output.assign( outputNode );
|
|
1071
1114
|
|
|
1072
|
-
outputNode = vec4( fogNode );
|
|
1115
|
+
outputNode = vec4( fogNode.toVar() );
|
|
1073
1116
|
|
|
1074
1117
|
}
|
|
1075
1118
|
|
|
@@ -1077,6 +1120,19 @@ class NodeMaterial extends Material {
|
|
|
1077
1120
|
|
|
1078
1121
|
}
|
|
1079
1122
|
|
|
1123
|
+
/**
|
|
1124
|
+
* Setups premultiplied alpha.
|
|
1125
|
+
*
|
|
1126
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
1127
|
+
* @param {Node<vec4>} outputNode - The existing output node.
|
|
1128
|
+
* @return {Node<vec4>} The output node.
|
|
1129
|
+
*/
|
|
1130
|
+
setupPremultipliedAlpha( builder, outputNode ) {
|
|
1131
|
+
|
|
1132
|
+
return premultiplyAlpha( outputNode );
|
|
1133
|
+
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1080
1136
|
/**
|
|
1081
1137
|
* Setups the output node.
|
|
1082
1138
|
*
|
|
@@ -1094,6 +1150,14 @@ class NodeMaterial extends Material {
|
|
|
1094
1150
|
|
|
1095
1151
|
}
|
|
1096
1152
|
|
|
1153
|
+
// PREMULTIPLIED ALPHA
|
|
1154
|
+
|
|
1155
|
+
if ( this.premultipliedAlpha === true ) {
|
|
1156
|
+
|
|
1157
|
+
outputNode = this.setupPremultipliedAlpha( builder, outputNode );
|
|
1158
|
+
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1097
1161
|
return outputNode;
|
|
1098
1162
|
|
|
1099
1163
|
}
|
|
@@ -1160,11 +1224,9 @@ class NodeMaterial extends Material {
|
|
|
1160
1224
|
}
|
|
1161
1225
|
|
|
1162
1226
|
const data = Material.prototype.toJSON.call( this, meta );
|
|
1163
|
-
const nodeChildren = getNodeChildren( this );
|
|
1164
|
-
|
|
1165
1227
|
data.inputNodes = {};
|
|
1166
1228
|
|
|
1167
|
-
for ( const { property, childNode } of
|
|
1229
|
+
for ( const { property, childNode } of this._getNodeChildren() ) {
|
|
1168
1230
|
|
|
1169
1231
|
data.inputNodes[ property ] = childNode.toJSON( meta ).uuid;
|
|
1170
1232
|
|
|
@@ -1214,6 +1276,7 @@ class NodeMaterial extends Material {
|
|
|
1214
1276
|
|
|
1215
1277
|
this.lightsNode = source.lightsNode;
|
|
1216
1278
|
this.envNode = source.envNode;
|
|
1279
|
+
this.aoNode = source.aoNode;
|
|
1217
1280
|
|
|
1218
1281
|
this.colorNode = source.colorNode;
|
|
1219
1282
|
this.normalNode = source.normalNode;
|
|
@@ -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 {
|
|
@@ -35,6 +53,11 @@ class PointsNodeMaterial extends SpriteNodeMaterial {
|
|
|
35
53
|
/**
|
|
36
54
|
* This node property provides an additional way to set the point size.
|
|
37
55
|
*
|
|
56
|
+
* Note that WebGPU only supports point primitives with 1 pixel size. Consequently,
|
|
57
|
+
* this node has no effect when the material is used with {@link Points} and a WebGPU
|
|
58
|
+
* backend. If an application wants to render points with a size larger than 1 pixel,
|
|
59
|
+
* the material should be used with {@link Sprite} and instancing.
|
|
60
|
+
*
|
|
38
61
|
* @type {?Node<vec2>}
|
|
39
62
|
* @default null
|
|
40
63
|
*/
|
|
@@ -63,68 +86,95 @@ class PointsNodeMaterial extends SpriteNodeMaterial {
|
|
|
63
86
|
|
|
64
87
|
}
|
|
65
88
|
|
|
66
|
-
|
|
89
|
+
setupVertexSprite( builder ) {
|
|
90
|
+
|
|
91
|
+
const { material, camera } = builder;
|
|
92
|
+
|
|
93
|
+
const { rotationNode, scaleNode, sizeNode, sizeAttenuation } = this;
|
|
67
94
|
|
|
68
|
-
|
|
95
|
+
let mvp = super.setupVertex( builder );
|
|
69
96
|
|
|
70
97
|
// skip further processing if the material is not a node material
|
|
71
98
|
|
|
72
|
-
if (
|
|
99
|
+
if ( material.isNodeMaterial !== true ) {
|
|
73
100
|
|
|
74
101
|
return mvp;
|
|
75
102
|
|
|
76
103
|
}
|
|
77
104
|
|
|
78
|
-
//
|
|
105
|
+
// point size
|
|
79
106
|
|
|
80
|
-
|
|
107
|
+
let pointSize = sizeNode !== null ? vec2( sizeNode ) : materialPointSize;
|
|
81
108
|
|
|
82
|
-
|
|
83
|
-
const aspect = viewport.z.div( viewport.w );
|
|
109
|
+
pointSize = pointSize.mul( screenDPR );
|
|
84
110
|
|
|
85
|
-
//
|
|
111
|
+
// size attenuation
|
|
86
112
|
|
|
87
|
-
if (
|
|
113
|
+
if ( camera.isPerspectiveCamera && sizeAttenuation === true ) {
|
|
88
114
|
|
|
89
|
-
|
|
115
|
+
// follow WebGLRenderer's implementation, and scale by half the canvas height in logical units
|
|
90
116
|
|
|
91
|
-
|
|
117
|
+
pointSize = pointSize.mul( scale.div( positionView.z.negate() ) );
|
|
92
118
|
|
|
93
119
|
}
|
|
94
120
|
|
|
95
|
-
//
|
|
96
|
-
|
|
97
|
-
let pointSize = sizeNode !== null ? vec2( sizeNode ) : materialPointSize;
|
|
121
|
+
// scale
|
|
98
122
|
|
|
99
|
-
if (
|
|
123
|
+
if ( scaleNode && scaleNode.isNode ) {
|
|
100
124
|
|
|
101
|
-
pointSize = pointSize.mul(
|
|
125
|
+
pointSize = pointSize.mul( vec2( scaleNode ) );
|
|
102
126
|
|
|
103
127
|
}
|
|
104
128
|
|
|
105
|
-
//
|
|
129
|
+
// compute offset
|
|
106
130
|
|
|
107
|
-
|
|
131
|
+
let offset = positionGeometry.xy;
|
|
108
132
|
|
|
109
|
-
|
|
133
|
+
// apply rotation
|
|
134
|
+
|
|
135
|
+
if ( rotationNode && rotationNode.isNode ) {
|
|
136
|
+
|
|
137
|
+
const rotation = float( rotationNode );
|
|
138
|
+
|
|
139
|
+
offset = rotate( offset, rotation );
|
|
110
140
|
|
|
111
141
|
}
|
|
112
142
|
|
|
113
|
-
|
|
143
|
+
// account for point size
|
|
144
|
+
|
|
145
|
+
offset = offset.mul( pointSize );
|
|
146
|
+
|
|
147
|
+
// scale by viewport size
|
|
114
148
|
|
|
115
|
-
|
|
116
|
-
alignedPosition.y.assign( alignedPosition.y.mul( aspect ) );
|
|
149
|
+
offset = offset.div( viewportSize.div( 2 ) );
|
|
117
150
|
|
|
118
|
-
//
|
|
119
|
-
alignedPosition.assign( alignedPosition.mul( mvp.w ) );
|
|
151
|
+
// compensate for the perspective divide
|
|
120
152
|
|
|
121
|
-
|
|
122
|
-
|
|
153
|
+
offset = offset.mul( mvp.w );
|
|
154
|
+
|
|
155
|
+
// add offset
|
|
156
|
+
|
|
157
|
+
mvp = mvp.add( vec4( offset, 0, 0 ) );
|
|
123
158
|
|
|
124
159
|
return mvp;
|
|
125
160
|
|
|
126
161
|
}
|
|
127
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
|
+
|
|
128
178
|
/**
|
|
129
179
|
* Whether alpha to coverage should be used or not.
|
|
130
180
|
*
|
|
@@ -150,4 +200,12 @@ class PointsNodeMaterial extends SpriteNodeMaterial {
|
|
|
150
200
|
|
|
151
201
|
}
|
|
152
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
|
+
|
|
153
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
|
|
|
@@ -55,6 +55,16 @@ const refreshUniforms = [
|
|
|
55
55
|
'transmissionMap'
|
|
56
56
|
];
|
|
57
57
|
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* A WeakMap to cache lights data for node materials.
|
|
61
|
+
* Cache lights data by render ID to avoid unnecessary recalculations.
|
|
62
|
+
*
|
|
63
|
+
* @private
|
|
64
|
+
* @type {WeakMap<LightsNode,Object>}
|
|
65
|
+
*/
|
|
66
|
+
const _lightsCache = new WeakMap();
|
|
67
|
+
|
|
58
68
|
/**
|
|
59
69
|
* This class is used by {@link WebGPURenderer} as management component.
|
|
60
70
|
* It's primary purpose is to determine whether render objects require a
|
|
@@ -196,6 +206,8 @@ class NodeMaterialObserver {
|
|
|
196
206
|
|
|
197
207
|
}
|
|
198
208
|
|
|
209
|
+
data.lights = this.getLightsData( renderObject.lightsNode.getLights() );
|
|
210
|
+
|
|
199
211
|
this.renderObjects.set( renderObject, data );
|
|
200
212
|
|
|
201
213
|
}
|
|
@@ -299,9 +311,10 @@ class NodeMaterialObserver {
|
|
|
299
311
|
* Returns `true` if the given render object has not changed its state.
|
|
300
312
|
*
|
|
301
313
|
* @param {RenderObject} renderObject - The render object.
|
|
314
|
+
* @param {Array<Light>} lightsData - The current material lights.
|
|
302
315
|
* @return {boolean} Whether the given render object has changed its state or not.
|
|
303
316
|
*/
|
|
304
|
-
equals( renderObject ) {
|
|
317
|
+
equals( renderObject, lightsData ) {
|
|
305
318
|
|
|
306
319
|
const { object, material, geometry } = renderObject;
|
|
307
320
|
|
|
@@ -452,13 +465,30 @@ class NodeMaterialObserver {
|
|
|
452
465
|
|
|
453
466
|
if ( renderObjectData.morphTargetInfluences[ i ] !== object.morphTargetInfluences[ i ] ) {
|
|
454
467
|
|
|
468
|
+
renderObjectData.morphTargetInfluences[ i ] = object.morphTargetInfluences[ i ];
|
|
455
469
|
morphChanged = true;
|
|
456
470
|
|
|
457
471
|
}
|
|
458
472
|
|
|
459
473
|
}
|
|
460
474
|
|
|
461
|
-
if ( morphChanged ) return
|
|
475
|
+
if ( morphChanged ) return false;
|
|
476
|
+
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// lights
|
|
480
|
+
|
|
481
|
+
if ( renderObjectData.lights ) {
|
|
482
|
+
|
|
483
|
+
for ( let i = 0; i < lightsData.length; i ++ ) {
|
|
484
|
+
|
|
485
|
+
if ( renderObjectData.lights[ i ].map !== lightsData[ i ].map ) {
|
|
486
|
+
|
|
487
|
+
return false;
|
|
488
|
+
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
}
|
|
462
492
|
|
|
463
493
|
}
|
|
464
494
|
|
|
@@ -488,6 +518,61 @@ class NodeMaterialObserver {
|
|
|
488
518
|
|
|
489
519
|
}
|
|
490
520
|
|
|
521
|
+
/**
|
|
522
|
+
* Returns the lights data for the given material lights.
|
|
523
|
+
*
|
|
524
|
+
* @param {Array<Light>} materialLights - The material lights.
|
|
525
|
+
* @return {Array<Object>} The lights data for the given material lights.
|
|
526
|
+
*/
|
|
527
|
+
getLightsData( materialLights ) {
|
|
528
|
+
|
|
529
|
+
const lights = [];
|
|
530
|
+
|
|
531
|
+
for ( const light of materialLights ) {
|
|
532
|
+
|
|
533
|
+
if ( light.isSpotLight === true && light.map !== null ) {
|
|
534
|
+
|
|
535
|
+
// only add lights that have a map
|
|
536
|
+
|
|
537
|
+
lights.push( { map: light.map.version } );
|
|
538
|
+
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
return lights;
|
|
544
|
+
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Returns the lights for the given lights node and render ID.
|
|
549
|
+
*
|
|
550
|
+
* @param {LightsNode} lightsNode - The lights node.
|
|
551
|
+
* @param {number} renderId - The render ID.
|
|
552
|
+
* @return {Array<Object>} The lights for the given lights node and render ID.
|
|
553
|
+
*/
|
|
554
|
+
getLights( lightsNode, renderId ) {
|
|
555
|
+
|
|
556
|
+
if ( _lightsCache.has( lightsNode ) ) {
|
|
557
|
+
|
|
558
|
+
const cached = _lightsCache.get( lightsNode );
|
|
559
|
+
|
|
560
|
+
if ( cached.renderId === renderId ) {
|
|
561
|
+
|
|
562
|
+
return cached.lightsData;
|
|
563
|
+
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
const lightsData = this.getLightsData( lightsNode.getLights() );
|
|
569
|
+
|
|
570
|
+
_lightsCache.set( lightsNode, { renderId, lightsData } );
|
|
571
|
+
|
|
572
|
+
return lightsData;
|
|
573
|
+
|
|
574
|
+
}
|
|
575
|
+
|
|
491
576
|
/**
|
|
492
577
|
* Checks if the given render object requires a refresh.
|
|
493
578
|
*
|
|
@@ -516,7 +601,8 @@ class NodeMaterialObserver {
|
|
|
516
601
|
if ( isStatic || isBundle )
|
|
517
602
|
return false;
|
|
518
603
|
|
|
519
|
-
const
|
|
604
|
+
const lightsData = this.getLights( renderObject.lightsNode, renderId );
|
|
605
|
+
const notEqual = this.equals( renderObject, lightsData ) !== true;
|
|
520
606
|
|
|
521
607
|
return notEqual;
|
|
522
608
|
|
package/src/math/Color.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { clamp, euclideanModulo, lerp } from './MathUtils.js';
|
|
2
2
|
import { ColorManagement, SRGBToLinear, LinearToSRGB } from './ColorManagement.js';
|
|
3
3
|
import { SRGBColorSpace } from '../constants.js';
|
|
4
|
+
import { warn } from '../utils.js';
|
|
4
5
|
|
|
5
6
|
const _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,
|
|
6
7
|
'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,
|
|
@@ -275,7 +276,7 @@ class Color {
|
|
|
275
276
|
/**
|
|
276
277
|
* Sets this color from a CSS-style string. For example, `rgb(250, 0,0)`,
|
|
277
278
|
* `rgb(100%, 0%, 0%)`, `hsl(0, 100%, 50%)`, `#ff0000`, `#f00`, or `red` ( or
|
|
278
|
-
* any [X11 color name]
|
|
279
|
+
* any [X11 color name](https://en.wikipedia.org/wiki/X11_color_names#Color_name_chart) -
|
|
279
280
|
* all 140 color names are supported).
|
|
280
281
|
*
|
|
281
282
|
* @param {string} style - Color as a CSS-style string.
|
|
@@ -290,7 +291,7 @@ class Color {
|
|
|
290
291
|
|
|
291
292
|
if ( parseFloat( string ) < 1 ) {
|
|
292
293
|
|
|
293
|
-
|
|
294
|
+
warn( 'Color: Alpha component of ' + style + ' will be ignored.' );
|
|
294
295
|
|
|
295
296
|
}
|
|
296
297
|
|
|
@@ -366,7 +367,7 @@ class Color {
|
|
|
366
367
|
|
|
367
368
|
default:
|
|
368
369
|
|
|
369
|
-
|
|
370
|
+
warn( 'Color: Unknown color model ' + style );
|
|
370
371
|
|
|
371
372
|
}
|
|
372
373
|
|
|
@@ -394,7 +395,7 @@ class Color {
|
|
|
394
395
|
|
|
395
396
|
} else {
|
|
396
397
|
|
|
397
|
-
|
|
398
|
+
warn( 'Color: Invalid hex color ' + style );
|
|
398
399
|
|
|
399
400
|
}
|
|
400
401
|
|
|
@@ -434,7 +435,7 @@ class Color {
|
|
|
434
435
|
} else {
|
|
435
436
|
|
|
436
437
|
// unknown color
|
|
437
|
-
|
|
438
|
+
warn( 'Color: Unknown color ' + style );
|
|
438
439
|
|
|
439
440
|
}
|
|
440
441
|
|