@unikia/upe-renderer 0.186.110 → 0.187.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -7
- package/UPSTREAM.md +4 -4
- package/build/three.core.js +853 -277
- package/build/three.module.js +1098 -1280
- package/build/three.tsl.js +41938 -686
- package/build/three.webgpu.js +10604 -49055
- package/build/three.webgpu.nodes.js +9249 -5788
- package/examples/jsm/Addons.js +2 -0
- package/examples/jsm/animation/CCDIKSolver.js +17 -5
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +27 -14
- package/examples/jsm/csm/CSMShader.js +74 -3
- package/examples/jsm/curves/CurveExtras.js +4 -4
- package/examples/jsm/curves/NURBSCurve.js +14 -0
- package/examples/jsm/exporters/EXRExporter.js +673 -16
- package/examples/jsm/exporters/GLTFExporter.js +4 -4
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/OBJExporter.js +48 -5
- package/examples/jsm/exporters/PLYExporter.js +22 -11
- package/examples/jsm/generators/CityGenerator.js +3 -2
- package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
- package/examples/jsm/gpgpu/BitonicSort.js +30 -23
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
- package/examples/jsm/inspector/Extension.js +1 -1
- package/examples/jsm/inspector/Inspector.js +6 -46
- package/examples/jsm/inspector/RendererInspector.js +43 -8
- package/examples/jsm/inspector/Storage.js +49 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
- package/examples/jsm/inspector/tabs/Parameters.js +5 -1
- package/examples/jsm/inspector/tabs/Performance.js +22 -7
- package/examples/jsm/inspector/tabs/Settings.js +1 -1
- package/examples/jsm/inspector/tabs/Timeline.js +83 -7
- package/examples/jsm/inspector/tabs/Viewer.js +25 -10
- package/examples/jsm/inspector/ui/Profiler.js +1 -1
- package/examples/jsm/inspector/ui/Style.js +21 -53
- package/examples/jsm/inspector/ui/Values.js +28 -3
- package/examples/jsm/libs/fflate.module.js +83 -56
- package/examples/jsm/libs/mikktspace.README.md +27 -0
- package/examples/jsm/libs/mikktspace.module.js +721 -109
- package/examples/jsm/lighting/ClusteredLighting.js +100 -2
- package/examples/jsm/lighting/LightMapper.js +295 -0
- package/examples/jsm/lighting/LightProbeGrid.js +242 -139
- package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
- package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
- package/examples/jsm/lights/SunLight.js +9 -4
- package/examples/jsm/lights/SunLightNode.js +3 -3
- package/examples/jsm/lines/LineMaterial.js +26 -10
- package/examples/jsm/loaders/3DMLoader.js +10 -1
- package/examples/jsm/loaders/3MFLoader.js +5 -1
- package/examples/jsm/loaders/AMFLoader.js +2 -0
- package/examples/jsm/loaders/BVHLoader.js +2 -0
- package/examples/jsm/loaders/ColladaLoader.js +8 -0
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +5 -1
- package/examples/jsm/loaders/EXRLoader.js +120 -104
- package/examples/jsm/loaders/FBXLoader.js +4 -0
- package/examples/jsm/loaders/FontLoader.js +2 -0
- package/examples/jsm/loaders/GCodeLoader.js +5 -9
- package/examples/jsm/loaders/GLTFLoader.js +112 -31
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
- package/examples/jsm/loaders/IESLoader.js +46 -12
- package/examples/jsm/loaders/JXLLoader.js +159 -0
- package/examples/jsm/loaders/KMZLoader.js +6 -0
- package/examples/jsm/loaders/KSPLATLoader.js +2 -0
- package/examples/jsm/loaders/KTX2Loader.js +49 -4
- package/examples/jsm/loaders/KTXLoader.js +5 -3
- package/examples/jsm/loaders/LDrawLoader.js +15 -22
- package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
- package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
- package/examples/jsm/loaders/LUTImageLoader.js +2 -0
- package/examples/jsm/loaders/LWOLoader.js +6 -0
- package/examples/jsm/loaders/MD2Loader.js +2 -0
- package/examples/jsm/loaders/MDDLoader.js +4 -0
- package/examples/jsm/loaders/MTLLoader.js +8 -0
- package/examples/jsm/loaders/MaterialXLoader.js +57 -5
- package/examples/jsm/loaders/NRRDLoader.js +4 -2
- package/examples/jsm/loaders/OBJLoader.js +10 -4
- package/examples/jsm/loaders/PCDLoader.js +6 -2
- package/examples/jsm/loaders/PDBLoader.js +5 -3
- package/examples/jsm/loaders/PLYLoader.js +39 -15
- package/examples/jsm/loaders/PVRLoader.js +2 -2
- package/examples/jsm/loaders/SPLATLoader.js +2 -0
- package/examples/jsm/loaders/SPZLoader.js +2 -0
- package/examples/jsm/loaders/STLLoader.js +3 -1
- package/examples/jsm/loaders/SVGLoader.js +27 -49
- package/examples/jsm/loaders/TDSLoader.js +4 -0
- package/examples/jsm/loaders/TGALoader.js +6 -5
- package/examples/jsm/loaders/TTFLoader.js +2 -0
- package/examples/jsm/loaders/USDLoader.js +14 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
- package/examples/jsm/loaders/VOXLoader.js +3 -0
- package/examples/jsm/loaders/VRMLLoader.js +4 -0
- package/examples/jsm/loaders/VTKLoader.js +2 -0
- package/examples/jsm/loaders/XYZLoader.js +2 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
- package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
- package/examples/jsm/loaders/usd/USDAParser.js +56 -47
- package/examples/jsm/loaders/usd/USDComposer.js +25 -30
- package/examples/jsm/math/ColorConverter.js +7 -3
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/OBB.js +3 -3
- package/examples/jsm/math/Octree.js +20 -17
- package/examples/jsm/objects/GaussianSplat.js +5 -4
- package/examples/jsm/objects/Reflector.js +5 -0
- package/examples/jsm/objects/SkyMesh.js +14 -7
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/physics/RapierPhysics.js +2 -2
- package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
- package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/GTAOPass.js +26 -18
- package/examples/jsm/renderers/SVGRenderer.js +3 -2
- package/examples/jsm/shaders/GTAOShader.js +7 -4
- package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
- package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
- package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
- package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
- package/examples/jsm/tsl/display/BloomNode.js +3 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
- package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
- package/examples/jsm/tsl/display/FSR1Node.js +3 -3
- package/examples/jsm/tsl/display/FXAANode.js +3 -10
- package/examples/jsm/tsl/display/FilmNode.js +3 -3
- package/examples/jsm/tsl/display/GTAONode.js +33 -25
- package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
- package/examples/jsm/tsl/display/GodraysNode.js +5 -19
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
- package/examples/jsm/tsl/display/LensflareNode.js +3 -3
- package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
- package/examples/jsm/tsl/display/OITPassNode.js +0 -11
- package/examples/jsm/tsl/display/OutlineNode.js +107 -5
- package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
- package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
- package/examples/jsm/tsl/display/SMAANode.js +3 -3
- package/examples/jsm/tsl/display/SSAONode.js +6 -20
- package/examples/jsm/tsl/display/SSGINode.js +36 -29
- package/examples/jsm/tsl/display/SSRNode.js +135 -63
- package/examples/jsm/tsl/display/SSSNode.js +6 -20
- package/examples/jsm/tsl/display/SharpenNode.js +3 -3
- package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
- package/examples/jsm/tsl/display/TAAUNode.js +10 -42
- package/examples/jsm/tsl/display/TRAANode.js +11 -43
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
- package/examples/jsm/tsl/display/TransitionNode.js +3 -3
- package/examples/jsm/tsl/display/lensDirt.js +30 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
- package/examples/jsm/tsl/utils/Raymarching.js +1 -1
- package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
- package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
- package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
- package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
- package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -1
- package/examples/jsm/utils/SceneUtils.js +1 -1
- package/examples/jsm/utils/unwrapUVs.js +865 -0
- package/examples/jsm/webxr/XREstimatedLight.js +11 -4
- package/package.json +3 -3
- package/src/Three.TSL.js +2 -683
- package/src/Three.WebGPU.Nodes.js +2 -1
- package/src/Three.WebGPU.js +2 -1
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationUtils.js +1 -3
- package/src/animation/KeyframeTrack.js +19 -0
- package/src/cameras/ArrayCamera.js +12 -0
- package/src/cameras/CubeCamera.js +3 -3
- package/src/constants.js +1 -9
- package/src/core/BufferAttribute.js +57 -21
- package/src/core/BufferGeometry.js +5 -13
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +28 -18
- package/src/core/InterleavedBufferAttribute.js +54 -20
- package/src/core/Object3D.js +19 -9
- package/src/core/Raycaster.js +2 -0
- package/src/core/RenderTarget.js +11 -5
- package/src/core/UniformsGroup.js +7 -3
- package/src/extras/PMREMGenerator.js +392 -685
- package/src/extras/core/Curve.js +4 -0
- package/src/extras/core/CurvePath.js +13 -0
- package/src/extras/core/ShapePath.js +1 -1
- package/src/geometries/EdgesGeometry.js +12 -10
- package/src/geometries/LatheGeometry.js +2 -0
- package/src/helpers/PolarGridHelper.js +1 -1
- package/src/lights/Light.js +11 -0
- package/src/lights/LightProbe.js +2 -0
- package/src/lights/LightShadow.js +2 -0
- package/src/loaders/AnimationLoader.js +2 -0
- package/src/loaders/AudioLoader.js +2 -0
- package/src/loaders/BufferGeometryLoader.js +2 -0
- package/src/loaders/CompressedTextureLoader.js +2 -0
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/DataTextureLoader.js +2 -0
- package/src/loaders/FileLoader.js +2 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ImageLoader.js +1 -0
- package/src/loaders/Loader.js +47 -0
- package/src/loaders/MaterialLoader.js +2 -0
- package/src/loaders/ObjectLoader.js +27 -8
- package/src/loaders/TextureLoader.js +5 -3
- package/src/loaders/nodes/NodeLoader.js +2 -0
- package/src/materials/Material.js +21 -2
- package/src/materials/MeshDepthMaterial.js +1 -1
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +1 -1
- package/src/materials/MeshMatcapMaterial.js +1 -1
- package/src/materials/MeshNormalMaterial.js +1 -1
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +90 -11
- package/src/materials/MeshStandardMaterial.js +1 -1
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +32 -10
- package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
- package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
- package/src/materials/nodes/NodeMaterial.js +36 -16
- package/src/materials/nodes/NodeMaterialInstance.js +193 -0
- package/src/materials/nodes/NodeMaterials.js +1 -0
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
- package/src/math/Box3.js +2 -2
- package/src/math/Color.js +8 -8
- package/src/math/ColorManagement.js +2 -21
- package/src/math/FrustumArray.js +12 -0
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +2 -4
- package/src/math/MathUtils.js +33 -46
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +1 -1
- package/src/math/Matrix4.js +1 -1
- package/src/math/Triangle.js +2 -1
- package/src/math/Vector2.js +1 -1
- package/src/math/Vector3.js +1 -1
- package/src/math/Vector4.js +1 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +2 -0
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/Batch.js +29 -23
- package/src/nodes/accessors/BufferAttributeNode.js +21 -1
- package/src/nodes/accessors/BuiltinNode.js +6 -0
- package/src/nodes/accessors/Camera.js +100 -93
- package/src/nodes/accessors/ClippingNode.js +17 -6
- package/src/nodes/accessors/CubeTextureNode.js +12 -24
- package/src/nodes/accessors/Instance.js +198 -160
- package/src/nodes/accessors/Lights.js +19 -6
- package/src/nodes/accessors/MaterialNode.js +33 -4
- package/src/nodes/accessors/Morph.js +81 -22
- package/src/nodes/accessors/Normal.js +0 -42
- package/src/nodes/accessors/Object3DNode.js +6 -0
- package/src/nodes/accessors/PointUVNode.js +6 -0
- package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
- package/src/nodes/accessors/ReferenceNode.js +6 -0
- package/src/nodes/accessors/Skinning.js +57 -52
- package/src/nodes/accessors/StorageBufferNode.js +3 -12
- package/src/nodes/accessors/TextureBicubic.js +30 -27
- package/src/nodes/accessors/TextureNode.js +164 -78
- package/src/nodes/accessors/TextureSizeNode.js +6 -0
- package/src/nodes/accessors/UniformArrayNode.js +8 -15
- package/src/nodes/accessors/VelocityNode.js +13 -8
- package/src/nodes/code/CodeNode.js +6 -0
- package/src/nodes/code/ExpressionNode.js +6 -0
- package/src/nodes/code/FunctionCallNode.js +3 -3
- package/src/nodes/code/FunctionNode.js +15 -13
- package/src/nodes/core/ArrayNode.js +3 -3
- package/src/nodes/core/AssignNode.js +10 -9
- package/src/nodes/core/AttributeNode.js +39 -0
- package/src/nodes/core/BypassNode.js +6 -0
- package/src/nodes/core/ConstNode.js +31 -1
- package/src/nodes/core/ContextNode.js +11 -6
- package/src/nodes/core/IndexNode.js +6 -0
- package/src/nodes/core/InputNode.js +6 -0
- package/src/nodes/core/InspectorNode.js +17 -31
- package/src/nodes/core/IsolateNode.js +8 -0
- package/src/nodes/core/Node.js +367 -67
- package/src/nodes/core/NodeBuilder.js +664 -222
- package/src/nodes/core/NodeUtils.js +25 -0
- package/src/nodes/core/NodeVar.js +10 -1
- package/src/nodes/core/OutputStructNode.js +6 -0
- package/src/nodes/core/OverrideContextNode.js +38 -37
- package/src/nodes/core/PropertyNode.js +14 -0
- package/src/nodes/core/StackNode.js +33 -21
- package/src/nodes/core/StructNode.js +6 -0
- package/src/nodes/core/StructTypeNode.js +6 -0
- package/src/nodes/core/SubBuildNode.js +8 -0
- package/src/nodes/core/TempNode.js +10 -35
- package/src/nodes/core/UniformGroupNode.js +6 -0
- package/src/nodes/core/VarNode.js +43 -135
- package/src/nodes/core/VaryingNode.js +33 -2
- package/src/nodes/display/BlendModes.js +5 -40
- package/src/nodes/display/BumpMapNode.js +17 -7
- package/src/nodes/display/ColorAdjustment.js +22 -10
- package/src/nodes/display/ColorSpaceFunctions.js +2 -14
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +6 -0
- package/src/nodes/display/NormalMapNode.js +3 -3
- package/src/nodes/display/PassNode.js +75 -16
- package/src/nodes/display/RenderOutputNode.js +22 -5
- package/src/nodes/display/ScreenNode.js +6 -0
- package/src/nodes/display/ToneMappingFunctions.js +9 -51
- package/src/nodes/display/ToneMappingNode.js +3 -3
- package/src/nodes/display/ToonOutlinePassNode.js +66 -2
- package/src/nodes/display/ViewportDepthNode.js +34 -4
- package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
- package/src/nodes/functions/BSDF/D_GGX.js +1 -8
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
- package/src/nodes/functions/BSDF/LTC.js +20 -47
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
- package/src/nodes/functions/PhysicalLightingModel.js +84 -51
- package/src/nodes/functions/VolumetricLightingModel.js +1 -1
- package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
- package/src/nodes/functions/material/getRoughness.js +3 -1
- package/src/nodes/geometry/RangeNode.js +52 -69
- package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
- package/src/nodes/gpgpu/BarrierNode.js +6 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
- package/src/nodes/gpgpu/ComputeNode.js +6 -0
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
- package/src/nodes/lighting/AnalyticLightNode.js +7 -14
- package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
- package/src/nodes/lighting/EnvironmentNode.js +58 -8
- package/src/nodes/lighting/IESSpotLightNode.js +19 -4
- package/src/nodes/lighting/LightProbeNode.js +2 -1
- package/src/nodes/lighting/LightUtils.js +2 -2
- package/src/nodes/lighting/LightingNode.js +6 -0
- package/src/nodes/lighting/LightsNode.js +26 -32
- package/src/nodes/lighting/PointShadowNode.js +92 -48
- package/src/nodes/lighting/ProjectorLightNode.js +1 -1
- package/src/nodes/lighting/RectAreaLightNode.js +13 -14
- package/src/nodes/lighting/ShadowBaseNode.js +9 -17
- package/src/nodes/lighting/ShadowFilterNode.js +26 -3
- package/src/nodes/lighting/ShadowNode.js +13 -11
- package/src/nodes/materialx/MaterialXColor.js +2 -14
- package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
- package/src/nodes/materialx/MaterialXNodes.js +8 -11
- package/src/nodes/materialx/MaterialXNoise.js +195 -454
- package/src/nodes/math/BitcastNode.js +5 -5
- package/src/nodes/math/BitcountNode.js +18 -46
- package/src/nodes/math/ConditionalNode.js +92 -22
- package/src/nodes/math/Hash.js +1 -1
- package/src/nodes/math/MathNode.js +86 -64
- package/src/nodes/math/MathUtils.js +2 -2
- package/src/nodes/math/OperatorNode.js +42 -59
- package/src/nodes/math/PackFloatNode.js +9 -9
- package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
- package/src/nodes/math/TriNoise3D.js +3 -23
- package/src/nodes/math/UnpackFloatNode.js +9 -9
- package/src/nodes/pmrem/PMREMNode.js +38 -75
- package/src/nodes/pmrem/PMREMUtils.js +108 -272
- package/src/nodes/procedural/Checker.js +1 -1
- package/src/nodes/tsl/TSLCore.js +199 -74
- package/src/nodes/utils/ArrayElementNode.js +19 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +2 -2
- package/src/nodes/utils/EventNode.js +6 -0
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +14 -9
- package/src/nodes/utils/MemberNode.js +18 -0
- package/src/nodes/utils/PostProcessingUtils.js +20 -25
- package/src/nodes/utils/RTTNode.js +2 -0
- package/src/nodes/utils/ReflectorNode.js +24 -0
- package/src/nodes/utils/RotateNode.js +3 -3
- package/src/nodes/utils/SampleNode.js +6 -0
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +6 -0
- package/src/nodes/utils/UVUtils.js +2 -2
- package/src/objects/BatchedMesh.js +146 -15
- package/src/objects/InstancedMesh.js +12 -4
- package/src/objects/Line.js +20 -0
- package/src/objects/Mesh.js +8 -0
- package/src/objects/Points.js +20 -0
- package/src/objects/Skeleton.js +26 -0
- package/src/objects/SkinnedMesh.js +3 -3
- package/src/objects/Sprite.js +10 -0
- package/src/renderers/WebGLRenderer.js +104 -70
- package/src/renderers/common/Animation.js +5 -1
- package/src/renderers/common/Attributes.js +67 -57
- package/src/renderers/common/Backend.js +78 -3
- package/src/renderers/common/BindGroup.js +11 -0
- package/src/renderers/common/Binding.js +0 -11
- package/src/renderers/common/Bindings.js +116 -10
- package/src/renderers/common/Buffer.js +1 -1
- package/src/renderers/common/ClippingContext.js +12 -1
- package/src/renderers/common/ComputePipeline.js +17 -1
- package/src/renderers/common/DirectRenderPipeline.js +7 -3
- package/src/renderers/common/Geometries.js +170 -132
- package/src/renderers/common/Info.js +1 -1
- package/src/renderers/common/InspectorBase.js +5 -5
- package/src/renderers/common/Lighting.js +59 -0
- package/src/renderers/common/Pipelines.js +26 -12
- package/src/renderers/common/ProgrammableStage.js +1 -17
- package/src/renderers/common/RenderContext.js +21 -0
- package/src/renderers/common/RenderContexts.js +13 -4
- package/src/renderers/common/RenderObject.js +111 -35
- package/src/renderers/common/RenderObjects.js +37 -19
- package/src/renderers/common/Renderer.js +537 -295
- package/src/renderers/common/RendererUtils.js +15 -0
- package/src/renderers/common/StandardDrawingPipeline.js +343 -0
- package/src/renderers/common/Storage3DTexture.js +11 -0
- package/src/renderers/common/StorageArrayTexture.js +10 -0
- package/src/renderers/common/StorageTexture.js +0 -9
- package/src/renderers/common/Textures.js +144 -37
- package/src/renderers/common/UniformsGroup.js +19 -0
- package/src/renderers/common/XRManager.js +10 -91
- package/src/renderers/common/extras/PMREMGenerator.js +298 -576
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
- package/src/renderers/common/nodes/NodeLibrary.js +11 -35
- package/src/renderers/common/nodes/NodeManager.js +80 -31
- package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
- package/src/renderers/common/nodes/NodeSampler.js +14 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
- package/src/renderers/shaders/ShaderLib.js +3 -0
- package/src/renderers/shaders/UniformsLib.js +4 -5
- package/src/renderers/webgl/WebGLBackground.js +3 -3
- package/src/renderers/webgl/WebGLBindingStates.js +4 -2
- package/src/renderers/webgl/WebGLCapabilities.js +7 -1
- package/src/renderers/webgl/WebGLEnvironments.js +2 -2
- package/src/renderers/webgl/WebGLGeometries.js +42 -14
- package/src/renderers/webgl/WebGLMaterials.js +15 -2
- package/src/renderers/webgl/WebGLOutput.js +37 -1
- package/src/renderers/webgl/WebGLProgram.js +13 -54
- package/src/renderers/webgl/WebGLPrograms.js +22 -8
- package/src/renderers/webgl/WebGLRenderStates.js +11 -8
- package/src/renderers/webgl/WebGLShadowMap.js +6 -4
- package/src/renderers/webgl/WebGLState.js +10 -6
- package/src/renderers/webgl/WebGLTextures.js +129 -77
- package/src/renderers/webgl/WebGLUniforms.js +44 -6
- package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
- package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
- package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
- package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
- package/src/renderers/webgpu/WebGPUBackend.js +140 -82
- package/src/renderers/webgpu/WebGPURenderer.js +1 -1
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
- package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
- package/src/renderers/webxr/WebXRController.js +3 -3
- package/src/renderers/webxr/WebXRManager.js +5 -90
- package/src/scenes/Scene.js +4 -4
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -2
- package/src/textures/FramebufferTexture.js +11 -0
- package/src/textures/Texture.js +29 -1
- package/src/textures/TextureSource.js +1 -1
- package/src/upe.js +1 -1
- package/src/utils.js +4 -4
- package/examples/jsm/libs/surfaceNet.js +0 -201
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
|
|
2
|
-
import { float, Fn, ivec2, int, If, uniform } from '../tsl/TSLBase.js';
|
|
2
|
+
import { float, Fn, ivec2, int, If, uniform, vec4 } from '../tsl/TSLBase.js';
|
|
3
3
|
import { Loop } from '../utils/LoopNode.js';
|
|
4
4
|
import { OnObjectUpdate } from '../utils/EventNode.js';
|
|
5
5
|
import { textureLoad } from './TextureNode.js';
|
|
6
6
|
import { positionLocal } from './Position.js';
|
|
7
7
|
import { normalLocal } from './Normal.js';
|
|
8
|
+
import { property } from '../core/PropertyNode.js';
|
|
9
|
+
import { varying } from '../core/VaryingNode.js';
|
|
8
10
|
import { instanceIndex, vertexIndex } from '../core/IndexNode.js';
|
|
9
11
|
|
|
10
12
|
import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
|
|
@@ -18,7 +20,7 @@ const _morphVec4 = /*@__PURE__*/ new Vector4();
|
|
|
18
20
|
const _morphInfluencesData = /*@__PURE__*/ new WeakMap();
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
|
-
* TSL function that retrieves and scales the morphed attribute (position or
|
|
23
|
+
* TSL function that retrieves and scales the morphed attribute (position, normal or color) texel value.
|
|
22
24
|
*
|
|
23
25
|
* @param {Object} params - The parameter object.
|
|
24
26
|
* @param {Node<texture>} params.bufferMap - The morph target data array texture.
|
|
@@ -26,8 +28,8 @@ const _morphInfluencesData = /*@__PURE__*/ new WeakMap();
|
|
|
26
28
|
* @param {number} params.stride - The vertex data stride (e.g. 1 or 2).
|
|
27
29
|
* @param {Node<int>} params.width - The texture width limit.
|
|
28
30
|
* @param {Node<int>} params.depth - The target layer index (morph target index).
|
|
29
|
-
* @param {Node<int>} params.offset - The texture offset (e.g. 0 for position, 1 for normal).
|
|
30
|
-
* @returns {Node<
|
|
31
|
+
* @param {Node<int>} params.offset - The texture offset (e.g. 0 for position, 1 for normal, 2 for color).
|
|
32
|
+
* @returns {Node<vec4>} The scaled morph target value.
|
|
31
33
|
*/
|
|
32
34
|
const getMorph = /*@__PURE__*/ Fn( ( { bufferMap, influence, stride, width, depth, offset } ) => {
|
|
33
35
|
|
|
@@ -36,12 +38,52 @@ const getMorph = /*@__PURE__*/ Fn( ( { bufferMap, influence, stride, width, dept
|
|
|
36
38
|
const y = texelIndex.div( width );
|
|
37
39
|
const x = texelIndex.sub( y.mul( width ) );
|
|
38
40
|
|
|
39
|
-
const bufferAttrib = textureLoad( bufferMap, ivec2( x, y ) ).depth( depth )
|
|
41
|
+
const bufferAttrib = textureLoad( bufferMap, ivec2( x, y ) ).depth( depth );
|
|
40
42
|
|
|
41
43
|
return bufferAttrib.mul( influence );
|
|
42
44
|
|
|
43
45
|
} );
|
|
44
46
|
|
|
47
|
+
/**
|
|
48
|
+
* The morph target base influence. It is `1` when `morphTargetsRelative`
|
|
49
|
+
* is `true`, otherwise `1 - sum( influences )`.
|
|
50
|
+
*
|
|
51
|
+
* @type {UniformNode<float>}
|
|
52
|
+
*/
|
|
53
|
+
const morphBase = /*@__PURE__*/ uniform( 1 ).onObjectUpdate( ( { object } ) => {
|
|
54
|
+
|
|
55
|
+
return object.geometry.morphTargetsRelative ? 1 : 1 - object.morphTargetInfluences.reduce( ( a, b ) => a + b, 0 );
|
|
56
|
+
|
|
57
|
+
} );
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The sum of the weighted color morph targets.
|
|
61
|
+
*
|
|
62
|
+
* @type {PropertyNode<vec4>}
|
|
63
|
+
*/
|
|
64
|
+
const morphColorSum = /*@__PURE__*/ property( 'vec4', 'morphColorSum' );
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* TSL function that applies the color morph targets to the given color.
|
|
68
|
+
* The result is computed in the vertex stage.
|
|
69
|
+
*
|
|
70
|
+
* @tsl
|
|
71
|
+
* @function
|
|
72
|
+
* @param {Node<vec4>} color - The color to morph. Must be available in the vertex stage.
|
|
73
|
+
* @returns {Node<vec4>} The morphed color.
|
|
74
|
+
*/
|
|
75
|
+
export const morphColor = /*@__PURE__*/ Fn( ( [ color ], { geometry } ) => {
|
|
76
|
+
|
|
77
|
+
if ( geometry.morphAttributes.color[ 0 ].itemSize === 4 ) {
|
|
78
|
+
|
|
79
|
+
return varying( color.mul( morphBase ).add( morphColorSum ) );
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return varying( vec4( color.rgb.mul( morphBase ).add( morphColorSum.rgb ), color.a ) );
|
|
84
|
+
|
|
85
|
+
} );
|
|
86
|
+
|
|
45
87
|
/**
|
|
46
88
|
* Resolves or creates a compiled DataArrayTexture containing encoded vertex morph targets data for WebGL2/WebGPU.
|
|
47
89
|
*
|
|
@@ -182,18 +224,22 @@ function getEntry( geometry ) {
|
|
|
182
224
|
* @function
|
|
183
225
|
* @param {Mesh} mesh - The mesh.
|
|
184
226
|
*/
|
|
185
|
-
export const morphReference = /*@__PURE__*/ Fn( ( [ mesh ] ) => {
|
|
227
|
+
export const morphReference = /*@__PURE__*/ Fn( ( [ mesh ], builder ) => {
|
|
186
228
|
|
|
187
229
|
const { geometry } = mesh;
|
|
188
230
|
|
|
189
231
|
const hasMorphPosition = geometry.morphAttributes.position !== undefined;
|
|
190
232
|
const hasMorphNormals = geometry.hasAttribute( 'normal' ) && geometry.morphAttributes.normal !== undefined;
|
|
233
|
+
const hasMorphColors = builder.material.vertexColors === true && geometry.morphAttributes.color !== undefined;
|
|
234
|
+
const hasColorAlpha = hasMorphColors === true && geometry.morphAttributes.color[ 0 ].itemSize === 4;
|
|
191
235
|
|
|
192
236
|
const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
|
|
193
237
|
const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
|
|
194
238
|
|
|
195
239
|
if ( morphTargetsCount === 0 ) return;
|
|
196
240
|
|
|
241
|
+
if ( mesh.morphTexture ) builder.objectSpecific = true;
|
|
242
|
+
|
|
197
243
|
// Init
|
|
198
244
|
|
|
199
245
|
let morphInfluenceData = _morphInfluencesData.get( mesh );
|
|
@@ -201,7 +247,6 @@ export const morphReference = /*@__PURE__*/ Fn( ( [ mesh ] ) => {
|
|
|
201
247
|
if ( morphInfluenceData === undefined || morphInfluenceData.count !== morphTargetsCount ) {
|
|
202
248
|
|
|
203
249
|
morphInfluenceData = {
|
|
204
|
-
base: uniform( 1 ),
|
|
205
250
|
influences: mesh.morphTargetInfluences ? uniformArray( mesh.morphTargetInfluences, 'float' ) : null,
|
|
206
251
|
count: morphTargetsCount
|
|
207
252
|
};
|
|
@@ -210,14 +255,15 @@ export const morphReference = /*@__PURE__*/ Fn( ( [ mesh ] ) => {
|
|
|
210
255
|
|
|
211
256
|
}
|
|
212
257
|
|
|
213
|
-
const {
|
|
258
|
+
const { influences } = morphInfluenceData;
|
|
214
259
|
|
|
215
260
|
// Shader
|
|
216
261
|
|
|
217
262
|
const { texture: bufferMap, stride, size } = getEntry( geometry );
|
|
218
263
|
|
|
219
|
-
if ( hasMorphPosition === true ) positionLocal.mulAssign(
|
|
220
|
-
if ( hasMorphNormals === true ) normalLocal.mulAssign(
|
|
264
|
+
if ( hasMorphPosition === true ) positionLocal.mulAssign( morphBase );
|
|
265
|
+
if ( hasMorphNormals === true ) normalLocal.mulAssign( morphBase );
|
|
266
|
+
if ( hasMorphColors === true ) morphColorSum.assign( 0 );
|
|
221
267
|
|
|
222
268
|
const width = int( size.width );
|
|
223
269
|
|
|
@@ -246,7 +292,7 @@ export const morphReference = /*@__PURE__*/ Fn( ( [ mesh ] ) => {
|
|
|
246
292
|
width,
|
|
247
293
|
depth: i,
|
|
248
294
|
offset: int( 0 )
|
|
249
|
-
} ) );
|
|
295
|
+
} ).xyz );
|
|
250
296
|
|
|
251
297
|
}
|
|
252
298
|
|
|
@@ -259,29 +305,42 @@ export const morphReference = /*@__PURE__*/ Fn( ( [ mesh ] ) => {
|
|
|
259
305
|
width,
|
|
260
306
|
depth: i,
|
|
261
307
|
offset: int( 1 )
|
|
262
|
-
} ) );
|
|
308
|
+
} ).xyz );
|
|
263
309
|
|
|
264
310
|
}
|
|
265
311
|
|
|
266
|
-
|
|
312
|
+
if ( hasMorphColors === true ) {
|
|
267
313
|
|
|
268
|
-
|
|
314
|
+
const morph = getMorph( {
|
|
315
|
+
bufferMap,
|
|
316
|
+
influence,
|
|
317
|
+
stride,
|
|
318
|
+
width,
|
|
319
|
+
depth: i,
|
|
320
|
+
offset: int( 2 )
|
|
321
|
+
} );
|
|
269
322
|
|
|
270
|
-
|
|
323
|
+
if ( hasColorAlpha === true ) {
|
|
271
324
|
|
|
272
|
-
|
|
325
|
+
morphColorSum.addAssign( morph );
|
|
273
326
|
|
|
274
|
-
|
|
327
|
+
} else {
|
|
275
328
|
|
|
276
|
-
|
|
329
|
+
morphColorSum.rgb.addAssign( morph.rgb );
|
|
277
330
|
|
|
278
|
-
|
|
331
|
+
}
|
|
279
332
|
|
|
280
|
-
|
|
333
|
+
}
|
|
281
334
|
|
|
282
|
-
|
|
335
|
+
} );
|
|
283
336
|
|
|
284
|
-
|
|
337
|
+
} );
|
|
338
|
+
|
|
339
|
+
// Update
|
|
340
|
+
|
|
341
|
+
OnObjectUpdate( ( { object } ) => {
|
|
342
|
+
|
|
343
|
+
const { influences } = morphInfluenceData;
|
|
285
344
|
|
|
286
345
|
if ( influences ) {
|
|
287
346
|
|
|
@@ -198,46 +198,4 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) =
|
|
|
198
198
|
|
|
199
199
|
} );
|
|
200
200
|
|
|
201
|
-
// Deprecated
|
|
202
201
|
|
|
203
|
-
/**
|
|
204
|
-
* TSL object that represents the transformed vertex normal of the current rendered object in view space.
|
|
205
|
-
*
|
|
206
|
-
* @tsl
|
|
207
|
-
* @type {Node<vec3>}
|
|
208
|
-
* @deprecated since r178. Use `normalView` instead.
|
|
209
|
-
*/
|
|
210
|
-
export const transformedNormalView = ( Fn( () => { // @deprecated, r177
|
|
211
|
-
|
|
212
|
-
warn( 'TSL: "transformedNormalView" is deprecated. Use "normalView" instead.' );
|
|
213
|
-
return normalView;
|
|
214
|
-
|
|
215
|
-
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* TSL object that represents the transformed vertex normal of the current rendered object in world space.
|
|
219
|
-
*
|
|
220
|
-
* @tsl
|
|
221
|
-
* @type {Node<vec3>}
|
|
222
|
-
* @deprecated since r178. Use `normalWorld` instead.
|
|
223
|
-
*/
|
|
224
|
-
export const transformedNormalWorld = ( Fn( () => { // @deprecated, r177
|
|
225
|
-
|
|
226
|
-
warn( 'TSL: "transformedNormalWorld" is deprecated. Use "normalWorld" instead.' );
|
|
227
|
-
return normalWorld;
|
|
228
|
-
|
|
229
|
-
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* TSL object that represents the transformed clearcoat vertex normal of the current rendered object in view space.
|
|
233
|
-
*
|
|
234
|
-
* @tsl
|
|
235
|
-
* @type {Node<vec3>}
|
|
236
|
-
* @deprecated since r178. Use `clearcoatNormalView` instead.
|
|
237
|
-
*/
|
|
238
|
-
export const transformedClearcoatNormalView = ( Fn( () => { // @deprecated, r177
|
|
239
|
-
|
|
240
|
-
warn( 'TSL: "transformedClearcoatNormalView" is deprecated. Use "clearcoatNormalView" instead.' );
|
|
241
|
-
return clearcoatNormalView;
|
|
242
|
-
|
|
243
|
-
} ).once( [ 'NORMAL', 'VERTEX' ] ) )();
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import BufferAttributeNode from './BufferAttributeNode.js';
|
|
3
|
+
import { storage } from './StorageBufferNode.js';
|
|
4
|
+
import { instanceIndex, vertexIndex } from '../core/IndexNode.js';
|
|
5
|
+
import { mat3, mat4 } from '../tsl/TSLBase.js';
|
|
6
|
+
import { getLengthFromType } from '../core/NodeUtils.js';
|
|
7
|
+
|
|
8
|
+
import { InterleavedBufferAttribute } from '../../core/InterleavedBufferAttribute.js';
|
|
9
|
+
|
|
10
|
+
const _columns = /*@__PURE__*/ new WeakMap();
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Returns a column of the given buffer attribute, like a column of the matrices of an
|
|
14
|
+
* instanced mesh. The column views the attribute itself, so both share the same GPU buffer.
|
|
15
|
+
*
|
|
16
|
+
* @private
|
|
17
|
+
* @param {BufferAttribute} attribute - The buffer attribute.
|
|
18
|
+
* @param {string} type - The type of the column (e.g. `'vec4'`).
|
|
19
|
+
* @param {number} offset - The offset of the column.
|
|
20
|
+
* @return {InterleavedBufferAttribute} The column.
|
|
21
|
+
*/
|
|
22
|
+
function getAttributeColumn( attribute, type, offset ) {
|
|
23
|
+
|
|
24
|
+
let columns = _columns.get( attribute );
|
|
25
|
+
|
|
26
|
+
if ( columns === undefined ) {
|
|
27
|
+
|
|
28
|
+
columns = [];
|
|
29
|
+
|
|
30
|
+
_columns.set( attribute, columns );
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return columns[ offset ] || ( columns[ offset ] = new InterleavedBufferAttribute( attribute, getLengthFromType( type ), offset ) );
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* A buffer attribute node that binds the attribute of the rendered object
|
|
40
|
+
* referred to by a {@link ReferenceAttributeNode}.
|
|
41
|
+
*
|
|
42
|
+
* @private
|
|
43
|
+
* @augments BufferAttributeNode
|
|
44
|
+
*/
|
|
45
|
+
class ReferenceBufferAttributeNode extends BufferAttributeNode {
|
|
46
|
+
|
|
47
|
+
static get type() {
|
|
48
|
+
|
|
49
|
+
return 'ReferenceBufferAttributeNode';
|
|
50
|
+
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Constructs a new reference buffer attribute node.
|
|
55
|
+
*
|
|
56
|
+
* @param {ReferenceAttributeNode} referenceNode - The reference attribute node.
|
|
57
|
+
* @param {string} bufferType - The buffer type (e.g. `'vec3'`).
|
|
58
|
+
* @param {number} [bufferStride=0] - The buffer stride, when binding a column of the attribute.
|
|
59
|
+
* @param {number} [bufferOffset=0] - The buffer offset, when binding a column of the attribute.
|
|
60
|
+
*/
|
|
61
|
+
constructor( referenceNode, bufferType, bufferStride = 0, bufferOffset = 0 ) {
|
|
62
|
+
|
|
63
|
+
super( null, bufferType, bufferStride, bufferOffset );
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The reference attribute node.
|
|
67
|
+
*
|
|
68
|
+
* @type {ReferenceAttributeNode}
|
|
69
|
+
*/
|
|
70
|
+
this.referenceNode = referenceNode;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* This flag can be used for type testing.
|
|
74
|
+
*
|
|
75
|
+
* @type {boolean}
|
|
76
|
+
* @readonly
|
|
77
|
+
* @default true
|
|
78
|
+
*/
|
|
79
|
+
this.isReferenceBufferAttributeNode = true;
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Overwritten since the node has no attribute data of its own.
|
|
85
|
+
*
|
|
86
|
+
* @return {string} The hash.
|
|
87
|
+
*/
|
|
88
|
+
getHash() {
|
|
89
|
+
|
|
90
|
+
return String( this.id );
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Returns the referred attribute of the given object, or its column.
|
|
96
|
+
*
|
|
97
|
+
* @param {Object3D} object - The rendered object.
|
|
98
|
+
* @return {?(BufferAttribute|InterleavedBufferAttribute)} The buffer attribute.
|
|
99
|
+
*/
|
|
100
|
+
getObjectAttribute( object ) {
|
|
101
|
+
|
|
102
|
+
const attribute = this.referenceNode.getAttribute( object );
|
|
103
|
+
|
|
104
|
+
if ( ! attribute || this.bufferStride === 0 ) return attribute;
|
|
105
|
+
|
|
106
|
+
return getAttributeColumn( attribute, this.bufferType, this.bufferOffset );
|
|
107
|
+
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* The attribute of the object the program is built for defines the layout.
|
|
112
|
+
*
|
|
113
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
114
|
+
*/
|
|
115
|
+
setup( builder ) {
|
|
116
|
+
|
|
117
|
+
this.attribute = this.getObjectAttribute( builder.object );
|
|
118
|
+
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* This node binds a buffer attribute that is a property of the rendered object, like the
|
|
125
|
+
* matrices of an instanced mesh. Unlike {@link BufferAttributeNode}, the attribute isn't part
|
|
126
|
+
* of the program: each object binds its own attribute, so objects can share a program.
|
|
127
|
+
* ```js
|
|
128
|
+
* const matrix = referenceAttribute( 'instanceMatrix', 'mat4' );
|
|
129
|
+
* const color = referenceAttribute( 'instanceColor' );
|
|
130
|
+
* ```
|
|
131
|
+
* Matrices are bound as columns. Storage buffer attributes are bound as storage buffers.
|
|
132
|
+
*
|
|
133
|
+
* @augments Node
|
|
134
|
+
*/
|
|
135
|
+
class ReferenceAttributeNode extends Node {
|
|
136
|
+
|
|
137
|
+
static get type() {
|
|
138
|
+
|
|
139
|
+
return 'ReferenceAttributeNode';
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Constructs a new reference attribute node.
|
|
145
|
+
*
|
|
146
|
+
* @param {string} property - The name of the property the node refers to.
|
|
147
|
+
* @param {?string} [nodeType=null] - The node type. Inferred from the attribute if not set.
|
|
148
|
+
* @param {?Object} [object=null] - The object the property belongs to. The rendered object if not set.
|
|
149
|
+
*/
|
|
150
|
+
constructor( property, nodeType = null, object = null ) {
|
|
151
|
+
|
|
152
|
+
super( nodeType );
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* The name of the property the node refers to.
|
|
156
|
+
*
|
|
157
|
+
* @type {string}
|
|
158
|
+
*/
|
|
159
|
+
this.property = property;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* The property name might have dots so nested properties can be referred.
|
|
163
|
+
* The hierarchy of the names is stored inside this array.
|
|
164
|
+
*
|
|
165
|
+
* @type {Array<string>}
|
|
166
|
+
*/
|
|
167
|
+
this.properties = property.split( '.' );
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* The object the property belongs to. If `null`, the rendered object is used.
|
|
171
|
+
*
|
|
172
|
+
* @type {?Object}
|
|
173
|
+
* @default null
|
|
174
|
+
*/
|
|
175
|
+
this.object = object;
|
|
176
|
+
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Returns the value of the referred property of the given object.
|
|
181
|
+
*
|
|
182
|
+
* @param {Object} object - The object.
|
|
183
|
+
* @return {?(BufferAttribute|InterleavedBufferAttribute)} The value of the referred property.
|
|
184
|
+
*/
|
|
185
|
+
getValueFromReference( object ) {
|
|
186
|
+
|
|
187
|
+
let value = object;
|
|
188
|
+
|
|
189
|
+
for ( const property of this.properties ) {
|
|
190
|
+
|
|
191
|
+
if ( value === undefined || value === null ) break;
|
|
192
|
+
|
|
193
|
+
value = value[ property ];
|
|
194
|
+
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return value;
|
|
198
|
+
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Returns the attribute the node binds when rendering the given object.
|
|
203
|
+
*
|
|
204
|
+
* @param {Object3D} object - The rendered object.
|
|
205
|
+
* @return {?(BufferAttribute|InterleavedBufferAttribute)} The buffer attribute.
|
|
206
|
+
*/
|
|
207
|
+
getAttribute( object ) {
|
|
208
|
+
|
|
209
|
+
return this.getValueFromReference( this.object !== null ? this.object : object );
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Returns the node type, inferred from the attribute if not set.
|
|
215
|
+
*
|
|
216
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
217
|
+
* @return {string} The node type.
|
|
218
|
+
*/
|
|
219
|
+
generateNodeType( builder ) {
|
|
220
|
+
|
|
221
|
+
if ( this.nodeType !== null ) return this.nodeType;
|
|
222
|
+
|
|
223
|
+
const attribute = this.getAttribute( builder.object );
|
|
224
|
+
|
|
225
|
+
return attribute ? builder.getTypeFromAttribute( attribute ) : 'float';
|
|
226
|
+
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Sets up the attribute nodes.
|
|
231
|
+
*
|
|
232
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
233
|
+
* @return {Node} The attribute node.
|
|
234
|
+
*/
|
|
235
|
+
setup( builder ) {
|
|
236
|
+
|
|
237
|
+
const attribute = this.getAttribute( builder.object );
|
|
238
|
+
|
|
239
|
+
if ( ! attribute ) throw new Error( `THREE.ReferenceAttributeNode: Attribute "${ this.property }" not found.` );
|
|
240
|
+
|
|
241
|
+
const type = this.getNodeType( builder );
|
|
242
|
+
|
|
243
|
+
if ( attribute.isStorageBufferAttribute === true || attribute.isStorageInstancedBufferAttribute === true ) {
|
|
244
|
+
|
|
245
|
+
const index = attribute.isStorageInstancedBufferAttribute === true ? instanceIndex : vertexIndex;
|
|
246
|
+
|
|
247
|
+
return storage( attribute, type, Math.max( attribute.count, 1 ) ).onObjectUpdate( ( { object } ) => this.getAttribute( object ) ).element( index );
|
|
248
|
+
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
if ( type === 'mat4' ) {
|
|
252
|
+
|
|
253
|
+
return mat4( ...[ 0, 4, 8, 12 ].map( ( offset ) => new ReferenceBufferAttributeNode( this, 'vec4', 16, offset ) ) );
|
|
254
|
+
|
|
255
|
+
} else if ( type === 'mat3' ) {
|
|
256
|
+
|
|
257
|
+
return mat3( ...[ 0, 3, 6 ].map( ( offset ) => new ReferenceBufferAttributeNode( this, 'vec3', 9, offset ) ) );
|
|
258
|
+
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
return new ReferenceBufferAttributeNode( this, type );
|
|
262
|
+
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export default ReferenceAttributeNode;
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* TSL function for creating a reference attribute node.
|
|
271
|
+
*
|
|
272
|
+
* @tsl
|
|
273
|
+
* @function
|
|
274
|
+
* @param {string} name - The name of the property the node refers to.
|
|
275
|
+
* @param {?string} [type=null] - The node type. Inferred from the attribute if not set.
|
|
276
|
+
* @param {?Object} [object=null] - The object the property belongs to. The rendered object if not set.
|
|
277
|
+
* @returns {ReferenceAttributeNode}
|
|
278
|
+
*/
|
|
279
|
+
export const referenceAttribute = ( name, type = null, object = null ) => new ReferenceAttributeNode( name, type, object );
|