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
|
@@ -4,6 +4,17 @@ import { uniform } from '../core/UniformNode.js';
|
|
|
4
4
|
import { nodeObject } from '../tsl/TSLCore.js';
|
|
5
5
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
6
6
|
|
|
7
|
+
// TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
|
|
8
|
+
|
|
9
|
+
/** @module ReferenceBaseNode **/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* This class is only relevant if the referenced property is array-like.
|
|
13
|
+
* In this case, `ReferenceElementNode` allows to refer to a specific
|
|
14
|
+
* element inside the data structure via an index.
|
|
15
|
+
*
|
|
16
|
+
* @augments ArrayElementNode
|
|
17
|
+
*/
|
|
7
18
|
class ReferenceElementNode extends ArrayElementNode {
|
|
8
19
|
|
|
9
20
|
static get type() {
|
|
@@ -12,16 +23,42 @@ class ReferenceElementNode extends ArrayElementNode {
|
|
|
12
23
|
|
|
13
24
|
}
|
|
14
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new reference element node.
|
|
28
|
+
*
|
|
29
|
+
* @param {ReferenceBaseNode?} referenceNode - The reference node.
|
|
30
|
+
* @param {Node} indexNode - The index node that defines the element access.
|
|
31
|
+
*/
|
|
15
32
|
constructor( referenceNode, indexNode ) {
|
|
16
33
|
|
|
17
34
|
super( referenceNode, indexNode );
|
|
18
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Similar to {@link module:ReferenceBaseNode~ReferenceBaseNode#reference}, an additional
|
|
38
|
+
* property references to the current node.
|
|
39
|
+
*
|
|
40
|
+
* @type {ReferenceBaseNode?}
|
|
41
|
+
* @default null
|
|
42
|
+
*/
|
|
19
43
|
this.referenceNode = referenceNode;
|
|
20
44
|
|
|
45
|
+
/**
|
|
46
|
+
* This flag can be used for type testing.
|
|
47
|
+
*
|
|
48
|
+
* @type {Boolean}
|
|
49
|
+
* @readonly
|
|
50
|
+
* @default true
|
|
51
|
+
*/
|
|
21
52
|
this.isReferenceElementNode = true;
|
|
22
53
|
|
|
23
54
|
}
|
|
24
55
|
|
|
56
|
+
/**
|
|
57
|
+
* This method is overwritten since the node type is inferred from
|
|
58
|
+
* the uniform type of the reference node.
|
|
59
|
+
*
|
|
60
|
+
* @return {String} The node type.
|
|
61
|
+
*/
|
|
25
62
|
getNodeType() {
|
|
26
63
|
|
|
27
64
|
return this.referenceNode.uniformType;
|
|
@@ -40,6 +77,14 @@ class ReferenceElementNode extends ArrayElementNode {
|
|
|
40
77
|
|
|
41
78
|
}
|
|
42
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Base class for nodes which establishes a reference to a property of another object.
|
|
82
|
+
* In this way, the value of the node is automatically linked to the value of
|
|
83
|
+
* referenced object. Reference nodes internally represent the linked value
|
|
84
|
+
* as a uniform.
|
|
85
|
+
*
|
|
86
|
+
* @augments Node
|
|
87
|
+
*/
|
|
43
88
|
class ReferenceBaseNode extends Node {
|
|
44
89
|
|
|
45
90
|
static get type() {
|
|
@@ -48,24 +93,97 @@ class ReferenceBaseNode extends Node {
|
|
|
48
93
|
|
|
49
94
|
}
|
|
50
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Constructs a new reference base node.
|
|
98
|
+
*
|
|
99
|
+
* @param {String} property - The name of the property the node refers to.
|
|
100
|
+
* @param {String} uniformType - The uniform type that should be used to represent the property value.
|
|
101
|
+
* @param {Object?} [object=null] - The object the property belongs to.
|
|
102
|
+
* @param {Number?} [count=null] - When the linked property is an array-like, this parameter defines its length.
|
|
103
|
+
*/
|
|
51
104
|
constructor( property, uniformType, object = null, count = null ) {
|
|
52
105
|
|
|
53
106
|
super();
|
|
54
107
|
|
|
108
|
+
/**
|
|
109
|
+
* The name of the property the node refers to.
|
|
110
|
+
*
|
|
111
|
+
* @type {String}
|
|
112
|
+
*/
|
|
55
113
|
this.property = property;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The uniform type that should be used to represent the property value.
|
|
117
|
+
*
|
|
118
|
+
* @type {String}
|
|
119
|
+
*/
|
|
56
120
|
this.uniformType = uniformType;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* The object the property belongs to.
|
|
124
|
+
*
|
|
125
|
+
* @type {Object?}
|
|
126
|
+
* @default null
|
|
127
|
+
*/
|
|
57
128
|
this.object = object;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* When the linked property is an array, this parameter defines its length.
|
|
132
|
+
*
|
|
133
|
+
* @type {Number?}
|
|
134
|
+
* @default null
|
|
135
|
+
*/
|
|
58
136
|
this.count = count;
|
|
59
137
|
|
|
138
|
+
/**
|
|
139
|
+
* The property name might have dots so nested properties can be referred.
|
|
140
|
+
* The hierarchy of the names is stored inside this array.
|
|
141
|
+
*
|
|
142
|
+
* @type {Array<String>}
|
|
143
|
+
*/
|
|
60
144
|
this.properties = property.split( '.' );
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Points to the current referred object. This property exists next to {@link module:ReferenceNode~ReferenceNode#object}
|
|
148
|
+
* since the final reference might be updated from calling code.
|
|
149
|
+
*
|
|
150
|
+
* @type {Object?}
|
|
151
|
+
* @default null
|
|
152
|
+
*/
|
|
61
153
|
this.reference = object;
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* The uniform node that holds the value of the reference node.
|
|
157
|
+
*
|
|
158
|
+
* @type {UniformNode}
|
|
159
|
+
* @default null
|
|
160
|
+
*/
|
|
62
161
|
this.node = null;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* The uniform group of the internal uniform.
|
|
165
|
+
*
|
|
166
|
+
* @type {UniformGroupNode}
|
|
167
|
+
* @default null
|
|
168
|
+
*/
|
|
63
169
|
this.group = null;
|
|
64
170
|
|
|
171
|
+
/**
|
|
172
|
+
* Overwritten since reference nodes are updated per object.
|
|
173
|
+
*
|
|
174
|
+
* @type {String}
|
|
175
|
+
* @default 'object'
|
|
176
|
+
*/
|
|
65
177
|
this.updateType = NodeUpdateType.OBJECT;
|
|
66
178
|
|
|
67
179
|
}
|
|
68
180
|
|
|
181
|
+
/**
|
|
182
|
+
* Sets the uniform group for this reference node.
|
|
183
|
+
*
|
|
184
|
+
* @param {UniformGroupNode} group - The uniform group to set.
|
|
185
|
+
* @return {ReferenceBaseNode} A reference to this node.
|
|
186
|
+
*/
|
|
69
187
|
setGroup( group ) {
|
|
70
188
|
|
|
71
189
|
this.group = group;
|
|
@@ -74,12 +192,25 @@ class ReferenceBaseNode extends Node {
|
|
|
74
192
|
|
|
75
193
|
}
|
|
76
194
|
|
|
195
|
+
/**
|
|
196
|
+
* When the referred property is array-like, this method can be used
|
|
197
|
+
* to access elements via an index node.
|
|
198
|
+
*
|
|
199
|
+
* @param {IndexNode} indexNode - indexNode.
|
|
200
|
+
* @return {ReferenceElementNode} A reference to an element.
|
|
201
|
+
*/
|
|
77
202
|
element( indexNode ) {
|
|
78
203
|
|
|
79
204
|
return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
|
|
80
205
|
|
|
81
206
|
}
|
|
82
207
|
|
|
208
|
+
/**
|
|
209
|
+
* Sets the node type which automatically defines the internal
|
|
210
|
+
* uniform type.
|
|
211
|
+
*
|
|
212
|
+
* @param {String} uniformType - The type to set.
|
|
213
|
+
*/
|
|
83
214
|
setNodeType( uniformType ) {
|
|
84
215
|
|
|
85
216
|
const node = uniform( null, uniformType ).getSelf();
|
|
@@ -94,6 +225,13 @@ class ReferenceBaseNode extends Node {
|
|
|
94
225
|
|
|
95
226
|
}
|
|
96
227
|
|
|
228
|
+
/**
|
|
229
|
+
* This method is overwritten since the node type is inferred from
|
|
230
|
+
* the type of the reference node.
|
|
231
|
+
*
|
|
232
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
233
|
+
* @return {String} The node type.
|
|
234
|
+
*/
|
|
97
235
|
getNodeType( builder ) {
|
|
98
236
|
|
|
99
237
|
if ( this.node === null ) {
|
|
@@ -107,6 +245,12 @@ class ReferenceBaseNode extends Node {
|
|
|
107
245
|
|
|
108
246
|
}
|
|
109
247
|
|
|
248
|
+
/**
|
|
249
|
+
* Returns the property value from the given referred object.
|
|
250
|
+
*
|
|
251
|
+
* @param {Object} [object=this.reference] - The object to retrieve the property value from.
|
|
252
|
+
* @return {Any} The value.
|
|
253
|
+
*/
|
|
110
254
|
getValueFromReference( object = this.reference ) {
|
|
111
255
|
|
|
112
256
|
const { properties } = this;
|
|
@@ -123,6 +267,13 @@ class ReferenceBaseNode extends Node {
|
|
|
123
267
|
|
|
124
268
|
}
|
|
125
269
|
|
|
270
|
+
/**
|
|
271
|
+
* Allows to update the reference based on the given state. The state is only
|
|
272
|
+
* evaluated {@link module:ReferenceBaseNode~ReferenceBaseNode#object} is not set.
|
|
273
|
+
*
|
|
274
|
+
* @param {(NodeFrame|NodeBuilder)} state - The current state.
|
|
275
|
+
* @return {Object} The updated reference.
|
|
276
|
+
*/
|
|
126
277
|
updateReference( state ) {
|
|
127
278
|
|
|
128
279
|
this.reference = this.object !== null ? this.object : state.object;
|
|
@@ -131,6 +282,11 @@ class ReferenceBaseNode extends Node {
|
|
|
131
282
|
|
|
132
283
|
}
|
|
133
284
|
|
|
285
|
+
/**
|
|
286
|
+
* The output of the reference node is the internal uniform node.
|
|
287
|
+
*
|
|
288
|
+
* @return {UniformNode} The output node.
|
|
289
|
+
*/
|
|
134
290
|
setup() {
|
|
135
291
|
|
|
136
292
|
this.updateValue();
|
|
@@ -139,12 +295,21 @@ class ReferenceBaseNode extends Node {
|
|
|
139
295
|
|
|
140
296
|
}
|
|
141
297
|
|
|
298
|
+
/**
|
|
299
|
+
* Overwritten to to update the internal uniform value.
|
|
300
|
+
*
|
|
301
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
302
|
+
*/
|
|
142
303
|
update( /*frame*/ ) {
|
|
143
304
|
|
|
144
305
|
this.updateValue();
|
|
145
306
|
|
|
146
307
|
}
|
|
147
308
|
|
|
309
|
+
/**
|
|
310
|
+
* Retrieves the value from the referred object property and uses it
|
|
311
|
+
* to updated the internal uniform.
|
|
312
|
+
*/
|
|
148
313
|
updateValue() {
|
|
149
314
|
|
|
150
315
|
if ( this.node === null ) this.setNodeType( this.uniformType );
|
|
@@ -167,5 +332,26 @@ class ReferenceBaseNode extends Node {
|
|
|
167
332
|
|
|
168
333
|
export default ReferenceBaseNode;
|
|
169
334
|
|
|
335
|
+
/**
|
|
336
|
+
* TSL function for creating a reference base node.
|
|
337
|
+
*
|
|
338
|
+
* @function
|
|
339
|
+
* @param {String} name - The name of the property the node refers to.
|
|
340
|
+
* @param {String} type - The uniform type that should be used to represent the property value.
|
|
341
|
+
* @param {Object} object - The object the property belongs to.
|
|
342
|
+
* @returns {ReferenceBaseNode}
|
|
343
|
+
*/
|
|
170
344
|
export const reference = ( name, type, object ) => nodeObject( new ReferenceBaseNode( name, type, object ) );
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* TSL function for creating a reference base node. Use this function if you want need a reference
|
|
348
|
+
* to an array-like property that should be represented as a uniform buffer.
|
|
349
|
+
*
|
|
350
|
+
* @function
|
|
351
|
+
* @param {String} name - The name of the property the node refers to.
|
|
352
|
+
* @param {String} type - The uniform type that should be used to represent the property value.
|
|
353
|
+
* @param {Number} count - The number of value inside the array-like object.
|
|
354
|
+
* @param {Object} object - An array-like object the property belongs to.
|
|
355
|
+
* @returns {ReferenceBaseNode}
|
|
356
|
+
*/
|
|
171
357
|
export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceBaseNode( name, type, object, count ) );
|
|
@@ -8,6 +8,17 @@ import { nodeObject } from '../tsl/TSLBase.js';
|
|
|
8
8
|
import { uniformArray } from './UniformArrayNode.js';
|
|
9
9
|
import ArrayElementNode from '../utils/ArrayElementNode.js';
|
|
10
10
|
|
|
11
|
+
// TODO: Avoid duplicated code and ues only ReferenceBaseNode or ReferenceNode
|
|
12
|
+
|
|
13
|
+
/** @module ReferenceNode **/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* This class is only relevant if the referenced property is array-like.
|
|
17
|
+
* In this case, `ReferenceElementNode` allows to refer to a specific
|
|
18
|
+
* element inside the data structure via an index.
|
|
19
|
+
*
|
|
20
|
+
* @augments ArrayElementNode
|
|
21
|
+
*/
|
|
11
22
|
class ReferenceElementNode extends ArrayElementNode {
|
|
12
23
|
|
|
13
24
|
static get type() {
|
|
@@ -16,16 +27,42 @@ class ReferenceElementNode extends ArrayElementNode {
|
|
|
16
27
|
|
|
17
28
|
}
|
|
18
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Constructs a new reference element node.
|
|
32
|
+
*
|
|
33
|
+
* @param {ReferenceNode?} referenceNode - The reference node.
|
|
34
|
+
* @param {Node} indexNode - The index node that defines the element access.
|
|
35
|
+
*/
|
|
19
36
|
constructor( referenceNode, indexNode ) {
|
|
20
37
|
|
|
21
38
|
super( referenceNode, indexNode );
|
|
22
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Similar to {@link module:ReferenceNode~ReferenceNode#reference}, an additional
|
|
42
|
+
* property references to the current node.
|
|
43
|
+
*
|
|
44
|
+
* @type {ReferenceNode?}
|
|
45
|
+
* @default null
|
|
46
|
+
*/
|
|
23
47
|
this.referenceNode = referenceNode;
|
|
24
48
|
|
|
49
|
+
/**
|
|
50
|
+
* This flag can be used for type testing.
|
|
51
|
+
*
|
|
52
|
+
* @type {Boolean}
|
|
53
|
+
* @readonly
|
|
54
|
+
* @default true
|
|
55
|
+
*/
|
|
25
56
|
this.isReferenceElementNode = true;
|
|
26
57
|
|
|
27
58
|
}
|
|
28
59
|
|
|
60
|
+
/**
|
|
61
|
+
* This method is overwritten since the node type is inferred from
|
|
62
|
+
* the uniform type of the reference node.
|
|
63
|
+
*
|
|
64
|
+
* @return {String} The node type.
|
|
65
|
+
*/
|
|
29
66
|
getNodeType() {
|
|
30
67
|
|
|
31
68
|
return this.referenceNode.uniformType;
|
|
@@ -44,7 +81,14 @@ class ReferenceElementNode extends ArrayElementNode {
|
|
|
44
81
|
|
|
45
82
|
}
|
|
46
83
|
|
|
47
|
-
|
|
84
|
+
/**
|
|
85
|
+
* This type of node establishes a reference to a property of another object.
|
|
86
|
+
* In this way, the value of the node is automatically linked to the value of
|
|
87
|
+
* referenced object. Reference nodes internally represent the linked value
|
|
88
|
+
* as a uniform.
|
|
89
|
+
*
|
|
90
|
+
* @augments Node
|
|
91
|
+
*/
|
|
48
92
|
class ReferenceNode extends Node {
|
|
49
93
|
|
|
50
94
|
static get type() {
|
|
@@ -53,31 +97,118 @@ class ReferenceNode extends Node {
|
|
|
53
97
|
|
|
54
98
|
}
|
|
55
99
|
|
|
100
|
+
/**
|
|
101
|
+
* Constructs a new reference node.
|
|
102
|
+
*
|
|
103
|
+
* @param {String} property - The name of the property the node refers to.
|
|
104
|
+
* @param {String} uniformType - The uniform type that should be used to represent the property value.
|
|
105
|
+
* @param {Object?} [object=null] - The object the property belongs to.
|
|
106
|
+
* @param {Number?} [count=null] - When the linked property is an array-like, this parameter defines its length.
|
|
107
|
+
*/
|
|
56
108
|
constructor( property, uniformType, object = null, count = null ) {
|
|
57
109
|
|
|
58
110
|
super();
|
|
59
111
|
|
|
112
|
+
/**
|
|
113
|
+
* The name of the property the node refers to.
|
|
114
|
+
*
|
|
115
|
+
* @type {String}
|
|
116
|
+
*/
|
|
60
117
|
this.property = property;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* The uniform type that should be used to represent the property value.
|
|
121
|
+
*
|
|
122
|
+
* @type {String}
|
|
123
|
+
*/
|
|
61
124
|
this.uniformType = uniformType;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* The object the property belongs to.
|
|
128
|
+
*
|
|
129
|
+
* @type {Object?}
|
|
130
|
+
* @default null
|
|
131
|
+
*/
|
|
62
132
|
this.object = object;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* When the linked property is an array, this parameter defines its length.
|
|
136
|
+
*
|
|
137
|
+
* @type {Number?}
|
|
138
|
+
* @default null
|
|
139
|
+
*/
|
|
63
140
|
this.count = count;
|
|
64
141
|
|
|
142
|
+
/**
|
|
143
|
+
* The property name might have dots so nested properties can be referred.
|
|
144
|
+
* The hierarchy of the names is stored inside this array.
|
|
145
|
+
*
|
|
146
|
+
* @type {Array<String>}
|
|
147
|
+
*/
|
|
65
148
|
this.properties = property.split( '.' );
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Points to the current referred object. This property exists next to {@link module:ReferenceNode~ReferenceNode#object}
|
|
152
|
+
* since the final reference might be updated from calling code.
|
|
153
|
+
*
|
|
154
|
+
* @type {Object?}
|
|
155
|
+
* @default null
|
|
156
|
+
*/
|
|
66
157
|
this.reference = object;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* The uniform node that holds the value of the reference node.
|
|
161
|
+
*
|
|
162
|
+
* @type {UniformNode}
|
|
163
|
+
* @default null
|
|
164
|
+
*/
|
|
67
165
|
this.node = null;
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* The uniform group of the internal uniform.
|
|
169
|
+
*
|
|
170
|
+
* @type {UniformGroupNode}
|
|
171
|
+
* @default null
|
|
172
|
+
*/
|
|
68
173
|
this.group = null;
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* An optional label of the internal uniform node.
|
|
177
|
+
*
|
|
178
|
+
* @type {String?}
|
|
179
|
+
* @default null
|
|
180
|
+
*/
|
|
69
181
|
this.name = null;
|
|
70
182
|
|
|
183
|
+
/**
|
|
184
|
+
* Overwritten since reference nodes are updated per object.
|
|
185
|
+
*
|
|
186
|
+
* @type {String}
|
|
187
|
+
* @default 'object'
|
|
188
|
+
*/
|
|
71
189
|
this.updateType = NodeUpdateType.OBJECT;
|
|
72
190
|
|
|
73
191
|
}
|
|
74
192
|
|
|
193
|
+
/**
|
|
194
|
+
* When the referred property is array-like, this method can be used
|
|
195
|
+
* to access elements via an index node.
|
|
196
|
+
*
|
|
197
|
+
* @param {IndexNode} indexNode - indexNode.
|
|
198
|
+
* @return {ReferenceElementNode} A reference to an element.
|
|
199
|
+
*/
|
|
75
200
|
element( indexNode ) {
|
|
76
201
|
|
|
77
202
|
return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
|
|
78
203
|
|
|
79
204
|
}
|
|
80
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Sets the uniform group for this reference node.
|
|
208
|
+
*
|
|
209
|
+
* @param {UniformGroupNode} group - The uniform group to set.
|
|
210
|
+
* @return {ReferenceNode} A reference to this node.
|
|
211
|
+
*/
|
|
81
212
|
setGroup( group ) {
|
|
82
213
|
|
|
83
214
|
this.group = group;
|
|
@@ -86,6 +217,12 @@ class ReferenceNode extends Node {
|
|
|
86
217
|
|
|
87
218
|
}
|
|
88
219
|
|
|
220
|
+
/**
|
|
221
|
+
* Sets the label for the internal uniform.
|
|
222
|
+
*
|
|
223
|
+
* @param {String} name - The label to set.
|
|
224
|
+
* @return {ReferenceNode} A reference to this node.
|
|
225
|
+
*/
|
|
89
226
|
label( name ) {
|
|
90
227
|
|
|
91
228
|
this.name = name;
|
|
@@ -94,6 +231,12 @@ class ReferenceNode extends Node {
|
|
|
94
231
|
|
|
95
232
|
}
|
|
96
233
|
|
|
234
|
+
/**
|
|
235
|
+
* Sets the node type which automatically defines the internal
|
|
236
|
+
* uniform type.
|
|
237
|
+
*
|
|
238
|
+
* @param {String} uniformType - The type to set.
|
|
239
|
+
*/
|
|
97
240
|
setNodeType( uniformType ) {
|
|
98
241
|
|
|
99
242
|
let node = null;
|
|
@@ -132,6 +275,13 @@ class ReferenceNode extends Node {
|
|
|
132
275
|
|
|
133
276
|
}
|
|
134
277
|
|
|
278
|
+
/**
|
|
279
|
+
* This method is overwritten since the node type is inferred from
|
|
280
|
+
* the type of the reference node.
|
|
281
|
+
*
|
|
282
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
283
|
+
* @return {String} The node type.
|
|
284
|
+
*/
|
|
135
285
|
getNodeType( builder ) {
|
|
136
286
|
|
|
137
287
|
if ( this.node === null ) {
|
|
@@ -145,6 +295,12 @@ class ReferenceNode extends Node {
|
|
|
145
295
|
|
|
146
296
|
}
|
|
147
297
|
|
|
298
|
+
/**
|
|
299
|
+
* Returns the property value from the given referred object.
|
|
300
|
+
*
|
|
301
|
+
* @param {Object} [object=this.reference] - The object to retrieve the property value from.
|
|
302
|
+
* @return {Any} The value.
|
|
303
|
+
*/
|
|
148
304
|
getValueFromReference( object = this.reference ) {
|
|
149
305
|
|
|
150
306
|
const { properties } = this;
|
|
@@ -161,6 +317,13 @@ class ReferenceNode extends Node {
|
|
|
161
317
|
|
|
162
318
|
}
|
|
163
319
|
|
|
320
|
+
/**
|
|
321
|
+
* Allows to update the reference based on the given state. The state is only
|
|
322
|
+
* evaluated {@link module:ReferenceNode~ReferenceNode#object} is not set.
|
|
323
|
+
*
|
|
324
|
+
* @param {(NodeFrame|NodeBuilder)} state - The current state.
|
|
325
|
+
* @return {Object} The updated reference.
|
|
326
|
+
*/
|
|
164
327
|
updateReference( state ) {
|
|
165
328
|
|
|
166
329
|
this.reference = this.object !== null ? this.object : state.object;
|
|
@@ -169,7 +332,13 @@ class ReferenceNode extends Node {
|
|
|
169
332
|
|
|
170
333
|
}
|
|
171
334
|
|
|
172
|
-
|
|
335
|
+
/**
|
|
336
|
+
* The output of the reference node is the internal uniform node.
|
|
337
|
+
*
|
|
338
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
339
|
+
* @return {UniformNode} The output node.
|
|
340
|
+
*/
|
|
341
|
+
setup( /* builder */ ) {
|
|
173
342
|
|
|
174
343
|
this.updateValue();
|
|
175
344
|
|
|
@@ -177,12 +346,21 @@ class ReferenceNode extends Node {
|
|
|
177
346
|
|
|
178
347
|
}
|
|
179
348
|
|
|
349
|
+
/**
|
|
350
|
+
* Overwritten to to update the internal uniform value.
|
|
351
|
+
*
|
|
352
|
+
* @param {NodeFrame} frame - A reference to the current node frame.
|
|
353
|
+
*/
|
|
180
354
|
update( /*frame*/ ) {
|
|
181
355
|
|
|
182
356
|
this.updateValue();
|
|
183
357
|
|
|
184
358
|
}
|
|
185
359
|
|
|
360
|
+
/**
|
|
361
|
+
* Retrieves the value from the referred object property and uses it
|
|
362
|
+
* to updated the internal uniform.
|
|
363
|
+
*/
|
|
186
364
|
updateValue() {
|
|
187
365
|
|
|
188
366
|
if ( this.node === null ) this.setNodeType( this.uniformType );
|
|
@@ -205,5 +383,26 @@ class ReferenceNode extends Node {
|
|
|
205
383
|
|
|
206
384
|
export default ReferenceNode;
|
|
207
385
|
|
|
386
|
+
/**
|
|
387
|
+
* TSL function for creating a reference node.
|
|
388
|
+
*
|
|
389
|
+
* @function
|
|
390
|
+
* @param {String} name - The name of the property the node refers to.
|
|
391
|
+
* @param {String} type - The uniform type that should be used to represent the property value.
|
|
392
|
+
* @param {Object} object - The object the property belongs to.
|
|
393
|
+
* @returns {ReferenceNode}
|
|
394
|
+
*/
|
|
208
395
|
export const reference = ( name, type, object ) => nodeObject( new ReferenceNode( name, type, object ) );
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* TSL function for creating a reference node. Use this function if you want need a reference
|
|
399
|
+
* to an array-like property that should be represented as a uniform buffer.
|
|
400
|
+
*
|
|
401
|
+
* @function
|
|
402
|
+
* @param {String} name - The name of the property the node refers to.
|
|
403
|
+
* @param {String} type - The uniform type that should be used to represent the property value.
|
|
404
|
+
* @param {Number} count - The number of value inside the array-like object.
|
|
405
|
+
* @param {Object} object - An array-like object the property belongs to.
|
|
406
|
+
* @returns {ReferenceNode}
|
|
407
|
+
*/
|
|
209
408
|
export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceNode( name, type, object, count ) );
|
|
@@ -3,8 +3,32 @@ import { transformedNormalView } from './Normal.js';
|
|
|
3
3
|
import { positionViewDirection } from './Position.js';
|
|
4
4
|
import { materialRefractionRatio } from './MaterialProperties.js';
|
|
5
5
|
|
|
6
|
+
/** @module ReflectVector **/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The reflect vector in view space.
|
|
10
|
+
*
|
|
11
|
+
* @type {Node<vec3>}
|
|
12
|
+
*/
|
|
6
13
|
export const reflectView = /*@__PURE__*/ positionViewDirection.negate().reflect( transformedNormalView );
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The refract vector in view space.
|
|
17
|
+
*
|
|
18
|
+
* @type {Node<vec3>}
|
|
19
|
+
*/
|
|
7
20
|
export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract( transformedNormalView, materialRefractionRatio );
|
|
8
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Used for sampling cube maps when using cube reflection mapping.
|
|
24
|
+
*
|
|
25
|
+
* @type {Node<vec3>}
|
|
26
|
+
*/
|
|
9
27
|
export const reflectVector = /*@__PURE__*/ reflectView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' );
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Used for sampling cube maps when using cube refraction mapping.
|
|
31
|
+
*
|
|
32
|
+
* @type {Node<vec3>}
|
|
33
|
+
*/
|
|
10
34
|
export const refractVector = /*@__PURE__*/ refractView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' );
|