@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
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { Material } from '../Material.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A material instance that reuses the shader of a node material with its own properties.
|
|
5
|
+
* All instances created from the same node material share a single shader build, so
|
|
6
|
+
* configure the node material before creating instances. Instance values are read in
|
|
7
|
+
* the shared node graph with `materialReference( name, type )`. Node properties such as
|
|
8
|
+
* `colorNode` are read-only and always read from the node material.
|
|
9
|
+
*
|
|
10
|
+
* ```js
|
|
11
|
+
* const nodeMaterial = new MeshBasicNodeMaterial();
|
|
12
|
+
* nodeMaterial.colorNode = materialReference( 'myColor', 'color' );
|
|
13
|
+
*
|
|
14
|
+
* const material = new NodeMaterialInstance( nodeMaterial );
|
|
15
|
+
* material.myColor = new Color( 1, 0, 0 );
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @augments Material
|
|
19
|
+
*/
|
|
20
|
+
class NodeMaterialInstance extends Material {
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Constructs a new node material instance.
|
|
24
|
+
*
|
|
25
|
+
* @param {NodeMaterial} nodeMaterial - The node material defining the shared shader.
|
|
26
|
+
* @throws {TypeError} When the given material is not a node material.
|
|
27
|
+
*/
|
|
28
|
+
constructor( nodeMaterial ) {
|
|
29
|
+
|
|
30
|
+
super();
|
|
31
|
+
|
|
32
|
+
if ( nodeMaterial?.isNodeMaterial !== true ) {
|
|
33
|
+
|
|
34
|
+
throw new TypeError( 'THREE.NodeMaterialInstance: The parameter must be a NodeMaterial.' );
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
copyProperties( this, nodeMaterial );
|
|
39
|
+
|
|
40
|
+
// Instance values often live in `userData`, so each instance starts with its own copy.
|
|
41
|
+
|
|
42
|
+
this.userData = cloneUserData( nodeMaterial.userData );
|
|
43
|
+
|
|
44
|
+
this.type = 'NodeMaterialInstance';
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* This flag can be used for type testing.
|
|
48
|
+
*
|
|
49
|
+
* @type {boolean}
|
|
50
|
+
* @readonly
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
53
|
+
this.isNodeMaterialInstance = true;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The node material defining the shared shader.
|
|
57
|
+
*
|
|
58
|
+
* @type {NodeMaterial}
|
|
59
|
+
*/
|
|
60
|
+
this.nodeMaterial = nodeMaterial;
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Returns a cache key that identifies the shared shader, without traversing
|
|
66
|
+
* the node graph for each instance.
|
|
67
|
+
*
|
|
68
|
+
* @return {string} The custom program cache key.
|
|
69
|
+
*/
|
|
70
|
+
customProgramCacheKey() {
|
|
71
|
+
|
|
72
|
+
return this.nodeMaterial.uuid + ',' + this.nodeMaterial.version;
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Builds the shader of the node material while keeping this instance
|
|
78
|
+
* as `builder.material`.
|
|
79
|
+
*
|
|
80
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
81
|
+
*/
|
|
82
|
+
build( builder ) {
|
|
83
|
+
|
|
84
|
+
this.nodeMaterial.build( builder );
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The version of the node material. Setting `needsUpdate` on the node material
|
|
90
|
+
* updates all its instances, while setting it on an instance has no effect.
|
|
91
|
+
*
|
|
92
|
+
* @type {number}
|
|
93
|
+
*/
|
|
94
|
+
get version() {
|
|
95
|
+
|
|
96
|
+
return this.nodeMaterial.version;
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
set version( value ) {}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Copies the values of the given node material instance to this instance.
|
|
104
|
+
* Object values such as colors are shared with the source, except in `userData`.
|
|
105
|
+
* Unlike {@link Material#copy}, `userData` is not copied via JSON: its first level
|
|
106
|
+
* values are cloned when possible, so types such as colors are preserved. Textures
|
|
107
|
+
* remain shared.
|
|
108
|
+
*
|
|
109
|
+
* @param {NodeMaterialInstance} source - The material to copy.
|
|
110
|
+
* @return {NodeMaterialInstance} A reference to this instance.
|
|
111
|
+
*/
|
|
112
|
+
copy( source ) {
|
|
113
|
+
|
|
114
|
+
copyProperties( this, source );
|
|
115
|
+
|
|
116
|
+
this.userData = cloneUserData( source.userData );
|
|
117
|
+
|
|
118
|
+
return this;
|
|
119
|
+
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Returns a new node material instance that shares the same node material.
|
|
124
|
+
*
|
|
125
|
+
* @return {NodeMaterialInstance} A clone of this instance.
|
|
126
|
+
*/
|
|
127
|
+
clone() {
|
|
128
|
+
|
|
129
|
+
return new this.constructor( this.nodeMaterial ).copy( this );
|
|
130
|
+
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Read-only accessors shared by all instances, so node properties always reflect the node material.
|
|
136
|
+
// They must be enumerable since the renderer detects node materials by iterating their properties.
|
|
137
|
+
|
|
138
|
+
const _nodeDescriptors = {};
|
|
139
|
+
|
|
140
|
+
function getNodeDescriptor( property ) {
|
|
141
|
+
|
|
142
|
+
return _nodeDescriptors[ property ] ??= {
|
|
143
|
+
enumerable: true,
|
|
144
|
+
get() {
|
|
145
|
+
|
|
146
|
+
return this.nodeMaterial[ property ];
|
|
147
|
+
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Copies the first level of user data, cloning values such as colors and sharing textures.
|
|
154
|
+
|
|
155
|
+
function cloneUserData( userData ) {
|
|
156
|
+
|
|
157
|
+
const result = {};
|
|
158
|
+
|
|
159
|
+
for ( const key in userData ) {
|
|
160
|
+
|
|
161
|
+
const value = userData[ key ];
|
|
162
|
+
|
|
163
|
+
result[ key ] = value?.clone !== undefined && value.isTexture !== true ? value.clone() : value;
|
|
164
|
+
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return result;
|
|
168
|
+
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Copies configuration while preserving the target's identity and events.
|
|
172
|
+
|
|
173
|
+
function copyProperties( target, source ) {
|
|
174
|
+
|
|
175
|
+
for ( const property of Object.keys( source ) ) {
|
|
176
|
+
|
|
177
|
+
if ( property === 'uuid' || property === 'version' || property === '_listeners' ) continue;
|
|
178
|
+
|
|
179
|
+
if ( property.endsWith( 'Node' ) ) {
|
|
180
|
+
|
|
181
|
+
if ( Object.hasOwn( target, property ) === false ) Object.defineProperty( target, property, getNodeDescriptor( property ) );
|
|
182
|
+
|
|
183
|
+
} else {
|
|
184
|
+
|
|
185
|
+
target[ property ] = source[ property ];
|
|
186
|
+
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export default NodeMaterialInstance;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
export { default as NodeMaterialObserver } from './manager/NodeMaterialObserver.js';
|
|
4
4
|
|
|
5
5
|
export { default as NodeMaterial } from './NodeMaterial.js';
|
|
6
|
+
export { default as NodeMaterialInstance } from './NodeMaterialInstance.js';
|
|
6
7
|
export { default as LineBasicNodeMaterial } from './LineBasicNodeMaterial.js';
|
|
7
8
|
export { default as LineDashedNodeMaterial } from './LineDashedNodeMaterial.js';
|
|
8
9
|
export { default as Line2NodeMaterial } from './Line2NodeMaterial.js';
|
|
@@ -111,7 +111,7 @@ class PointsNodeMaterial extends SpriteNodeMaterial {
|
|
|
111
111
|
|
|
112
112
|
// size attenuation
|
|
113
113
|
|
|
114
|
-
if ( camera.
|
|
114
|
+
if ( camera.isOrthographicCamera !== true && sizeAttenuation === true ) {
|
|
115
115
|
|
|
116
116
|
// follow WebGLRenderer's implementation, and scale by half the canvas height in logical units
|
|
117
117
|
|
|
@@ -57,7 +57,7 @@ class SpriteNodeMaterial extends NodeMaterial {
|
|
|
57
57
|
* particleMaterial.positionNode = positionBuffer.toAttribute();
|
|
58
58
|
* ```
|
|
59
59
|
*
|
|
60
|
-
* @type {?Node<
|
|
60
|
+
* @type {?Node<vec3>}
|
|
61
61
|
* @default null
|
|
62
62
|
*/
|
|
63
63
|
this.positionNode = null;
|
|
@@ -122,7 +122,7 @@ class SpriteNodeMaterial extends NodeMaterial {
|
|
|
122
122
|
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
if ( camera.
|
|
125
|
+
if ( camera.isOrthographicCamera !== true && sizeAttenuation === false ) {
|
|
126
126
|
|
|
127
127
|
scale = scale.mul( mvPosition.z.negate() );
|
|
128
128
|
|
|
@@ -132,7 +132,7 @@ class SpriteNodeMaterial extends NodeMaterial {
|
|
|
132
132
|
|
|
133
133
|
if ( object.center && object.center.isVector2 === true ) {
|
|
134
134
|
|
|
135
|
-
const center = reference( 'center', 'vec2'
|
|
135
|
+
const center = reference( 'center', 'vec2' );
|
|
136
136
|
|
|
137
137
|
alignedPosition = alignedPosition.sub( center.sub( 0.5 ) );
|
|
138
138
|
|
|
@@ -17,9 +17,12 @@ const refreshUniforms = [
|
|
|
17
17
|
'clearcoatNormalMap',
|
|
18
18
|
'clearcoatNormalScale',
|
|
19
19
|
'clearcoatRoughness',
|
|
20
|
+
'clearcoatRoughnessMap',
|
|
20
21
|
'color',
|
|
21
22
|
'dashOffset',
|
|
22
23
|
'dashSize',
|
|
24
|
+
'diffuseRoughness',
|
|
25
|
+
'diffuseRoughnessMap',
|
|
23
26
|
'dispersion',
|
|
24
27
|
'displacementBias',
|
|
25
28
|
'displacementMap',
|
|
@@ -36,8 +39,9 @@ const refreshUniforms = [
|
|
|
36
39
|
'iridescence',
|
|
37
40
|
'iridescenceIOR',
|
|
38
41
|
'iridescenceMap',
|
|
39
|
-
'iridescenceThickness',
|
|
40
42
|
'iridescenceThicknessMap',
|
|
43
|
+
'iridescenceThicknessMaximum',
|
|
44
|
+
'iridescenceThicknessMinimum',
|
|
41
45
|
'lightMap',
|
|
42
46
|
'lightMapIntensity',
|
|
43
47
|
'linewidth',
|
|
@@ -49,6 +53,7 @@ const refreshUniforms = [
|
|
|
49
53
|
'normalScale',
|
|
50
54
|
'opacity',
|
|
51
55
|
'reflectivity',
|
|
56
|
+
'refractionRatio',
|
|
52
57
|
'retroreflectivity',
|
|
53
58
|
'rotation',
|
|
54
59
|
'roughness',
|
|
@@ -69,6 +74,7 @@ const refreshUniforms = [
|
|
|
69
74
|
'specularMap',
|
|
70
75
|
'steps',
|
|
71
76
|
'thickness',
|
|
77
|
+
'thicknessMap',
|
|
72
78
|
'transmission',
|
|
73
79
|
'transmissionMap',
|
|
74
80
|
'wireframe'
|
|
@@ -108,6 +114,14 @@ const _geometryCache = new WeakMap();
|
|
|
108
114
|
*/
|
|
109
115
|
const _textureCache = new WeakMap();
|
|
110
116
|
|
|
117
|
+
/**
|
|
118
|
+
* Holds the output target data for comparison.
|
|
119
|
+
*
|
|
120
|
+
* @private
|
|
121
|
+
* @type {WeakMap<RenderTarget|CanvasTarget,Object>}
|
|
122
|
+
*/
|
|
123
|
+
const _outputTargetCache = new WeakMap();
|
|
124
|
+
|
|
111
125
|
/**
|
|
112
126
|
* This class is used by {@link WebGPURenderer} as management component.
|
|
113
127
|
* It's primary purpose is to determine whether render objects require a
|
|
@@ -131,7 +145,7 @@ class NodeMaterialObserver {
|
|
|
131
145
|
this.renderObjects = new WeakMap();
|
|
132
146
|
|
|
133
147
|
/**
|
|
134
|
-
* Whether the
|
|
148
|
+
* Whether the builder's context uses node objects or not.
|
|
135
149
|
*
|
|
136
150
|
* @type {boolean}
|
|
137
151
|
*/
|
|
@@ -229,6 +243,7 @@ class NodeMaterialObserver {
|
|
|
229
243
|
geometryId: geometry.id,
|
|
230
244
|
geometryVersion: this.getGeometryData( geometry )._version,
|
|
231
245
|
materialVersion: this.getMaterialData( renderObject.material )._version,
|
|
246
|
+
attributesDisposeVersion: renderObject._geometries.attributes.disposeVersion,
|
|
232
247
|
worldMatrix: object.matrixWorld.clone()
|
|
233
248
|
};
|
|
234
249
|
|
|
@@ -246,7 +261,9 @@ class NodeMaterialObserver {
|
|
|
246
261
|
|
|
247
262
|
if ( object.isInstancedMesh === true ) {
|
|
248
263
|
|
|
264
|
+
data.instanceMatrix = object.instanceMatrix;
|
|
249
265
|
data.instanceMatrixVersion = object.instanceMatrix.version;
|
|
266
|
+
data.instanceColor = object.instanceColor;
|
|
250
267
|
data.instanceColorVersion = object.instanceColor !== null ? object.instanceColor.version : null;
|
|
251
268
|
data.morphTextureVersion = object.morphTexture !== null ? object.morphTexture.version : null;
|
|
252
269
|
data.instanceCount = object.count;
|
|
@@ -269,15 +286,14 @@ class NodeMaterialObserver {
|
|
|
269
286
|
|
|
270
287
|
// global data
|
|
271
288
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
data.bufferWidth = width;
|
|
275
|
-
data.bufferHeight = height;
|
|
289
|
+
data.outputTarget = this.getOutputTarget( renderObject.renderer );
|
|
290
|
+
data.outputTargetVersion = this.getOutputTargetData( data.outputTarget, renderObject.context )._version;
|
|
276
291
|
|
|
277
|
-
const { environmentIntensity, environmentRotation } = renderObject.scene;
|
|
292
|
+
const { environment, environmentIntensity, environmentRotation } = renderObject.scene;
|
|
278
293
|
|
|
279
294
|
data.environmentIntensity = environmentIntensity;
|
|
280
295
|
data.environmentRotation = environmentRotation.clone();
|
|
296
|
+
data.environmentVersion = environment !== null ? this.getTextureData( environment )._version : null;
|
|
281
297
|
|
|
282
298
|
data.lights = this.getLightsData( renderObject.lightsNode.getBuiltinLights(), [] );
|
|
283
299
|
|
|
@@ -289,6 +305,53 @@ class NodeMaterialObserver {
|
|
|
289
305
|
|
|
290
306
|
}
|
|
291
307
|
|
|
308
|
+
/**
|
|
309
|
+
* Returns the current output target of the given renderer. That is the active
|
|
310
|
+
* render target or, if none is set, the output render target or the canvas target.
|
|
311
|
+
*
|
|
312
|
+
* @param {Renderer} renderer - The renderer.
|
|
313
|
+
* @return {RenderTarget|CanvasTarget} The output target.
|
|
314
|
+
*/
|
|
315
|
+
getOutputTarget( renderer ) {
|
|
316
|
+
|
|
317
|
+
const renderTarget = renderer.getRenderTarget();
|
|
318
|
+
|
|
319
|
+
return renderTarget !== null ? renderTarget : ( renderer.getOutputRenderTarget() || renderer.getCanvasTarget() );
|
|
320
|
+
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Returns an output target data structure holding the size of the given output
|
|
325
|
+
* target for monitoring. Its version is incremented whenever a size change is observed.
|
|
326
|
+
*
|
|
327
|
+
* @param {RenderTarget|CanvasTarget} outputTarget - The output target.
|
|
328
|
+
* @param {RenderContext} renderContext - The render context.
|
|
329
|
+
* @return {Object} An object for monitoring the output target size.
|
|
330
|
+
*/
|
|
331
|
+
getOutputTargetData( outputTarget, renderContext ) {
|
|
332
|
+
|
|
333
|
+
const { width, height } = renderContext;
|
|
334
|
+
|
|
335
|
+
let data = _outputTargetCache.get( outputTarget );
|
|
336
|
+
|
|
337
|
+
if ( data === undefined ) {
|
|
338
|
+
|
|
339
|
+
data = { _version: 0, width, height };
|
|
340
|
+
|
|
341
|
+
_outputTargetCache.set( outputTarget, data );
|
|
342
|
+
|
|
343
|
+
} else if ( data.width !== width || data.height !== height ) {
|
|
344
|
+
|
|
345
|
+
data.width = width;
|
|
346
|
+
data.height = height;
|
|
347
|
+
data._version ++;
|
|
348
|
+
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return data;
|
|
352
|
+
|
|
353
|
+
}
|
|
354
|
+
|
|
292
355
|
/**
|
|
293
356
|
* Returns an attribute data structure holding the attributes versions for
|
|
294
357
|
* monitoring.
|
|
@@ -316,14 +379,15 @@ class NodeMaterialObserver {
|
|
|
316
379
|
}
|
|
317
380
|
|
|
318
381
|
/**
|
|
319
|
-
* Returns `true` if the node builder's material uses
|
|
320
|
-
* node properties.
|
|
382
|
+
* Returns `true` if the node builder's context (e.g. material) uses node properties.
|
|
321
383
|
*
|
|
322
384
|
* @param {NodeBuilder} builder - The current node builder.
|
|
323
|
-
* @return {boolean} Whether the node builder's
|
|
385
|
+
* @return {boolean} Whether the node builder's context uses node properties or not.
|
|
324
386
|
*/
|
|
325
387
|
containsNode( builder ) {
|
|
326
388
|
|
|
389
|
+
// material
|
|
390
|
+
|
|
327
391
|
const material = builder.material;
|
|
328
392
|
|
|
329
393
|
for ( const property in material ) {
|
|
@@ -333,7 +397,9 @@ class NodeMaterialObserver {
|
|
|
333
397
|
|
|
334
398
|
}
|
|
335
399
|
|
|
336
|
-
|
|
400
|
+
// context
|
|
401
|
+
|
|
402
|
+
if ( builder.context.modelViewMatrix || builder.context.modelNormalViewMatrix || builder.context.getAO || builder.context.getShadow || builder.context.getGI )
|
|
337
403
|
return true;
|
|
338
404
|
|
|
339
405
|
return false;
|
|
@@ -420,6 +486,44 @@ class NodeMaterialObserver {
|
|
|
420
486
|
|
|
421
487
|
}
|
|
422
488
|
|
|
489
|
+
/**
|
|
490
|
+
* Returns a data structure holding the uv transformation of the given
|
|
491
|
+
* texture for monitoring.
|
|
492
|
+
*
|
|
493
|
+
* @param {Texture} texture - The texture.
|
|
494
|
+
* @return {Object} An object for monitoring the uv transformation.
|
|
495
|
+
*/
|
|
496
|
+
getTextureTransformData( texture ) {
|
|
497
|
+
|
|
498
|
+
return {
|
|
499
|
+
offset: texture.offset.clone(),
|
|
500
|
+
repeat: texture.repeat.clone(),
|
|
501
|
+
center: texture.center.clone(),
|
|
502
|
+
rotation: texture.rotation,
|
|
503
|
+
matrix: texture.matrix.clone()
|
|
504
|
+
};
|
|
505
|
+
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Returns `true` if the uv transformation of the given texture has not changed.
|
|
510
|
+
*
|
|
511
|
+
* @param {Object} transformData - The monitored uv transformation.
|
|
512
|
+
* @param {Texture} texture - The texture.
|
|
513
|
+
* @return {boolean} Whether the uv transformation has not changed or not.
|
|
514
|
+
*/
|
|
515
|
+
equalsTextureTransform( transformData, texture ) {
|
|
516
|
+
|
|
517
|
+
if ( texture.matrixAutoUpdate === true ) {
|
|
518
|
+
|
|
519
|
+
return transformData.rotation === texture.rotation && transformData.offset.equals( texture.offset ) && transformData.repeat.equals( texture.repeat ) && transformData.center.equals( texture.center );
|
|
520
|
+
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
return transformData.matrix.equals( texture.matrix );
|
|
524
|
+
|
|
525
|
+
}
|
|
526
|
+
|
|
423
527
|
/**
|
|
424
528
|
* Returns a material data structure holding the material property values for
|
|
425
529
|
* monitoring.
|
|
@@ -449,7 +553,7 @@ class NodeMaterialObserver {
|
|
|
449
553
|
|
|
450
554
|
if ( value.isTexture === true ) {
|
|
451
555
|
|
|
452
|
-
data[ property ] = { id: value.id, version: 0, cacheVersion: this.getTextureData( value )._version };
|
|
556
|
+
data[ property ] = { id: value.id, version: 0, cacheVersion: this.getTextureData( value )._version, transform: this.getTextureTransformData( value ) };
|
|
453
557
|
|
|
454
558
|
} else {
|
|
455
559
|
|
|
@@ -529,7 +633,7 @@ class NodeMaterialObserver {
|
|
|
529
633
|
|
|
530
634
|
} else if ( mtlValue.isTexture === true ) {
|
|
531
635
|
|
|
532
|
-
materialData[ property ] = { id: mtlValue.id, version: mtlValue.version, cacheVersion: this.getTextureData( mtlValue )._version };
|
|
636
|
+
materialData[ property ] = { id: mtlValue.id, version: mtlValue.version, cacheVersion: this.getTextureData( mtlValue )._version, transform: this.getTextureTransformData( mtlValue ) };
|
|
533
637
|
|
|
534
638
|
} else if ( typeof mtlValue === 'object' && mtlValue.clone !== undefined ) {
|
|
535
639
|
|
|
@@ -559,11 +663,16 @@ class NodeMaterialObserver {
|
|
|
559
663
|
|
|
560
664
|
const textureData = this.getTextureData( mtlValue );
|
|
561
665
|
|
|
562
|
-
if ( value.id !== mtlValue.id || value.version !== mtlValue.version || value.cacheVersion !== textureData._version ) {
|
|
666
|
+
if ( value.id !== mtlValue.id || value.version !== mtlValue.version || value.cacheVersion !== textureData._version || this.equalsTextureTransform( value.transform, mtlValue ) === false ) {
|
|
563
667
|
|
|
564
668
|
value.id = mtlValue.id;
|
|
565
669
|
value.version = mtlValue.version;
|
|
566
670
|
value.cacheVersion = textureData._version;
|
|
671
|
+
value.transform.offset.copy( mtlValue.offset );
|
|
672
|
+
value.transform.repeat.copy( mtlValue.repeat );
|
|
673
|
+
value.transform.center.copy( mtlValue.center );
|
|
674
|
+
value.transform.rotation = mtlValue.rotation;
|
|
675
|
+
value.transform.matrix.copy( mtlValue.matrix );
|
|
567
676
|
|
|
568
677
|
changed = true;
|
|
569
678
|
|
|
@@ -593,12 +702,13 @@ class NodeMaterialObserver {
|
|
|
593
702
|
|
|
594
703
|
}
|
|
595
704
|
|
|
596
|
-
const
|
|
705
|
+
const outputTargetData = this.getOutputTargetData( renderObjectData.outputTarget, renderObject.context );
|
|
706
|
+
|
|
707
|
+
// a version mismatch means the output target has been resized since this render object was last refreshed
|
|
597
708
|
|
|
598
|
-
if ( renderObjectData.
|
|
709
|
+
if ( renderObjectData.outputTargetVersion !== outputTargetData._version ) {
|
|
599
710
|
|
|
600
|
-
renderObjectData.
|
|
601
|
-
renderObjectData.bufferHeight = height;
|
|
711
|
+
renderObjectData.outputTargetVersion = outputTargetData._version;
|
|
602
712
|
|
|
603
713
|
return false;
|
|
604
714
|
|
|
@@ -742,13 +852,17 @@ class NodeMaterialObserver {
|
|
|
742
852
|
const instanceColorVersion = object.instanceColor !== null ? object.instanceColor.version : null;
|
|
743
853
|
const morphTextureVersion = object.morphTexture !== null ? object.morphTexture.version : null;
|
|
744
854
|
|
|
745
|
-
if ( renderObjectData.
|
|
855
|
+
if ( renderObjectData.instanceMatrix !== object.instanceMatrix ||
|
|
856
|
+
renderObjectData.instanceMatrixVersion !== object.instanceMatrix.version ||
|
|
857
|
+
renderObjectData.instanceColor !== object.instanceColor ||
|
|
746
858
|
renderObjectData.instanceColorVersion !== instanceColorVersion ||
|
|
747
859
|
renderObjectData.morphTextureVersion !== morphTextureVersion ||
|
|
748
|
-
// Only the instances drawn are uploaded: drawing more may need the rest sent (
|
|
860
|
+
// Only the instances drawn are uploaded: drawing more may need the rest sent (Geometries.js).
|
|
749
861
|
renderObjectData.instanceCount !== object.count ) {
|
|
750
862
|
|
|
863
|
+
renderObjectData.instanceMatrix = object.instanceMatrix;
|
|
751
864
|
renderObjectData.instanceMatrixVersion = object.instanceMatrix.version;
|
|
865
|
+
renderObjectData.instanceColor = object.instanceColor;
|
|
752
866
|
renderObjectData.instanceColorVersion = instanceColorVersion;
|
|
753
867
|
renderObjectData.morphTextureVersion = morphTextureVersion;
|
|
754
868
|
renderObjectData.instanceCount = object.count;
|
|
@@ -810,11 +924,15 @@ class NodeMaterialObserver {
|
|
|
810
924
|
|
|
811
925
|
if ( scene.environment !== null && material.envMap === null ) {
|
|
812
926
|
|
|
927
|
+
const environmentVersion = this.getTextureData( scene.environment )._version;
|
|
928
|
+
|
|
813
929
|
if ( renderObjectData.environmentIntensity !== scene.environmentIntensity ||
|
|
814
|
-
renderObjectData.environmentRotation.equals( scene.environmentRotation ) === false
|
|
930
|
+
renderObjectData.environmentRotation.equals( scene.environmentRotation ) === false ||
|
|
931
|
+
renderObjectData.environmentVersion !== environmentVersion ) {
|
|
815
932
|
|
|
816
933
|
renderObjectData.environmentIntensity = scene.environmentIntensity;
|
|
817
934
|
renderObjectData.environmentRotation.copy( scene.environmentRotation );
|
|
935
|
+
renderObjectData.environmentVersion = environmentVersion;
|
|
818
936
|
|
|
819
937
|
return false;
|
|
820
938
|
|
|
@@ -921,6 +1039,34 @@ class NodeMaterialObserver {
|
|
|
921
1039
|
|
|
922
1040
|
}
|
|
923
1041
|
|
|
1042
|
+
/**
|
|
1043
|
+
* Returns `true` if a vertex buffer or the index of the given render object
|
|
1044
|
+
* has been disposed since the last check.
|
|
1045
|
+
*
|
|
1046
|
+
* @param {RenderObject} renderObject - The render object.
|
|
1047
|
+
* @param {Object} renderObjectData - The cached render object data.
|
|
1048
|
+
* @return {boolean} Whether attributes of the render object have been disposed or not.
|
|
1049
|
+
*/
|
|
1050
|
+
hasDisposedAttributes( renderObject, renderObjectData ) {
|
|
1051
|
+
|
|
1052
|
+
const attributes = renderObject._geometries.attributes;
|
|
1053
|
+
|
|
1054
|
+
for ( const vertexBuffer of renderObject.getVertexBuffers() ) {
|
|
1055
|
+
|
|
1056
|
+
if ( attributes.has( vertexBuffer ) === false ) return true;
|
|
1057
|
+
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
const index = renderObject.getIndex();
|
|
1061
|
+
|
|
1062
|
+
if ( index !== null && attributes.has( index ) === false ) return true;
|
|
1063
|
+
|
|
1064
|
+
renderObjectData.attributesDisposeVersion = attributes.disposeVersion;
|
|
1065
|
+
|
|
1066
|
+
return false;
|
|
1067
|
+
|
|
1068
|
+
}
|
|
1069
|
+
|
|
924
1070
|
/**
|
|
925
1071
|
* Checks if the given render object requires a refresh.
|
|
926
1072
|
*
|
|
@@ -950,8 +1096,31 @@ class NodeMaterialObserver {
|
|
|
950
1096
|
|
|
951
1097
|
}
|
|
952
1098
|
|
|
1099
|
+
// bindings might refer to per-target resources so a target switch needs a full refresh
|
|
1100
|
+
|
|
1101
|
+
const renderObjectData = this.getRenderObjectData( renderObject );
|
|
1102
|
+
const outputTarget = this.getOutputTarget( nodeFrame.renderer );
|
|
1103
|
+
|
|
1104
|
+
if ( renderObjectData.outputTarget !== outputTarget ) {
|
|
1105
|
+
|
|
1106
|
+
renderObjectData.outputTarget = outputTarget;
|
|
1107
|
+
|
|
1108
|
+
refreshType = RenderObjectRefreshType.FULL;
|
|
1109
|
+
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
const attributes = renderObject._geometries.attributes;
|
|
1113
|
+
|
|
1114
|
+
// re-upload disposed attributes. checked before the static early out since other geometries can destroy shared buffers
|
|
1115
|
+
|
|
1116
|
+
if ( renderObjectData.attributesDisposeVersion !== attributes.disposeVersion ) {
|
|
1117
|
+
|
|
1118
|
+
if ( this.hasDisposedAttributes( renderObject, renderObjectData ) ) refreshType = RenderObjectRefreshType.FULL;
|
|
1119
|
+
|
|
1120
|
+
}
|
|
1121
|
+
|
|
953
1122
|
const isStatic = renderObject.object.static === true;
|
|
954
|
-
const isBundle = renderObject.bundle !== null && renderObject.bundle.static === true &&
|
|
1123
|
+
const isBundle = renderObject.bundle !== null && renderObject.bundle.static === true && renderObjectData.version === renderObject.bundle.version;
|
|
955
1124
|
|
|
956
1125
|
if ( isStatic || isBundle )
|
|
957
1126
|
return refreshType;
|
package/src/math/Box3.js
CHANGED
|
@@ -314,9 +314,9 @@ class Box3 {
|
|
|
314
314
|
const positionAttribute = geometry.getAttribute( 'position' );
|
|
315
315
|
|
|
316
316
|
// precise AABB computation based on vertex data requires at least a position attribute.
|
|
317
|
-
// instancing
|
|
317
|
+
// instancing and batching aren't supported so far and use the normal (conservative) code path.
|
|
318
318
|
|
|
319
|
-
if ( precise === true && positionAttribute !== undefined && object.isInstancedMesh !== true ) {
|
|
319
|
+
if ( precise === true && positionAttribute !== undefined && object.isInstancedMesh !== true && object.isBatchedMesh !== true ) {
|
|
320
320
|
|
|
321
321
|
for ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {
|
|
322
322
|
|
package/src/math/Color.js
CHANGED
|
@@ -313,7 +313,7 @@ class Color {
|
|
|
313
313
|
case 'rgb':
|
|
314
314
|
case 'rgba':
|
|
315
315
|
|
|
316
|
-
if ( color = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d
|
|
316
|
+
if ( color = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d+(?:\.\d+)?|\.\d+)\s*)?$/.exec( components ) ) {
|
|
317
317
|
|
|
318
318
|
// rgb(255,0,0) rgba(255,0,0,0.5)
|
|
319
319
|
|
|
@@ -328,16 +328,16 @@ class Color {
|
|
|
328
328
|
|
|
329
329
|
}
|
|
330
330
|
|
|
331
|
-
if ( color = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d
|
|
331
|
+
if ( color = /^\s*(\d+(?:\.\d+)?|\.\d+)\%\s*,\s*(\d+(?:\.\d+)?|\.\d+)\%\s*,\s*(\d+(?:\.\d+)?|\.\d+)\%\s*(?:,\s*(\d+(?:\.\d+)?|\.\d+)\s*)?$/.exec( components ) ) {
|
|
332
332
|
|
|
333
|
-
// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)
|
|
333
|
+
// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) rgb(50.5%,0%,0%)
|
|
334
334
|
|
|
335
335
|
handleAlpha( color[ 4 ] );
|
|
336
336
|
|
|
337
337
|
return this.setRGB(
|
|
338
|
-
Math.min( 100,
|
|
339
|
-
Math.min( 100,
|
|
340
|
-
Math.min( 100,
|
|
338
|
+
Math.min( 100, parseFloat( color[ 1 ] ) ) / 100,
|
|
339
|
+
Math.min( 100, parseFloat( color[ 2 ] ) ) / 100,
|
|
340
|
+
Math.min( 100, parseFloat( color[ 3 ] ) ) / 100,
|
|
341
341
|
colorSpace
|
|
342
342
|
);
|
|
343
343
|
|
|
@@ -348,9 +348,9 @@ class Color {
|
|
|
348
348
|
case 'hsl':
|
|
349
349
|
case 'hsla':
|
|
350
350
|
|
|
351
|
-
if ( color = /^\s*(
|
|
351
|
+
if ( color = /^\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*(\d+(?:\.\d+)?|\.\d+)\%\s*,\s*(\d+(?:\.\d+)?|\.\d+)\%\s*(?:,\s*(\d+(?:\.\d+)?|\.\d+)\s*)?$/.exec( components ) ) {
|
|
352
352
|
|
|
353
|
-
// hsl(120,50%,50%) hsla(120,50%,50%,0.5)
|
|
353
|
+
// hsl(120,50%,50%) hsla(120,50%,50%,0.5) hsl(-120,50%,50%)
|
|
354
354
|
|
|
355
355
|
handleAlpha( color[ 4 ] );
|
|
356
356
|
|