super-three 0.171.0 → 0.173.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/three.cjs +594 -427
- package/build/three.core.js +515 -81
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +79 -350
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +20 -7
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +29362 -3427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +29361 -3427
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -5
- package/examples/jsm/animation/CCDIKSolver.js +9 -7
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +48 -37
- 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 +34 -29
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +1 -12
- package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
- package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
- package/examples/jsm/interactive/InteractiveGroup.js +108 -51
- package/examples/jsm/libs/demuxer_mp4.js +109 -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 +4 -2
- package/examples/jsm/loaders/GLTFLoader.js +22 -4
- 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 -2
- 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/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/OBB.js +17 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
- package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
- package/examples/jsm/misc/Volume.js +27 -17
- package/examples/jsm/misc/VolumeSlice.js +7 -5
- 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 +29 -24
- package/examples/jsm/physics/JoltPhysics.js +7 -7
- package/examples/jsm/physics/RapierPhysics.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/OutputPass.js +2 -0
- 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/OutputShader.js +5 -1
- package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +2 -0
- 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 +4 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +18 -5
- 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/ArrayCamera.js +1 -0
- package/src/cameras/PerspectiveCamera.js +18 -2
- package/src/constants.js +6 -1
- package/src/core/BufferAttribute.js +4 -0
- package/src/core/EventDispatcher.js +8 -6
- 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/ImageUtils.js +1 -11
- 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/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 +476 -23
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +121 -10
- package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
- package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
- package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
- package/src/nodes/Nodes.js +5 -6
- package/src/nodes/TSL.js +6 -3
- package/src/nodes/accessors/AccessorsUtils.js +27 -0
- package/src/nodes/accessors/Arrays.js +47 -6
- package/src/nodes/accessors/BatchNode.js +42 -6
- 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 +113 -3
- 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/Lights.js +50 -1
- package/src/nodes/accessors/MaterialNode.js +306 -12
- 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 +65 -5
- package/src/nodes/accessors/Object3DNode.js +101 -1
- package/src/nodes/accessors/PointUVNode.js +26 -0
- package/src/nodes/accessors/Position.js +56 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
- package/src/nodes/accessors/ReferenceNode.js +201 -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 +209 -8
- package/src/nodes/accessors/StorageTextureNode.js +118 -0
- package/src/nodes/accessors/Tangent.js +38 -2
- package/src/nodes/accessors/Texture3DNode.js +91 -7
- package/src/nodes/accessors/TextureBicubic.js +12 -2
- package/src/nodes/accessors/TextureNode.js +316 -10
- package/src/nodes/accessors/TextureSizeNode.js +42 -0
- package/src/nodes/accessors/UV.js +10 -1
- package/src/nodes/accessors/UniformArrayNode.js +231 -25
- package/src/nodes/accessors/UserDataNode.js +46 -0
- package/src/nodes/accessors/VelocityNode.js +80 -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/ArrayNode.js +125 -0
- 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 +32 -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 +350 -12
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1166 -26
- 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 +152 -1
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +28 -0
- package/src/nodes/core/OutputStructNode.js +51 -10
- package/src/nodes/core/ParameterNode.js +28 -0
- package/src/nodes/core/PropertyNode.js +232 -0
- package/src/nodes/core/StackNode.js +98 -1
- package/src/nodes/core/StructNode.js +121 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +105 -6
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +82 -7
- package/src/nodes/core/UniformNode.js +66 -0
- package/src/nodes/core/VarNode.js +146 -7
- package/src/nodes/core/VaryingNode.js +100 -3
- package/src/nodes/core/constants.js +36 -0
- package/src/nodes/display/BlendModes.js +88 -1
- 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 +300 -7
- package/src/nodes/display/PosterizeNode.js +33 -0
- package/src/nodes/display/RenderOutputNode.js +66 -1
- package/src/nodes/display/ScreenNode.js +96 -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 +110 -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 +174 -2
- package/src/nodes/gpgpu/BarrierNode.js +47 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -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 +241 -35
- package/src/nodes/lighting/SpotLightNode.js +43 -0
- package/src/nodes/math/ConditionalNode.js +78 -4
- package/src/nodes/math/Hash.js +9 -0
- package/src/nodes/math/MathNode.js +627 -11
- package/src/nodes/math/MathUtils.js +45 -1
- package/src/nodes/math/OperatorNode.js +329 -18
- 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 +2 -2
- package/src/nodes/procedural/Checker.js +9 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +3 -2
- package/src/nodes/tsl/TSLCore.js +22 -2
- package/src/nodes/utils/ArrayElementNode.js +39 -3
- 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 +82 -2
- package/src/nodes/utils/MatcapUVNode.js +17 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -0
- package/src/nodes/utils/MemberNode.js +68 -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 +54 -0
- package/src/nodes/utils/Timer.js +40 -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 +2 -3
- package/src/objects/ClippingGroup.js +49 -0
- package/src/objects/Line.js +6 -6
- package/src/renderers/WebGLRenderer.js +30 -4
- package/src/renderers/common/Animation.js +85 -0
- package/src/renderers/common/Attributes.js +36 -0
- package/src/renderers/common/Backend.js +502 -44
- package/src/renderers/common/Background.js +48 -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 +45 -6
- package/src/renderers/common/ClippingContext.js +108 -15
- package/src/renderers/common/Color4.js +40 -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 +91 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
- package/src/renderers/common/Info.js +78 -35
- package/src/renderers/common/Lighting.js +34 -6
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +148 -5
- package/src/renderers/common/PostProcessing.js +99 -11
- 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 +39 -10
- package/src/renderers/common/RenderContext.js +201 -2
- package/src/renderers/common/RenderContexts.js +59 -6
- package/src/renderers/common/RenderList.js +178 -0
- package/src/renderers/common/RenderLists.js +40 -3
- package/src/renderers/common/RenderObject.js +400 -17
- package/src/renderers/common/RenderObjects.js +103 -7
- package/src/renderers/common/RenderPipeline.js +24 -0
- package/src/renderers/common/Renderer.js +1170 -86
- package/src/renderers/common/RendererUtils.js +193 -0
- package/src/renderers/common/SampledTexture.js +120 -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 +97 -7
- package/src/renderers/common/TimestampQueryPool.js +39 -0
- package/src/renderers/common/Uniform.js +225 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +141 -2
- package/src/renderers/common/XRManager.js +1193 -0
- package/src/renderers/common/XRRenderTarget.js +74 -0
- package/src/renderers/common/extras/PMREMGenerator.js +76 -10
- package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
- package/src/renderers/common/nodes/NodeLibrary.js +89 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +90 -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 +243 -2
- 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 +352 -78
- 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/WebGLBackground.js +4 -0
- package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
- package/src/renderers/webgpu/WebGPUBackend.js +578 -164
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
- package/src/renderers/webgpu/WebGPURenderer.js +36 -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 +674 -52
- 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 +95 -14
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
- package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
- package/src/renderers/webxr/WebXRManager.js +19 -2
- package/src/textures/Data3DTexture.js +2 -2
- package/src/textures/Texture.js +4 -0
- package/src/textures/VideoFrameTexture.js +35 -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/geometries/InstancedPointsGeometry.js +0 -176
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/MMDLoader.js +0 -2298
- package/examples/jsm/objects/InstancedPoints.js +0 -19
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- 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
|
@@ -1,18 +1,49 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
2
|
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/** @module BuiltinNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The node allows to set values for built-in shader variables. That is
|
|
8
|
+
* required for features like hardware-accelerated vertex clipping.
|
|
9
|
+
*
|
|
10
|
+
* @augments Node
|
|
11
|
+
*/
|
|
4
12
|
class BuiltinNode extends Node {
|
|
5
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new builtin node.
|
|
16
|
+
*
|
|
17
|
+
* @param {String} name - The name of the built-in shader variable.
|
|
18
|
+
*/
|
|
6
19
|
constructor( name ) {
|
|
7
20
|
|
|
8
21
|
super( 'float' );
|
|
9
22
|
|
|
23
|
+
/**
|
|
24
|
+
* The name of the built-in shader variable.
|
|
25
|
+
*
|
|
26
|
+
* @type {String}
|
|
27
|
+
*/
|
|
10
28
|
this.name = name;
|
|
11
29
|
|
|
30
|
+
/**
|
|
31
|
+
* This flag can be used for type testing.
|
|
32
|
+
*
|
|
33
|
+
* @type {Boolean}
|
|
34
|
+
* @readonly
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
12
37
|
this.isBuiltinNode = true;
|
|
13
38
|
|
|
14
39
|
}
|
|
15
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Generates the code snippet of the builtin node.
|
|
43
|
+
*
|
|
44
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
45
|
+
* @return {String} The generated code snippet.
|
|
46
|
+
*/
|
|
16
47
|
generate( /* builder */ ) {
|
|
17
48
|
|
|
18
49
|
return this.name;
|
|
@@ -23,4 +54,11 @@ class BuiltinNode extends Node {
|
|
|
23
54
|
|
|
24
55
|
export default BuiltinNode;
|
|
25
56
|
|
|
57
|
+
/**
|
|
58
|
+
* TSL function for creating a builtin node.
|
|
59
|
+
*
|
|
60
|
+
* @function
|
|
61
|
+
* @param {String} name - The name of the built-in shader variable.
|
|
62
|
+
* @returns {BuiltinNode}
|
|
63
|
+
*/
|
|
26
64
|
export const builtin = nodeProxy( BuiltinNode );
|
|
@@ -1,12 +1,122 @@
|
|
|
1
1
|
import { uniform } from '../core/UniformNode.js';
|
|
2
|
-
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
2
|
+
import { renderGroup, sharedUniformGroup } from '../core/UniformGroupNode.js';
|
|
3
3
|
import { Vector3 } from '../../math/Vector3.js';
|
|
4
|
+
import { Fn } from '../tsl/TSLBase.js';
|
|
5
|
+
import { uniformArray } from './UniformArrayNode.js';
|
|
4
6
|
|
|
7
|
+
/** @module Camera **/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* TSL object that represents the current `index` value of the camera if used ArrayCamera.
|
|
11
|
+
*
|
|
12
|
+
* @type {UniformNode<uint>}
|
|
13
|
+
*/
|
|
14
|
+
export const cameraIndex = /*@__PURE__*/ uniform( 0, 'uint' ).setGroup( sharedUniformGroup( 'cameraIndex' ) ).toVarying( 'v_cameraIndex' );
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* TSL object that represents the `near` value of the camera used for the current render.
|
|
18
|
+
*
|
|
19
|
+
* @type {UniformNode<float>}
|
|
20
|
+
*/
|
|
5
21
|
export const cameraNear = /*@__PURE__*/ uniform( 'float' ).label( 'cameraNear' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.near );
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* TSL object that represents the `far` value of the camera used for the current render.
|
|
25
|
+
*
|
|
26
|
+
* @type {UniformNode<float>}
|
|
27
|
+
*/
|
|
6
28
|
export const cameraFar = /*@__PURE__*/ uniform( 'float' ).label( 'cameraFar' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.far );
|
|
7
|
-
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* TSL object that represents the projection matrix of the camera used for the current render.
|
|
32
|
+
*
|
|
33
|
+
* @type {UniformNode<mat4>}
|
|
34
|
+
*/
|
|
35
|
+
export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
36
|
+
|
|
37
|
+
let cameraProjectionMatrix;
|
|
38
|
+
|
|
39
|
+
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
40
|
+
|
|
41
|
+
const matrices = [];
|
|
42
|
+
|
|
43
|
+
for ( const subCamera of camera.cameras ) {
|
|
44
|
+
|
|
45
|
+
matrices.push( subCamera.projectionMatrix );
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const cameraProjectionMatrices = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraProjectionMatrices' );
|
|
50
|
+
|
|
51
|
+
cameraProjectionMatrix = cameraProjectionMatrices.element( cameraIndex ).toVar( 'cameraProjectionMatrix' );
|
|
52
|
+
|
|
53
|
+
} else {
|
|
54
|
+
|
|
55
|
+
cameraProjectionMatrix = uniform( 'mat4' ).label( 'cameraProjectionMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrix );
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return cameraProjectionMatrix;
|
|
60
|
+
|
|
61
|
+
} ).once() )();
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* TSL object that represents the inverse projection matrix of the camera used for the current render.
|
|
65
|
+
*
|
|
66
|
+
* @type {UniformNode<mat4>}
|
|
67
|
+
*/
|
|
8
68
|
export const cameraProjectionMatrixInverse = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraProjectionMatrixInverse' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.projectionMatrixInverse );
|
|
9
|
-
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* TSL object that represents the view matrix of the camera used for the current render.
|
|
72
|
+
*
|
|
73
|
+
* @type {UniformNode<mat4>}
|
|
74
|
+
*/
|
|
75
|
+
export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
|
|
76
|
+
|
|
77
|
+
let cameraViewMatrix;
|
|
78
|
+
|
|
79
|
+
if ( camera.isArrayCamera && camera.cameras.length > 0 ) {
|
|
80
|
+
|
|
81
|
+
const matrices = [];
|
|
82
|
+
|
|
83
|
+
for ( const subCamera of camera.cameras ) {
|
|
84
|
+
|
|
85
|
+
matrices.push( subCamera.matrixWorldInverse );
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const cameraViewMatrices = uniformArray( matrices ).setGroup( renderGroup ).label( 'cameraViewMatrices' );
|
|
90
|
+
|
|
91
|
+
cameraViewMatrix = cameraViewMatrices.element( cameraIndex ).toVar( 'cameraViewMatrix' );
|
|
92
|
+
|
|
93
|
+
} else {
|
|
94
|
+
|
|
95
|
+
cameraViewMatrix = uniform( 'mat4' ).label( 'cameraViewMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorldInverse );
|
|
96
|
+
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return cameraViewMatrix;
|
|
100
|
+
|
|
101
|
+
} ).once() )();
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* TSL object that represents the world matrix of the camera used for the current render.
|
|
105
|
+
*
|
|
106
|
+
* @type {UniformNode<mat4>}
|
|
107
|
+
*/
|
|
10
108
|
export const cameraWorldMatrix = /*@__PURE__*/ uniform( 'mat4' ).label( 'cameraWorldMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.matrixWorld );
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* TSL object that represents the normal matrix of the camera used for the current render.
|
|
112
|
+
*
|
|
113
|
+
* @type {UniformNode<mat3>}
|
|
114
|
+
*/
|
|
11
115
|
export const cameraNormalMatrix = /*@__PURE__*/ uniform( 'mat3' ).label( 'cameraNormalMatrix' ).setGroup( renderGroup ).onRenderUpdate( ( { camera } ) => camera.normalMatrix );
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* TSL object that represents the position in world space of the camera used for the current render.
|
|
119
|
+
*
|
|
120
|
+
* @type {UniformNode<vec3>}
|
|
121
|
+
*/
|
|
12
122
|
export const cameraPosition = /*@__PURE__*/ uniform( new Vector3() ).label( 'cameraPosition' ).setGroup( renderGroup ).onRenderUpdate( ( { camera }, self ) => self.value.setFromMatrixPosition( camera.matrixWorld ) );
|
|
@@ -8,6 +8,16 @@ import { smoothstep } from '../math/MathNode.js';
|
|
|
8
8
|
import { uniformArray } from './UniformArrayNode.js';
|
|
9
9
|
import { builtin } from './BuiltinNode.js';
|
|
10
10
|
|
|
11
|
+
/** @module ClippingNode **/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* ```
|
|
15
|
+
* This node is used in {@link NodeMaterial} to setup the clipping
|
|
16
|
+
* which can happen hardware-accelerated (if supported) and optionally
|
|
17
|
+
* use alpha-to-coverage for anti-aliasing clipped edges.
|
|
18
|
+
* ```
|
|
19
|
+
* @augments Node
|
|
20
|
+
*/
|
|
11
21
|
class ClippingNode extends Node {
|
|
12
22
|
|
|
13
23
|
static get type() {
|
|
@@ -16,14 +26,32 @@ class ClippingNode extends Node {
|
|
|
16
26
|
|
|
17
27
|
}
|
|
18
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Constructs a new clipping node.
|
|
31
|
+
*
|
|
32
|
+
* @param {('default'|'hardware'|'alphaToCoverage')} [scope='default'] - The node's scope. Similar to other nodes,
|
|
33
|
+
* the selected scope influences the behavior of the node and what type of code is generated.
|
|
34
|
+
*/
|
|
19
35
|
constructor( scope = ClippingNode.DEFAULT ) {
|
|
20
36
|
|
|
21
37
|
super();
|
|
22
38
|
|
|
39
|
+
/**
|
|
40
|
+
* The node's scope. Similar to other nodes, the selected scope influences
|
|
41
|
+
* the behavior of the node and what type of code is generated.
|
|
42
|
+
*
|
|
43
|
+
* @type {('default'|'hardware'|'alphaToCoverage')}
|
|
44
|
+
*/
|
|
23
45
|
this.scope = scope;
|
|
24
46
|
|
|
25
47
|
}
|
|
26
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Setups the node depending on the selected scope.
|
|
51
|
+
*
|
|
52
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
53
|
+
* @return {Node} The result node.
|
|
54
|
+
*/
|
|
27
55
|
setup( builder ) {
|
|
28
56
|
|
|
29
57
|
super.setup( builder );
|
|
@@ -49,6 +77,13 @@ class ClippingNode extends Node {
|
|
|
49
77
|
|
|
50
78
|
}
|
|
51
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Setups alpha to coverage.
|
|
82
|
+
*
|
|
83
|
+
* @param {Array<Vector4>} intersectionPlanes - The intersection planes.
|
|
84
|
+
* @param {Array<Vector4>} unionPlanes - The union planes.
|
|
85
|
+
* @return {Node} The result node.
|
|
86
|
+
*/
|
|
52
87
|
setupAlphaToCoverage( intersectionPlanes, unionPlanes ) {
|
|
53
88
|
|
|
54
89
|
return Fn( () => {
|
|
@@ -60,7 +95,7 @@ class ClippingNode extends Node {
|
|
|
60
95
|
|
|
61
96
|
const numUnionPlanes = unionPlanes.length;
|
|
62
97
|
|
|
63
|
-
if (
|
|
98
|
+
if ( this.hardwareClipping === false && numUnionPlanes > 0 ) {
|
|
64
99
|
|
|
65
100
|
const clippingPlanes = uniformArray( unionPlanes );
|
|
66
101
|
|
|
@@ -107,13 +142,20 @@ class ClippingNode extends Node {
|
|
|
107
142
|
|
|
108
143
|
}
|
|
109
144
|
|
|
145
|
+
/**
|
|
146
|
+
* Setups the default clipping.
|
|
147
|
+
*
|
|
148
|
+
* @param {Array<Vector4>} intersectionPlanes - The intersection planes.
|
|
149
|
+
* @param {Array<Vector4>} unionPlanes - The union planes.
|
|
150
|
+
* @return {Node} The result node.
|
|
151
|
+
*/
|
|
110
152
|
setupDefault( intersectionPlanes, unionPlanes ) {
|
|
111
153
|
|
|
112
154
|
return Fn( () => {
|
|
113
155
|
|
|
114
156
|
const numUnionPlanes = unionPlanes.length;
|
|
115
157
|
|
|
116
|
-
if (
|
|
158
|
+
if ( this.hardwareClipping === false && numUnionPlanes > 0 ) {
|
|
117
159
|
|
|
118
160
|
const clippingPlanes = uniformArray( unionPlanes );
|
|
119
161
|
|
|
@@ -148,6 +190,13 @@ class ClippingNode extends Node {
|
|
|
148
190
|
|
|
149
191
|
}
|
|
150
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Setups hardware clipping.
|
|
195
|
+
*
|
|
196
|
+
* @param {Array<Vector4>} unionPlanes - The union planes.
|
|
197
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
198
|
+
* @return {Node} The result node.
|
|
199
|
+
*/
|
|
151
200
|
setupHardwareClipping( unionPlanes, builder ) {
|
|
152
201
|
|
|
153
202
|
const numUnionPlanes = unionPlanes.length;
|
|
@@ -180,6 +229,26 @@ ClippingNode.HARDWARE = 'hardware';
|
|
|
180
229
|
|
|
181
230
|
export default ClippingNode;
|
|
182
231
|
|
|
232
|
+
/**
|
|
233
|
+
* TSL function for setting up the default clipping logic.
|
|
234
|
+
*
|
|
235
|
+
* @function
|
|
236
|
+
* @returns {ClippingNode}
|
|
237
|
+
*/
|
|
183
238
|
export const clipping = () => nodeObject( new ClippingNode() );
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* TSL function for setting up alpha to coverage.
|
|
242
|
+
*
|
|
243
|
+
* @function
|
|
244
|
+
* @returns {ClippingNode}
|
|
245
|
+
*/
|
|
184
246
|
export const clippingAlpha = () => nodeObject( new ClippingNode( ClippingNode.ALPHA_TO_COVERAGE ) );
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* TSL function for setting up hardware-based clipping.
|
|
250
|
+
*
|
|
251
|
+
* @function
|
|
252
|
+
* @returns {ClippingNode}
|
|
253
|
+
*/
|
|
185
254
|
export const hardwareClipping = () => nodeObject( new ClippingNode( ClippingNode.HARDWARE ) );
|
|
@@ -4,6 +4,13 @@ import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
|
4
4
|
|
|
5
5
|
import { CubeReflectionMapping, CubeRefractionMapping, WebGPUCoordinateSystem } from '../../constants.js';
|
|
6
6
|
|
|
7
|
+
/** @module CubeTextureNode **/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* This type of uniform node represents a cube texture.
|
|
11
|
+
*
|
|
12
|
+
* @augments module:TextureNode~TextureNode
|
|
13
|
+
*/
|
|
7
14
|
class CubeTextureNode extends TextureNode {
|
|
8
15
|
|
|
9
16
|
static get type() {
|
|
@@ -12,20 +19,46 @@ class CubeTextureNode extends TextureNode {
|
|
|
12
19
|
|
|
13
20
|
}
|
|
14
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new cube texture node.
|
|
24
|
+
*
|
|
25
|
+
* @param {CubeTexture} value - The cube texture.
|
|
26
|
+
* @param {Node<vec3>?} [uvNode=null] - The uv node.
|
|
27
|
+
* @param {Node<int>?} [levelNode=null] - The level node.
|
|
28
|
+
* @param {Node<float>?} [biasNode=null] - The bias node.
|
|
29
|
+
*/
|
|
15
30
|
constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
|
|
16
31
|
|
|
17
32
|
super( value, uvNode, levelNode, biasNode );
|
|
18
33
|
|
|
34
|
+
/**
|
|
35
|
+
* This flag can be used for type testing.
|
|
36
|
+
*
|
|
37
|
+
* @type {Boolean}
|
|
38
|
+
* @readonly
|
|
39
|
+
* @default true
|
|
40
|
+
*/
|
|
19
41
|
this.isCubeTextureNode = true;
|
|
20
42
|
|
|
21
43
|
}
|
|
22
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Overwrites the default implementation to return a fixed value `'cubeTexture'`.
|
|
47
|
+
*
|
|
48
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
49
|
+
* @return {String} The input type.
|
|
50
|
+
*/
|
|
23
51
|
getInputType( /*builder*/ ) {
|
|
24
52
|
|
|
25
53
|
return 'cubeTexture';
|
|
26
54
|
|
|
27
55
|
}
|
|
28
56
|
|
|
57
|
+
/**
|
|
58
|
+
* Returns a default uvs based on the mapping type of the cube texture.
|
|
59
|
+
*
|
|
60
|
+
* @return {Node<vec3>} The default uv attribute.
|
|
61
|
+
*/
|
|
29
62
|
getDefaultUV() {
|
|
30
63
|
|
|
31
64
|
const texture = this.value;
|
|
@@ -48,8 +81,22 @@ class CubeTextureNode extends TextureNode {
|
|
|
48
81
|
|
|
49
82
|
}
|
|
50
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Overwritten with an empty implementation since the `updateMatrix` flag is ignored
|
|
86
|
+
* for cube textures. The uv transformation matrix is not applied to cube textures.
|
|
87
|
+
*
|
|
88
|
+
* @param {Boolean} value - The update toggle.
|
|
89
|
+
*/
|
|
51
90
|
setUpdateMatrix( /*updateMatrix*/ ) { } // Ignore .updateMatrix for CubeTextureNode
|
|
52
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Setups the uv node. Depending on the backend as well as the texture type, it might be necessary
|
|
94
|
+
* to modify the uv node for correct sampling.
|
|
95
|
+
*
|
|
96
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
97
|
+
* @param {Node} uvNode - The uv node to setup.
|
|
98
|
+
* @return {Node} The updated uv node.
|
|
99
|
+
*/
|
|
53
100
|
setupUV( builder, uvNode ) {
|
|
54
101
|
|
|
55
102
|
const texture = this.value;
|
|
@@ -66,6 +113,13 @@ class CubeTextureNode extends TextureNode {
|
|
|
66
113
|
|
|
67
114
|
}
|
|
68
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Generates the uv code snippet.
|
|
118
|
+
*
|
|
119
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
120
|
+
* @param {Node} cubeUV - The uv node to generate code for.
|
|
121
|
+
* @return {String} The generated code snippet.
|
|
122
|
+
*/
|
|
69
123
|
generateUV( builder, cubeUV ) {
|
|
70
124
|
|
|
71
125
|
return cubeUV.build( builder, 'vec3' );
|
|
@@ -76,4 +130,14 @@ class CubeTextureNode extends TextureNode {
|
|
|
76
130
|
|
|
77
131
|
export default CubeTextureNode;
|
|
78
132
|
|
|
133
|
+
/**
|
|
134
|
+
* TSL function for creating a cube texture node.
|
|
135
|
+
*
|
|
136
|
+
* @function
|
|
137
|
+
* @param {CubeTexture} value - The cube texture.
|
|
138
|
+
* @param {Node<vec3>?} [uvNode=null] - The uv node.
|
|
139
|
+
* @param {Node<int>?} [levelNode=null] - The level node.
|
|
140
|
+
* @param {Node<float>?} [biasNode=null] - The bias node.
|
|
141
|
+
* @returns {CubeTextureNode}
|
|
142
|
+
*/
|
|
79
143
|
export const cubeTexture = /*@__PURE__*/ nodeProxy( CubeTextureNode );
|
|
@@ -12,6 +12,16 @@ import { InstancedInterleavedBuffer } from '../../core/InstancedInterleavedBuffe
|
|
|
12
12
|
import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
|
|
13
13
|
import { DynamicDrawUsage } from '../../constants.js';
|
|
14
14
|
|
|
15
|
+
/** @module InstanceNode **/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* This node implements the vertex shader logic which is required
|
|
19
|
+
* when rendering 3D objects via instancing. The code makes sure
|
|
20
|
+
* vertex positions, normals and colors can be modified via instanced
|
|
21
|
+
* data.
|
|
22
|
+
*
|
|
23
|
+
* @augments Node
|
|
24
|
+
*/
|
|
15
25
|
class InstanceNode extends Node {
|
|
16
26
|
|
|
17
27
|
static get type() {
|
|
@@ -20,25 +30,84 @@ class InstanceNode extends Node {
|
|
|
20
30
|
|
|
21
31
|
}
|
|
22
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Constructs a new instance node.
|
|
35
|
+
*
|
|
36
|
+
* @param {Number} count - The number of instances.
|
|
37
|
+
* @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
|
|
38
|
+
* @param {InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
|
|
39
|
+
*/
|
|
23
40
|
constructor( count, instanceMatrix, instanceColor ) {
|
|
24
41
|
|
|
25
42
|
super( 'void' );
|
|
26
43
|
|
|
44
|
+
/**
|
|
45
|
+
* The number of instances.
|
|
46
|
+
*
|
|
47
|
+
* @type {Number}
|
|
48
|
+
*/
|
|
27
49
|
this.count = count;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Instanced buffer attribute representing the transformation of instances.
|
|
53
|
+
*
|
|
54
|
+
* @type {InstancedBufferAttribute}
|
|
55
|
+
*/
|
|
28
56
|
this.instanceMatrix = instanceMatrix;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Instanced buffer attribute representing the color of instances.
|
|
60
|
+
*
|
|
61
|
+
* @type {InstancedBufferAttribute}
|
|
62
|
+
*/
|
|
29
63
|
this.instanceColor = instanceColor;
|
|
30
64
|
|
|
65
|
+
/**
|
|
66
|
+
* The node that represents the instance matrix data.
|
|
67
|
+
*
|
|
68
|
+
* @type {Node}
|
|
69
|
+
*/
|
|
31
70
|
this.instanceMatrixNode = null;
|
|
32
71
|
|
|
72
|
+
/**
|
|
73
|
+
* The node that represents the instance color data.
|
|
74
|
+
*
|
|
75
|
+
* @type {Node}
|
|
76
|
+
*/
|
|
33
77
|
this.instanceColorNode = null;
|
|
34
78
|
|
|
79
|
+
/**
|
|
80
|
+
* The update type is set to `frame` since an update
|
|
81
|
+
* of instanced buffer data must be checked per frame.
|
|
82
|
+
*
|
|
83
|
+
* @type {String}
|
|
84
|
+
* @default 'frame'
|
|
85
|
+
*/
|
|
35
86
|
this.updateType = NodeUpdateType.FRAME;
|
|
36
87
|
|
|
88
|
+
/**
|
|
89
|
+
* A reference to a buffer that is used by `instanceMatrixNode`.
|
|
90
|
+
*
|
|
91
|
+
* @type {InstancedInterleavedBuffer}
|
|
92
|
+
*/
|
|
37
93
|
this.buffer = null;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* A reference to a buffer that is used by `instanceColorNode`.
|
|
97
|
+
*
|
|
98
|
+
* @type {InstancedBufferAttribute}
|
|
99
|
+
*/
|
|
38
100
|
this.bufferColor = null;
|
|
39
101
|
|
|
40
102
|
}
|
|
41
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Setups the internal buffers and nodes and assigns the transformed vertex data
|
|
106
|
+
* to predefined node variables for accumulation. That follows the same patterns
|
|
107
|
+
* like with morph and skinning nodes.
|
|
108
|
+
*
|
|
109
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
110
|
+
*/
|
|
42
111
|
setup( builder ) {
|
|
43
112
|
|
|
44
113
|
const { count, instanceMatrix, instanceColor } = this;
|
|
@@ -118,15 +187,20 @@ class InstanceNode extends Node {
|
|
|
118
187
|
|
|
119
188
|
}
|
|
120
189
|
|
|
190
|
+
/**
|
|
191
|
+
* Checks if the internal buffers required an update.
|
|
192
|
+
*
|
|
193
|
+
* @param {NodeFrame} frame - The current node frame.
|
|
194
|
+
*/
|
|
121
195
|
update( /*frame*/ ) {
|
|
122
196
|
|
|
123
|
-
if ( this.instanceMatrix.usage !== DynamicDrawUsage && this.buffer
|
|
197
|
+
if ( this.instanceMatrix.usage !== DynamicDrawUsage && this.buffer !== null && this.instanceMatrix.version !== this.buffer.version ) {
|
|
124
198
|
|
|
125
199
|
this.buffer.version = this.instanceMatrix.version;
|
|
126
200
|
|
|
127
201
|
}
|
|
128
202
|
|
|
129
|
-
if ( this.instanceColor && this.instanceColor.usage !== DynamicDrawUsage && this.bufferColor
|
|
203
|
+
if ( this.instanceColor && this.instanceColor.usage !== DynamicDrawUsage && this.bufferColor !== null && this.instanceColor.version !== this.bufferColor.version ) {
|
|
130
204
|
|
|
131
205
|
this.bufferColor.version = this.instanceColor.version;
|
|
132
206
|
|
|
@@ -138,4 +212,13 @@ class InstanceNode extends Node {
|
|
|
138
212
|
|
|
139
213
|
export default InstanceNode;
|
|
140
214
|
|
|
215
|
+
/**
|
|
216
|
+
* TSL function for creating an instance node.
|
|
217
|
+
*
|
|
218
|
+
* @function
|
|
219
|
+
* @param {Number} count - The number of instances.
|
|
220
|
+
* @param {InstancedBufferAttribute} instanceMatrix - Instanced buffer attribute representing the instance transformations.
|
|
221
|
+
* @param {InstancedBufferAttribute} instanceColor - Instanced buffer attribute representing the instance colors.
|
|
222
|
+
* @returns {InstanceNode}
|
|
223
|
+
*/
|
|
141
224
|
export const instance = /*@__PURE__*/ nodeProxy( InstanceNode );
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import InstanceNode from './InstanceNode.js';
|
|
2
2
|
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
3
3
|
|
|
4
|
+
/** @module InstancedMeshNode **/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This is a special version of `InstanceNode` which requires the usage of {@link InstancedMesh}.
|
|
8
|
+
* It allows an easier setup of the instance node.
|
|
9
|
+
*
|
|
10
|
+
* @augments module:InstanceNode~InstanceNode
|
|
11
|
+
*/
|
|
4
12
|
class InstancedMeshNode extends InstanceNode {
|
|
5
13
|
|
|
6
14
|
static get type() {
|
|
@@ -9,13 +17,23 @@ class InstancedMeshNode extends InstanceNode {
|
|
|
9
17
|
|
|
10
18
|
}
|
|
11
19
|
|
|
12
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Constructs a new instanced mesh node.
|
|
22
|
+
*
|
|
23
|
+
* @param {InstancedMesh} instancedMesh - The instanced mesh.
|
|
24
|
+
*/
|
|
25
|
+
constructor( instancedMesh ) {
|
|
13
26
|
|
|
14
|
-
const { count, instanceMatrix, instanceColor } =
|
|
27
|
+
const { count, instanceMatrix, instanceColor } = instancedMesh;
|
|
15
28
|
|
|
16
29
|
super( count, instanceMatrix, instanceColor );
|
|
17
30
|
|
|
18
|
-
|
|
31
|
+
/**
|
|
32
|
+
* A reference to the instanced mesh.
|
|
33
|
+
*
|
|
34
|
+
* @type {InstancedMesh}
|
|
35
|
+
*/
|
|
36
|
+
this.instancedMesh = instancedMesh;
|
|
19
37
|
|
|
20
38
|
}
|
|
21
39
|
|
|
@@ -23,4 +41,11 @@ class InstancedMeshNode extends InstanceNode {
|
|
|
23
41
|
|
|
24
42
|
export default InstancedMeshNode;
|
|
25
43
|
|
|
44
|
+
/**
|
|
45
|
+
* TSL function for creating an instanced mesh node.
|
|
46
|
+
*
|
|
47
|
+
* @function
|
|
48
|
+
* @param {InstancedMesh} instancedMesh - The instancedMesh.
|
|
49
|
+
* @returns {InstancedMeshNode}
|
|
50
|
+
*/
|
|
26
51
|
export const instancedMesh = /*@__PURE__*/ nodeProxy( InstancedMeshNode );
|