@unikia/upe-renderer 0.186.110 → 0.187.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -7
- package/UPSTREAM.md +4 -4
- package/build/three.core.js +853 -277
- package/build/three.module.js +1098 -1280
- package/build/three.tsl.js +41938 -686
- package/build/three.webgpu.js +10604 -49055
- package/build/three.webgpu.nodes.js +9249 -5788
- package/examples/jsm/Addons.js +2 -0
- package/examples/jsm/animation/CCDIKSolver.js +17 -5
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +27 -14
- package/examples/jsm/csm/CSMShader.js +74 -3
- package/examples/jsm/curves/CurveExtras.js +4 -4
- package/examples/jsm/curves/NURBSCurve.js +14 -0
- package/examples/jsm/exporters/EXRExporter.js +673 -16
- package/examples/jsm/exporters/GLTFExporter.js +4 -4
- package/examples/jsm/exporters/KTX2Exporter.js +1 -1
- package/examples/jsm/exporters/OBJExporter.js +48 -5
- package/examples/jsm/exporters/PLYExporter.js +22 -11
- package/examples/jsm/generators/CityGenerator.js +3 -2
- package/examples/jsm/generators/city/SkyscraperGenerator.js +63 -21
- package/examples/jsm/gpgpu/BitonicSort.js +30 -23
- package/examples/jsm/helpers/VertexTangentsHelper.js +1 -1
- package/examples/jsm/inspector/Extension.js +1 -1
- package/examples/jsm/inspector/Inspector.js +6 -46
- package/examples/jsm/inspector/RendererInspector.js +43 -8
- package/examples/jsm/inspector/Storage.js +49 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +32 -27
- package/examples/jsm/inspector/tabs/Parameters.js +5 -1
- package/examples/jsm/inspector/tabs/Performance.js +22 -7
- package/examples/jsm/inspector/tabs/Settings.js +1 -1
- package/examples/jsm/inspector/tabs/Timeline.js +83 -7
- package/examples/jsm/inspector/tabs/Viewer.js +25 -10
- package/examples/jsm/inspector/ui/Profiler.js +1 -1
- package/examples/jsm/inspector/ui/Style.js +21 -53
- package/examples/jsm/inspector/ui/Values.js +28 -3
- package/examples/jsm/libs/fflate.module.js +83 -56
- package/examples/jsm/libs/mikktspace.README.md +27 -0
- package/examples/jsm/libs/mikktspace.module.js +721 -109
- package/examples/jsm/lighting/ClusteredLighting.js +100 -2
- package/examples/jsm/lighting/LightMapper.js +295 -0
- package/examples/jsm/lighting/LightProbeGrid.js +242 -139
- package/examples/jsm/lighting/LightProbeGridWebGL.js +30 -14
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +54 -5
- package/examples/jsm/lighting/vxgi/VXGIIrradiance.js +43 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +13 -56
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +316 -1
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +69 -59
- package/examples/jsm/lights/SunLight.js +9 -4
- package/examples/jsm/lights/SunLightNode.js +3 -3
- package/examples/jsm/lines/LineMaterial.js +26 -10
- package/examples/jsm/loaders/3DMLoader.js +10 -1
- package/examples/jsm/loaders/3MFLoader.js +5 -1
- package/examples/jsm/loaders/AMFLoader.js +2 -0
- package/examples/jsm/loaders/BVHLoader.js +2 -0
- package/examples/jsm/loaders/ColladaLoader.js +8 -0
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +5 -1
- package/examples/jsm/loaders/EXRLoader.js +120 -104
- package/examples/jsm/loaders/FBXLoader.js +4 -0
- package/examples/jsm/loaders/FontLoader.js +2 -0
- package/examples/jsm/loaders/GCodeLoader.js +5 -9
- package/examples/jsm/loaders/GLTFLoader.js +112 -31
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +2 -0
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +3 -0
- package/examples/jsm/loaders/IESLoader.js +46 -12
- package/examples/jsm/loaders/JXLLoader.js +159 -0
- package/examples/jsm/loaders/KMZLoader.js +6 -0
- package/examples/jsm/loaders/KSPLATLoader.js +2 -0
- package/examples/jsm/loaders/KTX2Loader.js +49 -4
- package/examples/jsm/loaders/KTXLoader.js +5 -3
- package/examples/jsm/loaders/LDrawLoader.js +15 -22
- package/examples/jsm/loaders/LUT3dlLoader.js +5 -1
- package/examples/jsm/loaders/LUTCubeLoader.js +6 -2
- package/examples/jsm/loaders/LUTImageLoader.js +2 -0
- package/examples/jsm/loaders/LWOLoader.js +6 -0
- package/examples/jsm/loaders/MD2Loader.js +2 -0
- package/examples/jsm/loaders/MDDLoader.js +4 -0
- package/examples/jsm/loaders/MTLLoader.js +8 -0
- package/examples/jsm/loaders/MaterialXLoader.js +57 -5
- package/examples/jsm/loaders/NRRDLoader.js +4 -2
- package/examples/jsm/loaders/OBJLoader.js +10 -4
- package/examples/jsm/loaders/PCDLoader.js +6 -2
- package/examples/jsm/loaders/PDBLoader.js +5 -3
- package/examples/jsm/loaders/PLYLoader.js +39 -15
- package/examples/jsm/loaders/PVRLoader.js +2 -2
- package/examples/jsm/loaders/SPLATLoader.js +2 -0
- package/examples/jsm/loaders/SPZLoader.js +2 -0
- package/examples/jsm/loaders/STLLoader.js +3 -1
- package/examples/jsm/loaders/SVGLoader.js +27 -49
- package/examples/jsm/loaders/TDSLoader.js +4 -0
- package/examples/jsm/loaders/TGALoader.js +6 -5
- package/examples/jsm/loaders/TTFLoader.js +2 -0
- package/examples/jsm/loaders/USDLoader.js +14 -0
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -0
- package/examples/jsm/loaders/VOXLoader.js +3 -0
- package/examples/jsm/loaders/VRMLLoader.js +4 -0
- package/examples/jsm/loaders/VTKLoader.js +2 -0
- package/examples/jsm/loaders/XYZLoader.js +2 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +15 -8
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +610 -138
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +12 -95
- package/examples/jsm/loaders/materialx/MaterialXLog.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeDefs.js +99 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +760 -1
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +222 -372
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +163 -259
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +25 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +161 -159
- package/examples/jsm/loaders/usd/USDAParser.js +56 -47
- package/examples/jsm/loaders/usd/USDComposer.js +25 -30
- package/examples/jsm/math/ColorConverter.js +7 -3
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/OBB.js +3 -3
- package/examples/jsm/math/Octree.js +20 -17
- package/examples/jsm/objects/GaussianSplat.js +5 -4
- package/examples/jsm/objects/Reflector.js +5 -0
- package/examples/jsm/objects/SkyMesh.js +14 -7
- package/examples/jsm/objects/Water2Mesh.js +2 -2
- package/examples/jsm/physics/RapierPhysics.js +2 -2
- package/examples/jsm/pipelines/MeshletDrawingPipeline.js +5571 -0
- package/examples/jsm/pipelines/VisibilityBufferDrawingPipeline.js +954 -0
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/GTAOPass.js +26 -18
- package/examples/jsm/renderers/SVGRenderer.js +3 -2
- package/examples/jsm/shaders/GTAOShader.js +7 -4
- package/examples/jsm/shaders/PoissonDenoiseShader.js +1 -10
- package/examples/jsm/tsl/WebGLNodesHandler.js +21 -9
- package/examples/jsm/tsl/display/AfterImageNode.js +3 -3
- package/examples/jsm/tsl/display/BilateralBlurNode.js +3 -3
- package/examples/jsm/tsl/display/BloomNode.js +3 -3
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +8 -19
- package/examples/jsm/tsl/display/DenoiseNode.js +5 -5
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
- package/examples/jsm/tsl/display/DotScreenNode.js +3 -3
- package/examples/jsm/tsl/display/FSR1Node.js +3 -3
- package/examples/jsm/tsl/display/FXAANode.js +3 -10
- package/examples/jsm/tsl/display/FilmNode.js +3 -3
- package/examples/jsm/tsl/display/GTAONode.js +33 -25
- package/examples/jsm/tsl/display/GaussianBlurNode.js +3 -3
- package/examples/jsm/tsl/display/GodraysNode.js +5 -19
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +8 -4
- package/examples/jsm/tsl/display/LensflareNode.js +3 -3
- package/examples/jsm/tsl/display/Lut3DNode.js +3 -3
- package/examples/jsm/tsl/display/OITPassNode.js +0 -11
- package/examples/jsm/tsl/display/OutlineNode.js +107 -5
- package/examples/jsm/tsl/display/PixelationPassNode.js +85 -193
- package/examples/jsm/tsl/display/RGBShiftNode.js +3 -3
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +23 -126
- package/examples/jsm/tsl/display/SMAANode.js +3 -3
- package/examples/jsm/tsl/display/SSAONode.js +6 -20
- package/examples/jsm/tsl/display/SSGINode.js +36 -29
- package/examples/jsm/tsl/display/SSRNode.js +135 -63
- package/examples/jsm/tsl/display/SSSNode.js +6 -20
- package/examples/jsm/tsl/display/SharpenNode.js +3 -3
- package/examples/jsm/tsl/display/SobelOperatorNode.js +3 -3
- package/examples/jsm/tsl/display/TAAUNode.js +10 -42
- package/examples/jsm/tsl/display/TRAANode.js +11 -43
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +42 -47
- package/examples/jsm/tsl/display/TransitionNode.js +3 -3
- package/examples/jsm/tsl/display/lensDirt.js +30 -0
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +482 -121
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +41 -140
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +72 -25
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +6 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +6 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +102 -14
- package/examples/jsm/tsl/utils/Raymarching.js +1 -1
- package/examples/jsm/tsl/utils/SoftParticles.js +5 -12
- package/examples/jsm/tsl/utils/SpecularHelpers.js +47 -70
- package/examples/jsm/tsl/utils/TAAUtils.js +6 -17
- package/examples/jsm/utils/BufferGeometryUtils.js +110 -88
- package/examples/jsm/utils/MeshletGeometryUtils.js +417 -0
- package/examples/jsm/utils/SceneOptimizer.js +2 -1
- package/examples/jsm/utils/SceneUtils.js +1 -1
- package/examples/jsm/utils/unwrapUVs.js +865 -0
- package/examples/jsm/webxr/XREstimatedLight.js +11 -4
- package/package.json +3 -3
- package/src/Three.TSL.js +2 -683
- package/src/Three.WebGPU.Nodes.js +2 -1
- package/src/Three.WebGPU.js +2 -1
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationUtils.js +1 -3
- package/src/animation/KeyframeTrack.js +19 -0
- package/src/cameras/ArrayCamera.js +12 -0
- package/src/cameras/CubeCamera.js +3 -3
- package/src/constants.js +1 -9
- package/src/core/BufferAttribute.js +57 -21
- package/src/core/BufferGeometry.js +5 -13
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +28 -18
- package/src/core/InterleavedBufferAttribute.js +54 -20
- package/src/core/Object3D.js +19 -9
- package/src/core/Raycaster.js +2 -0
- package/src/core/RenderTarget.js +11 -5
- package/src/core/UniformsGroup.js +7 -3
- package/src/extras/PMREMGenerator.js +392 -685
- package/src/extras/core/Curve.js +4 -0
- package/src/extras/core/CurvePath.js +13 -0
- package/src/extras/core/ShapePath.js +1 -1
- package/src/geometries/EdgesGeometry.js +12 -10
- package/src/geometries/LatheGeometry.js +2 -0
- package/src/helpers/PolarGridHelper.js +1 -1
- package/src/lights/Light.js +11 -0
- package/src/lights/LightProbe.js +2 -0
- package/src/lights/LightShadow.js +2 -0
- package/src/loaders/AnimationLoader.js +2 -0
- package/src/loaders/AudioLoader.js +2 -0
- package/src/loaders/BufferGeometryLoader.js +2 -0
- package/src/loaders/CompressedTextureLoader.js +2 -0
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/DataTextureLoader.js +2 -0
- package/src/loaders/FileLoader.js +2 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ImageLoader.js +1 -0
- package/src/loaders/Loader.js +47 -0
- package/src/loaders/MaterialLoader.js +2 -0
- package/src/loaders/ObjectLoader.js +27 -8
- package/src/loaders/TextureLoader.js +5 -3
- package/src/loaders/nodes/NodeLoader.js +2 -0
- package/src/materials/Material.js +21 -2
- package/src/materials/MeshDepthMaterial.js +1 -1
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +1 -1
- package/src/materials/MeshMatcapMaterial.js +1 -1
- package/src/materials/MeshNormalMaterial.js +1 -1
- package/src/materials/MeshPhongMaterial.js +1 -1
- package/src/materials/MeshPhysicalMaterial.js +90 -11
- package/src/materials/MeshStandardMaterial.js +1 -1
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/nodes/Line2NodeMaterial.js +32 -10
- package/src/materials/nodes/MeshLambertNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhongNodeMaterial.js +13 -0
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +40 -5
- package/src/materials/nodes/MeshToonNodeMaterial.js +13 -0
- package/src/materials/nodes/NodeMaterial.js +36 -16
- package/src/materials/nodes/NodeMaterialInstance.js +193 -0
- package/src/materials/nodes/NodeMaterials.js +1 -0
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -3
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -22
- package/src/math/Box3.js +2 -2
- package/src/math/Color.js +8 -8
- package/src/math/ColorManagement.js +2 -21
- package/src/math/FrustumArray.js +12 -0
- package/src/math/Interpolant.js +1 -1
- package/src/math/Line3.js +2 -4
- package/src/math/MathUtils.js +33 -46
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +1 -1
- package/src/math/Matrix4.js +1 -1
- package/src/math/Triangle.js +2 -1
- package/src/math/Vector2.js +1 -1
- package/src/math/Vector3.js +1 -1
- package/src/math/Vector4.js +1 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +2 -0
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/Batch.js +29 -23
- package/src/nodes/accessors/BufferAttributeNode.js +21 -1
- package/src/nodes/accessors/BuiltinNode.js +6 -0
- package/src/nodes/accessors/Camera.js +100 -93
- package/src/nodes/accessors/ClippingNode.js +17 -6
- package/src/nodes/accessors/CubeTextureNode.js +12 -24
- package/src/nodes/accessors/Instance.js +198 -160
- package/src/nodes/accessors/Lights.js +19 -6
- package/src/nodes/accessors/MaterialNode.js +33 -4
- package/src/nodes/accessors/Morph.js +81 -22
- package/src/nodes/accessors/Normal.js +0 -42
- package/src/nodes/accessors/Object3DNode.js +6 -0
- package/src/nodes/accessors/PointUVNode.js +6 -0
- package/src/nodes/accessors/ReferenceAttributeNode.js +279 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -0
- package/src/nodes/accessors/ReferenceNode.js +6 -0
- package/src/nodes/accessors/Skinning.js +57 -52
- package/src/nodes/accessors/StorageBufferNode.js +3 -12
- package/src/nodes/accessors/TextureBicubic.js +30 -27
- package/src/nodes/accessors/TextureNode.js +164 -78
- package/src/nodes/accessors/TextureSizeNode.js +6 -0
- package/src/nodes/accessors/UniformArrayNode.js +8 -15
- package/src/nodes/accessors/VelocityNode.js +13 -8
- package/src/nodes/code/CodeNode.js +6 -0
- package/src/nodes/code/ExpressionNode.js +6 -0
- package/src/nodes/code/FunctionCallNode.js +3 -3
- package/src/nodes/code/FunctionNode.js +15 -13
- package/src/nodes/core/ArrayNode.js +3 -3
- package/src/nodes/core/AssignNode.js +10 -9
- package/src/nodes/core/AttributeNode.js +39 -0
- package/src/nodes/core/BypassNode.js +6 -0
- package/src/nodes/core/ConstNode.js +31 -1
- package/src/nodes/core/ContextNode.js +11 -6
- package/src/nodes/core/IndexNode.js +6 -0
- package/src/nodes/core/InputNode.js +6 -0
- package/src/nodes/core/InspectorNode.js +17 -31
- package/src/nodes/core/IsolateNode.js +8 -0
- package/src/nodes/core/Node.js +367 -67
- package/src/nodes/core/NodeBuilder.js +664 -222
- package/src/nodes/core/NodeUtils.js +25 -0
- package/src/nodes/core/NodeVar.js +10 -1
- package/src/nodes/core/OutputStructNode.js +6 -0
- package/src/nodes/core/OverrideContextNode.js +38 -37
- package/src/nodes/core/PropertyNode.js +14 -0
- package/src/nodes/core/StackNode.js +33 -21
- package/src/nodes/core/StructNode.js +6 -0
- package/src/nodes/core/StructTypeNode.js +6 -0
- package/src/nodes/core/SubBuildNode.js +8 -0
- package/src/nodes/core/TempNode.js +10 -35
- package/src/nodes/core/UniformGroupNode.js +6 -0
- package/src/nodes/core/VarNode.js +43 -135
- package/src/nodes/core/VaryingNode.js +33 -2
- package/src/nodes/display/BlendModes.js +5 -40
- package/src/nodes/display/BumpMapNode.js +17 -7
- package/src/nodes/display/ColorAdjustment.js +22 -10
- package/src/nodes/display/ColorSpaceFunctions.js +2 -14
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/FrontFacingNode.js +6 -0
- package/src/nodes/display/NormalMapNode.js +3 -3
- package/src/nodes/display/PassNode.js +75 -16
- package/src/nodes/display/RenderOutputNode.js +22 -5
- package/src/nodes/display/ScreenNode.js +6 -0
- package/src/nodes/display/ToneMappingFunctions.js +9 -51
- package/src/nodes/display/ToneMappingNode.js +3 -3
- package/src/nodes/display/ToonOutlinePassNode.js +66 -2
- package/src/nodes/display/ViewportDepthNode.js +34 -4
- package/src/nodes/functions/BSDF/BRDF_EON.js +65 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +5 -3
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +2 -16
- package/src/nodes/functions/BSDF/D_GGX.js +1 -8
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +7 -10
- package/src/nodes/functions/BSDF/LTC.js +20 -47
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +1 -9
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +10 -13
- package/src/nodes/functions/PhysicalLightingModel.js +84 -51
- package/src/nodes/functions/VolumetricLightingModel.js +1 -1
- package/src/nodes/functions/material/getAlphaHashThreshold.js +3 -9
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +10 -11
- package/src/nodes/functions/material/getRoughness.js +3 -1
- package/src/nodes/geometry/RangeNode.js +52 -69
- package/src/nodes/gpgpu/AtomicFunctionNode.js +11 -6
- package/src/nodes/gpgpu/BarrierNode.js +6 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +6 -0
- package/src/nodes/gpgpu/ComputeNode.js +6 -0
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +38 -29
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +6 -0
- package/src/nodes/lighting/AnalyticLightNode.js +7 -14
- package/src/nodes/lighting/BasicEnvironmentNode.js +5 -1
- package/src/nodes/lighting/EnvironmentNode.js +58 -8
- package/src/nodes/lighting/IESSpotLightNode.js +19 -4
- package/src/nodes/lighting/LightProbeNode.js +2 -1
- package/src/nodes/lighting/LightUtils.js +2 -2
- package/src/nodes/lighting/LightingNode.js +6 -0
- package/src/nodes/lighting/LightsNode.js +26 -32
- package/src/nodes/lighting/PointShadowNode.js +92 -48
- package/src/nodes/lighting/ProjectorLightNode.js +1 -1
- package/src/nodes/lighting/RectAreaLightNode.js +13 -14
- package/src/nodes/lighting/ShadowBaseNode.js +9 -17
- package/src/nodes/lighting/ShadowFilterNode.js +26 -3
- package/src/nodes/lighting/ShadowNode.js +13 -11
- package/src/nodes/materialx/MaterialXColor.js +2 -14
- package/src/nodes/materialx/MaterialXColorTransform.js +1 -7
- package/src/nodes/materialx/MaterialXNodes.js +8 -11
- package/src/nodes/materialx/MaterialXNoise.js +195 -454
- package/src/nodes/math/BitcastNode.js +5 -5
- package/src/nodes/math/BitcountNode.js +18 -46
- package/src/nodes/math/ConditionalNode.js +92 -22
- package/src/nodes/math/Hash.js +1 -1
- package/src/nodes/math/MathNode.js +86 -64
- package/src/nodes/math/MathUtils.js +2 -2
- package/src/nodes/math/OperatorNode.js +42 -59
- package/src/nodes/math/PackFloatNode.js +9 -9
- package/src/nodes/math/Packed4x8IntegerNode.js +20 -52
- package/src/nodes/math/TriNoise3D.js +3 -23
- package/src/nodes/math/UnpackFloatNode.js +9 -9
- package/src/nodes/pmrem/PMREMNode.js +38 -75
- package/src/nodes/pmrem/PMREMUtils.js +108 -272
- package/src/nodes/procedural/Checker.js +1 -1
- package/src/nodes/tsl/TSLCore.js +199 -74
- package/src/nodes/utils/ArrayElementNode.js +19 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +2 -2
- package/src/nodes/utils/EventNode.js +6 -0
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +7 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +14 -9
- package/src/nodes/utils/MemberNode.js +18 -0
- package/src/nodes/utils/PostProcessingUtils.js +20 -25
- package/src/nodes/utils/RTTNode.js +2 -0
- package/src/nodes/utils/ReflectorNode.js +24 -0
- package/src/nodes/utils/RotateNode.js +3 -3
- package/src/nodes/utils/SampleNode.js +6 -0
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +6 -0
- package/src/nodes/utils/UVUtils.js +2 -2
- package/src/objects/BatchedMesh.js +146 -15
- package/src/objects/InstancedMesh.js +12 -4
- package/src/objects/Line.js +20 -0
- package/src/objects/Mesh.js +8 -0
- package/src/objects/Points.js +20 -0
- package/src/objects/Skeleton.js +26 -0
- package/src/objects/SkinnedMesh.js +3 -3
- package/src/objects/Sprite.js +10 -0
- package/src/renderers/WebGLRenderer.js +104 -70
- package/src/renderers/common/Animation.js +5 -1
- package/src/renderers/common/Attributes.js +67 -57
- package/src/renderers/common/Backend.js +78 -3
- package/src/renderers/common/BindGroup.js +11 -0
- package/src/renderers/common/Binding.js +0 -11
- package/src/renderers/common/Bindings.js +116 -10
- package/src/renderers/common/Buffer.js +1 -1
- package/src/renderers/common/ClippingContext.js +12 -1
- package/src/renderers/common/ComputePipeline.js +17 -1
- package/src/renderers/common/DirectRenderPipeline.js +7 -3
- package/src/renderers/common/Geometries.js +170 -132
- package/src/renderers/common/Info.js +1 -1
- package/src/renderers/common/InspectorBase.js +5 -5
- package/src/renderers/common/Lighting.js +59 -0
- package/src/renderers/common/Pipelines.js +26 -12
- package/src/renderers/common/ProgrammableStage.js +1 -17
- package/src/renderers/common/RenderContext.js +21 -0
- package/src/renderers/common/RenderContexts.js +13 -4
- package/src/renderers/common/RenderObject.js +111 -35
- package/src/renderers/common/RenderObjects.js +37 -19
- package/src/renderers/common/Renderer.js +537 -295
- package/src/renderers/common/RendererUtils.js +15 -0
- package/src/renderers/common/StandardDrawingPipeline.js +343 -0
- package/src/renderers/common/Storage3DTexture.js +11 -0
- package/src/renderers/common/StorageArrayTexture.js +10 -0
- package/src/renderers/common/StorageTexture.js +0 -9
- package/src/renderers/common/Textures.js +144 -37
- package/src/renderers/common/UniformsGroup.js +19 -0
- package/src/renderers/common/XRManager.js +10 -91
- package/src/renderers/common/extras/PMREMGenerator.js +298 -576
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -5
- package/src/renderers/common/nodes/NodeLibrary.js +11 -35
- package/src/renderers/common/nodes/NodeManager.js +80 -31
- package/src/renderers/common/nodes/NodeSampledTexture.js +14 -0
- package/src/renderers/common/nodes/NodeSampler.js +14 -0
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +1 -14
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +13 -4
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +8 -8
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +23 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +21 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +18 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +104 -7
- package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +36 -20
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk.js +0 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +4 -18
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +8 -1
- package/src/renderers/shaders/ShaderLib.js +3 -0
- package/src/renderers/shaders/UniformsLib.js +4 -5
- package/src/renderers/webgl/WebGLBackground.js +3 -3
- package/src/renderers/webgl/WebGLBindingStates.js +4 -2
- package/src/renderers/webgl/WebGLCapabilities.js +7 -1
- package/src/renderers/webgl/WebGLEnvironments.js +2 -2
- package/src/renderers/webgl/WebGLGeometries.js +42 -14
- package/src/renderers/webgl/WebGLMaterials.js +15 -2
- package/src/renderers/webgl/WebGLOutput.js +37 -1
- package/src/renderers/webgl/WebGLProgram.js +13 -54
- package/src/renderers/webgl/WebGLPrograms.js +22 -8
- package/src/renderers/webgl/WebGLRenderStates.js +11 -8
- package/src/renderers/webgl/WebGLShadowMap.js +6 -4
- package/src/renderers/webgl/WebGLState.js +10 -6
- package/src/renderers/webgl/WebGLTextures.js +129 -77
- package/src/renderers/webgl/WebGLUniforms.js +44 -6
- package/src/renderers/webgl/WebGLUniformsGroups.js +75 -69
- package/src/renderers/webgl-fallback/WebGLBackend.js +206 -278
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +154 -20
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +45 -42
- package/src/renderers/webgl-fallback/utils/WebGLState.js +29 -4
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +129 -49
- package/src/renderers/webgl-fallback/utils/WebGLVertexArrayUtils.js +346 -0
- package/src/renderers/webgpu/WebGPUBackend.js +140 -82
- package/src/renderers/webgpu/WebGPURenderer.js +1 -1
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +10 -10
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +135 -60
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +128 -55
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +15 -12
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +55 -19
- package/src/renderers/webgpu/utils/WebGPUUtils.js +20 -3
- package/src/renderers/webxr/WebXRController.js +3 -3
- package/src/renderers/webxr/WebXRManager.js +5 -90
- package/src/scenes/Scene.js +4 -4
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/DepthTexture.js +2 -2
- package/src/textures/FramebufferTexture.js +11 -0
- package/src/textures/Texture.js +29 -1
- package/src/textures/TextureSource.js +1 -1
- package/src/upe.js +1 -1
- package/src/utils.js +4 -4
- package/examples/jsm/libs/surfaceNet.js +0 -201
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +0 -186
package/src/nodes/tsl/TSLCore.js
CHANGED
|
@@ -13,6 +13,8 @@ import { warn, error } from '../../utils.js';
|
|
|
13
13
|
|
|
14
14
|
let currentStack = null;
|
|
15
15
|
|
|
16
|
+
const _secureNodeBuilders = new WeakMap();
|
|
17
|
+
|
|
16
18
|
const NodeElements = new Map();
|
|
17
19
|
|
|
18
20
|
// Extend Node Class for TSL using prototype
|
|
@@ -38,8 +40,6 @@ export function addMethodChaining( name, nodeElement ) {
|
|
|
38
40
|
|
|
39
41
|
Node.prototype[ name ] = function ( ...params ) {
|
|
40
42
|
|
|
41
|
-
//if ( name === 'toVarIntent' ) return this;
|
|
42
|
-
|
|
43
43
|
return this.isStackNode ? this.addToStack( nodeElement( ...params ) ) : nodeElement( this, ...params );
|
|
44
44
|
|
|
45
45
|
};
|
|
@@ -85,12 +85,6 @@ Node.prototype.assign = function ( ...params ) {
|
|
|
85
85
|
|
|
86
86
|
};
|
|
87
87
|
|
|
88
|
-
Node.prototype.toVarIntent = function () {
|
|
89
|
-
|
|
90
|
-
return this;
|
|
91
|
-
|
|
92
|
-
};
|
|
93
|
-
|
|
94
88
|
Node.prototype.get = function ( value ) {
|
|
95
89
|
|
|
96
90
|
return new MemberNode( this, value );
|
|
@@ -101,6 +95,26 @@ Node.prototype.get = function ( value ) {
|
|
|
101
95
|
|
|
102
96
|
const proto = {};
|
|
103
97
|
|
|
98
|
+
// Cache of the swizzle and element nodes, a proxy of a node has its own cache
|
|
99
|
+
|
|
100
|
+
const _swizzleCache = new WeakMap();
|
|
101
|
+
|
|
102
|
+
function getSwizzleCache( node ) {
|
|
103
|
+
|
|
104
|
+
let cache = _swizzleCache.get( node );
|
|
105
|
+
|
|
106
|
+
if ( cache === undefined ) {
|
|
107
|
+
|
|
108
|
+
cache = {};
|
|
109
|
+
|
|
110
|
+
_swizzleCache.set( node, cache );
|
|
111
|
+
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return cache;
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
104
118
|
// Set swizzle properties for xyzw, rgba, and stpq.
|
|
105
119
|
|
|
106
120
|
function setProtoSwizzle( property, altA, altB ) {
|
|
@@ -111,17 +125,17 @@ function setProtoSwizzle( property, altA, altB ) {
|
|
|
111
125
|
|
|
112
126
|
get() {
|
|
113
127
|
|
|
114
|
-
|
|
128
|
+
const cache = getSwizzleCache( this );
|
|
115
129
|
|
|
116
130
|
//
|
|
117
131
|
|
|
118
|
-
let split =
|
|
132
|
+
let split = cache[ property ];
|
|
119
133
|
|
|
120
134
|
if ( split === undefined ) {
|
|
121
135
|
|
|
122
136
|
split = new SplitNode( this, property );
|
|
123
137
|
|
|
124
|
-
|
|
138
|
+
cache[ property ] = split;
|
|
125
139
|
|
|
126
140
|
}
|
|
127
141
|
|
|
@@ -217,17 +231,17 @@ for ( let i = 0; i < 32; i ++ ) {
|
|
|
217
231
|
|
|
218
232
|
get() {
|
|
219
233
|
|
|
220
|
-
|
|
234
|
+
const cache = getSwizzleCache( this );
|
|
221
235
|
|
|
222
236
|
//
|
|
223
237
|
|
|
224
|
-
let element =
|
|
238
|
+
let element = cache[ i ];
|
|
225
239
|
|
|
226
240
|
if ( element === undefined ) {
|
|
227
241
|
|
|
228
242
|
element = new ArrayElementNode( this, new ConstNode( i, 'uint' ) );
|
|
229
243
|
|
|
230
|
-
|
|
244
|
+
cache[ i ] = element;
|
|
231
245
|
|
|
232
246
|
}
|
|
233
247
|
|
|
@@ -254,17 +268,17 @@ function setProtoProperty( property, target ) {
|
|
|
254
268
|
|
|
255
269
|
get() {
|
|
256
270
|
|
|
257
|
-
|
|
271
|
+
const cache = getSwizzleCache( this );
|
|
258
272
|
|
|
259
273
|
//
|
|
260
274
|
|
|
261
|
-
let split =
|
|
275
|
+
let split = cache[ target ];
|
|
262
276
|
|
|
263
277
|
if ( split === undefined ) {
|
|
264
278
|
|
|
265
279
|
split = new SplitNode( this, target );
|
|
266
280
|
|
|
267
|
-
|
|
281
|
+
cache[ target ] = split;
|
|
268
282
|
|
|
269
283
|
}
|
|
270
284
|
|
|
@@ -301,7 +315,7 @@ const ShaderNodeObject = function ( obj, altType = null ) {
|
|
|
301
315
|
|
|
302
316
|
} else if ( ( altType === null && ( type === 'float' || type === 'boolean' ) ) || ( type && type !== 'shader' && type !== 'string' ) ) {
|
|
303
317
|
|
|
304
|
-
return
|
|
318
|
+
return getConstNode( obj, altType );
|
|
305
319
|
|
|
306
320
|
} else if ( type === 'shader' ) {
|
|
307
321
|
|
|
@@ -345,18 +359,14 @@ const ShaderNodeProxy = function ( NodeClass, scope = null, factor = null, setti
|
|
|
345
359
|
|
|
346
360
|
if ( settings !== null ) {
|
|
347
361
|
|
|
348
|
-
|
|
362
|
+
Object.assign( node, settings );
|
|
349
363
|
|
|
350
|
-
if ( settings.
|
|
364
|
+
if ( settings.assignable === true ) {
|
|
351
365
|
|
|
352
|
-
node = node.
|
|
366
|
+
node = node.toAssignable();
|
|
353
367
|
|
|
354
368
|
}
|
|
355
369
|
|
|
356
|
-
} else {
|
|
357
|
-
|
|
358
|
-
node = nodeObject( node );
|
|
359
|
-
|
|
360
370
|
}
|
|
361
371
|
|
|
362
372
|
return node;
|
|
@@ -459,6 +469,13 @@ class ShaderCallNodeInternal extends Node {
|
|
|
459
469
|
|
|
460
470
|
}
|
|
461
471
|
|
|
472
|
+
isCacheable( builder ) {
|
|
473
|
+
|
|
474
|
+
// A call is an expression unless its body has statements.
|
|
475
|
+
return this.getOutputNode( builder ).nodes.length === 0;
|
|
476
|
+
|
|
477
|
+
}
|
|
478
|
+
|
|
462
479
|
generateNodeType( builder ) {
|
|
463
480
|
|
|
464
481
|
return this.shaderNode.nodeType || this.getOutputNode( builder ).getNodeType( builder );
|
|
@@ -502,45 +519,44 @@ class ShaderCallNodeInternal extends Node {
|
|
|
502
519
|
|
|
503
520
|
let result = null;
|
|
504
521
|
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
// build inputs first
|
|
522
|
+
// A layout call needs every input. Missing inputs are completed with the default values
|
|
523
|
+
// of the function parameters; if they can't be resolved, the function is expanded inline.
|
|
508
524
|
|
|
509
|
-
|
|
525
|
+
const layoutInputs = shaderNode.layout ? builder._getLayoutInputs( shaderNode, rawInputs ) : null;
|
|
510
526
|
|
|
511
|
-
|
|
527
|
+
if ( layoutInputs !== null ) {
|
|
512
528
|
|
|
513
|
-
|
|
529
|
+
// build inputs first, use layout inputs to ensure that no extra parameters are built
|
|
514
530
|
|
|
515
|
-
|
|
531
|
+
const layoutParameters = shaderNode.layout.inputs;
|
|
516
532
|
|
|
517
|
-
|
|
533
|
+
if ( isArrayAsParameter( layoutInputs ) ) {
|
|
518
534
|
|
|
519
|
-
|
|
535
|
+
const rawArrayParameters = layoutInputs;
|
|
520
536
|
|
|
521
|
-
|
|
537
|
+
for ( let i = 0; i < layoutParameters.length; i ++ ) {
|
|
522
538
|
|
|
523
|
-
|
|
539
|
+
const rawParameter = rawArrayParameters[ i ];
|
|
524
540
|
|
|
525
|
-
|
|
541
|
+
if ( rawParameter && rawParameter.isNode ) {
|
|
526
542
|
|
|
527
|
-
|
|
543
|
+
rawParameter.build( builder );
|
|
528
544
|
|
|
529
545
|
}
|
|
530
546
|
|
|
531
|
-
}
|
|
547
|
+
}
|
|
532
548
|
|
|
533
|
-
|
|
549
|
+
} else {
|
|
534
550
|
|
|
535
|
-
|
|
551
|
+
const rawObjectParameters = layoutInputs[ 0 ];
|
|
536
552
|
|
|
537
|
-
|
|
553
|
+
for ( const param of layoutParameters ) {
|
|
538
554
|
|
|
539
|
-
|
|
555
|
+
const rawParameter = rawObjectParameters[ param.name ];
|
|
540
556
|
|
|
541
|
-
|
|
557
|
+
if ( rawParameter && rawParameter.isNode ) {
|
|
542
558
|
|
|
543
|
-
|
|
559
|
+
rawParameter.build( builder );
|
|
544
560
|
|
|
545
561
|
}
|
|
546
562
|
|
|
@@ -554,37 +570,45 @@ class ShaderCallNodeInternal extends Node {
|
|
|
554
570
|
|
|
555
571
|
//
|
|
556
572
|
|
|
557
|
-
const inputs =
|
|
573
|
+
const inputs = getLayoutParameters( layoutInputs );
|
|
558
574
|
|
|
559
575
|
result = functionNode.call( inputs );
|
|
560
576
|
|
|
561
577
|
} else {
|
|
562
578
|
|
|
563
|
-
|
|
579
|
+
let secureNodeBuilder = _secureNodeBuilders.get( builder );
|
|
580
|
+
|
|
581
|
+
if ( secureNodeBuilder === undefined ) {
|
|
582
|
+
|
|
583
|
+
secureNodeBuilder = new Proxy( builder, {
|
|
564
584
|
|
|
565
|
-
|
|
585
|
+
get: ( target, property, receiver ) => {
|
|
566
586
|
|
|
567
|
-
|
|
587
|
+
let value;
|
|
568
588
|
|
|
569
|
-
|
|
589
|
+
if ( Symbol.iterator === property ) {
|
|
570
590
|
|
|
571
|
-
|
|
591
|
+
value = function* () {
|
|
572
592
|
|
|
573
|
-
|
|
593
|
+
yield undefined;
|
|
574
594
|
|
|
575
|
-
|
|
595
|
+
};
|
|
576
596
|
|
|
577
|
-
|
|
597
|
+
} else {
|
|
598
|
+
|
|
599
|
+
value = Reflect.get( target, property, receiver );
|
|
578
600
|
|
|
579
|
-
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
return value;
|
|
580
604
|
|
|
581
605
|
}
|
|
582
606
|
|
|
583
|
-
|
|
607
|
+
} );
|
|
584
608
|
|
|
585
|
-
|
|
609
|
+
_secureNodeBuilders.set( builder, secureNodeBuilder );
|
|
586
610
|
|
|
587
|
-
}
|
|
611
|
+
}
|
|
588
612
|
|
|
589
613
|
//
|
|
590
614
|
|
|
@@ -634,13 +658,34 @@ class ShaderCallNodeInternal extends Node {
|
|
|
634
658
|
|
|
635
659
|
}
|
|
636
660
|
|
|
661
|
+
generate( builder, output ) {
|
|
662
|
+
|
|
663
|
+
return this.getOutputNode( builder ).build( builder, output ) || '';
|
|
664
|
+
|
|
665
|
+
}
|
|
666
|
+
|
|
637
667
|
build( builder, output = null ) {
|
|
638
668
|
|
|
669
|
+
// The call does not use Node.build(), so it handles the inspector node, shared and overridden nodes and assignable state here.
|
|
670
|
+
this._setupInspector( builder );
|
|
671
|
+
|
|
672
|
+
const refNode = this.getShared( builder );
|
|
673
|
+
|
|
674
|
+
if ( this !== refNode ) {
|
|
675
|
+
|
|
676
|
+
return refNode.build( builder, output );
|
|
677
|
+
|
|
678
|
+
}
|
|
679
|
+
|
|
639
680
|
let result = null;
|
|
640
681
|
|
|
641
682
|
const buildStage = builder.getBuildStage();
|
|
642
683
|
const properties = builder.getNodeProperties( this );
|
|
643
684
|
|
|
685
|
+
const nodeData = this.assignable === true ? builder.getDataFromNode( this ) : null;
|
|
686
|
+
|
|
687
|
+
if ( nodeData !== null ) this._updateAssignable( builder, nodeData );
|
|
688
|
+
|
|
644
689
|
const subBuildOutput = builder.getSubBuildOutput( this );
|
|
645
690
|
const outputNode = this.getOutputNode( builder );
|
|
646
691
|
|
|
@@ -687,11 +732,31 @@ class ShaderCallNodeInternal extends Node {
|
|
|
687
732
|
|
|
688
733
|
} else if ( buildStage === 'analyze' ) {
|
|
689
734
|
|
|
690
|
-
|
|
735
|
+
// A variable is evaluated once, so its value is analyzed only once.
|
|
736
|
+
if ( nodeData === null || this._isVariable( builder, nodeData ) === false || builder.increaseUsage( this ) === 1 ) {
|
|
737
|
+
|
|
738
|
+
outputNode.build( builder, output );
|
|
739
|
+
|
|
740
|
+
}
|
|
691
741
|
|
|
692
742
|
} else if ( buildStage === 'generate' ) {
|
|
693
743
|
|
|
694
|
-
|
|
744
|
+
if ( nodeData !== null && this._isVariable( builder, nodeData ) ) {
|
|
745
|
+
|
|
746
|
+
this._checkFlowBlock( builder, nodeData );
|
|
747
|
+
|
|
748
|
+
const isCached = nodeData.propertyName !== undefined;
|
|
749
|
+
const flowCodeLength = builder.flow.code.length;
|
|
750
|
+
|
|
751
|
+
result = this._buildVariable( builder, nodeData, output );
|
|
752
|
+
|
|
753
|
+
this._setFlowBlock( builder, nodeData, isCached, flowCodeLength );
|
|
754
|
+
|
|
755
|
+
} else {
|
|
756
|
+
|
|
757
|
+
result = outputNode.build( builder, output ) || '';
|
|
758
|
+
|
|
759
|
+
}
|
|
695
760
|
|
|
696
761
|
}
|
|
697
762
|
|
|
@@ -749,7 +814,7 @@ function getProxyParameters( params ) {
|
|
|
749
814
|
|
|
750
815
|
for ( const inputNode of params ) {
|
|
751
816
|
|
|
752
|
-
yield
|
|
817
|
+
yield inputNode;
|
|
753
818
|
|
|
754
819
|
}
|
|
755
820
|
|
|
@@ -820,6 +885,12 @@ class ShaderNodeInternal extends Node {
|
|
|
820
885
|
|
|
821
886
|
}
|
|
822
887
|
|
|
888
|
+
isCacheable( /*builder*/ ) {
|
|
889
|
+
|
|
890
|
+
return false;
|
|
891
|
+
|
|
892
|
+
}
|
|
893
|
+
|
|
823
894
|
setLayout( layout ) {
|
|
824
895
|
|
|
825
896
|
this.layout = layout;
|
|
@@ -859,16 +930,18 @@ for ( const bool of bools ) boolsCacheMap.set( bool, new ConstNode( bool ) );
|
|
|
859
930
|
const uintsCacheMap = new Map();
|
|
860
931
|
for ( const uint of uints ) uintsCacheMap.set( uint, new ConstNode( uint, 'uint' ) );
|
|
861
932
|
|
|
862
|
-
const intsCacheMap = new Map(
|
|
933
|
+
const intsCacheMap = new Map();
|
|
934
|
+
for ( const value of uintsCacheMap.keys() ) intsCacheMap.set( value, new ConstNode( value, 'int' ) );
|
|
863
935
|
for ( const int of ints ) intsCacheMap.set( int, new ConstNode( int, 'int' ) );
|
|
864
936
|
|
|
865
|
-
const floatsCacheMap = new Map(
|
|
937
|
+
const floatsCacheMap = new Map();
|
|
938
|
+
for ( const value of intsCacheMap.keys() ) floatsCacheMap.set( value, new ConstNode( value ) );
|
|
866
939
|
for ( const float of floats ) floatsCacheMap.set( float, new ConstNode( float ) );
|
|
867
940
|
for ( const float of floats ) floatsCacheMap.set( - float, new ConstNode( - float ) );
|
|
868
941
|
|
|
869
942
|
const cacheMaps = { bool: boolsCacheMap, uint: uintsCacheMap, ints: intsCacheMap, float: floatsCacheMap };
|
|
870
943
|
|
|
871
|
-
const constNodesCacheMap = new Map(
|
|
944
|
+
const constNodesCacheMap = new Map( boolsCacheMap );
|
|
872
945
|
|
|
873
946
|
const getConstNode = ( value, type ) => {
|
|
874
947
|
|
|
@@ -882,12 +955,19 @@ const getConstNode = ( value, type ) => {
|
|
|
882
955
|
|
|
883
956
|
} else {
|
|
884
957
|
|
|
885
|
-
|
|
958
|
+
const node = new ConstNode( value, type );
|
|
959
|
+
|
|
960
|
+
// Implicit numbers are weak and can adapt to the type of other operands.
|
|
961
|
+
node.isWeak = ! type && typeof value === 'number';
|
|
962
|
+
|
|
963
|
+
return node;
|
|
886
964
|
|
|
887
965
|
}
|
|
888
966
|
|
|
889
967
|
};
|
|
890
968
|
|
|
969
|
+
for ( const value of floatsCacheMap.keys() ) constNodesCacheMap.set( value, getConstNode( value ) );
|
|
970
|
+
|
|
891
971
|
const ConvertType = function ( type, cacheMap = null ) {
|
|
892
972
|
|
|
893
973
|
return ( ...params ) => {
|
|
@@ -918,20 +998,33 @@ const ConvertType = function ( type, cacheMap = null ) {
|
|
|
918
998
|
|
|
919
999
|
if ( params.length === 1 && cacheMap !== null && cacheMap.has( params[ 0 ] ) ) {
|
|
920
1000
|
|
|
921
|
-
|
|
1001
|
+
const cached = cacheMap.get( params[ 0 ] );
|
|
1002
|
+
|
|
1003
|
+
return new ConstNode( cached.value, cached.nodeType ).toAssignable();
|
|
922
1004
|
|
|
923
1005
|
}
|
|
924
1006
|
|
|
925
1007
|
if ( params.length === 1 ) {
|
|
926
1008
|
|
|
927
|
-
const
|
|
928
|
-
|
|
929
|
-
|
|
1009
|
+
const param = params[ 0 ];
|
|
1010
|
+
const node = getConstNode( param, type );
|
|
1011
|
+
|
|
1012
|
+
if ( node.nodeType === type ) {
|
|
1013
|
+
|
|
1014
|
+
// A node given by the user or a shared constant must not become the variable itself.
|
|
1015
|
+
if ( node === param ) return new ConvertNode( node, type ).toAssignable();
|
|
1016
|
+
if ( constNodesCacheMap.get( param ) === node ) return new ConstNode( node.value, node.nodeType ).toAssignable();
|
|
1017
|
+
|
|
1018
|
+
return node.toAssignable();
|
|
1019
|
+
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
return new ConvertNode( node, type ).toAssignable();
|
|
930
1023
|
|
|
931
1024
|
}
|
|
932
1025
|
|
|
933
1026
|
const nodes = params.map( param => getConstNode( param ) );
|
|
934
|
-
return
|
|
1027
|
+
return new JoinNode( nodes, type ).toAssignable();
|
|
935
1028
|
|
|
936
1029
|
};
|
|
937
1030
|
|
|
@@ -972,12 +1065,28 @@ export function ShaderNode( jsFunc, nodeType ) {
|
|
|
972
1065
|
}
|
|
973
1066
|
|
|
974
1067
|
export const nodeObject = ( val, altType = null ) => /* new */ ShaderNodeObject( val, altType );
|
|
975
|
-
export const
|
|
1068
|
+
export const nodeObjectAssignable = ( val, altType = null ) => {
|
|
1069
|
+
|
|
1070
|
+
let node = nodeObject( val, altType );
|
|
1071
|
+
|
|
1072
|
+
// Shared constants need their own assignable node.
|
|
1073
|
+
if ( node.isConstNode === true && constNodesCacheMap.get( node.value ) === node ) {
|
|
1074
|
+
|
|
1075
|
+
const copy = new ConstNode( node.value, node.nodeType );
|
|
1076
|
+
copy.isWeak = node.isWeak;
|
|
1077
|
+
node = copy;
|
|
1078
|
+
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
return node.toAssignable();
|
|
1082
|
+
|
|
1083
|
+
};
|
|
1084
|
+
|
|
976
1085
|
export const nodeObjects = ( val, altType = null ) => new ShaderNodeObjects( val, altType );
|
|
977
1086
|
export const nodeArray = ( val, altType = null ) => new ShaderNodeArray( val, altType );
|
|
978
1087
|
export const nodeProxy = ( NodeClass, scope = null, factor = null, settings = null ) => new ShaderNodeProxy( NodeClass, scope, factor, settings );
|
|
979
1088
|
export const nodeImmutable = ( NodeClass, ...params ) => new ShaderNodeImmutable( NodeClass, ...params );
|
|
980
|
-
export const
|
|
1089
|
+
export const nodeProxyAssignable = ( NodeClass, scope = null, factor = null, settings = {} ) => new ShaderNodeProxy( NodeClass, scope, factor, { ...settings, assignable: true } );
|
|
981
1090
|
|
|
982
1091
|
export const nodeProxyConstructor = ( constructorFunction, nodeInstance ) => {
|
|
983
1092
|
|
|
@@ -1045,6 +1154,12 @@ class FnNode extends Node {
|
|
|
1045
1154
|
|
|
1046
1155
|
}
|
|
1047
1156
|
|
|
1157
|
+
isCacheable( /*builder*/ ) {
|
|
1158
|
+
|
|
1159
|
+
return false;
|
|
1160
|
+
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1048
1163
|
setLayout( layout ) {
|
|
1049
1164
|
|
|
1050
1165
|
const nodeType = this.shaderNode.nodeType;
|
|
@@ -1088,9 +1203,10 @@ class FnNode extends Node {
|
|
|
1088
1203
|
|
|
1089
1204
|
const fnCall = this.shaderNode.call( params );
|
|
1090
1205
|
|
|
1091
|
-
|
|
1206
|
+
// A call without a return value is a statement.
|
|
1207
|
+
if ( this.shaderNode.nodeType === 'void' ) return fnCall.toStack();
|
|
1092
1208
|
|
|
1093
|
-
return fnCall.
|
|
1209
|
+
return fnCall.toAssignable();
|
|
1094
1210
|
|
|
1095
1211
|
}
|
|
1096
1212
|
|
|
@@ -1117,6 +1233,15 @@ class FnNode extends Node {
|
|
|
1117
1233
|
|
|
1118
1234
|
export function Fn( jsFunc, layout = null ) {
|
|
1119
1235
|
|
|
1236
|
+
// Layout functions are cached across shaders of the same backend. Their bodies
|
|
1237
|
+
// must depend only on explicit inputs and constants, not uniforms or material context.
|
|
1238
|
+
//
|
|
1239
|
+
// Parameters can have default values. A call without some inputs passes the defaults as
|
|
1240
|
+
// arguments, so values like `uv()` are evaluated at the call site. The defaults are resolved
|
|
1241
|
+
// once per function and shared by all calls: a value that must be evaluated per build should
|
|
1242
|
+
// be a node like `Fn( ... ).once()().toVar( name )`. If a default depends on another
|
|
1243
|
+
// parameter, that call is expanded inline.
|
|
1244
|
+
|
|
1120
1245
|
const instance = new FnNode( jsFunc, layout );
|
|
1121
1246
|
|
|
1122
1247
|
return new Proxy( () => {}, {
|
|
@@ -6,7 +6,7 @@ import Node from '../core/Node.js';
|
|
|
6
6
|
*
|
|
7
7
|
* @augments Node
|
|
8
8
|
*/
|
|
9
|
-
class ArrayElementNode extends Node {
|
|
9
|
+
class ArrayElementNode extends Node {
|
|
10
10
|
|
|
11
11
|
static get type() {
|
|
12
12
|
|
|
@@ -49,6 +49,24 @@ class ArrayElementNode extends Node { // @TODO: If extending from TempNode it br
|
|
|
49
49
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
isCacheable( /*builder*/ ) {
|
|
53
|
+
|
|
54
|
+
return false;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Returns the scope of the array-like node so assignments to elements
|
|
60
|
+
* mark the underlying value as mutable.
|
|
61
|
+
*
|
|
62
|
+
* @return {Node} The scope of the node.
|
|
63
|
+
*/
|
|
64
|
+
getScope() {
|
|
65
|
+
|
|
66
|
+
return this.node.getScope();
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
52
70
|
/**
|
|
53
71
|
* This method is overwritten since the node type is inferred from the array-like node.
|
|
54
72
|
*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
3
|
import { nodeProxy } from '../tsl/TSLBase.js';
|
|
4
4
|
import { CubeTexture } from '../../textures/CubeTexture.js';
|
|
@@ -12,9 +12,9 @@ const _cache = new WeakMap();
|
|
|
12
12
|
* This node can be used to automatically convert environment maps in the
|
|
13
13
|
* equirectangular format into the cube map format.
|
|
14
14
|
*
|
|
15
|
-
* @augments
|
|
15
|
+
* @augments Node
|
|
16
16
|
*/
|
|
17
|
-
class CubeMapNode extends
|
|
17
|
+
class CubeMapNode extends Node {
|
|
18
18
|
|
|
19
19
|
static get type() {
|
|
20
20
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
|
|
3
3
|
import { log } from '../../utils.js';
|
|
4
4
|
|
|
5
|
-
class DebugNode extends
|
|
5
|
+
class DebugNode extends Node {
|
|
6
6
|
|
|
7
7
|
static get type() {
|
|
8
8
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { vectorComponents } from '../core/constants.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -14,9 +14,9 @@ import { vectorComponents } from '../core/constants.js';
|
|
|
14
14
|
* uvNode = uvNode.flipY();
|
|
15
15
|
* ```
|
|
16
16
|
*
|
|
17
|
-
* @augments
|
|
17
|
+
* @augments Node
|
|
18
18
|
*/
|
|
19
|
-
class FlipNode extends
|
|
19
|
+
class FlipNode extends Node {
|
|
20
20
|
|
|
21
21
|
static get type() {
|
|
22
22
|
|
|
@@ -58,6 +58,12 @@ class FunctionOverloadingNode extends Node {
|
|
|
58
58
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
isCacheable( /*builder*/ ) {
|
|
62
|
+
|
|
63
|
+
return false;
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
61
67
|
/**
|
|
62
68
|
* This method is overwritten since the node type is inferred from
|
|
63
69
|
* the function's return type.
|
|
@@ -112,7 +118,7 @@ class FunctionOverloadingNode extends Node {
|
|
|
112
118
|
const param = params[ i ];
|
|
113
119
|
const input = inputs[ i ];
|
|
114
120
|
|
|
115
|
-
if ( param.getNodeType( builder ) === input.type ) {
|
|
121
|
+
if ( builder.getVectorType( param.getNodeType( builder ) ) === input.type ) {
|
|
116
122
|
|
|
117
123
|
currentScore ++;
|
|
118
124
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { error } from '../../utils.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -6,9 +6,9 @@ import { error } from '../../utils.js';
|
|
|
6
6
|
* It represents a join operation during the shader generation process.
|
|
7
7
|
* For example in can compose/join two single floats into a `vec2` type.
|
|
8
8
|
*
|
|
9
|
-
* @augments
|
|
9
|
+
* @augments Node
|
|
10
10
|
*/
|
|
11
|
-
class JoinNode extends
|
|
11
|
+
class JoinNode extends Node {
|
|
12
12
|
|
|
13
13
|
static get type() {
|
|
14
14
|
|