@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
package/src/objects/Mesh.js
CHANGED
|
@@ -115,12 +115,20 @@ class Mesh extends Object3D {
|
|
|
115
115
|
|
|
116
116
|
this.morphTargetInfluences = source.morphTargetInfluences.slice();
|
|
117
117
|
|
|
118
|
+
} else {
|
|
119
|
+
|
|
120
|
+
this.morphTargetInfluences = undefined;
|
|
121
|
+
|
|
118
122
|
}
|
|
119
123
|
|
|
120
124
|
if ( source.morphTargetDictionary !== undefined ) {
|
|
121
125
|
|
|
122
126
|
this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );
|
|
123
127
|
|
|
128
|
+
} else {
|
|
129
|
+
|
|
130
|
+
this.morphTargetDictionary = undefined;
|
|
131
|
+
|
|
124
132
|
}
|
|
125
133
|
|
|
126
134
|
this.material = Array.isArray( source.material ) ? source.material.slice() : source.material;
|
package/src/objects/Points.js
CHANGED
|
@@ -82,6 +82,26 @@ class Points extends Object3D {
|
|
|
82
82
|
|
|
83
83
|
super.copy( source, recursive );
|
|
84
84
|
|
|
85
|
+
if ( source.morphTargetInfluences !== undefined ) {
|
|
86
|
+
|
|
87
|
+
this.morphTargetInfluences = source.morphTargetInfluences.slice();
|
|
88
|
+
|
|
89
|
+
} else {
|
|
90
|
+
|
|
91
|
+
this.morphTargetInfluences = undefined;
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if ( source.morphTargetDictionary !== undefined ) {
|
|
96
|
+
|
|
97
|
+
this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );
|
|
98
|
+
|
|
99
|
+
} else {
|
|
100
|
+
|
|
101
|
+
this.morphTargetDictionary = undefined;
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
|
|
85
105
|
this.material = Array.isArray( source.material ) ? source.material.slice() : source.material;
|
|
86
106
|
this.geometry = source.geometry;
|
|
87
107
|
|
package/src/objects/Skeleton.js
CHANGED
|
@@ -70,6 +70,15 @@ class Skeleton {
|
|
|
70
70
|
*/
|
|
71
71
|
this.boneMatrices = null;
|
|
72
72
|
|
|
73
|
+
/**
|
|
74
|
+
* An array buffer holding the bone data of the previous frame.
|
|
75
|
+
* Required for computing velocity.
|
|
76
|
+
*
|
|
77
|
+
* @type {?Float32Array}
|
|
78
|
+
* @default null
|
|
79
|
+
*/
|
|
80
|
+
this.previousBoneMatrices = null;
|
|
81
|
+
|
|
73
82
|
/**
|
|
74
83
|
* A texture holding the bone data for use
|
|
75
84
|
* in the vertex shader.
|
|
@@ -79,6 +88,15 @@ class Skeleton {
|
|
|
79
88
|
*/
|
|
80
89
|
this.boneTexture = null;
|
|
81
90
|
|
|
91
|
+
/**
|
|
92
|
+
* A texture holding the bone data of the previous frame.
|
|
93
|
+
* Required for computing velocity.
|
|
94
|
+
*
|
|
95
|
+
* @type {?DataTexture}
|
|
96
|
+
* @default null
|
|
97
|
+
*/
|
|
98
|
+
this.previousBoneTexture = null;
|
|
99
|
+
|
|
82
100
|
this.init();
|
|
83
101
|
|
|
84
102
|
}
|
|
@@ -305,6 +323,14 @@ class Skeleton {
|
|
|
305
323
|
|
|
306
324
|
}
|
|
307
325
|
|
|
326
|
+
if ( this.previousBoneTexture !== null ) {
|
|
327
|
+
|
|
328
|
+
this.previousBoneTexture.dispose();
|
|
329
|
+
|
|
330
|
+
this.previousBoneTexture = null;
|
|
331
|
+
|
|
332
|
+
}
|
|
333
|
+
|
|
308
334
|
}
|
|
309
335
|
|
|
310
336
|
/**
|
|
@@ -168,8 +168,8 @@ class SkinnedMesh extends Mesh {
|
|
|
168
168
|
|
|
169
169
|
this.skeleton = source.skeleton;
|
|
170
170
|
|
|
171
|
-
|
|
172
|
-
|
|
171
|
+
this.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null;
|
|
172
|
+
this.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null;
|
|
173
173
|
|
|
174
174
|
return this;
|
|
175
175
|
|
|
@@ -331,7 +331,7 @@ class SkinnedMesh extends Mesh {
|
|
|
331
331
|
|
|
332
332
|
} else {
|
|
333
333
|
|
|
334
|
-
_baseVector.set(
|
|
334
|
+
_baseVector.set( target.x, target.y, target.z, 1 );
|
|
335
335
|
target.set( 0, 0, 0 );
|
|
336
336
|
|
|
337
337
|
}
|
package/src/objects/Sprite.js
CHANGED
|
@@ -225,6 +225,16 @@ class Sprite extends Object3D {
|
|
|
225
225
|
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
+
toJSON( meta ) {
|
|
229
|
+
|
|
230
|
+
const data = super.toJSON( meta );
|
|
231
|
+
|
|
232
|
+
data.object.center = this.center.toArray();
|
|
233
|
+
|
|
234
|
+
return data;
|
|
235
|
+
|
|
236
|
+
}
|
|
237
|
+
|
|
228
238
|
}
|
|
229
239
|
|
|
230
240
|
function transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
} from '../constants.js';
|
|
21
21
|
import { Color } from '../math/Color.js';
|
|
22
22
|
import { Frustum } from '../math/Frustum.js';
|
|
23
|
+
import { FrustumArray } from '../math/FrustumArray.js';
|
|
23
24
|
import { Matrix4 } from '../math/Matrix4.js';
|
|
24
25
|
import { Vector3 } from '../math/Vector3.js';
|
|
25
26
|
import { Vector4 } from '../math/Vector4.js';
|
|
@@ -130,7 +131,7 @@ class WebGLRenderer {
|
|
|
130
131
|
|
|
131
132
|
const uintClearColor = new Uint32Array( 4 );
|
|
132
133
|
const intClearColor = new Int32Array( 4 );
|
|
133
|
-
const
|
|
134
|
+
const lightProbeGridUniforms = { textures: [], min: [], max: [], resolution: [] };
|
|
134
135
|
|
|
135
136
|
let currentRenderList = null;
|
|
136
137
|
let currentRenderState = null;
|
|
@@ -341,6 +342,7 @@ class WebGLRenderer {
|
|
|
341
342
|
// frustum
|
|
342
343
|
|
|
343
344
|
const _frustum = new Frustum();
|
|
345
|
+
const _frustumArray = new FrustumArray();
|
|
344
346
|
|
|
345
347
|
// clipping
|
|
346
348
|
|
|
@@ -817,7 +819,7 @@ class WebGLRenderer {
|
|
|
817
819
|
|
|
818
820
|
}
|
|
819
821
|
|
|
820
|
-
state.viewport( _currentViewport.copy( _viewport ).multiplyScalar(
|
|
822
|
+
state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( getTargetPixelRatio() ).round() );
|
|
821
823
|
|
|
822
824
|
};
|
|
823
825
|
|
|
@@ -854,7 +856,7 @@ class WebGLRenderer {
|
|
|
854
856
|
|
|
855
857
|
}
|
|
856
858
|
|
|
857
|
-
state.scissor( _currentScissor.copy( _scissor ).multiplyScalar(
|
|
859
|
+
state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( getTargetPixelRatio() ).round() );
|
|
858
860
|
|
|
859
861
|
};
|
|
860
862
|
|
|
@@ -1092,9 +1094,11 @@ class WebGLRenderer {
|
|
|
1092
1094
|
background.dispose();
|
|
1093
1095
|
renderLists.dispose();
|
|
1094
1096
|
renderStates.dispose();
|
|
1097
|
+
textures.dispose();
|
|
1095
1098
|
properties.dispose();
|
|
1096
1099
|
environments.dispose();
|
|
1097
1100
|
objects.dispose();
|
|
1101
|
+
geometries.dispose();
|
|
1098
1102
|
bindingStates.dispose();
|
|
1099
1103
|
uniformsGroups.dispose();
|
|
1100
1104
|
programCache.dispose();
|
|
@@ -1684,7 +1688,16 @@ class WebGLRenderer {
|
|
|
1684
1688
|
renderStateStack.push( currentRenderState );
|
|
1685
1689
|
|
|
1686
1690
|
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
1687
|
-
|
|
1691
|
+
|
|
1692
|
+
if ( camera.isArrayCamera ) {
|
|
1693
|
+
|
|
1694
|
+
_frustumArray.setFromArrayCamera( camera );
|
|
1695
|
+
|
|
1696
|
+
} else {
|
|
1697
|
+
|
|
1698
|
+
_frustum.setFromProjectionMatrix( _projScreenMatrix, WebGLCoordinateSystem, camera.reversedDepth );
|
|
1699
|
+
|
|
1700
|
+
}
|
|
1688
1701
|
|
|
1689
1702
|
_localClippingEnabled = this.localClippingEnabled;
|
|
1690
1703
|
_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );
|
|
@@ -1694,6 +1707,8 @@ class WebGLRenderer {
|
|
|
1694
1707
|
|
|
1695
1708
|
renderListStack.push( currentRenderList );
|
|
1696
1709
|
|
|
1710
|
+
this.info.render.frame ++; // increment before projectObject(), see #35099
|
|
1711
|
+
|
|
1697
1712
|
if ( xr.enabled === true && xr.isPresenting === true ) {
|
|
1698
1713
|
|
|
1699
1714
|
const depthSensingMesh = _this.xr.getDepthSensingMesh();
|
|
@@ -1726,8 +1741,6 @@ class WebGLRenderer {
|
|
|
1726
1741
|
|
|
1727
1742
|
//
|
|
1728
1743
|
|
|
1729
|
-
this.info.render.frame ++;
|
|
1730
|
-
|
|
1731
1744
|
if ( this.info.autoReset === true ) this.info.reset();
|
|
1732
1745
|
|
|
1733
1746
|
if ( _clippingEnabled === true ) clipping.beginShadows();
|
|
@@ -1873,10 +1886,6 @@ class WebGLRenderer {
|
|
|
1873
1886
|
|
|
1874
1887
|
if ( object.autoUpdate === true ) object.update( camera );
|
|
1875
1888
|
|
|
1876
|
-
} else if ( object.isLightProbeGrid ) {
|
|
1877
|
-
|
|
1878
|
-
currentRenderState.pushLightProbeGrid( object );
|
|
1879
|
-
|
|
1880
1889
|
} else if ( object.isLight ) {
|
|
1881
1890
|
|
|
1882
1891
|
currentRenderState.pushLight( object );
|
|
@@ -1889,7 +1898,9 @@ class WebGLRenderer {
|
|
|
1889
1898
|
|
|
1890
1899
|
} else if ( object.isSprite ) {
|
|
1891
1900
|
|
|
1892
|
-
|
|
1901
|
+
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
1902
|
+
|
|
1903
|
+
if ( ! object.frustumCulled || object.intersectsFrustum( frustum ) ) {
|
|
1893
1904
|
|
|
1894
1905
|
if ( sortObjects ) {
|
|
1895
1906
|
|
|
@@ -1911,7 +1922,9 @@ class WebGLRenderer {
|
|
|
1911
1922
|
|
|
1912
1923
|
} else if ( object.isMesh || object.isLine || object.isPoints ) {
|
|
1913
1924
|
|
|
1914
|
-
|
|
1925
|
+
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
1926
|
+
|
|
1927
|
+
if ( ! object.frustumCulled || object.intersectsFrustum( frustum ) ) {
|
|
1915
1928
|
|
|
1916
1929
|
const geometry = objects.update( object );
|
|
1917
1930
|
const material = object.material;
|
|
@@ -2184,6 +2197,16 @@ class WebGLRenderer {
|
|
|
2184
2197
|
|
|
2185
2198
|
}
|
|
2186
2199
|
|
|
2200
|
+
function countLightProbeGrids( grids ) {
|
|
2201
|
+
|
|
2202
|
+
let count = 0;
|
|
2203
|
+
|
|
2204
|
+
for ( const grid of grids ) if ( grid.texture !== null ) count ++;
|
|
2205
|
+
|
|
2206
|
+
return count;
|
|
2207
|
+
|
|
2208
|
+
}
|
|
2209
|
+
|
|
2187
2210
|
function getProgram( material, scene, object ) {
|
|
2188
2211
|
|
|
2189
2212
|
if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...
|
|
@@ -2217,6 +2240,7 @@ class WebGLRenderer {
|
|
|
2217
2240
|
|
|
2218
2241
|
programs = new Map();
|
|
2219
2242
|
materialProperties.programs = programs;
|
|
2243
|
+
materialProperties.programVariants = new Map();
|
|
2220
2244
|
|
|
2221
2245
|
}
|
|
2222
2246
|
|
|
@@ -2298,7 +2322,7 @@ class WebGLRenderer {
|
|
|
2298
2322
|
|
|
2299
2323
|
}
|
|
2300
2324
|
|
|
2301
|
-
materialProperties.
|
|
2325
|
+
materialProperties.numLightProbeGrids = countLightProbeGrids( currentRenderState.state.lightProbeGridArray );
|
|
2302
2326
|
|
|
2303
2327
|
materialProperties.currentProgram = program;
|
|
2304
2328
|
materialProperties.uniformsList = null;
|
|
@@ -2307,6 +2331,33 @@ class WebGLRenderer {
|
|
|
2307
2331
|
|
|
2308
2332
|
}
|
|
2309
2333
|
|
|
2334
|
+
function getProgramVariant( material, scene, object, colorSpace, toneMapping ) {
|
|
2335
|
+
|
|
2336
|
+
const materialProperties = properties.get( material );
|
|
2337
|
+
|
|
2338
|
+
const programVariantKey = materialProperties.currentProgram.id + ',' + colorSpace + ',' + toneMapping;
|
|
2339
|
+
|
|
2340
|
+
let program = materialProperties.programVariants.get( programVariantKey );
|
|
2341
|
+
|
|
2342
|
+
if ( program === undefined ) {
|
|
2343
|
+
|
|
2344
|
+
program = getProgram( material, scene, object );
|
|
2345
|
+
|
|
2346
|
+
materialProperties.programVariants.set( programVariantKey, program );
|
|
2347
|
+
|
|
2348
|
+
} else {
|
|
2349
|
+
|
|
2350
|
+
materialProperties.currentProgram = program;
|
|
2351
|
+
materialProperties.uniformsList = null;
|
|
2352
|
+
materialProperties.outputColorSpace = colorSpace;
|
|
2353
|
+
materialProperties.toneMapping = toneMapping;
|
|
2354
|
+
|
|
2355
|
+
}
|
|
2356
|
+
|
|
2357
|
+
return program;
|
|
2358
|
+
|
|
2359
|
+
}
|
|
2360
|
+
|
|
2310
2361
|
function getUniformList( materialProperties ) {
|
|
2311
2362
|
|
|
2312
2363
|
if ( materialProperties.uniformsList === null ) {
|
|
@@ -2343,30 +2394,6 @@ class WebGLRenderer {
|
|
|
2343
2394
|
|
|
2344
2395
|
}
|
|
2345
2396
|
|
|
2346
|
-
function findLightProbeGrid( volumes, object ) {
|
|
2347
|
-
|
|
2348
|
-
if ( volumes.length === 0 ) return null;
|
|
2349
|
-
|
|
2350
|
-
if ( volumes.length === 1 ) {
|
|
2351
|
-
|
|
2352
|
-
return volumes[ 0 ].texture !== null ? volumes[ 0 ] : null;
|
|
2353
|
-
|
|
2354
|
-
}
|
|
2355
|
-
|
|
2356
|
-
objectPosition.setFromMatrixPosition( object.matrixWorld );
|
|
2357
|
-
|
|
2358
|
-
for ( let i = 0, l = volumes.length; i < l; i ++ ) {
|
|
2359
|
-
|
|
2360
|
-
const v = volumes[ i ];
|
|
2361
|
-
|
|
2362
|
-
if ( v.texture !== null && v.boundingBox.containsPoint( objectPosition ) ) return v;
|
|
2363
|
-
|
|
2364
|
-
}
|
|
2365
|
-
|
|
2366
|
-
return null;
|
|
2367
|
-
|
|
2368
|
-
}
|
|
2369
|
-
|
|
2370
2397
|
function setProgram( camera, scene, geometry, material, object ) {
|
|
2371
2398
|
|
|
2372
2399
|
if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...
|
|
@@ -2422,6 +2449,7 @@ class WebGLRenderer {
|
|
|
2422
2449
|
//
|
|
2423
2450
|
|
|
2424
2451
|
let needsProgramChange = false;
|
|
2452
|
+
let needsProgramVariant = false;
|
|
2425
2453
|
|
|
2426
2454
|
if ( material.version === materialProperties.__version ) {
|
|
2427
2455
|
|
|
@@ -2429,10 +2457,6 @@ class WebGLRenderer {
|
|
|
2429
2457
|
|
|
2430
2458
|
needsProgramChange = true;
|
|
2431
2459
|
|
|
2432
|
-
} else if ( materialProperties.outputColorSpace !== colorSpace ) {
|
|
2433
|
-
|
|
2434
|
-
needsProgramChange = true;
|
|
2435
|
-
|
|
2436
2460
|
} else if ( object.isBatchedMesh && materialProperties.batching === false ) {
|
|
2437
2461
|
|
|
2438
2462
|
needsProgramChange = true;
|
|
@@ -2515,17 +2539,17 @@ class WebGLRenderer {
|
|
|
2515
2539
|
|
|
2516
2540
|
needsProgramChange = true;
|
|
2517
2541
|
|
|
2518
|
-
} else if ( materialProperties.
|
|
2542
|
+
} else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {
|
|
2519
2543
|
|
|
2520
2544
|
needsProgramChange = true;
|
|
2521
2545
|
|
|
2522
|
-
} else if ( materialProperties.
|
|
2546
|
+
} else if ( materialProperties.numLightProbeGrids !== countLightProbeGrids( currentRenderState.state.lightProbeGridArray ) ) {
|
|
2523
2547
|
|
|
2524
2548
|
needsProgramChange = true;
|
|
2525
2549
|
|
|
2526
|
-
} else if (
|
|
2550
|
+
} else if ( materialProperties.outputColorSpace !== colorSpace || materialProperties.toneMapping !== toneMapping ) {
|
|
2527
2551
|
|
|
2528
|
-
|
|
2552
|
+
needsProgramVariant = true;
|
|
2529
2553
|
|
|
2530
2554
|
}
|
|
2531
2555
|
|
|
@@ -2540,9 +2564,9 @@ class WebGLRenderer {
|
|
|
2540
2564
|
|
|
2541
2565
|
let program = materialProperties.currentProgram;
|
|
2542
2566
|
|
|
2543
|
-
if ( needsProgramChange === true ) {
|
|
2567
|
+
if ( needsProgramChange === true || needsProgramVariant === true ) {
|
|
2544
2568
|
|
|
2545
|
-
program = getProgram( material, scene, object );
|
|
2569
|
+
program = ( needsProgramVariant === true ) ? getProgramVariant( material, scene, object, colorSpace, toneMapping ) : getProgram( material, scene, object );
|
|
2546
2570
|
|
|
2547
2571
|
// notify the node builder that the program has changed so uniforms and update nodes can
|
|
2548
2572
|
// be cached and triggered.
|
|
@@ -2577,19 +2601,6 @@ class WebGLRenderer {
|
|
|
2577
2601
|
|
|
2578
2602
|
}
|
|
2579
2603
|
|
|
2580
|
-
if ( materialProperties.needsLights ) {
|
|
2581
|
-
|
|
2582
|
-
const objectVolume = findLightProbeGrid( currentRenderState.state.lightProbeGridArray, object );
|
|
2583
|
-
|
|
2584
|
-
if ( materialProperties.lightProbeGrid !== objectVolume ) {
|
|
2585
|
-
|
|
2586
|
-
materialProperties.lightProbeGrid = objectVolume;
|
|
2587
|
-
refreshMaterial = true;
|
|
2588
|
-
|
|
2589
|
-
}
|
|
2590
|
-
|
|
2591
|
-
}
|
|
2592
|
-
|
|
2593
2604
|
if ( refreshProgram || _currentCamera !== camera ) {
|
|
2594
2605
|
|
|
2595
2606
|
// common camera uniforms
|
|
@@ -2777,14 +2788,29 @@ class WebGLRenderer {
|
|
|
2777
2788
|
|
|
2778
2789
|
// light probe volume
|
|
2779
2790
|
|
|
2780
|
-
if ( materialProperties.needsLights && materialProperties.
|
|
2791
|
+
if ( materialProperties.needsLights && materialProperties.numLightProbeGrids > 0 ) {
|
|
2792
|
+
|
|
2793
|
+
const grids = lightProbeGridUniforms;
|
|
2794
|
+
let count = 0;
|
|
2795
|
+
|
|
2796
|
+
for ( const grid of currentRenderState.state.lightProbeGridArray ) {
|
|
2781
2797
|
|
|
2782
|
-
|
|
2798
|
+
if ( grid.texture === null ) continue;
|
|
2783
2799
|
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2800
|
+
grids.textures[ count ] = grid.texture;
|
|
2801
|
+
grids.min[ count ] = grid.boundingBox.min;
|
|
2802
|
+
grids.max[ count ] = grid.boundingBox.max;
|
|
2803
|
+
grids.resolution[ count ] = grid.resolution;
|
|
2804
|
+
count ++;
|
|
2805
|
+
|
|
2806
|
+
}
|
|
2807
|
+
|
|
2808
|
+
for ( const key in grids ) grids[ key ].length = count;
|
|
2809
|
+
|
|
2810
|
+
m_uniforms.probesSH.value = grids.textures;
|
|
2811
|
+
m_uniforms.probesMin.value = grids.min;
|
|
2812
|
+
m_uniforms.probesMax.value = grids.max;
|
|
2813
|
+
m_uniforms.probesResolution.value = grids.resolution;
|
|
2788
2814
|
|
|
2789
2815
|
}
|
|
2790
2816
|
|
|
@@ -3144,6 +3170,9 @@ class WebGLRenderer {
|
|
|
3144
3170
|
|
|
3145
3171
|
framebuffer = framebuffer[ activeCubeFaceIndex ];
|
|
3146
3172
|
|
|
3173
|
+
// Custom mip chains store one framebuffer per level; read level 0.
|
|
3174
|
+
if ( Array.isArray( framebuffer ) ) framebuffer = framebuffer[ 0 ];
|
|
3175
|
+
|
|
3147
3176
|
}
|
|
3148
3177
|
|
|
3149
3178
|
if ( framebuffer ) {
|
|
@@ -3226,6 +3255,9 @@ class WebGLRenderer {
|
|
|
3226
3255
|
|
|
3227
3256
|
framebuffer = framebuffer[ activeCubeFaceIndex ];
|
|
3228
3257
|
|
|
3258
|
+
// Custom mip chains store one framebuffer per level; read level 0.
|
|
3259
|
+
if ( Array.isArray( framebuffer ) ) framebuffer = framebuffer[ 0 ];
|
|
3260
|
+
|
|
3229
3261
|
}
|
|
3230
3262
|
|
|
3231
3263
|
if ( framebuffer ) {
|
|
@@ -3450,7 +3482,7 @@ class WebGLRenderer {
|
|
|
3450
3482
|
|
|
3451
3483
|
}
|
|
3452
3484
|
|
|
3453
|
-
_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST );
|
|
3485
|
+
_gl.blitFramebuffer( minX, minY, minX + width, minY + height, dstX, dstY, dstX + width, dstY + height, _gl.DEPTH_BUFFER_BIT, _gl.NEAREST );
|
|
3454
3486
|
|
|
3455
3487
|
}
|
|
3456
3488
|
|
|
@@ -3493,7 +3525,7 @@ class WebGLRenderer {
|
|
|
3493
3525
|
// copy the data using the fastest function that can achieve the copy
|
|
3494
3526
|
if ( srcLevel !== 0 ) {
|
|
3495
3527
|
|
|
3496
|
-
_gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, _gl.COLOR_BUFFER_BIT, _gl.NEAREST );
|
|
3528
|
+
_gl.blitFramebuffer( minX, minY, minX + width, minY + height, dstX, dstY, dstX + width, dstY + height, _gl.COLOR_BUFFER_BIT, _gl.NEAREST );
|
|
3497
3529
|
|
|
3498
3530
|
} else if ( isDst3D ) {
|
|
3499
3531
|
|
|
@@ -3559,7 +3591,7 @@ class WebGLRenderer {
|
|
|
3559
3591
|
state.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
|
|
3560
3592
|
|
|
3561
3593
|
// Generate mipmaps only when copying level 0
|
|
3562
|
-
if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
|
|
3594
|
+
if ( dstLevel === 0 && dstTexture.generateMipmaps === true && dstTexture.mipmapsAutoUpdate === true ) {
|
|
3563
3595
|
|
|
3564
3596
|
_gl.generateMipmap( glTarget );
|
|
3565
3597
|
|
|
@@ -3698,6 +3730,7 @@ class WebGLRenderer {
|
|
|
3698
3730
|
* @property {boolean} [depth=true] Whether the drawing buffer has a depth buffer of at least 16 bits.
|
|
3699
3731
|
* @property {boolean} [logarithmicDepthBuffer=false] Whether to use a logarithmic depth buffer. It may be necessary to use this if dealing with huge differences in scale in a single scene.
|
|
3700
3732
|
* Note that this setting uses `gl_FragDepth` if available which disables the Early Fragment Test optimization and can cause a decrease in performance.
|
|
3733
|
+
* It is ignored when a reversed depth buffer is in use.
|
|
3701
3734
|
* @property {boolean} [reversedDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
|
|
3702
3735
|
* This is a more faster and accurate version than logarithmic depth buffer.
|
|
3703
3736
|
* @property {number} [outputBufferType=UnsignedByteType] Defines the type of the output buffer. Use `HalfFloatType` for HDR rendering with tone mapping and post-processing support.
|
|
@@ -3709,7 +3742,8 @@ class WebGLRenderer {
|
|
|
3709
3742
|
* @typedef {Object} WebGLRenderer~Capabilities
|
|
3710
3743
|
* @property {Function} getMaxAnisotropy - Returns the maximum available anisotropy.
|
|
3711
3744
|
* @property {Function} getMaxPrecision - Returns the maximum available precision for vertex and fragment shaders.
|
|
3712
|
-
* @property {boolean} logarithmicDepthBuffer - `true` if `logarithmicDepthBuffer` was set to `true` in the constructor
|
|
3745
|
+
* @property {boolean} logarithmicDepthBuffer - `true` if `logarithmicDepthBuffer` was set to `true` in the constructor
|
|
3746
|
+
* and no reversed depth buffer is in use.
|
|
3713
3747
|
* @property {number} maxAttributes - The number of shader attributes that can be used by the vertex shader.
|
|
3714
3748
|
* @property {number} maxCubemapSize - Maximum height * width of cube map textures that a shader can use.
|
|
3715
3749
|
* @property {number} maxFragmentUniforms - The number of uniforms that can be used by a fragment shader.
|
|
@@ -64,10 +64,12 @@ class Animation {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
/**
|
|
67
|
-
* Starts the internal animation loop.
|
|
67
|
+
* Starts the internal animation loop, if it is not running yet.
|
|
68
68
|
*/
|
|
69
69
|
start() {
|
|
70
70
|
|
|
71
|
+
if ( this._requestId !== null ) return;
|
|
72
|
+
|
|
71
73
|
const update = ( time, xrFrame ) => {
|
|
72
74
|
|
|
73
75
|
this._requestId = this._context.requestAnimationFrame( update );
|
|
@@ -162,6 +164,8 @@ class Animation {
|
|
|
162
164
|
|
|
163
165
|
this.stop();
|
|
164
166
|
|
|
167
|
+
this._animationLoop = null;
|
|
168
|
+
|
|
165
169
|
}
|
|
166
170
|
|
|
167
171
|
}
|