@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
|
@@ -122,11 +122,13 @@ class NodeBuilderState {
|
|
|
122
122
|
* on the existing bind groups of this state. Shared groups are
|
|
123
123
|
* not cloned.
|
|
124
124
|
*
|
|
125
|
+
* @param {Bindings} bindings - Renderer component for managing bindings.
|
|
126
|
+
* @param {RenderContext} renderContext - The render context.
|
|
125
127
|
* @return {Array<BindGroup>} A array of bind groups.
|
|
126
128
|
*/
|
|
127
|
-
createBindings() {
|
|
129
|
+
createBindings( bindings, renderContext ) {
|
|
128
130
|
|
|
129
|
-
const
|
|
131
|
+
const bindGroups = [];
|
|
130
132
|
|
|
131
133
|
for ( const instanceGroup of this.bindings ) {
|
|
132
134
|
|
|
@@ -135,7 +137,7 @@ class NodeBuilderState {
|
|
|
135
137
|
if ( shared !== true ) {
|
|
136
138
|
|
|
137
139
|
const bindingsGroup = new BindGroup( instanceGroup.name, [] );
|
|
138
|
-
|
|
140
|
+
bindGroups.push( bindingsGroup );
|
|
139
141
|
|
|
140
142
|
for ( const instanceBinding of instanceGroup.bindings ) {
|
|
141
143
|
|
|
@@ -145,13 +147,13 @@ class NodeBuilderState {
|
|
|
145
147
|
|
|
146
148
|
} else {
|
|
147
149
|
|
|
148
|
-
|
|
150
|
+
bindGroups.push( bindings.getSharedBindGroup( instanceGroup, renderContext ) );
|
|
149
151
|
|
|
150
152
|
}
|
|
151
153
|
|
|
152
154
|
}
|
|
153
155
|
|
|
154
|
-
return
|
|
156
|
+
return bindGroups;
|
|
155
157
|
|
|
156
158
|
}
|
|
157
159
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { warn } from '../../../utils.js';
|
|
1
|
+
import { warn, warnOnce } from '../../../utils.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* The purpose of a node library is to assign node implementations
|
|
@@ -15,13 +15,6 @@ class NodeLibrary {
|
|
|
15
15
|
*/
|
|
16
16
|
constructor() {
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
* A weak map that maps lights to light nodes.
|
|
20
|
-
*
|
|
21
|
-
* @type {WeakMap<Light.constructor,AnalyticLightNode.constructor>}
|
|
22
|
-
*/
|
|
23
|
-
this.lightNodes = new WeakMap();
|
|
24
|
-
|
|
25
18
|
/**
|
|
26
19
|
* A map that maps materials to node materials.
|
|
27
20
|
*
|
|
@@ -124,24 +117,30 @@ class NodeLibrary {
|
|
|
124
117
|
/**
|
|
125
118
|
* Returns a light node class definition for a light class definition.
|
|
126
119
|
*
|
|
127
|
-
* @
|
|
120
|
+
* @deprecated since r187. Use `Light.registerNode()` to assign light node classes instead.
|
|
121
|
+
* @param {Light.constructor} lightClass - The light class definition.
|
|
128
122
|
* @return {?AnalyticLightNode.constructor} The light node class definition. Returns `null` if no light node is found.
|
|
129
123
|
*/
|
|
130
|
-
getLightNodeClass(
|
|
124
|
+
getLightNodeClass( lightClass ) {
|
|
125
|
+
|
|
126
|
+
warnOnce( 'NodeLibrary: "getLightNodeClass()" has been deprecated. Use "Light.registerNode()" to assign light node classes instead.' ); // @deprecated r187
|
|
131
127
|
|
|
132
|
-
return
|
|
128
|
+
return lightClass.prototype._lightNode || null;
|
|
133
129
|
|
|
134
130
|
}
|
|
135
131
|
|
|
136
132
|
/**
|
|
137
133
|
* Adds a light node class definition for a given light class definition.
|
|
138
134
|
*
|
|
135
|
+
* @deprecated since r187. Use `Light.registerNode()` instead.
|
|
139
136
|
* @param {AnalyticLightNode.constructor} lightNodeClass - The light node class definition.
|
|
140
137
|
* @param {Light.constructor} lightClass - The light class definition.
|
|
141
138
|
*/
|
|
142
139
|
addLight( lightNodeClass, lightClass ) {
|
|
143
140
|
|
|
144
|
-
|
|
141
|
+
warnOnce( 'NodeLibrary: "addLight()" has been deprecated. Use "Light.registerNode()" instead.' ); // @deprecated r187
|
|
142
|
+
|
|
143
|
+
lightClass.registerNode( lightNodeClass );
|
|
145
144
|
|
|
146
145
|
}
|
|
147
146
|
|
|
@@ -168,29 +167,6 @@ class NodeLibrary {
|
|
|
168
167
|
|
|
169
168
|
}
|
|
170
169
|
|
|
171
|
-
/**
|
|
172
|
-
* Adds a node class definition for the given class definition to the provided type library.
|
|
173
|
-
*
|
|
174
|
-
* @param {Node.constructor} nodeClass - The node class definition.
|
|
175
|
-
* @param {Node.constructor} baseClass - The class definition.
|
|
176
|
-
* @param {WeakMap<Node.constructor, Node.constructor>} library - The type library.
|
|
177
|
-
*/
|
|
178
|
-
addClass( nodeClass, baseClass, library ) {
|
|
179
|
-
|
|
180
|
-
if ( library.has( baseClass ) ) {
|
|
181
|
-
|
|
182
|
-
warn( `Redefinition of node ${ baseClass.name }` );
|
|
183
|
-
return;
|
|
184
|
-
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
if ( typeof nodeClass !== 'function' ) throw new Error( `THREE.NodeLibrary: Node class ${ nodeClass.name } is not a class.` );
|
|
188
|
-
if ( typeof baseClass !== 'function' ) throw new Error( `THREE.NodeLibrary: Base class ${ baseClass.name } is not a class.` );
|
|
189
|
-
|
|
190
|
-
library.set( baseClass, nodeClass );
|
|
191
|
-
|
|
192
|
-
}
|
|
193
|
-
|
|
194
170
|
}
|
|
195
171
|
|
|
196
172
|
export default NodeLibrary;
|
|
@@ -7,9 +7,9 @@ import { NodeFrame, NodeUpdateType, StackTrace } from '../../../nodes/Nodes.js';
|
|
|
7
7
|
import { renderGroup, cubeTexture, texture, fog, rangeFogFactor, densityFogFactor, reference, pmremTexture, screenUV, uniform } from '../../../nodes/TSL.js';
|
|
8
8
|
import { builtin } from '../../../nodes/accessors/BuiltinNode.js';
|
|
9
9
|
|
|
10
|
-
import {
|
|
10
|
+
import { EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
|
|
11
11
|
import { hashArray } from '../../../nodes/core/NodeUtils.js';
|
|
12
|
-
import { error } from '../../../utils.js';
|
|
12
|
+
import { error, yieldToMain } from '../../../utils.js';
|
|
13
13
|
|
|
14
14
|
const _chainKeys = [];
|
|
15
15
|
const _cacheKeyValues = [];
|
|
@@ -188,14 +188,36 @@ class NodeManager extends DataMap {
|
|
|
188
188
|
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
+
/**
|
|
192
|
+
* Logs an error thrown while building a node material.
|
|
193
|
+
*
|
|
194
|
+
* @private
|
|
195
|
+
* @param {Error} e - The build error.
|
|
196
|
+
*/
|
|
197
|
+
_reportBuildError( e ) {
|
|
198
|
+
|
|
199
|
+
let stackTrace = e.stackTrace;
|
|
200
|
+
|
|
201
|
+
if ( ! stackTrace && e.stack ) {
|
|
202
|
+
|
|
203
|
+
// Capture stack trace for JavaScript errors
|
|
204
|
+
|
|
205
|
+
stackTrace = new StackTrace( e.stack );
|
|
206
|
+
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
error( 'TSL: ' + e, stackTrace );
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
|
|
191
213
|
/**
|
|
192
214
|
* Returns a node builder state for the given render object.
|
|
193
215
|
*
|
|
194
216
|
* @param {RenderObject} renderObject - The render object.
|
|
195
|
-
* @param {
|
|
217
|
+
* @param {?Function} [yieldFn=null] - If set, the build is async and yields to the main thread via this function.
|
|
196
218
|
* @return {NodeBuilderState|Promise<NodeBuilderState>} The node builder state (or Promise if async).
|
|
197
219
|
*/
|
|
198
|
-
getForRender( renderObject,
|
|
220
|
+
getForRender( renderObject, yieldFn = null ) {
|
|
199
221
|
|
|
200
222
|
const renderObjectData = this.get( renderObject );
|
|
201
223
|
|
|
@@ -217,9 +239,9 @@ class NodeManager extends DataMap {
|
|
|
217
239
|
|
|
218
240
|
try {
|
|
219
241
|
|
|
220
|
-
if (
|
|
242
|
+
if ( yieldFn !== null ) {
|
|
221
243
|
|
|
222
|
-
await nodeBuilder.buildAsync();
|
|
244
|
+
await nodeBuilder.buildAsync( yieldFn );
|
|
223
245
|
|
|
224
246
|
} else {
|
|
225
247
|
|
|
@@ -231,9 +253,9 @@ class NodeManager extends DataMap {
|
|
|
231
253
|
|
|
232
254
|
nodeBuilder = this._createNodeBuilder( renderObject, new NodeMaterial() );
|
|
233
255
|
|
|
234
|
-
if (
|
|
256
|
+
if ( yieldFn !== null ) {
|
|
235
257
|
|
|
236
|
-
await nodeBuilder.buildAsync();
|
|
258
|
+
await nodeBuilder.buildAsync( yieldFn );
|
|
237
259
|
|
|
238
260
|
} else {
|
|
239
261
|
|
|
@@ -241,7 +263,7 @@ class NodeManager extends DataMap {
|
|
|
241
263
|
|
|
242
264
|
}
|
|
243
265
|
|
|
244
|
-
|
|
266
|
+
this._reportBuildError( e );
|
|
245
267
|
|
|
246
268
|
}
|
|
247
269
|
|
|
@@ -249,12 +271,12 @@ class NodeManager extends DataMap {
|
|
|
249
271
|
|
|
250
272
|
};
|
|
251
273
|
|
|
252
|
-
if (
|
|
274
|
+
if ( yieldFn !== null ) {
|
|
253
275
|
|
|
254
276
|
return buildNodeBuilder().then( ( nodeBuilder ) => {
|
|
255
277
|
|
|
256
278
|
nodeBuilderState = this._createNodeBuilderState( nodeBuilder );
|
|
257
|
-
nodeBuilderCache.set( cacheKey, nodeBuilderState );
|
|
279
|
+
if ( nodeBuilder.objectSpecific === false ) nodeBuilderCache.set( cacheKey, nodeBuilderState );
|
|
258
280
|
nodeBuilderState.usedTimes ++;
|
|
259
281
|
renderObjectData.nodeBuilderState = nodeBuilderState;
|
|
260
282
|
|
|
@@ -276,23 +298,13 @@ class NodeManager extends DataMap {
|
|
|
276
298
|
nodeBuilder = this._createNodeBuilder( renderObject, new NodeMaterial() );
|
|
277
299
|
nodeBuilder.build();
|
|
278
300
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
if ( ! stackTrace && e.stack ) {
|
|
282
|
-
|
|
283
|
-
// Capture stack trace for JavaScript errors
|
|
284
|
-
|
|
285
|
-
stackTrace = new StackTrace( e.stack );
|
|
286
|
-
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
error( 'TSL: ' + e, stackTrace );
|
|
301
|
+
this._reportBuildError( e );
|
|
290
302
|
|
|
291
303
|
}
|
|
292
304
|
|
|
293
305
|
nodeBuilderState = this._createNodeBuilderState( nodeBuilder );
|
|
294
306
|
|
|
295
|
-
nodeBuilderCache.set( cacheKey, nodeBuilderState );
|
|
307
|
+
if ( nodeBuilder.objectSpecific === false ) nodeBuilderCache.set( cacheKey, nodeBuilderState );
|
|
296
308
|
|
|
297
309
|
}
|
|
298
310
|
|
|
@@ -313,11 +325,12 @@ class NodeManager extends DataMap {
|
|
|
313
325
|
* Use this in compileAsync() to prevent blocking the main thread.
|
|
314
326
|
*
|
|
315
327
|
* @param {RenderObject} renderObject - The render object.
|
|
328
|
+
* @param {Function} [yieldFn=yieldToMain] - The function used to yield to the main thread.
|
|
316
329
|
* @return {Promise<NodeBuilderState>} A promise that resolves to the node builder state.
|
|
317
330
|
*/
|
|
318
|
-
getForRenderAsync( renderObject ) {
|
|
331
|
+
getForRenderAsync( renderObject, yieldFn = yieldToMain ) {
|
|
319
332
|
|
|
320
|
-
const result = this.getForRender( renderObject,
|
|
333
|
+
const result = this.getForRender( renderObject, yieldFn );
|
|
321
334
|
|
|
322
335
|
// Ensure we always return a Promise (cache hit returns nodeBuilderState directly)
|
|
323
336
|
if ( result.then ) {
|
|
@@ -451,9 +464,10 @@ class NodeManager extends DataMap {
|
|
|
451
464
|
*
|
|
452
465
|
* @param {Node} computeNode - The compute node.
|
|
453
466
|
* @param {boolean} [useAsync=false] - Whether to use async build with yielding.
|
|
467
|
+
* @param {Function} [yieldFn=yieldToMain] - The function used to yield to the main thread in an async build.
|
|
454
468
|
* @return {NodeBuilderState|Promise<NodeBuilderState>} The node builder state (or Promise if async).
|
|
455
469
|
*/
|
|
456
|
-
getForCompute( computeNode, useAsync = false ) {
|
|
470
|
+
getForCompute( computeNode, useAsync = false, yieldFn = yieldToMain ) {
|
|
457
471
|
|
|
458
472
|
const computeData = this.get( computeNode );
|
|
459
473
|
|
|
@@ -470,7 +484,7 @@ class NodeManager extends DataMap {
|
|
|
470
484
|
|
|
471
485
|
if ( useAsync ) {
|
|
472
486
|
|
|
473
|
-
return nodeBuilder.buildAsync().then( () => {
|
|
487
|
+
return nodeBuilder.buildAsync( yieldFn ).then( () => {
|
|
474
488
|
|
|
475
489
|
nodeBuilderState = this._createNodeBuilderState( nodeBuilder );
|
|
476
490
|
|
|
@@ -501,11 +515,12 @@ class NodeManager extends DataMap {
|
|
|
501
515
|
* Use this in compileComputeAsync() to prevent blocking the main thread.
|
|
502
516
|
*
|
|
503
517
|
* @param {Node} computeNode - The compute node.
|
|
518
|
+
* @param {Function} [yieldFn=yieldToMain] - The function used to yield to the main thread.
|
|
504
519
|
* @return {Promise<NodeBuilderState>} A promise that resolves to the node builder state.
|
|
505
520
|
*/
|
|
506
|
-
getForComputeAsync( computeNode ) {
|
|
521
|
+
getForComputeAsync( computeNode, yieldFn = yieldToMain ) {
|
|
507
522
|
|
|
508
|
-
const result = this.getForCompute( computeNode, true );
|
|
523
|
+
const result = this.getForCompute( computeNode, true, yieldFn );
|
|
509
524
|
|
|
510
525
|
if ( result.then ) {
|
|
511
526
|
|
|
@@ -624,6 +639,40 @@ class NodeManager extends DataMap {
|
|
|
624
639
|
|
|
625
640
|
}
|
|
626
641
|
|
|
642
|
+
/**
|
|
643
|
+
* Returns the custom program cache key of the given material. Since
|
|
644
|
+
* computing the key traverses the material's node graph, the result
|
|
645
|
+
* is cached per material version if possible.
|
|
646
|
+
*
|
|
647
|
+
* @param {Material} material - The material.
|
|
648
|
+
* @param {Scene} scene - The scene.
|
|
649
|
+
* @return {string} The custom program cache key.
|
|
650
|
+
*/
|
|
651
|
+
getCustomProgramCacheKey( material, scene ) {
|
|
652
|
+
|
|
653
|
+
if ( material === scene.overrideMaterial ) {
|
|
654
|
+
|
|
655
|
+
// override materials can't be cached since they dynamically change node properties
|
|
656
|
+
|
|
657
|
+
return material.customProgramCacheKey();
|
|
658
|
+
|
|
659
|
+
} else {
|
|
660
|
+
|
|
661
|
+
const materialData = this.get( material );
|
|
662
|
+
|
|
663
|
+
if ( materialData.cacheKeyVersion !== material.version ) {
|
|
664
|
+
|
|
665
|
+
materialData.cacheKeyVersion = material.version;
|
|
666
|
+
materialData.cacheKey = material.customProgramCacheKey();
|
|
667
|
+
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
return materialData.cacheKey;
|
|
671
|
+
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
}
|
|
675
|
+
|
|
627
676
|
/**
|
|
628
677
|
* Returns a cache key for the given scene and lights node.
|
|
629
678
|
* This key is used by `RenderObject` as a part of the dynamic
|
|
@@ -710,9 +759,9 @@ class NodeManager extends DataMap {
|
|
|
710
759
|
|
|
711
760
|
const backgroundNode = this.getCacheNode( 'background', background, () => {
|
|
712
761
|
|
|
713
|
-
if ( background.isCubeTexture === true ||
|
|
762
|
+
if ( background.isCubeTexture === true || background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping ) {
|
|
714
763
|
|
|
715
|
-
if ( scene.backgroundBlurriness > 0 || background.
|
|
764
|
+
if ( scene.backgroundBlurriness > 0 || background.isPMREMTexture === true ) {
|
|
716
765
|
|
|
717
766
|
return pmremTexture( background );
|
|
718
767
|
|
|
@@ -67,6 +67,20 @@ class NodeSampledTexture extends SampledTexture {
|
|
|
67
67
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Clones the binding.
|
|
72
|
+
*
|
|
73
|
+
* @return {NodeSampledTexture} The cloned binding.
|
|
74
|
+
*/
|
|
75
|
+
clone() {
|
|
76
|
+
|
|
77
|
+
const binding = super.clone();
|
|
78
|
+
binding.texture = this.textureNode.value; // copy current node value to avoid stale references
|
|
79
|
+
|
|
80
|
+
return binding;
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
70
84
|
}
|
|
71
85
|
|
|
72
86
|
/**
|
|
@@ -57,6 +57,20 @@ class NodeSampler extends Sampler {
|
|
|
57
57
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Clones the binding.
|
|
62
|
+
*
|
|
63
|
+
* @return {NodeSampler} The cloned binding.
|
|
64
|
+
*/
|
|
65
|
+
clone() {
|
|
66
|
+
|
|
67
|
+
const binding = super.clone();
|
|
68
|
+
binding.texture = this.textureNode.value; // copy current node value to avoid stale references
|
|
69
|
+
|
|
70
|
+
return binding;
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
60
74
|
}
|
|
61
75
|
|
|
62
76
|
export default NodeSampler;
|
|
@@ -22,7 +22,7 @@ class NodeStorageBuffer extends StorageBuffer {
|
|
|
22
22
|
|
|
23
23
|
const label = nodeUniform && nodeUniform.name ? nodeUniform.name : _id ++;
|
|
24
24
|
|
|
25
|
-
super( 'StorageBuffer_' + label
|
|
25
|
+
super( 'StorageBuffer_' + label );
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* The node uniform.
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import UniformBuffer from '../UniformBuffer.js';
|
|
2
|
-
import { getFloatLength } from '../BufferUtils.js';
|
|
3
2
|
|
|
4
3
|
let _id = 0;
|
|
5
4
|
|
|
@@ -22,7 +21,7 @@ class NodeUniformBuffer extends UniformBuffer {
|
|
|
22
21
|
|
|
23
22
|
const label = nodeUniform && nodeUniform.name ? nodeUniform.name : _id ++;
|
|
24
23
|
|
|
25
|
-
super( 'UniformBuffer_' + label
|
|
24
|
+
super( 'UniformBuffer_' + label );
|
|
26
25
|
|
|
27
26
|
/**
|
|
28
27
|
* The uniform buffer node.
|
|
@@ -92,18 +91,6 @@ class NodeUniformBuffer extends UniformBuffer {
|
|
|
92
91
|
|
|
93
92
|
}
|
|
94
93
|
|
|
95
|
-
/**
|
|
96
|
-
* The buffer's byte length.
|
|
97
|
-
*
|
|
98
|
-
* @type {number}
|
|
99
|
-
* @readonly
|
|
100
|
-
*/
|
|
101
|
-
get byteLength() {
|
|
102
|
-
|
|
103
|
-
return getFloatLength( this.buffer.byteLength );
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
107
94
|
/**
|
|
108
95
|
* The uniform buffer.
|
|
109
96
|
*
|
|
@@ -3,11 +3,20 @@ export default /* glsl */`
|
|
|
3
3
|
|
|
4
4
|
uniform float envMapIntensity;
|
|
5
5
|
uniform mat3 envMapRotation;
|
|
6
|
+
uniform samplerCube envMap;
|
|
7
|
+
|
|
8
|
+
#ifdef ENVMAP_TYPE_PMREM
|
|
9
|
+
|
|
10
|
+
// Invert PMREMGenerator.lodToRoughness(). Matches Filament's perceptualRoughnessToLod().
|
|
11
|
+
// https://github.com/google/filament/blob/main/shaders/src/surface_light_indirect.fs
|
|
12
|
+
float roughnessToMip( const in float roughness ) {
|
|
13
|
+
|
|
14
|
+
float r = clamp( roughness, 0.0, 1.0 );
|
|
15
|
+
|
|
16
|
+
return ENVMAP_MAX_LOD * r * ( 2.0 - r );
|
|
17
|
+
|
|
18
|
+
}
|
|
6
19
|
|
|
7
|
-
#ifdef ENVMAP_TYPE_CUBE
|
|
8
|
-
uniform samplerCube envMap;
|
|
9
|
-
#else
|
|
10
|
-
uniform sampler2D envMap;
|
|
11
20
|
#endif
|
|
12
21
|
|
|
13
22
|
#endif
|
|
@@ -3,11 +3,11 @@ export default /* glsl */`
|
|
|
3
3
|
|
|
4
4
|
vec3 getIBLIrradiance( const in vec3 normal ) {
|
|
5
5
|
|
|
6
|
-
#ifdef
|
|
6
|
+
#ifdef ENVMAP_TYPE_PMREM
|
|
7
7
|
|
|
8
8
|
vec3 worldNormal = transformNormalByInverseViewMatrix( normal, viewMatrix );
|
|
9
9
|
|
|
10
|
-
vec4 envMapColor =
|
|
10
|
+
vec4 envMapColor = textureLod( envMap, envMapRotation * worldNormal, ENVMAP_MAX_LOD );
|
|
11
11
|
|
|
12
12
|
return PI * envMapColor.rgb * envMapIntensity;
|
|
13
13
|
|
|
@@ -21,7 +21,7 @@ export default /* glsl */`
|
|
|
21
21
|
|
|
22
22
|
vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {
|
|
23
23
|
|
|
24
|
-
#ifdef
|
|
24
|
+
#ifdef ENVMAP_TYPE_PMREM
|
|
25
25
|
|
|
26
26
|
vec3 reflectVec = reflect( - viewDir, normal );
|
|
27
27
|
|
|
@@ -30,7 +30,7 @@ export default /* glsl */`
|
|
|
30
30
|
|
|
31
31
|
reflectVec = transformDirectionByInverseViewMatrix( reflectVec, viewMatrix );
|
|
32
32
|
|
|
33
|
-
vec4 envMapColor =
|
|
33
|
+
vec4 envMapColor = textureLod( envMap, envMapRotation * reflectVec, roughnessToMip( roughness ) );
|
|
34
34
|
|
|
35
35
|
return envMapColor.rgb * envMapIntensity;
|
|
36
36
|
|
|
@@ -46,14 +46,14 @@ export default /* glsl */`
|
|
|
46
46
|
|
|
47
47
|
vec3 getIBLRetroRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {
|
|
48
48
|
|
|
49
|
-
#ifdef
|
|
49
|
+
#ifdef ENVMAP_TYPE_PMREM
|
|
50
50
|
|
|
51
51
|
// The retroreflective lobe returns light toward its source, so the environment is sampled along the view direction
|
|
52
52
|
vec3 retroVec = normalize( mix( viewDir, normal, pow4( roughness ) ) );
|
|
53
53
|
|
|
54
54
|
retroVec = transformDirectionByInverseViewMatrix( retroVec, viewMatrix );
|
|
55
55
|
|
|
56
|
-
vec4 envMapColor =
|
|
56
|
+
vec4 envMapColor = textureLod( envMap, envMapRotation * retroVec, roughnessToMip( roughness ) );
|
|
57
57
|
|
|
58
58
|
return envMapColor.rgb * envMapIntensity;
|
|
59
59
|
|
|
@@ -71,7 +71,7 @@ export default /* glsl */`
|
|
|
71
71
|
|
|
72
72
|
vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {
|
|
73
73
|
|
|
74
|
-
#ifdef
|
|
74
|
+
#ifdef ENVMAP_TYPE_PMREM
|
|
75
75
|
|
|
76
76
|
// https://google.github.io/filament/Filament.md.html#lighting/imagebasedlights/anisotropy
|
|
77
77
|
vec3 bentNormal = cross( bitangent, viewDir );
|
|
@@ -92,7 +92,7 @@ export default /* glsl */`
|
|
|
92
92
|
|
|
93
93
|
vec3 getIBLAnisotropyRetroRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {
|
|
94
94
|
|
|
95
|
-
#ifdef
|
|
95
|
+
#ifdef ENVMAP_TYPE_PMREM
|
|
96
96
|
|
|
97
97
|
// https://google.github.io/filament/Filament.md.html#lighting/imagebasedlights/anisotropy
|
|
98
98
|
vec3 bentNormal = cross( bitangent, viewDir );
|
|
@@ -1,30 +1,42 @@
|
|
|
1
1
|
export default /* glsl */`
|
|
2
|
-
#
|
|
2
|
+
#if NUM_LIGHT_PROBE_GRIDS > 0
|
|
3
3
|
|
|
4
4
|
// Single atlas 3D texture that stores all 7 SH sub-volumes stacked along Z.
|
|
5
5
|
// Atlas depth = 7 * ( nz + 2 ) where nz = probesResolution.z.
|
|
6
6
|
// Each sub-volume occupies ( nz + 2 ) slices: 1 padding + nz data + 1 padding.
|
|
7
7
|
// Padding is a copy of the first / last data slice and prevents color bleeding
|
|
8
8
|
// when the hardware linear filter reads across a sub-volume boundary.
|
|
9
|
-
uniform highp sampler3D probesSH;
|
|
9
|
+
uniform highp sampler3D probesSH[ NUM_LIGHT_PROBE_GRIDS ];
|
|
10
10
|
|
|
11
|
-
uniform vec3 probesMin;
|
|
12
|
-
uniform vec3 probesMax;
|
|
13
|
-
uniform vec3 probesResolution;
|
|
11
|
+
uniform vec3 probesMin[ NUM_LIGHT_PROBE_GRIDS ];
|
|
12
|
+
uniform vec3 probesMax[ NUM_LIGHT_PROBE_GRIDS ];
|
|
13
|
+
uniform vec3 probesResolution[ NUM_LIGHT_PROBE_GRIDS ];
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
bool isInsideLightProbeGrid( vec3 worldPos, vec3 worldNormal, vec3 probesMin, vec3 probesMax, vec3 probesResolution ) {
|
|
16
|
+
|
|
17
|
+
vec3 spacing = ( probesMax - probesMin ) / probesResolution;
|
|
18
|
+
vec3 samplePos = worldPos + worldNormal * spacing * 0.5;
|
|
19
|
+
|
|
20
|
+
// Grow the bounds by 1% of a cell, so fragments on the bounds aren't left out by
|
|
21
|
+
// precision errors or samples outside of the triangle.
|
|
22
|
+
|
|
23
|
+
vec3 margin = spacing * 0.01;
|
|
24
|
+
return all( greaterThanEqual( samplePos, probesMin - margin ) ) && all( lessThanEqual( samplePos, probesMax + margin ) );
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
vec3 getLightProbeGridIrradiance( highp sampler3D probesSH, vec3 probesMin, vec3 probesMax, vec3 probesResolution, vec3 worldPos, vec3 worldNormal ) {
|
|
16
29
|
|
|
17
30
|
vec3 res = probesResolution;
|
|
18
31
|
vec3 gridRange = probesMax - probesMin;
|
|
19
|
-
vec3
|
|
20
|
-
vec3 probeSpacing = gridRange / resMinusOne;
|
|
32
|
+
vec3 probeSpacing = gridRange / res;
|
|
21
33
|
|
|
22
34
|
// Offset sample position along normal by half a probe spacing
|
|
23
35
|
vec3 samplePos = worldPos + worldNormal * probeSpacing * 0.5;
|
|
24
|
-
vec3 uvw = clamp( ( samplePos - probesMin ) / gridRange, 0.0, 1.0 );
|
|
25
36
|
|
|
26
|
-
//
|
|
27
|
-
|
|
37
|
+
// The bounds hold one cell per probe, so they map directly to the probe grid.
|
|
38
|
+
// Clamp to the texel centers of the outermost probes (XY and Z).
|
|
39
|
+
vec3 uvw = clamp( ( samplePos - probesMin ) / gridRange, 0.5 / res, 1.0 - 0.5 / res );
|
|
28
40
|
|
|
29
41
|
// Atlas UV mapping along Z:
|
|
30
42
|
// paddedSlices = nz + 2 (1 padding texel at each end of every sub-volume)
|
|
@@ -243,11 +243,30 @@ IncidentLight directLight;
|
|
|
243
243
|
|
|
244
244
|
#endif
|
|
245
245
|
|
|
246
|
-
#
|
|
246
|
+
#if NUM_LIGHT_PROBE_GRIDS > 0
|
|
247
247
|
|
|
248
248
|
vec3 probeWorldPos = ( ( vec4( geometryPosition, 1.0 ) - viewMatrix[ 3 ] ) * viewMatrix ).xyz;
|
|
249
249
|
vec3 probeWorldNormal = transformNormalByInverseViewMatrix( geometryNormal, viewMatrix );
|
|
250
|
-
|
|
250
|
+
|
|
251
|
+
// Sample the last grid whose cells contain the fragment.
|
|
252
|
+
|
|
253
|
+
int probeGrid = - 1;
|
|
254
|
+
|
|
255
|
+
#pragma unroll_loop_start
|
|
256
|
+
for ( int i = 0; i < NUM_LIGHT_PROBE_GRIDS; i ++ ) {
|
|
257
|
+
|
|
258
|
+
if ( isInsideLightProbeGrid( probeWorldPos, probeWorldNormal, probesMin[ i ], probesMax[ i ], probesResolution[ i ] ) ) probeGrid = UNROLLED_LOOP_INDEX;
|
|
259
|
+
|
|
260
|
+
}
|
|
261
|
+
#pragma unroll_loop_end
|
|
262
|
+
|
|
263
|
+
#pragma unroll_loop_start
|
|
264
|
+
for ( int i = 0; i < NUM_LIGHT_PROBE_GRIDS; i ++ ) {
|
|
265
|
+
|
|
266
|
+
if ( probeGrid == UNROLLED_LOOP_INDEX ) irradiance += getLightProbeGridIrradiance( probesSH[ i ], probesMin[ i ], probesMax[ i ], probesResolution[ i ], probeWorldPos, probeWorldNormal );
|
|
267
|
+
|
|
268
|
+
}
|
|
269
|
+
#pragma unroll_loop_end
|
|
251
270
|
|
|
252
271
|
#endif
|
|
253
272
|
|
|
@@ -7,10 +7,26 @@ material.metalness = metalnessFactor;
|
|
|
7
7
|
vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );
|
|
8
8
|
float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
// Minimum roughness, so even a perfect mirror samples a prefiltered level of the environment map.
|
|
11
|
+
// Matches Filament's desktop MIN_PERCEPTUAL_ROUGHNESS: https://github.com/google/filament/blob/main/shaders/src/surface_material.fs
|
|
12
|
+
material.roughness = max( roughnessFactor, 0.045 );
|
|
11
13
|
material.roughness += geometryRoughness;
|
|
12
14
|
material.roughness = min( material.roughness, 1.0 );
|
|
13
15
|
|
|
16
|
+
#ifdef USE_DIFFUSE_ROUGHNESS
|
|
17
|
+
|
|
18
|
+
float diffuseRoughnessFactor = diffuseRoughness;
|
|
19
|
+
|
|
20
|
+
#ifdef USE_DIFFUSE_ROUGHNESSMAP
|
|
21
|
+
|
|
22
|
+
diffuseRoughnessFactor *= texture2D( diffuseRoughnessMap, vDiffuseRoughnessMapUv ).r;
|
|
23
|
+
|
|
24
|
+
#endif
|
|
25
|
+
|
|
26
|
+
material.diffuseRoughness = saturate( diffuseRoughnessFactor );
|
|
27
|
+
|
|
28
|
+
#endif
|
|
29
|
+
|
|
14
30
|
#ifdef IOR
|
|
15
31
|
|
|
16
32
|
material.ior = ior;
|
|
@@ -73,7 +89,7 @@ material.roughness = min( material.roughness, 1.0 );
|
|
|
73
89
|
#endif
|
|
74
90
|
|
|
75
91
|
material.clearcoat = saturate( material.clearcoat ); // Burley clearcoat model
|
|
76
|
-
material.clearcoatRoughness = max( material.clearcoatRoughness, 0.
|
|
92
|
+
material.clearcoatRoughness = max( material.clearcoatRoughness, 0.045 );
|
|
77
93
|
material.clearcoatRoughness += geometryRoughness;
|
|
78
94
|
material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );
|
|
79
95
|
|