super-three 0.171.0 → 0.172.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 +157 -49
- package/build/three.core.js +104 -42
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +53 -8
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +10 -5
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +21191 -1008
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +21189 -1008
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +3 -2
- package/examples/jsm/controls/ArcballControls.js +28 -19
- package/examples/jsm/controls/OrbitControls.js +5 -4
- package/examples/jsm/csm/CSMShadowNode.js +16 -11
- package/examples/jsm/curves/NURBSCurve.js +1 -1
- package/examples/jsm/curves/NURBSUtils.js +3 -0
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +11 -7
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/lights/LightProbeGenerator.js +3 -3
- package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
- package/examples/jsm/loaders/3MFLoader.js +6 -3
- package/examples/jsm/loaders/BVHLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +5 -5
- package/examples/jsm/loaders/DDSLoader.js +42 -0
- package/examples/jsm/loaders/GCodeLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +22 -2
- package/examples/jsm/loaders/KTX2Loader.js +6 -1
- package/examples/jsm/loaders/KTXLoader.js +4 -4
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LottieLoader.js +1 -1
- package/examples/jsm/loaders/MTLLoader.js +1 -0
- package/examples/jsm/loaders/NRRDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +7 -7
- package/examples/jsm/loaders/PVRLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +1 -1
- package/examples/jsm/loaders/VRMLLoader.js +7 -7
- package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
- package/examples/jsm/misc/Volume.js +20 -12
- package/examples/jsm/misc/VolumeSlice.js +2 -2
- package/examples/jsm/modifiers/CurveModifier.js +10 -8
- package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
- package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
- package/examples/jsm/objects/GroundedSkybox.js +4 -4
- package/examples/jsm/objects/Sky.js +2 -2
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/objects/WaterMesh.js +4 -4
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/EffectComposer.js +1 -2
- package/examples/jsm/postprocessing/OutlinePass.js +4 -4
- package/examples/jsm/postprocessing/SAOPass.js +1 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -3
- package/examples/jsm/postprocessing/SSAOPass.js +2 -4
- package/examples/jsm/postprocessing/SSRPass.js +2 -4
- package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
- package/examples/jsm/renderers/SVGRenderer.js +6 -4
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/GodRaysShader.js +3 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
- package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
- package/examples/jsm/tsl/display/BleachBypass.js +10 -0
- package/examples/jsm/tsl/display/BloomNode.js +233 -26
- package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
- package/examples/jsm/tsl/display/FXAANode.js +52 -3
- package/examples/jsm/tsl/display/FilmNode.js +47 -1
- package/examples/jsm/tsl/display/GTAONode.js +210 -14
- package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
- package/examples/jsm/tsl/display/LensflareNode.js +131 -13
- package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
- package/examples/jsm/tsl/display/MotionBlur.js +12 -2
- package/examples/jsm/tsl/display/OutlineNode.js +343 -26
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
- package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
- package/examples/jsm/tsl/display/SMAANode.js +187 -46
- package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
- package/examples/jsm/tsl/display/SSRNode.js +194 -21
- package/examples/jsm/tsl/display/Sepia.js +9 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
- package/examples/jsm/tsl/display/TransitionNode.js +71 -6
- package/examples/jsm/tsl/display/hashBlur.js +14 -3
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/CameraUtils.js +4 -1
- package/examples/jsm/utils/GeometryUtils.js +22 -19
- package/examples/jsm/utils/SceneUtils.js +2 -2
- package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +8 -3
- package/src/Three.Core.js +2 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +9 -4
- package/src/Three.WebGPU.Nodes.js +2 -2
- package/src/Three.WebGPU.js +2 -2
- package/src/animation/PropertyBinding.js +2 -2
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +1 -1
- package/src/core/RenderTarget.js +18 -0
- package/src/core/RenderTarget3D.js +22 -0
- package/src/core/RenderTargetArray.js +22 -0
- package/src/extras/Earcut.js +1 -1
- package/src/extras/PMREMGenerator.js +20 -0
- package/src/extras/TextureUtils.js +6 -0
- package/src/helpers/CameraHelper.js +16 -13
- package/src/loaders/nodes/NodeLoader.js +59 -0
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
- package/src/materials/nodes/Line2NodeMaterial.js +128 -34
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
- package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
- package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
- package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +474 -21
- package/src/materials/nodes/PointsNodeMaterial.js +22 -13
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
- package/src/nodes/Nodes.js +1 -6
- package/src/nodes/TSL.js +2 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +24 -5
- package/src/nodes/accessors/BatchNode.js +39 -3
- package/src/nodes/accessors/Bitangent.js +37 -0
- package/src/nodes/accessors/BufferAttributeNode.js +178 -5
- package/src/nodes/accessors/BufferNode.js +63 -0
- package/src/nodes/accessors/BuiltinNode.js +38 -0
- package/src/nodes/accessors/Camera.js +49 -0
- package/src/nodes/accessors/ClippingNode.js +71 -2
- package/src/nodes/accessors/CubeTextureNode.js +64 -0
- package/src/nodes/accessors/InstanceNode.js +85 -2
- package/src/nodes/accessors/InstancedMeshNode.js +28 -3
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
- package/src/nodes/accessors/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +302 -8
- package/src/nodes/accessors/MaterialProperties.js +7 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
- package/src/nodes/accessors/ModelNode.js +100 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
- package/src/nodes/accessors/MorphNode.js +48 -4
- package/src/nodes/accessors/Normal.js +59 -3
- package/src/nodes/accessors/Object3DNode.js +102 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +53 -4
- package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
- package/src/nodes/accessors/ReferenceNode.js +202 -2
- package/src/nodes/accessors/ReflectVector.js +24 -0
- package/src/nodes/accessors/RendererReferenceNode.js +46 -1
- package/src/nodes/accessors/SceneNode.js +54 -0
- package/src/nodes/accessors/SkinningNode.js +127 -1
- package/src/nodes/accessors/StorageBufferNode.js +168 -4
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +36 -0
- package/src/nodes/accessors/Texture3DNode.js +89 -5
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +309 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +223 -23
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +82 -0
- package/src/nodes/accessors/VertexColorNode.js +39 -2
- package/src/nodes/code/CodeNode.js +95 -1
- package/src/nodes/code/ExpressionNode.js +28 -0
- package/src/nodes/code/FunctionCallNode.js +37 -0
- package/src/nodes/code/FunctionNode.js +45 -0
- package/src/nodes/code/ScriptableNode.js +223 -1
- package/src/nodes/code/ScriptableValueNode.js +85 -1
- package/src/nodes/core/AssignNode.js +48 -2
- package/src/nodes/core/AttributeNode.js +43 -0
- package/src/nodes/core/BypassNode.js +47 -2
- package/src/nodes/core/CacheNode.js +53 -2
- package/src/nodes/core/ConstNode.js +24 -0
- package/src/nodes/core/ContextNode.js +65 -0
- package/src/nodes/core/IndexNode.js +68 -7
- package/src/nodes/core/InputNode.js +48 -0
- package/src/nodes/core/LightingModel.js +60 -0
- package/src/nodes/core/MRTNode.js +66 -0
- package/src/nodes/core/Node.js +337 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +945 -15
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeFrame.js +123 -2
- package/src/nodes/core/NodeFunction.js +46 -0
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +11 -0
- package/src/nodes/core/NodeUniform.js +52 -0
- package/src/nodes/core/NodeUtils.js +141 -0
- package/src/nodes/core/NodeVar.js +30 -0
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +33 -2
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +78 -0
- package/src/nodes/core/StructTypeNode.js +39 -1
- package/src/nodes/core/TempNode.js +30 -4
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +52 -0
- package/src/nodes/core/VaryingNode.js +83 -2
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BumpMapNode.js +37 -0
- package/src/nodes/display/ColorAdjustment.js +53 -11
- package/src/nodes/display/ColorSpaceFunctions.js +16 -0
- package/src/nodes/display/ColorSpaceNode.js +82 -0
- package/src/nodes/display/FrontFacingNode.js +29 -0
- package/src/nodes/display/NormalMapNode.js +43 -0
- package/src/nodes/display/PassNode.js +298 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +87 -0
- package/src/nodes/display/ToneMappingFunctions.js +58 -10
- package/src/nodes/display/ToneMappingNode.js +55 -2
- package/src/nodes/display/ToonOutlinePassNode.js +73 -0
- package/src/nodes/display/ViewportDepthNode.js +122 -8
- package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
- package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
- package/src/nodes/display/ViewportTextureNode.js +57 -0
- package/src/nodes/fog/Fog.js +93 -0
- package/src/nodes/functions/BasicLightingModel.js +24 -0
- package/src/nodes/functions/PhongLightingModel.js +34 -2
- package/src/nodes/functions/PhysicalLightingModel.js +167 -8
- package/src/nodes/functions/ShadowMaskModel.js +23 -0
- package/src/nodes/functions/ToonLightingModel.js +20 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
- package/src/nodes/geometry/RangeNode.js +54 -2
- package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
- package/src/nodes/gpgpu/ComputeNode.js +106 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +97 -2
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +10 -0
- package/src/nodes/lighting/EnvironmentNode.js +18 -0
- package/src/nodes/lighting/HemisphereLightNode.js +31 -0
- package/src/nodes/lighting/IESSpotLightNode.js +11 -0
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +12 -0
- package/src/nodes/lighting/LightingContextNode.js +48 -0
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +132 -1
- package/src/nodes/lighting/PointLightNode.js +32 -1
- package/src/nodes/lighting/PointShadowNode.js +54 -1
- package/src/nodes/lighting/RectAreaLightNode.js +44 -6
- package/src/nodes/lighting/ShadowBaseNode.js +93 -0
- package/src/nodes/lighting/ShadowNode.js +240 -34
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +70 -3
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +614 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +233 -0
- package/src/nodes/math/TriNoise3D.js +18 -7
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +133 -0
- package/src/nodes/pmrem/PMREMUtils.js +1 -1
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/tsl/TSLBase.js +2 -2
- package/src/nodes/utils/ArrayElementNode.js +38 -2
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +78 -0
- package/src/nodes/utils/Discard.js +16 -0
- package/src/nodes/utils/EquirectUVNode.js +31 -1
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
- package/src/nodes/utils/JoinNode.js +25 -0
- package/src/nodes/utils/LoopNode.js +74 -1
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/Oscillators.js +33 -0
- package/src/nodes/utils/Packing.js +17 -0
- package/src/nodes/utils/PostProcessingUtils.js +28 -23
- package/src/nodes/utils/RTTNode.js +123 -2
- package/src/nodes/utils/ReflectorNode.js +174 -4
- package/src/nodes/utils/RemapNode.js +79 -0
- package/src/nodes/utils/RotateNode.js +41 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +55 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
- package/src/nodes/utils/SpriteUtils.js +17 -0
- package/src/nodes/utils/StorageArrayElementNode.js +40 -0
- package/src/nodes/utils/Timer.js +19 -0
- package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
- package/src/nodes/utils/UVUtils.js +20 -0
- package/src/nodes/utils/ViewportUtils.js +13 -0
- package/src/objects/BatchedMesh.js +1 -2
- package/src/objects/ClippingGroup.js +49 -0
- package/src/renderers/WebGLRenderer.js +23 -4
- package/src/renderers/common/Animation.js +63 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +467 -52
- package/src/renderers/common/Background.js +34 -1
- package/src/renderers/common/BindGroup.js +43 -0
- package/src/renderers/common/Binding.js +35 -0
- package/src/renderers/common/Bindings.js +93 -1
- package/src/renderers/common/Buffer.js +49 -0
- package/src/renderers/common/BufferUtils.js +27 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/ChainMap.js +38 -1
- package/src/renderers/common/ClippingContext.js +107 -14
- package/src/renderers/common/Color4.js +36 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +98 -0
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +87 -0
- package/src/renderers/common/Lighting.js +26 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +75 -3
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +54 -5
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +33 -10
- package/src/renderers/common/RenderContext.js +169 -4
- package/src/renderers/common/RenderContexts.js +42 -2
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +31 -0
- package/src/renderers/common/RenderObject.js +328 -4
- package/src/renderers/common/RenderObjects.js +101 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1096 -31
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +121 -0
- package/src/renderers/common/Sampler.js +30 -0
- package/src/renderers/common/StorageBuffer.js +24 -0
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +38 -0
- package/src/renderers/common/Textures.js +83 -0
- package/src/renderers/common/Uniform.js +188 -2
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +139 -2
- package/src/renderers/common/extras/PMREMGenerator.js +24 -3
- package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
- package/src/renderers/common/nodes/NodeSampler.js +28 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
- package/src/renderers/common/nodes/NodeUniform.js +189 -0
- package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/common/nodes/Nodes.js +327 -60
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +480 -49
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
- package/src/renderers/webgpu/WebGPURenderer.js +35 -0
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +7 -1
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
- package/examples/jsm/animation/MMDPhysics.js +0 -1408
- package/examples/jsm/exporters/MMDExporter.js +0 -223
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/renderers/common/PostProcessingUtils.js +0 -86
|
@@ -102,6 +102,12 @@ class PMREMGenerator {
|
|
|
102
102
|
* in radians to be applied to the scene before PMREM generation. Optional near
|
|
103
103
|
* and far planes ensure the scene is rendered in its entirety (the cubeCamera
|
|
104
104
|
* is placed at the origin).
|
|
105
|
+
*
|
|
106
|
+
* @param {Scene} scene
|
|
107
|
+
* @param {number} sigma
|
|
108
|
+
* @param {number} near
|
|
109
|
+
* @param {number} far
|
|
110
|
+
* @return {WebGLRenderTarget}
|
|
105
111
|
*/
|
|
106
112
|
fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
|
|
107
113
|
|
|
@@ -137,6 +143,10 @@ class PMREMGenerator {
|
|
|
137
143
|
* or HDR. The ideal input image size is 1k (1024 x 512),
|
|
138
144
|
* as this matches best with the 256 x 256 cubemap output.
|
|
139
145
|
* The smallest supported equirectangular image size is 64 x 32.
|
|
146
|
+
*
|
|
147
|
+
* @param {Texture} equirectangular
|
|
148
|
+
* @param {WebGLRenderTarget} [renderTarget=null] - Optional render target.
|
|
149
|
+
* @return {WebGLRenderTarget}
|
|
140
150
|
*/
|
|
141
151
|
fromEquirectangular( equirectangular, renderTarget = null ) {
|
|
142
152
|
|
|
@@ -149,6 +159,10 @@ class PMREMGenerator {
|
|
|
149
159
|
* or HDR. The ideal input cube size is 256 x 256,
|
|
150
160
|
* as this matches best with the 256 x 256 cubemap output.
|
|
151
161
|
* The smallest supported cube size is 16 x 16.
|
|
162
|
+
*
|
|
163
|
+
* @param {Texture} cubemap
|
|
164
|
+
* @param {null} [renderTarget=null] - Optional render target.
|
|
165
|
+
* @return {WebGLRenderTarget}
|
|
152
166
|
*/
|
|
153
167
|
fromCubemap( cubemap, renderTarget = null ) {
|
|
154
168
|
|
|
@@ -466,6 +480,12 @@ class PMREMGenerator {
|
|
|
466
480
|
* the blur latitudinally (around the poles), and then longitudinally (towards
|
|
467
481
|
* the poles) to approximate the orthogonally-separable blur. It is least
|
|
468
482
|
* accurate at the poles, but still does a decent job.
|
|
483
|
+
*
|
|
484
|
+
* @param {WebGLRenderTarget} cubeUVRenderTarget
|
|
485
|
+
* @param {number} lodIn
|
|
486
|
+
* @param {number} lodOut
|
|
487
|
+
* @param {number} sigma
|
|
488
|
+
* @param {Vector3} [poleAxis]
|
|
469
489
|
*/
|
|
470
490
|
_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {
|
|
471
491
|
|
|
@@ -69,6 +69,12 @@ function fill( texture ) {
|
|
|
69
69
|
/**
|
|
70
70
|
* Given the width, height, format, and type of a texture. Determines how many
|
|
71
71
|
* bytes must be used to represent the texture.
|
|
72
|
+
*
|
|
73
|
+
* @param {Number} width
|
|
74
|
+
* @param {Number} height
|
|
75
|
+
* @param {Number} format
|
|
76
|
+
* @param {Number} type
|
|
77
|
+
* @return {Number} The number of bytes required to represent the texture.
|
|
72
78
|
*/
|
|
73
79
|
function getByteLength( width, height, format, type ) {
|
|
74
80
|
|
|
@@ -5,6 +5,7 @@ import { Color } from '../math/Color.js';
|
|
|
5
5
|
import { LineBasicMaterial } from '../materials/LineBasicMaterial.js';
|
|
6
6
|
import { BufferGeometry } from '../core/BufferGeometry.js';
|
|
7
7
|
import { Float32BufferAttribute } from '../core/BufferAttribute.js';
|
|
8
|
+
import { WebGLCoordinateSystem } from '../constants.js';
|
|
8
9
|
|
|
9
10
|
const _vector = /*@__PURE__*/ new Vector3();
|
|
10
11
|
const _camera = /*@__PURE__*/ new Camera();
|
|
@@ -195,17 +196,19 @@ class CameraHelper extends LineSegments {
|
|
|
195
196
|
|
|
196
197
|
_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );
|
|
197
198
|
|
|
198
|
-
//
|
|
199
|
+
// Adjust z values based on coordinate system
|
|
200
|
+
const nearZ = this.camera.coordinateSystem === WebGLCoordinateSystem ? - 1 : 0;
|
|
199
201
|
|
|
200
|
-
|
|
202
|
+
// center / target
|
|
203
|
+
setPoint( 'c', pointMap, geometry, _camera, 0, 0, nearZ );
|
|
201
204
|
setPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );
|
|
202
205
|
|
|
203
206
|
// near
|
|
204
207
|
|
|
205
|
-
setPoint( 'n1', pointMap, geometry, _camera, - w, - h,
|
|
206
|
-
setPoint( 'n2', pointMap, geometry, _camera, w, - h,
|
|
207
|
-
setPoint( 'n3', pointMap, geometry, _camera, - w, h,
|
|
208
|
-
setPoint( 'n4', pointMap, geometry, _camera, w, h,
|
|
208
|
+
setPoint( 'n1', pointMap, geometry, _camera, - w, - h, nearZ );
|
|
209
|
+
setPoint( 'n2', pointMap, geometry, _camera, w, - h, nearZ );
|
|
210
|
+
setPoint( 'n3', pointMap, geometry, _camera, - w, h, nearZ );
|
|
211
|
+
setPoint( 'n4', pointMap, geometry, _camera, w, h, nearZ );
|
|
209
212
|
|
|
210
213
|
// far
|
|
211
214
|
|
|
@@ -216,9 +219,9 @@ class CameraHelper extends LineSegments {
|
|
|
216
219
|
|
|
217
220
|
// up
|
|
218
221
|
|
|
219
|
-
setPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1,
|
|
220
|
-
setPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1,
|
|
221
|
-
setPoint( 'u3', pointMap, geometry, _camera, 0, h * 2,
|
|
222
|
+
setPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, nearZ );
|
|
223
|
+
setPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, nearZ );
|
|
224
|
+
setPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, nearZ );
|
|
222
225
|
|
|
223
226
|
// cross
|
|
224
227
|
|
|
@@ -227,10 +230,10 @@ class CameraHelper extends LineSegments {
|
|
|
227
230
|
setPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );
|
|
228
231
|
setPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );
|
|
229
232
|
|
|
230
|
-
setPoint( 'cn1', pointMap, geometry, _camera, - w, 0,
|
|
231
|
-
setPoint( 'cn2', pointMap, geometry, _camera, w, 0,
|
|
232
|
-
setPoint( 'cn3', pointMap, geometry, _camera, 0, - h,
|
|
233
|
-
setPoint( 'cn4', pointMap, geometry, _camera, 0, h,
|
|
233
|
+
setPoint( 'cn1', pointMap, geometry, _camera, - w, 0, nearZ );
|
|
234
|
+
setPoint( 'cn2', pointMap, geometry, _camera, w, 0, nearZ );
|
|
235
|
+
setPoint( 'cn3', pointMap, geometry, _camera, 0, - h, nearZ );
|
|
236
|
+
setPoint( 'cn4', pointMap, geometry, _camera, 0, h, nearZ );
|
|
234
237
|
|
|
235
238
|
geometry.getAttribute( 'position' ).needsUpdate = true;
|
|
236
239
|
|
|
@@ -3,17 +3,46 @@ import { nodeObject, float } from '../../nodes/tsl/TSLBase.js';
|
|
|
3
3
|
import { Loader } from '../Loader.js';
|
|
4
4
|
import { FileLoader } from '../../loaders/FileLoader.js';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* A loader for loading node objects in the three.js JSON Object/Scene format.
|
|
8
|
+
*
|
|
9
|
+
* @augments Loader
|
|
10
|
+
*/
|
|
6
11
|
class NodeLoader extends Loader {
|
|
7
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new node loader.
|
|
15
|
+
*
|
|
16
|
+
* @param {LoadingManager?} manager - A reference to a loading manager.
|
|
17
|
+
*/
|
|
8
18
|
constructor( manager ) {
|
|
9
19
|
|
|
10
20
|
super( manager );
|
|
11
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Represents a dictionary of textures.
|
|
24
|
+
*
|
|
25
|
+
* @type {Object<String,Texture>}
|
|
26
|
+
*/
|
|
12
27
|
this.textures = {};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Represents a dictionary of node types.
|
|
31
|
+
*
|
|
32
|
+
* @type {Object<String,Node.constructor>}
|
|
33
|
+
*/
|
|
13
34
|
this.nodes = {};
|
|
14
35
|
|
|
15
36
|
}
|
|
16
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Loads the node definitions from the given URL.
|
|
40
|
+
*
|
|
41
|
+
* @param {String} url - The path/URL of the file to be loaded.
|
|
42
|
+
* @param {Function} onLoad - Will be called when load completes.
|
|
43
|
+
* @param {Function} onProgress - Will be called while load progresses.
|
|
44
|
+
* @param {Function} onError - Will be called when errors are thrown during the loading process.
|
|
45
|
+
*/
|
|
17
46
|
load( url, onLoad, onProgress, onError ) {
|
|
18
47
|
|
|
19
48
|
const loader = new FileLoader( this.manager );
|
|
@@ -46,6 +75,12 @@ class NodeLoader extends Loader {
|
|
|
46
75
|
|
|
47
76
|
}
|
|
48
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Parse the node dependencies for the loaded node.
|
|
80
|
+
*
|
|
81
|
+
* @param {Object} json - The JSON definition
|
|
82
|
+
* @return {Object<String,Node>} A dictionary with node dependencies.
|
|
83
|
+
*/
|
|
49
84
|
parseNodes( json ) {
|
|
50
85
|
|
|
51
86
|
const nodes = {};
|
|
@@ -80,6 +115,12 @@ class NodeLoader extends Loader {
|
|
|
80
115
|
|
|
81
116
|
}
|
|
82
117
|
|
|
118
|
+
/**
|
|
119
|
+
* Parses the node from the given JSON.
|
|
120
|
+
*
|
|
121
|
+
* @param {Object} json - The JSON definition
|
|
122
|
+
* @return {Node} The parsed node.
|
|
123
|
+
*/
|
|
83
124
|
parse( json ) {
|
|
84
125
|
|
|
85
126
|
const node = this.createNodeFromType( json.type );
|
|
@@ -98,6 +139,12 @@ class NodeLoader extends Loader {
|
|
|
98
139
|
|
|
99
140
|
}
|
|
100
141
|
|
|
142
|
+
/**
|
|
143
|
+
* Defines the dictionary of textures.
|
|
144
|
+
*
|
|
145
|
+
* @param {Object<String,Texture>} value - The texture library defines as `<uuid,texture>`.
|
|
146
|
+
* @return {NodeLoader} A reference to this loader.
|
|
147
|
+
*/
|
|
101
148
|
setTextures( value ) {
|
|
102
149
|
|
|
103
150
|
this.textures = value;
|
|
@@ -105,6 +152,12 @@ class NodeLoader extends Loader {
|
|
|
105
152
|
|
|
106
153
|
}
|
|
107
154
|
|
|
155
|
+
/**
|
|
156
|
+
* Defines the dictionary of node types.
|
|
157
|
+
*
|
|
158
|
+
* @param {Object<String,Node.constructor>} value - The node library defined as `<classname,class>`.
|
|
159
|
+
* @return {NodeLoader} A reference to this loader.
|
|
160
|
+
*/
|
|
108
161
|
setNodes( value ) {
|
|
109
162
|
|
|
110
163
|
this.nodes = value;
|
|
@@ -112,6 +165,12 @@ class NodeLoader extends Loader {
|
|
|
112
165
|
|
|
113
166
|
}
|
|
114
167
|
|
|
168
|
+
/**
|
|
169
|
+
* Creates a node object from the given type.
|
|
170
|
+
*
|
|
171
|
+
* @param {String} type - The node type.
|
|
172
|
+
* @return {Node} The created node instance.
|
|
173
|
+
*/
|
|
115
174
|
createNodeFromType( type ) {
|
|
116
175
|
|
|
117
176
|
if ( this.nodes[ type ] === undefined ) {
|
|
@@ -1,16 +1,43 @@
|
|
|
1
1
|
import { MaterialLoader } from '../../loaders/MaterialLoader.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* A special type of material loader for loading node materials.
|
|
5
|
+
*
|
|
6
|
+
* @augments MaterialLoader
|
|
7
|
+
*/
|
|
3
8
|
class NodeMaterialLoader extends MaterialLoader {
|
|
4
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Constructs a new node material loader.
|
|
12
|
+
*
|
|
13
|
+
* @param {LoadingManager?} manager - A reference to a loading manager.
|
|
14
|
+
*/
|
|
5
15
|
constructor( manager ) {
|
|
6
16
|
|
|
7
17
|
super( manager );
|
|
8
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Represents a dictionary of node types.
|
|
21
|
+
*
|
|
22
|
+
* @type {Object<String,Node.constructor>}
|
|
23
|
+
*/
|
|
9
24
|
this.nodes = {};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Represents a dictionary of node material types.
|
|
28
|
+
*
|
|
29
|
+
* @type {Object<String,NodeMaterial.constructor>}
|
|
30
|
+
*/
|
|
10
31
|
this.nodeMaterials = {};
|
|
11
32
|
|
|
12
33
|
}
|
|
13
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Parses the node material from the given JSON.
|
|
37
|
+
*
|
|
38
|
+
* @param {Object} json - The JSON definition
|
|
39
|
+
* @return {NodeMaterial}. The parsed material.
|
|
40
|
+
*/
|
|
14
41
|
parse( json ) {
|
|
15
42
|
|
|
16
43
|
const material = super.parse( json );
|
|
@@ -30,6 +57,12 @@ class NodeMaterialLoader extends MaterialLoader {
|
|
|
30
57
|
|
|
31
58
|
}
|
|
32
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Defines the dictionary of node types.
|
|
62
|
+
*
|
|
63
|
+
* @param {Object<String,Node.constructor>} value - The node library defined as `<classname,class>`.
|
|
64
|
+
* @return {NodeLoader} A reference to this loader.
|
|
65
|
+
*/
|
|
33
66
|
setNodes( value ) {
|
|
34
67
|
|
|
35
68
|
this.nodes = value;
|
|
@@ -37,6 +70,12 @@ class NodeMaterialLoader extends MaterialLoader {
|
|
|
37
70
|
|
|
38
71
|
}
|
|
39
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Defines the dictionary of node material types.
|
|
75
|
+
*
|
|
76
|
+
* @param {Object<String,NodeMaterial.constructor>} value - The node material library defined as `<classname,class>`.
|
|
77
|
+
* @return {NodeLoader} A reference to this loader.
|
|
78
|
+
*/
|
|
40
79
|
setNodeMaterials( value ) {
|
|
41
80
|
|
|
42
81
|
this.nodeMaterials = value;
|
|
@@ -44,6 +83,12 @@ class NodeMaterialLoader extends MaterialLoader {
|
|
|
44
83
|
|
|
45
84
|
}
|
|
46
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Creates a node material from the given type.
|
|
88
|
+
*
|
|
89
|
+
* @param {String} type - The node material type.
|
|
90
|
+
* @return {Node} The created node material instance.
|
|
91
|
+
*/
|
|
47
92
|
createMaterialFromType( type ) {
|
|
48
93
|
|
|
49
94
|
const materialClass = this.nodeMaterials[ type ];
|
|
@@ -3,19 +3,53 @@ import NodeMaterialLoader from './NodeMaterialLoader.js';
|
|
|
3
3
|
|
|
4
4
|
import { ObjectLoader } from '../../loaders/ObjectLoader.js';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* A special type of object loader for loading 3D objects using
|
|
8
|
+
* node materials.
|
|
9
|
+
*
|
|
10
|
+
* @augments ObjectLoader
|
|
11
|
+
*/
|
|
6
12
|
class NodeObjectLoader extends ObjectLoader {
|
|
7
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new node object loader.
|
|
16
|
+
*
|
|
17
|
+
* @param {LoadingManager?} manager - A reference to a loading manager.
|
|
18
|
+
*/
|
|
8
19
|
constructor( manager ) {
|
|
9
20
|
|
|
10
21
|
super( manager );
|
|
11
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Represents a dictionary of node types.
|
|
25
|
+
*
|
|
26
|
+
* @type {Object<String,Node.constructor>}
|
|
27
|
+
*/
|
|
12
28
|
this.nodes = {};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Represents a dictionary of node material types.
|
|
32
|
+
*
|
|
33
|
+
* @type {Object<String,NodeMaterial.constructor>}
|
|
34
|
+
*/
|
|
13
35
|
this.nodeMaterials = {};
|
|
14
36
|
|
|
37
|
+
/**
|
|
38
|
+
* A reference for holdng the `nodes` JSON property.
|
|
39
|
+
*
|
|
40
|
+
* @private
|
|
41
|
+
* @type {Object?}
|
|
42
|
+
*/
|
|
15
43
|
this._nodesJSON = null;
|
|
16
44
|
|
|
17
45
|
}
|
|
18
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Defines the dictionary of node types.
|
|
49
|
+
*
|
|
50
|
+
* @param {Object<String,Node.constructor>} value - The node library defined as `<classname,class>`.
|
|
51
|
+
* @return {NodeLoader} A reference to this loader.
|
|
52
|
+
*/
|
|
19
53
|
setNodes( value ) {
|
|
20
54
|
|
|
21
55
|
this.nodes = value;
|
|
@@ -23,6 +57,12 @@ class NodeObjectLoader extends ObjectLoader {
|
|
|
23
57
|
|
|
24
58
|
}
|
|
25
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Defines the dictionary of node material types.
|
|
62
|
+
*
|
|
63
|
+
* @param {Object<String,NodeMaterial.constructor>} value - The node material library defined as `<classname,class>`.
|
|
64
|
+
* @return {NodeLoader} A reference to this loader.
|
|
65
|
+
*/
|
|
26
66
|
setNodeMaterials( value ) {
|
|
27
67
|
|
|
28
68
|
this.nodeMaterials = value;
|
|
@@ -30,6 +70,13 @@ class NodeObjectLoader extends ObjectLoader {
|
|
|
30
70
|
|
|
31
71
|
}
|
|
32
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Parses the node objects from the given JSON.
|
|
75
|
+
*
|
|
76
|
+
* @param {Object} json - The JSON definition
|
|
77
|
+
* @param {Function} onLoad - The onLoad callback function.
|
|
78
|
+
* @return {Object3D}. The parsed 3D object.
|
|
79
|
+
*/
|
|
33
80
|
parse( json, onLoad ) {
|
|
34
81
|
|
|
35
82
|
this._nodesJSON = json.nodes;
|
|
@@ -42,6 +89,13 @@ class NodeObjectLoader extends ObjectLoader {
|
|
|
42
89
|
|
|
43
90
|
}
|
|
44
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Parses the node objects from the given JSON and textures.
|
|
94
|
+
*
|
|
95
|
+
* @param {Object} json - The JSON definition
|
|
96
|
+
* @param {Object<String,Texture>} textures - The texture library.
|
|
97
|
+
* @return {Object<String,Node>}. The parsed nodes.
|
|
98
|
+
*/
|
|
45
99
|
parseNodes( json, textures ) {
|
|
46
100
|
|
|
47
101
|
if ( json !== undefined ) {
|
|
@@ -58,6 +112,13 @@ class NodeObjectLoader extends ObjectLoader {
|
|
|
58
112
|
|
|
59
113
|
}
|
|
60
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Parses the node objects from the given JSON and textures.
|
|
117
|
+
*
|
|
118
|
+
* @param {Object} json - The JSON definition
|
|
119
|
+
* @param {Object<String,Texture>} textures - The texture library.
|
|
120
|
+
* @return {Object<String,NodeMaterial>}. The parsed materials.
|
|
121
|
+
*/
|
|
61
122
|
parseMaterials( json, textures ) {
|
|
62
123
|
|
|
63
124
|
const materials = {};
|
|
@@ -13,6 +13,15 @@ import { PointsMaterial } from '../PointsMaterial.js';
|
|
|
13
13
|
|
|
14
14
|
const _defaultValues = /*@__PURE__*/ new PointsMaterial();
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Unlike WebGL, WebGPU can render point primitives only with a size
|
|
18
|
+
* of one pixel. This type node material can be used to mimic the WebGL
|
|
19
|
+
* points rendering by rendering small planes via instancing.
|
|
20
|
+
*
|
|
21
|
+
* This material should be used with {@link InstancedPointsGeometry}.
|
|
22
|
+
*
|
|
23
|
+
* @augments NodeMaterial
|
|
24
|
+
*/
|
|
16
25
|
class InstancedPointsNodeMaterial extends NodeMaterial {
|
|
17
26
|
|
|
18
27
|
static get type() {
|
|
@@ -21,39 +30,75 @@ class InstancedPointsNodeMaterial extends NodeMaterial {
|
|
|
21
30
|
|
|
22
31
|
}
|
|
23
32
|
|
|
24
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Constructs a new instanced points node material.
|
|
35
|
+
*
|
|
36
|
+
* @param {Object?} parameters - The configuration parameter.
|
|
37
|
+
*/
|
|
38
|
+
constructor( parameters = {} ) {
|
|
25
39
|
|
|
26
40
|
super();
|
|
27
41
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
42
|
+
/**
|
|
43
|
+
* This flag can be used for type testing.
|
|
44
|
+
*
|
|
45
|
+
* @type {Boolean}
|
|
46
|
+
* @readonly
|
|
47
|
+
* @default true
|
|
48
|
+
*/
|
|
49
|
+
this.isInstancedPointsNodeMaterial = true;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Whether vertex colors should be used or not. If set to `true`,
|
|
53
|
+
* each point instance can receive a custom color value.
|
|
54
|
+
*
|
|
55
|
+
* @type {Boolean}
|
|
56
|
+
* @default false
|
|
57
|
+
*/
|
|
58
|
+
this.useColor = parameters.vertexColors;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The points width in pixels.
|
|
62
|
+
*
|
|
63
|
+
* @type {Number}
|
|
64
|
+
* @default 1
|
|
65
|
+
*/
|
|
34
66
|
this.pointWidth = 1;
|
|
35
67
|
|
|
68
|
+
/**
|
|
69
|
+
* This node can be used to define the colors for each instance.
|
|
70
|
+
*
|
|
71
|
+
* @type {Node<vec3>?}
|
|
72
|
+
* @default null
|
|
73
|
+
*/
|
|
36
74
|
this.pointColorNode = null;
|
|
37
75
|
|
|
76
|
+
/**
|
|
77
|
+
* This node can be used to define the width for each point instance.
|
|
78
|
+
*
|
|
79
|
+
* @type {Node<float>?}
|
|
80
|
+
* @default null
|
|
81
|
+
*/
|
|
38
82
|
this.pointWidthNode = null;
|
|
39
83
|
|
|
84
|
+
this._useAlphaToCoverage = true;
|
|
85
|
+
|
|
40
86
|
this.setDefaultValues( _defaultValues );
|
|
41
87
|
|
|
42
|
-
this.setValues(
|
|
88
|
+
this.setValues( parameters );
|
|
43
89
|
|
|
44
90
|
}
|
|
45
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Setups the vertex and fragment stage of this node material.
|
|
94
|
+
*
|
|
95
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
96
|
+
*/
|
|
46
97
|
setup( builder ) {
|
|
47
98
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
super.setup( builder );
|
|
99
|
+
const { renderer } = builder;
|
|
51
100
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
setupShaders( { renderer } ) {
|
|
55
|
-
|
|
56
|
-
const useAlphaToCoverage = this.alphaToCoverage;
|
|
101
|
+
const useAlphaToCoverage = this._useAlphaToCoverage;
|
|
57
102
|
const useColor = this.useColor;
|
|
58
103
|
|
|
59
104
|
this.vertexNode = Fn( () => {
|
|
@@ -132,19 +177,27 @@ class InstancedPointsNodeMaterial extends NodeMaterial {
|
|
|
132
177
|
|
|
133
178
|
} )();
|
|
134
179
|
|
|
180
|
+
super.setup( builder );
|
|
181
|
+
|
|
135
182
|
}
|
|
136
183
|
|
|
184
|
+
/**
|
|
185
|
+
* Whether alpha to coverage should be used or not.
|
|
186
|
+
*
|
|
187
|
+
* @type {Boolean}
|
|
188
|
+
* @default true
|
|
189
|
+
*/
|
|
137
190
|
get alphaToCoverage() {
|
|
138
191
|
|
|
139
|
-
return this.
|
|
192
|
+
return this._useAlphaToCoverage;
|
|
140
193
|
|
|
141
194
|
}
|
|
142
195
|
|
|
143
196
|
set alphaToCoverage( value ) {
|
|
144
197
|
|
|
145
|
-
if ( this.
|
|
198
|
+
if ( this._useAlphaToCoverage !== value ) {
|
|
146
199
|
|
|
147
|
-
this.
|
|
200
|
+
this._useAlphaToCoverage = value;
|
|
148
201
|
this.needsUpdate = true;
|
|
149
202
|
|
|
150
203
|
}
|