@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
|
@@ -83,59 +83,46 @@ class VarNode extends Node {
|
|
|
83
83
|
this.parents = true;
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
|
-
*
|
|
86
|
+
* Whether this node can be generated as an expression until it is assigned.
|
|
87
87
|
*
|
|
88
88
|
* @type {boolean}
|
|
89
89
|
* @default false
|
|
90
90
|
*/
|
|
91
|
-
this.
|
|
91
|
+
this.assignable = false;
|
|
92
92
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
* Sets the intent flag for this node.
|
|
97
|
-
*
|
|
98
|
-
* This flag is used to indicate that this node is used for intent
|
|
99
|
-
* and should not be built directly. Instead, it is used to indicate that
|
|
100
|
-
* the node should be treated as a variable intent.
|
|
101
|
-
*
|
|
102
|
-
* It's useful for assigning variables without needing creating a new variable node.
|
|
103
|
-
*
|
|
104
|
-
* @param {boolean} value - The value to set for the intent flag.
|
|
105
|
-
* @returns {VarNode} This node.
|
|
106
|
-
*/
|
|
107
|
-
setIntent( value ) {
|
|
108
|
-
|
|
109
|
-
this.intent = value;
|
|
95
|
+
isCacheable( /*builder*/ ) {
|
|
110
96
|
|
|
111
|
-
return
|
|
97
|
+
return false;
|
|
112
98
|
|
|
113
99
|
}
|
|
114
100
|
|
|
115
101
|
/**
|
|
116
|
-
*
|
|
102
|
+
* Sets the assignable flag for this node.
|
|
103
|
+
*
|
|
104
|
+
* An assignable node is generated as an expression until it is assigned,
|
|
105
|
+
* at which point it is declared as a variable.
|
|
117
106
|
*
|
|
118
|
-
* @param {
|
|
119
|
-
* @returns {
|
|
107
|
+
* @param {boolean} value - The value to set for the assignable flag.
|
|
108
|
+
* @returns {VarNode} This node.
|
|
120
109
|
*/
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
const data = builder.getDataFromNode( this );
|
|
110
|
+
setAssignable( value ) {
|
|
124
111
|
|
|
125
|
-
|
|
112
|
+
this.assignable = value;
|
|
126
113
|
|
|
127
|
-
return this
|
|
114
|
+
return this;
|
|
128
115
|
|
|
129
116
|
}
|
|
130
117
|
|
|
131
118
|
/**
|
|
132
|
-
* Returns the
|
|
119
|
+
* Returns the assignable flag of this node.
|
|
133
120
|
*
|
|
134
|
-
* @return {boolean} The
|
|
121
|
+
* @return {boolean} The assignable flag.
|
|
135
122
|
*/
|
|
136
|
-
|
|
123
|
+
getAssignable() {
|
|
137
124
|
|
|
138
|
-
return this.
|
|
125
|
+
return this.assignable;
|
|
139
126
|
|
|
140
127
|
}
|
|
141
128
|
|
|
@@ -163,104 +150,55 @@ class VarNode extends Node {
|
|
|
163
150
|
|
|
164
151
|
}
|
|
165
152
|
|
|
166
|
-
|
|
153
|
+
_declaresAssignable() {
|
|
167
154
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
return data.assign;
|
|
155
|
+
return false;
|
|
171
156
|
|
|
172
157
|
}
|
|
173
158
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
const builder = params[ 0 ];
|
|
177
|
-
|
|
178
|
-
const refNode = this.getShared( builder );
|
|
179
|
-
|
|
180
|
-
if ( this !== refNode ) {
|
|
181
|
-
|
|
182
|
-
return refNode.build( ...params );
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
if ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {
|
|
187
|
-
|
|
188
|
-
if ( builder.context.nodeLoop || builder.context.nodeBlock ) {
|
|
189
|
-
|
|
190
|
-
let addBefore = false;
|
|
191
|
-
|
|
192
|
-
if ( this.node.isShaderCallNodeInternal && this.node.shaderNode.getLayout() === null ) {
|
|
193
|
-
|
|
194
|
-
if ( builder.fnCall && builder.fnCall.shaderNode ) {
|
|
195
|
-
|
|
196
|
-
const shaderNodeData = builder.getDataFromNode( this.node.shaderNode );
|
|
197
|
-
|
|
198
|
-
if ( shaderNodeData.hasLoop ) {
|
|
199
|
-
|
|
200
|
-
const data = builder.getDataFromNode( this );
|
|
201
|
-
data.forceDeclaration = true;
|
|
202
|
-
|
|
203
|
-
addBefore = true;
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
}
|
|
159
|
+
_isFunctionScope() {
|
|
208
160
|
|
|
209
|
-
|
|
161
|
+
// see `generate()`, a read-only or local variable is declared where it is generated
|
|
162
|
+
return this.readOnly === false && this.assignable === false;
|
|
210
163
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
if ( addBefore ) {
|
|
164
|
+
}
|
|
214
165
|
|
|
215
|
-
|
|
166
|
+
build( builder, output = null ) {
|
|
216
167
|
|
|
217
|
-
|
|
168
|
+
this._setupInspector( builder );
|
|
218
169
|
|
|
219
|
-
|
|
170
|
+
const refNode = this.getShared( builder );
|
|
220
171
|
|
|
221
|
-
|
|
172
|
+
if ( this !== refNode ) {
|
|
222
173
|
|
|
223
|
-
|
|
174
|
+
return refNode.build( builder, output );
|
|
224
175
|
|
|
225
176
|
}
|
|
226
177
|
|
|
227
|
-
|
|
178
|
+
const data = builder.getDataFromNode( this );
|
|
228
179
|
|
|
229
|
-
|
|
180
|
+
this._updateAssignable( builder, data, this.node );
|
|
230
181
|
|
|
231
|
-
|
|
182
|
+
// An assignable node that is not assigned is just its value.
|
|
183
|
+
if ( this.assignable && data.forceDeclaration !== true && data.assign !== true ) {
|
|
232
184
|
|
|
233
|
-
|
|
185
|
+
return this.node.build( builder, output );
|
|
234
186
|
|
|
235
187
|
}
|
|
236
188
|
|
|
237
|
-
return super.build(
|
|
189
|
+
return super.build( builder, output );
|
|
238
190
|
|
|
239
191
|
}
|
|
240
192
|
|
|
241
193
|
generate( builder ) {
|
|
242
194
|
|
|
243
195
|
const { node, name, readOnly } = this;
|
|
244
|
-
const { renderer } = builder;
|
|
245
|
-
|
|
246
|
-
const isWebGPUBackend = renderer.backend.isWebGPUBackend === true;
|
|
247
|
-
|
|
248
|
-
let isDeterministic = false;
|
|
249
|
-
let shouldTreatAsReadOnly = false;
|
|
250
|
-
|
|
251
|
-
if ( readOnly ) {
|
|
252
|
-
|
|
253
|
-
isDeterministic = builder.isDeterministic( node );
|
|
254
|
-
|
|
255
|
-
shouldTreatAsReadOnly = isWebGPUBackend ? readOnly : isDeterministic;
|
|
256
|
-
|
|
257
|
-
}
|
|
258
196
|
|
|
259
197
|
const nodeType = this.getNodeType( builder );
|
|
260
198
|
|
|
261
199
|
if ( nodeType == 'void' ) {
|
|
262
200
|
|
|
263
|
-
if ( this.
|
|
201
|
+
if ( this.isAssignable( builder ) !== true ) {
|
|
264
202
|
|
|
265
203
|
error( 'TSL: ".toVar()" can not be used with void type.', this.stackTrace );
|
|
266
204
|
|
|
@@ -275,27 +213,23 @@ class VarNode extends Node {
|
|
|
275
213
|
const vectorType = builder.getVectorType( nodeType );
|
|
276
214
|
const snippet = node.build( builder, vectorType );
|
|
277
215
|
|
|
278
|
-
const nodeVar = builder.getVarFromNode( this, name, vectorType, undefined,
|
|
216
|
+
const nodeVar = builder.getVarFromNode( this, name, vectorType, undefined, readOnly, this.assignable );
|
|
279
217
|
|
|
280
218
|
const propertyName = builder.getPropertyName( nodeVar );
|
|
281
219
|
|
|
282
220
|
let declarationPrefix = propertyName;
|
|
283
221
|
|
|
284
|
-
if (
|
|
285
|
-
|
|
286
|
-
if ( isWebGPUBackend ) {
|
|
222
|
+
if ( nodeVar.readOnly ) {
|
|
287
223
|
|
|
288
|
-
|
|
289
|
-
? `const ${ propertyName }`
|
|
290
|
-
: `let ${ propertyName }`;
|
|
224
|
+
const count = node.getArrayCount( builder );
|
|
291
225
|
|
|
292
|
-
|
|
226
|
+
declarationPrefix = builder.isDeterministic( node )
|
|
227
|
+
? builder.generateConstStatement( nodeVar.type, propertyName, count )
|
|
228
|
+
: builder.generateLetStatement( nodeVar.type, propertyName, count );
|
|
293
229
|
|
|
294
|
-
|
|
230
|
+
} else if ( nodeVar.local ) {
|
|
295
231
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
}
|
|
232
|
+
declarationPrefix = builder.generateVarStatement( nodeVar.type, propertyName, nodeVar.count );
|
|
299
233
|
|
|
300
234
|
}
|
|
301
235
|
|
|
@@ -305,14 +239,6 @@ class VarNode extends Node {
|
|
|
305
239
|
|
|
306
240
|
}
|
|
307
241
|
|
|
308
|
-
_hasStack( builder ) {
|
|
309
|
-
|
|
310
|
-
const nodeData = builder.getDataFromNode( this );
|
|
311
|
-
|
|
312
|
-
return nodeData.stack !== undefined;
|
|
313
|
-
|
|
314
|
-
}
|
|
315
|
-
|
|
316
242
|
}
|
|
317
243
|
|
|
318
244
|
export default VarNode;
|
|
@@ -350,25 +276,7 @@ export const Var = ( node, name = null ) => createVar( node, name ).toStack();
|
|
|
350
276
|
*/
|
|
351
277
|
export const Const = ( node, name = null ) => createVar( node, name, true ).toStack();
|
|
352
278
|
|
|
353
|
-
//
|
|
354
|
-
//
|
|
355
|
-
|
|
356
|
-
/**
|
|
357
|
-
* TSL function for creating a var intent node.
|
|
358
|
-
*
|
|
359
|
-
* @tsl
|
|
360
|
-
* @function
|
|
361
|
-
* @param {Node} node - The node for which a variable should be created.
|
|
362
|
-
* @returns {VarNode}
|
|
363
|
-
*/
|
|
364
|
-
export const VarIntent = ( node ) => {
|
|
365
|
-
|
|
366
|
-
return createVar( node ).setIntent( true ).toStack();
|
|
367
|
-
|
|
368
|
-
};
|
|
369
|
-
|
|
370
279
|
// Method chaining
|
|
371
280
|
|
|
372
281
|
addMethodChaining( 'toVar', Var );
|
|
373
282
|
addMethodChaining( 'toConst', Const );
|
|
374
|
-
addMethodChaining( 'toVarIntent', VarIntent );
|
|
@@ -82,6 +82,12 @@ class VaryingNode extends Node {
|
|
|
82
82
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
+
isCacheable( /*builder*/ ) {
|
|
86
|
+
|
|
87
|
+
return false;
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
|
|
85
91
|
/**
|
|
86
92
|
* Defines the interpolation type of the varying.
|
|
87
93
|
*
|
|
@@ -145,6 +151,20 @@ class VaryingNode extends Node {
|
|
|
145
151
|
|
|
146
152
|
setup( builder ) {
|
|
147
153
|
|
|
154
|
+
// the context can evaluate varyings directly in the fragment stage, e.g. if the surface is reconstructed per fragment.
|
|
155
|
+
// indices and attributes create their own varyings in the fragment stage, so their varyings are kept unless the
|
|
156
|
+
// context provides the attribute
|
|
157
|
+
|
|
158
|
+
if ( builder.context.inlineVaryings === true && builder.shaderStage === 'fragment' ) {
|
|
159
|
+
|
|
160
|
+
let node = this.node;
|
|
161
|
+
|
|
162
|
+
while ( node.isSubBuildNode === true ) node = node.node;
|
|
163
|
+
|
|
164
|
+
if ( node.isIndexNode !== true && ( node.isAttributeNode !== true || node.getContextAttribute( builder ) ) ) return this.node;
|
|
165
|
+
|
|
166
|
+
}
|
|
167
|
+
|
|
148
168
|
this.setupVarying( builder );
|
|
149
169
|
|
|
150
170
|
builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node );
|
|
@@ -153,6 +173,10 @@ class VaryingNode extends Node {
|
|
|
153
173
|
|
|
154
174
|
analyze( builder ) {
|
|
155
175
|
|
|
176
|
+
// TODO: Node.build() could pass through the output node of setup() directly, so overrides of analyze() and generate() don't need to handle it twice
|
|
177
|
+
|
|
178
|
+
if ( builder.getNodeProperties( this ).outputNode ) return super.analyze( builder );
|
|
179
|
+
|
|
156
180
|
this.setupVarying( builder );
|
|
157
181
|
|
|
158
182
|
builder.flowNodeFromShaderStage( NodeShaderStage.VERTEX, this.node );
|
|
@@ -161,11 +185,18 @@ class VaryingNode extends Node {
|
|
|
161
185
|
|
|
162
186
|
generate( builder ) {
|
|
163
187
|
|
|
188
|
+
const { outputNode } = builder.getNodeProperties( this );
|
|
189
|
+
|
|
190
|
+
if ( outputNode ) return outputNode.build( builder, this.getNodeType( builder ) );
|
|
191
|
+
|
|
164
192
|
const propertyKey = builder.getSubBuildProperty( 'property', builder.currentStack );
|
|
165
193
|
const properties = builder.getNodeProperties( this );
|
|
166
194
|
const varying = this.setupVarying( builder );
|
|
167
195
|
|
|
168
|
-
|
|
196
|
+
// The vertex assignment is emitted once per block, from the fragment stage it is emitted outside of any block.
|
|
197
|
+
const flowBlock = builder.shaderStage === NodeShaderStage.VERTEX ? builder.flowBlock : null;
|
|
198
|
+
|
|
199
|
+
if ( properties[ propertyKey ] !== flowBlock ) {
|
|
169
200
|
|
|
170
201
|
const type = this.getNodeType( builder );
|
|
171
202
|
const propertyName = builder.getPropertyName( varying, NodeShaderStage.VERTEX );
|
|
@@ -183,7 +214,7 @@ class VaryingNode extends Node {
|
|
|
183
214
|
|
|
184
215
|
}
|
|
185
216
|
|
|
186
|
-
properties[ propertyKey ] =
|
|
217
|
+
properties[ propertyKey ] = flowBlock;
|
|
187
218
|
|
|
188
219
|
}
|
|
189
220
|
|
|
@@ -18,14 +18,7 @@ export const blendBurn = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
|
18
18
|
|
|
19
19
|
return min( 1.0, base.oneMinus().div( blend ) ).oneMinus();
|
|
20
20
|
|
|
21
|
-
} )
|
|
22
|
-
name: 'blendBurn',
|
|
23
|
-
type: 'vec3',
|
|
24
|
-
inputs: [
|
|
25
|
-
{ name: 'base', type: 'vec3' },
|
|
26
|
-
{ name: 'blend', type: 'vec3' }
|
|
27
|
-
]
|
|
28
|
-
} );
|
|
21
|
+
}, { base: 'vec3', blend: 'vec3', return: 'vec3' } );
|
|
29
22
|
|
|
30
23
|
/**
|
|
31
24
|
* Represents a "Color Dodge" blend mode.
|
|
@@ -44,14 +37,7 @@ export const blendDodge = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
|
44
37
|
|
|
45
38
|
return min( base.div( blend.oneMinus() ), 1.0 );
|
|
46
39
|
|
|
47
|
-
} )
|
|
48
|
-
name: 'blendDodge',
|
|
49
|
-
type: 'vec3',
|
|
50
|
-
inputs: [
|
|
51
|
-
{ name: 'base', type: 'vec3' },
|
|
52
|
-
{ name: 'blend', type: 'vec3' }
|
|
53
|
-
]
|
|
54
|
-
} );
|
|
40
|
+
}, { base: 'vec3', blend: 'vec3', return: 'vec3' } );
|
|
55
41
|
|
|
56
42
|
/**
|
|
57
43
|
* Represents a "Screen" blend mode.
|
|
@@ -70,14 +56,7 @@ export const blendScreen = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
|
70
56
|
|
|
71
57
|
return base.oneMinus().mul( blend.oneMinus() ).oneMinus();
|
|
72
58
|
|
|
73
|
-
} )
|
|
74
|
-
name: 'blendScreen',
|
|
75
|
-
type: 'vec3',
|
|
76
|
-
inputs: [
|
|
77
|
-
{ name: 'base', type: 'vec3' },
|
|
78
|
-
{ name: 'blend', type: 'vec3' }
|
|
79
|
-
]
|
|
80
|
-
} );
|
|
59
|
+
}, { base: 'vec3', blend: 'vec3', return: 'vec3' } );
|
|
81
60
|
|
|
82
61
|
/**
|
|
83
62
|
* Represents a "Overlay" blend mode.
|
|
@@ -96,14 +75,7 @@ export const blendOverlay = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
|
96
75
|
|
|
97
76
|
return mix( base.mul( 2.0 ).mul( blend ), base.oneMinus().mul( 2.0 ).mul( blend.oneMinus() ).oneMinus(), step( 0.5, base ) );
|
|
98
77
|
|
|
99
|
-
} )
|
|
100
|
-
name: 'blendOverlay',
|
|
101
|
-
type: 'vec3',
|
|
102
|
-
inputs: [
|
|
103
|
-
{ name: 'base', type: 'vec3' },
|
|
104
|
-
{ name: 'blend', type: 'vec3' }
|
|
105
|
-
]
|
|
106
|
-
} );
|
|
78
|
+
}, { base: 'vec3', blend: 'vec3', return: 'vec3' } );
|
|
107
79
|
|
|
108
80
|
/**
|
|
109
81
|
* This function blends two color based on their alpha values by replicating the behavior of `THREE.NormalBlending`.
|
|
@@ -121,11 +93,4 @@ export const blendColor = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
|
121
93
|
|
|
122
94
|
return vec4( blend.rgb.mul( blend.a ).add( base.rgb.mul( base.a ).mul( blend.a.oneMinus() ) ).div( outAlpha ), outAlpha );
|
|
123
95
|
|
|
124
|
-
} )
|
|
125
|
-
name: 'blendColor',
|
|
126
|
-
type: 'vec4',
|
|
127
|
-
inputs: [
|
|
128
|
-
{ name: 'base', type: 'vec4' },
|
|
129
|
-
{ name: 'blend', type: 'vec4' }
|
|
130
|
-
]
|
|
131
|
-
} );
|
|
96
|
+
}, { base: 'vec4', blend: 'vec4', return: 'vec4' } );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { uv } from '../accessors/UV.js';
|
|
3
3
|
import { normalView } from '../accessors/Normal.js';
|
|
4
4
|
import { positionView } from '../accessors/Position.js';
|
|
@@ -51,9 +51,9 @@ const perturbNormalArb = /*@__PURE__*/ Fn( ( inputs ) => {
|
|
|
51
51
|
* material.normalNode = bumpMap( texture( bumpTex ) );
|
|
52
52
|
* ```
|
|
53
53
|
*
|
|
54
|
-
* @augments
|
|
54
|
+
* @augments Node
|
|
55
55
|
*/
|
|
56
|
-
class BumpMapNode extends
|
|
56
|
+
class BumpMapNode extends Node {
|
|
57
57
|
|
|
58
58
|
static get type() {
|
|
59
59
|
|
|
@@ -66,8 +66,9 @@ class BumpMapNode extends TempNode {
|
|
|
66
66
|
*
|
|
67
67
|
* @param {Node<float>} textureNode - Represents the bump map data.
|
|
68
68
|
* @param {?Node<float>} [scaleNode=null] - Controls the intensity of the bump effect.
|
|
69
|
+
* @param {Node<vec3>} [normalNode=normalView] - The view-space normal to perturb.
|
|
69
70
|
*/
|
|
70
|
-
constructor( textureNode, scaleNode = null ) {
|
|
71
|
+
constructor( textureNode, scaleNode = null, normalNode = normalView ) {
|
|
71
72
|
|
|
72
73
|
super( 'vec3' );
|
|
73
74
|
|
|
@@ -86,6 +87,14 @@ class BumpMapNode extends TempNode {
|
|
|
86
87
|
*/
|
|
87
88
|
this.scaleNode = scaleNode;
|
|
88
89
|
|
|
90
|
+
/**
|
|
91
|
+
* The view-space normal to perturb.
|
|
92
|
+
*
|
|
93
|
+
* @type {Node<vec3>}
|
|
94
|
+
* @default normalView
|
|
95
|
+
*/
|
|
96
|
+
this.normalNode = normalNode;
|
|
97
|
+
|
|
89
98
|
}
|
|
90
99
|
|
|
91
100
|
setup( builder ) {
|
|
@@ -93,14 +102,14 @@ class BumpMapNode extends TempNode {
|
|
|
93
102
|
// Screen-space derivatives are unreliable on thin lines, so the bump
|
|
94
103
|
// effect is disabled for wireframe rendering.
|
|
95
104
|
|
|
96
|
-
if ( builder.material.wireframe === true ) return
|
|
105
|
+
if ( builder.material.wireframe === true ) return this.normalNode;
|
|
97
106
|
|
|
98
107
|
const bumpScale = this.scaleNode !== null ? this.scaleNode : 1;
|
|
99
108
|
const dHdxy = dHdxy_fwd( { textureNode: this.textureNode, bumpScale } );
|
|
100
109
|
|
|
101
110
|
return perturbNormalArb( {
|
|
102
111
|
surf_pos: positionView,
|
|
103
|
-
surf_norm:
|
|
112
|
+
surf_norm: this.normalNode,
|
|
104
113
|
dHdxy
|
|
105
114
|
} );
|
|
106
115
|
|
|
@@ -117,6 +126,7 @@ export default BumpMapNode;
|
|
|
117
126
|
* @function
|
|
118
127
|
* @param {Node<float>} textureNode - Represents the bump map data.
|
|
119
128
|
* @param {?Node<float>} [scaleNode=null] - Controls the intensity of the bump effect.
|
|
129
|
+
* @param {Node<vec3>} [normalNode=normalView] - The view-space normal to perturb.
|
|
120
130
|
* @returns {BumpMapNode}
|
|
121
131
|
*/
|
|
122
|
-
export const bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode ).setParameterLength( 1,
|
|
132
|
+
export const bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode ).setParameterLength( 1, 3 );
|
|
@@ -5,19 +5,30 @@ import { ColorManagement } from '../../math/ColorManagement.js';
|
|
|
5
5
|
import { Vector3 } from '../../math/Vector3.js';
|
|
6
6
|
import { LinearSRGBColorSpace } from '../../constants.js';
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* TSL object that represents the luminance coefficients of the current working color space.
|
|
10
|
+
* It is evaluated once per build, so it can also be used as the default value of a parameter
|
|
11
|
+
* of a function with layout.
|
|
12
|
+
*
|
|
13
|
+
* @tsl
|
|
14
|
+
* @type {VarNode<vec3>}
|
|
15
|
+
*/
|
|
16
|
+
export const workingLuminanceCoefficients = /*@__PURE__*/ Fn( () => vec3( ColorManagement.getLuminanceCoefficients( new Vector3() ) ) ).once()().toVar( 'workingLuminanceCoefficients' );
|
|
17
|
+
|
|
8
18
|
/**
|
|
9
19
|
* Computes a grayscale value for the given RGB color value.
|
|
10
20
|
*
|
|
11
21
|
* @tsl
|
|
12
22
|
* @function
|
|
13
23
|
* @param {Node<vec3>} color - The color value to compute the grayscale for.
|
|
14
|
-
* @
|
|
24
|
+
* @param {Node<vec3>} [luminanceCoefficients] - The luminance coefficients. By default predefined values of the current working color space are used.
|
|
25
|
+
* @return {Node<float>} The grayscale value.
|
|
15
26
|
*/
|
|
16
|
-
export const grayscale = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
27
|
+
export const grayscale = /*@__PURE__*/ Fn( ( [ color, luminanceCoefficients = workingLuminanceCoefficients ] ) => {
|
|
17
28
|
|
|
18
|
-
return luminance( color.rgb );
|
|
29
|
+
return luminance( color.rgb, luminanceCoefficients );
|
|
19
30
|
|
|
20
|
-
} );
|
|
31
|
+
}, { color: 'vec3', luminanceCoefficients: 'vec3', return: 'float' } );
|
|
21
32
|
|
|
22
33
|
/**
|
|
23
34
|
* Super-saturates or desaturates the given RGB color.
|
|
@@ -26,13 +37,14 @@ export const grayscale = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
|
26
37
|
* @function
|
|
27
38
|
* @param {Node<vec3>} color - The input color.
|
|
28
39
|
* @param {Node<float>} [adjustment=1] - Specifies the amount of the conversion. A value under `1` desaturates the color, a value over `1` super-saturates it.
|
|
40
|
+
* @param {Node<vec3>} [luminanceCoefficients] - The luminance coefficients. By default predefined values of the current working color space are used.
|
|
29
41
|
* @return {Node<vec3>} The saturated color.
|
|
30
42
|
*/
|
|
31
|
-
export const saturation = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
|
|
43
|
+
export const saturation = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ), luminanceCoefficients = workingLuminanceCoefficients ] ) => {
|
|
32
44
|
|
|
33
|
-
return adjustment.mix( luminance( color.rgb ), color.rgb ).max( 0.0 );
|
|
45
|
+
return adjustment.mix( luminance( color.rgb, luminanceCoefficients ), color.rgb ).max( 0.0 );
|
|
34
46
|
|
|
35
|
-
} );
|
|
47
|
+
}, { color: 'vec3', adjustment: 'float', luminanceCoefficients: 'vec3', return: 'vec3' } );
|
|
36
48
|
|
|
37
49
|
/**
|
|
38
50
|
* Selectively enhance the intensity of less saturated RGB colors. Can result
|
|
@@ -54,7 +66,7 @@ export const vibrance = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 0 ) ] )
|
|
|
54
66
|
|
|
55
67
|
return mix( color.rgb, mx, amt ).max( 0.0 );
|
|
56
68
|
|
|
57
|
-
} );
|
|
69
|
+
}, { color: 'vec3', adjustment: 'float', return: 'vec3' } );
|
|
58
70
|
|
|
59
71
|
/**
|
|
60
72
|
* Updates the hue component of the given RGB color while preserving its luminance and saturation.
|
|
@@ -73,7 +85,7 @@ export const hue = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
|
|
|
73
85
|
|
|
74
86
|
return vec3( color.rgb.mul( cosAngle ).add( k.cross( color.rgb ).mul( adjustment.sin() ).add( k.mul( dot( k, color.rgb ).mul( cosAngle.oneMinus() ) ) ) ) ).max( 0.0 );
|
|
75
87
|
|
|
76
|
-
} );
|
|
88
|
+
}, { color: 'vec3', adjustment: 'float', return: 'vec3' } );
|
|
77
89
|
|
|
78
90
|
/**
|
|
79
91
|
* Computes the luminance for the given RGB color value.
|
|
@@ -139,7 +151,7 @@ export const cdl = /*@__PURE__*/ Fn( ( [
|
|
|
139
151
|
|
|
140
152
|
return vec4( v.rgb, color.a );
|
|
141
153
|
|
|
142
|
-
} );
|
|
154
|
+
}, { color: 'vec4', slope: 'vec3', offset: 'vec3', power: 'vec3', saturation: 'float', luminanceCoefficients: 'vec3', return: 'vec4' } );
|
|
143
155
|
|
|
144
156
|
/**
|
|
145
157
|
* TSL function for creating a posterize effect which reduces the number of colors
|
|
@@ -19,13 +19,7 @@ export const sRGBTransferEOTF = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
|
19
19
|
|
|
20
20
|
return rgbResult;
|
|
21
21
|
|
|
22
|
-
} )
|
|
23
|
-
name: 'sRGBTransferEOTF',
|
|
24
|
-
type: 'vec3',
|
|
25
|
-
inputs: [
|
|
26
|
-
{ name: 'color', type: 'vec3' }
|
|
27
|
-
]
|
|
28
|
-
} );
|
|
22
|
+
}, { color: 'vec3', return: 'vec3' } );
|
|
29
23
|
|
|
30
24
|
/**
|
|
31
25
|
* Converts the given color value from linear-sRGB to sRGB color space.
|
|
@@ -45,10 +39,4 @@ export const sRGBTransferOETF = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
|
45
39
|
|
|
46
40
|
return rgbResult;
|
|
47
41
|
|
|
48
|
-
} )
|
|
49
|
-
name: 'sRGBTransferOETF',
|
|
50
|
-
type: 'vec3',
|
|
51
|
-
inputs: [
|
|
52
|
-
{ name: 'color', type: 'vec3' }
|
|
53
|
-
]
|
|
54
|
-
} );
|
|
42
|
+
}, { color: 'vec3', return: 'vec3' } );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
import { addMethodChaining, mat3, nodeObject, vec4 } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
4
|
import { SRGBTransfer } from '../../constants.js';
|
|
@@ -13,9 +13,9 @@ const OUTPUT_COLOR_SPACE = 'OutputColorSpace';
|
|
|
13
13
|
* This node represents a color space conversion. Meaning it converts
|
|
14
14
|
* a color value from a source to a target color space.
|
|
15
15
|
*
|
|
16
|
-
* @augments
|
|
16
|
+
* @augments Node
|
|
17
17
|
*/
|
|
18
|
-
class ColorSpaceNode extends
|
|
18
|
+
class ColorSpaceNode extends Node {
|
|
19
19
|
|
|
20
20
|
static get type() {
|
|
21
21
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
2
|
|
|
3
3
|
import { normalView, transformNormalToView } from '../accessors/Normal.js';
|
|
4
4
|
import { TBNViewMatrix } from '../accessors/AccessorsUtils.js';
|
|
@@ -16,9 +16,9 @@ import { error } from '../../utils.js';
|
|
|
16
16
|
* material.normalNode = normalMap( texture( normalTex ) );
|
|
17
17
|
* ```
|
|
18
18
|
*
|
|
19
|
-
* @augments
|
|
19
|
+
* @augments Node
|
|
20
20
|
*/
|
|
21
|
-
class NormalMapNode extends
|
|
21
|
+
class NormalMapNode extends Node {
|
|
22
22
|
|
|
23
23
|
static get type() {
|
|
24
24
|
|