@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
|
@@ -6,8 +6,7 @@ import { expression } from '../code/ExpressionNode.js';
|
|
|
6
6
|
import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
|
|
7
7
|
import { nodeProxy, vec3, nodeObject, int, Fn } from '../tsl/TSLBase.js';
|
|
8
8
|
import { step } from '../math/MathNode.js';
|
|
9
|
-
import {
|
|
10
|
-
import { getTextureType } from '../core/NodeUtils.js';
|
|
9
|
+
import { getTextureType, hash } from '../core/NodeUtils.js';
|
|
11
10
|
|
|
12
11
|
import { Compatibility, GreaterCompare, GreaterEqualCompare, IntType, LessCompare, LessEqualCompare, NearestFilter, UnsignedIntType } from '../../constants.js';
|
|
13
12
|
|
|
@@ -136,16 +135,6 @@ class TextureNode extends UniformNode {
|
|
|
136
135
|
*/
|
|
137
136
|
this.updateMatrix = false;
|
|
138
137
|
|
|
139
|
-
/**
|
|
140
|
-
* By default the `update()` method is not executed. Depending on
|
|
141
|
-
* whether a uv transformation matrix and/or flipY is applied, `update()`
|
|
142
|
-
* is executed per object.
|
|
143
|
-
*
|
|
144
|
-
* @type {string}
|
|
145
|
-
* @default 'none'
|
|
146
|
-
*/
|
|
147
|
-
this.updateType = NodeUpdateType.NONE;
|
|
148
|
-
|
|
149
138
|
/**
|
|
150
139
|
* The reference node.
|
|
151
140
|
*
|
|
@@ -154,6 +143,15 @@ class TextureNode extends UniformNode {
|
|
|
154
143
|
*/
|
|
155
144
|
this.referenceNode = null;
|
|
156
145
|
|
|
146
|
+
/**
|
|
147
|
+
* The mergeable value is stored in a private property.
|
|
148
|
+
*
|
|
149
|
+
* @private
|
|
150
|
+
* @type {boolean}
|
|
151
|
+
* @default true
|
|
152
|
+
*/
|
|
153
|
+
this._mergeable = true;
|
|
154
|
+
|
|
157
155
|
/**
|
|
158
156
|
* The texture value is stored in a private property.
|
|
159
157
|
*
|
|
@@ -193,6 +191,32 @@ class TextureNode extends UniformNode {
|
|
|
193
191
|
|
|
194
192
|
}
|
|
195
193
|
|
|
194
|
+
set mergeable( value ) {
|
|
195
|
+
|
|
196
|
+
if ( this.referenceNode ) {
|
|
197
|
+
|
|
198
|
+
this.referenceNode.mergeable = value;
|
|
199
|
+
|
|
200
|
+
} else {
|
|
201
|
+
|
|
202
|
+
this._mergeable = value;
|
|
203
|
+
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Whether the uniform may be merged with other uniforms at compile-time.
|
|
210
|
+
*
|
|
211
|
+
* @type {boolean}
|
|
212
|
+
* @default true
|
|
213
|
+
*/
|
|
214
|
+
get mergeable() {
|
|
215
|
+
|
|
216
|
+
return this.referenceNode ? this.referenceNode.mergeable : this._mergeable;
|
|
217
|
+
|
|
218
|
+
}
|
|
219
|
+
|
|
196
220
|
set value( value ) {
|
|
197
221
|
|
|
198
222
|
if ( this.referenceNode ) {
|
|
@@ -219,17 +243,42 @@ class TextureNode extends UniformNode {
|
|
|
219
243
|
}
|
|
220
244
|
|
|
221
245
|
/**
|
|
222
|
-
* Overwritten since the uniform hash is defined by the texture's UUID.
|
|
246
|
+
* Overwritten since the uniform hash is defined by the texture's UUID - if mergeable - and the hash of its reference node otherwise.
|
|
223
247
|
*
|
|
224
248
|
* @param {NodeBuilder} builder - The current node builder.
|
|
225
249
|
* @return {string} The uniform hash.
|
|
226
250
|
*/
|
|
227
|
-
getUniformHash(
|
|
251
|
+
getUniformHash( builder ) {
|
|
252
|
+
|
|
253
|
+
if ( this.referenceNode && ! this.referenceNode.mergeable ) {
|
|
254
|
+
|
|
255
|
+
return this.referenceNode.getHash( builder );
|
|
256
|
+
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
if ( ! this._mergeable ) {
|
|
260
|
+
|
|
261
|
+
return this.getHash( builder );
|
|
262
|
+
|
|
263
|
+
}
|
|
228
264
|
|
|
229
265
|
return this.value.uuid;
|
|
230
266
|
|
|
231
267
|
}
|
|
232
268
|
|
|
269
|
+
/**
|
|
270
|
+
* Overwritten since the texture's type and filters influence the generated shader code.
|
|
271
|
+
*
|
|
272
|
+
* @return {number} The custom cache key.
|
|
273
|
+
*/
|
|
274
|
+
customCacheKey() {
|
|
275
|
+
|
|
276
|
+
const { type, minFilter, magFilter } = this.value;
|
|
277
|
+
|
|
278
|
+
return hash( this.id, type, minFilter, magFilter );
|
|
279
|
+
|
|
280
|
+
}
|
|
281
|
+
|
|
233
282
|
/**
|
|
234
283
|
* Overwritten since the node type is inferred from the texture type.
|
|
235
284
|
*
|
|
@@ -291,9 +340,48 @@ class TextureNode extends UniformNode {
|
|
|
291
340
|
*/
|
|
292
341
|
getTransformedUV( uvNode ) {
|
|
293
342
|
|
|
294
|
-
|
|
343
|
+
return this._getMatrixUniform().mul( vec3( uvNode, 1 ) ).xy;
|
|
344
|
+
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Transforms the given uv gradient with the linear part of the texture matrix.
|
|
349
|
+
*
|
|
350
|
+
* @private
|
|
351
|
+
* @param {Node<vec2>} gradientNode - The uv gradient.
|
|
352
|
+
* @return {Node<vec2>} The transformed gradient.
|
|
353
|
+
*/
|
|
354
|
+
_getTransformedGradient( gradientNode ) {
|
|
355
|
+
|
|
356
|
+
return this._getMatrixUniform().mul( vec3( gradientNode, 0 ) ).xy;
|
|
357
|
+
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Returns the uniform of the texture matrix shared by all nodes of the same base texture node.
|
|
362
|
+
*
|
|
363
|
+
* @private
|
|
364
|
+
* @return {UniformNode<mat3>} The texture matrix uniform.
|
|
365
|
+
*/
|
|
366
|
+
_getMatrixUniform() {
|
|
367
|
+
|
|
368
|
+
const baseNode = this.getBase();
|
|
295
369
|
|
|
296
|
-
|
|
370
|
+
if ( baseNode._matrixUniform === null ) {
|
|
371
|
+
|
|
372
|
+
baseNode._matrixUniform = uniform( baseNode.value.matrix ).onObjectUpdate( () => {
|
|
373
|
+
|
|
374
|
+
const texture = baseNode.value;
|
|
375
|
+
|
|
376
|
+
if ( texture.matrixAutoUpdate === true ) texture.updateMatrix();
|
|
377
|
+
|
|
378
|
+
return texture.matrix;
|
|
379
|
+
|
|
380
|
+
} );
|
|
381
|
+
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
return baseNode._matrixUniform;
|
|
297
385
|
|
|
298
386
|
}
|
|
299
387
|
|
|
@@ -323,17 +411,29 @@ class TextureNode extends UniformNode {
|
|
|
323
411
|
|
|
324
412
|
if ( builder.isFlipY() ) {
|
|
325
413
|
|
|
326
|
-
|
|
414
|
+
const baseNode = this.getBase();
|
|
415
|
+
|
|
416
|
+
if ( baseNode._flipYUniform === null ) {
|
|
417
|
+
|
|
418
|
+
baseNode._flipYUniform = uniform( false ).onObjectUpdate( () => {
|
|
419
|
+
|
|
420
|
+
const texture = baseNode.value;
|
|
421
|
+
|
|
422
|
+
return ( texture.image instanceof ImageBitmap && texture.flipY === true ) || texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true;
|
|
423
|
+
|
|
424
|
+
} );
|
|
425
|
+
|
|
426
|
+
}
|
|
327
427
|
|
|
328
428
|
uvNode = uvNode.toVar();
|
|
329
429
|
|
|
330
430
|
if ( this.sampler ) {
|
|
331
431
|
|
|
332
|
-
uvNode =
|
|
432
|
+
uvNode = baseNode._flipYUniform.select( uvNode.flipY(), uvNode );
|
|
333
433
|
|
|
334
434
|
} else {
|
|
335
435
|
|
|
336
|
-
uvNode =
|
|
436
|
+
uvNode = baseNode._flipYUniform.select( uvNode.setY( int( textureSize( this, this.levelNode ).y ).sub( int( uvNode.y ) ).sub( 1 ) ), uvNode );
|
|
337
437
|
|
|
338
438
|
}
|
|
339
439
|
|
|
@@ -385,12 +485,6 @@ class TextureNode extends UniformNode {
|
|
|
385
485
|
|
|
386
486
|
uvNode = this.setupUV( builder, uvNode );
|
|
387
487
|
|
|
388
|
-
//
|
|
389
|
-
|
|
390
|
-
this.updateType = ( this._matrixUniform !== null || this._flipYUniform !== null ) ? NodeUpdateType.OBJECT : NodeUpdateType.NONE;
|
|
391
|
-
|
|
392
|
-
//
|
|
393
|
-
|
|
394
488
|
return uvNode;
|
|
395
489
|
|
|
396
490
|
} )();
|
|
@@ -436,12 +530,28 @@ class TextureNode extends UniformNode {
|
|
|
436
530
|
|
|
437
531
|
}
|
|
438
532
|
|
|
533
|
+
// the context can provide analytic gradients of the default uv, e.g. if the uv is reconstructed per fragment
|
|
534
|
+
|
|
535
|
+
let gradNode = this.gradNode;
|
|
536
|
+
|
|
537
|
+
if ( gradNode === null && this.uvNode === null && levelNode === null && this.biasNode === null && this.sampler === true && builder.context.getTextureGradient ) {
|
|
538
|
+
|
|
539
|
+
const gradient = builder.context.getTextureGradient( this, builder );
|
|
540
|
+
|
|
541
|
+
if ( gradient ) {
|
|
542
|
+
|
|
543
|
+
gradNode = this.updateMatrix === true ? gradient.map( ( node ) => this._getTransformedGradient( node ) ) : gradient;
|
|
544
|
+
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
}
|
|
548
|
+
|
|
439
549
|
properties.uvNode = uvNode;
|
|
440
550
|
properties.levelNode = levelNode;
|
|
441
551
|
properties.biasNode = this.biasNode;
|
|
442
552
|
properties.compareNode = compareNode;
|
|
443
553
|
properties.compareStepNode = compareStepNode;
|
|
444
|
-
properties.gradNode =
|
|
554
|
+
properties.gradNode = gradNode;
|
|
445
555
|
properties.gatherNode = this.gatherNode;
|
|
446
556
|
properties.depthNode = this.depthNode;
|
|
447
557
|
properties.offsetNode = this.offsetNode;
|
|
@@ -552,19 +662,15 @@ class TextureNode extends UniformNode {
|
|
|
552
662
|
const properties = builder.getNodeProperties( this );
|
|
553
663
|
const textureProperty = super.generate( builder, 'property' );
|
|
554
664
|
|
|
555
|
-
if (
|
|
556
|
-
|
|
557
|
-
if ( output === 'samplerComparison' ) {
|
|
665
|
+
if ( output === 'samplerComparison' || properties.compareNode !== null ) {
|
|
558
666
|
|
|
559
|
-
|
|
667
|
+
// make sure the texture node creates a binding with a comparison sampler if necessary
|
|
560
668
|
|
|
561
|
-
|
|
562
|
-
// important to set the flag on the node the binding refers to as well
|
|
669
|
+
this.getSharedNode( builder )._samplerComparison = true;
|
|
563
670
|
|
|
564
|
-
|
|
565
|
-
sharedNode._samplerComparison = true;
|
|
671
|
+
}
|
|
566
672
|
|
|
567
|
-
|
|
673
|
+
if ( /^sampler/.test( output ) ) {
|
|
568
674
|
|
|
569
675
|
return textureProperty + '_sampler';
|
|
570
676
|
|
|
@@ -593,7 +699,9 @@ class TextureNode extends UniformNode {
|
|
|
593
699
|
const gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;
|
|
594
700
|
const gatherSnippet = gatherNode ? gatherNode.build( builder, 'int' ) : null;
|
|
595
701
|
const offsetSnippet = offsetNode ? this.generateOffset( builder, offsetNode ) : null;
|
|
596
|
-
|
|
702
|
+
|
|
703
|
+
const flipYUniform = this.getBase()._flipYUniform;
|
|
704
|
+
const flipYSnippet = flipYUniform ? flipYUniform.build( builder, 'bool' ) : null;
|
|
597
705
|
|
|
598
706
|
let finalDepthSnippet = depthSnippet;
|
|
599
707
|
|
|
@@ -699,7 +807,7 @@ class TextureNode extends UniformNode {
|
|
|
699
807
|
textureNode.uvNode = nodeObject( uvNode );
|
|
700
808
|
textureNode.referenceNode = this.getBase();
|
|
701
809
|
|
|
702
|
-
return
|
|
810
|
+
return textureNode;
|
|
703
811
|
|
|
704
812
|
}
|
|
705
813
|
|
|
@@ -737,7 +845,7 @@ class TextureNode extends UniformNode {
|
|
|
737
845
|
|
|
738
846
|
}
|
|
739
847
|
|
|
740
|
-
return
|
|
848
|
+
return textureNode;
|
|
741
849
|
|
|
742
850
|
}
|
|
743
851
|
|
|
@@ -753,7 +861,7 @@ class TextureNode extends UniformNode {
|
|
|
753
861
|
textureNode.levelNode = nodeObject( levelNode );
|
|
754
862
|
textureNode.referenceNode = this.getBase();
|
|
755
863
|
|
|
756
|
-
return
|
|
864
|
+
return textureNode;
|
|
757
865
|
|
|
758
866
|
}
|
|
759
867
|
|
|
@@ -781,7 +889,7 @@ class TextureNode extends UniformNode {
|
|
|
781
889
|
textureNode.biasNode = nodeObject( biasNode );
|
|
782
890
|
textureNode.referenceNode = this.getBase();
|
|
783
891
|
|
|
784
|
-
return
|
|
892
|
+
return textureNode;
|
|
785
893
|
|
|
786
894
|
}
|
|
787
895
|
|
|
@@ -807,7 +915,7 @@ class TextureNode extends UniformNode {
|
|
|
807
915
|
textureNode.compareNode = nodeObject( compareNode );
|
|
808
916
|
textureNode.referenceNode = this.getBase();
|
|
809
917
|
|
|
810
|
-
return
|
|
918
|
+
return textureNode;
|
|
811
919
|
|
|
812
920
|
}
|
|
813
921
|
|
|
@@ -824,7 +932,7 @@ class TextureNode extends UniformNode {
|
|
|
824
932
|
textureNode.gradNode = [ nodeObject( gradNodeX ), nodeObject( gradNodeY ) ];
|
|
825
933
|
textureNode.referenceNode = this.getBase();
|
|
826
934
|
|
|
827
|
-
return
|
|
935
|
+
return textureNode;
|
|
828
936
|
|
|
829
937
|
}
|
|
830
938
|
|
|
@@ -840,7 +948,7 @@ class TextureNode extends UniformNode {
|
|
|
840
948
|
textureNode.gatherNode = nodeObject( gatherNode );
|
|
841
949
|
textureNode.referenceNode = this.getBase();
|
|
842
950
|
|
|
843
|
-
return
|
|
951
|
+
return textureNode;
|
|
844
952
|
|
|
845
953
|
}
|
|
846
954
|
|
|
@@ -868,7 +976,7 @@ class TextureNode extends UniformNode {
|
|
|
868
976
|
textureNode.depthNode = nodeObject( depthNode );
|
|
869
977
|
textureNode.referenceNode = this.getBase();
|
|
870
978
|
|
|
871
|
-
return
|
|
979
|
+
return textureNode;
|
|
872
980
|
|
|
873
981
|
}
|
|
874
982
|
|
|
@@ -884,7 +992,7 @@ class TextureNode extends UniformNode {
|
|
|
884
992
|
textureNode.offsetNode = nodeObject( offsetNode );
|
|
885
993
|
textureNode.referenceNode = this.getBase();
|
|
886
994
|
|
|
887
|
-
return
|
|
995
|
+
return textureNode;
|
|
888
996
|
|
|
889
997
|
}
|
|
890
998
|
|
|
@@ -897,7 +1005,6 @@ class TextureNode extends UniformNode {
|
|
|
897
1005
|
data.value = this.value.toJSON( data.meta ).uuid;
|
|
898
1006
|
data.sampler = this.sampler;
|
|
899
1007
|
data.updateMatrix = this.updateMatrix;
|
|
900
|
-
data.updateType = this.updateType;
|
|
901
1008
|
|
|
902
1009
|
}
|
|
903
1010
|
|
|
@@ -908,35 +1015,6 @@ class TextureNode extends UniformNode {
|
|
|
908
1015
|
this.value = data.meta.textures[ data.value ];
|
|
909
1016
|
this.sampler = data.sampler;
|
|
910
1017
|
this.updateMatrix = data.updateMatrix;
|
|
911
|
-
this.updateType = data.updateType;
|
|
912
|
-
|
|
913
|
-
}
|
|
914
|
-
|
|
915
|
-
/**
|
|
916
|
-
* The update is used to implement the update of the uv transformation matrix.
|
|
917
|
-
*/
|
|
918
|
-
update() {
|
|
919
|
-
|
|
920
|
-
const texture = this.value;
|
|
921
|
-
const matrixUniform = this._matrixUniform;
|
|
922
|
-
|
|
923
|
-
if ( matrixUniform !== null ) matrixUniform.value = texture.matrix;
|
|
924
|
-
|
|
925
|
-
if ( texture.matrixAutoUpdate === true ) {
|
|
926
|
-
|
|
927
|
-
texture.updateMatrix();
|
|
928
|
-
|
|
929
|
-
}
|
|
930
|
-
|
|
931
|
-
//
|
|
932
|
-
|
|
933
|
-
const flipYUniform = this._flipYUniform;
|
|
934
|
-
|
|
935
|
-
if ( flipYUniform !== null ) {
|
|
936
|
-
|
|
937
|
-
flipYUniform.value = ( ( texture.image instanceof ImageBitmap && texture.flipY === true ) || texture.isRenderTargetTexture === true || texture.isFramebufferTexture === true || texture.isDepthTexture === true );
|
|
938
|
-
|
|
939
|
-
}
|
|
940
1018
|
|
|
941
1019
|
}
|
|
942
1020
|
|
|
@@ -993,7 +1071,7 @@ export const texture = ( value = EmptyTexture, uvNode = null, levelNode = null,
|
|
|
993
1071
|
|
|
994
1072
|
if ( value && value.isTextureNode === true ) {
|
|
995
1073
|
|
|
996
|
-
textureNode =
|
|
1074
|
+
textureNode = value.clone();
|
|
997
1075
|
textureNode.referenceNode = value.getBase(); // Ensure the reference is set to the original node
|
|
998
1076
|
|
|
999
1077
|
if ( uvNode !== null ) textureNode.uvNode = nodeObject( uvNode );
|
|
@@ -1011,14 +1089,22 @@ export const texture = ( value = EmptyTexture, uvNode = null, levelNode = null,
|
|
|
1011
1089
|
};
|
|
1012
1090
|
|
|
1013
1091
|
/**
|
|
1014
|
-
* TSL function for creating a uniform texture node.
|
|
1092
|
+
* TSL function for creating a non-mergeable uniform texture node.
|
|
1015
1093
|
*
|
|
1016
1094
|
* @tsl
|
|
1017
1095
|
* @function
|
|
1018
1096
|
* @param {?Texture} value - The texture.
|
|
1019
1097
|
* @returns {TextureNode}
|
|
1020
1098
|
*/
|
|
1021
|
-
export const uniformTexture = ( value = EmptyTexture ) =>
|
|
1099
|
+
export const uniformTexture = ( value = EmptyTexture ) => {
|
|
1100
|
+
|
|
1101
|
+
const textureNode = texture( value );
|
|
1102
|
+
|
|
1103
|
+
textureNode.mergeable = false;
|
|
1104
|
+
|
|
1105
|
+
return textureNode;
|
|
1106
|
+
|
|
1107
|
+
};
|
|
1022
1108
|
|
|
1023
1109
|
/**
|
|
1024
1110
|
* TSL function for creating a texture node that fetches/loads texels without interpolation.
|
|
@@ -42,7 +42,7 @@ class UniformArrayElementNode extends ArrayElementNode {
|
|
|
42
42
|
|
|
43
43
|
const snippet = super.generate( builder );
|
|
44
44
|
const type = this.getNodeType( builder );
|
|
45
|
-
const paddedType = this.node.getPaddedType();
|
|
45
|
+
const paddedType = this.node.getPaddedType( builder );
|
|
46
46
|
|
|
47
47
|
return builder.format( snippet, paddedType, type );
|
|
48
48
|
|
|
@@ -101,14 +101,6 @@ class UniformArrayNode extends BufferNode {
|
|
|
101
101
|
*/
|
|
102
102
|
this.elementType = elementType === null ? getValueType( value[ 0 ] ) : elementType;
|
|
103
103
|
|
|
104
|
-
/**
|
|
105
|
-
* The padded type. Uniform buffers must conform to a certain buffer layout
|
|
106
|
-
* so a separate type is computed to ensure correct buffer size.
|
|
107
|
-
*
|
|
108
|
-
* @type {string}
|
|
109
|
-
*/
|
|
110
|
-
this.paddedType = this.getPaddedType();
|
|
111
|
-
|
|
112
104
|
/**
|
|
113
105
|
* Overwritten since uniform array nodes are updated per render.
|
|
114
106
|
*
|
|
@@ -130,14 +122,14 @@ class UniformArrayNode extends BufferNode {
|
|
|
130
122
|
|
|
131
123
|
/**
|
|
132
124
|
* This method is overwritten since the node type is inferred from the
|
|
133
|
-
*
|
|
125
|
+
* padded type.
|
|
134
126
|
*
|
|
135
127
|
* @param {NodeBuilder} builder - The current node builder.
|
|
136
128
|
* @return {string} The node type.
|
|
137
129
|
*/
|
|
138
|
-
generateNodeType(
|
|
130
|
+
generateNodeType( builder ) {
|
|
139
131
|
|
|
140
|
-
return this.
|
|
132
|
+
return this.getPaddedType( builder );
|
|
141
133
|
|
|
142
134
|
}
|
|
143
135
|
|
|
@@ -156,9 +148,10 @@ class UniformArrayNode extends BufferNode {
|
|
|
156
148
|
/**
|
|
157
149
|
* Returns the padded type based on the element type.
|
|
158
150
|
*
|
|
151
|
+
* @param {NodeBuilder} builder - The current node builder.
|
|
159
152
|
* @return {string} The padded type.
|
|
160
153
|
*/
|
|
161
|
-
getPaddedType() {
|
|
154
|
+
getPaddedType( builder ) {
|
|
162
155
|
|
|
163
156
|
const elementType = this.elementType;
|
|
164
157
|
|
|
@@ -166,7 +159,7 @@ class UniformArrayNode extends BufferNode {
|
|
|
166
159
|
|
|
167
160
|
if ( elementType === 'mat2' ) {
|
|
168
161
|
|
|
169
|
-
paddedType = 'mat2';
|
|
162
|
+
paddedType = builder.renderer.backend.isWebGLBackend === true ? 'vec4' : 'mat2';
|
|
170
163
|
|
|
171
164
|
} else if ( /mat/.test( elementType ) === true ) {
|
|
172
165
|
|
|
@@ -330,7 +323,7 @@ class UniformArrayNode extends BufferNode {
|
|
|
330
323
|
|
|
331
324
|
let arrayType = Float32Array;
|
|
332
325
|
|
|
333
|
-
const paddedType = this.
|
|
326
|
+
const paddedType = this.getPaddedType( builder );
|
|
334
327
|
const paddedElementLength = builder.getTypeLength( paddedType );
|
|
335
328
|
|
|
336
329
|
if ( elementType.charAt( 0 ) === 'i' ) arrayType = Int32Array;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { modelViewMatrix } from './ModelNode.js';
|
|
3
3
|
import { positionLocal, positionPrevious } from './Position.js';
|
|
4
4
|
import { nodeImmutable } from '../tsl/TSLBase.js';
|
|
@@ -6,7 +6,6 @@ import { NodeUpdateType } from '../core/constants.js';
|
|
|
6
6
|
import { Matrix4 } from '../../math/Matrix4.js';
|
|
7
7
|
import { uniform } from '../core/UniformNode.js';
|
|
8
8
|
import { sub } from '../math/OperatorNode.js';
|
|
9
|
-
import { cameraProjectionMatrix } from './Camera.js';
|
|
10
9
|
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
11
10
|
|
|
12
11
|
const _objectData = new WeakMap();
|
|
@@ -19,9 +18,9 @@ const _objectData = new WeakMap();
|
|
|
19
18
|
* of the previous frame and uses them to compute offsets in NDC space.
|
|
20
19
|
* These offsets represent the final velocity.
|
|
21
20
|
*
|
|
22
|
-
* @augments
|
|
21
|
+
* @augments Node
|
|
23
22
|
*/
|
|
24
|
-
class VelocityNode extends
|
|
23
|
+
class VelocityNode extends Node {
|
|
25
24
|
|
|
26
25
|
static get type() {
|
|
27
26
|
|
|
@@ -37,7 +36,7 @@ class VelocityNode extends TempNode {
|
|
|
37
36
|
super( 'vec2' );
|
|
38
37
|
|
|
39
38
|
/**
|
|
40
|
-
*
|
|
39
|
+
* An optional projection matrix that overrides the camera's projection matrix.
|
|
41
40
|
*
|
|
42
41
|
* @type {?Matrix4}
|
|
43
42
|
* @default null
|
|
@@ -68,6 +67,13 @@ class VelocityNode extends TempNode {
|
|
|
68
67
|
*/
|
|
69
68
|
this.previousModelWorldMatrix = uniform( new Matrix4() );
|
|
70
69
|
|
|
70
|
+
/**
|
|
71
|
+
* The projection matrix of the current frame.
|
|
72
|
+
*
|
|
73
|
+
* @type {UniformNode<mat4>}
|
|
74
|
+
*/
|
|
75
|
+
this.currentProjectionMatrix = uniform( new Matrix4() ).setGroup( renderGroup );
|
|
76
|
+
|
|
71
77
|
/**
|
|
72
78
|
* Uniform node representing the previous projection matrix.
|
|
73
79
|
*
|
|
@@ -139,6 +145,7 @@ class VelocityNode extends TempNode {
|
|
|
139
145
|
|
|
140
146
|
this.previousProjectionMatrix.value.copy( cameraData.previousProjectionMatrix );
|
|
141
147
|
this.previousCameraViewMatrix.value.copy( cameraData.previousCameraViewMatrix );
|
|
148
|
+
this.currentProjectionMatrix.value.copy( cameraData.currentProjectionMatrix );
|
|
142
149
|
|
|
143
150
|
}
|
|
144
151
|
|
|
@@ -163,11 +170,9 @@ class VelocityNode extends TempNode {
|
|
|
163
170
|
*/
|
|
164
171
|
setup( /*builder*/ ) {
|
|
165
172
|
|
|
166
|
-
const projectionMatrix = ( this.projectionMatrix === null ) ? cameraProjectionMatrix : uniform( this.projectionMatrix );
|
|
167
|
-
|
|
168
173
|
const previousModelViewMatrix = this.previousCameraViewMatrix.mul( this.previousModelWorldMatrix );
|
|
169
174
|
|
|
170
|
-
const clipPositionCurrent =
|
|
175
|
+
const clipPositionCurrent = this.currentProjectionMatrix.mul( modelViewMatrix ).mul( positionLocal );
|
|
171
176
|
const clipPositionPrevious = this.previousProjectionMatrix.mul( previousModelViewMatrix ).mul( positionPrevious );
|
|
172
177
|
|
|
173
178
|
const ndcPositionCurrent = clipPositionCurrent.xy.div( clipPositionCurrent.w );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { addMethodChaining, nodeArray, nodeObject, nodeObjects, float } from '../tsl/TSLCore.js';
|
|
3
3
|
import { error } from '../../utils.js';
|
|
4
4
|
|
|
@@ -7,9 +7,9 @@ import { error } from '../../utils.js';
|
|
|
7
7
|
* with this module since they use the predefined TSL syntax `wgslFn` and `glslFn` which encapsulate
|
|
8
8
|
* this logic.
|
|
9
9
|
*
|
|
10
|
-
* @augments
|
|
10
|
+
* @augments Node
|
|
11
11
|
*/
|
|
12
|
-
class FunctionCallNode extends
|
|
12
|
+
class FunctionCallNode extends Node {
|
|
13
13
|
|
|
14
14
|
static get type() {
|
|
15
15
|
|
|
@@ -115,20 +115,24 @@ class FunctionNode extends CodeNode {
|
|
|
115
115
|
|
|
116
116
|
generate( builder, output ) {
|
|
117
117
|
|
|
118
|
-
super.generate( builder );
|
|
119
|
-
|
|
120
118
|
const nodeFunction = this.getNodeFunction( builder );
|
|
119
|
+
const nodeData = builder.getDataFromNode( this );
|
|
121
120
|
|
|
122
|
-
const name = nodeFunction.name;
|
|
123
121
|
const type = nodeFunction.type;
|
|
124
122
|
|
|
125
|
-
|
|
123
|
+
let propertyName = nodeData.functionPropertyName;
|
|
124
|
+
|
|
125
|
+
if ( propertyName === undefined ) {
|
|
126
|
+
|
|
127
|
+
// The includes and the function code are generated once per builder and shader stage,
|
|
128
|
+
// further calls only need the function name.
|
|
126
129
|
|
|
127
|
-
|
|
130
|
+
super.generate( builder );
|
|
128
131
|
|
|
129
|
-
const
|
|
132
|
+
const name = nodeFunction.name;
|
|
133
|
+
const nodeCode = builder.getCodeFromNode( this, type );
|
|
130
134
|
|
|
131
|
-
if (
|
|
135
|
+
if ( name !== '' ) {
|
|
132
136
|
|
|
133
137
|
// use a custom property name
|
|
134
138
|
|
|
@@ -136,17 +140,15 @@ class FunctionNode extends CodeNode {
|
|
|
136
140
|
|
|
137
141
|
builder.registerDeclaration( nodeCode );
|
|
138
142
|
|
|
139
|
-
nodeData.declarationRegistered = true;
|
|
140
|
-
|
|
141
143
|
}
|
|
142
144
|
|
|
143
|
-
|
|
145
|
+
propertyName = builder.getPropertyName( nodeCode );
|
|
144
146
|
|
|
145
|
-
|
|
147
|
+
nodeCode.code = nodeFunction.getCode( propertyName ) + '\n';
|
|
146
148
|
|
|
147
|
-
|
|
149
|
+
nodeData.functionPropertyName = propertyName;
|
|
148
150
|
|
|
149
|
-
|
|
151
|
+
}
|
|
150
152
|
|
|
151
153
|
if ( output === 'property' ) {
|
|
152
154
|
|