@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
|
@@ -60,6 +60,12 @@ class LoopNode extends Node {
|
|
|
60
60
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
isCacheable( /*builder*/ ) {
|
|
64
|
+
|
|
65
|
+
return false;
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
63
69
|
/**
|
|
64
70
|
* Returns a loop variable name based on an index. The pattern is
|
|
65
71
|
* `0` = `i`, `1`= `j`, `2`= `k` and so on.
|
|
@@ -105,7 +111,7 @@ class LoopNode extends Node {
|
|
|
105
111
|
|
|
106
112
|
const fnCall = params[ params.length - 1 ]( inputs );
|
|
107
113
|
|
|
108
|
-
properties.returnsNode = fnCall.context( { nodeLoop:
|
|
114
|
+
properties.returnsNode = fnCall.context( { nodeLoop: this, nodeBlock: builder.createBlock() } );
|
|
109
115
|
properties.stackNode = stack;
|
|
110
116
|
|
|
111
117
|
const baseParam = params[ 0 ];
|
|
@@ -114,7 +120,7 @@ class LoopNode extends Node {
|
|
|
114
120
|
|
|
115
121
|
const fnUpdateCall = Fn( baseParam.update )( inputs );
|
|
116
122
|
|
|
117
|
-
properties.updateNode = fnUpdateCall.context( { nodeLoop:
|
|
123
|
+
properties.updateNode = fnUpdateCall.context( { nodeLoop: this } );
|
|
118
124
|
|
|
119
125
|
}
|
|
120
126
|
|
|
@@ -144,13 +150,6 @@ class LoopNode extends Node {
|
|
|
144
150
|
|
|
145
151
|
this.getProperties( builder );
|
|
146
152
|
|
|
147
|
-
if ( builder.fnCall ) {
|
|
148
|
-
|
|
149
|
-
const shaderNodeData = builder.getDataFromNode( builder.fnCall.shaderNode );
|
|
150
|
-
shaderNodeData.hasLoop = true;
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
|
|
154
153
|
}
|
|
155
154
|
|
|
156
155
|
generate( builder ) {
|
|
@@ -315,10 +314,16 @@ class LoopNode extends Node {
|
|
|
315
314
|
|
|
316
315
|
}
|
|
317
316
|
|
|
317
|
+
const flowBlock = builder.flowBlock;
|
|
318
|
+
|
|
319
|
+
builder.flowBlock = { parent: flowBlock };
|
|
320
|
+
|
|
318
321
|
const stackSnippet = stackNode.build( builder, 'void' );
|
|
319
322
|
|
|
320
323
|
properties.returnsNode.build( builder, 'void' );
|
|
321
324
|
|
|
325
|
+
builder.flowBlock = flowBlock;
|
|
326
|
+
|
|
322
327
|
builder.removeFlowTab().addFlowCode( '\n' + builder.tab + stackSnippet );
|
|
323
328
|
|
|
324
329
|
for ( let i = 0, l = params.length - 1; i < l; i ++ ) {
|
|
@@ -50,6 +50,24 @@ class MemberNode extends Node {
|
|
|
50
50
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
isCacheable( /*builder*/ ) {
|
|
54
|
+
|
|
55
|
+
return false;
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Returns the scope of the struct so assignments to members
|
|
61
|
+
* mark the underlying value as mutable.
|
|
62
|
+
*
|
|
63
|
+
* @return {Node} The scope of the node.
|
|
64
|
+
*/
|
|
65
|
+
getScope() {
|
|
66
|
+
|
|
67
|
+
return this.structNode.getScope();
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
|
|
53
71
|
hasMember( builder ) {
|
|
54
72
|
|
|
55
73
|
if ( this.structNode.isMemberNode ) {
|
|
@@ -4,6 +4,21 @@ import { textureSize } from '../accessors/TextureSizeNode.js';
|
|
|
4
4
|
import { textureLoad } from '../accessors/TextureNode.js';
|
|
5
5
|
import { WebGPUCoordinateSystem } from '../../constants.js';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Returns `true` if the given depth value belongs to the background, i.e. the cleared
|
|
9
|
+
* far plane. Takes the renderer's reversed depth buffer into account.
|
|
10
|
+
*
|
|
11
|
+
* @tsl
|
|
12
|
+
* @function
|
|
13
|
+
* @param {Node<float>} depth - The depth value.
|
|
14
|
+
* @return {Node<bool>} Whether the depth value belongs to the background.
|
|
15
|
+
*/
|
|
16
|
+
export const isBackgroundDepth = /*@__PURE__*/ Fn( ( [ depth ], builder ) => {
|
|
17
|
+
|
|
18
|
+
return builder.renderer.reversedDepthBuffer === true ? depth.lessThanEqual( 0.0 ) : depth.greaterThanEqual( 1.0 );
|
|
19
|
+
|
|
20
|
+
} );
|
|
21
|
+
|
|
7
22
|
/**
|
|
8
23
|
* Computes a position in view space based on a fragment's screen position expressed as uv coordinates, the fragments
|
|
9
24
|
* depth value and the camera's inverse projection matrix.
|
|
@@ -19,7 +34,7 @@ export const getViewPosition = /*@__PURE__*/ Fn( ( [ screenPosition, depth, proj
|
|
|
19
34
|
|
|
20
35
|
let clipSpacePosition;
|
|
21
36
|
|
|
22
|
-
if ( builder.renderer.coordinateSystem === WebGPUCoordinateSystem ) {
|
|
37
|
+
if ( builder.renderer.coordinateSystem === WebGPUCoordinateSystem || builder.renderer.reversedDepthBuffer === true ) {
|
|
23
38
|
|
|
24
39
|
screenPosition = vec2( screenPosition.x, screenPosition.y.oneMinus() ).mul( 2.0 ).sub( 1.0 );
|
|
25
40
|
clipSpacePosition = vec4( vec3( screenPosition, depth ), 1.0 );
|
|
@@ -52,7 +67,7 @@ export const getScreenPosition = /*@__PURE__*/ Fn( ( [ viewPosition, projectionM
|
|
|
52
67
|
const sampleUv = sampleClipPos.xy.div( sampleClipPos.w ).mul( 0.5 ).add( 0.5 ).toVar();
|
|
53
68
|
return vec2( sampleUv.x, sampleUv.y.oneMinus() );
|
|
54
69
|
|
|
55
|
-
} );
|
|
70
|
+
}, { viewPosition: 'vec3', projectionMatrix: 'mat4', return: 'vec2' } );
|
|
56
71
|
|
|
57
72
|
/**
|
|
58
73
|
* Converts a clip-space position into a screen position expressed as uv coordinates.
|
|
@@ -67,13 +82,7 @@ export const getScreenPositionFromClip = /*@__PURE__*/ Fn( ( [ clipPosition ] )
|
|
|
67
82
|
const screen = clipPosition.xy.div( clipPosition.w ).mul( 0.5 ).add( 0.5 ).toVar();
|
|
68
83
|
return vec2( screen.x, screen.y.oneMinus() );
|
|
69
84
|
|
|
70
|
-
} )
|
|
71
|
-
name: 'getScreenPositionFromClip',
|
|
72
|
-
type: 'vec2',
|
|
73
|
-
inputs: [
|
|
74
|
-
{ name: 'clipPosition', type: 'vec4' }
|
|
75
|
-
]
|
|
76
|
-
} );
|
|
85
|
+
}, { clipPosition: 'vec4', return: 'vec2' } );
|
|
77
86
|
|
|
78
87
|
/**
|
|
79
88
|
* Computes a normal vector based on depth data. Can be used as a fallback when no normal render
|
|
@@ -135,13 +144,7 @@ export const interleavedGradientNoise = /*@__PURE__*/ Fn( ( [ position ] ) => {
|
|
|
135
144
|
|
|
136
145
|
return fract( float( 52.9829189 ).mul( fract( dot( position, vec2( 0.06711056, 0.00583715 ) ) ) ) );
|
|
137
146
|
|
|
138
|
-
} )
|
|
139
|
-
name: 'interleavedGradientNoise',
|
|
140
|
-
type: 'float',
|
|
141
|
-
inputs: [
|
|
142
|
-
{ name: 'position', type: 'vec2' }
|
|
143
|
-
]
|
|
144
|
-
} );
|
|
147
|
+
}, { position: 'vec2', return: 'float' } );
|
|
145
148
|
|
|
146
149
|
/**
|
|
147
150
|
* Vogel disk sampling for uniform circular distribution.
|
|
@@ -164,12 +167,4 @@ export const vogelDiskSample = /*@__PURE__*/ Fn( ( [ sampleIndex, samplesCount,
|
|
|
164
167
|
const theta = float( sampleIndex ).mul( goldenAngle ).add( phi );
|
|
165
168
|
return vec2( cos( theta ), sin( theta ) ).mul( r );
|
|
166
169
|
|
|
167
|
-
} )
|
|
168
|
-
name: 'vogelDiskSample',
|
|
169
|
-
type: 'vec2',
|
|
170
|
-
inputs: [
|
|
171
|
-
{ name: 'sampleIndex', type: 'int' },
|
|
172
|
-
{ name: 'samplesCount', type: 'int' },
|
|
173
|
-
{ name: 'phi', type: 'float' }
|
|
174
|
-
]
|
|
175
|
-
} );
|
|
170
|
+
}, { sampleIndex: 'int', samplesCount: 'int', phi: 'float', return: 'vec2' } );
|
|
@@ -296,6 +296,8 @@ class RTTNode extends TextureNode {
|
|
|
296
296
|
|
|
297
297
|
resetRendererState( renderer, this._rendererState );
|
|
298
298
|
|
|
299
|
+
renderer.setClearColor( this._rendererState.clearColor, this._rendererState.clearAlpha ); // keep clear color/alpha
|
|
300
|
+
|
|
299
301
|
renderer.setRenderTarget( this.renderTarget );
|
|
300
302
|
|
|
301
303
|
this._quadMesh.render( renderer );
|
|
@@ -337,6 +337,12 @@ class ReflectorBaseNode extends Node {
|
|
|
337
337
|
|
|
338
338
|
}
|
|
339
339
|
|
|
340
|
+
isCacheable( /*builder*/ ) {
|
|
341
|
+
|
|
342
|
+
return false;
|
|
343
|
+
|
|
344
|
+
}
|
|
345
|
+
|
|
340
346
|
/**
|
|
341
347
|
* Updates the resolution of the internal render target.
|
|
342
348
|
*
|
|
@@ -436,6 +442,19 @@ class ReflectorBaseNode extends Node {
|
|
|
436
442
|
|
|
437
443
|
}
|
|
438
444
|
|
|
445
|
+
/**
|
|
446
|
+
* Uses the virtual camera of the current camera as the update reference so
|
|
447
|
+
* the reflection is updated for each camera that renders the reflector.
|
|
448
|
+
*
|
|
449
|
+
* @param {(NodeFrame|NodeBuilder)} state - The current state.
|
|
450
|
+
* @return {Camera} The virtual camera.
|
|
451
|
+
*/
|
|
452
|
+
updateReference( state ) {
|
|
453
|
+
|
|
454
|
+
return this.getVirtualCamera( state.camera );
|
|
455
|
+
|
|
456
|
+
}
|
|
457
|
+
|
|
439
458
|
updateBefore( frame ) {
|
|
440
459
|
|
|
441
460
|
if ( this.bounces === false && _inReflector ) return false;
|
|
@@ -511,6 +530,11 @@ class ReflectorBaseNode extends Node {
|
|
|
511
530
|
virtualCamera.updateMatrixWorld();
|
|
512
531
|
virtualCamera.projectionMatrix.copy( camera.projectionMatrix );
|
|
513
532
|
|
|
533
|
+
// The reflection is mirrored horizontally, so the view offset must be mirrored as well.
|
|
534
|
+
|
|
535
|
+
virtualCamera.projectionMatrix.elements[ 8 ] *= - 1;
|
|
536
|
+
virtualCamera.projectionMatrix.elements[ 12 ] *= - 1;
|
|
537
|
+
|
|
514
538
|
// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
|
|
515
539
|
// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
|
|
516
540
|
_reflectorPlane.setFromNormalAndCoplanarPoint( _normal, _reflectorWorldPosition );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { nodeProxy, vec4, mat2, mat4 } from '../tsl/TSLBase.js';
|
|
3
3
|
import { cos, sin } from '../math/MathNode.js';
|
|
4
4
|
import { hashString } from '../core/NodeUtils.js';
|
|
@@ -6,9 +6,9 @@ import { hashString } from '../core/NodeUtils.js';
|
|
|
6
6
|
/**
|
|
7
7
|
* Applies a rotation to the given position node.
|
|
8
8
|
*
|
|
9
|
-
* @augments
|
|
9
|
+
* @augments Node
|
|
10
10
|
*/
|
|
11
|
-
class RotateNode extends
|
|
11
|
+
class RotateNode extends Node {
|
|
12
12
|
|
|
13
13
|
static get type() {
|
|
14
14
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { vectorComponents } from '../core/constants.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -10,9 +10,9 @@ import { vectorComponents } from '../core/constants.js';
|
|
|
10
10
|
* materialLine.colorNode = color( 0, 0, 0 ).setR( float( 1 ) );
|
|
11
11
|
* ```
|
|
12
12
|
*
|
|
13
|
-
* @augments
|
|
13
|
+
* @augments Node
|
|
14
14
|
*/
|
|
15
|
-
class SetNode extends
|
|
15
|
+
class SetNode extends Node {
|
|
16
16
|
|
|
17
17
|
static get type() {
|
|
18
18
|
|
|
@@ -43,7 +43,7 @@ export const rotateUV = /*@__PURE__*/ Fn( ( [ uv, rotation, center = vec2( 0.5 )
|
|
|
43
43
|
|
|
44
44
|
return rotate( uv.sub( center ), rotation ).add( center );
|
|
45
45
|
|
|
46
|
-
} );
|
|
46
|
+
}, { uv: 'vec2', rotation: 'float', center: 'vec2', return: 'vec2' } );
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* Applies a spherical warping effect to the given uv coordinates.
|
|
@@ -64,4 +64,4 @@ export const spherizeUV = /*@__PURE__*/ Fn( ( [ uv, strength, center = vec2( 0.5
|
|
|
64
64
|
|
|
65
65
|
return uv.add( delta.mul( deltaOffset ) );
|
|
66
66
|
|
|
67
|
-
} );
|
|
67
|
+
}, { uv: 'vec2', strength: 'float', center: 'vec2', return: 'vec2' } );
|
|
@@ -84,6 +84,7 @@ const _frustumArray = /*@__PURE__*/ new FrustumArray();
|
|
|
84
84
|
const _box = /*@__PURE__*/ new Box3();
|
|
85
85
|
const _sphere = /*@__PURE__*/ new Sphere();
|
|
86
86
|
const _vector = /*@__PURE__*/ new Vector3();
|
|
87
|
+
const _cameraPosition = /*@__PURE__*/ new Vector3();
|
|
87
88
|
const _forward = /*@__PURE__*/ new Vector3();
|
|
88
89
|
const _temp = /*@__PURE__*/ new Vector3();
|
|
89
90
|
const _renderList = /*@__PURE__*/ new MultiDrawRenderList();
|
|
@@ -177,6 +178,10 @@ function copyArrayContents( src, target ) {
|
|
|
177
178
|
* scene.add( batchedMesh );
|
|
178
179
|
* ```
|
|
179
180
|
*
|
|
181
|
+
* The first geometry added defines the layout of the batch. All subsequent geometries must
|
|
182
|
+
* match its index usage and provide its attributes with the same itemSize and normalized
|
|
183
|
+
* values. Additional attributes are ignored.
|
|
184
|
+
*
|
|
180
185
|
* @augments Mesh
|
|
181
186
|
*/
|
|
182
187
|
class BatchedMesh extends Mesh {
|
|
@@ -274,11 +279,20 @@ class BatchedMesh extends Mesh {
|
|
|
274
279
|
this._multiDrawCount = 0;
|
|
275
280
|
this._multiDrawBytesPerElement = 1;
|
|
276
281
|
|
|
282
|
+
// buffers for instanced draws, consecutive draws with the same range are merged
|
|
283
|
+
this._mergedDrawCounts = new Int32Array( maxInstanceCount );
|
|
284
|
+
this._mergedDrawStarts = new Int32Array( maxInstanceCount );
|
|
285
|
+
this._mergedDrawInstanceCounts = new Int32Array( maxInstanceCount );
|
|
286
|
+
this._mergedDrawCount = 0;
|
|
287
|
+
|
|
277
288
|
// Local matrix per geometry by using data texture
|
|
278
289
|
this._matricesTexture = null;
|
|
279
290
|
this._indirectTexture = null;
|
|
280
291
|
this._colorsTexture = null;
|
|
281
292
|
|
|
293
|
+
// previous frame matrices for motion vectors, created by the renderer
|
|
294
|
+
this._previousMatricesTexture = null;
|
|
295
|
+
|
|
282
296
|
this._initMatricesTexture();
|
|
283
297
|
this._initIndirectTexture();
|
|
284
298
|
|
|
@@ -437,7 +451,7 @@ class BatchedMesh extends Mesh {
|
|
|
437
451
|
const dstAttribute = batchGeometry.getAttribute( attributeName );
|
|
438
452
|
if ( srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized ) {
|
|
439
453
|
|
|
440
|
-
throw new Error(
|
|
454
|
+
throw new Error( `THREE.BatchedMesh: Added geometry attribute "${ attributeName }" has an inconsistent itemSize or normalized value.` );
|
|
441
455
|
|
|
442
456
|
}
|
|
443
457
|
|
|
@@ -494,7 +508,7 @@ class BatchedMesh extends Mesh {
|
|
|
494
508
|
/**
|
|
495
509
|
* Computes the bounding box, updating {@link BatchedMesh#boundingBox}.
|
|
496
510
|
* Bounding boxes aren't computed by default. They need to be explicitly computed,
|
|
497
|
-
* otherwise they are `null`.
|
|
511
|
+
* otherwise they are `null`. Must be recomputed when instances change.
|
|
498
512
|
*/
|
|
499
513
|
computeBoundingBox() {
|
|
500
514
|
|
|
@@ -523,8 +537,8 @@ class BatchedMesh extends Mesh {
|
|
|
523
537
|
|
|
524
538
|
/**
|
|
525
539
|
* Computes the bounding sphere, updating {@link BatchedMesh#boundingSphere}.
|
|
526
|
-
*
|
|
527
|
-
*
|
|
540
|
+
* The engine computes the bounding sphere once when it is needed. Must be
|
|
541
|
+
* recomputed when instances change.
|
|
528
542
|
*/
|
|
529
543
|
computeBoundingSphere() {
|
|
530
544
|
|
|
@@ -1226,7 +1240,7 @@ class BatchedMesh extends Mesh {
|
|
|
1226
1240
|
|
|
1227
1241
|
/**
|
|
1228
1242
|
* Get the range representing the subset of triangles related to the attached geometry,
|
|
1229
|
-
* indicating the starting offset and count, or
|
|
1243
|
+
* indicating the starting offset and count, or throws an error if invalid.
|
|
1230
1244
|
*
|
|
1231
1245
|
* @param {number} geometryId - The id of the geometry to get the range of.
|
|
1232
1246
|
* @param {Object} [target] - The target object that is used to store the method's result.
|
|
@@ -1291,6 +1305,17 @@ class BatchedMesh extends Mesh {
|
|
|
1291
1305
|
|
|
1292
1306
|
this._multiDrawCounts = multiDrawCounts;
|
|
1293
1307
|
this._multiDrawStarts = multiDrawStarts;
|
|
1308
|
+
|
|
1309
|
+
const mergedDrawCounts = new Int32Array( maxInstanceCount );
|
|
1310
|
+
const mergedDrawStarts = new Int32Array( maxInstanceCount );
|
|
1311
|
+
const mergedDrawInstanceCounts = new Int32Array( maxInstanceCount );
|
|
1312
|
+
copyArrayContents( this._mergedDrawCounts, mergedDrawCounts );
|
|
1313
|
+
copyArrayContents( this._mergedDrawStarts, mergedDrawStarts );
|
|
1314
|
+
copyArrayContents( this._mergedDrawInstanceCounts, mergedDrawInstanceCounts );
|
|
1315
|
+
|
|
1316
|
+
this._mergedDrawCounts = mergedDrawCounts;
|
|
1317
|
+
this._mergedDrawStarts = mergedDrawStarts;
|
|
1318
|
+
this._mergedDrawInstanceCounts = mergedDrawInstanceCounts;
|
|
1294
1319
|
this._maxInstanceCount = maxInstanceCount;
|
|
1295
1320
|
|
|
1296
1321
|
// update texture data for instance sampling
|
|
@@ -1314,6 +1339,13 @@ class BatchedMesh extends Mesh {
|
|
|
1314
1339
|
|
|
1315
1340
|
}
|
|
1316
1341
|
|
|
1342
|
+
if ( this._previousMatricesTexture !== null ) {
|
|
1343
|
+
|
|
1344
|
+
this._previousMatricesTexture.dispose();
|
|
1345
|
+
this._previousMatricesTexture = null;
|
|
1346
|
+
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1317
1349
|
}
|
|
1318
1350
|
|
|
1319
1351
|
/**
|
|
@@ -1331,7 +1363,7 @@ class BatchedMesh extends Mesh {
|
|
|
1331
1363
|
const requiredVertexLength = Math.max( ...validRanges.map( range => range.vertexStart + range.reservedVertexCount ) );
|
|
1332
1364
|
if ( requiredVertexLength > maxVertexCount ) {
|
|
1333
1365
|
|
|
1334
|
-
throw new Error( `THREE.BatchedMesh: Geometry vertex values are being used outside the range ${
|
|
1366
|
+
throw new Error( `THREE.BatchedMesh: Geometry vertex values are being used outside the range ${ maxVertexCount }. Cannot shrink further.` );
|
|
1335
1367
|
|
|
1336
1368
|
}
|
|
1337
1369
|
|
|
@@ -1379,6 +1411,8 @@ class BatchedMesh extends Mesh {
|
|
|
1379
1411
|
|
|
1380
1412
|
}
|
|
1381
1413
|
|
|
1414
|
+
this._visibilityChanged = true;
|
|
1415
|
+
|
|
1382
1416
|
}
|
|
1383
1417
|
|
|
1384
1418
|
raycast( raycaster, intersects ) {
|
|
@@ -1476,6 +1510,9 @@ class BatchedMesh extends Mesh {
|
|
|
1476
1510
|
this._multiDrawCounts = source._multiDrawCounts.slice();
|
|
1477
1511
|
this._multiDrawStarts = source._multiDrawStarts.slice();
|
|
1478
1512
|
this._multiDrawBytesPerElement = source._multiDrawBytesPerElement;
|
|
1513
|
+
this._mergedDrawCounts = source._mergedDrawCounts.slice();
|
|
1514
|
+
this._mergedDrawStarts = source._mergedDrawStarts.slice();
|
|
1515
|
+
this._mergedDrawInstanceCounts = source._mergedDrawInstanceCounts.slice();
|
|
1479
1516
|
|
|
1480
1517
|
this._indirectTexture = source._indirectTexture.clone();
|
|
1481
1518
|
this._indirectTexture.image.data = this._indirectTexture.image.data.slice();
|
|
@@ -1483,11 +1520,15 @@ class BatchedMesh extends Mesh {
|
|
|
1483
1520
|
this._matricesTexture = source._matricesTexture.clone();
|
|
1484
1521
|
this._matricesTexture.image.data = this._matricesTexture.image.data.slice();
|
|
1485
1522
|
|
|
1486
|
-
if (
|
|
1523
|
+
if ( source._colorsTexture !== null ) {
|
|
1487
1524
|
|
|
1488
1525
|
this._colorsTexture = source._colorsTexture.clone();
|
|
1489
1526
|
this._colorsTexture.image.data = this._colorsTexture.image.data.slice();
|
|
1490
1527
|
|
|
1528
|
+
} else {
|
|
1529
|
+
|
|
1530
|
+
this._colorsTexture = null;
|
|
1531
|
+
|
|
1491
1532
|
}
|
|
1492
1533
|
|
|
1493
1534
|
return this;
|
|
@@ -1518,9 +1559,26 @@ class BatchedMesh extends Mesh {
|
|
|
1518
1559
|
|
|
1519
1560
|
}
|
|
1520
1561
|
|
|
1562
|
+
if ( this._previousMatricesTexture !== null ) {
|
|
1563
|
+
|
|
1564
|
+
this._previousMatricesTexture.dispose();
|
|
1565
|
+
this._previousMatricesTexture = null;
|
|
1566
|
+
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1521
1569
|
}
|
|
1522
1570
|
|
|
1523
|
-
|
|
1571
|
+
/**
|
|
1572
|
+
* Updates the draw parameters for the next draw. Depending on {@link BatchedMesh#perObjectFrustumCulled}
|
|
1573
|
+
* and {@link BatchedMesh#sortObjects}, this includes per-object frustum culling and sorting.
|
|
1574
|
+
*
|
|
1575
|
+
* @private
|
|
1576
|
+
* @param {Camera} camera - The camera of the next draw.
|
|
1577
|
+
* @param {BufferGeometry} geometry - The batch's geometry.
|
|
1578
|
+
* @param {Material} material - The material of the next draw.
|
|
1579
|
+
* @param {('multiDraw'|'merged')} [drawFormat='multiDraw'] - The format of the draw parameters.
|
|
1580
|
+
*/
|
|
1581
|
+
_updateDrawParameters( camera, geometry, material, drawFormat = 'multiDraw' ) {
|
|
1524
1582
|
|
|
1525
1583
|
// if visibility has not changed and frustum culling and object sorting is not required
|
|
1526
1584
|
// then skip iterating over all items
|
|
@@ -1550,6 +1608,9 @@ class BatchedMesh extends Mesh {
|
|
|
1550
1608
|
const instanceInfo = this._instanceInfo;
|
|
1551
1609
|
const multiDrawStarts = this._multiDrawStarts;
|
|
1552
1610
|
const multiDrawCounts = this._multiDrawCounts;
|
|
1611
|
+
const mergedDrawStarts = this._mergedDrawStarts;
|
|
1612
|
+
const mergedDrawCounts = this._mergedDrawCounts;
|
|
1613
|
+
const mergedDrawInstanceCounts = this._mergedDrawInstanceCounts;
|
|
1553
1614
|
const geometryInfoList = this._geometryInfo;
|
|
1554
1615
|
const perObjectFrustumCulled = this.perObjectFrustumCulled;
|
|
1555
1616
|
const indirectTexture = this._indirectTexture;
|
|
@@ -1580,11 +1641,12 @@ class BatchedMesh extends Mesh {
|
|
|
1580
1641
|
}
|
|
1581
1642
|
|
|
1582
1643
|
let multiDrawCount = 0;
|
|
1644
|
+
let mergedDrawCount = 0;
|
|
1583
1645
|
if ( this.sortObjects ) {
|
|
1584
1646
|
|
|
1585
1647
|
// get the camera position in the local frame
|
|
1586
1648
|
_matrix.copy( this.matrixWorld ).invert();
|
|
1587
|
-
|
|
1649
|
+
_cameraPosition.setFromMatrixPosition( camera.matrixWorld ).applyMatrix4( _matrix );
|
|
1588
1650
|
_forward.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ).transformDirection( _matrix );
|
|
1589
1651
|
|
|
1590
1652
|
for ( let i = 0, l = instanceInfo.length; i < l; i ++ ) {
|
|
@@ -1609,7 +1671,7 @@ class BatchedMesh extends Mesh {
|
|
|
1609
1671
|
|
|
1610
1672
|
// get the distance from camera used for sorting
|
|
1611
1673
|
const geometryInfo = geometryInfoList[ geometryId ];
|
|
1612
|
-
const z = _temp.subVectors( _sphere.center,
|
|
1674
|
+
const z = _temp.subVectors( _sphere.center, _cameraPosition ).dot( _forward );
|
|
1613
1675
|
_renderList.push( geometryInfo.start, geometryInfo.count, z, i );
|
|
1614
1676
|
|
|
1615
1677
|
}
|
|
@@ -1634,8 +1696,31 @@ class BatchedMesh extends Mesh {
|
|
|
1634
1696
|
for ( let i = 0, l = list.length; i < l; i ++ ) {
|
|
1635
1697
|
|
|
1636
1698
|
const item = list[ i ];
|
|
1637
|
-
|
|
1638
|
-
|
|
1699
|
+
const start = item.start * bytesPerElement * multiDrawMultiplier;
|
|
1700
|
+
const count = item.count * multiDrawMultiplier;
|
|
1701
|
+
|
|
1702
|
+
if ( drawFormat === 'merged' ) {
|
|
1703
|
+
|
|
1704
|
+
if ( mergedDrawCount > 0 && mergedDrawStarts[ mergedDrawCount - 1 ] === start && mergedDrawCounts[ mergedDrawCount - 1 ] === count ) {
|
|
1705
|
+
|
|
1706
|
+
mergedDrawInstanceCounts[ mergedDrawCount - 1 ] ++;
|
|
1707
|
+
|
|
1708
|
+
} else {
|
|
1709
|
+
|
|
1710
|
+
mergedDrawStarts[ mergedDrawCount ] = start;
|
|
1711
|
+
mergedDrawCounts[ mergedDrawCount ] = count;
|
|
1712
|
+
mergedDrawInstanceCounts[ mergedDrawCount ] = 1;
|
|
1713
|
+
mergedDrawCount ++;
|
|
1714
|
+
|
|
1715
|
+
}
|
|
1716
|
+
|
|
1717
|
+
} else {
|
|
1718
|
+
|
|
1719
|
+
multiDrawStarts[ multiDrawCount ] = start;
|
|
1720
|
+
multiDrawCounts[ multiDrawCount ] = count;
|
|
1721
|
+
|
|
1722
|
+
}
|
|
1723
|
+
|
|
1639
1724
|
indirectArray[ multiDrawCount ] = item.index;
|
|
1640
1725
|
multiDrawCount ++;
|
|
1641
1726
|
|
|
@@ -1665,8 +1750,31 @@ class BatchedMesh extends Mesh {
|
|
|
1665
1750
|
if ( ! culled ) {
|
|
1666
1751
|
|
|
1667
1752
|
const geometryInfo = geometryInfoList[ geometryId ];
|
|
1668
|
-
|
|
1669
|
-
|
|
1753
|
+
const start = geometryInfo.start * bytesPerElement * multiDrawMultiplier;
|
|
1754
|
+
const count = geometryInfo.count * multiDrawMultiplier;
|
|
1755
|
+
|
|
1756
|
+
if ( drawFormat === 'merged' ) {
|
|
1757
|
+
|
|
1758
|
+
if ( mergedDrawCount > 0 && mergedDrawStarts[ mergedDrawCount - 1 ] === start && mergedDrawCounts[ mergedDrawCount - 1 ] === count ) {
|
|
1759
|
+
|
|
1760
|
+
mergedDrawInstanceCounts[ mergedDrawCount - 1 ] ++;
|
|
1761
|
+
|
|
1762
|
+
} else {
|
|
1763
|
+
|
|
1764
|
+
mergedDrawStarts[ mergedDrawCount ] = start;
|
|
1765
|
+
mergedDrawCounts[ mergedDrawCount ] = count;
|
|
1766
|
+
mergedDrawInstanceCounts[ mergedDrawCount ] = 1;
|
|
1767
|
+
mergedDrawCount ++;
|
|
1768
|
+
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1771
|
+
} else {
|
|
1772
|
+
|
|
1773
|
+
multiDrawStarts[ multiDrawCount ] = start;
|
|
1774
|
+
multiDrawCounts[ multiDrawCount ] = count;
|
|
1775
|
+
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1670
1778
|
indirectArray[ multiDrawCount ] = i;
|
|
1671
1779
|
multiDrawCount ++;
|
|
1672
1780
|
|
|
@@ -1680,14 +1788,37 @@ class BatchedMesh extends Mesh {
|
|
|
1680
1788
|
|
|
1681
1789
|
indirectTexture.needsUpdate = true;
|
|
1682
1790
|
this._multiDrawCount = multiDrawCount;
|
|
1791
|
+
this._mergedDrawCount = mergedDrawCount;
|
|
1683
1792
|
this._multiDrawBytesPerElement = bytesPerElement;
|
|
1684
1793
|
this._visibilityChanged = false;
|
|
1685
1794
|
|
|
1686
1795
|
}
|
|
1687
1796
|
|
|
1797
|
+
onBeforeRender( renderer, scene, camera, geometry, material/*, _group*/ ) {
|
|
1798
|
+
|
|
1799
|
+
if ( renderer.isWebGPURenderer === true ) {
|
|
1800
|
+
|
|
1801
|
+
if ( this._visibilityChanged || this.perObjectFrustumCulled || this.sortObjects ) {
|
|
1802
|
+
|
|
1803
|
+
this._indirectTexture.needsUpdate = true;
|
|
1804
|
+
|
|
1805
|
+
}
|
|
1806
|
+
|
|
1807
|
+
} else {
|
|
1808
|
+
|
|
1809
|
+
this._updateDrawParameters( camera, geometry, material );
|
|
1810
|
+
|
|
1811
|
+
}
|
|
1812
|
+
|
|
1813
|
+
}
|
|
1814
|
+
|
|
1688
1815
|
onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial/* , group */ ) {
|
|
1689
1816
|
|
|
1690
|
-
|
|
1817
|
+
if ( renderer.isWebGPURenderer !== true ) {
|
|
1818
|
+
|
|
1819
|
+
this._updateDrawParameters( shadowCamera, geometry, depthMaterial );
|
|
1820
|
+
|
|
1821
|
+
}
|
|
1691
1822
|
|
|
1692
1823
|
}
|
|
1693
1824
|
|
|
@@ -185,13 +185,13 @@ class InstancedMesh extends Mesh {
|
|
|
185
185
|
|
|
186
186
|
this.instanceMatrix.copy( source.instanceMatrix );
|
|
187
187
|
|
|
188
|
-
|
|
189
|
-
|
|
188
|
+
this.morphTexture = source.morphTexture !== null ? source.morphTexture.clone() : null;
|
|
189
|
+
this.instanceColor = source.instanceColor !== null ? source.instanceColor.clone() : null;
|
|
190
190
|
|
|
191
191
|
this.count = source.count;
|
|
192
192
|
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
this.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null;
|
|
194
|
+
this.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null;
|
|
195
195
|
|
|
196
196
|
return this;
|
|
197
197
|
|
|
@@ -397,6 +397,14 @@ class InstancedMesh extends Mesh {
|
|
|
397
397
|
|
|
398
398
|
super.dispose();
|
|
399
399
|
|
|
400
|
+
this.instanceMatrix.dispose();
|
|
401
|
+
|
|
402
|
+
if ( this.instanceColor !== null ) {
|
|
403
|
+
|
|
404
|
+
this.instanceColor.dispose();
|
|
405
|
+
|
|
406
|
+
}
|
|
407
|
+
|
|
400
408
|
if ( this.morphTexture !== null ) {
|
|
401
409
|
|
|
402
410
|
this.morphTexture.dispose();
|
package/src/objects/Line.js
CHANGED
|
@@ -104,6 +104,26 @@ class Line extends Object3D {
|
|
|
104
104
|
|
|
105
105
|
super.copy( source, recursive );
|
|
106
106
|
|
|
107
|
+
if ( source.morphTargetInfluences !== undefined ) {
|
|
108
|
+
|
|
109
|
+
this.morphTargetInfluences = source.morphTargetInfluences.slice();
|
|
110
|
+
|
|
111
|
+
} else {
|
|
112
|
+
|
|
113
|
+
this.morphTargetInfluences = undefined;
|
|
114
|
+
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if ( source.morphTargetDictionary !== undefined ) {
|
|
118
|
+
|
|
119
|
+
this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );
|
|
120
|
+
|
|
121
|
+
} else {
|
|
122
|
+
|
|
123
|
+
this.morphTargetDictionary = undefined;
|
|
124
|
+
|
|
125
|
+
}
|
|
126
|
+
|
|
107
127
|
this.material = Array.isArray( source.material ) ? source.material.slice() : source.material;
|
|
108
128
|
this.geometry = source.geometry;
|
|
109
129
|
|