@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
|
@@ -15,10 +15,8 @@ class ProgrammableStage {
|
|
|
15
15
|
* @param {string} code - The shader code.
|
|
16
16
|
* @param {('vertex'|'fragment'|'compute')} stage - The type of stage.
|
|
17
17
|
* @param {string} name - The name of the shader.
|
|
18
|
-
* @param {?Array<Object>} [transforms=null] - The transforms (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
|
|
19
|
-
* @param {?Array<Object>} [attributes=null] - The attributes (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
|
|
20
18
|
*/
|
|
21
|
-
constructor( code, stage, name
|
|
19
|
+
constructor( code, stage, name ) {
|
|
22
20
|
|
|
23
21
|
/**
|
|
24
22
|
* The id of the programmable stage.
|
|
@@ -49,20 +47,6 @@ class ProgrammableStage {
|
|
|
49
47
|
*/
|
|
50
48
|
this.name = name;
|
|
51
49
|
|
|
52
|
-
/**
|
|
53
|
-
* The transforms (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
|
|
54
|
-
*
|
|
55
|
-
* @type {?Array<Object>}
|
|
56
|
-
*/
|
|
57
|
-
this.transforms = transforms;
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* The attributes (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
|
|
61
|
-
*
|
|
62
|
-
* @type {?Array<Object>}
|
|
63
|
-
*/
|
|
64
|
-
this.attributes = attributes;
|
|
65
|
-
|
|
66
50
|
/**
|
|
67
51
|
* How often the programmable stage is currently in use.
|
|
68
52
|
*
|
|
@@ -25,6 +25,27 @@ class RenderContext {
|
|
|
25
25
|
*/
|
|
26
26
|
this.id = _id ++;
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Identifies the attachment and MRT configuration of the context.
|
|
30
|
+
* Unlike the ID, it is the same for the contexts of all renderer
|
|
31
|
+
* call depths, so render objects use it in their cache key. That way,
|
|
32
|
+
* the shaders built by `compileAsync()` are also used by nested render
|
|
33
|
+
* calls like the scene pass of a render pipeline.
|
|
34
|
+
*
|
|
35
|
+
* @type {string}
|
|
36
|
+
* @default ''
|
|
37
|
+
*/
|
|
38
|
+
this.stateKey = '';
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Cached sub-camera frustums shared by render-list and backend culling.
|
|
42
|
+
* Kept per context so nested renders do not overwrite the active frustums.
|
|
43
|
+
*
|
|
44
|
+
* @type {?FrustumArray}
|
|
45
|
+
* @default null
|
|
46
|
+
*/
|
|
47
|
+
this.frustumArray = null;
|
|
48
|
+
|
|
28
49
|
/**
|
|
29
50
|
* The MRT configuration.
|
|
30
51
|
*
|
|
@@ -36,9 +36,10 @@ class RenderContexts {
|
|
|
36
36
|
* @param {?RenderTarget} [renderTarget=null] - The active render target.
|
|
37
37
|
* @param {?MRTNode} [mrt=null] - The MRT configuration
|
|
38
38
|
* @param {?number} [callDepth=0] - The call depth of the renderer.
|
|
39
|
+
* @param {?Camera} [camera=null] - The camera of the render call.
|
|
39
40
|
* @return {RenderContext} The render context.
|
|
40
41
|
*/
|
|
41
|
-
get( renderTarget = null, mrt = null, callDepth = 0 ) {
|
|
42
|
+
get( renderTarget = null, mrt = null, callDepth = 0, camera = null ) {
|
|
42
43
|
|
|
43
44
|
//
|
|
44
45
|
|
|
@@ -50,8 +51,8 @@ class RenderContexts {
|
|
|
50
51
|
|
|
51
52
|
} else {
|
|
52
53
|
|
|
53
|
-
const format = renderTarget.texture
|
|
54
|
-
const type = renderTarget.texture
|
|
54
|
+
const format = renderTarget.texture?.format;
|
|
55
|
+
const type = renderTarget.texture?.type;
|
|
55
56
|
const count = renderTarget.textures.length;
|
|
56
57
|
|
|
57
58
|
attachmentState = `${ count }:${ format }:${ type }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
|
|
@@ -64,7 +65,14 @@ class RenderContexts {
|
|
|
64
65
|
|
|
65
66
|
//
|
|
66
67
|
|
|
67
|
-
|
|
68
|
+
// materials check the camera type at build time, so camera types must not share render objects
|
|
69
|
+
|
|
70
|
+
const cameraState = camera?.isOrthographicCamera === true ? 'orthographic' : 'perspective';
|
|
71
|
+
|
|
72
|
+
//
|
|
73
|
+
|
|
74
|
+
const stateKey = attachmentState + '-' + mrtState + '-' + cameraState;
|
|
75
|
+
const renderStateKey = stateKey + '-' + callDepth; // one render context per call depth keeps the bindings of nested renders separate
|
|
68
76
|
|
|
69
77
|
let renderState = this._renderContexts[ renderStateKey ];
|
|
70
78
|
|
|
@@ -72,6 +80,7 @@ class RenderContexts {
|
|
|
72
80
|
|
|
73
81
|
renderState = new RenderContext();
|
|
74
82
|
renderState.mrt = mrt;
|
|
83
|
+
renderState.stateKey = stateKey;
|
|
75
84
|
|
|
76
85
|
this._renderContexts[ renderStateKey ] = renderState;
|
|
77
86
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { hashArray, hashString } from '../../nodes/core/NodeUtils.js';
|
|
2
2
|
|
|
3
3
|
let _id = 0;
|
|
4
4
|
const _protoKeysCache = new WeakMap();
|
|
5
|
+
const _cacheKeyValues = [ 0, 0, 0, 0, 0 ];
|
|
6
|
+
const _enumProperties = [ 'side', 'blending', 'combine', 'normalMapType' ];
|
|
5
7
|
|
|
6
8
|
function getKeys( obj ) {
|
|
7
9
|
|
|
@@ -44,6 +46,21 @@ function getKeys( obj ) {
|
|
|
44
46
|
|
|
45
47
|
}
|
|
46
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Returns a key for the kind of the given instance data: none, attribute or storage.
|
|
51
|
+
*
|
|
52
|
+
* @private
|
|
53
|
+
* @param {?BufferAttribute} attribute - The instance data.
|
|
54
|
+
* @return {string} The key.
|
|
55
|
+
*/
|
|
56
|
+
function getInstanceDataKey( attribute ) {
|
|
57
|
+
|
|
58
|
+
if ( attribute === null || attribute === undefined ) return '-';
|
|
59
|
+
|
|
60
|
+
return attribute.isStorageInstancedBufferAttribute === true ? 's' : 'a';
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
47
64
|
/**
|
|
48
65
|
* A render object is the renderer's representation of single entity that gets drawn
|
|
49
66
|
* with a draw command. There is no unique mapping of render objects to 3D objects in the
|
|
@@ -154,6 +171,14 @@ class RenderObject {
|
|
|
154
171
|
*/
|
|
155
172
|
this.geometry = object.geometry;
|
|
156
173
|
|
|
174
|
+
/**
|
|
175
|
+
* The geometry's version. Incremented whenever the geometry is updated.
|
|
176
|
+
*
|
|
177
|
+
* @type {number}
|
|
178
|
+
* @default 0
|
|
179
|
+
*/
|
|
180
|
+
this.geometryVersion = 0;
|
|
181
|
+
|
|
157
182
|
/**
|
|
158
183
|
* The render object's version.
|
|
159
184
|
*
|
|
@@ -262,6 +287,13 @@ class RenderObject {
|
|
|
262
287
|
*/
|
|
263
288
|
this.initialCacheKey = this.getCacheKey();
|
|
264
289
|
|
|
290
|
+
/**
|
|
291
|
+
* The initial geometry cache key.
|
|
292
|
+
*
|
|
293
|
+
* @type {string}
|
|
294
|
+
*/
|
|
295
|
+
this.initialGeometryCacheKey = this.getGeometryCacheKey();
|
|
296
|
+
|
|
265
297
|
/**
|
|
266
298
|
* The node builder state.
|
|
267
299
|
*
|
|
@@ -299,6 +331,13 @@ class RenderObject {
|
|
|
299
331
|
*/
|
|
300
332
|
this._sourceMaterial = renderer._currentSourceMaterial;
|
|
301
333
|
|
|
334
|
+
/**
|
|
335
|
+
* The version of the source material this render object was validated against.
|
|
336
|
+
*
|
|
337
|
+
* @type {number}
|
|
338
|
+
*/
|
|
339
|
+
this.sourceMaterialVersion = this._sourceMaterial !== null ? this._sourceMaterial.version : 0;
|
|
340
|
+
|
|
302
341
|
/**
|
|
303
342
|
* An event listener which is defined by `RenderObjects`. It performs
|
|
304
343
|
* clean up tasks when `dispose()` on this render object.
|
|
@@ -336,6 +375,9 @@ class RenderObject {
|
|
|
336
375
|
*/
|
|
337
376
|
this.onGeometryDispose = () => {
|
|
338
377
|
|
|
378
|
+
this._geometries.deleteNodeAttributes( this );
|
|
379
|
+
this._geometries.deleteVertexState( this );
|
|
380
|
+
|
|
339
381
|
// clear geometry cache attributes
|
|
340
382
|
|
|
341
383
|
this.attributes = null;
|
|
@@ -355,10 +397,25 @@ class RenderObject {
|
|
|
355
397
|
|
|
356
398
|
};
|
|
357
399
|
|
|
400
|
+
/**
|
|
401
|
+
* An event listener which is executed when `dispose()` is called on
|
|
402
|
+
* the lights node of this render object, e.g. when the lighting system
|
|
403
|
+
* of the renderer is disposed.
|
|
404
|
+
*
|
|
405
|
+
* @method
|
|
406
|
+
*/
|
|
407
|
+
this.onLightsNodeDispose = () => {
|
|
408
|
+
|
|
409
|
+
this.dispose();
|
|
410
|
+
|
|
411
|
+
};
|
|
412
|
+
|
|
358
413
|
this.object.addEventListener( 'dispose', this.onObjectDispose );
|
|
359
414
|
this.material.addEventListener( 'dispose', this.onMaterialDispose );
|
|
360
415
|
this.geometry.addEventListener( 'dispose', this.onGeometryDispose );
|
|
361
416
|
|
|
417
|
+
this.lightsNode.addEventListener( 'dispose', this.onLightsNodeDispose );
|
|
418
|
+
|
|
362
419
|
if ( this._sourceMaterial !== null ) {
|
|
363
420
|
|
|
364
421
|
this._sourceMaterial.addEventListener( 'dispose', this.onMaterialDispose );
|
|
@@ -435,7 +492,7 @@ class RenderObject {
|
|
|
435
492
|
*/
|
|
436
493
|
getBindings() {
|
|
437
494
|
|
|
438
|
-
return this._bindings || ( this._bindings = this.getNodeBuilderState().createBindings() );
|
|
495
|
+
return this._bindings || ( this._bindings = this.getNodeBuilderState().createBindings( this.renderer._bindings, this.context ) );
|
|
439
496
|
|
|
440
497
|
}
|
|
441
498
|
|
|
@@ -499,6 +556,12 @@ class RenderObject {
|
|
|
499
556
|
*/
|
|
500
557
|
getChainArray() {
|
|
501
558
|
|
|
559
|
+
if ( this._sourceMaterial !== null ) {
|
|
560
|
+
|
|
561
|
+
return [ this.object, this.material, this.context, this.lightsNode, this._sourceMaterial ];
|
|
562
|
+
|
|
563
|
+
}
|
|
564
|
+
|
|
502
565
|
return [ this.object, this.material, this.context, this.lightsNode ];
|
|
503
566
|
|
|
504
567
|
}
|
|
@@ -511,10 +574,19 @@ class RenderObject {
|
|
|
511
574
|
*/
|
|
512
575
|
setGeometry( geometry ) {
|
|
513
576
|
|
|
577
|
+
// exchanging the geometry means we must move the dipose handler to the new geometry
|
|
578
|
+
|
|
579
|
+
this.geometry.removeEventListener( 'dispose', this.onGeometryDispose );
|
|
580
|
+
|
|
514
581
|
this.geometry = geometry;
|
|
582
|
+
|
|
583
|
+
this.geometry.addEventListener( 'dispose', this.onGeometryDispose );
|
|
584
|
+
|
|
515
585
|
this.attributes = null;
|
|
516
586
|
this.attributesId = null;
|
|
517
587
|
|
|
588
|
+
this.geometryVersion ++;
|
|
589
|
+
|
|
518
590
|
}
|
|
519
591
|
|
|
520
592
|
/**
|
|
@@ -542,7 +614,7 @@ class RenderObject {
|
|
|
542
614
|
if ( nodeAttribute.node && nodeAttribute.node.attribute ) {
|
|
543
615
|
|
|
544
616
|
// node attribute
|
|
545
|
-
attribute = nodeAttribute.node.
|
|
617
|
+
attribute = nodeAttribute.node.getObjectAttribute( this.object );
|
|
546
618
|
|
|
547
619
|
} else {
|
|
548
620
|
|
|
@@ -696,8 +768,6 @@ class RenderObject {
|
|
|
696
768
|
|
|
697
769
|
cacheKey += name + ',';
|
|
698
770
|
|
|
699
|
-
if ( attribute.data ) cacheKey += attribute.data.stride + ',';
|
|
700
|
-
if ( attribute.offset ) cacheKey += attribute.offset + ',';
|
|
701
771
|
if ( attribute.itemSize ) cacheKey += attribute.itemSize + ',';
|
|
702
772
|
if ( attribute.normalized ) cacheKey += 'n,';
|
|
703
773
|
|
|
@@ -723,12 +793,6 @@ class RenderObject {
|
|
|
723
793
|
|
|
724
794
|
}
|
|
725
795
|
|
|
726
|
-
if ( geometry.index ) {
|
|
727
|
-
|
|
728
|
-
cacheKey += 'index,';
|
|
729
|
-
|
|
730
|
-
}
|
|
731
|
-
|
|
732
796
|
return cacheKey;
|
|
733
797
|
|
|
734
798
|
}
|
|
@@ -742,13 +806,13 @@ class RenderObject {
|
|
|
742
806
|
*/
|
|
743
807
|
getMaterialCacheKey() {
|
|
744
808
|
|
|
745
|
-
const { object, material, renderer } = this;
|
|
809
|
+
const { object, material, renderer, scene } = this;
|
|
746
810
|
|
|
747
|
-
let cacheKey =
|
|
811
|
+
let cacheKey = this._nodes.getCustomProgramCacheKey( material, scene );
|
|
748
812
|
|
|
749
813
|
for ( const property of getKeys( material ) ) {
|
|
750
814
|
|
|
751
|
-
if ( /^(is[A-Z]|_)|^(visible|version|uuid|name|opacity|userData)$/.test( property ) ) continue;
|
|
815
|
+
if ( /^(is[A-Z]|_)|^(visible|version|uuid|name|opacity|userData|iridescenceThicknessRange)$/.test( property ) ) continue;
|
|
752
816
|
|
|
753
817
|
const value = material[ property ];
|
|
754
818
|
|
|
@@ -762,10 +826,9 @@ class RenderObject {
|
|
|
762
826
|
|
|
763
827
|
if ( type === 'number' ) {
|
|
764
828
|
|
|
765
|
-
if ( property
|
|
829
|
+
if ( _enumProperties.includes( property ) ) {
|
|
766
830
|
|
|
767
|
-
//
|
|
768
|
-
// generation, so its exact value must be preserved.
|
|
831
|
+
// retain enums since their exact value matters
|
|
769
832
|
|
|
770
833
|
valueKey = String( value );
|
|
771
834
|
|
|
@@ -784,6 +847,7 @@ class RenderObject {
|
|
|
784
847
|
if ( value.isTexture ) {
|
|
785
848
|
|
|
786
849
|
valueKey += value.mapping;
|
|
850
|
+
valueKey += value.channel;
|
|
787
851
|
|
|
788
852
|
// WebGPU must honor the sampler data because they are part of the bindings
|
|
789
853
|
|
|
@@ -843,7 +907,13 @@ class RenderObject {
|
|
|
843
907
|
|
|
844
908
|
}
|
|
845
909
|
|
|
846
|
-
if ( object.isInstancedMesh
|
|
910
|
+
if ( object.isInstancedMesh ) {
|
|
911
|
+
|
|
912
|
+
const { instanceMatrix, instanceColor, morphTexture } = object;
|
|
913
|
+
|
|
914
|
+
cacheKey += getInstanceDataKey( instanceMatrix ) + getInstanceDataKey( instanceColor ) + ( morphTexture !== null ? 'm' : '' ) + ',';
|
|
915
|
+
|
|
916
|
+
} else if ( object.count > 1 ) {
|
|
847
917
|
|
|
848
918
|
// TODO: https://github.com/mrdoob/three.js/pull/29066#issuecomment-2269400850
|
|
849
919
|
|
|
@@ -851,7 +921,7 @@ class RenderObject {
|
|
|
851
921
|
|
|
852
922
|
}
|
|
853
923
|
|
|
854
|
-
cacheKey += this.context.
|
|
924
|
+
cacheKey += this.context.stateKey + ',';
|
|
855
925
|
|
|
856
926
|
cacheKey += object.receiveShadow + ',';
|
|
857
927
|
|
|
@@ -889,6 +959,18 @@ class RenderObject {
|
|
|
889
959
|
|
|
890
960
|
}
|
|
891
961
|
|
|
962
|
+
for ( const { node } of this.getNodeBuilderState().nodeAttributes ) {
|
|
963
|
+
|
|
964
|
+
if ( node && node.attribute ) {
|
|
965
|
+
|
|
966
|
+
const attribute = node.getObjectAttribute( this.object );
|
|
967
|
+
|
|
968
|
+
if ( attribute && this.attributes.includes( attribute ) === false ) return true;
|
|
969
|
+
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
}
|
|
973
|
+
|
|
892
974
|
}
|
|
893
975
|
|
|
894
976
|
return false;
|
|
@@ -925,32 +1007,24 @@ class RenderObject {
|
|
|
925
1007
|
*/
|
|
926
1008
|
getDynamicCacheKey() {
|
|
927
1009
|
|
|
928
|
-
let
|
|
1010
|
+
let environmentKey = 0;
|
|
929
1011
|
|
|
930
1012
|
// `Nodes.getCacheKey()` returns an environment cache key which is not relevant when
|
|
931
1013
|
// the renderer is inside a shadow pass.
|
|
932
1014
|
|
|
933
1015
|
if ( this.material.isShadowPassMaterial !== true ) {
|
|
934
1016
|
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
}
|
|
938
|
-
|
|
939
|
-
if ( this.camera.isArrayCamera ) {
|
|
940
|
-
|
|
941
|
-
cacheKey = hash( cacheKey, this.camera.cameras.length );
|
|
1017
|
+
environmentKey = this._nodes.getCacheKey( this.scene, this.lightsNode );
|
|
942
1018
|
|
|
943
1019
|
}
|
|
944
1020
|
|
|
945
|
-
|
|
1021
|
+
_cacheKeyValues[ 0 ] = environmentKey;
|
|
1022
|
+
_cacheKeyValues[ 1 ] = this.camera.isArrayCamera ? this.camera.cameras.length : 0;
|
|
1023
|
+
_cacheKeyValues[ 2 ] = this.object.receiveShadow ? 1 : 0;
|
|
1024
|
+
_cacheKeyValues[ 3 ] = this.renderer.contextNode.id;
|
|
1025
|
+
_cacheKeyValues[ 4 ] = this.renderer.contextNode.version;
|
|
946
1026
|
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
}
|
|
950
|
-
|
|
951
|
-
cacheKey = hash( cacheKey, this.renderer.contextNode.id, this.renderer.contextNode.version );
|
|
952
|
-
|
|
953
|
-
return cacheKey;
|
|
1027
|
+
return hashArray( _cacheKeyValues );
|
|
954
1028
|
|
|
955
1029
|
}
|
|
956
1030
|
|
|
@@ -974,6 +1048,8 @@ class RenderObject {
|
|
|
974
1048
|
this.material.removeEventListener( 'dispose', this.onMaterialDispose );
|
|
975
1049
|
this.geometry.removeEventListener( 'dispose', this.onGeometryDispose );
|
|
976
1050
|
|
|
1051
|
+
this.lightsNode.removeEventListener( 'dispose', this.onLightsNodeDispose );
|
|
1052
|
+
|
|
977
1053
|
if ( this._sourceMaterial !== null ) {
|
|
978
1054
|
|
|
979
1055
|
this._sourceMaterial.removeEventListener( 'dispose', this.onMaterialDispose );
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import ChainMap from './ChainMap.js';
|
|
2
2
|
import RenderObject from './RenderObject.js';
|
|
3
3
|
|
|
4
|
-
const _chainKeys = [];
|
|
4
|
+
const _chainKeys = [ null, null, null, null ];
|
|
5
|
+
const _overrideChainKeys = [ null, null, null, null, null ];
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* This module manages the render objects of the renderer.
|
|
@@ -100,42 +101,59 @@ class RenderObjects {
|
|
|
100
101
|
|
|
101
102
|
const chainMap = this.getChainMap( passId );
|
|
102
103
|
|
|
104
|
+
const sourceMaterial = this.renderer._currentSourceMaterial;
|
|
105
|
+
const sourceMaterialVersion = sourceMaterial !== null ? sourceMaterial.version : 0;
|
|
106
|
+
|
|
103
107
|
// set chain keys
|
|
104
108
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
+
const chainKeys = sourceMaterial !== null ? _overrideChainKeys : _chainKeys;
|
|
110
|
+
|
|
111
|
+
chainKeys[ 0 ] = object;
|
|
112
|
+
chainKeys[ 1 ] = material;
|
|
113
|
+
chainKeys[ 2 ] = renderContext;
|
|
114
|
+
chainKeys[ 3 ] = lightsNode;
|
|
115
|
+
|
|
116
|
+
if ( sourceMaterial !== null ) chainKeys[ 4 ] = sourceMaterial;
|
|
109
117
|
|
|
110
118
|
//
|
|
111
119
|
|
|
112
|
-
let renderObject = chainMap.get(
|
|
120
|
+
let renderObject = chainMap.get( chainKeys );
|
|
113
121
|
|
|
114
122
|
if ( renderObject === undefined ) {
|
|
115
123
|
|
|
116
124
|
renderObject = this.createRenderObject( this.nodes, this.geometries, this.renderer, object, material, scene, camera, lightsNode, renderContext, clippingContext, passId );
|
|
117
125
|
|
|
118
|
-
chainMap.set(
|
|
126
|
+
chainMap.set( chainKeys, renderObject );
|
|
119
127
|
|
|
120
128
|
} else {
|
|
121
129
|
|
|
130
|
+
let force = false;
|
|
131
|
+
|
|
122
132
|
// update references
|
|
123
133
|
|
|
124
134
|
renderObject.camera = camera;
|
|
125
135
|
|
|
126
|
-
//
|
|
136
|
+
// clipping and geometry updates
|
|
127
137
|
|
|
128
138
|
renderObject.updateClipping( clippingContext );
|
|
129
139
|
|
|
130
140
|
if ( renderObject.needsGeometryUpdate ) {
|
|
131
141
|
|
|
132
|
-
this.geometries.removeUser( renderObject, renderObject.geometry );
|
|
133
142
|
renderObject.setGeometry( object.geometry );
|
|
134
|
-
|
|
143
|
+
|
|
144
|
+
// structural change, force into rebuild
|
|
145
|
+
|
|
146
|
+
if ( renderObject.initialGeometryCacheKey !== renderObject.getGeometryCacheKey() ) {
|
|
147
|
+
|
|
148
|
+
force = true;
|
|
149
|
+
|
|
150
|
+
}
|
|
135
151
|
|
|
136
152
|
}
|
|
137
153
|
|
|
138
|
-
|
|
154
|
+
// check if a new render object (rebuild) is required
|
|
155
|
+
|
|
156
|
+
if ( renderObject.version !== material.version || renderObject.sourceMaterialVersion !== sourceMaterialVersion || renderObject.needsUpdate || force ) {
|
|
139
157
|
|
|
140
158
|
if ( renderObject.initialCacheKey !== renderObject.getCacheKey() ) {
|
|
141
159
|
|
|
@@ -146,6 +164,7 @@ class RenderObjects {
|
|
|
146
164
|
} else {
|
|
147
165
|
|
|
148
166
|
renderObject.version = material.version;
|
|
167
|
+
renderObject.sourceMaterialVersion = sourceMaterialVersion;
|
|
149
168
|
|
|
150
169
|
}
|
|
151
170
|
|
|
@@ -155,10 +174,12 @@ class RenderObjects {
|
|
|
155
174
|
|
|
156
175
|
// reset chain array
|
|
157
176
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
177
|
+
chainKeys[ 0 ] = null;
|
|
178
|
+
chainKeys[ 1 ] = null;
|
|
179
|
+
chainKeys[ 2 ] = null;
|
|
180
|
+
chainKeys[ 3 ] = null;
|
|
181
|
+
|
|
182
|
+
if ( sourceMaterial !== null ) chainKeys[ 4 ] = null;
|
|
162
183
|
|
|
163
184
|
//
|
|
164
185
|
|
|
@@ -219,6 +240,7 @@ class RenderObjects {
|
|
|
219
240
|
|
|
220
241
|
renderObject.onDispose = () => {
|
|
221
242
|
|
|
243
|
+
this.geometries.deleteVertexState( renderObject );
|
|
222
244
|
this.pipelines.delete( renderObject );
|
|
223
245
|
this.bindings.deleteForRender( renderObject );
|
|
224
246
|
this.nodes.delete( renderObject );
|
|
@@ -227,14 +249,10 @@ class RenderObjects {
|
|
|
227
249
|
|
|
228
250
|
this._renderObjects.delete( renderObject );
|
|
229
251
|
|
|
230
|
-
this.geometries.removeUser( renderObject, renderObject.geometry );
|
|
231
|
-
|
|
232
252
|
};
|
|
233
253
|
|
|
234
254
|
this._renderObjects.add( renderObject );
|
|
235
255
|
|
|
236
|
-
this.geometries.addUser( renderObject, renderObject.geometry );
|
|
237
|
-
|
|
238
256
|
return renderObject;
|
|
239
257
|
|
|
240
258
|
}
|