@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
|
@@ -2,12 +2,26 @@ import DataMap from './DataMap.js';
|
|
|
2
2
|
|
|
3
3
|
import { Vector3 } from '../../math/Vector3.js';
|
|
4
4
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
5
|
-
import { DepthStencilFormat, DepthFormat, UnsignedIntType, UnsignedInt248Type, UnsignedByteType, SRGBTransfer } from '../../constants.js';
|
|
5
|
+
import { DepthStencilFormat, DepthFormat, UnsignedIntType, UnsignedInt248Type, UnsignedByteType, FloatType, SRGBTransfer } from '../../constants.js';
|
|
6
6
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
7
7
|
import { warn } from '../../utils.js';
|
|
8
8
|
|
|
9
9
|
const _size = /*@__PURE__*/ new Vector3();
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Returns the mipmaps of the given texture. Compressed cube textures
|
|
13
|
+
* define them per face.
|
|
14
|
+
*
|
|
15
|
+
* @private
|
|
16
|
+
* @param {Texture} texture - The texture.
|
|
17
|
+
* @return {Array<Object>} The mipmaps.
|
|
18
|
+
*/
|
|
19
|
+
function getMipmaps( texture ) {
|
|
20
|
+
|
|
21
|
+
return texture.isCompressedCubeTexture === true ? texture.image[ 0 ].mipmaps : texture.mipmaps;
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
11
25
|
/**
|
|
12
26
|
* This module manages the textures of the renderer.
|
|
13
27
|
*
|
|
@@ -55,6 +69,56 @@ class Textures extends DataMap {
|
|
|
55
69
|
*/
|
|
56
70
|
this._htmlTextures = new Set();
|
|
57
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Stores weak references to the textures and render targets
|
|
74
|
+
* with attached `dispose` event listeners.
|
|
75
|
+
*
|
|
76
|
+
* @private
|
|
77
|
+
* @type {Set<WeakRef<(Texture|RenderTarget)>>}
|
|
78
|
+
*/
|
|
79
|
+
this._tracked = new Set();
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Removes weak references from `_tracked` when their texture or
|
|
83
|
+
* render target has been garbage collected without an explicit
|
|
84
|
+
* `dispose()`.
|
|
85
|
+
*
|
|
86
|
+
* @private
|
|
87
|
+
* @type {FinalizationRegistry}
|
|
88
|
+
*/
|
|
89
|
+
this._registry = new FinalizationRegistry( ( ref ) => this._tracked.delete( ref ) );
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Frees internal resources.
|
|
95
|
+
*/
|
|
96
|
+
dispose() {
|
|
97
|
+
|
|
98
|
+
for ( const ref of this._tracked ) {
|
|
99
|
+
|
|
100
|
+
const object = ref.deref();
|
|
101
|
+
|
|
102
|
+
if ( object === undefined || this.has( object ) === false ) continue;
|
|
103
|
+
|
|
104
|
+
if ( object.isRenderTarget === true ) {
|
|
105
|
+
|
|
106
|
+
this._destroyRenderTarget( object );
|
|
107
|
+
|
|
108
|
+
} else {
|
|
109
|
+
|
|
110
|
+
this._destroyTexture( object );
|
|
111
|
+
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
this._tracked.clear();
|
|
117
|
+
|
|
118
|
+
this._htmlTextures.clear();
|
|
119
|
+
|
|
120
|
+
super.dispose();
|
|
121
|
+
|
|
58
122
|
}
|
|
59
123
|
|
|
60
124
|
/**
|
|
@@ -73,7 +137,8 @@ class Textures extends DataMap {
|
|
|
73
137
|
|
|
74
138
|
const textures = renderTarget.textures;
|
|
75
139
|
|
|
76
|
-
|
|
140
|
+
// Depth-only render targets take their size from the depth texture.
|
|
141
|
+
const size = this.getSize( textures.length > 0 ? textures[ 0 ] : renderTarget.depthTexture );
|
|
77
142
|
|
|
78
143
|
const mipWidth = size.width >> activeMipmapLevel;
|
|
79
144
|
const mipHeight = size.height >> activeMipmapLevel;
|
|
@@ -91,7 +156,7 @@ class Textures extends DataMap {
|
|
|
91
156
|
depthTexture = new DepthTexture();
|
|
92
157
|
|
|
93
158
|
depthTexture.format = renderTarget.stencilBuffer ? DepthStencilFormat : DepthFormat;
|
|
94
|
-
depthTexture.type = renderTarget.stencilBuffer ? UnsignedInt248Type : UnsignedIntType;
|
|
159
|
+
depthTexture.type = this.renderer.reversedDepthBuffer === true ? FloatType : ( renderTarget.stencilBuffer ? UnsignedInt248Type : UnsignedIntType );
|
|
95
160
|
depthTexture.image.width = mipWidth;
|
|
96
161
|
depthTexture.image.height = mipHeight;
|
|
97
162
|
depthTexture.image.depth = size.depth;
|
|
@@ -144,8 +209,31 @@ class Textures extends DataMap {
|
|
|
144
209
|
|
|
145
210
|
}
|
|
146
211
|
|
|
147
|
-
//
|
|
212
|
+
// dispose handler
|
|
213
|
+
|
|
214
|
+
if ( renderTargetData.initialized !== true ) {
|
|
215
|
+
|
|
216
|
+
renderTargetData.initialized = true;
|
|
217
|
+
|
|
218
|
+
this.info.memory.renderTargets ++;
|
|
219
|
+
|
|
220
|
+
// dispose
|
|
221
|
+
|
|
222
|
+
renderTargetData.onDispose = () => {
|
|
223
|
+
|
|
224
|
+
this._destroyRenderTarget( renderTarget );
|
|
225
|
+
|
|
226
|
+
};
|
|
148
227
|
|
|
228
|
+
renderTarget.addEventListener( 'dispose', renderTargetData.onDispose );
|
|
229
|
+
|
|
230
|
+
// see #34368 why tracking separate remove listeners is required right now
|
|
231
|
+
renderTargetData.ref = new WeakRef( renderTarget );
|
|
232
|
+
|
|
233
|
+
this._tracked.add( renderTargetData.ref );
|
|
234
|
+
this._registry.register( renderTarget, renderTargetData.ref, renderTargetData.ref );
|
|
235
|
+
|
|
236
|
+
}
|
|
149
237
|
|
|
150
238
|
const options = { sampleCount };
|
|
151
239
|
|
|
@@ -171,26 +259,6 @@ class Textures extends DataMap {
|
|
|
171
259
|
|
|
172
260
|
}
|
|
173
261
|
|
|
174
|
-
// dispose handler
|
|
175
|
-
|
|
176
|
-
if ( renderTargetData.initialized !== true ) {
|
|
177
|
-
|
|
178
|
-
renderTargetData.initialized = true;
|
|
179
|
-
|
|
180
|
-
this.info.memory.renderTargets ++;
|
|
181
|
-
|
|
182
|
-
// dispose
|
|
183
|
-
|
|
184
|
-
renderTargetData.onDispose = () => {
|
|
185
|
-
|
|
186
|
-
this._destroyRenderTarget( renderTarget );
|
|
187
|
-
|
|
188
|
-
};
|
|
189
|
-
|
|
190
|
-
renderTarget.addEventListener( 'dispose', renderTargetData.onDispose );
|
|
191
|
-
|
|
192
|
-
}
|
|
193
|
-
|
|
194
262
|
}
|
|
195
263
|
|
|
196
264
|
/**
|
|
@@ -200,11 +268,24 @@ class Textures extends DataMap {
|
|
|
200
268
|
*
|
|
201
269
|
* @param {Texture} texture - The texture to update.
|
|
202
270
|
* @param {Object} [options={}] - The options.
|
|
271
|
+
* @return {number} The current texture generation.
|
|
203
272
|
*/
|
|
204
273
|
updateTexture( texture, options = {} ) {
|
|
205
274
|
|
|
206
275
|
const textureData = this.get( texture );
|
|
207
|
-
if ( textureData.initialized === true && textureData.version === texture.version ) return;
|
|
276
|
+
if ( textureData.initialized === true && textureData.version === texture.version ) return textureData.generation;
|
|
277
|
+
|
|
278
|
+
// render target textures are created with their render target
|
|
279
|
+
|
|
280
|
+
const renderTarget = ( texture.isRenderTargetTexture || texture.isDepthTexture ) ? texture.renderTarget : null;
|
|
281
|
+
|
|
282
|
+
if ( renderTarget !== null && this.get( renderTarget ).initialized !== true ) {
|
|
283
|
+
|
|
284
|
+
this.updateRenderTarget( renderTarget );
|
|
285
|
+
|
|
286
|
+
return textureData.generation;
|
|
287
|
+
|
|
288
|
+
}
|
|
208
289
|
|
|
209
290
|
const isRenderTarget = texture.isRenderTargetTexture || texture.isDepthTexture || texture.isFramebufferTexture;
|
|
210
291
|
const backend = this.backend;
|
|
@@ -296,10 +377,10 @@ class Textures extends DataMap {
|
|
|
296
377
|
options.levels = options.needsMipmaps ? this.getMipLevels( texture, width, height ) : 1;
|
|
297
378
|
|
|
298
379
|
// TODO: Uniformly handle mipmap definitions
|
|
299
|
-
// Normal textures
|
|
380
|
+
// Normal textures, compressed cube textures and render targets define base level + mips with their mipmap array
|
|
300
381
|
// Uncompressed cube textures use their mipmap array only for mips (no base level)
|
|
301
382
|
|
|
302
|
-
if ( texture.isCubeTexture && texture.mipmaps.length > 0 ) options.levels ++;
|
|
383
|
+
if ( texture.isCubeTexture && texture.mipmaps.length > 0 && ! isRenderTarget ) options.levels ++;
|
|
303
384
|
|
|
304
385
|
//
|
|
305
386
|
|
|
@@ -352,11 +433,15 @@ class Textures extends DataMap {
|
|
|
352
433
|
|
|
353
434
|
}
|
|
354
435
|
|
|
355
|
-
if ( texture.source.dataReady === true )
|
|
436
|
+
if ( texture.source.dataReady === true ) {
|
|
437
|
+
|
|
438
|
+
backend.updateTexture( texture, options );
|
|
439
|
+
|
|
440
|
+
texture.clearUpdateRanges();
|
|
356
441
|
|
|
357
|
-
|
|
442
|
+
}
|
|
358
443
|
|
|
359
|
-
if ( options.needsMipmaps && texture.
|
|
444
|
+
if ( options.needsMipmaps && getMipmaps( texture ).length === 0 && texture.mipmapsAutoUpdate === true ) {
|
|
360
445
|
|
|
361
446
|
backend.generateMipmaps( texture );
|
|
362
447
|
|
|
@@ -401,13 +486,23 @@ class Textures extends DataMap {
|
|
|
401
486
|
|
|
402
487
|
// dispose
|
|
403
488
|
|
|
404
|
-
|
|
489
|
+
if ( texture.isRenderTargetTexture !== true ) {
|
|
405
490
|
|
|
406
|
-
|
|
491
|
+
textureData.onDispose = () => {
|
|
407
492
|
|
|
408
|
-
|
|
493
|
+
this._destroyTexture( texture );
|
|
494
|
+
|
|
495
|
+
};
|
|
496
|
+
|
|
497
|
+
texture.addEventListener( 'dispose', textureData.onDispose );
|
|
498
|
+
|
|
499
|
+
}
|
|
409
500
|
|
|
410
|
-
|
|
501
|
+
// see #34368 why tracking separate remove listeners is required right now
|
|
502
|
+
textureData.ref = new WeakRef( texture );
|
|
503
|
+
|
|
504
|
+
this._tracked.add( textureData.ref );
|
|
505
|
+
this._registry.register( texture, textureData.ref, textureData.ref );
|
|
411
506
|
|
|
412
507
|
}
|
|
413
508
|
|
|
@@ -415,6 +510,8 @@ class Textures extends DataMap {
|
|
|
415
510
|
|
|
416
511
|
textureData.version = texture.version;
|
|
417
512
|
|
|
513
|
+
return textureData.generation;
|
|
514
|
+
|
|
418
515
|
}
|
|
419
516
|
|
|
420
517
|
/**
|
|
@@ -451,6 +548,8 @@ class Textures extends DataMap {
|
|
|
451
548
|
|
|
452
549
|
let image = texture.images ? texture.images[ 0 ] : texture.image;
|
|
453
550
|
|
|
551
|
+
if ( texture.isCompressedCubeTexture === true ) image = image[ 0 ];
|
|
552
|
+
|
|
454
553
|
if ( image ) {
|
|
455
554
|
|
|
456
555
|
if ( image.image !== undefined ) image = image.image;
|
|
@@ -503,9 +602,11 @@ class Textures extends DataMap {
|
|
|
503
602
|
|
|
504
603
|
let mipLevelCount;
|
|
505
604
|
|
|
506
|
-
|
|
605
|
+
const mipmaps = getMipmaps( texture );
|
|
507
606
|
|
|
508
|
-
|
|
607
|
+
if ( mipmaps.length > 0 ) {
|
|
608
|
+
|
|
609
|
+
mipLevelCount = mipmaps.length;
|
|
509
610
|
|
|
510
611
|
} else {
|
|
511
612
|
|
|
@@ -537,7 +638,7 @@ class Textures extends DataMap {
|
|
|
537
638
|
*/
|
|
538
639
|
needsMipmaps( texture ) {
|
|
539
640
|
|
|
540
|
-
return texture.generateMipmaps === true || texture.
|
|
641
|
+
return texture.generateMipmaps === true || getMipmaps( texture ).length > 0;
|
|
541
642
|
|
|
542
643
|
}
|
|
543
644
|
|
|
@@ -560,6 +661,9 @@ class Textures extends DataMap {
|
|
|
560
661
|
|
|
561
662
|
renderTarget.removeEventListener( 'dispose', renderTargetData.onDispose );
|
|
562
663
|
|
|
664
|
+
this._tracked.delete( renderTargetData.ref );
|
|
665
|
+
this._registry.unregister( renderTargetData.ref );
|
|
666
|
+
|
|
563
667
|
//
|
|
564
668
|
|
|
565
669
|
for ( let i = 0; i < textures.length; i ++ ) {
|
|
@@ -599,6 +703,9 @@ class Textures extends DataMap {
|
|
|
599
703
|
|
|
600
704
|
texture.removeEventListener( 'dispose', textureData.onDispose );
|
|
601
705
|
|
|
706
|
+
this._tracked.delete( textureData.ref );
|
|
707
|
+
this._registry.unregister( textureData.ref );
|
|
708
|
+
|
|
602
709
|
// if a texture is not ready for use, it falls back to a default texture so it's possible
|
|
603
710
|
// to use it for rendering. If a texture in this state is disposed, it's important to
|
|
604
711
|
// not destroy/delete the underlying GPU texture object since it is cached and shared with
|
|
@@ -260,6 +260,25 @@ class UniformsGroup extends UniformBuffer {
|
|
|
260
260
|
|
|
261
261
|
}
|
|
262
262
|
|
|
263
|
+
/**
|
|
264
|
+
* Returns a clone of this uniforms group. The clone has its own buffer and update state.
|
|
265
|
+
*
|
|
266
|
+
* @return {UniformsGroup} The cloned uniforms group.
|
|
267
|
+
*/
|
|
268
|
+
clone() {
|
|
269
|
+
|
|
270
|
+
const clone = super.clone();
|
|
271
|
+
|
|
272
|
+
clone._buffer = null;
|
|
273
|
+
clone._values = null;
|
|
274
|
+
clone._updateRanges = [];
|
|
275
|
+
clone._updateRangeCache = new Map();
|
|
276
|
+
clone._addedIndices = new Set();
|
|
277
|
+
|
|
278
|
+
return clone;
|
|
279
|
+
|
|
280
|
+
}
|
|
281
|
+
|
|
263
282
|
/**
|
|
264
283
|
* Updates a given uniform by calling an update method matching
|
|
265
284
|
* the uniforms type.
|
|
@@ -19,9 +19,6 @@ import { renderOutput } from '../../nodes/display/RenderOutputNode.js';
|
|
|
19
19
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
20
20
|
import { context } from '../../nodes/core/ContextNode.js';
|
|
21
21
|
|
|
22
|
-
const _cameraLPos = /*@__PURE__*/ new Vector3();
|
|
23
|
-
const _cameraRPos = /*@__PURE__*/ new Vector3();
|
|
24
|
-
|
|
25
22
|
const _contextNodeLib = /*@__PURE__*/ new WeakMap();
|
|
26
23
|
|
|
27
24
|
/**
|
|
@@ -584,6 +581,9 @@ class XRManager extends EventDispatcher {
|
|
|
584
581
|
/**
|
|
585
582
|
* Returns the XR camera.
|
|
586
583
|
*
|
|
584
|
+
* The camera's transformation and projection matrix are derived from the first
|
|
585
|
+
* sub camera (e.g. the left eye in a stereo setup).
|
|
586
|
+
*
|
|
587
587
|
* @return {ArrayCamera} The XR camera.
|
|
588
588
|
*/
|
|
589
589
|
getCamera() {
|
|
@@ -1128,9 +1128,12 @@ class XRManager extends EventDispatcher {
|
|
|
1128
1128
|
|
|
1129
1129
|
contextNode = context( {
|
|
1130
1130
|
|
|
1131
|
-
getOutput: ( outputNode ) => {
|
|
1131
|
+
getOutput: ( outputNode, builder ) => {
|
|
1132
1132
|
|
|
1133
|
-
|
|
1133
|
+
const renderOutputNode = renderOutput( outputNode, renderer.toneMapping, renderer.outputColorSpace );
|
|
1134
|
+
renderOutputNode.premultipliedAlpha = builder.material.premultipliedAlpha;
|
|
1135
|
+
|
|
1136
|
+
return renderOutputNode;
|
|
1134
1137
|
|
|
1135
1138
|
},
|
|
1136
1139
|
|
|
@@ -1424,19 +1427,8 @@ class XRManager extends EventDispatcher {
|
|
|
1424
1427
|
|
|
1425
1428
|
}
|
|
1426
1429
|
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
if ( cameras.length === 2 ) {
|
|
1430
|
-
|
|
1431
|
-
setProjectionFromUnion( cameraXR, cameraL, cameraR );
|
|
1432
|
-
|
|
1433
|
-
} else {
|
|
1434
|
-
|
|
1435
|
-
// assume single camera setup (AR)
|
|
1436
|
-
|
|
1437
|
-
cameraXR.projectionMatrix.copy( cameraL.projectionMatrix );
|
|
1438
|
-
|
|
1439
|
-
}
|
|
1430
|
+
cameraXR.projectionMatrix.copy( cameraL.projectionMatrix );
|
|
1431
|
+
cameraXR.projectionMatrixInverse.copy( cameraL.projectionMatrixInverse );
|
|
1440
1432
|
|
|
1441
1433
|
// update user camera and its children
|
|
1442
1434
|
|
|
@@ -1475,79 +1467,6 @@ class XRManager extends EventDispatcher {
|
|
|
1475
1467
|
|
|
1476
1468
|
}
|
|
1477
1469
|
|
|
1478
|
-
/**
|
|
1479
|
-
* Assumes 2 cameras that are parallel and share an X-axis, and that
|
|
1480
|
-
* the cameras' projection and world matrices have already been set.
|
|
1481
|
-
* And that near and far planes are identical for both cameras.
|
|
1482
|
-
* Visualization of this technique: https://computergraphics.stackexchange.com/a/4765
|
|
1483
|
-
*
|
|
1484
|
-
* @param {ArrayCamera} camera - The camera to update.
|
|
1485
|
-
* @param {PerspectiveCamera} cameraL - The left camera.
|
|
1486
|
-
* @param {PerspectiveCamera} cameraR - The right camera.
|
|
1487
|
-
*/
|
|
1488
|
-
function setProjectionFromUnion( camera, cameraL, cameraR ) {
|
|
1489
|
-
|
|
1490
|
-
_cameraLPos.setFromMatrixPosition( cameraL.matrixWorld );
|
|
1491
|
-
_cameraRPos.setFromMatrixPosition( cameraR.matrixWorld );
|
|
1492
|
-
|
|
1493
|
-
const ipd = _cameraLPos.distanceTo( _cameraRPos );
|
|
1494
|
-
|
|
1495
|
-
const projL = cameraL.projectionMatrix.elements;
|
|
1496
|
-
const projR = cameraR.projectionMatrix.elements;
|
|
1497
|
-
|
|
1498
|
-
// VR systems will have identical far and near planes, and
|
|
1499
|
-
// most likely identical top and bottom frustum extents.
|
|
1500
|
-
// Use the left camera for these values.
|
|
1501
|
-
const near = projL[ 14 ] / ( projL[ 10 ] - 1 );
|
|
1502
|
-
const far = projL[ 14 ] / ( projL[ 10 ] + 1 );
|
|
1503
|
-
const topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];
|
|
1504
|
-
const bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];
|
|
1505
|
-
|
|
1506
|
-
const leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];
|
|
1507
|
-
const rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];
|
|
1508
|
-
const left = near * leftFov;
|
|
1509
|
-
const right = near * rightFov;
|
|
1510
|
-
|
|
1511
|
-
// Calculate the new camera's position offset from the
|
|
1512
|
-
// left camera. xOffset should be roughly half `ipd`.
|
|
1513
|
-
const zOffset = ipd / ( - leftFov + rightFov );
|
|
1514
|
-
const xOffset = zOffset * - leftFov;
|
|
1515
|
-
|
|
1516
|
-
// TODO: Better way to apply this offset?
|
|
1517
|
-
cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );
|
|
1518
|
-
camera.translateX( xOffset );
|
|
1519
|
-
camera.translateZ( zOffset );
|
|
1520
|
-
camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );
|
|
1521
|
-
camera.matrixWorldInverse.copy( camera.matrixWorld ).invert();
|
|
1522
|
-
|
|
1523
|
-
// Check if the projection uses an infinite far plane.
|
|
1524
|
-
if ( projL[ 10 ] === - 1.0 ) {
|
|
1525
|
-
|
|
1526
|
-
// Use the projection matrix from the left eye.
|
|
1527
|
-
// The camera offset is sufficient to include the view volumes
|
|
1528
|
-
// of both eyes (assuming symmetric projections).
|
|
1529
|
-
camera.projectionMatrix.copy( cameraL.projectionMatrix );
|
|
1530
|
-
camera.projectionMatrixInverse.copy( cameraL.projectionMatrixInverse );
|
|
1531
|
-
|
|
1532
|
-
} else {
|
|
1533
|
-
|
|
1534
|
-
// Find the union of the frustum values of the cameras and scale
|
|
1535
|
-
// the values so that the near plane's position does not change in world space,
|
|
1536
|
-
// although must now be relative to the new union camera.
|
|
1537
|
-
const near2 = near + zOffset;
|
|
1538
|
-
const far2 = far + zOffset;
|
|
1539
|
-
const left2 = left - xOffset;
|
|
1540
|
-
const right2 = right + ( ipd - xOffset );
|
|
1541
|
-
const top2 = topFov * far / far2 * near2;
|
|
1542
|
-
const bottom2 = bottomFov * far / far2 * near2;
|
|
1543
|
-
|
|
1544
|
-
camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );
|
|
1545
|
-
camera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();
|
|
1546
|
-
|
|
1547
|
-
}
|
|
1548
|
-
|
|
1549
|
-
}
|
|
1550
|
-
|
|
1551
1470
|
/**
|
|
1552
1471
|
* Updates the world matrices for the given camera based on the parent 3D object.
|
|
1553
1472
|
*
|